tx · 4WSwKPR6AXaXvYeZkHSkWueriziSAbxQiGqWhQauph5B 3PBmmxKhFcDhb8PrDdCdvw2iGMPnp7VuwPy: -0.01000000 Waves 2022.11.08 08:07 [3373073] smart account 3PBmmxKhFcDhb8PrDdCdvw2iGMPnp7VuwPy > SELF 0.00000000 Waves
{ "type": 13, "id": "4WSwKPR6AXaXvYeZkHSkWueriziSAbxQiGqWhQauph5B", "fee": 1000000, "feeAssetId": null, "timestamp": 1667884019820, "version": 2, "chainId": 87, "sender": "3PBmmxKhFcDhb8PrDdCdvw2iGMPnp7VuwPy", "senderPublicKey": "61mmdp2FdTQGQT6Rc3y2uY4cC5LkkG4SUiXj7d4g52FT", "proofs": [ "9HxwgqgcE3zX9P4VZ4WxsBqc3XEqT91xi7EwRwfYtRa5oTWobXEeUqJr4tunH35BWGniW4xWier3MDsqC7d5BMq" ], "script": "base64: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", "height": 3373073, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 83Rnsvwr3kWSMYqe2xxM2Z1D1xcYABC1sTKpGeAvkVf5 Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 5 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let AINTID = fromBase58String("66DUhUoJaoZcstkKpcoN3FUcqjB6v8VJd5ZQd6RsPxhv") | |
5 | + | ||
6 | + | let WAVESIDSTR = "WAVES" | |
7 | + | ||
8 | + | let WAVESID = fromBase58String(WAVESIDSTR) | |
9 | + | ||
10 | + | let MULT8 = 100000000 | |
11 | + | ||
12 | + | let PRICESTEP = (MULT8 / 10) | |
13 | + | ||
14 | + | let SEP = "__" | |
15 | + | ||
16 | + | func keyBeneficiaryAddress () = "%s__beneficiaryAddress" | |
17 | + | ||
18 | + | ||
19 | + | func keyPrice () = "%s__price" | |
20 | + | ||
21 | + | ||
22 | + | func keyTier () = "%s__tier" | |
23 | + | ||
24 | + | ||
25 | + | @Callable(i) | |
26 | + | func constructor (beneficiaryAddressStr58) = if ((this != i.caller)) | |
27 | + | then throw("permissions denied") | |
28 | + | else { | |
29 | + | let beneficiaryAddress = addressFromStringValue(beneficiaryAddressStr58) | |
30 | + | let price = MULT8 | |
31 | + | let tier = (MULT8 * 100) | |
32 | + | [StringEntry(keyBeneficiaryAddress(), toString(beneficiaryAddress)), IntegerEntry(keyTier(), tier), IntegerEntry(keyPrice(), price)] | |
33 | + | } | |
34 | + | ||
35 | + | ||
36 | + | ||
37 | + | @Callable(i) | |
38 | + | func deposit (hash) = { | |
39 | + | let pmt = i.payments[0] | |
40 | + | let pmtAssetId = valueOrElse(pmt.assetId, WAVESID) | |
41 | + | let amount = pmt.amount | |
42 | + | if ((size(i.payments) != 1)) | |
43 | + | then throw("exact 1 payment must be attached") | |
44 | + | else if ((pmtAssetId != WAVESID)) | |
45 | + | then throw("only WAVES can be used in payment") | |
46 | + | else { | |
47 | + | let key = ("%s__" + toString(i.caller)) | |
48 | + | let val = ((((("%s%s__" + hash) + SEP) + toString(height)) + SEP) + toString(amount)) | |
49 | + | [StringEntry(key, val)] | |
50 | + | } | |
51 | + | } | |
52 | + | ||
53 | + | ||
54 | + | ||
55 | + | @Callable(i) | |
56 | + | func refund (secret) = { | |
57 | + | let key = ("%s__" + toString(i.caller)) | |
58 | + | let val = getStringValue(key) | |
59 | + | let hash = split(val, SEP)[1] | |
60 | + | let h = toInt(parseBigIntValue(split(val, SEP)[2])) | |
61 | + | let amount = parseIntValue(split(val, SEP)[3]) | |
62 | + | if ((toBase58String(keccak256(blake2b256(toBytes(secret)))) != hash)) | |
63 | + | then throw("secret is wrong") | |
64 | + | else if ((60 > (height - h))) | |
65 | + | then throw("too early to refund") | |
66 | + | else [DeleteEntry(key), ScriptTransfer(i.caller, amount, WAVESID)] | |
67 | + | } | |
68 | + | ||
69 | + | ||
70 | + | ||
71 | + | @Callable(i) | |
72 | + | func mint () = { | |
73 | + | let pmt = i.payments[0] | |
74 | + | let pmtAssetId = valueOrElse(pmt.assetId, WAVESID) | |
75 | + | let amount = pmt.amount | |
76 | + | if ((size(i.payments) != 1)) | |
77 | + | then throw("exact 1 payment must be attached") | |
78 | + | else if ((pmtAssetId != WAVESID)) | |
79 | + | then throw("only WAVES can be used in payment") | |
80 | + | else { | |
81 | + | let price = getIntegerValue(keyPrice()) | |
82 | + | let tier = getIntegerValue(keyTier()) | |
83 | + | let addressBeneficiary = addressFromStringValue(getStringValue(keyBeneficiaryAddress())) | |
84 | + | let amountAint = fraction(amount, MULT8, price) | |
85 | + | let amountAintFinal = if ((tier >= amountAint)) | |
86 | + | then amountAint | |
87 | + | else tier | |
88 | + | let tierNew = if ((tier >= amountAint)) | |
89 | + | then (tier - amountAint) | |
90 | + | else (MULT8 * 10) | |
91 | + | let priceNew = if ((tier >= amountAint)) | |
92 | + | then price | |
93 | + | else (price + PRICESTEP) | |
94 | + | let returnAmount = if ((tier >= amountAint)) | |
95 | + | then 0 | |
96 | + | else (amount - fraction(amount, MULT8, price)) | |
97 | + | let amountBeneficirary = if ((tier >= amountAint)) | |
98 | + | then amount | |
99 | + | else (amount - returnAmount) | |
100 | + | let st = ScriptTransfer(i.caller, amountAintFinal, AINTID) | |
101 | + | let preExecute = [ScriptTransfer(i.caller, amountAintFinal, AINTID), ScriptTransfer(addressBeneficiary, amountBeneficirary, unit), IntegerEntry(keyTier(), tierNew)] | |
102 | + | let execute = if ((tier >= amountAint)) | |
103 | + | then preExecute | |
104 | + | else (preExecute ++ [IntegerEntry(keyPrice(), priceNew), ScriptTransfer(i.caller, returnAmount, unit)]) | |
105 | + | execute | |
106 | + | } | |
107 | + | } | |
108 | + | ||
109 | + |
github/deemru/w8io/3ef1775 25.65 ms ◑