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