tx · EHkj9pVrAtVqNTMsEBvJM8ob5LSAF1VjcdaFgpLqoZ2h 3MzgHMybYexKdJKAxYgnPxUX9X51ExrUYaf: -0.03200000 Waves 2022.05.23 19:54 [2064597] smart account 3MzgHMybYexKdJKAxYgnPxUX9X51ExrUYaf > SELF 0.00000000 Waves
{ "type": 13, "id": "EHkj9pVrAtVqNTMsEBvJM8ob5LSAF1VjcdaFgpLqoZ2h", "fee": 3200000, "feeAssetId": null, "timestamp": 1653324918724, "version": 2, "chainId": 84, "sender": "3MzgHMybYexKdJKAxYgnPxUX9X51ExrUYaf", "senderPublicKey": "B63jSUR3s1MvRQ8dPLcqEXyS7iv4ZmzGaoiWP6rHviqz", "proofs": [ "613mmaTDdmXDVQ2sWNA1d4Wr6wTsMF7VYqbcYWU4Sv3bnj6PeG9H2FZe3TVhaAbbhmJj7eLcwz1bQaVppHuM5qgL" ], "script": "base64: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", "height": 2064597, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 5 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let k_insurance = "k_insurance" | |
5 | + | ||
6 | + | let k_whitelistt = "k_whitelist" | |
7 | + | ||
8 | + | let ADMIN_ADDRESS = Address(base58'3My3DAyGv3d3vkSGRVKpY3AbrnZjgRijMCJ') | |
9 | + | ||
10 | + | let ADMIN_PUBLIC_KEY = base58'F3EchjoUmhrwXapx5en4isAYVMHECvwSqyMPkSSUcskX' | |
11 | + | ||
12 | + | let USDN = base58'HezsdQuRDtzksAYUy97gfhKy7Z1NW2uXYSHA3bgqenNZ' | |
13 | + | ||
14 | + | let USDN_STAKING = Address(base58'3N9LkJahTMx41wGhSxLS42prCZtRCp4dhTs') | |
15 | + | ||
16 | + | func toCompositeKey (_key,_address) = ((_key + "_") + _address) | |
17 | + | ||
18 | + | ||
19 | + | func insurance () = valueOrElse(getInteger(this, k_insurance), 0) | |
20 | + | ||
21 | + | ||
22 | + | func isWhitelist (_address) = valueOrElse(getBoolean(this, toCompositeKey(k_whitelistt, _address)), false) | |
23 | + | ||
24 | + | ||
25 | + | func updateInsurance (i) = [IntegerEntry(k_insurance, i)] | |
26 | + | ||
27 | + | ||
28 | + | @Callable(i) | |
29 | + | func addWhitelist (_addresss) = if ((i.caller != ADMIN_ADDRESS)) | |
30 | + | then throw("Invalid addWhitelist params") | |
31 | + | else [BooleanEntry(toCompositeKey(k_whitelistt, _addresss), true)] | |
32 | + | ||
33 | + | ||
34 | + | ||
35 | + | @Callable(i) | |
36 | + | func removeWhitelist (_addresss) = if ((i.caller != ADMIN_ADDRESS)) | |
37 | + | then throw("Invalid addWhitelist params") | |
38 | + | else [BooleanEntry(toCompositeKey(k_whitelistt, _addresss), false)] | |
39 | + | ||
40 | + | ||
41 | + | ||
42 | + | @Callable(i) | |
43 | + | func withdraw (_amount) = if (if (!(isWhitelist(toString(i.caller)))) | |
44 | + | then true | |
45 | + | else (_amount > insurance())) | |
46 | + | then throw("Invalid withdraw params") | |
47 | + | else { | |
48 | + | let unstake = invoke(USDN_STAKING, "unlockNeutrino", [_amount, toBase58String(USDN)], nil) | |
49 | + | if ((unstake == unstake)) | |
50 | + | then (updateInsurance((insurance() - _amount)) ++ [ScriptTransfer(i.caller, _amount, USDN)]) | |
51 | + | else throw("Strict value is not equal to itself.") | |
52 | + | } | |
53 | + | ||
54 | + | ||
55 | + | ||
56 | + | @Callable(i) | |
57 | + | func deposit () = { | |
58 | + | let _amount = i.payments[0].amount | |
59 | + | if (if ((i.payments[0].assetId != USDN)) | |
60 | + | then true | |
61 | + | else if (!(isWhitelist(toString(i.caller)))) | |
62 | + | then (i.caller != ADMIN_ADDRESS) | |
63 | + | else false) | |
64 | + | then throw("Invalid deposit params") | |
65 | + | else { | |
66 | + | let stake = invoke(USDN_STAKING, "lockNeutrino", nil, [AttachedPayment(USDN, _amount)]) | |
67 | + | if ((stake == stake)) | |
68 | + | then updateInsurance((insurance() + _amount)) | |
69 | + | else throw("Strict value is not equal to itself.") | |
70 | + | } | |
71 | + | } | |
72 | + | ||
73 | + | ||
74 | + | @Verifier(tx) | |
75 | + | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], ADMIN_PUBLIC_KEY) | |
76 | + |
github/deemru/w8io/169f3d6 20.18 ms ◑