tx · HqX88DHw6eWYsxzQr7t6QZXT99pMV2tpo6boXBhbFsTS

3P6xKmaEuiJsKMZs8gMGRvXP2Kva4f1oyac:  -0.01000000 Waves

2019.03.03 16:10 [1421005] smart account 3P6xKmaEuiJsKMZs8gMGRvXP2Kva4f1oyac > SELF 0.00000000 Waves

{ "type": 13, "id": "HqX88DHw6eWYsxzQr7t6QZXT99pMV2tpo6boXBhbFsTS", "fee": 1000000, "feeAssetId": null, "timestamp": 1551618709893, "version": 1, "sender": "3P6xKmaEuiJsKMZs8gMGRvXP2Kva4f1oyac", "senderPublicKey": "HNqsaPg1zKjJ5WuqqC7H3fE2eJbo7nNt2gb7dB89cbtr", "proofs": [ "5thLzsCwY53FHZRAMMrHQfmkqbmovYotzQKBwRsCQr5XRBiy6VDEEo1P59ERc3zjSkhFzzs7FmVXQToKcuqPRadX" ], "script": "base64:AQQAAAACbWUIBQAAAAJ0eAAAAAZzZW5kZXIEAAAABXR4RmVlAAAAAAAACSfABAAAAAd0aW1lb3V0AAAAAAAAAAAKBAAAAAhsaWZlc3BhbgAAAAAAAAAAHgQAAAADZXJyCQAAAgAAAAECAAAAAAQAAAAVc2VydmVyQ2hvaWNlSGFzaEJ5dGVzCQACWQAAAAECAAAAK1NzWlVYcmtEWjZvbnNyWTFHOUhlaEM2anlFYVYyOGVNTDVMb1BFdmExRVAEAAAAD3NlcnZlclB1YmxpY0tleQkAAlkAAAABAgAAACw2ZktjbnBXTDR2M0txNTFpM2o2em9jcThuWmg2OFIyNDVDVGFra2VKTGNxRgQAAAAGc2VydmVyCQEAAAARYWRkcmVzc0Zyb21TdHJpbmcAAAABAgAAACMzUE1UOXd1bjdCQjdKQUJTdWhUSnBGZ0pvZWdSZll3MmU2ZAQAAAAGcGxheWVyCQEAAAARYWRkcmVzc0Zyb21TdHJpbmcAAAABAgAAACMzUEFoRTR1U0YyUVFFSlVzOEQ3a3lHN1dnYzlNQkFIS0c4SAQAAAAQdG90YWxTZXJ2ZXJGdW5kcwAAAAAASyM6wAQAAAAOc3RhcnRpbmdIZWlnaHQAAAAAAAAVrs0EAAAACWRpY2VDb3VudAAAAAAAAAAAAwQAAAADYmV0AAAAAABTck4AAwkAAGcAAAACBQAAAAZoZWlnaHQFAAAADnN0YXJ0aW5nSGVpZ2h0BAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAAGcGF5b3V0BQAAAAckbWF0Y2gwAwMDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCAUAAAAGcGF5b3V0AAAAB2Fzc2V0SWQJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAZwYXlvdXQAAAAKZmVlQXNzZXRJZAcJAABnAAAAAggFAAAABnBheW91dAAAAANmZWUFAAAABXR4RmVlBwMJAABmAAAAAgkAAGUAAAACBQAAAAZoZWlnaHQFAAAADnN0YXJ0aW5nSGVpZ2h0BQAAAAhsaWZlc3BhbgQAAAAOc2lnbmVkQnlTZXJ2ZXIJAAH0AAAAAwgFAAAABnBheW91dAAA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", "chainId": 87, "height": 1421005, "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 1 #-}
2+{-# CONTENT_TYPE EXPRESSION #-}
3+let me = tx.sender
4+let txFee = 600000
5+let timeout = 10
6+let lifespan = 30
7+let err = throw("")
8+let serverChoiceHashBytes = fromBase58String("SsZUXrkDZ6onsrY1G9HehC6jyEaV28eML5LoPEva1EP")
9+let serverPublicKey = fromBase58String("6fKcnpWL4v3Kq51i3j6zocq8nZh68R245CTakkeJLcqF")
10+let server = addressFromString("3PMT9wun7BB7JABSuhTJpFgJoegRfYw2e6d")
11+let player = addressFromString("3PAhE4uSF2QQEJUs8D7kyG7Wgc9MBAHKG8H")
12+let totalServerFunds = 1260600000
13+let startingHeight = 1421005
14+let diceCount = 3
15+let bet = 1400000000
16+if ((height >= startingHeight))
17+ then match tx {
18+ case payout: TransferTransaction =>
19+ if (if (if (!(isDefined(payout.assetId)))
20+ then !(isDefined(payout.feeAssetId))
21+ else false)
22+ then (payout.fee >= txFee)
23+ else false)
24+ then if (((height - startingHeight) > lifespan))
25+ then {
26+ let signedByServer = sigVerify(payout.bodyBytes, payout.proofs[0], serverPublicKey)
27+ if (signedByServer)
28+ then if ((payout.recipient == server))
29+ then true
30+ else (payout.recipient == player)
31+ else false
32+ }
33+ else {
34+ let paymentId = payout.proofs[0]
35+ match transactionById(paymentId) {
36+ case payment: TransferTransaction =>
37+ let paymentHeight = extract(transactionHeightById(paymentId))
38+ if (if (if (if ((payment.amount == bet))
39+ then (payment.recipient == me)
40+ else false)
41+ then (payment.sender == player)
42+ else false)
43+ then !(isDefined(payment.assetId))
44+ else false)
45+ then if (((paymentHeight - startingHeight) > timeout))
46+ then (payout.recipient == server)
47+ else if (if (((totalServerFunds + bet) > wavesBalance(me)))
48+ then true
49+ else ((height - paymentHeight) > timeout))
50+ then (payout.recipient == player)
51+ else {
52+ let serverChoiceWithSalt = payout.attachment
53+ let playerChoice = payment.attachment
54+ let s = size(playerChoice)
55+ let serverChoice = take(serverChoiceWithSalt, 1)
56+ let serverChoiceValid = if (if (if (if (if ((serverChoice == toBytes("1")))
57+ then true
58+ else (serverChoice == toBytes("2")))
59+ then true
60+ else (serverChoice == toBytes("3")))
61+ then true
62+ else (serverChoice == toBytes("4")))
63+ then true
64+ else (serverChoice == toBytes("5")))
65+ then true
66+ else (serverChoice == toBytes("6"))
67+ let playerWins = if (!(serverChoiceValid))
68+ then true
69+ else if ((s == diceCount))
70+ then if (if (if (if (if (if ((s >= 1))
71+ then (take(drop(playerChoice, 0), 1) == serverChoice)
72+ else false)
73+ then true
74+ else if ((s >= 2))
75+ then (take(drop(playerChoice, 1), 1) == serverChoice)
76+ else false)
77+ then true
78+ else if ((s >= 3))
79+ then (take(drop(playerChoice, 2), 1) == serverChoice)
80+ else false)
81+ then true
82+ else if ((s >= 4))
83+ then (take(drop(playerChoice, 3), 1) == serverChoice)
84+ else false)
85+ then true
86+ else if ((s >= 5))
87+ then (take(drop(playerChoice, 4), 1) == serverChoice)
88+ else false)
89+ then true
90+ else if ((s >= 6))
91+ then (take(drop(playerChoice, 5), 1) == serverChoice)
92+ else false
93+ else false
94+ let recipientValid = (payout.recipient == (if (playerWins)
95+ then player
96+ else server))
97+ let signedByServer = sigVerify(payout.bodyBytes, payout.proofs[1], serverPublicKey)
98+ let hashValid = (keccak256(serverChoiceWithSalt) == serverChoiceHashBytes)
99+ let serverChoiceAndSaltValid = (size(serverChoiceWithSalt) == 38)
100+ if (if (if (recipientValid)
101+ then signedByServer
102+ else false)
103+ then hashValid
104+ else false)
105+ then serverChoiceAndSaltValid
106+ else false
107+ }
108+ else false
109+ case _ =>
110+ err
111+ }
112+ }
113+ else false
114+ case _ =>
115+ err
116+ }
117+ else false

github/deemru/w8io/3ef1775 
60.31 ms