tx · DNjV1wCFJByfsEtCSJvJKBZGMVLsiiJsn5D7Ma8zbs1x

3N3GXiCXFcrnKyuGboT7445nLksUi6H43Wv:  -0.01400000 Waves

2019.03.20 21:43 [544984] smart account 3N3GXiCXFcrnKyuGboT7445nLksUi6H43Wv > SELF 0.00000000 Waves

{ "type": 13, "id": "DNjV1wCFJByfsEtCSJvJKBZGMVLsiiJsn5D7Ma8zbs1x", "fee": 1400000, "feeAssetId": null, "timestamp": 1553107441775, "version": 1, "sender": "3N3GXiCXFcrnKyuGboT7445nLksUi6H43Wv", "senderPublicKey": "FkyFizAsfhjRDNzkYJqTtCNowMZYBgT4RJm828mqeuAr", "proofs": [ "hcxsi7ANeKeNoj1hSgzafnRtwKL46wX9SZQ3xY5ERjipye1bsiKYTYu3phK7wuC6iyQVFKKzqDcjvegCKE5XBCQ" ], "script": "base64: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", "chainId": 84, "height": 544984, "spentComplexity": 0 } View: original | compacted Prev: HE1StUoJMD7asXqYiNgTejpRLmoJd4Cijaorbno5U1Ce Next: none Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 1 #-}
1+{-# STDLIB_VERSION 2 #-}
22 {-# CONTENT_TYPE EXPRESSION #-}
3-let author = "MaDaMa Labs @daidalos"
4-let serverAddress = addressFromPublicKey(base58'CzeJPTyeyPycMs7HwFZZnDRoPiQ8zukioFvPduMmRSgR')
5-let oneWaves = 100000000
6-let paidAmount = (1 * oneWaves)
7-let winAmount = (10 * oneWaves)
8-let paidTxFee = (oneWaves / 100)
9-let dataTxFee = (oneWaves / 100)
10-let winTxFee = (oneWaves / 100)
11-let startPos = 0
12-let endPos = 24
13-let saltLength = 50
14-let meAddress = tx.sender
15-let mePublicKey = tx.senderPublicKey
16-if ((meAddress != addressFromPublicKey(mePublicKey)))
3+let a = "MaDaMa Labs @daidalos"
4+let sApK = base58'CzeJPTyeyPycMs7HwFZZnDRoPiQ8zukioFvPduMmRSgR'
5+let sA = addressFromPublicKey(sApK)
6+let mA = tx.sender
7+let mApK = tx.senderPublicKey
8+let oW = 100000000
9+let pA = (1 * oW)
10+let wA = (10 * oW)
11+let pTf = (oW / 100)
12+let dTf = (oW / 100)
13+let wTf = (oW / 100)
14+let sP = 0
15+let eP = 24
16+let pP = "_pos"
17+let pH = "_hash"
18+let sL = 50
19+if ((mA != addressFromPublicKey(mApK)))
1720 then throw("INIT: SENDER IS WRONG")
1821 else match tx {
19- case dataTx: DataTransaction =>
20- let insertPosCheck = isDefined(getInteger(dataTx.data, "pos"))
21- if (!(insertPosCheck))
22- then throw("DT: POSITION value is not an integer")
22+ case dT: DataTransaction =>
23+ if (sigVerify(dT.bodyBytes, dT.proofs[0], sApK))
24+ then if (isDefined(getString(dT.data, "_s_mt")))
25+ then {
26+ let sMt = extract(getString(dT.data, "_s_mt"))
27+ let mT = transactionById(fromBase58String(sMt))
28+ match mT {
29+ case mT: MassTransferTransaction =>
30+ if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((size(dT.data) == 26))
31+ then (mT.sender == mA)
32+ else false)
33+ then (dT.fee == dTf)
34+ else false)
35+ then isDefined(getString(dT.data, "_key00"))
36+ else false)
37+ then isDefined(getString(dT.data, "_key01"))
38+ else false)
39+ then isDefined(getString(dT.data, "_key02"))
40+ else false)
41+ then isDefined(getString(dT.data, "_key03"))
42+ else false)
43+ then isDefined(getString(dT.data, "_key04"))
44+ else false)
45+ then isDefined(getString(dT.data, "_key05"))
46+ else false)
47+ then isDefined(getString(dT.data, "_key06"))
48+ else false)
49+ then isDefined(getString(dT.data, "_key07"))
50+ else false)
51+ then isDefined(getString(dT.data, "_key08"))
52+ else false)
53+ then isDefined(getString(dT.data, "_key09"))
54+ else false)
55+ then isDefined(getString(dT.data, "_key10"))
56+ else false)
57+ then isDefined(getString(dT.data, "_key11"))
58+ else false)
59+ then isDefined(getString(dT.data, "_key12"))
60+ else false)
61+ then isDefined(getString(dT.data, "_key13"))
62+ else false)
63+ then isDefined(getString(dT.data, "_key14"))
64+ else false)
65+ then isDefined(getString(dT.data, "_key15"))
66+ else false)
67+ then isDefined(getString(dT.data, "_key16"))
68+ else false)
69+ then isDefined(getString(dT.data, "_key17"))
70+ else false)
71+ then isDefined(getString(dT.data, "_key18"))
72+ else false)
73+ then isDefined(getString(dT.data, "_key19"))
74+ else false)
75+ then isDefined(getString(dT.data, "_key20"))
76+ else false)
77+ then isDefined(getString(dT.data, "_key21"))
78+ else false)
79+ then isDefined(getString(dT.data, "_key22"))
80+ else false)
81+ then isDefined(getString(dT.data, "_key23"))
82+ else false)
83+ then isDefined(getString(dT.data, "_key24"))
84+ else false
85+ case _ =>
86+ false
87+ }
88+ }
89+ else {
90+ let sHash = getString(dT.data, "_s_hash")
91+ let sPos = getString(dT.data, "_s_pos")
92+ let sKey = getString(dT.data, "_s_key")
93+ if (if (if (if (if (if (if (if (if (if (if ((size(dT.data) == 4))
94+ then (dT.fee == dTf)
95+ else false)
96+ then isDefined(sHash)
97+ else false)
98+ then isDefined(sPos)
99+ else false)
100+ then isDefined(sKey)
101+ else false)
102+ then isDefined(getString(dT.data, extract(sKey)))
103+ else false)
104+ then (takeRight(extract(sHash), 2) == takeRight(extract(sPos), 2))
105+ else false)
106+ then (takeRight(extract(sHash), 2) == takeRight(extract(sKey), 2))
107+ else false)
108+ then (takeRight(extract(sKey), 2) == take(extract(getString(dT.data, extract(sKey))), 2))
109+ else false)
110+ then isDefined(getString(mA, extract(sHash)))
111+ else false)
112+ then isDefined(getString(mA, extract(sPos)))
113+ else false)
114+ then !(isDefined(getString(mA, extract(sKey))))
115+ else false
116+ }
23117 else {
24- let insertPos = extract(getInteger(dataTx.data, "pos"))
25- let validPos = if ((insertPos >= startPos))
26- then (endPos >= insertPos)
27- else false
28- if (!(validPos))
29- then throw("DT: POSITION is not valid")
118+ let iPc = isDefined(getInteger(dT.data, pP))
119+ if (!(iPc))
120+ then throw("DT: POS value is not an int")
30121 else {
31- let insertPosStringTemp = if ((insertPos > 9))
32- then toString(insertPos)
33- else ("0" + toString(insertPos))
34- let insertPosString = ("pos" + insertPosStringTemp)
35- let paymentTxId = extract(getString(dataTx.data, insertPosString))
36- let satisfiesFormat = if (if (if (if ((size(dataTx.data) == 3))
37- then insertPosCheck
38- else false)
39- then isDefined(getString(dataTx.data, insertPosString))
40- else false)
41- then isDefined(getBoolean(dataTx.data, paymentTxId))
42- else false)
43- then (extract(getBoolean(dataTx.data, paymentTxId)) == true)
122+ let iP = extract(getInteger(dT.data, pP))
123+ let vP = if ((iP >= sP))
124+ then (eP >= iP)
44125 else false
45- if (!(satisfiesFormat))
46- then throw("DT: DATA FORMAT is not valid")
126+ if (!(vP))
127+ then throw("DT: POS is not valid")
47128 else {
48- let posNotUsed = !(isDefined(getString(meAddress, insertPosString)))
49- if (!(posNotUsed))
50- then throw("DT: POSISTION alredy used")
129+ let iPsT = if ((iP > 9))
130+ then toString(iP)
131+ else ("0" + toString(iP))
132+ let iPs = (pP + iPsT)
133+ let pTi = extract(getString(dT.data, iPs))
134+ let sF = if (if (if (if (if ((size(dT.data) == 3))
135+ then (dT.fee == dTf)
136+ else false)
137+ then iPc
138+ else false)
139+ then isDefined(getString(dT.data, iPs))
140+ else false)
141+ then isDefined(getBoolean(dT.data, pTi))
142+ else false)
143+ then (extract(getBoolean(dT.data, pTi)) == true)
144+ else false
145+ if (!(sF))
146+ then throw("DT: DATA FORMAT is not valid")
51147 else {
52- let txIdNotUsed = !(isDefined(getBoolean(meAddress, paymentTxId)))
53- if (!(txIdNotUsed))
54- then throw("DT: TXID alredy used")
148+ let pNu = !(isDefined(getString(mA, iPs)))
149+ if (!(pNu))
150+ then throw("DT: POSISTION alredy used")
55151 else {
56- let dataTransactionIsValid = if (if (if (if (validPos)
57- then satisfiesFormat
58- else false)
59- then posNotUsed
60- else false)
61- then txIdNotUsed
62- else false)
63- then (dataTx.fee == dataTxFee)
64- else false
65- let paymentTx = transactionById(fromBase58String(paymentTxId))
66- match paymentTx {
67- case paymentTx: TransferTransaction =>
68- if (if (if (if (if (if (if (if (dataTransactionIsValid)
69- then (addressFromPublicKey(paymentTx.attachment) == meAddress)
152+ let iInU = !(isDefined(getBoolean(mA, pTi)))
153+ if (!(iInU))
154+ then throw("DT: TXID alredy used")
155+ else {
156+ let dTiV = if (if (if (vP)
157+ then sF
70158 else false)
71- then (paymentTx.recipient == serverAddress)
159+ then pNu
72160 else false)
73- then (paymentTx.amount >= (paidAmount - paidTxFee))
74- else false)
75- then !(isDefined(paymentTx.assetId))
76- else false)
77- then !(isDefined(paymentTx.feeAssetId))
78- else false)
79- then sigVerify(dataTx.bodyBytes, dataTx.proofs[0], paymentTx.senderPublicKey)
80- else false)
81- then (paymentTx.sender != meAddress)
82- else false)
83- then (paymentTx.sender != serverAddress)
161+ then iInU
84162 else false
85- case _ =>
86- throw("DT: TRANSACTION type is not a TransferTransaction")
87- }
88- }
89- }
90- }
91- }
92- }
93- case winTx: MassTransferTransaction =>
94- let winTransferAttachment = winTx.attachment
95- if ((size(winTransferAttachment) != (saltLength + 5)))
96- then throw("MTT: ATTACHMENT SIZE is wrong")
97- else {
98- let unitsBytes = takeRightBytes(take(winTransferAttachment, 2), 1)
99- let tensBytes = take(winTransferAttachment, 1)
100- let winBytes = takeRightBytes(take(winTransferAttachment, 4), 1)
101- let unitsInt = if ((unitsBytes == toBytes("0")))
102- then 0
103- else if ((unitsBytes == toBytes("1")))
104- then 1
105- else if ((unitsBytes == toBytes("2")))
106- then 2
107- else if ((unitsBytes == toBytes("3")))
108- then 3
109- else if ((unitsBytes == toBytes("4")))
110- then 4
111- else if ((unitsBytes == toBytes("5")))
112- then 5
113- else if ((unitsBytes == toBytes("6")))
114- then 6
115- else if ((unitsBytes == toBytes("7")))
116- then 7
117- else if ((unitsBytes == toBytes("8")))
118- then 8
119- else if ((unitsBytes == toBytes("9")))
120- then 9
121- else 0
122- let tensInt = if ((tensBytes == toBytes("0")))
123- then 0
124- else if ((tensBytes == toBytes("1")))
125- then 10
126- else if ((tensBytes == toBytes("2")))
127- then 20
128- else 0
129- let posInt = (tensInt + unitsInt)
130- let validPos = if ((posInt >= startPos))
131- then (endPos >= posInt)
132- else false
133- if (!(validPos))
134- then throw("MTT: POSITION NUMBER is not valid")
135- else {
136- let posString = if ((posInt > 9))
137- then toString(posInt)
138- else ("0" + toString(posInt))
139- let posHashDefined = isDefined(getString(meAddress, ("hash" + posString)))
140- if (!(posHashDefined))
141- then throw("MTT: POSITION HASH did not found in data")
142- else {
143- let posHash = extract(getString(meAddress, ("hash" + posString)))
144- let validateAttachment = (sha256(winTransferAttachment) == fromBase58String(posHash))
145- if (!(validateAttachment))
146- then throw("MTT: ATTACHMENT HASH is not valid")
147- else {
148- let serverAddressCheck = if ((winTx.transfers[0].recipient == serverAddress))
149- then (size(winTx.transfers) == 2)
150- else false
151- if (!(serverAddressCheck))
152- then throw("MTT: SERVER ADDRESS is wrong")
153- else {
154- let isWinner = (winBytes == toBytes("1"))
155- if (!(isWinner))
156- then throw("MTT: POSITION is not winner")
157- else {
158- let paymentTxId = extract(getString(meAddress, ("pos" + posString)))
159- let paymentTx = transactionById(fromBase58String(paymentTxId))
160- match paymentTx {
161- case paymentTx: TransferTransaction =>
162- let recipientIsThePayment = (winTx.transfers[1].recipient == paymentTx.sender)
163- if (!(recipientIsThePayment))
164- then throw("MTT: WINNER RECIPIENT is wrong")
165- else if (if (if (if (if ((winTx.transfers[0].amount == ((wavesBalance(meAddress) - winAmount) - winTxFee)))
166- then (winTx.transfers[1].amount == winAmount)
167- else false)
168- then !(isDefined(paymentTx.assetId))
169- else false)
170- then !(isDefined(paymentTx.feeAssetId))
171- else false)
172- then (winTx.fee == winTxFee)
173- else false)
174- then if (sigVerify(winTx.bodyBytes, winTx.proofs[0], mePublicKey))
175- then true
176- else sigVerify(winTx.bodyBytes, winTx.proofs[0], paymentTx.senderPublicKey)
177- else false
163+ let pT = transactionById(fromBase58String(pTi))
164+ match pT {
165+ case pT: TransferTransaction =>
166+ if (if (if (if (if (if (if (if (dTiV)
167+ then (addressFromPublicKey(pT.attachment) == mA)
168+ else false)
169+ then (pT.recipient == sA)
170+ else false)
171+ then (pT.amount >= (pA - pTf))
172+ else false)
173+ then !(isDefined(pT.assetId))
174+ else false)
175+ then !(isDefined(pT.feeAssetId))
176+ else false)
177+ then sigVerify(dT.bodyBytes, dT.proofs[0], pT.senderPublicKey)
178+ else false)
179+ then (pT.sender != mA)
180+ else false)
181+ then (pT.sender != sA)
182+ else false
178183 case _ =>
179- throw("MTT: TRANSACTION type is not a TransferTransaction")
184+ throw("DT: TRANSACTION type is not a Transfer")
180185 }
181186 }
182187 }
184189 }
185190 }
186191 }
187- case serviceTx: TransferTransaction =>
188- let wavesRestCheck = ((winAmount + winTxFee) > wavesBalance(meAddress))
189- if (!(wavesRestCheck))
192+ case wT: MassTransferTransaction =>
193+ let wTa = wT.attachment
194+ if ((size(wTa) != (sL + 5)))
195+ then throw("MTT: ATTACHMENT SIZE is wrong")
196+ else {
197+ let uB = takeRightBytes(take(wTa, 2), 1)
198+ let tB = take(wTa, 1)
199+ let wB = takeRightBytes(take(wTa, 4), 1)
200+ let unitsInt = if ((uB == toBytes("0")))
201+ then 0
202+ else if ((uB == toBytes("1")))
203+ then 1
204+ else if ((uB == toBytes("2")))
205+ then 2
206+ else if ((uB == toBytes("3")))
207+ then 3
208+ else if ((uB == toBytes("4")))
209+ then 4
210+ else if ((uB == toBytes("5")))
211+ then 5
212+ else if ((uB == toBytes("6")))
213+ then 6
214+ else if ((uB == toBytes("7")))
215+ then 7
216+ else if ((uB == toBytes("8")))
217+ then 8
218+ else if ((uB == toBytes("9")))
219+ then 9
220+ else 0
221+ let tensInt = if ((tB == toBytes("0")))
222+ then 0
223+ else if ((tB == toBytes("1")))
224+ then 10
225+ else if ((tB == toBytes("2")))
226+ then 20
227+ else 0
228+ let posInt = (tensInt + unitsInt)
229+ let vP = if ((posInt >= sP))
230+ then (eP >= posInt)
231+ else false
232+ if (!(vP))
233+ then throw("MTT: POS NUMBER is not valid")
234+ else {
235+ let pS = if ((posInt > 9))
236+ then toString(posInt)
237+ else ("0" + toString(posInt))
238+ let pHd = isDefined(getString(mA, (pH + pS)))
239+ if (!(pHd))
240+ then throw("MTT: POS HASH not found in data")
241+ else {
242+ let psH = extract(getString(mA, (pH + pS)))
243+ let validateAttachment = (sha256(wTa) == fromBase58String(psH))
244+ if (!(validateAttachment))
245+ then throw("MTT: ATTACHMENT HASH is not valid")
246+ else {
247+ let sAc = if ((wT.transfers[0].recipient == sA))
248+ then (size(wT.transfers) == 2)
249+ else false
250+ if (!(sAc))
251+ then throw("MTT: SERVER ADDRESS is wrong")
252+ else {
253+ let iW = (wB == toBytes("1"))
254+ if (!(iW))
255+ then throw("MTT: POS is not winner")
256+ else {
257+ let pTi = extract(getString(mA, (pP + pS)))
258+ let pT = transactionById(fromBase58String(pTi))
259+ match pT {
260+ case pT: TransferTransaction =>
261+ let rItP = (wT.transfers[1].recipient == pT.sender)
262+ if (!(rItP))
263+ then throw("MTT: WINNER RECIPIENT is wrong")
264+ else if (if (if (if (if ((wT.transfers[0].amount == (((wavesBalance(mA) - wA) - wTf) - dTf)))
265+ then (wT.transfers[1].amount == wA)
266+ else false)
267+ then !(isDefined(pT.assetId))
268+ else false)
269+ then !(isDefined(pT.feeAssetId))
270+ else false)
271+ then (wT.fee == wTf)
272+ else false)
273+ then if (sigVerify(wT.bodyBytes, wT.proofs[0], sApK))
274+ then true
275+ else sigVerify(wT.bodyBytes, wT.proofs[0], pT.senderPublicKey)
276+ else false
277+ case _ =>
278+ throw("MTT: TRANSACTION type is not a Transfer")
279+ }
280+ }
281+ }
282+ }
283+ }
284+ }
285+ }
286+ case sT: TransferTransaction =>
287+ let wRc = ((wA + wTf) > wavesBalance(mA))
288+ if (!(wRc))
190289 then throw("TT: WAVES balance is more then win amount")
191290 else {
192- let serverAddressCheck = (serviceTx.recipient == serverAddress)
193- if (!(serverAddressCheck))
291+ let sAc = (sT.recipient == sA)
292+ if (!(sAc))
194293 then throw("TT: SERVER ADDRESS is wrong")
195- else if (sigVerify(serviceTx.bodyBytes, serviceTx.proofs[0], mePublicKey))
196- then (serviceTx.fee == winTxFee)
294+ else if (sigVerify(sT.bodyBytes, sT.proofs[0], sApK))
295+ then (sT.fee == wTf)
197296 else false
198297 }
199298 case _ =>
200- sigVerify(tx.bodyBytes, tx.proofs[0], mePublicKey)
299+ sigVerify(tx.bodyBytes, tx.proofs[0], mApK)
201300 }
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 1 #-}
1+{-# STDLIB_VERSION 2 #-}
22 {-# CONTENT_TYPE EXPRESSION #-}
3-let author = "MaDaMa Labs @daidalos"
4-let serverAddress = addressFromPublicKey(base58'CzeJPTyeyPycMs7HwFZZnDRoPiQ8zukioFvPduMmRSgR')
5-let oneWaves = 100000000
6-let paidAmount = (1 * oneWaves)
7-let winAmount = (10 * oneWaves)
8-let paidTxFee = (oneWaves / 100)
9-let dataTxFee = (oneWaves / 100)
10-let winTxFee = (oneWaves / 100)
11-let startPos = 0
12-let endPos = 24
13-let saltLength = 50
14-let meAddress = tx.sender
15-let mePublicKey = tx.senderPublicKey
16-if ((meAddress != addressFromPublicKey(mePublicKey)))
3+let a = "MaDaMa Labs @daidalos"
4+let sApK = base58'CzeJPTyeyPycMs7HwFZZnDRoPiQ8zukioFvPduMmRSgR'
5+let sA = addressFromPublicKey(sApK)
6+let mA = tx.sender
7+let mApK = tx.senderPublicKey
8+let oW = 100000000
9+let pA = (1 * oW)
10+let wA = (10 * oW)
11+let pTf = (oW / 100)
12+let dTf = (oW / 100)
13+let wTf = (oW / 100)
14+let sP = 0
15+let eP = 24
16+let pP = "_pos"
17+let pH = "_hash"
18+let sL = 50
19+if ((mA != addressFromPublicKey(mApK)))
1720 then throw("INIT: SENDER IS WRONG")
1821 else match tx {
19- case dataTx: DataTransaction =>
20- let insertPosCheck = isDefined(getInteger(dataTx.data, "pos"))
21- if (!(insertPosCheck))
22- then throw("DT: POSITION value is not an integer")
22+ case dT: DataTransaction =>
23+ if (sigVerify(dT.bodyBytes, dT.proofs[0], sApK))
24+ then if (isDefined(getString(dT.data, "_s_mt")))
25+ then {
26+ let sMt = extract(getString(dT.data, "_s_mt"))
27+ let mT = transactionById(fromBase58String(sMt))
28+ match mT {
29+ case mT: MassTransferTransaction =>
30+ if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((size(dT.data) == 26))
31+ then (mT.sender == mA)
32+ else false)
33+ then (dT.fee == dTf)
34+ else false)
35+ then isDefined(getString(dT.data, "_key00"))
36+ else false)
37+ then isDefined(getString(dT.data, "_key01"))
38+ else false)
39+ then isDefined(getString(dT.data, "_key02"))
40+ else false)
41+ then isDefined(getString(dT.data, "_key03"))
42+ else false)
43+ then isDefined(getString(dT.data, "_key04"))
44+ else false)
45+ then isDefined(getString(dT.data, "_key05"))
46+ else false)
47+ then isDefined(getString(dT.data, "_key06"))
48+ else false)
49+ then isDefined(getString(dT.data, "_key07"))
50+ else false)
51+ then isDefined(getString(dT.data, "_key08"))
52+ else false)
53+ then isDefined(getString(dT.data, "_key09"))
54+ else false)
55+ then isDefined(getString(dT.data, "_key10"))
56+ else false)
57+ then isDefined(getString(dT.data, "_key11"))
58+ else false)
59+ then isDefined(getString(dT.data, "_key12"))
60+ else false)
61+ then isDefined(getString(dT.data, "_key13"))
62+ else false)
63+ then isDefined(getString(dT.data, "_key14"))
64+ else false)
65+ then isDefined(getString(dT.data, "_key15"))
66+ else false)
67+ then isDefined(getString(dT.data, "_key16"))
68+ else false)
69+ then isDefined(getString(dT.data, "_key17"))
70+ else false)
71+ then isDefined(getString(dT.data, "_key18"))
72+ else false)
73+ then isDefined(getString(dT.data, "_key19"))
74+ else false)
75+ then isDefined(getString(dT.data, "_key20"))
76+ else false)
77+ then isDefined(getString(dT.data, "_key21"))
78+ else false)
79+ then isDefined(getString(dT.data, "_key22"))
80+ else false)
81+ then isDefined(getString(dT.data, "_key23"))
82+ else false)
83+ then isDefined(getString(dT.data, "_key24"))
84+ else false
85+ case _ =>
86+ false
87+ }
88+ }
89+ else {
90+ let sHash = getString(dT.data, "_s_hash")
91+ let sPos = getString(dT.data, "_s_pos")
92+ let sKey = getString(dT.data, "_s_key")
93+ if (if (if (if (if (if (if (if (if (if (if ((size(dT.data) == 4))
94+ then (dT.fee == dTf)
95+ else false)
96+ then isDefined(sHash)
97+ else false)
98+ then isDefined(sPos)
99+ else false)
100+ then isDefined(sKey)
101+ else false)
102+ then isDefined(getString(dT.data, extract(sKey)))
103+ else false)
104+ then (takeRight(extract(sHash), 2) == takeRight(extract(sPos), 2))
105+ else false)
106+ then (takeRight(extract(sHash), 2) == takeRight(extract(sKey), 2))
107+ else false)
108+ then (takeRight(extract(sKey), 2) == take(extract(getString(dT.data, extract(sKey))), 2))
109+ else false)
110+ then isDefined(getString(mA, extract(sHash)))
111+ else false)
112+ then isDefined(getString(mA, extract(sPos)))
113+ else false)
114+ then !(isDefined(getString(mA, extract(sKey))))
115+ else false
116+ }
23117 else {
24- let insertPos = extract(getInteger(dataTx.data, "pos"))
25- let validPos = if ((insertPos >= startPos))
26- then (endPos >= insertPos)
27- else false
28- if (!(validPos))
29- then throw("DT: POSITION is not valid")
118+ let iPc = isDefined(getInteger(dT.data, pP))
119+ if (!(iPc))
120+ then throw("DT: POS value is not an int")
30121 else {
31- let insertPosStringTemp = if ((insertPos > 9))
32- then toString(insertPos)
33- else ("0" + toString(insertPos))
34- let insertPosString = ("pos" + insertPosStringTemp)
35- let paymentTxId = extract(getString(dataTx.data, insertPosString))
36- let satisfiesFormat = if (if (if (if ((size(dataTx.data) == 3))
37- then insertPosCheck
38- else false)
39- then isDefined(getString(dataTx.data, insertPosString))
40- else false)
41- then isDefined(getBoolean(dataTx.data, paymentTxId))
42- else false)
43- then (extract(getBoolean(dataTx.data, paymentTxId)) == true)
122+ let iP = extract(getInteger(dT.data, pP))
123+ let vP = if ((iP >= sP))
124+ then (eP >= iP)
44125 else false
45- if (!(satisfiesFormat))
46- then throw("DT: DATA FORMAT is not valid")
126+ if (!(vP))
127+ then throw("DT: POS is not valid")
47128 else {
48- let posNotUsed = !(isDefined(getString(meAddress, insertPosString)))
49- if (!(posNotUsed))
50- then throw("DT: POSISTION alredy used")
129+ let iPsT = if ((iP > 9))
130+ then toString(iP)
131+ else ("0" + toString(iP))
132+ let iPs = (pP + iPsT)
133+ let pTi = extract(getString(dT.data, iPs))
134+ let sF = if (if (if (if (if ((size(dT.data) == 3))
135+ then (dT.fee == dTf)
136+ else false)
137+ then iPc
138+ else false)
139+ then isDefined(getString(dT.data, iPs))
140+ else false)
141+ then isDefined(getBoolean(dT.data, pTi))
142+ else false)
143+ then (extract(getBoolean(dT.data, pTi)) == true)
144+ else false
145+ if (!(sF))
146+ then throw("DT: DATA FORMAT is not valid")
51147 else {
52- let txIdNotUsed = !(isDefined(getBoolean(meAddress, paymentTxId)))
53- if (!(txIdNotUsed))
54- then throw("DT: TXID alredy used")
148+ let pNu = !(isDefined(getString(mA, iPs)))
149+ if (!(pNu))
150+ then throw("DT: POSISTION alredy used")
55151 else {
56- let dataTransactionIsValid = if (if (if (if (validPos)
57- then satisfiesFormat
58- else false)
59- then posNotUsed
60- else false)
61- then txIdNotUsed
62- else false)
63- then (dataTx.fee == dataTxFee)
64- else false
65- let paymentTx = transactionById(fromBase58String(paymentTxId))
66- match paymentTx {
67- case paymentTx: TransferTransaction =>
68- if (if (if (if (if (if (if (if (dataTransactionIsValid)
69- then (addressFromPublicKey(paymentTx.attachment) == meAddress)
152+ let iInU = !(isDefined(getBoolean(mA, pTi)))
153+ if (!(iInU))
154+ then throw("DT: TXID alredy used")
155+ else {
156+ let dTiV = if (if (if (vP)
157+ then sF
70158 else false)
71- then (paymentTx.recipient == serverAddress)
159+ then pNu
72160 else false)
73- then (paymentTx.amount >= (paidAmount - paidTxFee))
74- else false)
75- then !(isDefined(paymentTx.assetId))
76- else false)
77- then !(isDefined(paymentTx.feeAssetId))
78- else false)
79- then sigVerify(dataTx.bodyBytes, dataTx.proofs[0], paymentTx.senderPublicKey)
80- else false)
81- then (paymentTx.sender != meAddress)
82- else false)
83- then (paymentTx.sender != serverAddress)
161+ then iInU
84162 else false
85- case _ =>
86- throw("DT: TRANSACTION type is not a TransferTransaction")
87- }
88- }
89- }
90- }
91- }
92- }
93- case winTx: MassTransferTransaction =>
94- let winTransferAttachment = winTx.attachment
95- if ((size(winTransferAttachment) != (saltLength + 5)))
96- then throw("MTT: ATTACHMENT SIZE is wrong")
97- else {
98- let unitsBytes = takeRightBytes(take(winTransferAttachment, 2), 1)
99- let tensBytes = take(winTransferAttachment, 1)
100- let winBytes = takeRightBytes(take(winTransferAttachment, 4), 1)
101- let unitsInt = if ((unitsBytes == toBytes("0")))
102- then 0
103- else if ((unitsBytes == toBytes("1")))
104- then 1
105- else if ((unitsBytes == toBytes("2")))
106- then 2
107- else if ((unitsBytes == toBytes("3")))
108- then 3
109- else if ((unitsBytes == toBytes("4")))
110- then 4
111- else if ((unitsBytes == toBytes("5")))
112- then 5
113- else if ((unitsBytes == toBytes("6")))
114- then 6
115- else if ((unitsBytes == toBytes("7")))
116- then 7
117- else if ((unitsBytes == toBytes("8")))
118- then 8
119- else if ((unitsBytes == toBytes("9")))
120- then 9
121- else 0
122- let tensInt = if ((tensBytes == toBytes("0")))
123- then 0
124- else if ((tensBytes == toBytes("1")))
125- then 10
126- else if ((tensBytes == toBytes("2")))
127- then 20
128- else 0
129- let posInt = (tensInt + unitsInt)
130- let validPos = if ((posInt >= startPos))
131- then (endPos >= posInt)
132- else false
133- if (!(validPos))
134- then throw("MTT: POSITION NUMBER is not valid")
135- else {
136- let posString = if ((posInt > 9))
137- then toString(posInt)
138- else ("0" + toString(posInt))
139- let posHashDefined = isDefined(getString(meAddress, ("hash" + posString)))
140- if (!(posHashDefined))
141- then throw("MTT: POSITION HASH did not found in data")
142- else {
143- let posHash = extract(getString(meAddress, ("hash" + posString)))
144- let validateAttachment = (sha256(winTransferAttachment) == fromBase58String(posHash))
145- if (!(validateAttachment))
146- then throw("MTT: ATTACHMENT HASH is not valid")
147- else {
148- let serverAddressCheck = if ((winTx.transfers[0].recipient == serverAddress))
149- then (size(winTx.transfers) == 2)
150- else false
151- if (!(serverAddressCheck))
152- then throw("MTT: SERVER ADDRESS is wrong")
153- else {
154- let isWinner = (winBytes == toBytes("1"))
155- if (!(isWinner))
156- then throw("MTT: POSITION is not winner")
157- else {
158- let paymentTxId = extract(getString(meAddress, ("pos" + posString)))
159- let paymentTx = transactionById(fromBase58String(paymentTxId))
160- match paymentTx {
161- case paymentTx: TransferTransaction =>
162- let recipientIsThePayment = (winTx.transfers[1].recipient == paymentTx.sender)
163- if (!(recipientIsThePayment))
164- then throw("MTT: WINNER RECIPIENT is wrong")
165- else if (if (if (if (if ((winTx.transfers[0].amount == ((wavesBalance(meAddress) - winAmount) - winTxFee)))
166- then (winTx.transfers[1].amount == winAmount)
167- else false)
168- then !(isDefined(paymentTx.assetId))
169- else false)
170- then !(isDefined(paymentTx.feeAssetId))
171- else false)
172- then (winTx.fee == winTxFee)
173- else false)
174- then if (sigVerify(winTx.bodyBytes, winTx.proofs[0], mePublicKey))
175- then true
176- else sigVerify(winTx.bodyBytes, winTx.proofs[0], paymentTx.senderPublicKey)
177- else false
163+ let pT = transactionById(fromBase58String(pTi))
164+ match pT {
165+ case pT: TransferTransaction =>
166+ if (if (if (if (if (if (if (if (dTiV)
167+ then (addressFromPublicKey(pT.attachment) == mA)
168+ else false)
169+ then (pT.recipient == sA)
170+ else false)
171+ then (pT.amount >= (pA - pTf))
172+ else false)
173+ then !(isDefined(pT.assetId))
174+ else false)
175+ then !(isDefined(pT.feeAssetId))
176+ else false)
177+ then sigVerify(dT.bodyBytes, dT.proofs[0], pT.senderPublicKey)
178+ else false)
179+ then (pT.sender != mA)
180+ else false)
181+ then (pT.sender != sA)
182+ else false
178183 case _ =>
179- throw("MTT: TRANSACTION type is not a TransferTransaction")
184+ throw("DT: TRANSACTION type is not a Transfer")
180185 }
181186 }
182187 }
183188 }
184189 }
185190 }
186191 }
187- case serviceTx: TransferTransaction =>
188- let wavesRestCheck = ((winAmount + winTxFee) > wavesBalance(meAddress))
189- if (!(wavesRestCheck))
192+ case wT: MassTransferTransaction =>
193+ let wTa = wT.attachment
194+ if ((size(wTa) != (sL + 5)))
195+ then throw("MTT: ATTACHMENT SIZE is wrong")
196+ else {
197+ let uB = takeRightBytes(take(wTa, 2), 1)
198+ let tB = take(wTa, 1)
199+ let wB = takeRightBytes(take(wTa, 4), 1)
200+ let unitsInt = if ((uB == toBytes("0")))
201+ then 0
202+ else if ((uB == toBytes("1")))
203+ then 1
204+ else if ((uB == toBytes("2")))
205+ then 2
206+ else if ((uB == toBytes("3")))
207+ then 3
208+ else if ((uB == toBytes("4")))
209+ then 4
210+ else if ((uB == toBytes("5")))
211+ then 5
212+ else if ((uB == toBytes("6")))
213+ then 6
214+ else if ((uB == toBytes("7")))
215+ then 7
216+ else if ((uB == toBytes("8")))
217+ then 8
218+ else if ((uB == toBytes("9")))
219+ then 9
220+ else 0
221+ let tensInt = if ((tB == toBytes("0")))
222+ then 0
223+ else if ((tB == toBytes("1")))
224+ then 10
225+ else if ((tB == toBytes("2")))
226+ then 20
227+ else 0
228+ let posInt = (tensInt + unitsInt)
229+ let vP = if ((posInt >= sP))
230+ then (eP >= posInt)
231+ else false
232+ if (!(vP))
233+ then throw("MTT: POS NUMBER is not valid")
234+ else {
235+ let pS = if ((posInt > 9))
236+ then toString(posInt)
237+ else ("0" + toString(posInt))
238+ let pHd = isDefined(getString(mA, (pH + pS)))
239+ if (!(pHd))
240+ then throw("MTT: POS HASH not found in data")
241+ else {
242+ let psH = extract(getString(mA, (pH + pS)))
243+ let validateAttachment = (sha256(wTa) == fromBase58String(psH))
244+ if (!(validateAttachment))
245+ then throw("MTT: ATTACHMENT HASH is not valid")
246+ else {
247+ let sAc = if ((wT.transfers[0].recipient == sA))
248+ then (size(wT.transfers) == 2)
249+ else false
250+ if (!(sAc))
251+ then throw("MTT: SERVER ADDRESS is wrong")
252+ else {
253+ let iW = (wB == toBytes("1"))
254+ if (!(iW))
255+ then throw("MTT: POS is not winner")
256+ else {
257+ let pTi = extract(getString(mA, (pP + pS)))
258+ let pT = transactionById(fromBase58String(pTi))
259+ match pT {
260+ case pT: TransferTransaction =>
261+ let rItP = (wT.transfers[1].recipient == pT.sender)
262+ if (!(rItP))
263+ then throw("MTT: WINNER RECIPIENT is wrong")
264+ else if (if (if (if (if ((wT.transfers[0].amount == (((wavesBalance(mA) - wA) - wTf) - dTf)))
265+ then (wT.transfers[1].amount == wA)
266+ else false)
267+ then !(isDefined(pT.assetId))
268+ else false)
269+ then !(isDefined(pT.feeAssetId))
270+ else false)
271+ then (wT.fee == wTf)
272+ else false)
273+ then if (sigVerify(wT.bodyBytes, wT.proofs[0], sApK))
274+ then true
275+ else sigVerify(wT.bodyBytes, wT.proofs[0], pT.senderPublicKey)
276+ else false
277+ case _ =>
278+ throw("MTT: TRANSACTION type is not a Transfer")
279+ }
280+ }
281+ }
282+ }
283+ }
284+ }
285+ }
286+ case sT: TransferTransaction =>
287+ let wRc = ((wA + wTf) > wavesBalance(mA))
288+ if (!(wRc))
190289 then throw("TT: WAVES balance is more then win amount")
191290 else {
192- let serverAddressCheck = (serviceTx.recipient == serverAddress)
193- if (!(serverAddressCheck))
291+ let sAc = (sT.recipient == sA)
292+ if (!(sAc))
194293 then throw("TT: SERVER ADDRESS is wrong")
195- else if (sigVerify(serviceTx.bodyBytes, serviceTx.proofs[0], mePublicKey))
196- then (serviceTx.fee == winTxFee)
294+ else if (sigVerify(sT.bodyBytes, sT.proofs[0], sApK))
295+ then (sT.fee == wTf)
197296 else false
198297 }
199298 case _ =>
200- sigVerify(tx.bodyBytes, tx.proofs[0], mePublicKey)
299+ sigVerify(tx.bodyBytes, tx.proofs[0], mApK)
201300 }

github/deemru/w8io/3ef1775 
76.33 ms