tx · FBRAnf31t8SZrBoUExHKKPmEQKtMS7CnBKKqfWMewuuF

3MwGdE779Vhf4bkn8UbqQqEQwos38KtWhsn:  -0.01400000 Waves

2019.06.26 15:11 [559076] smart account 3MwGdE779Vhf4bkn8UbqQqEQwos38KtWhsn > SELF 0.00000000 Waves

{ "type": 13, "id": "FBRAnf31t8SZrBoUExHKKPmEQKtMS7CnBKKqfWMewuuF", "fee": 1400000, "feeAssetId": null, "timestamp": 1561551090205, "version": 1, "sender": "3MwGdE779Vhf4bkn8UbqQqEQwos38KtWhsn", "senderPublicKey": "H4suXc6RCHTrdq9J8rbqDw6qw4Rcc1QXgy8Zj19AqRSh", "proofs": [ "5137k84A8qFiGPa7XBS7CZJXg8CJKgmERXQvP5ypnGBppzNB3jT6D2n6gkN4uqwmrbBRmGCftqMZdY5UQJKj27we" ], "script": "base64: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", "chainId": 84, "height": 559076, "spentComplexity": 0 } View: original | compacted Prev: HgMtaLYCJ5S9ybsVPQXNEBATfpLtjyyqMXn4d9Sr5mGA Next: hfYMM1FSDQjeCJZDK3yLH6kefENk7H7ZrdfsnSBraSP Diff:
OldNewDifferences
7373
7474
7575 @Callable(i)
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- }
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+ }
8688
8789
8890
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
1818 let rock = 1
1919
2020 let paper = 2
2121
2222 let scissors = 3
2323
2424 func get (bytes,index) = toInt(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) = {
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- }
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+ }
8688
8789
8890
8991 @Callable(i)
9092 func join (fightId,moves) = {
9193 let p = extract(i.payment)
9294 if (isDefined(p.assetId))
9395 then throw("Payment should be in WAVES.")
9496 else if ((p.amount != (1 * waves)))
9597 then throw("Amount should be 1 WAVE.")
9698 else if (!(isDefined(getBinary(this, fightId))))
9799 then throw("Fight is not found.")
98100 else if ((size(getBinaryValue(this, fightId)) != hashSize))
99101 then throw("Fight is already started.")
100102 else if (!(isValidMoves(moves)))
101103 then throw("Invalid moves.")
102104 else WriteSet([store(fightId, ((toBytes(height) + i.callerPublicKey) + moves))])
103105 }
104106
105107
106108
107109 @Callable(i)
108110 func complete (fightId,moves) = if (!(isDefined(getBinary(this, fightId))))
109111 then throw("Fight is not found.")
110112 else {
111113 let fightData = getBinaryValue(this, fightId)
112114 if ((size(fightData) == hashSize))
113115 then throw("Fight is not started.")
114116 else if ((size(fightData) > (((hashSize + longSize) + keySize) + movesCount)))
115117 then throw("Fight is already finished.")
116118 else {
117119 let hashedMoves = take(getBinaryValue(this, fightId), hashSize)
118120 if (if ((hashedMoves != blake2b256(moves)))
119121 then true
120122 else !(isValidMoves(moves)))
121123 then throw("Invalid moves.")
122124 else {
123125 let p2PublicKey = takeRightBytes(dropRightBytes(fightData, movesCount), keySize)
124126 let r = fight(take(moves, movesCount), takeRightBytes(fightData, movesCount))
125127 ScriptResult(WriteSet([store(fightId, moves)]), TransferSet(if ((r == 0))
126128 then [ScriptTransfer(i.caller, (1 * waves), unit), ScriptTransfer(addressFromPublicKey(p2PublicKey), (1 * waves), unit)]
127129 else if ((0 > r))
128130 then [ScriptTransfer(i.caller, (2 * waves), unit)]
129131 else [ScriptTransfer(addressFromPublicKey(p2PublicKey), (2 * waves), unit)]))
130132 }
131133 }
132134 }
133135
134136
135137
136138 @Callable(i)
137139 func timeout (fightId) = if (!(isDefined(getBinary(this, fightId))))
138140 then throw("Fight is not found.")
139141 else {
140142 let fightData = getBinaryValue(this, fightId)
141143 if ((size(fightData) == hashSize))
142144 then throw("Fight is not started.")
143145 else if ((size(fightData) > (((hashSize + longSize) + keySize) + movesCount)))
144146 then throw("Fight is already finished.")
145147 else {
146148 let h = toInt(take(drop(fightData, hashSize), longSize))
147149 if ((fightTimeout > (height - h)))
148150 then throw("Player1 still has a time to complete the fight.")
149151 else {
150152 let p2PublicKey = takeRightBytes(dropRightBytes(fightData, movesCount), keySize)
151153 ScriptResult(WriteSet([store(fightId, p2PublicKey)]), TransferSet([ScriptTransfer(addressFromPublicKey(p2PublicKey), (2 * waves), unit)]))
152154 }
153155 }
154156 }
155157
156158

github/deemru/w8io/6500d08 
44.96 ms