tx · FKqe3qf1n3mNtiFHT4LaB3CPHdcrZJKbfkjXw5QGE2Jg 3PAimVkP7cqar6gMKNh5bQDNH9x4U6sXE7u: -0.01000000 Waves 2022.01.03 19:48 [2928067] smart account 3PAimVkP7cqar6gMKNh5bQDNH9x4U6sXE7u > SELF 0.00000000 Waves
{ "type": 13, "id": "FKqe3qf1n3mNtiFHT4LaB3CPHdcrZJKbfkjXw5QGE2Jg", "fee": 1000000, "feeAssetId": null, "timestamp": 1641228470535, "version": 1, "sender": "3PAimVkP7cqar6gMKNh5bQDNH9x4U6sXE7u", "senderPublicKey": "FZMCzazzRQMocGNfhYr2gvt3qrzyG2Z6FCw1nTDmkDCA", "proofs": [ "H5artYzRvKpmhY3htva66vKd19teTppzuuoRPY9bgkW9TetH1cuF3Pvbo4sQR9QpPWHvg46DL6GzsLxpDUGbCdn" ], "script": "base64:AAIFAAAAAAAAAAsIAhIFCgMIAQgSAAAAAAoBAAAACmtleUFzc2V0SWQAAAABAAAAB2FkZHJlc3MJAAEsAAAAAgIAAAAPJXMlc19fYXNzZXRJZF9fBQAAAAdhZGRyZXNzAQAAAAlrZXlBbW91bnQAAAABAAAAB2FkZHJlc3MJAAEsAAAAAgIAAAAOJXMlc19fYW1vdW50X18FAAAAB2FkZHJlc3MBAAAACmtleVBhcnRuZXIAAAABAAAAB2FkZHJlc3MJAAEsAAAAAgIAAAAPJXMlc19fcGFydG5lcl9fBQAAAAdhZGRyZXNzAQAAABBrZXlXYW50ZWRBc3NldElkAAAAAQAAAAdhZGRyZXNzCQABLAAAAAICAAAAFSVzJXNfX3dhbnRlZEFzc2V0SWRfXwUAAAAHYWRkcmVzcwEAAAAPa2V5V2FudGVkQW1vdW50AAAAAQAAAAdhZGRyZXNzCQABLAAAAAICAAAAFCVzJXNfX3dhbnRlZEFtb3VudF9fBQAAAAdhZGRyZXNzAQAAAAV0b1N0cgAAAAEAAAAHYXNzZXRJZAMJAAAAAAAAAgUAAAAHYXNzZXRJZAUAAAAEdW5pdAIAAAAFV0FWRVMJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQUAAAAHYXNzZXRJZAEAAAAHZnJvbVN0cgAAAAEAAAAKYXNzZXRJZFN0cgMJAAAAAAAAAgUAAAAKYXNzZXRJZFN0cgIAAAAFV0FWRVMFAAAABHVuaXQJAAJZAAAAAQUAAAAKYXNzZXRJZFN0cgEAAAASY3Jvc3NDaGVja0Fzc2V0SWRzAAAABQAAAA5wYXJ0bmVyQWRkcmVzcwAAABBteU9mZmVyZWRBc3NldElkAAAAD215V2FudGVkQXNzZXRJZAAAABVwYXJ0bmVyT2ZmZXJlZEFzc2V0SWQAAAAUcGFydG5lcldhbnRlZEFzc2V0SWQDAwkBAAAAAiE9AAAAAgUAAAAVcGFydG5lck9mZmVyZWRBc3NldElkBQAAAA9teVdhbnRlZEFzc2V0SWQGCQEAAAACIT0AAAACBQAAABRwYXJ0bmVyV2FudGVkQXNzZXRJZAUAAAAQbXlPZmZlcmVkQXNzZXRJZAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAAC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cmVzcwUAAAAIbXlBbW91bnQFAAAACndhbnRBbW91bnQJAQAAAAV2YWx1ZQAAAAEJAAQaAAAAAgUAAAAEdGhpcwkBAAAACWtleUFtb3VudAAAAAEFAAAADnBhcnRuZXJBZGRyZXNzCQEAAAAFdmFsdWUAAAABCQAEGgAAAAIFAAAABHRoaXMJAQAAAA9rZXlXYW50ZWRBbW91bnQAAAABBQAAAA5wYXJ0bmVyQWRkcmVzcwcDCQAAAAAAAAIFAAAABWNoZWNrBQAAAAVjaGVjawkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAdwYXJ0bmVyBQAAAAhteUFtb3VudAUAAAAJbXlBc3NldElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAKd2FudEFtb3VudAkBAAAAB2Zyb21TdHIAAAABBQAAAA13YW50ZWRBc3NldElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAprZXlBc3NldElkAAAAAQUAAAAOcGFydG5lckFkZHJlc3MJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAACWtleUFtb3VudAAAAAEFAAAADnBhcnRuZXJBZGRyZXNzCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAprZXlQYXJ0bmVyAAAAAQUAAAAOcGFydG5lckFkZHJlc3MJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAEGtleVdhbnRlZEFzc2V0SWQAAAABBQAAAA5wYXJ0bmVyQWRkcmVzcwkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAPa2V5V2FudGVkQW1vdW50AAAAAQUAAAAOcGFydG5lckFkZHJlc3MFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACmtleUFzc2V0SWQAAAABBQAAAAZjYWxsZXIJAQAAAAV0b1N0cgAAAAEFAAAACW15QXNzZXRJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAACWtleUFtb3VudAAAAAEFAAAABmNhbGxlcgUAAAAIbXlBbW91bnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACmtleVBhcnRuZXIAAAABBQAAAAZjYWxsZXIFAAAADnBhcnRuZXJBZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBrZXlXYW50ZWRBc3NldElkAAAAAQUAAAAGY2FsbGVyBQAAAA13YW50ZWRBc3NldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAPa2V5V2FudGVkQW1vdW50AAAAAQUAAAAGY2FsbGVyBQAAAAp3YW50QW1vdW50BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAABmNhbmNlbAAAAAAEAAAABmNhbGxlcgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAACmFzc2V0SWRLZXkJAQAAAAprZXlBc3NldElkAAAAAQUAAAAGY2FsbGVyBAAAAAphc3NldElkUmF3CQAEHQAAAAIFAAAABHRoaXMFAAAACmFzc2V0SWRLZXkDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABBQAAAAphc3NldElkUmF3CQAAAgAAAAECAAAAHVlvdSBkb24ndCBoYXZlIGFuIGFjdGl2ZSBkZWFsBAAAAAphc3NldElkU3RyCQEAAAAFdmFsdWUAAAABBQAAAAphc3NldElkUmF3CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgkBAAAABXZhbHVlAAAAAQkABBoAAAACBQAAAAR0aGlzCQEAAAAJa2V5QW1vdW50AAAAAQUAAAAGY2FsbGVyCQEAAAAHZnJvbVN0cgAAAAEFAAAACmFzc2V0SWRTdHIJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAKYXNzZXRJZEtleQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAJa2V5QW1vdW50AAAAAQUAAAAGY2FsbGVyCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAprZXlQYXJ0bmVyAAAAAQUAAAAGY2FsbGVyCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABBrZXlXYW50ZWRBc3NldElkAAAAAQUAAAAGY2FsbGVyCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAA9rZXlXYW50ZWRBbW91bnQAAAABBQAAAAZjYWxsZXIFAAAAA25pbAAAAAAWnt4m", "chainId": 87, "height": 2928067, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: ANtuEzksYvQhhnYot6hyvSYN9opTA22fF5JHRY8ECZxw Next: 3ze9KYGHVowBhJqDuKhRAqAKrvk3kTjAN7vKd7feEwYe Diff:
Old | New | Differences | |
---|---|---|---|
40 | 40 | else true | |
41 | 41 | ||
42 | 42 | ||
43 | - | @Callable(v) | |
44 | - | func escrow (w,x,l) = { | |
45 | - | let y = toString(v.caller) | |
46 | - | if (isDefined(getString(this, a(y)))) | |
43 | + | func v (w) = { | |
44 | + | let x = i(w) | |
45 | + | let y = if ((x != unit)) | |
46 | + | then { | |
47 | + | let z = assetInfo(value(x)) | |
48 | + | if ((z == unit)) | |
49 | + | then throw("Invalid wantAssetId: assetInfo missing") | |
50 | + | else if ((size(value(z).id) != 32)) | |
51 | + | then throw(("Invalid wantAssetId: assetInfo size is " + toString(size(value(z).id)))) | |
52 | + | else if ((size(value(z).issuer.bytes) != 32)) | |
53 | + | then throw(("Invalid wantAssetId: issuer address is " + toBase58String(value(z).issuer.bytes))) | |
54 | + | else true | |
55 | + | } | |
56 | + | else true | |
57 | + | if ((y == y)) | |
58 | + | then g(x) | |
59 | + | else throw("Strict value is not equal to itself.") | |
60 | + | } | |
61 | + | ||
62 | + | ||
63 | + | @Callable(A) | |
64 | + | func escrow (w,B,l) = { | |
65 | + | let C = toString(A.caller) | |
66 | + | if (isDefined(getString(this, a(C)))) | |
47 | 67 | then throw("You already have an active deal, please cancel it first") | |
48 | - | else if ((size( | |
68 | + | else if ((size(A.payments) != 1)) | |
49 | 69 | then throw("Exactly 1 payment expected") | |
50 | 70 | else { | |
51 | - | let | |
52 | - | if (( | |
71 | + | let D = addressFromStringValue(l) | |
72 | + | if ((D == D)) | |
53 | 73 | then { | |
54 | - | let A = g(i(w)) | |
55 | - | if ((A == A)) | |
56 | - | then if ((0 >= x)) | |
57 | - | then throw("Non-positive wantAmount") | |
58 | - | else { | |
59 | - | let B = getString(this, a(l)) | |
60 | - | let C = value(v.payments[0]).assetId | |
61 | - | let D = value(v.payments[0]).amount | |
62 | - | if (isDefined(B)) | |
63 | - | then if ((value(getString(this, d(l))) != y)) | |
64 | - | then throw(("You are not a partner of " + l)) | |
65 | - | else { | |
66 | - | let E = if (k(l, g(C), A, value(B), value(getString(this, e(l))))) | |
67 | - | then q(l, D, x, value(getInteger(this, c(l))), value(getInteger(this, f(l)))) | |
68 | - | else false | |
69 | - | if ((E == E)) | |
70 | - | then [ScriptTransfer(z, D, C), ScriptTransfer(v.caller, x, i(A)), DeleteEntry(a(l)), DeleteEntry(c(l)), DeleteEntry(d(l)), DeleteEntry(e(l)), DeleteEntry(f(l))] | |
71 | - | else throw("Strict value is not equal to itself.") | |
72 | - | } | |
73 | - | else [StringEntry(a(y), g(C)), IntegerEntry(c(y), D), StringEntry(d(y), l), StringEntry(e(y), A), IntegerEntry(f(y), x)] | |
74 | - | } | |
75 | - | else throw("Strict value is not equal to itself.") | |
74 | + | let E = v(w) | |
75 | + | if ((0 >= B)) | |
76 | + | then throw("Non-positive wantAmount") | |
77 | + | else { | |
78 | + | let F = getString(this, a(l)) | |
79 | + | let G = value(A.payments[0]).assetId | |
80 | + | let H = value(A.payments[0]).amount | |
81 | + | if (isDefined(F)) | |
82 | + | then if ((value(getString(this, d(l))) != C)) | |
83 | + | then throw(("You are not a partner of " + l)) | |
84 | + | else { | |
85 | + | let I = if (k(l, g(G), E, value(F), value(getString(this, e(l))))) | |
86 | + | then q(l, H, B, value(getInteger(this, c(l))), value(getInteger(this, f(l)))) | |
87 | + | else false | |
88 | + | if ((I == I)) | |
89 | + | then [ScriptTransfer(D, H, G), ScriptTransfer(A.caller, B, i(E)), DeleteEntry(a(l)), DeleteEntry(c(l)), DeleteEntry(d(l)), DeleteEntry(e(l)), DeleteEntry(f(l))] | |
90 | + | else throw("Strict value is not equal to itself.") | |
91 | + | } | |
92 | + | else [StringEntry(a(C), g(G)), IntegerEntry(c(C), H), StringEntry(d(C), l), StringEntry(e(C), E), IntegerEntry(f(C), B)] | |
93 | + | } | |
76 | 94 | } | |
77 | 95 | else throw("Strict value is not equal to itself.") | |
78 | 96 | } | |
80 | 98 | ||
81 | 99 | ||
82 | 100 | ||
83 | - | @Callable( | |
101 | + | @Callable(A) | |
84 | 102 | func cancel () = { | |
85 | - | let | |
86 | - | let | |
87 | - | let | |
88 | - | if (!(isDefined( | |
103 | + | let C = toString(A.caller) | |
104 | + | let J = a(C) | |
105 | + | let K = getString(this, J) | |
106 | + | if (!(isDefined(K))) | |
89 | 107 | then throw("You don't have an active deal") | |
90 | 108 | else { | |
91 | - | let j = value( | |
92 | - | [ScriptTransfer( | |
109 | + | let j = value(K) | |
110 | + | [ScriptTransfer(A.caller, value(getInteger(this, c(C))), i(j)), DeleteEntry(J), DeleteEntry(c(C)), DeleteEntry(d(C)), DeleteEntry(e(C)), DeleteEntry(f(C))] | |
93 | 111 | } | |
94 | 112 | } | |
95 | 113 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func a (b) = ("%s%s__assetId__" + b) | |
5 | 5 | ||
6 | 6 | ||
7 | 7 | func c (b) = ("%s%s__amount__" + b) | |
8 | 8 | ||
9 | 9 | ||
10 | 10 | func d (b) = ("%s%s__partner__" + b) | |
11 | 11 | ||
12 | 12 | ||
13 | 13 | func e (b) = ("%s%s__wantedAssetId__" + b) | |
14 | 14 | ||
15 | 15 | ||
16 | 16 | func f (b) = ("%s%s__wantedAmount__" + b) | |
17 | 17 | ||
18 | 18 | ||
19 | 19 | func g (h) = if ((h == unit)) | |
20 | 20 | then "WAVES" | |
21 | 21 | else toBase58String(value(h)) | |
22 | 22 | ||
23 | 23 | ||
24 | 24 | func i (j) = if ((j == "WAVES")) | |
25 | 25 | then unit | |
26 | 26 | else fromBase58String(j) | |
27 | 27 | ||
28 | 28 | ||
29 | 29 | func k (l,m,n,o,p) = if (if ((o != n)) | |
30 | 30 | then true | |
31 | 31 | else (p != m)) | |
32 | 32 | then throw(((((((((("AssetIds don't match: you want " + n) + " and pay ") + m) + ", but ") + l) + " wants ") + p) + " and pays ") + o)) | |
33 | 33 | else true | |
34 | 34 | ||
35 | 35 | ||
36 | 36 | func q (l,r,s,t,u) = if (if ((t != s)) | |
37 | 37 | then true | |
38 | 38 | else (u != r)) | |
39 | 39 | then throw(((((((((("Amounts don't match: you want " + toString(s)) + " and pay ") + toString(r)) + ", but ") + l) + " wants ") + toString(u)) + " and pays ") + toString(t))) | |
40 | 40 | else true | |
41 | 41 | ||
42 | 42 | ||
43 | - | @Callable(v) | |
44 | - | func escrow (w,x,l) = { | |
45 | - | let y = toString(v.caller) | |
46 | - | if (isDefined(getString(this, a(y)))) | |
43 | + | func v (w) = { | |
44 | + | let x = i(w) | |
45 | + | let y = if ((x != unit)) | |
46 | + | then { | |
47 | + | let z = assetInfo(value(x)) | |
48 | + | if ((z == unit)) | |
49 | + | then throw("Invalid wantAssetId: assetInfo missing") | |
50 | + | else if ((size(value(z).id) != 32)) | |
51 | + | then throw(("Invalid wantAssetId: assetInfo size is " + toString(size(value(z).id)))) | |
52 | + | else if ((size(value(z).issuer.bytes) != 32)) | |
53 | + | then throw(("Invalid wantAssetId: issuer address is " + toBase58String(value(z).issuer.bytes))) | |
54 | + | else true | |
55 | + | } | |
56 | + | else true | |
57 | + | if ((y == y)) | |
58 | + | then g(x) | |
59 | + | else throw("Strict value is not equal to itself.") | |
60 | + | } | |
61 | + | ||
62 | + | ||
63 | + | @Callable(A) | |
64 | + | func escrow (w,B,l) = { | |
65 | + | let C = toString(A.caller) | |
66 | + | if (isDefined(getString(this, a(C)))) | |
47 | 67 | then throw("You already have an active deal, please cancel it first") | |
48 | - | else if ((size( | |
68 | + | else if ((size(A.payments) != 1)) | |
49 | 69 | then throw("Exactly 1 payment expected") | |
50 | 70 | else { | |
51 | - | let | |
52 | - | if (( | |
71 | + | let D = addressFromStringValue(l) | |
72 | + | if ((D == D)) | |
53 | 73 | then { | |
54 | - | let A = g(i(w)) | |
55 | - | if ((A == A)) | |
56 | - | then if ((0 >= x)) | |
57 | - | then throw("Non-positive wantAmount") | |
58 | - | else { | |
59 | - | let B = getString(this, a(l)) | |
60 | - | let C = value(v.payments[0]).assetId | |
61 | - | let D = value(v.payments[0]).amount | |
62 | - | if (isDefined(B)) | |
63 | - | then if ((value(getString(this, d(l))) != y)) | |
64 | - | then throw(("You are not a partner of " + l)) | |
65 | - | else { | |
66 | - | let E = if (k(l, g(C), A, value(B), value(getString(this, e(l))))) | |
67 | - | then q(l, D, x, value(getInteger(this, c(l))), value(getInteger(this, f(l)))) | |
68 | - | else false | |
69 | - | if ((E == E)) | |
70 | - | then [ScriptTransfer(z, D, C), ScriptTransfer(v.caller, x, i(A)), DeleteEntry(a(l)), DeleteEntry(c(l)), DeleteEntry(d(l)), DeleteEntry(e(l)), DeleteEntry(f(l))] | |
71 | - | else throw("Strict value is not equal to itself.") | |
72 | - | } | |
73 | - | else [StringEntry(a(y), g(C)), IntegerEntry(c(y), D), StringEntry(d(y), l), StringEntry(e(y), A), IntegerEntry(f(y), x)] | |
74 | - | } | |
75 | - | else throw("Strict value is not equal to itself.") | |
74 | + | let E = v(w) | |
75 | + | if ((0 >= B)) | |
76 | + | then throw("Non-positive wantAmount") | |
77 | + | else { | |
78 | + | let F = getString(this, a(l)) | |
79 | + | let G = value(A.payments[0]).assetId | |
80 | + | let H = value(A.payments[0]).amount | |
81 | + | if (isDefined(F)) | |
82 | + | then if ((value(getString(this, d(l))) != C)) | |
83 | + | then throw(("You are not a partner of " + l)) | |
84 | + | else { | |
85 | + | let I = if (k(l, g(G), E, value(F), value(getString(this, e(l))))) | |
86 | + | then q(l, H, B, value(getInteger(this, c(l))), value(getInteger(this, f(l)))) | |
87 | + | else false | |
88 | + | if ((I == I)) | |
89 | + | then [ScriptTransfer(D, H, G), ScriptTransfer(A.caller, B, i(E)), DeleteEntry(a(l)), DeleteEntry(c(l)), DeleteEntry(d(l)), DeleteEntry(e(l)), DeleteEntry(f(l))] | |
90 | + | else throw("Strict value is not equal to itself.") | |
91 | + | } | |
92 | + | else [StringEntry(a(C), g(G)), IntegerEntry(c(C), H), StringEntry(d(C), l), StringEntry(e(C), E), IntegerEntry(f(C), B)] | |
93 | + | } | |
76 | 94 | } | |
77 | 95 | else throw("Strict value is not equal to itself.") | |
78 | 96 | } | |
79 | 97 | } | |
80 | 98 | ||
81 | 99 | ||
82 | 100 | ||
83 | - | @Callable( | |
101 | + | @Callable(A) | |
84 | 102 | func cancel () = { | |
85 | - | let | |
86 | - | let | |
87 | - | let | |
88 | - | if (!(isDefined( | |
103 | + | let C = toString(A.caller) | |
104 | + | let J = a(C) | |
105 | + | let K = getString(this, J) | |
106 | + | if (!(isDefined(K))) | |
89 | 107 | then throw("You don't have an active deal") | |
90 | 108 | else { | |
91 | - | let j = value( | |
92 | - | [ScriptTransfer( | |
109 | + | let j = value(K) | |
110 | + | [ScriptTransfer(A.caller, value(getInteger(this, c(C))), i(j)), DeleteEntry(J), DeleteEntry(c(C)), DeleteEntry(d(C)), DeleteEntry(e(C)), DeleteEntry(f(C))] | |
93 | 111 | } | |
94 | 112 | } | |
95 | 113 | ||
96 | 114 |
github/deemru/w8io/3ef1775 40.21 ms ◑