tx · 4KwgyXgaaMvZfcZTk6cfv9MSF7szbydm8ni3az6SYSuR

3Ms2w9wW9gFGhvgfdFSHtro1Hfx7mPNoita:  -0.01400000 Waves

2019.02.10 18:22 [489216] smart account 3Ms2w9wW9gFGhvgfdFSHtro1Hfx7mPNoita > SELF 0.00000000 Waves

{ "type": 13, "id": "4KwgyXgaaMvZfcZTk6cfv9MSF7szbydm8ni3az6SYSuR", "fee": 1400000, "feeAssetId": null, "timestamp": 1549812147705, "version": 1, "sender": "3Ms2w9wW9gFGhvgfdFSHtro1Hfx7mPNoita", "senderPublicKey": "H29vH3ZF7qgcLy8mZb3RU72EgJ55GBRcEmnMqEQX4JcQ", "proofs": [ "2jr5CqnNEEF9sLgQvyL5Yo1oCXY1vTcVa66ttKdQap5Pf91DZ9bQA5wnanrCzQ1ThejYDx2QUubwLJz9nX3Hr9Ln" ], "script": "base64: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", "chainId": 84, "height": 489216, "spentComplexity": 0 } View: original | compacted Prev: Fw8m1VQy5M89cAUsRA26o4ZamH6aSpW1hmhxeG1zKPe6 Next: none Diff:
OldNewDifferences
33 let me = tx.sender
44 let oracle = extract(addressFromString("3NCzaYTNDGtR8zf9yfcqePFjCqFx9S5zhs4"))
55 let minWithdrawFee = 400000
6-let minBet = 50000000
7-let maxBet = 500000000
86 match tx {
97 case withdrawTx: TransferTransaction =>
108 let txId = extract(getString(me, toBase58String(tx.proofs[1])))
1311 let isPaymentTookPlace = if ((txId == toBase58String(tx.id)))
1412 then sigVerify(tx.bodyBytes, tx.proofs[0], paymentTx.senderPublicKey)
1513 else false
16- let att = paymentTx.attachment
1714 let feesKey = (toBase58String(tx.proofs[1]) + "_fees")
1815 let dataTxsFees = extract(getInteger(me, feesKey))
19- let type = dropRightBytes(takeRightBytes(att, 2), 1)
20- let val = takeRightBytes(att, 1)
21- let key = dropRightBytes(att, 2)
22- let valComplex = extract(getBinary(oracle, toBase58String(key)))
16+ let guess = extract(getBinary(me, toBase58String(tx.proofs[1])))
17+ let type = take(guess, 1)
18+ let val = drop(guess, 1)
19+ let key = extract(getString(me, (toBase58String(tx.proofs[1]) + "_round")))
20+ let valComplex = extract(getBinary(oracle, key))
2321 let koeff = if ((type == drop(toBytes(0), 7)))
24- then 36
22+ then 35
2523 else if ((type == drop(toBytes(1), 7)))
2624 then 2
2725 else if ((type == drop(toBytes(2), 7)))
3331 else if ((type == drop(toBytes(5), 7)))
3432 then 3
3533 else 0
36- let paymentAmount = if ((maxBet >= paymentTx.amount))
37- then paymentTx.amount
38- else maxBet
39- let correctAmount = (((paymentAmount * koeff) - dataTxsFees) - withdrawTx.fee)
34+ let correctAmount = (((paymentTx.amount * koeff) - dataTxsFees) - withdrawTx.fee)
4035 let isAmountOk = (withdrawTx.amount == correctAmount)
4136 let isInWaves = if (!(isDefined(withdrawTx.feeAssetId)))
4237 then !(isDefined(withdrawTx.assetId))
4338 else false
44- if (if (if (isPaymentTookPlace)
39+ if (if (isPaymentTookPlace)
4540 then isAmountOk
4641 else false)
4742 then isInWaves
48- else false)
49- then (paymentAmount >= minBet)
5043 else false
5144 case _ =>
5245 false
5346 }
5447 case dtx: DataTransaction =>
55- let isDataCountOk = (size(dtx.data) == 2)
56- let paymentTxIdStr = extract(dtx.data[0].key)
57- let feesKey = (paymentTxIdStr + "_fees")
58- let paymentTx = transactionById(fromBase58String(paymentTxIdStr))
59- let newFees = extract(getInteger(dtx.data, feesKey))
60- let oldFees = if (isDefined(getInteger(me, feesKey)))
61- then extract(getInteger(me, feesKey))
62- else 0
63- let isFeeCorrect = (newFees == (oldFees + dtx.fee))
64- let isPaymentAlreadyMentioned = isDefined(getString(me, paymentTxIdStr))
65- let withdrawTransactionId = fromBase58String(extract(getString(me, paymentTxIdStr)))
66- let isWithdrawExist = isDefined(transactionById(withdrawTransactionId))
67- match paymentTx {
68- case paymentTx: TransferTransaction =>
69- let isDtxSignedByPayer = sigVerify(dtx.bodyBytes, dtx.proofs[0], paymentTx.senderPublicKey)
70- if (if (if (if (if (!(isPaymentAlreadyMentioned))
71- then true
72- else !(isWithdrawExist))
73- then isDtxSignedByPayer
74- else false)
75- then isFeeCorrect
76- else false)
77- then isDataCountOk
78- else false)
79- then {
80- let att = paymentTx.attachment
81- let type = dropRightBytes(takeRightBytes(att, 2), 1)
82- let val = takeRightBytes(att, 1)
83- let key = dropRightBytes(att, 2)
84- let heightRes = extract(getInteger(oracle, (toBase58String(key) + "height")))
85- let isCheater = (extract(transactionHeightById(paymentTx.id)) >= heightRes)
86- let valComplex = extract(getBinary(oracle, toBase58String(key)))
87- let koeff = if ((type == drop(toBytes(0), 7)))
88- then 36
89- else if ((type == drop(toBytes(1), 7)))
90- then 2
91- else if ((type == drop(toBytes(2), 7)))
92- then 2
93- else if ((type == drop(toBytes(3), 7)))
48+ if ((size(dtx.data) == 2))
49+ then {
50+ let isDataCountOk = (size(dtx.data) == 2)
51+ let paymentTxIdStr = extract(dtx.data[0].key)
52+ let feesKey = (paymentTxIdStr + "_fees")
53+ let paymentTx = transactionById(fromBase58String(paymentTxIdStr))
54+ let newFees = extract(getInteger(dtx.data, feesKey))
55+ let oldFees = if (isDefined(getInteger(me, feesKey)))
56+ then extract(getInteger(me, feesKey))
57+ else 0
58+ let isFeeCorrect = (newFees == (oldFees + dtx.fee))
59+ let isPaymentAlreadyMentioned = isDefined(getString(me, paymentTxIdStr))
60+ let withdrawTransactionId = fromBase58String(extract(getString(me, paymentTxIdStr)))
61+ let isWithdrawExist = isDefined(transactionById(withdrawTransactionId))
62+ match paymentTx {
63+ case paymentTx: TransferTransaction =>
64+ let isDtxSignedByPayer = sigVerify(dtx.bodyBytes, dtx.proofs[0], paymentTx.senderPublicKey)
65+ if (if (if (if (if (!(isPaymentAlreadyMentioned))
66+ then true
67+ else !(isWithdrawExist))
68+ then isDtxSignedByPayer
69+ else false)
70+ then isFeeCorrect
71+ else false)
72+ then isDataCountOk
73+ else false)
74+ then {
75+ let att = paymentTx.attachment
76+ let type = dropRightBytes(takeRightBytes(att, 2), 1)
77+ let val = takeRightBytes(att, 1)
78+ let key = dropRightBytes(att, 2)
79+ let heightRes = extract(getInteger(oracle, (toBase58String(key) + "height")))
80+ let isCheater = (extract(transactionHeightById(paymentTx.id)) >= heightRes)
81+ let valComplex = extract(getBinary(oracle, toBase58String(key)))
82+ let koeff = if ((type == drop(toBytes(0), 7)))
83+ then 35
84+ else if ((type == drop(toBytes(1), 7)))
9485 then 2
95- else if ((type == drop(toBytes(4), 7)))
96- then 3
97- else if ((type == drop(toBytes(5), 7)))
98- then 3
99- else 0
100- let isMoneyStillEnough = (((paymentTx.amount * koeff) + minWithdrawFee) > newFees)
101- let ver = take(valComplex, 1)
102- let valReal = if ((type == drop(toBytes(0), 7)))
103- then drop(take(valComplex, 2), 1)
104- else if ((type == drop(toBytes(1), 7)))
105- then drop(take(valComplex, 3), 2)
106- else if ((type == drop(toBytes(2), 7)))
107- then drop(take(valComplex, 4), 3)
108- else if ((type == drop(toBytes(3), 7)))
109- then drop(take(valComplex, 5), 4)
110- else if ((type == drop(toBytes(4), 7)))
111- then drop(take(valComplex, 6), 5)
112- else if ((type == drop(toBytes(5), 7)))
113- then drop(take(valComplex, 7), 6)
114- else toBytes(38)
115- let isWin = if ((val == valReal))
116- then (val != toBytes(38))
86+ else if ((type == drop(toBytes(2), 7)))
87+ then 2
88+ else if ((type == drop(toBytes(3), 7)))
89+ then 2
90+ else if ((type == drop(toBytes(4), 7)))
91+ then 3
92+ else if ((type == drop(toBytes(5), 7)))
93+ then 3
94+ else 0
95+ let ver = take(valComplex, 1)
96+ let valReal = if ((type == drop(toBytes(0), 7)))
97+ then drop(take(valComplex, 2), 1)
98+ else if ((type == drop(toBytes(1), 7)))
99+ then drop(take(valComplex, 3), 2)
100+ else if ((type == drop(toBytes(2), 7)))
101+ then drop(take(valComplex, 4), 3)
102+ else if ((type == drop(toBytes(3), 7)))
103+ then drop(take(valComplex, 5), 4)
104+ else if ((type == drop(toBytes(4), 7)))
105+ then drop(take(valComplex, 6), 5)
106+ else if ((type == drop(toBytes(5), 7)))
107+ then drop(take(valComplex, 7), 6)
108+ else toBytes(38)
109+ let isWin = if ((val == valReal))
110+ then (val != toBytes(38))
111+ else false
112+ let isMoneyStillEnough = (((paymentTx.amount * koeff) + minWithdrawFee) > newFees)
113+ if (if (isWin)
114+ then !(isCheater)
115+ else false)
116+ then isMoneyStillEnough
117+ else false
118+ }
117119 else false
118- if (isWin)
119- then isMoneyStillEnough
120- else false
121- }
122- else false
123- case _ =>
124- false
125- }
120+ case _ =>
121+ false
122+ }
123+ }
124+ else if ((size(dtx.data) == 3))
125+ then {
126+ let paymentTxIdStr = extract(dtx.data[0].key)
127+ let guessStr = extract(getString(dtx.data, paymentTxIdStr))
128+ let paymentRoundKey = (paymentTxIdStr + "_round")
129+ let paymentRound = extract(getString(dtx.data, paymentRoundKey))
130+ let sumBetsOld = if (isDefined(getInteger(me, (paymentRound + "_betsSum"))))
131+ then extract(getInteger(me, (paymentRound + "_betsSum")))
132+ else 0
133+ let sumBetsNew = extract(getInteger(dtx.data, (paymentRound + "_betsSum")))
134+ let isPaymentAlreadyMentioned = isDefined(getString(me, paymentTxIdStr))
135+ let paymentTx = transactionById(fromBase58String(paymentTxIdStr))
136+ match paymentTx {
137+ case paymentTx: TransferTransaction =>
138+ let isDtxSignedByPayer = sigVerify(dtx.bodyBytes, dtx.proofs[0], paymentTx.senderPublicKey)
139+ if (!(isPaymentAlreadyMentioned))
140+ then (sumBetsNew == ((sumBetsOld + paymentTx.amount) - dtx.fee))
141+ else false
142+ case _ =>
143+ false
144+ }
145+ }
146+ else false
126147 case _ =>
127148 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
128149 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 1 #-}
22 {-# CONTENT_TYPE EXPRESSION #-}
33 let me = tx.sender
44 let oracle = extract(addressFromString("3NCzaYTNDGtR8zf9yfcqePFjCqFx9S5zhs4"))
55 let minWithdrawFee = 400000
6-let minBet = 50000000
7-let maxBet = 500000000
86 match tx {
97 case withdrawTx: TransferTransaction =>
108 let txId = extract(getString(me, toBase58String(tx.proofs[1])))
119 match transactionById(tx.proofs[1]) {
1210 case paymentTx: TransferTransaction =>
1311 let isPaymentTookPlace = if ((txId == toBase58String(tx.id)))
1412 then sigVerify(tx.bodyBytes, tx.proofs[0], paymentTx.senderPublicKey)
1513 else false
16- let att = paymentTx.attachment
1714 let feesKey = (toBase58String(tx.proofs[1]) + "_fees")
1815 let dataTxsFees = extract(getInteger(me, feesKey))
19- let type = dropRightBytes(takeRightBytes(att, 2), 1)
20- let val = takeRightBytes(att, 1)
21- let key = dropRightBytes(att, 2)
22- let valComplex = extract(getBinary(oracle, toBase58String(key)))
16+ let guess = extract(getBinary(me, toBase58String(tx.proofs[1])))
17+ let type = take(guess, 1)
18+ let val = drop(guess, 1)
19+ let key = extract(getString(me, (toBase58String(tx.proofs[1]) + "_round")))
20+ let valComplex = extract(getBinary(oracle, key))
2321 let koeff = if ((type == drop(toBytes(0), 7)))
24- then 36
22+ then 35
2523 else if ((type == drop(toBytes(1), 7)))
2624 then 2
2725 else if ((type == drop(toBytes(2), 7)))
2826 then 2
2927 else if ((type == drop(toBytes(3), 7)))
3028 then 2
3129 else if ((type == drop(toBytes(4), 7)))
3230 then 3
3331 else if ((type == drop(toBytes(5), 7)))
3432 then 3
3533 else 0
36- let paymentAmount = if ((maxBet >= paymentTx.amount))
37- then paymentTx.amount
38- else maxBet
39- let correctAmount = (((paymentAmount * koeff) - dataTxsFees) - withdrawTx.fee)
34+ let correctAmount = (((paymentTx.amount * koeff) - dataTxsFees) - withdrawTx.fee)
4035 let isAmountOk = (withdrawTx.amount == correctAmount)
4136 let isInWaves = if (!(isDefined(withdrawTx.feeAssetId)))
4237 then !(isDefined(withdrawTx.assetId))
4338 else false
44- if (if (if (isPaymentTookPlace)
39+ if (if (isPaymentTookPlace)
4540 then isAmountOk
4641 else false)
4742 then isInWaves
48- else false)
49- then (paymentAmount >= minBet)
5043 else false
5144 case _ =>
5245 false
5346 }
5447 case dtx: DataTransaction =>
55- let isDataCountOk = (size(dtx.data) == 2)
56- let paymentTxIdStr = extract(dtx.data[0].key)
57- let feesKey = (paymentTxIdStr + "_fees")
58- let paymentTx = transactionById(fromBase58String(paymentTxIdStr))
59- let newFees = extract(getInteger(dtx.data, feesKey))
60- let oldFees = if (isDefined(getInteger(me, feesKey)))
61- then extract(getInteger(me, feesKey))
62- else 0
63- let isFeeCorrect = (newFees == (oldFees + dtx.fee))
64- let isPaymentAlreadyMentioned = isDefined(getString(me, paymentTxIdStr))
65- let withdrawTransactionId = fromBase58String(extract(getString(me, paymentTxIdStr)))
66- let isWithdrawExist = isDefined(transactionById(withdrawTransactionId))
67- match paymentTx {
68- case paymentTx: TransferTransaction =>
69- let isDtxSignedByPayer = sigVerify(dtx.bodyBytes, dtx.proofs[0], paymentTx.senderPublicKey)
70- if (if (if (if (if (!(isPaymentAlreadyMentioned))
71- then true
72- else !(isWithdrawExist))
73- then isDtxSignedByPayer
74- else false)
75- then isFeeCorrect
76- else false)
77- then isDataCountOk
78- else false)
79- then {
80- let att = paymentTx.attachment
81- let type = dropRightBytes(takeRightBytes(att, 2), 1)
82- let val = takeRightBytes(att, 1)
83- let key = dropRightBytes(att, 2)
84- let heightRes = extract(getInteger(oracle, (toBase58String(key) + "height")))
85- let isCheater = (extract(transactionHeightById(paymentTx.id)) >= heightRes)
86- let valComplex = extract(getBinary(oracle, toBase58String(key)))
87- let koeff = if ((type == drop(toBytes(0), 7)))
88- then 36
89- else if ((type == drop(toBytes(1), 7)))
90- then 2
91- else if ((type == drop(toBytes(2), 7)))
92- then 2
93- else if ((type == drop(toBytes(3), 7)))
48+ if ((size(dtx.data) == 2))
49+ then {
50+ let isDataCountOk = (size(dtx.data) == 2)
51+ let paymentTxIdStr = extract(dtx.data[0].key)
52+ let feesKey = (paymentTxIdStr + "_fees")
53+ let paymentTx = transactionById(fromBase58String(paymentTxIdStr))
54+ let newFees = extract(getInteger(dtx.data, feesKey))
55+ let oldFees = if (isDefined(getInteger(me, feesKey)))
56+ then extract(getInteger(me, feesKey))
57+ else 0
58+ let isFeeCorrect = (newFees == (oldFees + dtx.fee))
59+ let isPaymentAlreadyMentioned = isDefined(getString(me, paymentTxIdStr))
60+ let withdrawTransactionId = fromBase58String(extract(getString(me, paymentTxIdStr)))
61+ let isWithdrawExist = isDefined(transactionById(withdrawTransactionId))
62+ match paymentTx {
63+ case paymentTx: TransferTransaction =>
64+ let isDtxSignedByPayer = sigVerify(dtx.bodyBytes, dtx.proofs[0], paymentTx.senderPublicKey)
65+ if (if (if (if (if (!(isPaymentAlreadyMentioned))
66+ then true
67+ else !(isWithdrawExist))
68+ then isDtxSignedByPayer
69+ else false)
70+ then isFeeCorrect
71+ else false)
72+ then isDataCountOk
73+ else false)
74+ then {
75+ let att = paymentTx.attachment
76+ let type = dropRightBytes(takeRightBytes(att, 2), 1)
77+ let val = takeRightBytes(att, 1)
78+ let key = dropRightBytes(att, 2)
79+ let heightRes = extract(getInteger(oracle, (toBase58String(key) + "height")))
80+ let isCheater = (extract(transactionHeightById(paymentTx.id)) >= heightRes)
81+ let valComplex = extract(getBinary(oracle, toBase58String(key)))
82+ let koeff = if ((type == drop(toBytes(0), 7)))
83+ then 35
84+ else if ((type == drop(toBytes(1), 7)))
9485 then 2
95- else if ((type == drop(toBytes(4), 7)))
96- then 3
97- else if ((type == drop(toBytes(5), 7)))
98- then 3
99- else 0
100- let isMoneyStillEnough = (((paymentTx.amount * koeff) + minWithdrawFee) > newFees)
101- let ver = take(valComplex, 1)
102- let valReal = if ((type == drop(toBytes(0), 7)))
103- then drop(take(valComplex, 2), 1)
104- else if ((type == drop(toBytes(1), 7)))
105- then drop(take(valComplex, 3), 2)
106- else if ((type == drop(toBytes(2), 7)))
107- then drop(take(valComplex, 4), 3)
108- else if ((type == drop(toBytes(3), 7)))
109- then drop(take(valComplex, 5), 4)
110- else if ((type == drop(toBytes(4), 7)))
111- then drop(take(valComplex, 6), 5)
112- else if ((type == drop(toBytes(5), 7)))
113- then drop(take(valComplex, 7), 6)
114- else toBytes(38)
115- let isWin = if ((val == valReal))
116- then (val != toBytes(38))
86+ else if ((type == drop(toBytes(2), 7)))
87+ then 2
88+ else if ((type == drop(toBytes(3), 7)))
89+ then 2
90+ else if ((type == drop(toBytes(4), 7)))
91+ then 3
92+ else if ((type == drop(toBytes(5), 7)))
93+ then 3
94+ else 0
95+ let ver = take(valComplex, 1)
96+ let valReal = if ((type == drop(toBytes(0), 7)))
97+ then drop(take(valComplex, 2), 1)
98+ else if ((type == drop(toBytes(1), 7)))
99+ then drop(take(valComplex, 3), 2)
100+ else if ((type == drop(toBytes(2), 7)))
101+ then drop(take(valComplex, 4), 3)
102+ else if ((type == drop(toBytes(3), 7)))
103+ then drop(take(valComplex, 5), 4)
104+ else if ((type == drop(toBytes(4), 7)))
105+ then drop(take(valComplex, 6), 5)
106+ else if ((type == drop(toBytes(5), 7)))
107+ then drop(take(valComplex, 7), 6)
108+ else toBytes(38)
109+ let isWin = if ((val == valReal))
110+ then (val != toBytes(38))
111+ else false
112+ let isMoneyStillEnough = (((paymentTx.amount * koeff) + minWithdrawFee) > newFees)
113+ if (if (isWin)
114+ then !(isCheater)
115+ else false)
116+ then isMoneyStillEnough
117+ else false
118+ }
117119 else false
118- if (isWin)
119- then isMoneyStillEnough
120- else false
121- }
122- else false
123- case _ =>
124- false
125- }
120+ case _ =>
121+ false
122+ }
123+ }
124+ else if ((size(dtx.data) == 3))
125+ then {
126+ let paymentTxIdStr = extract(dtx.data[0].key)
127+ let guessStr = extract(getString(dtx.data, paymentTxIdStr))
128+ let paymentRoundKey = (paymentTxIdStr + "_round")
129+ let paymentRound = extract(getString(dtx.data, paymentRoundKey))
130+ let sumBetsOld = if (isDefined(getInteger(me, (paymentRound + "_betsSum"))))
131+ then extract(getInteger(me, (paymentRound + "_betsSum")))
132+ else 0
133+ let sumBetsNew = extract(getInteger(dtx.data, (paymentRound + "_betsSum")))
134+ let isPaymentAlreadyMentioned = isDefined(getString(me, paymentTxIdStr))
135+ let paymentTx = transactionById(fromBase58String(paymentTxIdStr))
136+ match paymentTx {
137+ case paymentTx: TransferTransaction =>
138+ let isDtxSignedByPayer = sigVerify(dtx.bodyBytes, dtx.proofs[0], paymentTx.senderPublicKey)
139+ if (!(isPaymentAlreadyMentioned))
140+ then (sumBetsNew == ((sumBetsOld + paymentTx.amount) - dtx.fee))
141+ else false
142+ case _ =>
143+ false
144+ }
145+ }
146+ else false
126147 case _ =>
127148 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
128149 }

github/deemru/w8io/c3f4982 
51.97 ms