tx · HpzPWKnaai31GYkpGYBdwCG9Ucne7Xg5bypJy2tRD3vT

3Mv7nXq2V2Dnn9oSkB5feRt6RxtqnPiAXNH:  -0.01400000 Waves

2022.04.08 10:00 [1999262] smart account 3Mv7nXq2V2Dnn9oSkB5feRt6RxtqnPiAXNH > SELF 0.00000000 Waves

{ "type": 13, "id": "HpzPWKnaai31GYkpGYBdwCG9Ucne7Xg5bypJy2tRD3vT", "fee": 1400000, "feeAssetId": null, "timestamp": 1649401291013, "version": 2, "chainId": 84, "sender": "3Mv7nXq2V2Dnn9oSkB5feRt6RxtqnPiAXNH", "senderPublicKey": "HJ4JLtArYaaiBiWho6gzLRbKUVM6ZVTaKmci6sgFQtEm", "proofs": [ "WJyGSFayaK9SqmFXoEuVc5XAbgi9TbdqCqMa3JJUs9mNGrj8fQWXMmoPST1oGdafAU4p1KbEPt355U2EaxnMxFK" ], "script": "base64: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", "height": 1999262, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: A2T8UWBB83BKK1mKvShr5zrDMBQqPiye6HgYjYLQhJB7 Next: 2wqQSd296ej7cozUgo821hrR2TCBubKkkcHsrKSGcvAa Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let usdn = base58'25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT'
4+let ID = base58'JAfMu2seKNzTVfqi5w5Pjh4kwwPTZPCEFpc2q2vDyFeh'
55
6-let snsbtId = base58'DZ5LhvfGCEAFRmfcrtdjhhiLESBfN7dMvM8FEFQc6Qr6'
6+let LP = base58''
77
88 let isStopped = false
99
1010 @Callable(i)
11-func stakeNSBT () = {
12- let pmt = value(i.payments[0])
13- let amount = pmt.amount
14- if ((pmt.assetId != usdn))
11+func stake () = {
12+ let pmt = i.payments[0]
13+ let pmtAmount = pmt.amount
14+ if ((pmt.assetId != ID))
1515 then throw("attach USDN token only")
1616 else if (isStopped)
1717 then throw("smart contract is on lock")
1818 else {
19- let lockInv = invoke(Address(base58'3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT'), "put", [$Tuple2(500000, true)], [pmt])
20- if ((lockInv == lockInv))
21- then {
22- let snsbtIssue = Reissue(snsbtId, amount, true)
23-[snsbtIssue, ScriptTransfer(i.caller, amount, snsbtId)]
19+ let inTreasury = assetBalance(this, ID)
20+ let totalIssued = match assetInfo(LP) {
21+ case asset: Asset =>
22+ asset.quantity
23+ case _ =>
24+ throw("Can't find asset")
25+ }
26+ let singleLPinValue = (totalIssued / inTreasury)
27+ let amountToIssue = (pmtAmount * singleLPinValue)
28+ let LPIssue = Reissue(LP, amountToIssue, true)
29+ let transfer = ScriptTransfer(i.caller, amountToIssue, LP)
30+[LPIssue, transfer]
31+ }
32+ }
33+
34+
35+
36+@Callable(i)
37+func withdraw (amount) = {
38+ let acceptableTokenId = LP
39+ let attached = i.payments[0]
40+ let paymentID = i.payments[0].assetId
41+ if ((paymentID != acceptableTokenId))
42+ then throw("Attach the correct LP token")
43+ else {
44+ let newAmount = (attached.amount - amount)
45+ if ((0 > amount))
46+ then throw("Can't withdraw negative amount")
47+ else if ((0 > newAmount))
48+ then throw("Not enough balance")
49+ else {
50+ let burning = Burn(LP, amount)
51+ let transfer = ScriptTransfer(i.caller, newAmount, ID)
52+[burning, transfer]
2453 }
25- else throw("Strict value is not equal to itself.")
26- }
54+ }
2755 }
2856
2957
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let usdn = base58'25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT'
4+let ID = base58'JAfMu2seKNzTVfqi5w5Pjh4kwwPTZPCEFpc2q2vDyFeh'
55
6-let snsbtId = base58'DZ5LhvfGCEAFRmfcrtdjhhiLESBfN7dMvM8FEFQc6Qr6'
6+let LP = base58''
77
88 let isStopped = false
99
1010 @Callable(i)
11-func stakeNSBT () = {
12- let pmt = value(i.payments[0])
13- let amount = pmt.amount
14- if ((pmt.assetId != usdn))
11+func stake () = {
12+ let pmt = i.payments[0]
13+ let pmtAmount = pmt.amount
14+ if ((pmt.assetId != ID))
1515 then throw("attach USDN token only")
1616 else if (isStopped)
1717 then throw("smart contract is on lock")
1818 else {
19- let lockInv = invoke(Address(base58'3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT'), "put", [$Tuple2(500000, true)], [pmt])
20- if ((lockInv == lockInv))
21- then {
22- let snsbtIssue = Reissue(snsbtId, amount, true)
23-[snsbtIssue, ScriptTransfer(i.caller, amount, snsbtId)]
19+ let inTreasury = assetBalance(this, ID)
20+ let totalIssued = match assetInfo(LP) {
21+ case asset: Asset =>
22+ asset.quantity
23+ case _ =>
24+ throw("Can't find asset")
25+ }
26+ let singleLPinValue = (totalIssued / inTreasury)
27+ let amountToIssue = (pmtAmount * singleLPinValue)
28+ let LPIssue = Reissue(LP, amountToIssue, true)
29+ let transfer = ScriptTransfer(i.caller, amountToIssue, LP)
30+[LPIssue, transfer]
31+ }
32+ }
33+
34+
35+
36+@Callable(i)
37+func withdraw (amount) = {
38+ let acceptableTokenId = LP
39+ let attached = i.payments[0]
40+ let paymentID = i.payments[0].assetId
41+ if ((paymentID != acceptableTokenId))
42+ then throw("Attach the correct LP token")
43+ else {
44+ let newAmount = (attached.amount - amount)
45+ if ((0 > amount))
46+ then throw("Can't withdraw negative amount")
47+ else if ((0 > newAmount))
48+ then throw("Not enough balance")
49+ else {
50+ let burning = Burn(LP, amount)
51+ let transfer = ScriptTransfer(i.caller, newAmount, ID)
52+[burning, transfer]
2453 }
25- else throw("Strict value is not equal to itself.")
26- }
54+ }
2755 }
2856
2957
3058 @Verifier(tx)
3159 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
3260

github/deemru/w8io/169f3d6 
27.99 ms