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:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let | |
4 | + | let ID = base58'JAfMu2seKNzTVfqi5w5Pjh4kwwPTZPCEFpc2q2vDyFeh' | |
5 | 5 | ||
6 | - | let | |
6 | + | let LP = base58'' | |
7 | 7 | ||
8 | 8 | let isStopped = false | |
9 | 9 | ||
10 | 10 | @Callable(i) | |
11 | - | func | |
12 | - | let pmt = | |
13 | - | let | |
14 | - | if ((pmt.assetId != | |
11 | + | func stake () = { | |
12 | + | let pmt = i.payments[0] | |
13 | + | let pmtAmount = pmt.amount | |
14 | + | if ((pmt.assetId != ID)) | |
15 | 15 | then throw("attach USDN token only") | |
16 | 16 | else if (isStopped) | |
17 | 17 | then throw("smart contract is on lock") | |
18 | 18 | 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] | |
24 | 53 | } | |
25 | - | else throw("Strict value is not equal to itself.") | |
26 | - | } | |
54 | + | } | |
27 | 55 | } | |
28 | 56 | ||
29 | 57 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let | |
4 | + | let ID = base58'JAfMu2seKNzTVfqi5w5Pjh4kwwPTZPCEFpc2q2vDyFeh' | |
5 | 5 | ||
6 | - | let | |
6 | + | let LP = base58'' | |
7 | 7 | ||
8 | 8 | let isStopped = false | |
9 | 9 | ||
10 | 10 | @Callable(i) | |
11 | - | func | |
12 | - | let pmt = | |
13 | - | let | |
14 | - | if ((pmt.assetId != | |
11 | + | func stake () = { | |
12 | + | let pmt = i.payments[0] | |
13 | + | let pmtAmount = pmt.amount | |
14 | + | if ((pmt.assetId != ID)) | |
15 | 15 | then throw("attach USDN token only") | |
16 | 16 | else if (isStopped) | |
17 | 17 | then throw("smart contract is on lock") | |
18 | 18 | 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] | |
24 | 53 | } | |
25 | - | else throw("Strict value is not equal to itself.") | |
26 | - | } | |
54 | + | } | |
27 | 55 | } | |
28 | 56 | ||
29 | 57 | ||
30 | 58 | @Verifier(tx) | |
31 | 59 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
32 | 60 |
github/deemru/w8io/169f3d6 27.99 ms ◑