tx · BF5G3c8BEV3y4UdRgNuHPstQpUvz7zxMZeJPz6pz4RtB

3PJUm112svcu4gPU9GKpsBGwYNEVQEPiQ1t:  -0.01000000 Waves

2022.11.28 18:54 [3402633] smart account 3PJUm112svcu4gPU9GKpsBGwYNEVQEPiQ1t > SELF 0.00000000 Waves

{ "type": 13, "id": "BF5G3c8BEV3y4UdRgNuHPstQpUvz7zxMZeJPz6pz4RtB", "fee": 1000000, "feeAssetId": null, "timestamp": 1669650875841, "version": 2, "chainId": 87, "sender": "3PJUm112svcu4gPU9GKpsBGwYNEVQEPiQ1t", "senderPublicKey": "6BTduxfT4CkTidY6P35nYzafiLpun4QLUZCQUU6pcJQM", "proofs": [ "66fdPAU2JYPKS4eJQYwHYm9W9RnTMCNt7V6Na2vXczo7yvaAMbqa4Cbj6AxKfEzkTKed4q7sFd9YsHJH9U1ZRcMP" ], "script": "base64:BgIlCAISAwoBCBIDCgEEEgQKAgQIEgMKAQQSABIDCgEBEgASAwoBCBQABlNjYWxlNgDAhD0ABlNjYWxlOACAwtcvAAdTY2FsZTE2CQBoAgUGU2NhbGU4BQZTY2FsZTgACnZhbGlkYXRvcnMJAMwIAgIjM1BFcUM5NTMzaDZBRG5KdlhiOGN2WGNhU2tlY2Q5WVROdnoFA25pbAAHYXNzZXRJZAIsREcyeEZrUGREd0tVb0JrekdBaFF0THBTR3pmWExpQ1lQRXplS0gyQWQyNHAAC3B1enpsZVBvb2xzCQDMCAICIzNQNERLNVZ6RHdMM3ZmYzVhaFVFaHRvZTVCeVpOeWFjSjNYCQDMCAICIzNQNHVBNWV0blppNEFtQmFiS2lucTJiTWlXVThLY25IWmRIBQNuaWwBCmdldEJhbGFuY2UBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIEVW5pdAQBeAUHJG1hdGNoMAgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkBBXZhbHVlAQUHYXNzZXRJZAEJdHJ5R2V0SW50AgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAmggCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABCXRyeUdldFN0cgIHYWRkcmVzcwNrZXkEByRtYXRjaDAJAJ0IAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYgUHJG1hdGNoMAUBYgIAAQ5nZXRBc3NldFN0cmluZwEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQDYBAEFAWICBVdBVkVTARtnZXRQdXp6bGVQb29sU3VwcGxpZWRBbW91bnQBDnBvb2xBZGRyZXNzU3RyBAtwb29sQWRkcmVzcwkBB0FkZHJlc3MBCQDZBAEFDnBvb2xBZGRyZXNzU3RyBAZ0b2tlbnMEByRtYXRjaDAJAJ0IAgULcG9vbEFkZHJlc3MCDHNldHVwX3Rva2VucwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXIFByRtYXRjaDAJALUJAgUBcgIBLAkAAgEJAKwCAgIqQ2Fubm90IGZpbmQgc2V0dXBfdG9rZW5zIGluIHN0YXRlIG9mIHBvb2wgBQ5wb29sQWRkcmVzc1N0cgQKdG9rZW5JbmRleAQHJG1hdGNoMAkAzwgCBQZ0b2tlbnMFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIDSW50BAFyBQckbWF0Y2gwBQFyCQACAQkArAICCQCsAgIJAKwCAgIMY2Fubm90IGZpbmQgBQdhc3NldElkAgggaW4gcG9vbAUOcG9vbEFkZHJlc3NTdHIEEnRva2VuUmF0ZXNSZXNwb25zZQkA/AcEBQtwb29sQWRkcmVzcwITY2FsY3VsYXRlVG9rZW5SYXRlcwkAzAgCBwUDbmlsBQNuaWwDCQAAAgUSdG9rZW5SYXRlc1Jlc3BvbnNlBRJ0b2tlblJhdGVzUmVzcG9uc2UEEXRva2Vuc1JhdGVzU3RyaW5nBAckbWF0Y2gwBRJ0b2tlblJhdGVzUmVzcG9uc2UDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFyBQckbWF0Y2gwBQFyCQACAQkArAICAjtGdW5jICdjYWxjdWxhdGVUb2tlblJhdGVzJyByZXR1cm5zIG5vdCBzdHJpbmcgdmFsdWUgaW4gcG9vbAUOcG9vbEFkZHJlc3NTdHIEDXN1cHBseVJhdGVTdHIJAJEDAgkAtQkCCQCRAwIJALUJAgURdG9rZW5zUmF0ZXNTdHJpbmcCASwFCnRva2VuSW5kZXgCAXwAAQQKc3VwcGx5UmF0ZQQHJG1hdGNoMAkAtgkBBQ1zdXBwbHlSYXRlU3RyAwkAAQIFByRtYXRjaDACA0ludAQBdAUHJG1hdGNoMAUBdAkAAgECJ0Nhbm5vdCBwYXJzZSBzdXBwbHkgcmF0ZSBmcm9tIGRlZmkgcG9vbAQGc3VwcGx5CQEJdHJ5R2V0SW50AgULcG9vbEFkZHJlc3MJAKwCAgkArAICCQClCAEFBHRoaXMCCl9zdXBwbGllZF8FB2Fzc2V0SWQEBmFtb3VudAkAawMFBnN1cHBseQUKc3VwcGx5UmF0ZQUHU2NhbGUxNgUGYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARZnZXRUb3RhbFN1cHBsaWVkQW1vdW50AAQLY3VycmVudFBvb2wJAQl0cnlHZXRTdHICBQR0aGlzAgtjdXJyZW50UG9vbAMJAAACBQtjdXJyZW50UG9vbAIACQACAQkArAICAhlDYW5ub3QgZmluZCBwb29sIHdpdGggaWQgBQtjdXJyZW50UG9vbAkBG2dldFB1enpsZVBvb2xTdXBwbGllZEFtb3VudAEFC2N1cnJlbnRQb29sARZ3aXRoZHJhd0Zyb21QdXp6bGVQb29sAgZwb29sSWQGYW1vdW50BAtwb29sQWRkcmVzcwkBB0FkZHJlc3MBCQDZBAEFBnBvb2xJZAQKd2l0aGRyYXdUeAMJAGYCBQZhbW91bnQAAAkA/AcEBQtwb29sQWRkcmVzcwIId2l0aGRyYXcJAMwIAgUHYXNzZXRJZAkAzAgCBQZhbW91bnQFA25pbAUDbmlsAgADCQAAAgUKd2l0aGRyYXdUeAUKd2l0aGRyYXdUeAUKd2l0aGRyYXdUeAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEOd2l0aGRyYXdSZXN1bHQABAtjdXJyZW50UG9vbAkBCXRyeUdldFN0cgIFBHRoaXMCC2N1cnJlbnRQb29sAwkAAAIFC2N1cnJlbnRQb29sAgAJAAIBCQCsAgICGUNhbm5vdCBmaW5kIHBvb2wgd2l0aCBpZCAFC2N1cnJlbnRQb29sBAZhbW91bnQJARtnZXRQdXp6bGVQb29sU3VwcGxpZWRBbW91bnQBBQtjdXJyZW50UG9vbAQCdHgJARZ3aXRoZHJhd0Zyb21QdXp6bGVQb29sAgULY3VycmVudFBvb2wFBmFtb3VudAMJAAACBQJ0eAUCdHgFAnR4CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQxzdXBwbHlSZXN1bHQBBnBvb2xJZAMJAAACCQDPCAIFC3B1enpsZVBvb2xzBQZwb29sSWQFBHVuaXQJAAIBCQCsAgICD1Vua25vd24gcG9vbElkIAUGcG9vbElkBAphc3NldEJ5dGVzCQDZBAEFB2Fzc2V0SWQEB2JhbGFuY2UJAQpnZXRCYWxhbmNlAQUKYXNzZXRCeXRlcwQDaW52CQD8BwQJAQdBZGRyZXNzAQkA2QQBBQZwb29sSWQCBnN1cHBseQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQphc3NldEJ5dGVzBQdiYWxhbmNlBQNuaWwDCQAAAgUDaW52BQNpbnYJAMwIAgkBC1N0cmluZ0VudHJ5AgILY3VycmVudFBvb2wFBnBvb2xJZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ5jYWxjdWxhdGVTUmF0ZQAEDmxhc3RDaGVja1NSYXRlCQEJdHJ5R2V0SW50AgUEdGhpcwIVZ2xvYmFsX2xhc3RDaGVja1NSYXRlBAxzdGFrZWRBbW91bnQJAQl0cnlHZXRJbnQCBQR0aGlzAg1nbG9iYWxfc3Rha2VkBA9sYXN0Q2hlY2tIZWlnaHQJAQl0cnlHZXRJbnQCBQR0aGlzAhtnbG9iYWxfbGFzdENoZWNrU1JhdGVIZWlnaHQEBmJsb2NrcwkAZQIFBmhlaWdodAUPbGFzdENoZWNrSGVpZ2h0BA9zdGFraW5nRW1pc3Npb24JAGUCCQEWZ2V0VG90YWxTdXBwbGllZEFtb3VudAAFDHN0YWtlZEFtb3VudAMJAAACBQxzdGFrZWRBbW91bnQAAAUGU2NhbGU4CQBkAgUObGFzdENoZWNrU1JhdGUJAGsDCQBoAgUGYmxvY2tzBQZTY2FsZTgFD3N0YWtpbmdFbWlzc2lvbgUMc3Rha2VkQW1vdW50AQxyZWNhbGNSZXN1bHQBDHN0YWtlZENoYW5nZQQMc3Rha2VkQW1vdW50CQBkAgkBCXRyeUdldEludAIFBHRoaXMCDWdsb2JhbF9zdGFrZWQFDHN0YWtlZENoYW5nZQQFc1JhdGUJAQ5jYWxjdWxhdGVTUmF0ZQAJAMwIAgkBDEludGVnZXJFbnRyeQICDWdsb2JhbF9zdGFrZWQFDHN0YWtlZEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgIVZ2xvYmFsX2xhc3RDaGVja1NSYXRlBQVzUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIbZ2xvYmFsX2xhc3RDaGVja1NSYXRlSGVpZ2h0BQZoZWlnaHQFA25pbAEVY2FsY3VsYXRlU3Rha2VkQW1vdW50AQR1c2VyBAZhbW91bnQJAQl0cnlHZXRJbnQCBQR0aGlzCQCsAgIFBHVzZXICB19zdGFrZWQJAGsDBQZhbW91bnQJAQ5jYWxjdWxhdGVTUmF0ZQAFBlNjYWxlOAELc3Rha2VSZXN1bHQCBHVzZXIGYW1vdW50BAdzQW1vdW50CQBrAwUGYW1vdW50BQZTY2FsZTgJAQ5jYWxjdWxhdGVTUmF0ZQAJAM4IAgkBDHJlY2FsY1Jlc3VsdAEFB3NBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgIHX3N0YWtlZAkAZAIJAQl0cnlHZXRJbnQCBQR0aGlzCQCsAgIFBHVzZXICB19zdGFrZWQFB3NBbW91bnQFA25pbAENdW5zdGFrZVJlc3VsdAIEdXNlcgZhbW91bnQEBXNSYXRlCQEOY2FsY3VsYXRlU1JhdGUABAdzQW1vdW50AwkAAAIFBXNSYXRlAAAFBmFtb3VudAkAawMFBmFtb3VudAUGU2NhbGU4BQVzUmF0ZQQOY3VycmVudFNBbW91bnQJAQl0cnlHZXRJbnQCBQR0aGlzCQCsAgIFBHVzZXICB19zdGFrZWQDCQBmAgUHc0Ftb3VudAUOY3VycmVudFNBbW91bnQJAAIBAid0aGlzIGFtb3VudCBpcyBub3QgYXZhaWxhYmxlIHRvIHVuY2xhaW0JAM4IAgkBDHJlY2FsY1Jlc3VsdAEJAQEtAQUHc0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyAgdfc3Rha2VkCQBlAgUOY3VycmVudFNBbW91bnQFB3NBbW91bnQFA25pbAgBaQEGaW52aXRlAQdhZGRyZXNzBAR1c2VyCQClCAEIBQFpBmNhbGxlcgQMd2hpdGVMaXN0U3RyCQEJdHJ5R2V0U3RyAgUEdGhpcwIJd2hpdGVMaXN0BAl3aGl0ZUxpc3QJALUJAgUMd2hpdGVMaXN0U3RyAgEsAwMJAQIhPQIJAJEDAgUJd2hpdGVMaXN0AAACAAkAAAIJAM8IAgUJd2hpdGVMaXN0BQR1c2VyBQR1bml0BwkAAgECDWFjY2VzcyBkZW5pZWQDCQAAAgkApggBBQdhZGRyZXNzBQR1bml0CQACAQIPSW52YWxpZCBhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQICCXdoaXRlTGlzdAMJAAACCQCRAwIFCXdoaXRlTGlzdAAAAgAFB2FkZHJlc3MJAKwCAgkArAICBQx3aGl0ZUxpc3RTdHICASwFB2FkZHJlc3MFA25pbAFpAQhnZXRTUmF0ZQEFZGVidWcECXBhcmFtZXRlcgkBDmNhbGN1bGF0ZVNSYXRlAAMFBWRlYnVnCQACAQkApAMBBQlwYXJhbWV0ZXIJAJQKAgUDbmlsBQlwYXJhbWV0ZXIBaQEPZ2V0U3Rha2VkQW1vdW50AgVkZWJ1Zwt1c2VyQWRkcmVzcwQJcGFyYW1ldGVyCQEVY2FsY3VsYXRlU3Rha2VkQW1vdW50AQULdXNlckFkZHJlc3MDBQVkZWJ1ZwkAAgEJAKQDAQUJcGFyYW1ldGVyCQCUCgIFA25pbAUJcGFyYW1ldGVyAWkBFGdldFRvdGFsU3Rha2VkQW1vdW50AQVkZWJ1ZwQGYW1vdW50CQEJdHJ5R2V0SW50AgUEdGhpcwINZ2xvYmFsX3N0YWtlZAQJcGFyYW1ldGVyCQBrAwUGYW1vdW50CQEOY2FsY3VsYXRlU1JhdGUABQZTY2FsZTgDBQVkZWJ1ZwkAAgEJAKQDAQUJcGFyYW1ldGVyCQCUCgIFA25pbAUJcGFyYW1ldGVyAWkBBXN0YWtlAAQEdXNlcgkApQgBCAUBaQZjYWxsZXIEBmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQECXdoaXRlTGlzdAkAtQkCCQEJdHJ5R2V0U3RyAgUEdGhpcwIJd2hpdGVMaXN0AgEsAwMJAGcCAAAFBmFtb3VudAYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkA2QQBBQdhc3NldElkCQACAQIWaW52YWxpZCB0b2tlbiBhdHRhY2hlZAMJAAACCQDPCAIFCXdoaXRlTGlzdAUEdXNlcgUEdW5pdAkAAgECDWFjY2VzcyBkZW5pZWQEC2N1cnJlbnRQb29sCQEJdHJ5R2V0U3RyAgUEdGhpcwILY3VycmVudFBvb2wJAM4IAgkBDHN1cHBseVJlc3VsdAEFC2N1cnJlbnRQb29sCQELc3Rha2VSZXN1bHQCBQR1c2VyBQZhbW91bnQBaQEHdW5zdGFrZQEGYW1vdW50BAR1c2VyCQClCAEIBQFpBmNhbGxlcgQLY3VycmVudFBvb2wJAQl0cnlHZXRTdHICBQR0aGlzAgtjdXJyZW50UG9vbAQCdHgJARZ3aXRoZHJhd0Zyb21QdXp6bGVQb29sAgULY3VycmVudFBvb2wFBmFtb3VudAMJAAACBQJ0eAUCdHgJAM4IAgkBDXVuc3Rha2VSZXN1bHQCBQR1c2VyBQZhbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZhbW91bnQJANkEAQUHYXNzZXRJZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCHdpdGhkcmF3AAMJAAACCQDPCAIFCnZhbGlkYXRvcnMJAKUIAQgFAWkGY2FsbGVyBQR1bml0CQACAQINQWNjZXNzIGRlbmllZAQKd2l0aGRyYXdUeAkBDndpdGhkcmF3UmVzdWx0AAMJAAACBQp3aXRoZHJhd1R4BQp3aXRoZHJhd1R4BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEGc3VwcGx5AQZwb29sSWQEC2N1cnJlbnRQb29sCQEJdHJ5R2V0U3RyAgUEdGhpcwILY3VycmVudFBvb2wDCQAAAgkAzwgCBQp2YWxpZGF0b3JzCQClCAEIBQFpBmNhbGxlcgUEdW5pdAkAAgECDUFjY2VzcyBkZW5pZWQDCQAAAgULY3VycmVudFBvb2wFBnBvb2xJZAkAAgEJAKwCAgITQWxyZWFkeSBzdXBwbGllZCB0bwULY3VycmVudFBvb2wJAQxzdXBwbHlSZXN1bHQBBQZwb29sSWQBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5uzI5jg==", "height": 3402633, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DAHgTn2FvumQtR31XBmRQqvFGFwVMZp9sGp6FJJCeJdC Next: 26kABmpNrHZtuBo1uiVXENTGWd6MU9HsVnFcWuyNnDtB Diff:
OldNewDifferences
8484
8585
8686 func getTotalSuppliedAmount () = {
87- func do (acc,pool) = (acc + getPuzzlePoolSuppliedAmount(pool))
88-
89- let amount = {
90- let $l = puzzlePools
91- let $s = size($l)
92- let $acc0 = 0
93- func $f0_1 ($a,$i) = if (($i >= $s))
94- then $a
95- else do($a, $l[$i])
96-
97- func $f0_2 ($a,$i) = if (($i >= $s))
98- then $a
99- else throw("List size exceeds 2")
100-
101- $f0_2($f0_1($f0_1($acc0, 0), 1), 2)
102- }
103- amount
87+ let currentPool = tryGetStr(this, "currentPool")
88+ if ((currentPool == ""))
89+ then throw(("Cannot find pool with id " + currentPool))
90+ else getPuzzlePoolSuppliedAmount(currentPool)
10491 }
10592
10693
116103
117104
118105 func withdrawResult () = {
119- func doWithdraw (acc,pool) = {
120- let amount = getPuzzlePoolSuppliedAmount(pool)
121- let tx = withdrawFromPuzzlePool(pool, amount)
122- if ((tx == tx))
123- then acc
124- else throw("Strict value is not equal to itself.")
125- }
126-
127- let withdraws = {
128- let $l = puzzlePools
129- let $s = size($l)
130- let $acc0 = 0
131- func $f0_1 ($a,$i) = if (($i >= $s))
132- then $a
133- else doWithdraw($a, $l[$i])
134-
135- func $f0_2 ($a,$i) = if (($i >= $s))
136- then $a
137- else throw("List size exceeds 2")
138-
139- $f0_2($f0_1($f0_1($acc0, 0), 1), 2)
140- }
141- if ((withdraws == withdraws))
142- then withdraws
143- else throw("Strict value is not equal to itself.")
106+ let currentPool = tryGetStr(this, "currentPool")
107+ if ((currentPool == ""))
108+ then throw(("Cannot find pool with id " + currentPool))
109+ else {
110+ let amount = getPuzzlePoolSuppliedAmount(currentPool)
111+ let tx = withdrawFromPuzzlePool(currentPool, amount)
112+ if ((tx == tx))
113+ then tx
114+ else throw("Strict value is not equal to itself.")
115+ }
144116 }
145117
146118
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let Scale6 = 1000000
55
66 let Scale8 = 100000000
77
88 let Scale16 = (Scale8 * Scale8)
99
1010 let validators = ["3PEqC9533h6ADnJvXb8cvXcaSkecd9YTNvz"]
1111
1212 let assetId = "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"
1313
1414 let puzzlePools = ["3P4DK5VzDwL3vfc5ahUEhtoe5ByZNyacJ3X", "3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH"]
1515
1616 func getBalance (assetId) = match assetId {
1717 case x: Unit =>
1818 wavesBalance(this).available
1919 case _ =>
2020 assetBalance(this, value(assetId))
2121 }
2222
2323
2424 func tryGetInt (address,key) = match getInteger(address, key) {
2525 case b: Int =>
2626 b
2727 case _ =>
2828 0
2929 }
3030
3131
3232 func tryGetStr (address,key) = match getString(address, key) {
3333 case b: String =>
3434 b
3535 case _ =>
3636 ""
3737 }
3838
3939
4040 func getAssetString (assetId) = match assetId {
4141 case b: ByteVector =>
4242 toBase58String(b)
4343 case _ =>
4444 "WAVES"
4545 }
4646
4747
4848 func getPuzzlePoolSuppliedAmount (poolAddressStr) = {
4949 let poolAddress = Address(fromBase58String(poolAddressStr))
5050 let tokens = match getString(poolAddress, "setup_tokens") {
5151 case r: String =>
5252 split(r, ",")
5353 case _ =>
5454 throw(("Cannot find setup_tokens in state of pool " + poolAddressStr))
5555 }
5656 let tokenIndex = match indexOf(tokens, assetId) {
5757 case r: Int =>
5858 r
5959 case _ =>
6060 throw(((("cannot find " + assetId) + " in pool") + poolAddressStr))
6161 }
6262 let tokenRatesResponse = invoke(poolAddress, "calculateTokenRates", [false], nil)
6363 if ((tokenRatesResponse == tokenRatesResponse))
6464 then {
6565 let tokensRatesString = match tokenRatesResponse {
6666 case r: String =>
6767 r
6868 case _ =>
6969 throw(("Func 'calculateTokenRates' returns not string value in pool" + poolAddressStr))
7070 }
7171 let supplyRateStr = split(split(tokensRatesString, ",")[tokenIndex], "|")[1]
7272 let supplyRate = match parseInt(supplyRateStr) {
7373 case t: Int =>
7474 t
7575 case _ =>
7676 throw("Cannot parse supply rate from defi pool")
7777 }
7878 let supply = tryGetInt(poolAddress, ((toString(this) + "_supplied_") + assetId))
7979 let amount = fraction(supply, supplyRate, Scale16)
8080 amount
8181 }
8282 else throw("Strict value is not equal to itself.")
8383 }
8484
8585
8686 func getTotalSuppliedAmount () = {
87- func do (acc,pool) = (acc + getPuzzlePoolSuppliedAmount(pool))
88-
89- let amount = {
90- let $l = puzzlePools
91- let $s = size($l)
92- let $acc0 = 0
93- func $f0_1 ($a,$i) = if (($i >= $s))
94- then $a
95- else do($a, $l[$i])
96-
97- func $f0_2 ($a,$i) = if (($i >= $s))
98- then $a
99- else throw("List size exceeds 2")
100-
101- $f0_2($f0_1($f0_1($acc0, 0), 1), 2)
102- }
103- amount
87+ let currentPool = tryGetStr(this, "currentPool")
88+ if ((currentPool == ""))
89+ then throw(("Cannot find pool with id " + currentPool))
90+ else getPuzzlePoolSuppliedAmount(currentPool)
10491 }
10592
10693
10794 func withdrawFromPuzzlePool (poolId,amount) = {
10895 let poolAddress = Address(fromBase58String(poolId))
10996 let withdrawTx = if ((amount > 0))
11097 then invoke(poolAddress, "withdraw", [assetId, amount], nil)
11198 else ""
11299 if ((withdrawTx == withdrawTx))
113100 then withdrawTx
114101 else throw("Strict value is not equal to itself.")
115102 }
116103
117104
118105 func withdrawResult () = {
119- func doWithdraw (acc,pool) = {
120- let amount = getPuzzlePoolSuppliedAmount(pool)
121- let tx = withdrawFromPuzzlePool(pool, amount)
122- if ((tx == tx))
123- then acc
124- else throw("Strict value is not equal to itself.")
125- }
126-
127- let withdraws = {
128- let $l = puzzlePools
129- let $s = size($l)
130- let $acc0 = 0
131- func $f0_1 ($a,$i) = if (($i >= $s))
132- then $a
133- else doWithdraw($a, $l[$i])
134-
135- func $f0_2 ($a,$i) = if (($i >= $s))
136- then $a
137- else throw("List size exceeds 2")
138-
139- $f0_2($f0_1($f0_1($acc0, 0), 1), 2)
140- }
141- if ((withdraws == withdraws))
142- then withdraws
143- else throw("Strict value is not equal to itself.")
106+ let currentPool = tryGetStr(this, "currentPool")
107+ if ((currentPool == ""))
108+ then throw(("Cannot find pool with id " + currentPool))
109+ else {
110+ let amount = getPuzzlePoolSuppliedAmount(currentPool)
111+ let tx = withdrawFromPuzzlePool(currentPool, amount)
112+ if ((tx == tx))
113+ then tx
114+ else throw("Strict value is not equal to itself.")
115+ }
144116 }
145117
146118
147119 func supplyResult (poolId) = if ((indexOf(puzzlePools, poolId) == unit))
148120 then throw(("Unknown poolId " + poolId))
149121 else {
150122 let assetBytes = fromBase58String(assetId)
151123 let balance = getBalance(assetBytes)
152124 let inv = invoke(Address(fromBase58String(poolId)), "supply", nil, [AttachedPayment(assetBytes, balance)])
153125 if ((inv == inv))
154126 then [StringEntry("currentPool", poolId)]
155127 else throw("Strict value is not equal to itself.")
156128 }
157129
158130
159131 func calculateSRate () = {
160132 let lastCheckSRate = tryGetInt(this, "global_lastCheckSRate")
161133 let stakedAmount = tryGetInt(this, "global_staked")
162134 let lastCheckHeight = tryGetInt(this, "global_lastCheckSRateHeight")
163135 let blocks = (height - lastCheckHeight)
164136 let stakingEmission = (getTotalSuppliedAmount() - stakedAmount)
165137 if ((stakedAmount == 0))
166138 then Scale8
167139 else (lastCheckSRate + fraction((blocks * Scale8), stakingEmission, stakedAmount))
168140 }
169141
170142
171143 func recalcResult (stakedChange) = {
172144 let stakedAmount = (tryGetInt(this, "global_staked") + stakedChange)
173145 let sRate = calculateSRate()
174146 [IntegerEntry("global_staked", stakedAmount), IntegerEntry("global_lastCheckSRate", sRate), IntegerEntry("global_lastCheckSRateHeight", height)]
175147 }
176148
177149
178150 func calculateStakedAmount (user) = {
179151 let amount = tryGetInt(this, (user + "_staked"))
180152 fraction(amount, calculateSRate(), Scale8)
181153 }
182154
183155
184156 func stakeResult (user,amount) = {
185157 let sAmount = fraction(amount, Scale8, calculateSRate())
186158 (recalcResult(sAmount) ++ [IntegerEntry((user + "_staked"), (tryGetInt(this, (user + "_staked")) + sAmount))])
187159 }
188160
189161
190162 func unstakeResult (user,amount) = {
191163 let sRate = calculateSRate()
192164 let sAmount = if ((sRate == 0))
193165 then amount
194166 else fraction(amount, Scale8, sRate)
195167 let currentSAmount = tryGetInt(this, (user + "_staked"))
196168 if ((sAmount > currentSAmount))
197169 then throw("this amount is not available to unclaim")
198170 else (recalcResult(-(sAmount)) ++ [IntegerEntry((user + "_staked"), (currentSAmount - sAmount))])
199171 }
200172
201173
202174 @Callable(i)
203175 func invite (address) = {
204176 let user = toString(i.caller)
205177 let whiteListStr = tryGetStr(this, "whiteList")
206178 let whiteList = split(whiteListStr, ",")
207179 if (if ((whiteList[0] != ""))
208180 then (indexOf(whiteList, user) == unit)
209181 else false)
210182 then throw("access denied")
211183 else if ((addressFromString(address) == unit))
212184 then throw("Invalid address")
213185 else [StringEntry("whiteList", if ((whiteList[0] == ""))
214186 then address
215187 else ((whiteListStr + ",") + address))]
216188 }
217189
218190
219191
220192 @Callable(i)
221193 func getSRate (debug) = {
222194 let parameter = calculateSRate()
223195 if (debug)
224196 then throw(toString(parameter))
225197 else $Tuple2(nil, parameter)
226198 }
227199
228200
229201
230202 @Callable(i)
231203 func getStakedAmount (debug,userAddress) = {
232204 let parameter = calculateStakedAmount(userAddress)
233205 if (debug)
234206 then throw(toString(parameter))
235207 else $Tuple2(nil, parameter)
236208 }
237209
238210
239211
240212 @Callable(i)
241213 func getTotalStakedAmount (debug) = {
242214 let amount = tryGetInt(this, "global_staked")
243215 let parameter = fraction(amount, calculateSRate(), Scale8)
244216 if (debug)
245217 then throw(toString(parameter))
246218 else $Tuple2(nil, parameter)
247219 }
248220
249221
250222
251223 @Callable(i)
252224 func stake () = {
253225 let user = toString(i.caller)
254226 let amount = i.payments[0].amount
255227 let whiteList = split(tryGetStr(this, "whiteList"), ",")
256228 if (if ((0 >= amount))
257229 then true
258230 else (i.payments[0].assetId != fromBase58String(assetId)))
259231 then throw("invalid token attached")
260232 else if ((indexOf(whiteList, user) == unit))
261233 then throw("access denied")
262234 else {
263235 let currentPool = tryGetStr(this, "currentPool")
264236 (supplyResult(currentPool) ++ stakeResult(user, amount))
265237 }
266238 }
267239
268240
269241
270242 @Callable(i)
271243 func unstake (amount) = {
272244 let user = toString(i.caller)
273245 let currentPool = tryGetStr(this, "currentPool")
274246 let tx = withdrawFromPuzzlePool(currentPool, amount)
275247 if ((tx == tx))
276248 then (unstakeResult(user, amount) ++ [ScriptTransfer(i.caller, amount, fromBase58String(assetId))])
277249 else throw("Strict value is not equal to itself.")
278250 }
279251
280252
281253
282254 @Callable(i)
283255 func withdraw () = if ((indexOf(validators, toString(i.caller)) == unit))
284256 then throw("Access denied")
285257 else {
286258 let withdrawTx = withdrawResult()
287259 if ((withdrawTx == withdrawTx))
288260 then nil
289261 else throw("Strict value is not equal to itself.")
290262 }
291263
292264
293265
294266 @Callable(i)
295267 func supply (poolId) = {
296268 let currentPool = tryGetStr(this, "currentPool")
297269 if ((indexOf(validators, toString(i.caller)) == unit))
298270 then throw("Access denied")
299271 else if ((currentPool == poolId))
300272 then throw(("Already supplied to" + currentPool))
301273 else supplyResult(poolId)
302274 }
303275
304276
305277 @Verifier(tx)
306278 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
307279

github/deemru/w8io/3ef1775 
105.68 ms