tx · 87JgVCYvuAFx3rLYScWLgiqW9Ls6PzV4ntEzgMMvBMnE

3MwLW8P5yh5T2xML9QqFuVxkVkm9RXqnzXh:  -0.00900000 Waves

2022.12.02 19:30 [2342968] smart account 3MwLW8P5yh5T2xML9QqFuVxkVkm9RXqnzXh > SELF 0.00000000 Waves

{ "type": 13, "id": "87JgVCYvuAFx3rLYScWLgiqW9Ls6PzV4ntEzgMMvBMnE", "fee": 900000, "feeAssetId": null, "timestamp": 1669998611566, "version": 2, "chainId": 84, "sender": "3MwLW8P5yh5T2xML9QqFuVxkVkm9RXqnzXh", "senderPublicKey": "HscGVyJG5M3NMHWKfQbucCBsFLGPi8VmTxTAmcBbaWTa", "proofs": [ "xnVPEGpdZPHwgsCuumgdkdDwVLWAvibYy42YfPv6hFyBMSv4gH6ShgBkbLxtDwFx97KdKSGVMVjYtQwU5yKPm4T" ], "script": "base64:BgITCAISAwoBCBIDCgEIEgASAwoBARYABlNjYWxlNgDAhD0ABlNjYWxlOACAwtcvAAdTY2FsZTE2CQBoAgUGU2NhbGU4BQZTY2FsZTgACnZhbGlkYXRvcnMJAMwIAgIjM05BbXFHanhSQlJQb1JIWlVVcXZoaU5TNmF4bkdwaW5MSEMFA25pbAAPbW9uZXlCb3hBZGRyZXNzCQEHQWRkcmVzcwEBGgFUZKnP467xWXotJQOt2k8QiNBvrQpHH8SpAAdhc3NldElkAixISG1hRlFwVW9id0t4emp6NEVDYUJQdG9GNjlrdWpLd1UyY296YVV6VHNndgALcHV6emxlUG9vbHMJAMwIAgIjM042U3RKZGdtVGZBUnNSTm45WHQ1ckRZRXMzcHI0S0d5MXYFA25pbAEKZ2V0QmFsYW5jZQEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgRVbml0BAF4BQckbWF0Y2gwCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkA8AcCBQR0aGlzCQEFdmFsdWUBBQdhc3NldElkAQl0cnlHZXRJbnQCB2FkZHJlc3MDa2V5BAckbWF0Y2gwCQCaCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAEJdHJ5R2V0U3RyAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFiBQckbWF0Y2gwBQFiAgABDmdldEFzc2V0U3RyaW5nAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJANgEAQUBYgIFV0FWRVMBG2dldFB1enpsZVBvb2xTdXBwbGllZEFtb3VudAEGcG9vbElkBAdiYWxhbmNlCQDwBwIJAQdBZGRyZXNzAQkA2QQBBQZwb29sSWQJANkEAQUHYXNzZXRJZAUHYmFsYW5jZQEWZ2V0VG90YWxTdXBwbGllZEFtb3VudAAEC2N1cnJlbnRQb29sCQEJdHJ5R2V0U3RyAgUEdGhpcwILY3VycmVudFBvb2wDCQAAAgULY3VycmVudFBvb2wCAAkAAgEJAKwCAgIZQ2Fubm90IGZpbmQgcG9vbCB3aXRoIGlkIAULY3VycmVudFBvb2wJARtnZXRQdXp6bGVQb29sU3VwcGxpZWRBbW91bnQBBQtjdXJyZW50UG9vbAEWd2l0aGRyYXdGcm9tUHV6emxlUG9vbAIGcG9vbElkBmFtb3VudAQLcG9vbEFkZHJlc3MJAQdBZGRyZXNzAQkA2QQBBQZwb29sSWQECndpdGhkcmF3VHgDCQBmAgUGYW1vdW50AAAJAPwHBAULcG9vbEFkZHJlc3MCCHdpdGhkcmF3CQDMCAIFB2Fzc2V0SWQJAMwIAgUGYW1vdW50BQNuaWwFA25pbAIAAwkAAAIFCndpdGhkcmF3VHgFCndpdGhkcmF3VHgFCndpdGhkcmF3VHgJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDmNhbGN1bGF0ZVNSYXRlAAQObGFzdENoZWNrU1JhdGUJAQl0cnlHZXRJbnQCBQR0aGlzAhVnbG9iYWxfbGFzdENoZWNrU1JhdGUEDHN0YWtlZEFtb3VudAkBCXRyeUdldEludAIFBHRoaXMCDWdsb2JhbF9zdGFrZWQEEWxhc3RDaGVja1NBbW91bnV0CQBrAwUMc3Rha2VkQW1vdW50BQ5sYXN0Q2hlY2tTUmF0ZQUGU2NhbGU4AwkAAAIFEWxhc3RDaGVja1NBbW91bnV0AAAFBlNjYWxlOAQFc1JhdGUJAGsDBQ5sYXN0Q2hlY2tTUmF0ZQkBFmdldFRvdGFsU3VwcGxpZWRBbW91bnQABRFsYXN0Q2hlY2tTQW1vdW51dAMJAGYCBQZTY2FsZTgFBXNSYXRlBQZTY2FsZTgFBXNSYXRlAQdjYWxjRmVlAAQMc3Rha2VkQW1vdW50CQEJdHJ5R2V0SW50AgUEdGhpcwINZ2xvYmFsX3N0YWtlZAQJbGFzdFNSYXRlCQEJdHJ5R2V0SW50AgUEdGhpcwIVZ2xvYmFsX2xhc3RDaGVja1NSYXRlBAdzQW1vdW50CQBrAwUMc3Rha2VkQW1vdW50BQlsYXN0U1JhdGUFBlNjYWxlOAQNdG90YWxTdXBwbGllZAkBFmdldFRvdGFsU3VwcGxpZWRBbW91bnQABARkaWZmCQBlAgUNdG90YWxTdXBwbGllZAUHc0Ftb3VudAQDZmVlCQBrAwUEZGlmZgDAlrECBQZTY2FsZTgDCQBmAgUDZmVlAAAFA2ZlZQAAAQ9jaGFyZ2VGZWVSZXN1bHQABAtjdXJyZW50UG9vbAkBCXRyeUdldFN0cgIFBHRoaXMCC2N1cnJlbnRQb29sBANmZWUJAQdjYWxjRmVlAAMJAAACBQtjdXJyZW50UG9vbAIACQACAQkArAICAhlDYW5ub3QgZmluZCBwb29sIHdpdGggaWQgBQtjdXJyZW50UG9vbAQKd2l0aGRyYXdUeAkBFndpdGhkcmF3RnJvbVB1enpsZVBvb2wCBQtjdXJyZW50UG9vbAUDZmVlAwkAAAIFCndpdGhkcmF3VHgFCndpdGhkcmF3VHgECGNoYXJnZVR4CQD8BwQFD21vbmV5Qm94QWRkcmVzcwIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQDZBAEFB2Fzc2V0SWQFA2ZlZQUDbmlsAwkAAAIFCGNoYXJnZVR4BQhjaGFyZ2VUeAUIY2hhcmdlVHgJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDHJlY2FsY1Jlc3VsdAEMc3Rha2VkQ2hhbmdlBAxzdGFrZWRBbW91bnQJAQl0cnlHZXRJbnQCBQR0aGlzAg1nbG9iYWxfc3Rha2VkCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg1nbG9iYWxfc3Rha2VkCQBkAgUMc3Rha2VkQW1vdW50BQxzdGFrZWRDaGFuZ2UJAMwIAgkBDEludGVnZXJFbnRyeQICFWdsb2JhbF9sYXN0Q2hlY2tTUmF0ZQkBDmNhbGN1bGF0ZVNSYXRlAAUDbmlsAQxzdXBwbHlSZXN1bHQBBnBvb2xJZAMJAAACCQDPCAIFC3B1enpsZVBvb2xzBQZwb29sSWQFBHVuaXQJAAIBCQCsAgICD1Vua25vd24gcG9vbElkIAUGcG9vbElkBAphc3NldEJ5dGVzCQDZBAEFB2Fzc2V0SWQEB2JhbGFuY2UJAQpnZXRCYWxhbmNlAQUKYXNzZXRCeXRlcwQDaW52CQD8BwQJAQdBZGRyZXNzAQkA2QQBBQZwb29sSWQCBnN1cHBseQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQphc3NldEJ5dGVzBQdiYWxhbmNlBQNuaWwDCQAAAgUDaW52BQNpbnYJAMwIAgkBC1N0cmluZ0VudHJ5AgILY3VycmVudFBvb2wFBnBvb2xJZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ53aXRoZHJhd1Jlc3VsdAAEC2N1cnJlbnRQb29sCQEJdHJ5R2V0U3RyAgUEdGhpcwILY3VycmVudFBvb2wDCQAAAgULY3VycmVudFBvb2wCAAkAAgEJAKwCAgIZQ2Fubm90IGZpbmQgcG9vbCB3aXRoIGlkIAULY3VycmVudFBvb2wEBmFtb3VudAkBG2dldFB1enpsZVBvb2xTdXBwbGllZEFtb3VudAEFC2N1cnJlbnRQb29sBAJ0eAkBFndpdGhkcmF3RnJvbVB1enpsZVBvb2wCBQtjdXJyZW50UG9vbAUGYW1vdW50AwkAAAIFAnR4BQJ0eAUCdHgJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BC3N0YWtlUmVzdWx0AgR1c2VyBmFtb3VudAQHc0Ftb3VudAkAawMFBmFtb3VudAUGU2NhbGU4CQEOY2FsY3VsYXRlU1JhdGUACQDOCAIJAQxyZWNhbGNSZXN1bHQBBQdzQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXICB19zdGFrZWQJAGQCCQEJdHJ5R2V0SW50AgUEdGhpcwkArAICBQR1c2VyAgdfc3Rha2VkBQdzQW1vdW50BQNuaWwBDXVuc3Rha2VSZXN1bHQCBHVzZXIGYW1vdW50BAdzQW1vdW50CQBrAwUGYW1vdW50BQZTY2FsZTgJAQ5jYWxjdWxhdGVTUmF0ZQAECnVzZXJTdGFrZWQJAQl0cnlHZXRJbnQCBQR0aGlzCQCsAgIFBHVzZXICB19zdGFrZWQEDXVuc3Rha2VBbW91bnQDCQBmAgUHc0Ftb3VudAUKdXNlclN0YWtlZAUKdXNlclN0YWtlZAUHc0Ftb3VudAkAzggCCQEMcmVjYWxjUmVzdWx0AQkBAS0BBQ11bnN0YWtlQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXICB19zdGFrZWQJAGUCBQp1c2VyU3Rha2VkBQ11bnN0YWtlQW1vdW50BQNuaWwEAWkBBGluaXQBBnBvb2xJZAQLY3VycmVudFBvb2wJAQl0cnlHZXRTdHICBQR0aGlzAgtjdXJyZW50UG9vbAMJAAACCQDPCAIFCnZhbGlkYXRvcnMJAKUIAQgFAWkGY2FsbGVyBQR1bml0CQACAQINQWNjZXNzIGRlbmllZAMJAAACBQtjdXJyZW50UG9vbAIACQDMCAIJAQtTdHJpbmdFbnRyeQICC2N1cnJlbnRQb29sBQZwb29sSWQFA25pbAUDbmlsAWkBCXJlYmFsYW5jZQEGcG9vbElkBAtjdXJyZW50UG9vbAkBCXRyeUdldFN0cgIFBHRoaXMCC2N1cnJlbnRQb29sAwkAAAIJAM8IAgUKdmFsaWRhdG9ycwkApQgBCAUBaQZjYWxsZXIFBHVuaXQJAAIBAg1BY2Nlc3MgZGVuaWVkAwkAAAIFC2N1cnJlbnRQb29sBQZwb29sSWQJAAIBCQCsAgICE0FscmVhZHkgc3VwcGxpZWQgdG8FC2N1cnJlbnRQb29sBAp3aXRoZHJhd1R4CQEOd2l0aGRyYXdSZXN1bHQAAwkAAAIFCndpdGhkcmF3VHgFCndpdGhkcmF3VHgJAM4IAgkBDHN1cHBseVJlc3VsdAEFBnBvb2xJZAkBDHJlY2FsY1Jlc3VsdAEAAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVzdGFrZQAEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAtjdXJyZW50UG9vbAkBCXRyeUdldFN0cgIFBHRoaXMCC2N1cnJlbnRQb29sBAtjaGFyZ2VGZWVUeAkBD2NoYXJnZUZlZVJlc3VsdAADCQAAAgULY2hhcmdlRmVlVHgFC2NoYXJnZUZlZVR4AwMJAGcCAAAFBmFtb3VudAYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkA2QQBBQdhc3NldElkCQACAQIWaW52YWxpZCB0b2tlbiBhdHRhY2hlZAMJAAACBQtjdXJyZW50UG9vbAIACQACAQIUUG9vbCBub3QgaW5pdGlhbGl6ZWQJAM4IAgkBC3N0YWtlUmVzdWx0AgUEdXNlcgUGYW1vdW50CQEMc3VwcGx5UmVzdWx0AQULY3VycmVudFBvb2wJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHdW5zdGFrZQEGYW1vdW50BAR1c2VyCQClCAEIBQFpBmNhbGxlcgQLY3VycmVudFBvb2wJAQl0cnlHZXRTdHICBQR0aGlzAgtjdXJyZW50UG9vbAQCdHgJARZ3aXRoZHJhd0Zyb21QdXp6bGVQb29sAgULY3VycmVudFBvb2wFBmFtb3VudAMJAAACBQJ0eAUCdHgEDHN0YXRlQ2hhbmdlcwkAzggCCQENdW5zdGFrZVJlc3VsdAIFBHVzZXIFBmFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmFtb3VudAkA2QQBBQdhc3NldElkBQNuaWwEC2NoYXJnZUZlZVR4CQEPY2hhcmdlRmVlUmVzdWx0AAMJAAACBQtjaGFyZ2VGZWVUeAULY2hhcmdlRmVlVHgFDHN0YXRlQ2hhbmdlcwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXnU7eCh", "height": 2342968, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2k6WvzLhEbW6LhgTTxsyFLMx6ME7tgJibc9t3o9qLTSc Next: 8dMknpFnq3hhBJm6PSRVRyHKB74f6XueAkzEsKRUD67x Diff:
OldNewDifferences
7676 let lastCheckSRate = tryGetInt(this, "global_lastCheckSRate")
7777 let stakedAmount = tryGetInt(this, "global_staked")
7878 let lastCheckSAmounut = fraction(stakedAmount, lastCheckSRate, Scale8)
79- let totalSuppliedAmount = getTotalSuppliedAmount()
8079 if ((lastCheckSAmounut == 0))
8180 then Scale8
8281 else {
83- let totalSuplied = totalSuppliedAmount
84- let sRate = fraction(lastCheckSRate, totalSuplied, lastCheckSAmounut)
82+ let sRate = fraction(lastCheckSRate, getTotalSuppliedAmount(), lastCheckSAmounut)
8583 if ((Scale8 > sRate))
8684 then Scale8
8785 else sRate
9290 func calcFee () = {
9391 let stakedAmount = tryGetInt(this, "global_staked")
9492 let lastSRate = tryGetInt(this, "global_lastCheckSRate")
95- let diff = (getTotalSuppliedAmount() - fraction(stakedAmount, lastSRate, Scale8))
93+ let sAmount = fraction(stakedAmount, lastSRate, Scale8)
94+ let totalSupplied = getTotalSuppliedAmount()
95+ let diff = (totalSupplied - sAmount)
9696 let fee = fraction(diff, 5000000, Scale8)
9797 if ((fee > 0))
9898 then fee
219219 func unstake (amount) = {
220220 let user = toString(i.caller)
221221 let currentPool = tryGetStr(this, "currentPool")
222- let chargeFeeTx = chargeFeeResult()
223- if ((chargeFeeTx == chargeFeeTx))
222+ let tx = withdrawFromPuzzlePool(currentPool, amount)
223+ if ((tx == tx))
224224 then {
225- let tx = withdrawFromPuzzlePool(currentPool, amount)
226- if ((tx == tx))
227- then (unstakeResult(user, amount) ++ [ScriptTransfer(i.caller, amount, fromBase58String(assetId))])
225+ let stateChanges = (unstakeResult(user, amount) ++ [ScriptTransfer(i.caller, amount, fromBase58String(assetId))])
226+ let chargeFeeTx = chargeFeeResult()
227+ if ((chargeFeeTx == chargeFeeTx))
228+ then stateChanges
228229 else throw("Strict value is not equal to itself.")
229230 }
230231 else throw("Strict value is not equal to itself.")
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 = ["3NAmqGjxRBRPoRHZUUqvhiNS6axnGpinLHC"]
1111
1212 let moneyBoxAddress = Address(base58'3My6LmrRSRvJ73T14oT5k53SGPavGFoacWc')
1313
1414 let assetId = "HHmaFQpUobwKxzjz4ECaBPtoF69kujKwU2cozaUzTsgv"
1515
1616 let puzzlePools = ["3N6StJdgmTfARsRNn9Xt5rDYEs3pr4KGy1v"]
1717
1818 func getBalance (assetId) = match assetId {
1919 case x: Unit =>
2020 wavesBalance(this).available
2121 case _ =>
2222 assetBalance(this, value(assetId))
2323 }
2424
2525
2626 func tryGetInt (address,key) = match getInteger(address, key) {
2727 case b: Int =>
2828 b
2929 case _ =>
3030 0
3131 }
3232
3333
3434 func tryGetStr (address,key) = match getString(address, key) {
3535 case b: String =>
3636 b
3737 case _ =>
3838 ""
3939 }
4040
4141
4242 func getAssetString (assetId) = match assetId {
4343 case b: ByteVector =>
4444 toBase58String(b)
4545 case _ =>
4646 "WAVES"
4747 }
4848
4949
5050 func getPuzzlePoolSuppliedAmount (poolId) = {
5151 let balance = assetBalance(Address(fromBase58String(poolId)), fromBase58String(assetId))
5252 balance
5353 }
5454
5555
5656 func getTotalSuppliedAmount () = {
5757 let currentPool = tryGetStr(this, "currentPool")
5858 if ((currentPool == ""))
5959 then throw(("Cannot find pool with id " + currentPool))
6060 else getPuzzlePoolSuppliedAmount(currentPool)
6161 }
6262
6363
6464 func withdrawFromPuzzlePool (poolId,amount) = {
6565 let poolAddress = Address(fromBase58String(poolId))
6666 let withdrawTx = if ((amount > 0))
6767 then invoke(poolAddress, "withdraw", [assetId, amount], nil)
6868 else ""
6969 if ((withdrawTx == withdrawTx))
7070 then withdrawTx
7171 else throw("Strict value is not equal to itself.")
7272 }
7373
7474
7575 func calculateSRate () = {
7676 let lastCheckSRate = tryGetInt(this, "global_lastCheckSRate")
7777 let stakedAmount = tryGetInt(this, "global_staked")
7878 let lastCheckSAmounut = fraction(stakedAmount, lastCheckSRate, Scale8)
79- let totalSuppliedAmount = getTotalSuppliedAmount()
8079 if ((lastCheckSAmounut == 0))
8180 then Scale8
8281 else {
83- let totalSuplied = totalSuppliedAmount
84- let sRate = fraction(lastCheckSRate, totalSuplied, lastCheckSAmounut)
82+ let sRate = fraction(lastCheckSRate, getTotalSuppliedAmount(), lastCheckSAmounut)
8583 if ((Scale8 > sRate))
8684 then Scale8
8785 else sRate
8886 }
8987 }
9088
9189
9290 func calcFee () = {
9391 let stakedAmount = tryGetInt(this, "global_staked")
9492 let lastSRate = tryGetInt(this, "global_lastCheckSRate")
95- let diff = (getTotalSuppliedAmount() - fraction(stakedAmount, lastSRate, Scale8))
93+ let sAmount = fraction(stakedAmount, lastSRate, Scale8)
94+ let totalSupplied = getTotalSuppliedAmount()
95+ let diff = (totalSupplied - sAmount)
9696 let fee = fraction(diff, 5000000, Scale8)
9797 if ((fee > 0))
9898 then fee
9999 else 0
100100 }
101101
102102
103103 func chargeFeeResult () = {
104104 let currentPool = tryGetStr(this, "currentPool")
105105 let fee = calcFee()
106106 if ((currentPool == ""))
107107 then throw(("Cannot find pool with id " + currentPool))
108108 else {
109109 let withdrawTx = withdrawFromPuzzlePool(currentPool, fee)
110110 if ((withdrawTx == withdrawTx))
111111 then {
112112 let chargeTx = invoke(moneyBoxAddress, "deposit", nil, [AttachedPayment(fromBase58String(assetId), fee)])
113113 if ((chargeTx == chargeTx))
114114 then chargeTx
115115 else throw("Strict value is not equal to itself.")
116116 }
117117 else throw("Strict value is not equal to itself.")
118118 }
119119 }
120120
121121
122122 func recalcResult (stakedChange) = {
123123 let stakedAmount = tryGetInt(this, "global_staked")
124124 [IntegerEntry("global_staked", (stakedAmount + stakedChange)), IntegerEntry("global_lastCheckSRate", calculateSRate())]
125125 }
126126
127127
128128 func supplyResult (poolId) = if ((indexOf(puzzlePools, poolId) == unit))
129129 then throw(("Unknown poolId " + poolId))
130130 else {
131131 let assetBytes = fromBase58String(assetId)
132132 let balance = getBalance(assetBytes)
133133 let inv = invoke(Address(fromBase58String(poolId)), "supply", nil, [AttachedPayment(assetBytes, balance)])
134134 if ((inv == inv))
135135 then [StringEntry("currentPool", poolId)]
136136 else throw("Strict value is not equal to itself.")
137137 }
138138
139139
140140 func withdrawResult () = {
141141 let currentPool = tryGetStr(this, "currentPool")
142142 if ((currentPool == ""))
143143 then throw(("Cannot find pool with id " + currentPool))
144144 else {
145145 let amount = getPuzzlePoolSuppliedAmount(currentPool)
146146 let tx = withdrawFromPuzzlePool(currentPool, amount)
147147 if ((tx == tx))
148148 then tx
149149 else throw("Strict value is not equal to itself.")
150150 }
151151 }
152152
153153
154154 func stakeResult (user,amount) = {
155155 let sAmount = fraction(amount, Scale8, calculateSRate())
156156 (recalcResult(sAmount) ++ [IntegerEntry((user + "_staked"), (tryGetInt(this, (user + "_staked")) + sAmount))])
157157 }
158158
159159
160160 func unstakeResult (user,amount) = {
161161 let sAmount = fraction(amount, Scale8, calculateSRate())
162162 let userStaked = tryGetInt(this, (user + "_staked"))
163163 let unstakeAmount = if ((sAmount > userStaked))
164164 then userStaked
165165 else sAmount
166166 (recalcResult(-(unstakeAmount)) ++ [IntegerEntry((user + "_staked"), (userStaked - unstakeAmount))])
167167 }
168168
169169
170170 @Callable(i)
171171 func init (poolId) = {
172172 let currentPool = tryGetStr(this, "currentPool")
173173 if ((indexOf(validators, toString(i.caller)) == unit))
174174 then throw("Access denied")
175175 else if ((currentPool == ""))
176176 then [StringEntry("currentPool", poolId)]
177177 else nil
178178 }
179179
180180
181181
182182 @Callable(i)
183183 func rebalance (poolId) = {
184184 let currentPool = tryGetStr(this, "currentPool")
185185 if ((indexOf(validators, toString(i.caller)) == unit))
186186 then throw("Access denied")
187187 else if ((currentPool == poolId))
188188 then throw(("Already supplied to" + currentPool))
189189 else {
190190 let withdrawTx = withdrawResult()
191191 if ((withdrawTx == withdrawTx))
192192 then (supplyResult(poolId) ++ recalcResult(0))
193193 else throw("Strict value is not equal to itself.")
194194 }
195195 }
196196
197197
198198
199199 @Callable(i)
200200 func stake () = {
201201 let user = toString(i.caller)
202202 let amount = i.payments[0].amount
203203 let currentPool = tryGetStr(this, "currentPool")
204204 let chargeFeeTx = chargeFeeResult()
205205 if ((chargeFeeTx == chargeFeeTx))
206206 then if (if ((0 >= amount))
207207 then true
208208 else (i.payments[0].assetId != fromBase58String(assetId)))
209209 then throw("invalid token attached")
210210 else if ((currentPool == ""))
211211 then throw("Pool not initialized")
212212 else (stakeResult(user, amount) ++ supplyResult(currentPool))
213213 else throw("Strict value is not equal to itself.")
214214 }
215215
216216
217217
218218 @Callable(i)
219219 func unstake (amount) = {
220220 let user = toString(i.caller)
221221 let currentPool = tryGetStr(this, "currentPool")
222- let chargeFeeTx = chargeFeeResult()
223- if ((chargeFeeTx == chargeFeeTx))
222+ let tx = withdrawFromPuzzlePool(currentPool, amount)
223+ if ((tx == tx))
224224 then {
225- let tx = withdrawFromPuzzlePool(currentPool, amount)
226- if ((tx == tx))
227- then (unstakeResult(user, amount) ++ [ScriptTransfer(i.caller, amount, fromBase58String(assetId))])
225+ let stateChanges = (unstakeResult(user, amount) ++ [ScriptTransfer(i.caller, amount, fromBase58String(assetId))])
226+ let chargeFeeTx = chargeFeeResult()
227+ if ((chargeFeeTx == chargeFeeTx))
228+ then stateChanges
228229 else throw("Strict value is not equal to itself.")
229230 }
230231 else throw("Strict value is not equal to itself.")
231232 }
232233
233234
234235 @Verifier(tx)
235236 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
236237

github/deemru/w8io/169f3d6 
40.29 ms