tx · 2ckqTzzmaSQ7gZrqQpEXSAcRCWkuVskcj76HiTzFSbrp 3PDBrNPGRGQm7wbxsj7gPsfMPTxT5eP1MUg: -0.00300000 Waves 2023.12.05 21:13 [3939557] smart account 3PDBrNPGRGQm7wbxsj7gPsfMPTxT5eP1MUg > SELF 0.00000000 Waves
{ "type": 13, "id": "2ckqTzzmaSQ7gZrqQpEXSAcRCWkuVskcj76HiTzFSbrp", "fee": 300000, "feeAssetId": null, "timestamp": 1701800054077, "version": 2, "chainId": 87, "sender": "3PDBrNPGRGQm7wbxsj7gPsfMPTxT5eP1MUg", "senderPublicKey": "DEx2nez1cYG1CaVYQEpFDFixzbDEgFVocYXAXen63czu", "proofs": [ "29Gv7ikfjzQHoNy1jEnbbXdehEbn7BJjBncRH6sbrUyJX9FYsVu3sHsfMRxT51w2CFBBxQARECxYPsQrF7RQmMNe" ], "script": "base64:BgIWCAISAwoBARIAEgMKAQESBgoEAQgICAMACWZlZV9zY2FsZQDAhD0AAncxBAckbWF0Y2gwCQCdCAIFBHRoaXMCAncxAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcgUHJG1hdGNoMAUBcgIAAAJ3MgQHJG1hdGNoMAkAnQgCBQR0aGlzAgJ3MgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXIFByRtYXRjaDAFAXICAAQBaQECc2YBA2ZlZQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECBHNlbGYJAMwIAgkBDEludGVnZXJFbnRyeQICA2ZlZQUDZmVlBQNuaWwBaQEHZGVwb3NpdAADCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCCQC8CQIFAncxAgF8CQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAAIBAgJ3bAQHY3VycmVudAQHJG1hdGNoMAkAnQgCBQR0aGlzAgdjdXJyZW50AwkAAQIFByRtYXRjaDACBlN0cmluZwQDcmV0BQckbWF0Y2gwCQACAQIHY3VycmVudAIABANwbXQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQCRAwIIBQFpCHBheW1lbnRzAAAJAAIBAhIxIHBheW1lbnQgZXhwZWN0ZWQDCQECIT0CCAUDcG10B2Fzc2V0SWQFBHVuaXQJAAIBAgt3cm9uZyB0b2tlbgQGY2FsbGVyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEDWN1cnJlbnRBbW91bnQEByRtYXRjaDAJAJoIAgUEdGhpcwkArAICAghkZXBvc2l0XwUGY2FsbGVyAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAx0b3RhbERlcG9zaXQEByRtYXRjaDAJAJoIAgUEdGhpcwINdG90YWxfZGVwb3NpdAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQJbmV3QW1vdW50CQBkAgUNY3VycmVudEFtb3VudAgFA3BtdAZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIIZGVwb3NpdF8FBmNhbGxlcgUJbmV3QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCAg10b3RhbF9kZXBvc2l0CQBkAgUMdG90YWxEZXBvc2l0CAUDcG10BmFtb3VudAUDbmlsAWkBCHdpdGhkcmF3AQRhbW50AwkBASEBCQEPY29udGFpbnNFbGVtZW50AgkAvAkCBQJ3MQIBfAkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQACAQICd2wEB2N1cnJlbnQEByRtYXRjaDAJAJ0IAgUEdGhpcwIHY3VycmVudAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEA3JldAUHJG1hdGNoMAkAAgECB2N1cnJlbnQCAAQGY2FsbGVyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEDWN1cnJlbnRBbW91bnQEByRtYXRjaDAJAJoIAgUEdGhpcwkArAICAghkZXBvc2l0XwUGY2FsbGVyAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAAAwkAZgIFBGFtbnQFDWN1cnJlbnRBbW91bnQJAAIBAgV3ID4gZAQJbmV3QW1vdW50CQBlAgUNY3VycmVudEFtb3VudAUEYW1udAMJAGYCAAAFCW5ld0Ftb3VudAkAAgECCXVuZGVyZmxvdwQMdG90YWxEZXBvc2l0BAckbWF0Y2gwCQCaCAIFBHRoaXMCDXRvdGFsX2RlcG9zaXQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIIZGVwb3NpdF8FBmNhbGxlcgUJbmV3QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCAg10b3RhbF9kZXBvc2l0CQBlAgUMdG90YWxEZXBvc2l0BQRhbW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUEYW1udAUEdW5pdAUDbmlsAWkBAXgEBGFtbnQBYQFmBGRhdGEDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCCQC8CQIFAncyAgF8CQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAAIBAgJ3bAQCc3QICQDvBwEFBHRoaXMJYXZhaWxhYmxlAwkAAAIFAnN0BQJzdAQCaWkJAP0HBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUBYQUBZgkAzAgCBQRkYXRhBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFBGFtbnQFA25pbAMJAAACBQJpaQUCaWkEAmV0CAkA7wcBBQR0aGlzCWF2YWlsYWJsZQMJAAACBQJldAUCZXQEBWZlZV9yBAckbWF0Y2gwCQCaCAIFBHRoaXMCA2ZlZQMJAAECBQckbWF0Y2gwAgNJbnQEA3JldAUHJG1hdGNoMAUDcmV0AAAEA2ZlZQkAbgQFAnN0BQVmZWVfcgUJZmVlX3NjYWxlBQRET1dOAwkAZgIJAGQCBQJzdAUDZmVlBQJldAkAAgEJAKwCAgICISAJAKQDAQkAZAIFAnN0BQNmZWUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXnlMl+4", "height": 3939557, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 6 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let fee_scale = 1000000 | |
5 | + | ||
6 | + | let w1 = match getString(this, "w1") { | |
7 | + | case r: String => | |
8 | + | r | |
9 | + | case _ => | |
10 | + | "" | |
11 | + | } | |
12 | + | ||
13 | + | let w2 = match getString(this, "w2") { | |
14 | + | case r: String => | |
15 | + | r | |
16 | + | case _ => | |
17 | + | "" | |
18 | + | } | |
19 | + | ||
20 | + | @Callable(i) | |
21 | + | func sf (fee) = if ((i.caller != this)) | |
22 | + | then throw("self") | |
23 | + | else [IntegerEntry("fee", fee)] | |
24 | + | ||
25 | + | ||
26 | + | ||
27 | + | @Callable(i) | |
28 | + | func deposit () = if (!(containsElement(split_4C(w1, "|"), toBase58String(i.caller.bytes)))) | |
29 | + | then throw("wl") | |
30 | + | else { | |
31 | + | let current = match getString(this, "current") { | |
32 | + | case ret: String => | |
33 | + | throw("current") | |
34 | + | case _ => | |
35 | + | "" | |
36 | + | } | |
37 | + | let pmt = if ((size(i.payments) == 1)) | |
38 | + | then i.payments[0] | |
39 | + | else throw("1 payment expected") | |
40 | + | if ((pmt.assetId != unit)) | |
41 | + | then throw("wrong token") | |
42 | + | else { | |
43 | + | let caller = toBase58String(i.caller.bytes) | |
44 | + | let currentAmount = match getInteger(this, ("deposit_" + caller)) { | |
45 | + | case a: Int => | |
46 | + | a | |
47 | + | case _ => | |
48 | + | 0 | |
49 | + | } | |
50 | + | let totalDeposit = match getInteger(this, "total_deposit") { | |
51 | + | case a: Int => | |
52 | + | a | |
53 | + | case _ => | |
54 | + | 0 | |
55 | + | } | |
56 | + | let newAmount = (currentAmount + pmt.amount) | |
57 | + | [IntegerEntry(("deposit_" + caller), newAmount), IntegerEntry("total_deposit", (totalDeposit + pmt.amount))] | |
58 | + | } | |
59 | + | } | |
60 | + | ||
61 | + | ||
62 | + | ||
63 | + | @Callable(i) | |
64 | + | func withdraw (amnt) = if (!(containsElement(split_4C(w1, "|"), toBase58String(i.caller.bytes)))) | |
65 | + | then throw("wl") | |
66 | + | else { | |
67 | + | let current = match getString(this, "current") { | |
68 | + | case ret: String => | |
69 | + | throw("current") | |
70 | + | case _ => | |
71 | + | "" | |
72 | + | } | |
73 | + | let caller = toBase58String(i.caller.bytes) | |
74 | + | let currentAmount = match getInteger(this, ("deposit_" + caller)) { | |
75 | + | case a: Int => | |
76 | + | a | |
77 | + | case _ => | |
78 | + | 0 | |
79 | + | } | |
80 | + | if ((amnt > currentAmount)) | |
81 | + | then throw("w > d") | |
82 | + | else { | |
83 | + | let newAmount = (currentAmount - amnt) | |
84 | + | if ((0 > newAmount)) | |
85 | + | then throw("underflow") | |
86 | + | else { | |
87 | + | let totalDeposit = match getInteger(this, "total_deposit") { | |
88 | + | case a: Int => | |
89 | + | a | |
90 | + | case _ => | |
91 | + | 0 | |
92 | + | } | |
93 | + | [IntegerEntry(("deposit_" + caller), newAmount), IntegerEntry("total_deposit", (totalDeposit - amnt)), ScriptTransfer(i.caller, amnt, unit)] | |
94 | + | } | |
95 | + | } | |
96 | + | } | |
97 | + | ||
98 | + | ||
99 | + | ||
100 | + | @Callable(i) | |
101 | + | func x (amnt,a,f,data) = if (!(containsElement(split_4C(w2, "|"), toBase58String(i.caller.bytes)))) | |
102 | + | then throw("wl") | |
103 | + | else { | |
104 | + | let st = wavesBalance(this).available | |
105 | + | if ((st == st)) | |
106 | + | then { | |
107 | + | let ii = reentrantInvoke(addressFromStringValue(a), f, [data], [AttachedPayment(unit, amnt)]) | |
108 | + | if ((ii == ii)) | |
109 | + | then { | |
110 | + | let et = wavesBalance(this).available | |
111 | + | if ((et == et)) | |
112 | + | then { | |
113 | + | let fee_r = match getInteger(this, "fee") { | |
114 | + | case ret: Int => | |
115 | + | ret | |
116 | + | case _ => | |
117 | + | 0 | |
118 | + | } | |
119 | + | let fee = fraction(st, fee_r, fee_scale, DOWN) | |
120 | + | if (((st + fee) > et)) | |
121 | + | then throw(("! " + toString((st + fee)))) | |
122 | + | else nil | |
123 | + | } | |
124 | + | else throw("Strict value is not equal to itself.") | |
125 | + | } | |
126 | + | else throw("Strict value is not equal to itself.") | |
127 | + | } | |
128 | + | else throw("Strict value is not equal to itself.") | |
129 | + | } | |
130 | + | ||
131 | + | ||
132 | + | @Verifier(tx) | |
133 | + | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
134 | + |
github/deemru/w8io/3ef1775 19.20 ms ◑