tx · 2NKEPcPBzVdJPgMSBedCcvs36nHx9Rji3HbHs9mp1S7G

3Mt5BW4KVsvfxGUYuDqcfDMeoacc5GPn179:  -0.01400000 Waves

2019.03.15 00:59 [536378] smart account 3Mt5BW4KVsvfxGUYuDqcfDMeoacc5GPn179 > SELF 0.00000000 Waves

{ "type": 13, "id": "2NKEPcPBzVdJPgMSBedCcvs36nHx9Rji3HbHs9mp1S7G", "fee": 1400000, "feeAssetId": null, "timestamp": 1552600726515, "version": 1, "sender": "3Mt5BW4KVsvfxGUYuDqcfDMeoacc5GPn179", "senderPublicKey": "F7KHa5J2ja7H22YreD3YJ8rBEFcvpa3DvQhFG4ZUXk8P", "proofs": [ "ARfykSM5P47L4pZwpZWEG4VfLKyMvEmgwwGb5yHpTZQSA9qEawqdQ1jqMQwrgYZAu4utDyYNK2JYgD9y64wcn4F" ], "script": "base64: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aXNmaWVzRm9ybWF0BwUAAAAKcG9zTm90VXNlZAcFAAAAC3R4SWROb3RVc2VkBwQAAAAJcGF5bWVudFR4CQAD6AAAAAEJAAJZAAAAAQUAAAALcGF5bWVudFR4SWQEAAAAByRtYXRjaDEFAAAACXBheW1lbnRUeAMJAAABAAAAAgUAAAAHJG1hdGNoMQIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAAJcGF5bWVudFR4BQAAAAckbWF0Y2gxAwMDAwMDAwUAAAAWZGF0YVRyYW5zYWN0aW9uSXNWYWxpZAkBAAAAAiE9AAAAAggFAAAACXBheW1lbnRUeAAAAAZzZW5kZXIFAAAACW1lQWRkcmVzcwcJAAAAAAAAAggFAAAACXBheW1lbnRUeAAAAAlyZWNpcGllbnQFAAAACW1lQWRkcmVzcwcJAABnAAAAAggFAAAACXBheW1lbnRUeAAAAAZhbW91bnQJAABlAAAAAgUAAAAKcGFpZEFtb3VudAUAAAAJcGFpZFR4RmVlBwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAACXBheW1lbnRUeAAAAAdhc3NldElkBwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAACXBheW1lbnRUeAAAAApmZWVBc3NldElkBwkAAfQAAAADCAUAAAAGZGF0YVR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAAGZGF0YVR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAACXBheW1lbnRUeAAAAA9zZW5kZXJQdWJsaWNLZXkHCQAAAAAAAAIIBQAAAAZkYXRhVHgAAAADZmVlBQAAAAlkYXRhVHhGZWUHCQAAAgAAAAECAAAAMURUOiBUUkFOU0FDVElPTiB0eXBlIGlzIG5vdCBhIFRyYW5zZmVyVHJhbnNhY3Rpb24DCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAF01hc3NUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAV3aW5UeAUAAAAHJG1hdGNoMAQAAAAJbWVBZGRyZXNzCAUAAAAFd2luVHgAAAAGc2VuZGVyBAAAABV3aW5UcmFuc2ZlckF0dGFjaG1lbnQIBQAAAAV3aW5UeAAAAAphdHRhY2htZW50AwkBAAAAAiE9AAAAAgkAAMgA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dAAAAAEJAAQdAAAAAgUAAAAJbWVBZGRyZXNzAgAAAA1zZXJ2ZXJBZGRyZXNzBAAAAA1zZXJ2ZXJBZGRyZXNzCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAABZzZXJ2ZXJBZGRyZXNzUHVibGljS2V5BAAAABJzZXJ2ZXJBZGRyZXNzQ2hlY2sJAAAAAAAAAggFAAAACXNlcnZpY2VUeAAAAAlyZWNpcGllbnQFAAAADXNlcnZlckFkZHJlc3MDCQEAAAABIQAAAAEFAAAAEnNlcnZlckFkZHJlc3NDaGVjawkAAAIAAAABAgAAABtUVDogU0VSVkVSIEFERFJFU1MgaXMgd3JvbmcDCQAB9AAAAAMIBQAAAAlzZXJ2aWNlVHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAlzZXJ2aWNlVHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAAJc2VydmljZVR4AAAAD3NlbmRlclB1YmxpY0tleQkAAAAAAAACCAUAAAAJc2VydmljZVR4AAAAA2ZlZQUAAAAId2luVHhGZWUHCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleWKGW3I=", "chainId": 84, "height": 536378, "spentComplexity": 0 } View: original | compacted Prev: FneKoVHiuYbicqacBE7CBUdRdzmmbR6gbhXAsGHY1hnM Next: none Diff:
OldNewDifferences
1313 match tx {
1414 case dataTx: DataTransaction =>
1515 let meAddress = dataTx.sender
16- let insertPos = extract(getInteger(dataTx.data, "pos"))
17- let validPos = if ((insertPos >= startPos))
18- then (endPos >= insertPos)
19- else false
20- if (!(validPos))
21- then throw("DT: POSITION is not valid")
16+ let insertPosCheck = isDefined(getInteger(dataTx.data, "pos"))
17+ if (!(insertPosCheck))
18+ then throw("DT: POSITION value is not an integer")
2219 else {
23- let insertPosStringTemp = if ((insertPos > 9))
24- then toString(insertPos)
25- else ("0" + toString(insertPos))
26- let insertPosString = ("pos" + insertPosStringTemp)
27- let paymentTxId = extract(getString(dataTx.data, insertPosString))
28- let satisfiesFormat = if (if (if (if ((size(dataTx.data) == 3))
29- then isDefined(getInteger(dataTx.data, "pos"))
30- else false)
31- then isDefined(getString(dataTx.data, insertPosString))
32- else false)
33- then isDefined(getBoolean(dataTx.data, paymentTxId))
34- else false)
35- then (extract(getBoolean(dataTx.data, paymentTxId)) == true)
20+ let insertPos = extract(getInteger(dataTx.data, "pos"))
21+ let validPos = if ((insertPos >= startPos))
22+ then (endPos >= insertPos)
3623 else false
37- if (!(satisfiesFormat))
38- then throw("DT: DATA FORMAT is not valid")
24+ if (!(validPos))
25+ then throw("DT: POSITION is not valid")
3926 else {
40- let posNotUsed = !(isDefined(getString(meAddress, insertPosString)))
41- if (!(posNotUsed))
42- then throw("DT: POSISTION alredy used")
27+ let insertPosStringTemp = if ((insertPos > 9))
28+ then toString(insertPos)
29+ else ("0" + toString(insertPos))
30+ let insertPosString = ("pos" + insertPosStringTemp)
31+ let paymentTxId = extract(getString(dataTx.data, insertPosString))
32+ let satisfiesFormat = if (if (if (if ((size(dataTx.data) == 3))
33+ then insertPosCheck
34+ else false)
35+ then isDefined(getString(dataTx.data, insertPosString))
36+ else false)
37+ then isDefined(getBoolean(dataTx.data, paymentTxId))
38+ else false)
39+ then (extract(getBoolean(dataTx.data, paymentTxId)) == true)
40+ else false
41+ if (!(satisfiesFormat))
42+ then throw("DT: DATA FORMAT is not valid")
4343 else {
44- let txIdNotUsed = !(isDefined(getBoolean(meAddress, paymentTxId)))
45- if (!(txIdNotUsed))
46- then throw("DT: TXID alredy used")
44+ let posNotUsed = !(isDefined(getString(meAddress, insertPosString)))
45+ if (!(posNotUsed))
46+ then throw("DT: POSISTION alredy used")
4747 else {
48- let dataTransactionIsValid = if (if (if (validPos)
49- then satisfiesFormat
50- else false)
51- then posNotUsed
52- else false)
53- then txIdNotUsed
54- else false
55- let paymentTx = transactionById(fromBase58String(paymentTxId))
56- match paymentTx {
57- case paymentTx: TransferTransaction =>
58- if (if (if (if (if (if (if (dataTransactionIsValid)
59- then (paymentTx.sender != meAddress)
48+ let txIdNotUsed = !(isDefined(getBoolean(meAddress, paymentTxId)))
49+ if (!(txIdNotUsed))
50+ then throw("DT: TXID alredy used")
51+ else {
52+ let dataTransactionIsValid = if (if (if (validPos)
53+ then satisfiesFormat
6054 else false)
61- then (paymentTx.recipient == meAddress)
55+ then posNotUsed
6256 else false)
63- then (paymentTx.amount >= (paidAmount - paidTxFee))
64- else false)
65- then !(isDefined(paymentTx.assetId))
66- else false)
67- then !(isDefined(paymentTx.feeAssetId))
68- else false)
69- then sigVerify(dataTx.bodyBytes, dataTx.proofs[0], paymentTx.senderPublicKey)
70- else false)
71- then (dataTx.fee == dataTxFee)
57+ then txIdNotUsed
7258 else false
73- case _ =>
74- throw("DT: TRANSACTION type is not a TransferTransaction")
75- }
59+ let paymentTx = transactionById(fromBase58String(paymentTxId))
60+ match paymentTx {
61+ case paymentTx: TransferTransaction =>
62+ if (if (if (if (if (if (if (dataTransactionIsValid)
63+ then (paymentTx.sender != meAddress)
64+ else false)
65+ then (paymentTx.recipient == meAddress)
66+ else false)
67+ then (paymentTx.amount >= (paidAmount - paidTxFee))
68+ else false)
69+ then !(isDefined(paymentTx.assetId))
70+ else false)
71+ then !(isDefined(paymentTx.feeAssetId))
72+ else false)
73+ then sigVerify(dataTx.bodyBytes, dataTx.proofs[0], paymentTx.senderPublicKey)
74+ else false)
75+ then (dataTx.fee == dataTxFee)
76+ else false
77+ case _ =>
78+ throw("DT: TRANSACTION type is not a TransferTransaction")
79+ }
80+ }
7681 }
7782 }
7883 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 1 #-}
22 {-# CONTENT_TYPE EXPRESSION #-}
33 let author = "MaDaMa Labs @daidalos"
44 let oneWaves = 100000000
55 let paidAmount = (1 * oneWaves)
66 let winAmount = (10 * oneWaves)
77 let paidTxFee = (oneWaves / 100)
88 let dataTxFee = (oneWaves / 100)
99 let winTxFee = (oneWaves / 100)
1010 let startPos = 0
1111 let endPos = 24
1212 let saltLength = 50
1313 match tx {
1414 case dataTx: DataTransaction =>
1515 let meAddress = dataTx.sender
16- let insertPos = extract(getInteger(dataTx.data, "pos"))
17- let validPos = if ((insertPos >= startPos))
18- then (endPos >= insertPos)
19- else false
20- if (!(validPos))
21- then throw("DT: POSITION is not valid")
16+ let insertPosCheck = isDefined(getInteger(dataTx.data, "pos"))
17+ if (!(insertPosCheck))
18+ then throw("DT: POSITION value is not an integer")
2219 else {
23- let insertPosStringTemp = if ((insertPos > 9))
24- then toString(insertPos)
25- else ("0" + toString(insertPos))
26- let insertPosString = ("pos" + insertPosStringTemp)
27- let paymentTxId = extract(getString(dataTx.data, insertPosString))
28- let satisfiesFormat = if (if (if (if ((size(dataTx.data) == 3))
29- then isDefined(getInteger(dataTx.data, "pos"))
30- else false)
31- then isDefined(getString(dataTx.data, insertPosString))
32- else false)
33- then isDefined(getBoolean(dataTx.data, paymentTxId))
34- else false)
35- then (extract(getBoolean(dataTx.data, paymentTxId)) == true)
20+ let insertPos = extract(getInteger(dataTx.data, "pos"))
21+ let validPos = if ((insertPos >= startPos))
22+ then (endPos >= insertPos)
3623 else false
37- if (!(satisfiesFormat))
38- then throw("DT: DATA FORMAT is not valid")
24+ if (!(validPos))
25+ then throw("DT: POSITION is not valid")
3926 else {
40- let posNotUsed = !(isDefined(getString(meAddress, insertPosString)))
41- if (!(posNotUsed))
42- then throw("DT: POSISTION alredy used")
27+ let insertPosStringTemp = if ((insertPos > 9))
28+ then toString(insertPos)
29+ else ("0" + toString(insertPos))
30+ let insertPosString = ("pos" + insertPosStringTemp)
31+ let paymentTxId = extract(getString(dataTx.data, insertPosString))
32+ let satisfiesFormat = if (if (if (if ((size(dataTx.data) == 3))
33+ then insertPosCheck
34+ else false)
35+ then isDefined(getString(dataTx.data, insertPosString))
36+ else false)
37+ then isDefined(getBoolean(dataTx.data, paymentTxId))
38+ else false)
39+ then (extract(getBoolean(dataTx.data, paymentTxId)) == true)
40+ else false
41+ if (!(satisfiesFormat))
42+ then throw("DT: DATA FORMAT is not valid")
4343 else {
44- let txIdNotUsed = !(isDefined(getBoolean(meAddress, paymentTxId)))
45- if (!(txIdNotUsed))
46- then throw("DT: TXID alredy used")
44+ let posNotUsed = !(isDefined(getString(meAddress, insertPosString)))
45+ if (!(posNotUsed))
46+ then throw("DT: POSISTION alredy used")
4747 else {
48- let dataTransactionIsValid = if (if (if (validPos)
49- then satisfiesFormat
50- else false)
51- then posNotUsed
52- else false)
53- then txIdNotUsed
54- else false
55- let paymentTx = transactionById(fromBase58String(paymentTxId))
56- match paymentTx {
57- case paymentTx: TransferTransaction =>
58- if (if (if (if (if (if (if (dataTransactionIsValid)
59- then (paymentTx.sender != meAddress)
48+ let txIdNotUsed = !(isDefined(getBoolean(meAddress, paymentTxId)))
49+ if (!(txIdNotUsed))
50+ then throw("DT: TXID alredy used")
51+ else {
52+ let dataTransactionIsValid = if (if (if (validPos)
53+ then satisfiesFormat
6054 else false)
61- then (paymentTx.recipient == meAddress)
55+ then posNotUsed
6256 else false)
63- then (paymentTx.amount >= (paidAmount - paidTxFee))
64- else false)
65- then !(isDefined(paymentTx.assetId))
66- else false)
67- then !(isDefined(paymentTx.feeAssetId))
68- else false)
69- then sigVerify(dataTx.bodyBytes, dataTx.proofs[0], paymentTx.senderPublicKey)
70- else false)
71- then (dataTx.fee == dataTxFee)
57+ then txIdNotUsed
7258 else false
73- case _ =>
74- throw("DT: TRANSACTION type is not a TransferTransaction")
75- }
59+ let paymentTx = transactionById(fromBase58String(paymentTxId))
60+ match paymentTx {
61+ case paymentTx: TransferTransaction =>
62+ if (if (if (if (if (if (if (dataTransactionIsValid)
63+ then (paymentTx.sender != meAddress)
64+ else false)
65+ then (paymentTx.recipient == meAddress)
66+ else false)
67+ then (paymentTx.amount >= (paidAmount - paidTxFee))
68+ else false)
69+ then !(isDefined(paymentTx.assetId))
70+ else false)
71+ then !(isDefined(paymentTx.feeAssetId))
72+ else false)
73+ then sigVerify(dataTx.bodyBytes, dataTx.proofs[0], paymentTx.senderPublicKey)
74+ else false)
75+ then (dataTx.fee == dataTxFee)
76+ else false
77+ case _ =>
78+ throw("DT: TRANSACTION type is not a TransferTransaction")
79+ }
80+ }
7681 }
7782 }
7883 }
7984 }
8085 case winTx: MassTransferTransaction =>
8186 let meAddress = winTx.sender
8287 let winTransferAttachment = winTx.attachment
8388 if ((size(winTransferAttachment) != (saltLength + 5)))
8489 then throw("MTT: ATTACHMENT SIZE is wrong")
8590 else {
8691 let unitsBytes = takeRightBytes(take(winTransferAttachment, 2), 1)
8792 let tensBytes = take(winTransferAttachment, 1)
8893 let winBytes = takeRightBytes(take(winTransferAttachment, 4), 1)
8994 let unitsInt = if ((unitsBytes == toBytes("0")))
9095 then 0
9196 else if ((unitsBytes == toBytes("1")))
9297 then 1
9398 else if ((unitsBytes == toBytes("2")))
9499 then 2
95100 else if ((unitsBytes == toBytes("3")))
96101 then 3
97102 else if ((unitsBytes == toBytes("4")))
98103 then 4
99104 else if ((unitsBytes == toBytes("5")))
100105 then 5
101106 else if ((unitsBytes == toBytes("6")))
102107 then 6
103108 else if ((unitsBytes == toBytes("7")))
104109 then 7
105110 else if ((unitsBytes == toBytes("8")))
106111 then 8
107112 else if ((unitsBytes == toBytes("9")))
108113 then 9
109114 else 0
110115 let tensInt = if ((tensBytes == toBytes("0")))
111116 then 0
112117 else if ((tensBytes == toBytes("1")))
113118 then 10
114119 else if ((tensBytes == toBytes("2")))
115120 then 20
116121 else 0
117122 let posInt = (tensInt + unitsInt)
118123 let validPos = if ((posInt >= startPos))
119124 then (endPos >= posInt)
120125 else false
121126 if (!(validPos))
122127 then throw("MTT: POSITION NUMBER is not valid")
123128 else {
124129 let posString = if ((posInt > 9))
125130 then toString(posInt)
126131 else ("0" + toString(posInt))
127132 let posHashDefined = isDefined(getString(meAddress, ("hash" + posString)))
128133 if (!(posHashDefined))
129134 then throw("MTT: POSITION HASH did not found in data")
130135 else {
131136 let posHash = extract(getString(meAddress, ("hash" + posString)))
132137 let validateAttachment = (sha256(winTransferAttachment) == fromBase58String(posHash))
133138 if (!(validateAttachment))
134139 then throw("MTT: ATTACHMENT HASH is not valid")
135140 else {
136141 let serverAddressPublicKey = fromBase58String(extract(getString(meAddress, "serverAddress")))
137142 let serverAddress = addressFromPublicKey(serverAddressPublicKey)
138143 let serverAddressCheck = if ((winTx.transfers[0].recipient == serverAddress))
139144 then (size(winTx.transfers) == 2)
140145 else false
141146 if (!(serverAddressCheck))
142147 then throw("MTT: SERVER ADDRESS is wrong")
143148 else {
144149 let isWinner = (winBytes == toBytes("1"))
145150 if (!(isWinner))
146151 then throw("MTT: POSITION is not winner")
147152 else {
148153 let paymentTxId = extract(getString(meAddress, ("pos" + posString)))
149154 let paymentTx = transactionById(fromBase58String(paymentTxId))
150155 match paymentTx {
151156 case paymentTx: TransferTransaction =>
152157 let recipientIsThePayment = (winTx.transfers[1].recipient == paymentTx.sender)
153158 if (!(recipientIsThePayment))
154159 then throw("MTT: WINNER RECIPIENT is wrong")
155160 else if (if (if (if (if ((winTx.transfers[0].amount >= ((wavesBalance(meAddress) - winAmount) - winTxFee)))
156161 then (winTx.transfers[1].amount == winAmount)
157162 else false)
158163 then !(isDefined(paymentTx.assetId))
159164 else false)
160165 then !(isDefined(paymentTx.feeAssetId))
161166 else false)
162167 then (winTx.fee == winTxFee)
163168 else false)
164169 then if (sigVerify(winTx.bodyBytes, winTx.proofs[0], paymentTx.senderPublicKey))
165170 then true
166171 else sigVerify(winTx.bodyBytes, winTx.proofs[0], winTx.senderPublicKey)
167172 else false
168173 case _ =>
169174 throw("MTT: TRANSACTION type is not a TransferTransaction")
170175 }
171176 }
172177 }
173178 }
174179 }
175180 }
176181 }
177182 case serviceTx: TransferTransaction =>
178183 let meAddress = serviceTx.sender
179184 let wavesRestCheck = (winAmount > wavesBalance(meAddress))
180185 if (!(wavesRestCheck))
181186 then throw("TT: WAVES balance is more then win amount")
182187 else {
183188 let serverAddressPublicKey = fromBase58String(extract(getString(meAddress, "serverAddress")))
184189 let serverAddress = addressFromPublicKey(serverAddressPublicKey)
185190 let serverAddressCheck = (serviceTx.recipient == serverAddress)
186191 if (!(serverAddressCheck))
187192 then throw("TT: SERVER ADDRESS is wrong")
188193 else if (sigVerify(serviceTx.bodyBytes, serviceTx.proofs[0], serviceTx.senderPublicKey))
189194 then (serviceTx.fee == winTxFee)
190195 else false
191196 }
192197 case _ =>
193198 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
194199 }

github/deemru/w8io/873ac7e 
37.48 ms