tx · 3PZDdpYF4SWK8cyz2zJkCeYK8LjM8fE2pDyP6NZowLkw

3N4Z7j4oSNfJVUtP4kmMKbhZD5n4xPFpPAu:  -0.01400000 Waves

2019.01.31 21:08 [474778] smart account 3N4Z7j4oSNfJVUtP4kmMKbhZD5n4xPFpPAu > SELF 0.00000000 Waves

{ "type": 13, "id": "3PZDdpYF4SWK8cyz2zJkCeYK8LjM8fE2pDyP6NZowLkw", "fee": 1400000, "feeAssetId": null, "timestamp": 1548958127047, "version": 1, "sender": "3N4Z7j4oSNfJVUtP4kmMKbhZD5n4xPFpPAu", "senderPublicKey": "F3DbYSfYZz6arcD6Mst8HdWScxTeWvTvatC7jp4DGryX", "proofs": [ "4vsFXbtyVjCY7Hx38fyyGLsQ74jqVwa7V6Zxf3xy7QvixDtgTxDhCrZ1spEMLEFdkREJvqGMdHijJfExWYm6dzrt" ], "script": "base64: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", "chainId": 84, "height": 474778, "spentComplexity": 0 } View: original | compacted Prev: GeqQdZBxBudmBGvMeXEiuHpa8zKiDR3SdBoLq3CHKAxN Next: 5Ebva9wjZm6ErQxwyc8LX56yXtPhzx8SJoYe8aRdL99o Full:
OldNewDifferences
11 {-# STDLIB_VERSION 1 #-}
22 {-# CONTENT_TYPE EXPRESSION #-}
33 let me = tx.sender
44 let oracle = extract(addressFromString("3NCzaYTNDGtR8zf9yfcqePFjCqFx9S5zhs4"))
55 let dataTxFee = 1000000
66 match tx {
77 case withdrawTx: TransferTransaction =>
88 let txId = extract(getString(me, toBase58String(tx.proofs[1])))
99 match transactionById(tx.proofs[1]) {
1010 case paymentTx: TransferTransaction =>
1111 let isPaymentTookPlace = if ((txId == toBase58String(tx.id)))
1212 then sigVerify(tx.bodyBytes, tx.proofs[0], paymentTx.senderPublicKey)
1313 else false
1414 let att = paymentTx.attachment
1515 let type = dropRightBytes(takeRightBytes(att, 2), 1)
1616 let val = takeRightBytes(att, 1)
1717 let key = dropRightBytes(att, 2)
1818 let heightRes = extract(getInteger(oracle, (toBase58String(key) + "height")))
1919 let isCheater = (extract(transactionHeightById(paymentTx.id)) >= heightRes)
2020 let valComplex = extract(getBinary(oracle, toBase58String(key)))
2121 let koeff = if ((type == drop(toBytes(0), 7)))
2222 then 35
2323 else if ((type == drop(toBytes(1), 7)))
2424 then 1
2525 else if ((type == drop(toBytes(2), 7)))
2626 then 1
2727 else if ((type == drop(toBytes(3), 7)))
2828 then 1
2929 else if ((type == drop(toBytes(4), 7)))
3030 then 2
3131 else if ((type == drop(toBytes(5), 7)))
3232 then 2
3333 else 0
3434 let ver = take(valComplex, 1)
3535 let valReal = if ((type == drop(toBytes(0), 7)))
3636 then drop(take(valComplex, 2), 1)
3737 else if ((type == drop(toBytes(1), 7)))
3838 then drop(take(valComplex, 3), 2)
3939 else if ((type == drop(toBytes(2), 7)))
4040 then drop(take(valComplex, 4), 3)
4141 else if ((type == drop(toBytes(3), 7)))
4242 then drop(take(valComplex, 5), 4)
4343 else if ((type == drop(toBytes(4), 7)))
4444 then drop(take(valComplex, 6), 5)
4545 else if ((type == drop(toBytes(5), 7)))
4646 then drop(take(valComplex, 7), 5)
4747 else toBytes(38)
4848 let isWin = if ((val == valReal))
4949 then (val != toBytes(38))
5050 else false
5151 let isAmountOk = (withdrawTx.amount == (((paymentTx.amount * koeff) - dataTxFee) - withdrawTx.fee))
5252 let isInWaves = if (!(isDefined(withdrawTx.feeAssetId)))
5353 then !(isDefined(withdrawTx.assetId))
5454 else false
5555 if (if (if (if (isPaymentTookPlace)
5656 then isWin
5757 else false)
5858 then isAmountOk
5959 else false)
6060 then isInWaves
6161 else false)
6262 then !(isCheater)
6363 else false
6464 case _ =>
6565 false
6666 }
6767 case dtx: DataTransaction =>
6868 let paymentTxIdStr = extract(dtx.data[0].key)
6969 let paymentTx = transactionById(fromBase58String(paymentTxIdStr))
7070 let isFeeCorrect = (dataTxFee >= dtx.fee)
7171 let isPaymentAlreadyMentioned = isDefined(getString(me, paymentTxIdStr))
7272 let withdrawTransactionId = fromBase58String(extract(getString(me, paymentTxIdStr)))
7373 let isWithdrawExist = isDefined(transactionById(withdrawTransactionId))
7474 match paymentTx {
7575 case paymentTx: TransferTransaction =>
7676 let isDtxSignedByPayer = sigVerify(dtx.bodyBytes, dtx.proofs[0], paymentTx.senderPublicKey)
7777 if (if (if (!(isPaymentAlreadyMentioned))
7878 then true
7979 else !(isWithdrawExist))
8080 then isDtxSignedByPayer
8181 else false)
8282 then isFeeCorrect
8383 else false
8484 case _ =>
8585 false
8686 }
8787 case _ =>
8888 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
8989 }

github/deemru/w8io/3ef1775 
49.67 ms