tx · AjdfZQacydDopiiP51xcPf9USKufd3k1mFWETpt2BDRz 3PCoxL4cESmCNKEKopABPfTcxhoAERVykCP: -0.10000000 Waves 2021.03.09 18:35 [2494995] smart account 3PCoxL4cESmCNKEKopABPfTcxhoAERVykCP > SELF 0.00000000 Waves
{ "type": 13, "id": "AjdfZQacydDopiiP51xcPf9USKufd3k1mFWETpt2BDRz", "fee": 10000000, "feeAssetId": null, "timestamp": 1615304101168, "version": 1, "sender": "3PCoxL4cESmCNKEKopABPfTcxhoAERVykCP", "senderPublicKey": "286NiStEZTAzaw4ekceUkPiHn5Moa9B4MJC3ScnhqABW", "proofs": [ "5vy4exn4ZgRsdVp2yVKBHLhkNj6EHjLTNnYh5vS6NJPDFrs3XYZ8VohyiTG17Zs1LK6xBJ1xS9v49jt9kMJDQnyE" ], "script": "base64:AAIDAAAAAAAAAA0IARIECgICARIDCgEIAAAAHgAAAAAETk9ORQAAAAAAAAAAAAAAAAADTkVXAAAAAAAAAAABAAAAAAlDT01QTEVURUQAAAAAAAAAAAIAAAAAB0FQUFJPVkUAAAAAAAAAAAEAAAAABlVOTE9DSwAAAAAAAAAAAgAAAAAITE9DS1RZUEUAAAAAAAAAAAEAAAAAClVOTE9DS1RZUEUAAAAAAAAAAAIBAAAAD2dldEludGVnZXJCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAF2BQAAAAckbWF0Y2gwBQAAAAF2AAAAAAAAAAAAAQAAAA1nZXRCeXRlc0J5S2V5AAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQcAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAF2BQAAAAckbWF0Y2gwBQAAAAF2AQAAAAPQAAABAAAADmdldFN0cmluZ0J5S2V5AAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXYFAAAAByRtYXRjaDAFAAAAAXYCAAAAAAAAAAAKQXNzZXRJZEtleQIAAAAIYXNzZXRfaWQAAAAACkZpcnN0UnFLZXkCAAAACGZpcnN0X3JxAAAAAAlMYXN0UnFLZXkCAAAAB2xhc3RfcnEAAAAAEE5lYnVsYUFkZHJlc3NLZXkCAAAADm5lYnVsYV9hZGRyZXNzAQAAAAxnZXROZXh0UnFLZXkAAAABAAAAAmlkCQABLAAAAAICAAAACG5leHRfcnFfBQAAAAJpZAEAAAAMZ2V0UHJldlJxS2V5AAAAAQAAAAJpZAkAASwAAAACAgAAAAhwcmV2X3JxXwUAAAACaWQBAAAAEGdldFJxUmVjZWl2ZXJLZXkAAAABAAAAAmlkCQABLAAAAAICAAAADHJxX3JlY2VpdmVyXwUAAAACaWQBAAAADmdldFJxQW1vdW50S2V5AAAAAQAAAAJpZAkAASwAAAACAgAAAApycV9hbW91bnRfBQAAAAJpZAEAAAAOZ2V0UnFTdGF0dXNLZXkAAAABAAAAAmlkCQABLAAAAAICAAAACnJxX3N0YXR1c18FAAAAAmlkAQAAAAxnZXRScVR5cGVLZXkAAAABAAAAAmlkCQABLAAAAAICAAAACHJxX3R5cGVfBQAAAAJpZAAAAAANbmVidWxhQWRkcmVzcwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAABBOZWJ1bGFBZGRyZXNzS2V5AAAAAAdhc3NldElkCQACWQAAAAEJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAACkFzc2V0SWRLZXkAAAAAB2ZpcnN0UnEJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAACkZpcnN0UnFLZXkAAAAABmxhc3RScQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAAJTGFzdFJxS2V5AQAAAAlnZXROZXh0UnEAAAABAAAAAmlkCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAMZ2V0TmV4dFJxS2V5AAAAAQUAAAACaWQBAAAACWdldFByZXZScQAAAAEAAAACaWQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAxnZXRQcmV2UnFLZXkAAAABBQAAAAJpZAEAAAALZ2V0UnFBbW91bnQAAAABAAAAAmlkCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQkBAAAADmdldFJxQW1vdW50S2V5AAAAAQUAAAACaWQBAAAAC2dldFJxU3RhdHVzAAAAAQAAAAJpZAkBAAAAD2dldEludGVnZXJCeUtleQAAAAEJAQAAAA5nZXRScVN0YXR1c0tleQAAAAEFAAAAAmlkAQAAAAlnZXRScVR5cGUAAAABAAAAAmlkCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQkBAAAADGdldFJxVHlwZUtleQAAAAEFAAAAAmlkAQAAAA1nZXRScVJlY2VpdmVyAAAAAQAAAAJpZAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAEGdldFJxUmVjZWl2ZXJLZXkAAAABBQAAAAJpZAAAAAIAAAABaQEAAAAKYXR0YWNoRGF0YQAA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", "chainId": 87, "height": 2494995, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 3 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let NONE = 0 | |
5 | + | ||
6 | + | let NEW = 1 | |
7 | + | ||
8 | + | let COMPLETED = 2 | |
9 | + | ||
10 | + | let APPROVE = 1 | |
11 | + | ||
12 | + | let UNLOCK = 2 | |
13 | + | ||
14 | + | let LOCKTYPE = 1 | |
15 | + | ||
16 | + | let UNLOCKTYPE = 2 | |
17 | + | ||
18 | + | func getIntegerByKey (key) = match getInteger(this, key) { | |
19 | + | case v: Int => | |
20 | + | v | |
21 | + | case _ => | |
22 | + | 0 | |
23 | + | } | |
24 | + | ||
25 | + | ||
26 | + | func getBytesByKey (key) = match getBinary(this, key) { | |
27 | + | case v: ByteVector => | |
28 | + | v | |
29 | + | case _ => | |
30 | + | base58'2CsAf' | |
31 | + | } | |
32 | + | ||
33 | + | ||
34 | + | func getStringByKey (key) = match getString(this, key) { | |
35 | + | case v: String => | |
36 | + | v | |
37 | + | case _ => | |
38 | + | "" | |
39 | + | } | |
40 | + | ||
41 | + | ||
42 | + | let AssetIdKey = "asset_id" | |
43 | + | ||
44 | + | let FirstRqKey = "first_rq" | |
45 | + | ||
46 | + | let LastRqKey = "last_rq" | |
47 | + | ||
48 | + | let NebulaAddressKey = "nebula_address" | |
49 | + | ||
50 | + | func getNextRqKey (id) = ("next_rq_" + id) | |
51 | + | ||
52 | + | ||
53 | + | func getPrevRqKey (id) = ("prev_rq_" + id) | |
54 | + | ||
55 | + | ||
56 | + | func getRqReceiverKey (id) = ("rq_receiver_" + id) | |
57 | + | ||
58 | + | ||
59 | + | func getRqAmountKey (id) = ("rq_amount_" + id) | |
60 | + | ||
61 | + | ||
62 | + | func getRqStatusKey (id) = ("rq_status_" + id) | |
63 | + | ||
64 | + | ||
65 | + | func getRqTypeKey (id) = ("rq_type_" + id) | |
66 | + | ||
67 | + | ||
68 | + | let nebulaAddress = addressFromStringValue(getStringByKey(NebulaAddressKey)) | |
69 | + | ||
70 | + | let assetId = fromBase58String(getStringByKey(AssetIdKey)) | |
71 | + | ||
72 | + | let firstRq = getStringByKey(FirstRqKey) | |
73 | + | ||
74 | + | let lastRq = getStringByKey(LastRqKey) | |
75 | + | ||
76 | + | func getNextRq (id) = getStringByKey(getNextRqKey(id)) | |
77 | + | ||
78 | + | ||
79 | + | func getPrevRq (id) = getStringByKey(getPrevRqKey(id)) | |
80 | + | ||
81 | + | ||
82 | + | func getRqAmount (id) = getIntegerByKey(getRqAmountKey(id)) | |
83 | + | ||
84 | + | ||
85 | + | func getRqStatus (id) = getIntegerByKey(getRqStatusKey(id)) | |
86 | + | ||
87 | + | ||
88 | + | func getRqType (id) = getIntegerByKey(getRqTypeKey(id)) | |
89 | + | ||
90 | + | ||
91 | + | func getRqReceiver (id) = getStringByKey(getRqReceiverKey(id)) | |
92 | + | ||
93 | + | ||
94 | + | @Callable(i) | |
95 | + | func attachData (v,vPulseId) = { | |
96 | + | let action = toInt(take(v, 8)) | |
97 | + | let rqId = toBase58String(take(drop(v, 8), 32)) | |
98 | + | if ((i.caller != nebulaAddress)) | |
99 | + | then throw("invalid sender") | |
100 | + | else if ((action == UNLOCK)) | |
101 | + | then { | |
102 | + | let amount = toInt(take(drop(v, 40), 8)) | |
103 | + | if ((getRqStatus(rqId) != NONE)) | |
104 | + | then throw("rq is exist") | |
105 | + | else { | |
106 | + | let recipient = take(drop(v, 48), 26) | |
107 | + | ScriptResult(WriteSet([DataEntry(getRqStatusKey(rqId), COMPLETED), DataEntry(getRqAmountKey(rqId), amount), DataEntry(getRqTypeKey(rqId), UNLOCKTYPE)]), TransferSet([ScriptTransfer(Address(recipient), amount, assetId)])) | |
108 | + | } | |
109 | + | } | |
110 | + | else if ((action == APPROVE)) | |
111 | + | then if ((getRqStatus(rqId) == NONE)) | |
112 | + | then throw("rq not found") | |
113 | + | else if ((getRqStatus(rqId) == COMPLETED)) | |
114 | + | then throw("rq was approved") | |
115 | + | else { | |
116 | + | let nextRq = getNextRq(rqId) | |
117 | + | let prevRq = getPrevRq(rqId) | |
118 | + | WriteSet([DataEntry(FirstRqKey, if ((firstRq == rqId)) | |
119 | + | then getNextRq(rqId) | |
120 | + | else firstRq), DataEntry(LastRqKey, if ((lastRq == rqId)) | |
121 | + | then getPrevRq(rqId) | |
122 | + | else lastRq), DataEntry(getNextRqKey(prevRq), nextRq), DataEntry(getPrevRqKey(nextRq), prevRq), DataEntry(getRqStatusKey(rqId), COMPLETED)]) | |
123 | + | } | |
124 | + | else throw("invalid action type") | |
125 | + | } | |
126 | + | ||
127 | + | ||
128 | + | ||
129 | + | @Callable(i) | |
130 | + | func createTransferWrapRq (receiver) = { | |
131 | + | let pmt = value(i.payment) | |
132 | + | let rqId = toBase58String(i.transactionId) | |
133 | + | if ((pmt.assetId != assetId)) | |
134 | + | then throw("invalid asset in payments") | |
135 | + | else WriteSet([DataEntry(FirstRqKey, if ((firstRq == "")) | |
136 | + | then rqId | |
137 | + | else firstRq), DataEntry(LastRqKey, rqId), DataEntry(getNextRqKey(lastRq), rqId), DataEntry(getPrevRqKey(rqId), lastRq), DataEntry(getRqAmountKey(rqId), pmt.amount), DataEntry(getRqStatusKey(rqId), NEW), DataEntry(getRqReceiverKey(rqId), receiver), DataEntry(getRqTypeKey(rqId), LOCKTYPE)]) | |
138 | + | } | |
139 | + | ||
140 | + |
github/deemru/w8io/3ef1775 26.41 ms ◑