tx · Fygn8Jskzuasp2gnSGi3icZe7yqZJefyf324EBgMz3te

3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh:  -0.01400000 Waves

2022.04.02 21:17 [3056542] smart account 3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh > SELF 0.00000000 Waves

{ "type": 13, "id": "Fygn8Jskzuasp2gnSGi3icZe7yqZJefyf324EBgMz3te", "fee": 1400000, "feeAssetId": null, "timestamp": 1648923485827, "version": 2, "chainId": 87, "sender": "3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh", "senderPublicKey": "DE4XoCcvYCpqXfe4HTMjtyyMYwnWMm679SkRC5vEAqRQ", "proofs": [ "MkWWCitJtGvb8mxdTFFDqvq9yM2vxoVRwp6qbjMAqzpheHaJaFDbgtSMHGbWUiDnt3QrtXMK4keVcCWtyo1u1rM" ], "script": "base64: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b3VudEluBQAAAAZIQUxGVVAAAAAAAAAAABAJAAE2AAAAAQkAAGsAAAADCQABkQAAAAIFAAAADUFzc2V0c1dlaWdodHMFAAAAB0luZGV4SW4AAAAAAAAAJxAJAAGRAAAAAgUAAAANQXNzZXRzV2VpZ2h0cwUAAAAISW5kZXhPdXQAAAAAAAAAAAQAAAAAAAAAABAFAAAAB0NFSUxJTkcJAABoAAAAAgUAAAAGU2NhbGU4BQAAAAZTY2FsZTgFAAAABERPV04BAAAAD2dldFRva2VuQmFsYW5jZQAAAAEAAAAHYXNzZXRJZAQAAAAHJG1hdGNoMAUAAAAHYXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAABdAUAAAAHJG1hdGNoMAkAA/AAAAACBQAAAAR0aGlzBQAAAAF0CAkAA+8AAAABBQAAAAR0aGlzAAAACWF2YWlsYWJsZQEAAAAdY2FsY3VsYXRlQ3VycmVudEFzc2V0SW50ZXJlc3QAAAAEAAAAB2Fzc2V0SWQAAAAKYXNzZXRJZFN0cgAAAAhhQmFsYW5jZQAAABZ0b2tlbkVhcm5pbmdzTGFzdENoZWNrBAAAAAt0b3RhbFN0YWtlZAkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABJnbG9iYWxfaW5kZXhTdGFrZWQEAAAAFXRva2VuQmFsYW5jZUxhc3RDaGVjawUAAAAWdG9rZW5FYXJuaW5nc0xhc3RDaGVjawQAAAATY3VycmVudEJhbGFuY2VEZWx0YQkAAGUAAAACCQEAAAAPZ2V0VG9rZW5CYWxhbmNlAAAAAQUAAAAHYXNzZXRJZAUAAAAIYUJhbGFuY2UEAAAAFGN1cnJlbnRUb2tlbkVhcm5pbmdzAwkAAGYAAAACBQAAABNjdXJyZW50QmFsYW5jZURlbHRhBQAAABV0b2tlbkJhbGFuY2VMYXN0Q2hlY2sFAAAAE2N1cnJlbnRCYWxhbmNlRGVsdGEFAAAAFXRva2VuQmFsYW5jZUxhc3RDaGVjawQAAAALbmV3RWFybmluZ3MJAABlAAAAAgUAAAAUY3VycmVudFRva2VuRWFybmluZ3MFAAAAFXRva2VuQmFsYW5jZUxhc3RDaGVjawQAAAALbmV3SW50ZXJlc3QDCQAAAAAAAAIFAAAAC3RvdGFsU3Rha2VkAAAAAAAAAAAAAAAAAAAAAAAACQAAawAAAAMFAAAAC25ld0Vhcm5pbmdzBQAAAAZTY2FsZTgFAAAAC3RvdGFsU3Rha2VkBAAAABFsYXN0Q2hlY2tJbnRlcmVzdAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAARZ2xvYmFsX2xhc3RDaGVja18FAAAACmFzc2V0SWRTdHICAAAACV9pbnRlcmVzdAkAAGQAAAACBQAAABFsYXN0Q2hlY2tJbnRlcmVzdAUAAAALbmV3SW50ZXJlc3QBAAAAC2NsYWltUmVzdWx0AAAAAQAAAAdhZGRyZXNzBAAAAAphZGRyZXNzU3RyCQAEJQAAAAEFAAAAB2FkZHJlc3MEAAAADHB1enpsZUFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIFAAAACmFkZHJlc3NTdHICAAAADF9pbmRleFN0YWtlZAoBAAAAB2hhbmRsZXIAAAACAAAABWFjY3VtAAAAB2Fzc2V0SWQEAAAACmFzc2V0SWRTdHIJAQAAAA5nZXRBc3NldFN0cmluZwAAAAEFAAAAB2Fzc2V0SWQEAAAACGFCYWxhbmNlCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAdnbG9iYWxfCQEAAAAOZ2V0QXNzZXRTdHJpbmcAAAABBQAAAAdhc3NldElkAgAAAAhfYmFsYW5jZQQAAAAWdG9rZW5FYXJuaW5nc0xhc3RDaGVjawkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAARZ2xvYmFsX2xhc3RDaGVja18FAAAACmFzc2V0SWRTdHICAAAACV9lYXJuaW5ncwQAAAAUY3VycmVudFRva2VuSW50ZXJlc3QJAQAAAB1jYWxjdWxhdGVDdXJyZW50QXNzZXRJbnRlcmVzdAAAAAQFAAAAB2Fzc2V0SWQFAAAACmFzc2V0SWRTdHIFAAAACGFCYWxhbmNlBQAAABZ0b2tlbkVhcm5pbmdzTGFzdENoZWNrBAAAABRjdXJyZW50VG9rZW5FYXJuaW5ncwkAAZYAAAABCQAETAAAAAIFAAAAFnRva2VuRWFybmluZ3NMYXN0Q2hl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AgkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABdnbG9iYWxfcG9vbFRva2VuX2Ftb3VudAUAAAAHUElzc3VlZAUAAAADbmlsBQAAAAdQSXNzdWVkAAAAAWkBAAAACnN0YWtlSW5kZXgAAAAABAAAAAphZGRyZXNzU3RyCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgQAAAADcG10CQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAwkBAAAAAiE9AAAAAgkBAAAABXZhbHVlAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkCQEAAAAMdHJ5R2V0QmluYXJ5AAAAAQIAAAATZ2xvYmFsX3Bvb2xUb2tlbl9pZAkAAAIAAAABAgAAABR3cm9uZyBhc3NldCBhdHRhY2hlZAkBAAAAEGluZGV4U3Rha2VSZXN1bHQAAAACBQAAAAphZGRyZXNzU3RyCAUAAAADcG10AAAABmFtb3VudAAAAAFpAQAAAAx1bnN0YWtlSW5kZXgAAAABAAAADHB1enpsZUFtb3VudAQAAAAKYWRkcmVzc1N0cgkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIEAAAAD3B1enpsZUF2YWlsYWJsZQkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIFAAAACmFkZHJlc3NTdHICAAAADF9pbmRleFN0YWtlZAMJAABmAAAAAgUAAAAMcHV6emxlQW1vdW50BQAAAA9wdXp6bGVBdmFpbGFibGUJAAACAAAAAQIAAAAleW91IGRvbid0IGhhdmUgaW5kZXggdG9rZW5zIGF2YWlsYWJsZQkABE4AAAACCQEAAAALY2xhaW1SZXN1bHQAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAKYWRkcmVzc1N0cgIAAAAMX2luZGV4U3Rha2VkCQAAZQAAAAIFAAAAD3B1enpsZUF2YWlsYWJsZQUAAAAMcHV6emxlQW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABJnbG9iYWxfaW5kZXhTdGFrZWQJAABlAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABJnbG9iYWxfaW5kZXhTdGFrZWQFAAAADHB1enpsZUFtb3VudAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADHB1enpsZUFtb3VudAkBAAAAEUBleHRyTmF0aXZlKDEwNTcpAAAAAQIAAAATZ2xvYmFsX3Bvb2xUb2tlbl9pZAUAAAADbmlsAAAAAWkBAAAAEWNsYWltSW5kZXhSZXdhcmRzAAAAAAkBAAAAC2NsYWltUmVzdWx0AAAAAQgFAAAAAWkAAAAGY2FsbGVyAAAAAWkBAAAAC3JlZGVlbUluZGV4AAAAAQAAAAxzZW5kVG9PcmlnaW4EAAAAA3BtdAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAkBAAAADHRyeUdldEJpbmFyeQAAAAECAAAAE2dsb2JhbF9wb29sVG9rZW5faWQJAAACAAAAAQIAAAAecGxlYXNlIGF0dGFjaCBwb29sIHNoYXJlIHRva2VuBAAAAAlQUmVkZWVtZWQIBQAAAANwbXQAAAAGYW1vdW50BAAAAAZyZXN1bHQJAQAAABZoYW5kbGVQb29sVG9rZW5zUmVkZWVtAAAAAgUAAAAJUFJlZGVlbWVkAwUAAAAMc2VuZFRvT3JpZ2luCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIIBQAAAAFpAAAABmNhbGxlcgkABE4AAAACBQAAAAZyZXN1bHQJAARMAAAAAgkBAAAABEJ1cm4AAAACCQEAAAAMdHJ5R2V0QmluYXJ5AAAAAQIAAAATZ2xvYmFsX3Bvb2xUb2tlbl9pZAUAAAAJUFJlZGVlbWVkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABdnbG9iYWxfcG9vbFRva2VuX2Ftb3VudAkAAGUAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAF2dsb2JhbF9wb29sVG9rZW5fYW1vdW50BQAAAAlQUmVkZWVtZWQFAAAAA25pbAAAAAFpAQAAAARzd2FwAAAAAgAAAAhhc3NldE91dAAAAAdtaW5pbXVtBAAAAANwbXQJAQAAAAV2YWx1ZQAAAAEJAAGR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AQAAABJjYWxjdWxhdGVVc2RuVmFsdWUAAAADBQAAAAdBc3NldEluBQAAAAhBbW91bnRJbgUAAAAOQXNzZXRJbkJhbGFuY2UFAAAAA25pbAUAAAAOY2xlYW5BbW91bnRPdXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAAAAAt1c2RuQmFsYW5jZQMJAAAAAAAAAgUAAAAHQXNzZXRJbgUAAAALdXNkbkFzc2V0SWQFAAAADG5ld0JhbGFuY2VJbgkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAHZ2xvYmFsXwkBAAAADmdldEFzc2V0U3RyaW5nAAAAAQUAAAALdXNkbkFzc2V0SWQCAAAACF9iYWxhbmNlBAAAAA11c2RuRmVlQW1vdW50CQEAAAASY2FsY3VsYXRlT3V0QW1vdW50AAAABQUAAAAJZmVlQW1vdW50BQAAAAhBc3NldE91dAUAAAALdXNkbkFzc2V0SWQFAAAADW5ld0JhbGFuY2VPdXQFAAAAC3VzZG5CYWxhbmNlBAAAAA9wcm90b2NvbFVzZG5GZWUJAABrAAAAAwUAAAANdXNkbkZlZUFtb3VudAAAAAAAAAAABAAAAAAAAAAACgQAAAAMc3Rha2luZ1RvcFVwCQAD/QAAAAQJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVeUaIz57qK5qp/W9Y68qY9nGpwG9BYpibsCAAAAC3RvcFVwUmV3YXJkBQAAAANuaWwJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIFAAAAC3VzZG5Bc3NldElkBQAAAA9wcm90b2NvbFVzZG5GZWUFAAAAA25pbAMJAAAAAAAAAgUAAAAMc3Rha2luZ1RvcFVwBQAAAAxzdGFraW5nVG9wVXAEAAAAFnVzZG5CYWxhbmNlQ2hhbmdlRW50cnkJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAHZ2xvYmFsXwkAAlgAAAABBQAAAAt1c2RuQXNzZXRJZAIAAAAIX2JhbGFuY2UJAABlAAAAAgUAAAALdXNkbkJhbGFuY2UFAAAADXVzZG5GZWVBbW91bnQEAAAADmJhbGFuY2VDaGFuZ2VzAwkAAAAAAAACBQAAAAdBc3NldEluBQAAAAt1c2RuQXNzZXRJZAkABEwAAAACBQAAABZ1c2RuQmFsYW5jZUNoYW5nZUVudHJ5BQAAAANuaWwJAARMAAAAAgUAAAAWdXNkbkJhbGFuY2VDaGFuZ2VFbnRyeQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAAB2dsb2JhbF8JAQAAAA5nZXRBc3NldFN0cmluZwAAAAEFAAAAB0Fzc2V0SW4CAAAACF9iYWxhbmNlBQAAAAxuZXdCYWxhbmNlSW4FAAAAA25pbAkABRQAAAACCQAETgAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAdnbG9iYWxfBQAAAAhhc3NldE91dAIAAAAIX2JhbGFuY2UJAABkAAAAAgUAAAANbmV3QmFsYW5jZU91dAUAAAAJZmVlQW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAOY2xlYW5BbW91bnRPdXQFAAAACEFzc2V0T3V0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAA1nbG9iYWxfdm9sdW1lCQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAANZ2xvYmFsX3ZvbHVtZQkBAAAAEmNhbGN1bGF0ZVVzZG5WYWx1ZQAAAAMFAAAAB0Fzc2V0SW4FAAAACEFtb3VudEluBQAAAA5Bc3NldEluQmFsYW5jZQUAAAADbmlsBQAAAA5iYWxhbmNlQ2hhbmdlcwUAAAAOY2xlYW5BbW91bnRPdXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACWZsYXNoTG9hbgAAAAMAAAAKYXNzZXRJZFN0cgAAAAZhbW91bnQAAAAKYWN0aW9uc1N0cgQAAAAHYWN0aW9ucwkABLUAAAACBQAAAAphY3Rpb25zU3RyAgAAAAF8BQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAAAwkBAAAACmlzU2h1dGRvd24AAAAABwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXnJuLU6", "height": 3056542, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4b23bHZVFDughQdRGCwLtrfrbceQa75u4bUP3LwUtnu8 Next: 9T1M8LsxbQx6WByoPMuUSECLsSYixzSVqmAM8nsMGjaP Diff:
OldNewDifferences
155155 func getMinPIssued (payments) = {
156156 func handler (accum,current) = {
157157 let PIssued = calculatePIssued(current.amount, current.assetId)
158- if (if ((accum == 0))
159- then true
160- else (accum > PIssued))
161- then PIssued
162- else accum
158+ if ((PIssued == 0))
159+ then throw("one of the tokens amounts is too low")
160+ else if (if ((accum == 0))
161+ then true
162+ else (accum > PIssued))
163+ then PIssued
164+ else accum
163165 }
164166
165167 let minPIssed = {
638640 }
639641
640642
643+
644+@Callable(i)
645+func flashLoan (assetIdStr,amount,actionsStr) = {
646+ let actions = split(actionsStr, "|")
647+ nil
648+ }
649+
650+
641651 @Verifier(tx)
642652 func verify () = if (isShutdown())
643653 then false
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func tryGetInteger (key) = match getInteger(this, key) {
55 case b: Int =>
66 b
77 case _ =>
88 0
99 }
1010
1111
1212 func tryGetBinary (key) = match getBinary(this, key) {
1313 case b: ByteVector =>
1414 b
1515 case _ =>
1616 base58''
1717 }
1818
1919
2020 func tryGetString (key) = match getString(this, key) {
2121 case b: String =>
2222 b
2323 case _ =>
2424 ""
2525 }
2626
2727
2828 func getAssetString (assetId) = match assetId {
2929 case b: ByteVector =>
3030 toBase58String(b)
3131 case _ =>
3232 "WAVES"
3333 }
3434
3535
3636 func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
3737 then unit
3838 else fromBase58String(assetIdStr)
3939
4040
4141 func addAssetBytesToList (accum,item) = (accum ++ [getAssetBytes(item)])
4242
4343
4444 func addAssetWeightToList (accum,item) = (accum ++ [tryGetInteger((("static_" + getAssetString(item)) + "_weight"))])
4545
4646
4747 func addAssetDecimalsToList (accum,item) = (accum ++ [tryGetInteger((("static_" + getAssetString(item)) + "_decimals"))])
4848
4949
5050 func addAssetScaleToList (accum,item) = (accum ++ [tryGetInteger((("static_" + getAssetString(item)) + "_scale"))])
5151
5252
5353 func addIntToList (accum,item) = (accum ++ [parseIntValue(item)])
5454
5555
5656 let T = tryGetInteger("static_tokensAmount")
5757
5858 let assetIds = {
5959 let $l = split(tryGetString("static_tokenIds"), ",")
6060 let $s = size($l)
6161 let $acc0 = nil
6262 func $f0_1 ($a,$i) = if (($i >= $s))
6363 then $a
6464 else addAssetBytesToList($a, $l[$i])
6565
6666 func $f0_2 ($a,$i) = if (($i >= $s))
6767 then $a
6868 else throw("List size exceeds 10")
6969
7070 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
7171 }
7272
7373 let AssetsWeights = {
7474 let $l = assetIds
7575 let $s = size($l)
7676 let $acc0 = nil
7777 func $f1_1 ($a,$i) = if (($i >= $s))
7878 then $a
7979 else addAssetWeightToList($a, $l[$i])
8080
8181 func $f1_2 ($a,$i) = if (($i >= $s))
8282 then $a
8383 else throw("List size exceeds 10")
8484
8585 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
8686 }
8787
8888 let Decimals = {
8989 let $l = assetIds
9090 let $s = size($l)
9191 let $acc0 = nil
9292 func $f2_1 ($a,$i) = if (($i >= $s))
9393 then $a
9494 else addAssetDecimalsToList($a, $l[$i])
9595
9696 func $f2_2 ($a,$i) = if (($i >= $s))
9797 then $a
9898 else throw("List size exceeds 10")
9999
100100 $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
101101 }
102102
103103 let Scales = {
104104 let $l = assetIds
105105 let $s = size($l)
106106 let $acc0 = nil
107107 func $f3_1 ($a,$i) = if (($i >= $s))
108108 then $a
109109 else addAssetScaleToList($a, $l[$i])
110110
111111 func $f3_2 ($a,$i) = if (($i >= $s))
112112 then $a
113113 else throw("List size exceeds 10")
114114
115115 $f3_2($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
116116 }
117117
118118 let Fee = tryGetInteger("static_fee")
119119
120120 let AssetsWeightsDecimals = 2
121121
122122 let Scale = 10000
123123
124124 let Scale8 = 100000000
125125
126126 let FeeScale = 10000
127127
128128 let PoolTokenDecimals = 8
129129
130130 let PoolTokenScale = pow(10, 0, PoolTokenDecimals, 0, 0, HALFUP)
131131
132132 let earnedAssets = assetIds
133133
134134 func isShutdown () = match getBoolean(Address(base58'3PEpv9hRFWEEBU22WRnLsw1bH4YGtcU728o'), "is_shutdown") {
135135 case x: Boolean =>
136136 x
137137 case _ =>
138138 false
139139 }
140140
141141
142142 func getCurrentTokenBalance (tokenType) = {
143143 let tokenId = getAssetString(assetIds[tokenType])
144144 tryGetInteger((("global_" + tokenId) + "_balance"))
145145 }
146146
147147
148148 func calculatePIssued (amount,tokenId) = {
149149 let Psupply = tryGetInteger("global_poolToken_amount")
150150 let Balance = tryGetInteger((("global_" + getAssetString(tokenId)) + "_balance"))
151151 fraction(amount, Psupply, Balance, DOWN)
152152 }
153153
154154
155155 func getMinPIssued (payments) = {
156156 func handler (accum,current) = {
157157 let PIssued = calculatePIssued(current.amount, current.assetId)
158- if (if ((accum == 0))
159- then true
160- else (accum > PIssued))
161- then PIssued
162- else accum
158+ if ((PIssued == 0))
159+ then throw("one of the tokens amounts is too low")
160+ else if (if ((accum == 0))
161+ then true
162+ else (accum > PIssued))
163+ then PIssued
164+ else accum
163165 }
164166
165167 let minPIssed = {
166168 let $l = payments
167169 let $s = size($l)
168170 let $acc0 = 0
169171 func $f4_1 ($a,$i) = if (($i >= $s))
170172 then $a
171173 else handler($a, $l[$i])
172174
173175 func $f4_2 ($a,$i) = if (($i >= $s))
174176 then $a
175177 else throw("List size exceeds 10")
176178
177179 $f4_2($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
178180 }
179181 minPIssed
180182 }
181183
182184
183185 func calculateUsdnValue (assetId,amount,aBalance) = {
184186 let usdnId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
185187 let usdnWeight = AssetsWeights[value(indexOf(assetIds, usdnId))]
186188 let assetWeight = AssetsWeights[value(indexOf(assetIds, assetId))]
187189 let usdnBalance = tryGetInteger((("global_" + getAssetString(usdnId)) + "_balance"))
188190 fraction(amount, (usdnBalance / usdnWeight), (aBalance / assetWeight))
189191 }
190192
191193
192194 func checkTokensValidity (payments) = {
193195 func handler1 (accum,payment) = (accum ++ [payment.assetId])
194196
195197 let ids = {
196198 let $l = payments
197199 let $s = size($l)
198200 let $acc0 = nil
199201 func $f4_1 ($a,$i) = if (($i >= $s))
200202 then $a
201203 else handler1($a, $l[$i])
202204
203205 func $f4_2 ($a,$i) = if (($i >= $s))
204206 then $a
205207 else throw("List size exceeds 10")
206208
207209 $f4_2($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
208210 }
209211 if ((ids == ids))
210212 then {
211213 func handler2 (accum,assetId) = if ((indexOf(ids, assetId) != unit))
212214 then (accum + 1)
213215 else throw(("asset not attached: " + getAssetString(assetId)))
214216
215217 let checks = {
216218 let $l = assetIds
217219 let $s = size($l)
218220 let $acc0 = 0
219221 func $f5_1 ($a,$i) = if (($i >= $s))
220222 then $a
221223 else handler2($a, $l[$i])
222224
223225 func $f5_2 ($a,$i) = if (($i >= $s))
224226 then $a
225227 else throw("List size exceeds 10")
226228
227229 $f5_2($f5_1($f5_1($f5_1($f5_1($f5_1($f5_1($f5_1($f5_1($f5_1($f5_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
228230 }
229231 if ((checks == checks))
230232 then true
231233 else throw("Strict value is not equal to itself.")
232234 }
233235 else throw("Strict value is not equal to itself.")
234236 }
235237
236238
237239 func handlePoolTokensAdd (PIssued,payments,userAddress,needChange) = {
238240 func getTokenPaymentAmount (tokenId) = {
239241 func handler (accum,payment) = if ((payment.assetId == tokenId))
240242 then payment.amount
241243 else accum
242244
243245 let $l = payments
244246 let $s = size($l)
245247 let $acc0 = 0
246248 func $f4_1 ($a,$i) = if (($i >= $s))
247249 then $a
248250 else handler($a, $l[$i])
249251
250252 func $f4_2 ($a,$i) = if (($i >= $s))
251253 then $a
252254 else throw("List size exceeds 10")
253255
254256 $f4_2($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
255257 }
256258
257259 func handleTokenChange (accum,tokenId) = {
258260 let Bk = tryGetInteger((("global_" + getAssetString(tokenId)) + "_balance"))
259261 let PSupply = tryGetInteger("global_poolToken_amount")
260262 let tokenDecimals = tryGetInteger((("static_" + getAssetString(tokenId)) + "_scale"))
261263 let Dk = fraction((fraction((PSupply + PIssued), tokenDecimals, PSupply, DOWN) - tokenDecimals), Bk, tokenDecimals, DOWN)
262264 let paymentAmount = getTokenPaymentAmount(tokenId)
263265 let toReturn = ((if ((paymentAmount != 0))
264266 then paymentAmount
265267 else 0) - Dk)
266268 let t = if (needChange)
267269 then [ScriptTransfer(userAddress, toReturn, tokenId)]
268270 else nil
269271 ((accum ++ t) ++ [IntegerEntry((("global_" + getAssetString(tokenId)) + "_balance"), (Bk + Dk))])
270272 }
271273
272274 let $l = assetIds
273275 let $s = size($l)
274276 let $acc0 = nil
275277 func $f4_1 ($a,$i) = if (($i >= $s))
276278 then $a
277279 else handleTokenChange($a, $l[$i])
278280
279281 func $f4_2 ($a,$i) = if (($i >= $s))
280282 then $a
281283 else throw("List size exceeds 10")
282284
283285 $f4_2($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
284286 }
285287
286288
287289 func handlePoolTokensRedeem (PRedeemed,userAddress) = {
288290 func handleTokenRedeem (accum,tokenId) = {
289291 let Bk = tryGetInteger((("global_" + getAssetString(tokenId)) + "_balance"))
290292 let PSupply = tryGetInteger("global_poolToken_amount")
291293 let tokenDecimals = tryGetInteger((("static_" + getAssetString(tokenId)) + "_scale"))
292294 let amount = toInt(fraction((toBigInt(Scale8) - fraction(toBigInt((PSupply - PRedeemed)), toBigInt(Scale8), toBigInt(PSupply), CEILING)), toBigInt(Bk), toBigInt(Scale8), DOWN))
293295 (accum ++ [IntegerEntry((("global_" + getAssetString(tokenId)) + "_balance"), (Bk - amount)), ScriptTransfer(userAddress, amount, tokenId)])
294296 }
295297
296298 let $l = assetIds
297299 let $s = size($l)
298300 let $acc0 = nil
299301 func $f4_1 ($a,$i) = if (($i >= $s))
300302 then $a
301303 else handleTokenRedeem($a, $l[$i])
302304
303305 func $f4_2 ($a,$i) = if (($i >= $s))
304306 then $a
305307 else throw("List size exceeds 10")
306308
307309 $f4_2($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
308310 }
309311
310312
311313 func calculateOutAmount (AmountIn,assetIn,assetOut,BalanceIn,BalanceOut) = {
312314 let IndexIn = value(indexOf(assetIds, assetIn))
313315 let IndexOut = value(indexOf(assetIds, assetOut))
314316 if ((IndexIn == IndexOut))
315317 then throw("wrong tokens pair")
316318 else fraction(BalanceOut, ((Scale8 * Scale8) - toInt(pow(fraction(toBigInt(BalanceIn), toBigInt((Scale8 * Scale8)), toBigInt((BalanceIn + AmountIn)), HALFUP), 16, toBigInt(fraction(AssetsWeights[IndexIn], 10000, AssetsWeights[IndexOut])), 4, 16, CEILING))), (Scale8 * Scale8), DOWN)
317319 }
318320
319321
320322 func getTokenBalance (assetId) = match assetId {
321323 case t: ByteVector =>
322324 assetBalance(this, t)
323325 case _ =>
324326 wavesBalance(this).available
325327 }
326328
327329
328330 func calculateCurrentAssetInterest (assetId,assetIdStr,aBalance,tokenEarningsLastCheck) = {
329331 let totalStaked = tryGetInteger("global_indexStaked")
330332 let tokenBalanceLastCheck = tokenEarningsLastCheck
331333 let currentBalanceDelta = (getTokenBalance(assetId) - aBalance)
332334 let currentTokenEarnings = if ((currentBalanceDelta > tokenBalanceLastCheck))
333335 then currentBalanceDelta
334336 else tokenBalanceLastCheck
335337 let newEarnings = (currentTokenEarnings - tokenBalanceLastCheck)
336338 let newInterest = if ((totalStaked == 0))
337339 then 0
338340 else fraction(newEarnings, Scale8, totalStaked)
339341 let lastCheckInterest = tryGetInteger((("global_lastCheck_" + assetIdStr) + "_interest"))
340342 (lastCheckInterest + newInterest)
341343 }
342344
343345
344346 func claimResult (address) = {
345347 let addressStr = toString(address)
346348 let puzzleAmount = tryGetInteger((addressStr + "_indexStaked"))
347349 func handler (accum,assetId) = {
348350 let assetIdStr = getAssetString(assetId)
349351 let aBalance = tryGetInteger((("global_" + getAssetString(assetId)) + "_balance"))
350352 let tokenEarningsLastCheck = tryGetInteger((("global_lastCheck_" + assetIdStr) + "_earnings"))
351353 let currentTokenInterest = calculateCurrentAssetInterest(assetId, assetIdStr, aBalance, tokenEarningsLastCheck)
352354 let currentTokenEarnings = max([tokenEarningsLastCheck, (getTokenBalance(assetId) - aBalance)])
353355 let rewardAmount = fraction(puzzleAmount, (currentTokenInterest - tryGetInteger((((addressStr + "_lastCheck_") + assetIdStr) + "_interest"))), Scale8)
354356 let transfer = if ((rewardAmount == 0))
355357 then nil
356358 else [ScriptTransfer(address, rewardAmount, assetId)]
357359 $Tuple2(((accum._1 ++ transfer) ++ [IntegerEntry((("global_lastCheck_" + assetIdStr) + "_earnings"), (currentTokenEarnings - rewardAmount)), IntegerEntry((("global_lastCheck_" + assetIdStr) + "_interest"), currentTokenInterest), IntegerEntry((((addressStr + "_lastCheck_") + assetIdStr) + "_interest"), currentTokenInterest)]), (accum._2 + calculateUsdnValue(assetId, rewardAmount, aBalance)))
358360 }
359361
360362 let accum = {
361363 let $l = earnedAssets
362364 let $s = size($l)
363365 let $acc0 = $Tuple2(nil, 0)
364366 func $f4_1 ($a,$i) = if (($i >= $s))
365367 then $a
366368 else handler($a, $l[$i])
367369
368370 func $f4_2 ($a,$i) = if (($i >= $s))
369371 then $a
370372 else throw("List size exceeds 10")
371373
372374 $f4_2($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
373375 }
374376 (accum._1 ++ [IntegerEntry((addressStr + "_claimedRewardValue"), (tryGetInteger((addressStr + "_claimedRewardValue")) + accum._2)), IntegerEntry((addressStr + "_lastClaim"), lastBlock.timestamp)])
375377 }
376378
377379
378380 func indexStakeResult (addressStr,amount) = {
379381 let li = claimResult(addressFromStringValue(addressStr))
380382 (li ++ [IntegerEntry((addressStr + "_indexStaked"), (tryGetInteger((addressStr + "_indexStaked")) + amount)), IntegerEntry("global_indexStaked", (tryGetInteger("global_indexStaked") + amount))])
381383 }
382384
383385
384386 func sum (accum,n) = (accum + parseIntValue(n))
385387
386388
387389 @Callable(i)
388390 func preInit (assetIdsStr,assetWeightsStr,baseTokenIdStr,poolDomain) = if ((this != i.caller))
389391 then throw("admin only")
390392 else if ((size(poolDomain) > 13))
391393 then throw("too large pool domain")
392394 else {
393395 let assetIdsStrLi = split(assetIdsStr, ",")
394396 let assetIdsLi = {
395397 let $l = assetIdsStrLi
396398 let $s = size($l)
397399 let $acc0 = nil
398400 func $f4_1 ($a,$i) = if (($i >= $s))
399401 then $a
400402 else addAssetBytesToList($a, $l[$i])
401403
402404 func $f4_2 ($a,$i) = if (($i >= $s))
403405 then $a
404406 else throw("List size exceeds 10")
405407
406408 $f4_2($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
407409 }
408410 let assetWeightsStrLi = split(assetWeightsStr, ",")
409411 let assetWeightsSum = {
410412 let $l = assetWeightsStrLi
411413 let $s = size($l)
412414 let $acc0 = 0
413415 func $f5_1 ($a,$i) = if (($i >= $s))
414416 then $a
415417 else sum($a, $l[$i])
416418
417419 func $f5_2 ($a,$i) = if (($i >= $s))
418420 then $a
419421 else throw("List size exceeds 10")
420422
421423 $f5_2($f5_1($f5_1($f5_1($f5_1($f5_1($f5_1($f5_1($f5_1($f5_1($f5_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
422424 }
423425 func addTokenDataEntries (accum,assetNum) = if ((assetNum >= size(assetIdsLi)))
424426 then accum
425427 else {
426428 let assetDecimals = match assetIdsLi[assetNum] {
427429 case x: ByteVector =>
428430 value(assetInfo(assetIdsLi[assetNum])).decimals
429431 case _ =>
430432 8
431433 }
432434 (accum ++ [IntegerEntry((("static_" + assetIdsStrLi[assetNum]) + "_scale"), pow(10, 0, assetDecimals, 0, 0, DOWN)), IntegerEntry((("static_" + assetIdsStrLi[assetNum]) + "_decimals"), assetDecimals), IntegerEntry((("static_" + assetIdsStrLi[assetNum]) + "_weight"), value(parseInt(assetWeightsStrLi[assetNum])))])
433435 }
434436
435437 if ((assetWeightsSum != 100))
436438 then throw("sum of token weights must be equal to 100")
437439 else ({
438440 let $l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
439441 let $s = size($l)
440442 let $acc0 = nil
441443 func $f6_1 ($a,$i) = if (($i >= $s))
442444 then $a
443445 else addTokenDataEntries($a, $l[$i])
444446
445447 func $f6_2 ($a,$i) = if (($i >= $s))
446448 then $a
447449 else throw("List size exceeds 10")
448450
449451 $f6_2($f6_1($f6_1($f6_1($f6_1($f6_1($f6_1($f6_1($f6_1($f6_1($f6_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
450452 } ++ [StringEntry("static_tokenIds", assetIdsStr), StringEntry("static_tokenWeights", assetWeightsStr), IntegerEntry("static_tokensAmount", size(assetIdsLi)), StringEntry("static_poolDomain", poolDomain), StringEntry("static_baseTokenId", baseTokenIdStr), IntegerEntry("static_fee", 200)])
451453 }
452454
453455
454456
455457 @Callable(i)
456458 func deInit () = if ((i.caller != this))
457459 then throw("admin only")
458460 else [IntegerEntry("global_wasInited", 0)]
459461
460462
461463
462464 @Callable(i)
463465 func init () = {
464466 func prepareList () = {
465467 func handler (accum,n) = (accum ++ [IntegerEntry((("global_" + getAssetString(n.assetId)) + "_balance"), n.amount)])
466468
467469 let $l = i.payments
468470 let $s = size($l)
469471 let $acc0 = nil
470472 func $f4_1 ($a,$i) = if (($i >= $s))
471473 then $a
472474 else handler($a, $l[$i])
473475
474476 func $f4_2 ($a,$i) = if (($i >= $s))
475477 then $a
476478 else throw("List size exceeds 10")
477479
478480 $f4_2($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
479481 }
480482
481483 func calculatePoolTokensAmount (payments) = {
482484 func handler (accum,pmt) = {
483485 let assetId = pmt.assetId
484486 func handler2 (accum,n) = if ((n == assetId))
485487 then value(indexOf(assetIds, n))
486488 else accum
487489
488490 let Token = {
489491 let $l = assetIds
490492 let $s = size($l)
491493 let $acc0 = 1
492494 func $f4_1 ($a,$i) = if (($i >= $s))
493495 then $a
494496 else handler2($a, $l[$i])
495497
496498 func $f4_2 ($a,$i) = if (($i >= $s))
497499 then $a
498500 else throw("List size exceeds 10")
499501
500502 $f4_2($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
501503 }
502504 fraction(accum, pow(pmt.amount, Decimals[Token], AssetsWeights[Token], AssetsWeightsDecimals, 8, FLOOR), Scale8)
503505 }
504506
505507 let $l = payments
506508 let $s = size($l)
507509 let $acc0 = PoolTokenScale
508510 func $f4_1 ($a,$i) = if (($i >= $s))
509511 then $a
510512 else handler($a, $l[$i])
511513
512514 func $f4_2 ($a,$i) = if (($i >= $s))
513515 then $a
514516 else throw("List size exceeds 10")
515517
516518 $f4_2($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
517519 }
518520
519521 if ((tryGetInteger("global_wasInited") > 0))
520522 then throw("pool already inited")
521523 else {
522524 let initialPoolTokens = calculatePoolTokensAmount(i.payments)
523525 if ((initialPoolTokens == 0))
524526 then throw("you need a bigger tokens amount to launch the pool")
525527 else {
526528 let poolTokenIssue = Issue(("PZ " + tryGetString("static_poolDomain")), "Puzzle Swap: pool index token", initialPoolTokens, PoolTokenDecimals, true, unit, 0)
527529 let poolTokenId = calculateAssetId(poolTokenIssue)
528530 (prepareList() ++ [poolTokenIssue, IntegerEntry("global_poolToken_amount", initialPoolTokens), IntegerEntry("global_wasInited", 1), BinaryEntry("global_poolToken_id", poolTokenId), StringEntry("static_poolToken_idStr", getAssetString(poolTokenId)), ScriptTransfer(i.caller, initialPoolTokens, poolTokenId)])
529531 }
530532 }
531533 }
532534
533535
534536
535537 @Callable(i)
536538 func generateIndex (needChange) = if ((size(i.payments) != T))
537539 then throw(("you need to attach all pool tokens. amount of pool tokens: " + toString(T)))
538540 else if (!(checkTokensValidity(i.payments)))
539541 then throw("wrong assets attached")
540542 else {
541543 let PIssued = getMinPIssued(i.payments)
542544 let reissue = Reissue(getBinaryValue("global_poolToken_id"), PIssued, true)
543545 let result = handlePoolTokensAdd(PIssued, i.payments, i.originCaller, needChange)
544546 $Tuple2((result ++ [ScriptTransfer(i.caller, PIssued, tryGetBinary("global_poolToken_id")), reissue, IntegerEntry("global_poolToken_amount", (tryGetInteger("global_poolToken_amount") + PIssued))]), PIssued)
545547 }
546548
547549
548550
549551 @Callable(i)
550552 func stakeIndex () = {
551553 let addressStr = toString(i.originCaller)
552554 let pmt = i.payments[0]
553555 if ((value(pmt.assetId) != tryGetBinary("global_poolToken_id")))
554556 then throw("wrong asset attached")
555557 else indexStakeResult(addressStr, pmt.amount)
556558 }
557559
558560
559561
560562 @Callable(i)
561563 func unstakeIndex (puzzleAmount) = {
562564 let addressStr = toString(i.originCaller)
563565 let puzzleAvailable = tryGetInteger((addressStr + "_indexStaked"))
564566 if ((puzzleAmount > puzzleAvailable))
565567 then throw("you don't have index tokens available")
566568 else (claimResult(i.originCaller) ++ [IntegerEntry((addressStr + "_indexStaked"), (puzzleAvailable - puzzleAmount)), IntegerEntry("global_indexStaked", (tryGetInteger("global_indexStaked") - puzzleAmount)), ScriptTransfer(i.caller, puzzleAmount, getBinaryValue("global_poolToken_id"))])
567569 }
568570
569571
570572
571573 @Callable(i)
572574 func claimIndexRewards () = claimResult(i.caller)
573575
574576
575577
576578 @Callable(i)
577579 func redeemIndex (sendToOrigin) = {
578580 let pmt = i.payments[0]
579581 if ((pmt.assetId != tryGetBinary("global_poolToken_id")))
580582 then throw("please attach pool share token")
581583 else {
582584 let PRedeemed = pmt.amount
583585 let result = handlePoolTokensRedeem(PRedeemed, if (sendToOrigin)
584586 then i.originCaller
585587 else i.caller)
586588 (result ++ [Burn(tryGetBinary("global_poolToken_id"), PRedeemed), IntegerEntry("global_poolToken_amount", (tryGetInteger("global_poolToken_amount") - PRedeemed))])
587589 }
588590 }
589591
590592
591593
592594 @Callable(i)
593595 func swap (assetOut,minimum) = {
594596 let pmt = value(i.payments[0])
595597 let AmountIn = value(i.payments[0].amount)
596598 let AssetIn = pmt.assetId
597599 let AssetOut = getAssetBytes(assetOut)
598600 let AssetInBalance = tryGetInteger((("global_" + getAssetString(AssetIn)) + "_balance"))
599601 let AssetOutBalance = tryGetInteger((("global_" + assetOut) + "_balance"))
600602 let AmountOut = calculateOutAmount(AmountIn, AssetIn, AssetOut, AssetInBalance, AssetOutBalance)
601603 let feeAmount = fraction(AmountOut, Fee, FeeScale)
602604 let cleanAmountOut = (AmountOut - feeAmount)
603605 if ((minimum > cleanAmountOut))
604606 then throw(("amount to recieve is lower than given one: " + toString(cleanAmountOut)))
605607 else if ((0 > (AssetOutBalance - AmountOut)))
606608 then throw("contract is out of reserves")
607609 else {
608610 let newBalanceIn = (AssetInBalance + AmountIn)
609611 let newBalanceOut = (AssetOutBalance - AmountOut)
610612 let usdnAssetId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
611613 if ((usdnAssetId == AssetOut))
612614 then {
613615 let usdnFeeAmount = feeAmount
614616 let protocolUsdnFee = fraction(usdnFeeAmount, 4, 10)
615617 let stakingTopUp = reentrantInvoke(Address(base58'3PFTbywqxtFfukX3HyT881g4iW5K4QL3FAS'), "topUpReward", nil, [AttachedPayment(usdnAssetId, protocolUsdnFee)])
616618 if ((stakingTopUp == stakingTopUp))
617619 then $Tuple2([IntegerEntry((("global_" + assetOut) + "_balance"), newBalanceOut), IntegerEntry((("global_" + getAssetString(AssetIn)) + "_balance"), newBalanceIn), ScriptTransfer(i.caller, cleanAmountOut, AssetOut), IntegerEntry("global_volume", (tryGetInteger("global_volume") + calculateUsdnValue(AssetIn, AmountIn, AssetInBalance)))], cleanAmountOut)
618620 else throw("Strict value is not equal to itself.")
619621 }
620622 else {
621623 let usdnBalance = if ((AssetIn == usdnAssetId))
622624 then newBalanceIn
623625 else tryGetInteger((("global_" + getAssetString(usdnAssetId)) + "_balance"))
624626 let usdnFeeAmount = calculateOutAmount(feeAmount, AssetOut, usdnAssetId, newBalanceOut, usdnBalance)
625627 let protocolUsdnFee = fraction(usdnFeeAmount, 4, 10)
626628 let stakingTopUp = reentrantInvoke(Address(base58'3PFTbywqxtFfukX3HyT881g4iW5K4QL3FAS'), "topUpReward", nil, [AttachedPayment(usdnAssetId, protocolUsdnFee)])
627629 if ((stakingTopUp == stakingTopUp))
628630 then {
629631 let usdnBalanceChangeEntry = IntegerEntry((("global_" + toBase58String(usdnAssetId)) + "_balance"), (usdnBalance - usdnFeeAmount))
630632 let balanceChanges = if ((AssetIn == usdnAssetId))
631633 then [usdnBalanceChangeEntry]
632634 else [usdnBalanceChangeEntry, IntegerEntry((("global_" + getAssetString(AssetIn)) + "_balance"), newBalanceIn)]
633635 $Tuple2(([IntegerEntry((("global_" + assetOut) + "_balance"), (newBalanceOut + feeAmount)), ScriptTransfer(i.caller, cleanAmountOut, AssetOut), IntegerEntry("global_volume", (tryGetInteger("global_volume") + calculateUsdnValue(AssetIn, AmountIn, AssetInBalance)))] ++ balanceChanges), cleanAmountOut)
634636 }
635637 else throw("Strict value is not equal to itself.")
636638 }
637639 }
638640 }
639641
640642
643+
644+@Callable(i)
645+func flashLoan (assetIdStr,amount,actionsStr) = {
646+ let actions = split(actionsStr, "|")
647+ nil
648+ }
649+
650+
641651 @Verifier(tx)
642652 func verify () = if (isShutdown())
643653 then false
644654 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
645655

github/deemru/w8io/6500d08 
73.49 ms