tx · hfYMM1FSDQjeCJZDK3yLH6kefENk7H7ZrdfsnSBraSP

3MwGdE779Vhf4bkn8UbqQqEQwos38KtWhsn:  -0.01400000 Waves

2019.06.26 15:47 [559110] smart account 3MwGdE779Vhf4bkn8UbqQqEQwos38KtWhsn > SELF 0.00000000 Waves

{ "type": 13, "id": "hfYMM1FSDQjeCJZDK3yLH6kefENk7H7ZrdfsnSBraSP", "fee": 1400000, "feeAssetId": null, "timestamp": 1561553337387, "version": 1, "sender": "3MwGdE779Vhf4bkn8UbqQqEQwos38KtWhsn", "senderPublicKey": "H4suXc6RCHTrdq9J8rbqDw6qw4Rcc1QXgy8Zj19AqRSh", "proofs": [ "5JYfhpPpyP9aMAn8Dyd6XadkuRdA2G9XmBWdBxQvdnXTc4K38YkM8BW2tNnNKaVmB1QxNoBT7gR6vR9mbbtmhLNv" ], "script": "base64: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", "chainId": 84, "height": 559110, "spentComplexity": 0 } View: original | compacted Prev: FBRAnf31t8SZrBoUExHKKPmEQKtMS7CnBKKqfWMewuuF Next: 5gsdprFtzrKQ2xP4eRbY4Z1mPkPf8UnBnyV337HmAa7h Diff:
OldNewDifferences
1515
1616 let movesCount = 3
1717
18-let rock = 1
18+let rock = base58'1'
1919
20-let paper = 2
20+let paper = base58'2'
2121
22-let scissors = 3
22+let scissors = base58'3'
2323
24-func get (bytes,index) = toInt(take(drop(bytes, index), 1))
24+func get (bytes,index) = take(drop(bytes, index), 1)
2525
2626
2727 func getBinaryOr (key,default) = if (isDefined(getBinary(this, key)))
7373
7474
7575 @Callable(i)
76-func create (movesHash) = if (!(isDefined(i.payment)))
77- then throw("Create call should be payed with 1 WAVE.")
78- else {
79- let p = extract(i.payment)
80- if (isDefined(p.assetId))
81- then throw("Payment should be in WAVES.")
82- else if ((p.amount != (1 * waves)))
83- then throw("Amount should be 1 WAVE.")
84- else if ((size(movesHash) != hashSize))
85- then throw("Invalid moves.")
86- else WriteSet([store(((toBase58String(i.callerPublicKey) + "_") + toBase58String(i.transactionId)), movesHash)])
87- }
76+func create (movesHash) = {
77+ let p = extract(i.payment)
78+ if (isDefined(p.assetId))
79+ then throw("Payment should be in WAVES.")
80+ else if ((p.amount != (1 * waves)))
81+ then throw("Amount should be 1 WAVE.")
82+ else if ((size(movesHash) != hashSize))
83+ then throw("Invalid moves.")
84+ else WriteSet([store(((toBase58String(i.callerPublicKey) + "_") + toBase58String(i.transactionId)), movesHash)])
85+ }
8886
8987
9088
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let waves = 100000000
55
66 let empty = base58''
77
88 let hashSize = 32
99
1010 let keySize = 32
1111
1212 let longSize = 8
1313
1414 let fightTimeout = 100
1515
1616 let movesCount = 3
1717
18-let rock = 1
18+let rock = base58'1'
1919
20-let paper = 2
20+let paper = base58'2'
2121
22-let scissors = 3
22+let scissors = base58'3'
2323
24-func get (bytes,index) = toInt(take(drop(bytes, index), 1))
24+func get (bytes,index) = take(drop(bytes, index), 1)
2525
2626
2727 func getBinaryOr (key,default) = if (isDefined(getBinary(this, key)))
2828 then getBinaryValue(this, key)
2929 else default
3030
3131
3232 func isValidMove (move) = if (if ((move == rock))
3333 then true
3434 else (move == paper))
3535 then true
3636 else (move == scissors)
3737
3838
3939 func isValidMoves (moves) = if (if (if ((size(moves) >= movesCount))
4040 then isValidMove(get(moves, 0))
4141 else false)
4242 then isValidMove(get(moves, 1))
4343 else false)
4444 then isValidMove(get(moves, 2))
4545 else false
4646
4747
4848 func round (p1Moves,p2Moves,round) = {
4949 let m1 = get(p1Moves, round)
5050 let m2 = get(p2Moves, round)
5151 if ((m1 == m2))
5252 then 0
5353 else if (if (if (if ((m1 == scissors))
5454 then (m2 == paper)
5555 else false)
5656 then true
5757 else if ((m1 == rock))
5858 then (m2 == scissors)
5959 else false)
6060 then true
6161 else if ((m1 == paper))
6262 then (m2 == rock)
6363 else false)
6464 then -1
6565 else 1
6666 }
6767
6868
6969 func fight (p1Moves,p2Moves) = ((round(p1Moves, p2Moves, 0) + round(p1Moves, p2Moves, 1)) + round(p1Moves, p2Moves, 2))
7070
7171
7272 func store (fightId,data) = DataEntry(fightId, (getBinaryOr(fightId, empty) + data))
7373
7474
7575 @Callable(i)
76-func create (movesHash) = if (!(isDefined(i.payment)))
77- then throw("Create call should be payed with 1 WAVE.")
78- else {
79- let p = extract(i.payment)
80- if (isDefined(p.assetId))
81- then throw("Payment should be in WAVES.")
82- else if ((p.amount != (1 * waves)))
83- then throw("Amount should be 1 WAVE.")
84- else if ((size(movesHash) != hashSize))
85- then throw("Invalid moves.")
86- else WriteSet([store(((toBase58String(i.callerPublicKey) + "_") + toBase58String(i.transactionId)), movesHash)])
87- }
76+func create (movesHash) = {
77+ let p = extract(i.payment)
78+ if (isDefined(p.assetId))
79+ then throw("Payment should be in WAVES.")
80+ else if ((p.amount != (1 * waves)))
81+ then throw("Amount should be 1 WAVE.")
82+ else if ((size(movesHash) != hashSize))
83+ then throw("Invalid moves.")
84+ else WriteSet([store(((toBase58String(i.callerPublicKey) + "_") + toBase58String(i.transactionId)), movesHash)])
85+ }
8886
8987
9088
9189 @Callable(i)
9290 func join (fightId,moves) = {
9391 let p = extract(i.payment)
9492 if (isDefined(p.assetId))
9593 then throw("Payment should be in WAVES.")
9694 else if ((p.amount != (1 * waves)))
9795 then throw("Amount should be 1 WAVE.")
9896 else if (!(isDefined(getBinary(this, fightId))))
9997 then throw("Fight is not found.")
10098 else if ((size(getBinaryValue(this, fightId)) != hashSize))
10199 then throw("Fight is already started.")
102100 else if (!(isValidMoves(moves)))
103101 then throw("Invalid moves.")
104102 else WriteSet([store(fightId, ((toBytes(height) + i.callerPublicKey) + moves))])
105103 }
106104
107105
108106
109107 @Callable(i)
110108 func complete (fightId,moves) = if (!(isDefined(getBinary(this, fightId))))
111109 then throw("Fight is not found.")
112110 else {
113111 let fightData = getBinaryValue(this, fightId)
114112 if ((size(fightData) == hashSize))
115113 then throw("Fight is not started.")
116114 else if ((size(fightData) > (((hashSize + longSize) + keySize) + movesCount)))
117115 then throw("Fight is already finished.")
118116 else {
119117 let hashedMoves = take(getBinaryValue(this, fightId), hashSize)
120118 if (if ((hashedMoves != blake2b256(moves)))
121119 then true
122120 else !(isValidMoves(moves)))
123121 then throw("Invalid moves.")
124122 else {
125123 let p2PublicKey = takeRightBytes(dropRightBytes(fightData, movesCount), keySize)
126124 let r = fight(take(moves, movesCount), takeRightBytes(fightData, movesCount))
127125 ScriptResult(WriteSet([store(fightId, moves)]), TransferSet(if ((r == 0))
128126 then [ScriptTransfer(i.caller, (1 * waves), unit), ScriptTransfer(addressFromPublicKey(p2PublicKey), (1 * waves), unit)]
129127 else if ((0 > r))
130128 then [ScriptTransfer(i.caller, (2 * waves), unit)]
131129 else [ScriptTransfer(addressFromPublicKey(p2PublicKey), (2 * waves), unit)]))
132130 }
133131 }
134132 }
135133
136134
137135
138136 @Callable(i)
139137 func timeout (fightId) = if (!(isDefined(getBinary(this, fightId))))
140138 then throw("Fight is not found.")
141139 else {
142140 let fightData = getBinaryValue(this, fightId)
143141 if ((size(fightData) == hashSize))
144142 then throw("Fight is not started.")
145143 else if ((size(fightData) > (((hashSize + longSize) + keySize) + movesCount)))
146144 then throw("Fight is already finished.")
147145 else {
148146 let h = toInt(take(drop(fightData, hashSize), longSize))
149147 if ((fightTimeout > (height - h)))
150148 then throw("Player1 still has a time to complete the fight.")
151149 else {
152150 let p2PublicKey = takeRightBytes(dropRightBytes(fightData, movesCount), keySize)
153151 ScriptResult(WriteSet([store(fightId, p2PublicKey)]), TransferSet([ScriptTransfer(addressFromPublicKey(p2PublicKey), (2 * waves), unit)]))
154152 }
155153 }
156154 }
157155
158156

github/deemru/w8io/873ac7e 
53.63 ms