tx · AJwraVHbGZETX4LA2k7ejNkSYinksMEwywySndVxnocB

3Mu46QfBkouwvPnhYc6QZa45NAFTpiD64YG:  -0.01000000 Waves

2019.02.12 21:10 [492264] smart account 3Mu46QfBkouwvPnhYc6QZa45NAFTpiD64YG > SELF 0.00000000 Waves

{ "type": 13, "id": "AJwraVHbGZETX4LA2k7ejNkSYinksMEwywySndVxnocB", "fee": 1000000, "feeAssetId": null, "timestamp": 1549995150780, "version": 1, "sender": "3Mu46QfBkouwvPnhYc6QZa45NAFTpiD64YG", "senderPublicKey": "6pNwnxPaq9gFLzCbWjiseC5UTT3Gtt3RFwaQ6bMshN6p", "proofs": [ "23b1sMssJxxzSmJZhYY6zRJusEH7UcmFU8CqZjFtV9NAUtbkzEpf38aqgoXD9wQ6AtE4Yb6rDU1e24RiCdA4qdov" ], "script": "base64:AQQAAAACbWUIBQAAAAJ0eAAAAAZzZW5kZXIEAAAABm9yYWNsZQkBAAAAB2V4dHJhY3QAAAABCQEAAAARYWRkcmVzc0Zyb21TdHJpbmcAAAABAgAAACMzTkN6YVlUTkRHdFI4emY5eWZjcWVQRmpDcUZ4OVM1emhzNAQAAAAObWluV2l0aGRyYXdGZWUAAAAAAAAHoSAEAAAAEHJlZ2lzdGVyQmV0VHhGZWUAAAAAAAAHoSAEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAp3aXRoZHJhd1R4BQAAAAckbWF0Y2gwBAAAAA5wYXltZW50VHhJZFN0cgkAAlgAAAABCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAEEAAAACndpdGhkcmF3SWQJAQAAAAdleHRyYWN0AAAAAQkABB0AAAACBQAAAAJtZQkAASwAAAACBQAAAA5wYXltZW50VHhJZFN0cgIAAAAJX3dpdGhkcmF3BAAAAAckbWF0Y2gxCQAD6AAAAAEJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAQMJAAABAAAAAgUAAAAHJG1hdGNoMQIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAAJcGF5bWVudFR4BQAAAAckbWF0Y2gxBAAAAA93aXRoZHJhd0FsbG93ZWQDCQAAAAAAAAIFAAAACndpdGhkcmF3SWQJAAJYAAAAAQgFAAAAAnR4AAAAAmlkCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAACXBheW1lbnRUeAAAAA9zZW5kZXJQdWJsaWNLZXkHBAAAAAdmZWVzS2V5CQABLAAAAAIJAAJYAAAAAQkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAABAgAAAA5fd2l0aGRyYXdfZmVlcwQAAAALZGF0YVR4c0ZlZXMJAQAAAAdleHRyYWN0AAAAAQkABBoAAAACBQAAAAJtZQUAAAAHZmVlc0tleQQAAAAJd2luQW1vdW50CQEAAAAHZXh0cmFjdAAAAAEJAAQaAAAAAgUAAAACbWUJAAEsAAAAAgUAAAAOcGF5bWVudFR4SWRTdHICAAAABF93aW4EAAAADWNvcnJlY3RBbW91bnQJAABlAAAAAgkAAGUAAAACBQAAAAl3aW5BbW91bnQFAAAAC2RhdGFUeHNGZWVzCAUAAAAKd2l0aGRyYXdUeAAAAANmZWUEAAAACWlzSW5XYXZlcwMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAp3aXRoZHJhd1R4AAAACmZlZUFzc2V0SWQJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAp3aXRoZHJhd1R4AAAAB2Fzc2V0SWQHAwMDBQAAAA93aXRoZHJhd0FsbG93ZWQGCQAAAgAAAAECAAAAQ1dpdGhkcmF3IGlzbid0IHJlZ2lzdGVyZWQgb3IgaXNuJ3Qgc2lnbmVkIGJ5IG9yaWduYWwgcGF5bWVudCBzZW5kZXIDCQAAAAAAAAIIBQAAAAp3aXRoZHJhd1R4AAAABmFtb3VudAUAAAANY29ycmVjdEFtb3VudAYJAAACAAAAAQkAASwAAAACAgAAADNBbW91bnQgb2Ygd2l0aGRyYXcgaXMgaW5jb3JyZWN0LiBDb3JyZWN0IGFtb3VudCBpcyAJAAGkAAAAAQUAAAANY29ycmVjdEFtb3VudAcDBQAAAAlpc0luV2F2ZXMGCQAAAgAAAAECAAAAIVdpdGhkcmF3IGFuZCBmZWUgbXVzdCBiZSBpbiBXQVZFUwcHAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAA9EYXRhVHJhbnNhY3Rpb24EAAAAA2R0eAUAAAAHJG1hdGNoMAMJAAAAAAAAAgkAAZAAAAABCAUAAAADZHR4AAAABGRhdGEAAAAAAAAAAAEEAAAABndpblN0cgkBAAAAB2V4dHJhY3QAAAABCAkAAZEAAAACCAUAAAADZHR4AAAABGRhdGEAAAAAAAAAAAAAAAADa2V5BAAAAA5wYXltZW50VHhJZFN0cgkBAAAACWRyb3BSaWdodAAAAAIFAAAABndpblN0cgAAAAAAAAAABAQAAAAFZ3Vlc3MJAQAAAAdleHRyYWN0AAAAAQkABB0AAAACBQAAAAJtZQUAAAAOcGF5bWVudFR4SWRTdHIEAAAACmxpbmtUb0dhbWUJAQAAAAdleHRyYWN0AAAAAQkABB0AAAACBQAAAAJtZQkAASwAAAACBQAAAA5wYXltZW50VHhJZFN0cgIAAAAGX3JvdW5kBAAAAAxyZXN1bHRPZkdhbWUJAQAAAAdleHRyYWN0AAAAAQkABB0AAAACBQAAAAZvcmFjbGUFAAAACmxpbmtUb0dhbWUEAAAACXBheW1lbnRUeAkAA+gAAAABCQACWQAAAAEFAAAADnBheW1lbnRUeElkU3RyBAAAAAckbWF0Y2gxBQAAAAlwYXltZW50VHgDCQAAAQAAAAIFAAAAByRtYXRjaDECAAAAE1RyYW5zZmVyVHJhbnNhY3Rpb24EAAAACXBheW1lbnRUeAUAAAAHJG1hdGNoMQMJAAAAAAAAAgUAAAAFZ3Vlc3MFAAAADHJlc3VsdE9mR2FtZQQAAAAEc3VtMAMJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAAAm1lCQABLAAAAAIFAAAACmxpbmtUb0dhbWUCAAAAAl8wCQEAAAAHZXh0cmFjdAAAAAEJAAQaAAAAAgUAAAACbWUJAAEsAAAAAgUAAAAKbGlua1RvR2FtZQIAAAACXzAAAAAAAAAAAAAEAAAABHN1bTEDCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAJtZQkAASwAAAACBQAAAApsaW5rVG9HYW1lAgAAAAJfMQkBAAAAB2V4dHJhY3QAAAABCQAEGgAAAAIFAAAAAm1lCQABLAAAAAIFAAAACmxpbmtUb0dhbWUCAAAAAl8xAAAAAAAAAAAABAAAAARzdW0yAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAACbWUJAAEsAAAAAgUAAAAKbGlua1RvR2FtZQIAAAACXzIJAQAAAAdleHRyYWN0AAAAAQkABBoAAAACBQAAAAJtZQkAASwAAAACBQAAAApsaW5rVG9HYW1lAgAAAAJfMgAAAAAAAAAAAAQAAAAFdG90YWwJAABkAAAAAgkAAGQAAAACBQAAAARzdW0wBQAAAARzdW0xBQAAAARzdW0yBAAAAAVrb2VmZgMJAAAAAAAAAgUAAAAMcmVzdWx0T2ZHYW1lAgAAAAEwCQAAaQAAAAIFAAAABXRvdGFsBQAAAARzdW0wAwkAAAAAAAACBQAAAAxyZXN1bHRPZkdhbWUCAAAAATEJAABpAAAAAgUAAAAFdG90YWwFAAAABHN1bTEDCQAAAAAAAAIFAAAADHJlc3VsdE9mR2FtZQIAAAABMgkAAGkAAAACBQAAAAV0b3RhbAUAAAAEc3VtMgkAAAIAAAABAgAAAC5JbnRlcm5hbCBlcnJvci4gV3JvbmcgdmFsdWUgZm9yIHJlc3VsdCBvZiBnYW1lCQAAAAAAAAIJAABlAAAAAgkAAGgAAAACCQAAZQAAAAIIBQAAAAlwYXltZW50VHgAAAAGYW1vdW50BQAAABByZWdpc3RlckJldFR4RmVlBQAAAAVrb2VmZggFAAAAA2R0eAAAAANmZWUJAQAAAAdleHRyYWN0AAAAAQkABBAAAAACCAUAAAADZHR4AAAABGRhdGEICQABkQAAAAIIBQAAAANkdHgAAAAEZGF0YQAAAAAAAAAAAAAAAANrZXkJAAACAAAAAQIAAAAXWW91IGRpZG4ndCBndWVzcyByaWdodC4HAwkAAAAAAAACCQABkAAAAAEIBQAAAANkdHgAAAAEZGF0YQAAAAAAAAAAAgQAAAALd2l0aGRyYXdTdHIJAQAAAAdleHRyYWN0AAAAAQgJAAGRAAAAAggFAAAAA2R0eAAAAARkYXRhAAAAAAAAAAAAAAAAA2tleQQAAAAOcGF5bWVudFR4SWRTdHIJAQAAAAlkcm9wUmlnaHQAAAACBQAAAAt3aXRoZHJhd1N0cgAAAAAAAAAACQQAAAAJd2luQW1vdW50CQEAAAAHZXh0cmFjdAAAAAEJAAQaAAAAAgUAAAACbWUJAAEsAAAAAgUAAAAOcGF5bWVudFR4SWRTdHICAAAABF93aW4EAAAAB2ZlZXNLZXkJAAEsAAAAAgkBAAAAB2V4dHJhY3QAAAABCAkAAZEAAAACCAUAAAADZHR4AAAABGRhdGEAAAAAAAAAAAAAAAADa2V5AgAAAAVfZmVlcwQAAAAHbmV3RmVlcwkBAAAAB2V4dHJhY3QAAAABCQAEEAAAAAIIBQAAAANkdHgAAAAEZGF0YQUAAAAHZmVlc0tleQQAAAAHb2xkRmVlcwMJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAAAm1lBQAAAAdmZWVzS2V5CQEAAAAHZXh0cmFjdAAAAAEJAAQaAAAAAgUAAAACbWUFAAAAB2ZlZXNLZXkAAAAAAAAAAAAEAAAADGlzRmVlQ29ycmVjdAkAAAAAAAACBQAAAAduZXdGZWVzCQAAZAAAAAIFAAAAB29sZEZlZXMIBQAAAANkdHgAAAADZmVlBAAAABlpc1BheW1lbnRBbHJlYWR5TWVudGlvbmVkCQEAAAAJaXNEZWZpbmVkAAAAAQkABB0AAAACBQAAAAJtZQUAAAALd2l0aGRyYXdTdHIEAAAAFXdpdGhkcmF3VHJhbnNhY3Rpb25JZAkAAlkAAAABCQEAAAAHZXh0cmFjdAAAAAEJAAQdAAAAAgUAAAACbWUFAAAAC3dpdGhkcmF3U3RyBAAAAA9pc1dpdGhkcmF3RXhpc3QJAQAAAAlpc0RlZmluZWQAAAABCQAD6AAAAAEFAAAAFXdpdGhkcmF3VHJhbnNhY3Rpb25JZAMDAwMDCQEAAAABIQAAAAEFAAAAGWlzUGF5bWVudEFscmVhZHlNZW50aW9uZWQGCQEAAAABIQAAAAEFAAAAD2lzV2l0aGRyYXdFeGlzdAYJAAACAAAAAQIAAAAjV2l0aGRyYXcgZm9yIHRoaXMgYmV0IGFscmVhZHkgZXhpc3QFAAAADGlzRmVlQ29ycmVjdAcGCQAAAgAAAAECAAAAJFZhbHVlIGZvciB3aXRoZHJhdyBmZWVzIGlzIGluY29ycmVjdAMJAABmAAAAAgUAAAAJd2luQW1vdW50CQAAZQAAAAIFAAAAB25ld0ZlZXMFAAAADm1pbldpdGhkcmF3RmVlBgkAAAIAAAABAgAAACVXaW4gYW1vdW50IGlzIG5vdCBlbm91Z2ggZm9yIGFsbCBmZWVzBwMJAAAAAAAAAgkAAZAAAAABCAUAAAADZHR4AAAABGRhdGEAAAAAAAAAAAMEAAAADnBheW1lbnRUeElkU3RyCQEAAAAHZXh0cmFjdAAAAAEICQABkQAAAAIIBQAAAANkdHgAAAAEZGF0YQAAAAAAAAAAAAAAAANrZXkEAAAACGd1ZXNzU3RyCQEAAAAHZXh0cmFjdAAAAAEJAAQTAAAAAggFAAAAA2R0eAAAAARkYXRhBQAAAA5wYXltZW50VHhJZFN0cgQAAAAPcGF5bWVudFJvdW5kS2V5CQABLAAAAAIFAAAADnBheW1lbnRUeElkU3RyAgAAAAZfcm91bmQEAAAADHBheW1lbnRSb3VuZAkBAAAAB2V4dHJhY3QAAAABCQAEEwAAAAIIBQAAAANkdHgAAAAEZGF0YQUAAAAPcGF5bWVudFJvdW5kS2V5BAAAAApzdW1CZXRzT2xkAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAACbWUJAAEsAAAAAgkAASwAAAACBQAAAAxwYXltZW50Um91bmQCAAAAAV8FAAAACGd1ZXNzU3RyCQEAAAAHZXh0cmFjdAAAAAEJAAQaAAAAAgUAAAACbWUJAAEsAAAAAgkAASwAAAACBQAAAAxwYXltZW50Um91bmQCAAAAAV8FAAAACGd1ZXNzU3RyAAAAAAAAAAAABAAAAApzdW1CZXRzTmV3CQEAAAAHZXh0cmFjdAAAAAEJAAQQAAAAAggFAAAAA2R0eAAAAARkYXRhCQABLAAAAAIJAAEsAAAAAgUAAAAMcGF5bWVudFJvdW5kAgAAAAFfBQAAAAhndWVzc1N0cgQAAAAZaXNQYXltZW50QWxyZWFkeU1lbnRpb25lZAkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgUAAAACbWUFAAAADnBheW1lbnRUeElkU3RyBAAAAAlwYXltZW50VHgJAAPoAAAAAQkAAlkAAAABBQAAAA5wYXltZW50VHhJZFN0cgQAAAAHJG1hdGNoMQUAAAAJcGF5bWVudFR4AwkAAAEAAAACBQAAAAckbWF0Y2gxAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAlwYXltZW50VHgFAAAAByRtYXRjaDEEAAAAEmlzRHR4U2lnbmVkQnlQYXllcgkAAfQAAAADCAUAAAADZHR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAADZHR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAACXBheW1lbnRUeAAAAA9zZW5kZXJQdWJsaWNLZXkDCQEAAAABIQAAAAEFAAAAGWlzUGF5bWVudEFscmVhZHlNZW50aW9uZWQJAAAAAAAAAgUAAAAKc3VtQmV0c05ldwkAAGUAAAACCQAAZAAAAAIFAAAACnN1bUJldHNPbGQIBQAAAAlwYXltZW50VHgAAAAGYW1vdW50CAUAAAADZHR4AAAAA2ZlZQcHBwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXlXYE7u", "chainId": 84, "height": 492264, "spentComplexity": 0 } View: original | compacted Prev: none Next: 5rgEVY2Jv4Du8fJdbMatAZ2qcYakztvEds3n4XDfPopD Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 1 #-}
2+{-# CONTENT_TYPE EXPRESSION #-}
3+let me = tx.sender
4+let oracle = extract(addressFromString("3NCzaYTNDGtR8zf9yfcqePFjCqFx9S5zhs4"))
5+let minWithdrawFee = 500000
6+let registerBetTxFee = 500000
7+match tx {
8+ case withdrawTx: TransferTransaction =>
9+ let paymentTxIdStr = toBase58String(tx.proofs[1])
10+ let withdrawId = extract(getString(me, (paymentTxIdStr + "_withdraw")))
11+ match transactionById(tx.proofs[1]) {
12+ case paymentTx: TransferTransaction =>
13+ let withdrawAllowed = if ((withdrawId == toBase58String(tx.id)))
14+ then sigVerify(tx.bodyBytes, tx.proofs[0], paymentTx.senderPublicKey)
15+ else false
16+ let feesKey = (toBase58String(tx.proofs[1]) + "_withdraw_fees")
17+ let dataTxsFees = extract(getInteger(me, feesKey))
18+ let winAmount = extract(getInteger(me, (paymentTxIdStr + "_win")))
19+ let correctAmount = ((winAmount - dataTxsFees) - withdrawTx.fee)
20+ let isInWaves = if (!(isDefined(withdrawTx.feeAssetId)))
21+ then !(isDefined(withdrawTx.assetId))
22+ else false
23+ if (if (if (withdrawAllowed)
24+ then true
25+ else throw("Withdraw isn't registered or isn't signed by orignal payment sender"))
26+ then if ((withdrawTx.amount == correctAmount))
27+ then true
28+ else throw(("Amount of withdraw is incorrect. Correct amount is " + toString(correctAmount)))
29+ else false)
30+ then if (isInWaves)
31+ then true
32+ else throw("Withdraw and fee must be in WAVES")
33+ else false
34+ case _ =>
35+ false
36+ }
37+ case dtx: DataTransaction =>
38+ if ((size(dtx.data) == 1))
39+ then {
40+ let winStr = extract(dtx.data[0].key)
41+ let paymentTxIdStr = dropRight(winStr, 4)
42+ let guess = extract(getString(me, paymentTxIdStr))
43+ let linkToGame = extract(getString(me, (paymentTxIdStr + "_round")))
44+ let resultOfGame = extract(getString(oracle, linkToGame))
45+ let paymentTx = transactionById(fromBase58String(paymentTxIdStr))
46+ match paymentTx {
47+ case paymentTx: TransferTransaction =>
48+ if ((guess == resultOfGame))
49+ then {
50+ let sum0 = if (isDefined(getInteger(me, (linkToGame + "_0"))))
51+ then extract(getInteger(me, (linkToGame + "_0")))
52+ else 0
53+ let sum1 = if (isDefined(getInteger(me, (linkToGame + "_1"))))
54+ then extract(getInteger(me, (linkToGame + "_1")))
55+ else 0
56+ let sum2 = if (isDefined(getInteger(me, (linkToGame + "_2"))))
57+ then extract(getInteger(me, (linkToGame + "_2")))
58+ else 0
59+ let total = ((sum0 + sum1) + sum2)
60+ let koeff = if ((resultOfGame == "0"))
61+ then (total / sum0)
62+ else if ((resultOfGame == "1"))
63+ then (total / sum1)
64+ else if ((resultOfGame == "2"))
65+ then (total / sum2)
66+ else throw("Internal error. Wrong value for result of game")
67+ ((((paymentTx.amount - registerBetTxFee) * koeff) - dtx.fee) == extract(getInteger(dtx.data, dtx.data[0].key)))
68+ }
69+ else throw("You didn't guess right.")
70+ case _ =>
71+ false
72+ }
73+ }
74+ else if ((size(dtx.data) == 2))
75+ then {
76+ let withdrawStr = extract(dtx.data[0].key)
77+ let paymentTxIdStr = dropRight(withdrawStr, 9)
78+ let winAmount = extract(getInteger(me, (paymentTxIdStr + "_win")))
79+ let feesKey = (extract(dtx.data[0].key) + "_fees")
80+ let newFees = extract(getInteger(dtx.data, feesKey))
81+ let oldFees = if (isDefined(getInteger(me, feesKey)))
82+ then extract(getInteger(me, feesKey))
83+ else 0
84+ let isFeeCorrect = (newFees == (oldFees + dtx.fee))
85+ let isPaymentAlreadyMentioned = isDefined(getString(me, withdrawStr))
86+ let withdrawTransactionId = fromBase58String(extract(getString(me, withdrawStr)))
87+ let isWithdrawExist = isDefined(transactionById(withdrawTransactionId))
88+ if (if (if (if (if (!(isPaymentAlreadyMentioned))
89+ then true
90+ else !(isWithdrawExist))
91+ then true
92+ else throw("Withdraw for this bet already exist"))
93+ then isFeeCorrect
94+ else false)
95+ then true
96+ else throw("Value for withdraw fees is incorrect"))
97+ then if ((winAmount > (newFees - minWithdrawFee)))
98+ then true
99+ else throw("Win amount is not enough for all fees")
100+ else false
101+ }
102+ else if ((size(dtx.data) == 3))
103+ then {
104+ let paymentTxIdStr = extract(dtx.data[0].key)
105+ let guessStr = extract(getString(dtx.data, paymentTxIdStr))
106+ let paymentRoundKey = (paymentTxIdStr + "_round")
107+ let paymentRound = extract(getString(dtx.data, paymentRoundKey))
108+ let sumBetsOld = if (isDefined(getInteger(me, ((paymentRound + "_") + guessStr))))
109+ then extract(getInteger(me, ((paymentRound + "_") + guessStr)))
110+ else 0
111+ let sumBetsNew = extract(getInteger(dtx.data, ((paymentRound + "_") + guessStr)))
112+ let isPaymentAlreadyMentioned = isDefined(getString(me, paymentTxIdStr))
113+ let paymentTx = transactionById(fromBase58String(paymentTxIdStr))
114+ match paymentTx {
115+ case paymentTx: TransferTransaction =>
116+ let isDtxSignedByPayer = sigVerify(dtx.bodyBytes, dtx.proofs[0], paymentTx.senderPublicKey)
117+ if (!(isPaymentAlreadyMentioned))
118+ then (sumBetsNew == ((sumBetsOld + paymentTx.amount) - dtx.fee))
119+ else false
120+ case _ =>
121+ false
122+ }
123+ }
124+ else false
125+ case _ =>
126+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
127+}

github/deemru/w8io/026f985 
17.45 ms