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