tx · HaVpyFqJnevtuT5tXzhhWsj392VEnEcnSfsR3Ahh3zf2

3N5NAftzfcw3gAt8nc35bNr9UdPTVgC81fd:  -0.04000000 Waves

2022.07.01 23:38 [2121074] smart account 3N5NAftzfcw3gAt8nc35bNr9UdPTVgC81fd > SELF 0.00000000 Waves

{ "type": 13, "id": "HaVpyFqJnevtuT5tXzhhWsj392VEnEcnSfsR3Ahh3zf2", "fee": 4000000, "feeAssetId": null, "timestamp": 1656707908783, "version": 1, "sender": "3N5NAftzfcw3gAt8nc35bNr9UdPTVgC81fd", "senderPublicKey": "CdnTmMHxT68Qa4MtHEnAiUhsdKTi2YkHPGn92ThinVNt", "proofs": [ "uavEkhNuFoXUkiTswbAx2rHaJXZ3C7q76SrFQBwJuXMiefaa3YcTffoL2FHHscGNP2x8ZqoRAzaYqapiuLibjXD", "wiq9Z2TczneAxty4GFmD8uqTTMu4iqMkVuMBz7DNHbEwxQ3yLwnWSfGNbR7mgSnVFmFnXYr8SexDABkAvUug8PM", "9VLroCrBVYGpofuvaNERapng7E49FaCMJMCV6Wutt3RNkbEMQXjCNQhmH4yaCHUyPfYoqYnNNJ8NKSBgQd6MyVf" ], "script": "base64:AAIFAAAAAAAAACYIAhIFCgMIAQESBAoCAQESABIAEgMKAQgSABIAEgASABIECgIBBAAAAFgBAAAADmdldE51bWJlckJ5S2V5AAAAAQAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AAAAAAAAAAAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQIAAAAAAQAAABZnZXRCb29sQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkHAQAAABhnZXRTdHJpbmdCeUFkZHJlc3NBbmRLZXkAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQIAAAAAAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQAAAAAAAAAAAAEAAAAJYXNBbnlMaXN0AAAAAQAAAAN2YWwEAAAAByRtYXRjaDAFAAAAA3ZhbAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAJTGlzdFtBbnldBAAAAAp2YWxBbnlMeXN0BQAAAAckbWF0Y2gwBQAAAAp2YWxBbnlMeXN0CQAAAgAAAAECAAAAG2ZhaWwgdG8gY2FzdCBpbnRvIExpc3RbQW55XQEAAAAIYXNTdHJpbmcAAAABAAAAA3ZhbAQAAAAHJG1hdGNoMAUAAAADdmFsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAABnZhbFN0cgUAAAAHJG1hdGNoMAUAAAAGdmFsU3RyCQAAAgAAAAECAAAAGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEAAAAFYXNJbnQAAAABAAAAA3ZhbAQAAAAHJG1hdGNoMAUAAAADdmFsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAABnZhbEludAUAAAAHJG1hdGNoMAUAAAAGdmFsSW50CQAAAgAAAAECAAAAFWZhaWwgdG8gY2FzdCBpbnRvIEludAAAAAADU0VQAgAAAAJfXwAAAAAFTVVMVDYAAAAAAAAPQkAAAAAABU1VTFQ4AAAAAAAF9eEAAAAAAAdNVUxUWDE2CQABNgAAAAEAACOG8m/BAAAAAAAACENBTkNFTEVEAgAAAAhjYW5jZWxlZAAAAAADTkVXAgAAAANuZXcAAAAABkZJTExFRAIAAAAGZmlsbGVkAAAAAAdXQVZFU0lECQACWQAAAAECAAAABVdBVkVTAAAAAA9uTWV0cmljSWR4UHJpY2UAAAAAAAAAAAAAAAAAG25NZXRyaWNJZHhVc2RuTG9ja2VkQmFsYW5jZQAAAAAAAAAAAQAAAAAcbk1ldHJpY0lkeFdhdmVzTG9ja2VkQmFsYW5jZQAAAAAAAAAAAgAAAAARbk1ldHJpY0lkeFJlc2VydmUAAAAAAAAAAAMAAAAAF25NZXRyaWNJZHhSZXNlcnZlSW5Vc2RuAAAAAAAAAAAEAAAAABRuTWV0cmljSWR4VXNkblN1cHBseQAAAAAAAAAABQAAAAARbk1ldHJpY0lkeFN1cnBsdXMAAAAAAAAAAAYAAAAAGG5NZXRyaWNJZHhTdXJwbHVzUGVyY2VudAAAAAAAAAAABwAAAAAMbk1ldHJpY0lkeEJSAAAAAAAAAAAIAAAAABRuTWV0cmljSWR4TnNidFN1cHBseQAAAAAAAAAACQAAAAAXbk1ldHJpY0lkeE1heE5zYnRTdXBwbHkAAAAAAAAAAAoAAAAADGJGdW5jSWR4U3VyZgAAAAAAAAAAAAAAAAANYkZ1bmNJZHhXYXZlcwAAAAAAAAAAAQAAAAAMYkZ1bmNJZHhVc2RuAAAAAAAAAAACAAAAABRiRnVuY0lkeFJlc2VydmVTdGFydAAAAAAAAAAAAwAAAAATYkZ1bmNJZHhTdXBwbHlTdGFydAAAAAAAAAAABAAAAAAPYkZ1bmNJZHhCUlN0YXJ0AAAAAAAAAAAFAAAAABJiRnVuY0lkeFJlc2VydmVFbmQAAAAAAAAAAAYAAAAAEWJGdW5jSWR4U3VwcGx5RW5kAAAAAAAAAAAHAAAAAA1iRnVuY0lkeEJSRW5kAAAAAAAAAAAIAAAAABFiRnVuY0lkeFJlc3RXYXZlcwAAAAAAAAAACQAAAAAQYkZ1bmNJZHhSZXN0VXNkbgAAAAAAAAAACgAAAAAIUHJpY2VLZXkCAAAABXByaWNlAAAAAA5Oc2J0QXNzZXRJZEtleQIAAAANYm9uZF9hc3NldF9pZAAAAAASTmV1dHJpbm9Bc3NldElkS2V5AgAAABFuZXV0cmlub19hc3NldF9pZAAAAAAOU3VyZkFzc2V0SWRLZXkCAAAADXN1cmZfYXNzZXRfaWQAAAAAEUJhbGFuY2VMb2NrZWRrS2V5AgAAAA1iYWxhbmNlX2xvY2tfAAAAABVXYXZlc0xvY2tlZEJhbGFuY2VLZXkJAAEsAAAAAgUAAAARQmFsYW5jZUxvY2tlZGtLZXkCAAAABXdhdmVzAAAAABhOZXV0cmlub0xvY2tlZEJhbGFuY2VLZXkJAAEsAAAAAgUAAAARQmFsYW5jZUxvY2tlZGtLZXkCAAAACG5ldXRyaW5vAAAAAA1GaXJzdE9yZGVyS2V5AgAAAAtvcmRlcl9maXJzdAAAAAAPTWF0aENvbnRyYWN0S2V5AgAAAA1tYXRoX2NvbnRyYWN0AAAAABVNaW5XYXZlc0Zvck5zYnRCdXlLZXkCAAAAEm1pbl93YXZlc19uc2J0X2J1eQAAAAAOTWluTnNidFNlbGxLZXkCAAAADW1pbl9uc2J0X3NlbGwAAAAAFU1pbldhdmVzRm9yU3VyZkJ1eUtleQIAAAASbWluX3dhdmVzX3N1cmZfYnV5AAAAABRNaW5Vc2RuRm9yU3VyZkJ1eUtleQIAAAARbWluX3VzZG5fc3VyZl9idXkBAAAAEmdldFJvaUJ5T3JkZXJJZEtleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAABBkZWJ1Z19vcmRlcl9yb2lfBQAAAAdvcmRlcklkAQAAABBnZXRPcmRlclByaWNlS2V5AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAADG9yZGVyX3ByaWNlXwUAAAAHb3JkZXJJZAEAAAAQZ2V0T3JkZXJUb3RhbEtleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAAxvcmRlcl90b3RhbF8FAAAAB29yZGVySWQBAAAAEGdldE9yZGVyT3duZXJLZXkAAAABAAAAB29yZGVySWQJAAEsAAAAAgIAAAAMb3JkZXJfb3duZXJfBQAAAAdvcmRlcklkAQAAABFnZXRPcmRlckhlaWdodEtleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAA1vcmRlcl9oZWlnaHRfBQAAAAdvcmRlcklkAQAAABFnZXRPcmRlclN0YXR1c0tleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAA1vcmRlcl9zdGF0dXNfBQAAAAdvcmRlcklkAQAAABZnZXRPcmRlckZpbGxlZFRvdGFsS2V5AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAAE29yZGVyX2ZpbGxlZF90b3RhbF8FAAAAB29yZGVySWQBAAAAD2dldFByZXZPcmRlcktleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAAtvcmRlcl9wcmV2XwUAAAAHb3JkZXJJZAEAAAAPZ2V0TmV4dE9yZGVyS2V5AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAAC29yZGVyX25leHRfBQAAAAdvcmRlcklkAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgAAAAZhbW91bnQAAAAFcHJpY2UJAABrAAAAAwUAAAAGYW1vdW50BQAAAAVNVUxUOAUAAAAFcHJpY2UBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAACAAAABmFtb3VudAAAAAVwcmljZQkAAGsAAAADBQAAAAZhbW91bnQFAAAABXByaWNlBQAAAAVNVUxUOAEAAAAFdG9YMTYAAAACAAAAB29yaWdWYWwAAAANb3JpZ1NjYWxlTXVsdAkAATwAAAADCQABNgAAAAEFAAAAB29yaWdWYWwFAAAAB01VTFRYMTYJAAE2AAAAAQUAAAANb3JpZ1NjYWxlTXVsdAEAAAAHZnJvbVgxNgAAAAIAAAADdmFsAAAAD3Jlc3VsdFNjYWxlTXVsdAkAAaAAAAABCQABPAAAAAMFAAAAA3ZhbAkAATYAAAABBQAAAA9yZXN1bHRTY2FsZU11bHQFAAAAB01VTFRYMTYAAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVTX5YnYYiLrMWyfu8rmkonHDc0g4nCta94AAAAAD2NvbnRyb2xDb250cmFjdAkBAAAAB0FkZHJlc3MAAAABAQAAABoBVCFBmWCv1bHMtRUHYsxdLI5/1uzEtUljoQAAAAATbGlxdWlkYXRpb25Db250cmFjdAkBAAAAB0FkZHJlc3MAAAABAQAAABoBVIU74x8XFOr+m4eGxNcmrGVmBniai3IguQAAAAAMbWF0aENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAAA9NYXRoQ29udHJhY3RLZXkAAAAAD25ldXRyaW5vQXNzZXRJZAEAAAAg93bq9/eDymXbbhPuAjvPWCmVqcHRjfJL2mzYHWKAyN4AAAAAC25zYnRBc3NldElkAQAAACDQtcyxzfaIZM1HKi2M+rz5PsT9DiVMH3RcKTr+nWmhEAAAAAAJaXNCbG9ja2VkCQEAAAAWZ2V0Qm9vbEJ5QWRkcmVzc0FuZEtleQAAAAIFAAAAD2NvbnRyb2xDb250cmFjdAIAAAAKaXNfYmxvY2tlZAAAAAAVbWluV2F2ZXNBbW91bnROc2J0QnV5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAFU1pbldhdmVzRm9yTnNidEJ1eUtleQAAAAAAO5rKAAAAAAALbWluTnNidFNlbGwJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAOTWluTnNidFNlbGxLZXkAAAAAAAAPQkAAAAAAFW1pbldhdmVzQW1vdW50U3VyZkJ1eQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABVNaW5XYXZlc0ZvclN1cmZCdXlLZXkAAAAAAAX14QAAAAAAFG1pblVzZG5BbW91bnRTdXJmQnV5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAFE1pblVzZG5Gb3JTdXJmQnV5S2V5AAAAAAAAmJaAAAAAAApmaXJzdE9yZGVyCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAAA1GaXJzdE9yZGVyS2V5AQAAAA1nZXRPcmRlclByaWNlAAAAAQAAAAJpZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAEGdldE9yZGVyUHJpY2VLZXkAAAABBQAAAAJpZAEAAAANZ2V0T3JkZXJUb3RhbAAAAAEAAAACaWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABBnZXRPcmRlclRvdGFsS2V5AAAAAQUAAAACaWQBAAAADWdldE9yZGVyT3duZXIAAAABAAAAAmlkCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAQZ2V0T3JkZXJPd25lcktleQAAAAEFAAAAAmlkAQAAAA5nZXRPcmRlclN0YXR1cwAAAAEAAAACaWQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABFnZXRPcmRlclN0YXR1c0tleQAAAAEFAAAAAmlkAQAAABNnZXRPcmRlckZpbGxlZFRvdGFsAAAAAQAAAAJpZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFmdldE9yZGVyRmlsbGVkVG90YWxLZXkAAAABBQAAAAJpZAEAAAAMZ2V0UHJldk9yZGVyAAAAAQAAAAJpZAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAD2dldFByZXZPcmRlcktleQAAAAEFAAAAAmlkAQAAAAxnZXROZXh0T3JkZXIAAAABAAAAAmlkCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAPZ2V0TmV4dE9yZGVyS2V5AAAAAQUAAAACaWQBAAAAD2dldFJldmVyc2VQcmljZQAAAAEAAAAFcHJpY2UJAABpAAAAAgkAAGgAAAACBQAAAAVNVUxUNgUAAAAFTVVMVDYFAAAABXByaWNlAQAAABZjYWxjTnNidDJXYXZlc1ByaWNlUmF3AAAAAgAAAA1zcGVudFdhdmVzUmF3AAAAD3JlY2VpdmVkTnNidFJhdwkAATwAAAADCQABNgAAAAEFAAAADXNwZW50V2F2ZXNSYXcJAAE2AAAAAQkAAGgAAAACBQAAAAVNVUxUNgUAAAAFTVVMVDYJAAE2AAAAAQUAAAAPcmVjZWl2ZWROc2J0UmF3AQAAAAlvcmRlckRhdGEAAAAIAAAAB29yZGVySWQAAAANdG90YWxXYXZlbGV0cwAAAA5maWxsZWRXYXZlbGV0cwAAAAVvd25lcgAAAAZzdGF0dXMAAAADcm9pAAAABXByaWNlAAAADGN1cnJlbnRQcmljZQkABEwAAAACCQEA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", "chainId": 84, "height": 2121074, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: E71eN7Gsta5dtEjg5AAZsrD5r2qvMUn5xj31Ku5Qr7KD Next: Bp1n5bin2Tv2iA1xf6yFEF6fQdQwaDNyZ86VwA24DyMR Diff:
OldNewDifferences
4949 }
5050
5151
52-let p = 100000000
52+let p = "__"
5353
5454 let q = 1000000
5555
56-let r = toBigInt(1000000)
56+let r = 100000000
5757
58-let s = 1000000
58+let s = toBigInt(10000000000000000)
5959
60-let t = 100000000
60+let t = "canceled"
6161
62-let u = toBigInt(10000000000000000)
62+let u = "new"
6363
64-let v = 8
64+let v = "filled"
6565
66-let w = 16
66+let w = fromBase58String("WAVES")
6767
68-let x = (10 * p)
68+let x = 0
6969
70-let y = 95
70+let y = 1
7171
72-let z = "canceled"
72+let z = 2
7373
74-let A = "new"
74+let A = 3
7575
76-let B = "filled"
76+let B = 4
7777
78-let C = "price"
78+let C = 5
7979
80-let D = "bond_asset_id"
80+let D = 6
8181
82-let E = "neutrino_asset_id"
82+let E = 7
8383
84-let F = "balance_lock_"
84+let F = 8
8585
86-let G = (F + "waves")
86+let G = 9
8787
88-let H = (F + "neutrino")
88+let H = 10
8989
90-let I = "order_first"
90+let I = 0
9191
92-let J = "math_contract"
92+let J = 1
9393
94-let K = "min_waves_nsbt_buy"
94+let K = 2
9595
96-let L = "min_nsbt_sell"
96+let L = 3
9797
98-func M (N) = ("debug_order_roi_" + N)
98+let M = 4
99+
100+let N = 5
101+
102+let O = 6
103+
104+let P = 7
105+
106+let Q = 8
107+
108+let R = 9
109+
110+let S = 10
111+
112+let T = "price"
113+
114+let U = "bond_asset_id"
115+
116+let V = "neutrino_asset_id"
117+
118+let W = "surf_asset_id"
119+
120+let X = "balance_lock_"
121+
122+let Y = (X + "waves")
123+
124+let Z = (X + "neutrino")
125+
126+let aa = "order_first"
127+
128+let ab = "math_contract"
129+
130+let ac = "min_waves_nsbt_buy"
131+
132+let ad = "min_nsbt_sell"
133+
134+let ae = "min_waves_surf_buy"
135+
136+let af = "min_usdn_surf_buy"
137+
138+func ag (ah) = ("debug_order_roi_" + ah)
99139
100140
101-func O (N) = ("order_price_" + N)
141+func ai (ah) = ("order_price_" + ah)
102142
103143
104-func P (N) = ("order_total_" + N)
144+func aj (ah) = ("order_total_" + ah)
105145
106146
107-func Q (N) = ("order_owner_" + N)
147+func ak (ah) = ("order_owner_" + ah)
108148
109149
110-func R (N) = ("order_height_" + N)
150+func al (ah) = ("order_height_" + ah)
111151
112152
113-func S (N) = ("order_status_" + N)
153+func am (ah) = ("order_status_" + ah)
114154
115155
116-func T (N) = ("order_filled_total_" + N)
156+func an (ah) = ("order_filled_total_" + ah)
117157
118158
119-func U (N) = ("order_prev_" + N)
159+func ao (ah) = ("order_prev_" + ah)
120160
121161
122-func V (N) = ("order_next_" + N)
162+func ap (ah) = ("order_next_" + ah)
123163
124164
125-func W (X,Y) = fraction(fraction(X, s, Y), p, q)
165+func aq (ar,as) = fraction(ar, r, as)
126166
127167
128-func Z (X,Y) = fraction(fraction(X, Y, s), q, p)
168+func at (ar,as) = fraction(ar, as, r)
129169
130170
131-func aa (X,Y) = Z(X, Y)
171+func au (av,aw) = fraction(toBigInt(av), s, toBigInt(aw))
132172
133173
134-func ab (X,Y) = W(X, Y)
174+func ax (i,ay) = toInt(fraction(i, toBigInt(ay), s))
135175
136176
137-func ac (ad,ae) = fraction(toBigInt(ad), u, toBigInt(ae))
177+let az = Address(base58'3N9be2mwrA52WJho6DiesZkk4351GvpnWuj')
178+
179+let aA = Address(base58'3MrwvfA9VRYwhHy4NuWPQGdxCtZdhH4LMMa')
180+
181+let aB = Address(base58'3N24ZPUAMhFm76N3vbNiiDtFqfUnmBHTc5N')
182+
183+let aC = addressFromStringValue(c(ab))
184+
185+let aD = base58'HezsdQuRDtzksAYUy97gfhKy7Z1NW2uXYSHA3bgqenNZ'
186+
187+let aE = base58'F3iaxzruFeKujfVfYSZEkejpjh67wmRfPCRHiNmWKp3Z'
188+
189+let aF = d(aA, "is_blocked")
190+
191+let aG = valueOrElse(getInteger(this, ac), 1000000000)
192+
193+let aH = valueOrElse(getInteger(this, ad), 1000000)
194+
195+let aI = valueOrElse(getInteger(this, ae), 100000000)
196+
197+let aJ = valueOrElse(getInteger(this, af), 10000000)
198+
199+let aK = c(aa)
200+
201+func aL (aM) = a(ai(aM))
138202
139203
140-func af (i,ag) = toInt(fraction(i, toBigInt(ag), u))
204+func aN (aM) = a(aj(aM))
141205
142206
143-let ah = Address(base58'3N9be2mwrA52WJho6DiesZkk4351GvpnWuj')
144-
145-let ai = Address(base58'3MrwvfA9VRYwhHy4NuWPQGdxCtZdhH4LMMa')
146-
147-let aj = Address(base58'3N24ZPUAMhFm76N3vbNiiDtFqfUnmBHTc5N')
148-
149-let ak = addressFromStringValue(c(J))
150-
151-let al = base58'HezsdQuRDtzksAYUy97gfhKy7Z1NW2uXYSHA3bgqenNZ'
152-
153-let am = base58'F3iaxzruFeKujfVfYSZEkejpjh67wmRfPCRHiNmWKp3Z'
154-
155-let an = d(ai, "is_blocked")
156-
157-let ao = valueOrElse(getInteger(this, K), 1000000000)
158-
159-let ap = valueOrElse(getInteger(this, L), 1000000)
160-
161-let aq = c(I)
162-
163-func ar (as) = a(O(as))
207+func aO (aM) = c(ak(aM))
164208
165209
166-func at (as) = a(P(as))
210+func aP (aM) = c(am(aM))
167211
168212
169-func au (as) = c(Q(as))
213+func aQ (aM) = a(an(aM))
170214
171215
172-func av (as) = c(S(as))
216+func aR (aM) = c(ao(aM))
173217
174218
175-func aw (as) = a(T(as))
219+func aS (aM) = c(ap(aM))
176220
177221
178-func ax (as) = c(U(as))
222+func aT (as) = ((q * q) / as)
179223
180224
181-func ay (as) = c(V(as))
225+func aU (aV,aW) = fraction(toBigInt(aV), toBigInt((q * q)), toBigInt(aW))
182226
183227
184-func az (Y) = ((s * s) / Y)
228+func aX (ah,aY,aZ,ba,bb,bc,as,bd) = [StringEntry(ai(ah), toString(as)), IntegerEntry(aj(ah), aY), IntegerEntry(an(ah), aZ), StringEntry(ak(ah), ba), IntegerEntry(al(ah), height), StringEntry(am(ah), bb), IntegerEntry(("debug_order_currentPrice_" + ah), bd), IntegerEntry(ag(ah), bc)]
185229
186230
187-func aA (aB,aC) = fraction(toBigInt(aB), toBigInt((q * s)), toBigInt(aC))
231+func be (bf,bg) = (((((((((((((((((((((((((((((((((((bf + "[nsbtAmountRaw=") + toString(n(bg[0]))) + " usdnPayment=") + toString(n(bg[1]))) + " wRaw=") + toString(n(bg[2]))) + " uRaw=") + toString(n(bg[3]))) + " mRaw=") + toString(n(bg[4]))) + " sRaw=") + toString(n(bg[5]))) + " nsbtCurveParam_a=") + toString(n(bg[6]))) + " nsbtCurveParam_b=") + toString(n(bg[7]))) + " wReservesInUsdn=") + toString(n(bg[8]))) + " price=") + toString(n(bg[9]))) + " multBR=") + toString(n(bg[10]))) + " multPower=") + toString(n(bg[11]))) + " multExpInPower=") + l(bg[12])) + " multK=") + l(bg[13])) + " step1=") + l(bg[14])) + " step2=") + l(bg[15])) + " step3=") + toString(n(bg[16]))) + "]")
188232
189233
190-func aD (N,aE,aF,aG,aH,aI,Y,aJ) = [StringEntry(O(N), toString(Y)), IntegerEntry(P(N), aE), IntegerEntry(T(N), aF), StringEntry(Q(N), aG), IntegerEntry(R(N), height), StringEntry(S(N), aH), IntegerEntry(("debug_order_currentPrice_" + N), aJ), IntegerEntry(M(N), aI)]
234+func bh (bi) = StringEntry("debug_surfResult", makeString(["%d%d%d%d%d%d%d%d%d%d%d", toString(n(bi[I])), toString(n(bi[J])), toString(n(bi[K])), toString(n(bi[L])), toString(n(bi[M])), toString(n(bi[N])), toString(n(bi[O])), toString(n(bi[P])), toString(n(bi[Q])), toString(n(bi[R])), toString(n(bi[S]))], p))
191235
192236
193-func aK (aL,aM) = (((((((((((((((((((((((((((((((((((aL + "[nsbtAmountRaw=") + toString(n(aM[0]))) + " usdnPayment=") + toString(n(aM[1]))) + " wRaw=") + toString(n(aM[2]))) + " uRaw=") + toString(n(aM[3]))) + " mRaw=") + toString(n(aM[4]))) + " sRaw=") + toString(n(aM[5]))) + " nsbtCurveParam_a=") + toString(n(aM[6]))) + " nsbtCurveParam_b=") + toString(n(aM[7]))) + " wReservesInUsdn=") + toString(n(aM[8]))) + " price=") + toString(n(aM[9]))) + " multBR=") + toString(n(aM[10]))) + " multPower=") + toString(n(aM[11]))) + " multExpInPower=") + l(aM[12])) + " multK=") + l(aM[13])) + " step1=") + l(aM[14])) + " step2=") + l(aM[15])) + " step3=") + toString(n(aM[16]))) + "]")
237+@Callable(bj)
238+func constructor (bk,bl,aH) = if ((bj.caller != this))
239+ then throw("Permission denied")
240+ else [StringEntry(ab, bk), IntegerEntry(ad, aH), IntegerEntry(ac, bl)]
194241
195242
196-@Callable(aN)
243+
244+@Callable(bj)
245+func constructorV2 (bm,bn) = if ((bj.caller != this))
246+ then throw("Permission denied")
247+ else {
248+ let bo = Issue("SURF", "Smart Utility Recapitalization Feature token", 0, 6, true, unit, 0)
249+ let bp = calculateAssetId(bo)
250+[bo, StringEntry(W, toBase58String(bp)), IntegerEntry(ae, bm), IntegerEntry(af, bn)]
251+ }
252+
253+
254+
255+@Callable(bj)
197256 func buyNsbt () = {
198- let aO = value(aN.payments[0])
199- let aP = aO.amount
200- let aQ = aP
201- if (an)
257+ let bq = value(bj.payments[0])
258+ let br = bq.amount
259+ let bs = br
260+ if (aF)
202261 then throw("contract is blocked by EMERGENCY SHUTDOWN actions until reactivation by emergency oracles")
203- else if (isDefined(aO.assetId))
262+ else if (isDefined(bq.assetId))
204263 then throw("can use waves only")
205- else if ((ao > aP))
206- then throw((("min " + toString((ao / p))) + " waves expected"))
264+ else if ((aG > br))
265+ then throw((("min " + toString((aG / r))) + " waves expected"))
207266 else {
208- let aR = aN.caller
209- let aS = h(invoke(ak, "calcNeutinoMetricsREADONLY", nil, nil))
210- let aJ = n(aS[0])
211- let aM = h(invoke(ak, "curveFunctionREADONLY", [aQ], nil))
212- let aT = n(aM[0])
213- if ((0 >= aT))
267+ let bt = bj.caller
268+ let bu = h(invoke(aC, "calcNeutinoMetricsREADONLY", nil, nil))
269+ let bd = n(bu[0])
270+ let bg = h(invoke(aC, "curveFunctionREADONLY", [bs], nil))
271+ let bv = n(bg[0])
272+ if ((0 >= bv))
214273 then throw("nsbtAmount <= 0")
215274 else {
216- let aU = aA(aQ, aT)
217- let aI = 0
218- let aV = invoke(ah, "acceptWaves", nil, aN.payments)
219- if ((aV == aV))
220- then $Tuple2((aD(toBase58String(aN.transactionId), aP, aP, toString(aR), B, aI, aU, aJ) ++ [ScriptTransfer(aR, aT, am), StringEntry("debug_curveResult", aK("curveResult", aM))]), aT)
275+ let bw = aU(bs, bv)
276+ let bc = 0
277+ let bx = invoke(az, "acceptWaves", nil, bj.payments)
278+ if ((bx == bx))
279+ then $Tuple2((aX(toBase58String(bj.transactionId), br, br, toString(bt), v, bc, bw, bd) ++ [ScriptTransfer(bt, bv, aE), StringEntry("debug_curveResult", be("curveResult", bg))]), bv)
221280 else throw("Strict value is not equal to itself.")
222281 }
223282 }
225284
226285
227286
228-@Callable(aN)
229-func sellNsbt () = if (an)
287+@Callable(bj)
288+func sellNsbt () = if (aF)
230289 then throw("contract is blocked by EMERGENCY SHUTDOWN actions until reactivation by emergency oracles")
231290 else {
232- let aO = value(aN.payments[0])
233- let aP = aO.amount
234- if ((aO.assetId != am))
291+ let bq = value(bj.payments[0])
292+ let br = bq.amount
293+ if ((bq.assetId != aE))
235294 then throw("can use NSBT only")
236- else if ((ap > aP))
237- then throw((("min " + toString((ap / q))) + " nsbt expected"))
295+ else if ((aH > br))
296+ then throw((("min " + toString((aH / q))) + " nsbt expected"))
238297 else {
239- let aW = n(h(invoke(ak, "calcContractNsbtPriceSYSREADONLY", [-(aP)], nil))[0])
240- if ((q > aW))
241- then throw((("resulting nsbt price would be < 1 (" + toString(aW)) + " usdn)"))
298+ let by = n(h(invoke(aC, "calcContractNsbtPriceSYSREADONLY", [-(br)], nil))[0])
299+ if ((q > by))
300+ then throw((("resulting nsbt price would be < 1 (" + toString(by)) + " usdn)"))
242301 else {
243- let aX = invoke(ah, "transferUsdnToUser", [aP, toString(aN.caller)], nil)
244- if ((aX == aX))
245- then $Tuple2(nil, aW)
302+ let bz = invoke(az, "transferUsdnToUser", [br, toString(bj.caller)], nil)
303+ if ((bz == bz))
304+ then $Tuple2(nil, by)
246305 else throw("Strict value is not equal to itself.")
247306 }
248307 }
250309
251310
252311
253-@Callable(aN)
254-func cancelOrder (N) = {
255- let aG = au(N)
256- let X = (at(N) - aw(N))
257- let aY = toString(aN.caller)
258- let aZ = ay(N)
259- let ba = ax(N)
260- if ((av(N) != A))
312+@Callable(bj)
313+func cancelOrder (ah) = {
314+ let ba = aO(ah)
315+ let ar = (aN(ah) - aQ(ah))
316+ let bA = toString(bj.caller)
317+ let bB = aS(ah)
318+ let bC = aR(ah)
319+ if ((aP(ah) != u))
261320 then throw("invalid order status")
262- else [StringEntry(I, if ((aq == N))
263- then aZ
264- else aq), StringEntry(V(ba), aZ), StringEntry(U(aZ), ba), StringEntry(S(N), z), ScriptTransfer(aN.caller, X, unit)]
321+ else [StringEntry(aa, if ((aK == ah))
322+ then bB
323+ else aK), StringEntry(ap(bC), bB), StringEntry(ao(bB), bC), StringEntry(am(ah), t), ScriptTransfer(bj.caller, ar, unit)]
265324 }
266325
267326
268327
269-@Callable(aN)
270-func minWavesAmountNsbtBuySYSREADONLY () = $Tuple2(nil, ao)
328+@Callable(bj)
329+func minWavesAmountNsbtBuySYSREADONLY () = $Tuple2(nil, aG)
271330
272331
273332
274-@Callable(aN)
275-func minNsbtAmountForSellSYSREADONLY () = $Tuple2(nil, ap)
333+@Callable(bj)
334+func minNsbtAmountForSellSYSREADONLY () = $Tuple2(nil, aH)
276335
277336
278-@Verifier(bb)
279-func bc () = {
280- let bd = ["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"]
281- let be = ((((if (sigVerify(bb.bodyBytes, bb.proofs[0], fromBase58String(bd[0])))
337+
338+@Callable(bj)
339+func minWavesAmountSurfBuySYSREADONLY () = $Tuple2(nil, aI)
340+
341+
342+
343+@Callable(bj)
344+func minUsdnAmountSurfBuySYSREADONLY () = $Tuple2(nil, aJ)
345+
346+
347+
348+@Callable(bj)
349+func buySurf (bD,bE) = if ((size(bj.payments) != 1))
350+ then throw("exactly 1 payment must be attached")
351+ else {
352+ let bq = bj.payments[0]
353+ let bF = bq.amount
354+ let bG = valueOrElse(bq.assetId, w)
355+ if (if ((bG != aD))
356+ then (bG != w)
357+ else false)
358+ then throw("Unsupported payment asset")
359+ else if (if ((bG == aD))
360+ then (aJ > bF)
361+ else false)
362+ then throw((("min " + toString((aJ / q))) + " USDN expected"))
363+ else if (if ((bG == w))
364+ then (aI > bF)
365+ else false)
366+ then throw((("min " + toString((aI / r))) + " WAVES expected"))
367+ else {
368+ let bi = h(invoke(aC, "surfFunctionREADONLY", [bF, bG], nil))
369+ let bH = n(bi[I])
370+ if ((bD > bH))
371+ then throw(((("Requested no less than " + toString(bD)) + " SURF, but can buy only ") + toString(bH)))
372+ else {
373+ let bI = if ((bG == w))
374+ then {
375+ let bJ = n(bi[R])
376+ let bK = invoke(az, "acceptWaves", nil, [AttachedPayment(unit, (bF - bJ))])
377+ if ((bK == bK))
378+ then if ((bJ > 0))
379+ then [ScriptTransfer(bj.caller, bJ, unit)]
380+ else nil
381+ else throw("Strict value is not equal to itself.")
382+ }
383+ else {
384+ let bL = n(bi[S])
385+ if ((bL > 0))
386+ then [ScriptTransfer(az, (bF - bL), aD), ScriptTransfer(bj.caller, bL, aD)]
387+ else [ScriptTransfer(az, (bF - bL), aD)]
388+ }
389+ let bM = fromBase58String(getStringValue(W))
390+ (bI ++ [Reissue(bM, bH, true), ScriptTransfer(bj.caller, bH, bM), bh(bi)])
391+ }
392+ }
393+ }
394+
395+
396+@Verifier(bN)
397+func bO () = {
398+ let bP = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"], p)
399+ let bQ = split(valueOrElse(getString(aA, "%s__multisig"), bP), p)
400+ let bR = ((((if (sigVerify(bN.bodyBytes, bN.proofs[0], fromBase58String(bQ[0])))
282401 then 1
283- else 0) + (if (sigVerify(bb.bodyBytes, bb.proofs[1], fromBase58String(bd[1])))
402+ else 0) + (if (sigVerify(bN.bodyBytes, bN.proofs[1], fromBase58String(bQ[1])))
284403 then 1
285- else 0)) + (if (sigVerify(bb.bodyBytes, bb.proofs[2], fromBase58String(bd[2])))
404+ else 0)) + (if (sigVerify(bN.bodyBytes, bN.proofs[2], fromBase58String(bQ[2])))
286405 then 1
287- else 0)) + (if (sigVerify(bb.bodyBytes, bb.proofs[3], fromBase58String(bd[3])))
406+ else 0)) + (if (sigVerify(bN.bodyBytes, bN.proofs[3], fromBase58String(bQ[3])))
288407 then 2
289408 else 0))
290- (be >= 3)
409+ (bR >= 3)
291410 }
292411
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b) = valueOrElse(getInteger(this, b), 0)
55
66
77 func c (b) = valueOrElse(getString(this, b), "")
88
99
1010 func d (e,b) = valueOrElse(getBoolean(e, b), false)
1111
1212
1313 func f (e,b) = valueOrElse(getString(e, b), "")
1414
1515
1616 func g (e,b) = valueOrElse(getInteger(e, b), 0)
1717
1818
1919 func h (i) = {
2020 let j = i
2121 if ($isInstanceOf(j, "List[Any]"))
2222 then {
2323 let k = j
2424 k
2525 }
2626 else throw("fail to cast into List[Any]")
2727 }
2828
2929
3030 func l (i) = {
3131 let j = i
3232 if ($isInstanceOf(j, "String"))
3333 then {
3434 let m = j
3535 m
3636 }
3737 else throw("fail to cast into String")
3838 }
3939
4040
4141 func n (i) = {
4242 let j = i
4343 if ($isInstanceOf(j, "Int"))
4444 then {
4545 let o = j
4646 o
4747 }
4848 else throw("fail to cast into Int")
4949 }
5050
5151
52-let p = 100000000
52+let p = "__"
5353
5454 let q = 1000000
5555
56-let r = toBigInt(1000000)
56+let r = 100000000
5757
58-let s = 1000000
58+let s = toBigInt(10000000000000000)
5959
60-let t = 100000000
60+let t = "canceled"
6161
62-let u = toBigInt(10000000000000000)
62+let u = "new"
6363
64-let v = 8
64+let v = "filled"
6565
66-let w = 16
66+let w = fromBase58String("WAVES")
6767
68-let x = (10 * p)
68+let x = 0
6969
70-let y = 95
70+let y = 1
7171
72-let z = "canceled"
72+let z = 2
7373
74-let A = "new"
74+let A = 3
7575
76-let B = "filled"
76+let B = 4
7777
78-let C = "price"
78+let C = 5
7979
80-let D = "bond_asset_id"
80+let D = 6
8181
82-let E = "neutrino_asset_id"
82+let E = 7
8383
84-let F = "balance_lock_"
84+let F = 8
8585
86-let G = (F + "waves")
86+let G = 9
8787
88-let H = (F + "neutrino")
88+let H = 10
8989
90-let I = "order_first"
90+let I = 0
9191
92-let J = "math_contract"
92+let J = 1
9393
94-let K = "min_waves_nsbt_buy"
94+let K = 2
9595
96-let L = "min_nsbt_sell"
96+let L = 3
9797
98-func M (N) = ("debug_order_roi_" + N)
98+let M = 4
99+
100+let N = 5
101+
102+let O = 6
103+
104+let P = 7
105+
106+let Q = 8
107+
108+let R = 9
109+
110+let S = 10
111+
112+let T = "price"
113+
114+let U = "bond_asset_id"
115+
116+let V = "neutrino_asset_id"
117+
118+let W = "surf_asset_id"
119+
120+let X = "balance_lock_"
121+
122+let Y = (X + "waves")
123+
124+let Z = (X + "neutrino")
125+
126+let aa = "order_first"
127+
128+let ab = "math_contract"
129+
130+let ac = "min_waves_nsbt_buy"
131+
132+let ad = "min_nsbt_sell"
133+
134+let ae = "min_waves_surf_buy"
135+
136+let af = "min_usdn_surf_buy"
137+
138+func ag (ah) = ("debug_order_roi_" + ah)
99139
100140
101-func O (N) = ("order_price_" + N)
141+func ai (ah) = ("order_price_" + ah)
102142
103143
104-func P (N) = ("order_total_" + N)
144+func aj (ah) = ("order_total_" + ah)
105145
106146
107-func Q (N) = ("order_owner_" + N)
147+func ak (ah) = ("order_owner_" + ah)
108148
109149
110-func R (N) = ("order_height_" + N)
150+func al (ah) = ("order_height_" + ah)
111151
112152
113-func S (N) = ("order_status_" + N)
153+func am (ah) = ("order_status_" + ah)
114154
115155
116-func T (N) = ("order_filled_total_" + N)
156+func an (ah) = ("order_filled_total_" + ah)
117157
118158
119-func U (N) = ("order_prev_" + N)
159+func ao (ah) = ("order_prev_" + ah)
120160
121161
122-func V (N) = ("order_next_" + N)
162+func ap (ah) = ("order_next_" + ah)
123163
124164
125-func W (X,Y) = fraction(fraction(X, s, Y), p, q)
165+func aq (ar,as) = fraction(ar, r, as)
126166
127167
128-func Z (X,Y) = fraction(fraction(X, Y, s), q, p)
168+func at (ar,as) = fraction(ar, as, r)
129169
130170
131-func aa (X,Y) = Z(X, Y)
171+func au (av,aw) = fraction(toBigInt(av), s, toBigInt(aw))
132172
133173
134-func ab (X,Y) = W(X, Y)
174+func ax (i,ay) = toInt(fraction(i, toBigInt(ay), s))
135175
136176
137-func ac (ad,ae) = fraction(toBigInt(ad), u, toBigInt(ae))
177+let az = Address(base58'3N9be2mwrA52WJho6DiesZkk4351GvpnWuj')
178+
179+let aA = Address(base58'3MrwvfA9VRYwhHy4NuWPQGdxCtZdhH4LMMa')
180+
181+let aB = Address(base58'3N24ZPUAMhFm76N3vbNiiDtFqfUnmBHTc5N')
182+
183+let aC = addressFromStringValue(c(ab))
184+
185+let aD = base58'HezsdQuRDtzksAYUy97gfhKy7Z1NW2uXYSHA3bgqenNZ'
186+
187+let aE = base58'F3iaxzruFeKujfVfYSZEkejpjh67wmRfPCRHiNmWKp3Z'
188+
189+let aF = d(aA, "is_blocked")
190+
191+let aG = valueOrElse(getInteger(this, ac), 1000000000)
192+
193+let aH = valueOrElse(getInteger(this, ad), 1000000)
194+
195+let aI = valueOrElse(getInteger(this, ae), 100000000)
196+
197+let aJ = valueOrElse(getInteger(this, af), 10000000)
198+
199+let aK = c(aa)
200+
201+func aL (aM) = a(ai(aM))
138202
139203
140-func af (i,ag) = toInt(fraction(i, toBigInt(ag), u))
204+func aN (aM) = a(aj(aM))
141205
142206
143-let ah = Address(base58'3N9be2mwrA52WJho6DiesZkk4351GvpnWuj')
144-
145-let ai = Address(base58'3MrwvfA9VRYwhHy4NuWPQGdxCtZdhH4LMMa')
146-
147-let aj = Address(base58'3N24ZPUAMhFm76N3vbNiiDtFqfUnmBHTc5N')
148-
149-let ak = addressFromStringValue(c(J))
150-
151-let al = base58'HezsdQuRDtzksAYUy97gfhKy7Z1NW2uXYSHA3bgqenNZ'
152-
153-let am = base58'F3iaxzruFeKujfVfYSZEkejpjh67wmRfPCRHiNmWKp3Z'
154-
155-let an = d(ai, "is_blocked")
156-
157-let ao = valueOrElse(getInteger(this, K), 1000000000)
158-
159-let ap = valueOrElse(getInteger(this, L), 1000000)
160-
161-let aq = c(I)
162-
163-func ar (as) = a(O(as))
207+func aO (aM) = c(ak(aM))
164208
165209
166-func at (as) = a(P(as))
210+func aP (aM) = c(am(aM))
167211
168212
169-func au (as) = c(Q(as))
213+func aQ (aM) = a(an(aM))
170214
171215
172-func av (as) = c(S(as))
216+func aR (aM) = c(ao(aM))
173217
174218
175-func aw (as) = a(T(as))
219+func aS (aM) = c(ap(aM))
176220
177221
178-func ax (as) = c(U(as))
222+func aT (as) = ((q * q) / as)
179223
180224
181-func ay (as) = c(V(as))
225+func aU (aV,aW) = fraction(toBigInt(aV), toBigInt((q * q)), toBigInt(aW))
182226
183227
184-func az (Y) = ((s * s) / Y)
228+func aX (ah,aY,aZ,ba,bb,bc,as,bd) = [StringEntry(ai(ah), toString(as)), IntegerEntry(aj(ah), aY), IntegerEntry(an(ah), aZ), StringEntry(ak(ah), ba), IntegerEntry(al(ah), height), StringEntry(am(ah), bb), IntegerEntry(("debug_order_currentPrice_" + ah), bd), IntegerEntry(ag(ah), bc)]
185229
186230
187-func aA (aB,aC) = fraction(toBigInt(aB), toBigInt((q * s)), toBigInt(aC))
231+func be (bf,bg) = (((((((((((((((((((((((((((((((((((bf + "[nsbtAmountRaw=") + toString(n(bg[0]))) + " usdnPayment=") + toString(n(bg[1]))) + " wRaw=") + toString(n(bg[2]))) + " uRaw=") + toString(n(bg[3]))) + " mRaw=") + toString(n(bg[4]))) + " sRaw=") + toString(n(bg[5]))) + " nsbtCurveParam_a=") + toString(n(bg[6]))) + " nsbtCurveParam_b=") + toString(n(bg[7]))) + " wReservesInUsdn=") + toString(n(bg[8]))) + " price=") + toString(n(bg[9]))) + " multBR=") + toString(n(bg[10]))) + " multPower=") + toString(n(bg[11]))) + " multExpInPower=") + l(bg[12])) + " multK=") + l(bg[13])) + " step1=") + l(bg[14])) + " step2=") + l(bg[15])) + " step3=") + toString(n(bg[16]))) + "]")
188232
189233
190-func aD (N,aE,aF,aG,aH,aI,Y,aJ) = [StringEntry(O(N), toString(Y)), IntegerEntry(P(N), aE), IntegerEntry(T(N), aF), StringEntry(Q(N), aG), IntegerEntry(R(N), height), StringEntry(S(N), aH), IntegerEntry(("debug_order_currentPrice_" + N), aJ), IntegerEntry(M(N), aI)]
234+func bh (bi) = StringEntry("debug_surfResult", makeString(["%d%d%d%d%d%d%d%d%d%d%d", toString(n(bi[I])), toString(n(bi[J])), toString(n(bi[K])), toString(n(bi[L])), toString(n(bi[M])), toString(n(bi[N])), toString(n(bi[O])), toString(n(bi[P])), toString(n(bi[Q])), toString(n(bi[R])), toString(n(bi[S]))], p))
191235
192236
193-func aK (aL,aM) = (((((((((((((((((((((((((((((((((((aL + "[nsbtAmountRaw=") + toString(n(aM[0]))) + " usdnPayment=") + toString(n(aM[1]))) + " wRaw=") + toString(n(aM[2]))) + " uRaw=") + toString(n(aM[3]))) + " mRaw=") + toString(n(aM[4]))) + " sRaw=") + toString(n(aM[5]))) + " nsbtCurveParam_a=") + toString(n(aM[6]))) + " nsbtCurveParam_b=") + toString(n(aM[7]))) + " wReservesInUsdn=") + toString(n(aM[8]))) + " price=") + toString(n(aM[9]))) + " multBR=") + toString(n(aM[10]))) + " multPower=") + toString(n(aM[11]))) + " multExpInPower=") + l(aM[12])) + " multK=") + l(aM[13])) + " step1=") + l(aM[14])) + " step2=") + l(aM[15])) + " step3=") + toString(n(aM[16]))) + "]")
237+@Callable(bj)
238+func constructor (bk,bl,aH) = if ((bj.caller != this))
239+ then throw("Permission denied")
240+ else [StringEntry(ab, bk), IntegerEntry(ad, aH), IntegerEntry(ac, bl)]
194241
195242
196-@Callable(aN)
243+
244+@Callable(bj)
245+func constructorV2 (bm,bn) = if ((bj.caller != this))
246+ then throw("Permission denied")
247+ else {
248+ let bo = Issue("SURF", "Smart Utility Recapitalization Feature token", 0, 6, true, unit, 0)
249+ let bp = calculateAssetId(bo)
250+[bo, StringEntry(W, toBase58String(bp)), IntegerEntry(ae, bm), IntegerEntry(af, bn)]
251+ }
252+
253+
254+
255+@Callable(bj)
197256 func buyNsbt () = {
198- let aO = value(aN.payments[0])
199- let aP = aO.amount
200- let aQ = aP
201- if (an)
257+ let bq = value(bj.payments[0])
258+ let br = bq.amount
259+ let bs = br
260+ if (aF)
202261 then throw("contract is blocked by EMERGENCY SHUTDOWN actions until reactivation by emergency oracles")
203- else if (isDefined(aO.assetId))
262+ else if (isDefined(bq.assetId))
204263 then throw("can use waves only")
205- else if ((ao > aP))
206- then throw((("min " + toString((ao / p))) + " waves expected"))
264+ else if ((aG > br))
265+ then throw((("min " + toString((aG / r))) + " waves expected"))
207266 else {
208- let aR = aN.caller
209- let aS = h(invoke(ak, "calcNeutinoMetricsREADONLY", nil, nil))
210- let aJ = n(aS[0])
211- let aM = h(invoke(ak, "curveFunctionREADONLY", [aQ], nil))
212- let aT = n(aM[0])
213- if ((0 >= aT))
267+ let bt = bj.caller
268+ let bu = h(invoke(aC, "calcNeutinoMetricsREADONLY", nil, nil))
269+ let bd = n(bu[0])
270+ let bg = h(invoke(aC, "curveFunctionREADONLY", [bs], nil))
271+ let bv = n(bg[0])
272+ if ((0 >= bv))
214273 then throw("nsbtAmount <= 0")
215274 else {
216- let aU = aA(aQ, aT)
217- let aI = 0
218- let aV = invoke(ah, "acceptWaves", nil, aN.payments)
219- if ((aV == aV))
220- then $Tuple2((aD(toBase58String(aN.transactionId), aP, aP, toString(aR), B, aI, aU, aJ) ++ [ScriptTransfer(aR, aT, am), StringEntry("debug_curveResult", aK("curveResult", aM))]), aT)
275+ let bw = aU(bs, bv)
276+ let bc = 0
277+ let bx = invoke(az, "acceptWaves", nil, bj.payments)
278+ if ((bx == bx))
279+ then $Tuple2((aX(toBase58String(bj.transactionId), br, br, toString(bt), v, bc, bw, bd) ++ [ScriptTransfer(bt, bv, aE), StringEntry("debug_curveResult", be("curveResult", bg))]), bv)
221280 else throw("Strict value is not equal to itself.")
222281 }
223282 }
224283 }
225284
226285
227286
228-@Callable(aN)
229-func sellNsbt () = if (an)
287+@Callable(bj)
288+func sellNsbt () = if (aF)
230289 then throw("contract is blocked by EMERGENCY SHUTDOWN actions until reactivation by emergency oracles")
231290 else {
232- let aO = value(aN.payments[0])
233- let aP = aO.amount
234- if ((aO.assetId != am))
291+ let bq = value(bj.payments[0])
292+ let br = bq.amount
293+ if ((bq.assetId != aE))
235294 then throw("can use NSBT only")
236- else if ((ap > aP))
237- then throw((("min " + toString((ap / q))) + " nsbt expected"))
295+ else if ((aH > br))
296+ then throw((("min " + toString((aH / q))) + " nsbt expected"))
238297 else {
239- let aW = n(h(invoke(ak, "calcContractNsbtPriceSYSREADONLY", [-(aP)], nil))[0])
240- if ((q > aW))
241- then throw((("resulting nsbt price would be < 1 (" + toString(aW)) + " usdn)"))
298+ let by = n(h(invoke(aC, "calcContractNsbtPriceSYSREADONLY", [-(br)], nil))[0])
299+ if ((q > by))
300+ then throw((("resulting nsbt price would be < 1 (" + toString(by)) + " usdn)"))
242301 else {
243- let aX = invoke(ah, "transferUsdnToUser", [aP, toString(aN.caller)], nil)
244- if ((aX == aX))
245- then $Tuple2(nil, aW)
302+ let bz = invoke(az, "transferUsdnToUser", [br, toString(bj.caller)], nil)
303+ if ((bz == bz))
304+ then $Tuple2(nil, by)
246305 else throw("Strict value is not equal to itself.")
247306 }
248307 }
249308 }
250309
251310
252311
253-@Callable(aN)
254-func cancelOrder (N) = {
255- let aG = au(N)
256- let X = (at(N) - aw(N))
257- let aY = toString(aN.caller)
258- let aZ = ay(N)
259- let ba = ax(N)
260- if ((av(N) != A))
312+@Callable(bj)
313+func cancelOrder (ah) = {
314+ let ba = aO(ah)
315+ let ar = (aN(ah) - aQ(ah))
316+ let bA = toString(bj.caller)
317+ let bB = aS(ah)
318+ let bC = aR(ah)
319+ if ((aP(ah) != u))
261320 then throw("invalid order status")
262- else [StringEntry(I, if ((aq == N))
263- then aZ
264- else aq), StringEntry(V(ba), aZ), StringEntry(U(aZ), ba), StringEntry(S(N), z), ScriptTransfer(aN.caller, X, unit)]
321+ else [StringEntry(aa, if ((aK == ah))
322+ then bB
323+ else aK), StringEntry(ap(bC), bB), StringEntry(ao(bB), bC), StringEntry(am(ah), t), ScriptTransfer(bj.caller, ar, unit)]
265324 }
266325
267326
268327
269-@Callable(aN)
270-func minWavesAmountNsbtBuySYSREADONLY () = $Tuple2(nil, ao)
328+@Callable(bj)
329+func minWavesAmountNsbtBuySYSREADONLY () = $Tuple2(nil, aG)
271330
272331
273332
274-@Callable(aN)
275-func minNsbtAmountForSellSYSREADONLY () = $Tuple2(nil, ap)
333+@Callable(bj)
334+func minNsbtAmountForSellSYSREADONLY () = $Tuple2(nil, aH)
276335
277336
278-@Verifier(bb)
279-func bc () = {
280- let bd = ["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"]
281- let be = ((((if (sigVerify(bb.bodyBytes, bb.proofs[0], fromBase58String(bd[0])))
337+
338+@Callable(bj)
339+func minWavesAmountSurfBuySYSREADONLY () = $Tuple2(nil, aI)
340+
341+
342+
343+@Callable(bj)
344+func minUsdnAmountSurfBuySYSREADONLY () = $Tuple2(nil, aJ)
345+
346+
347+
348+@Callable(bj)
349+func buySurf (bD,bE) = if ((size(bj.payments) != 1))
350+ then throw("exactly 1 payment must be attached")
351+ else {
352+ let bq = bj.payments[0]
353+ let bF = bq.amount
354+ let bG = valueOrElse(bq.assetId, w)
355+ if (if ((bG != aD))
356+ then (bG != w)
357+ else false)
358+ then throw("Unsupported payment asset")
359+ else if (if ((bG == aD))
360+ then (aJ > bF)
361+ else false)
362+ then throw((("min " + toString((aJ / q))) + " USDN expected"))
363+ else if (if ((bG == w))
364+ then (aI > bF)
365+ else false)
366+ then throw((("min " + toString((aI / r))) + " WAVES expected"))
367+ else {
368+ let bi = h(invoke(aC, "surfFunctionREADONLY", [bF, bG], nil))
369+ let bH = n(bi[I])
370+ if ((bD > bH))
371+ then throw(((("Requested no less than " + toString(bD)) + " SURF, but can buy only ") + toString(bH)))
372+ else {
373+ let bI = if ((bG == w))
374+ then {
375+ let bJ = n(bi[R])
376+ let bK = invoke(az, "acceptWaves", nil, [AttachedPayment(unit, (bF - bJ))])
377+ if ((bK == bK))
378+ then if ((bJ > 0))
379+ then [ScriptTransfer(bj.caller, bJ, unit)]
380+ else nil
381+ else throw("Strict value is not equal to itself.")
382+ }
383+ else {
384+ let bL = n(bi[S])
385+ if ((bL > 0))
386+ then [ScriptTransfer(az, (bF - bL), aD), ScriptTransfer(bj.caller, bL, aD)]
387+ else [ScriptTransfer(az, (bF - bL), aD)]
388+ }
389+ let bM = fromBase58String(getStringValue(W))
390+ (bI ++ [Reissue(bM, bH, true), ScriptTransfer(bj.caller, bH, bM), bh(bi)])
391+ }
392+ }
393+ }
394+
395+
396+@Verifier(bN)
397+func bO () = {
398+ let bP = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"], p)
399+ let bQ = split(valueOrElse(getString(aA, "%s__multisig"), bP), p)
400+ let bR = ((((if (sigVerify(bN.bodyBytes, bN.proofs[0], fromBase58String(bQ[0])))
282401 then 1
283- else 0) + (if (sigVerify(bb.bodyBytes, bb.proofs[1], fromBase58String(bd[1])))
402+ else 0) + (if (sigVerify(bN.bodyBytes, bN.proofs[1], fromBase58String(bQ[1])))
284403 then 1
285- else 0)) + (if (sigVerify(bb.bodyBytes, bb.proofs[2], fromBase58String(bd[2])))
404+ else 0)) + (if (sigVerify(bN.bodyBytes, bN.proofs[2], fromBase58String(bQ[2])))
286405 then 1
287- else 0)) + (if (sigVerify(bb.bodyBytes, bb.proofs[3], fromBase58String(bd[3])))
406+ else 0)) + (if (sigVerify(bN.bodyBytes, bN.proofs[3], fromBase58String(bQ[3])))
288407 then 2
289408 else 0))
290- (be >= 3)
409+ (bR >= 3)
291410 }
292411

github/deemru/w8io/3ef1775 
176.06 ms