tx · 2o2J27NpMxKdQ8f176qxBrcSb2uD3z5cmkjGtEecYS6L
3PHvwN8hHP3Egoz8iZPJomnDQTtyJzUtWdY: -0.00300000 Waves
2023.09.01 11:00 [3801702] smart account 3PHvwN8hHP3Egoz8iZPJomnDQTtyJzUtWdY > SELF 0.00000000 Waves
{
"type": 13,
"id": "2o2J27NpMxKdQ8f176qxBrcSb2uD3z5cmkjGtEecYS6L",
"fee": 300000,
"feeAssetId": null,
"timestamp": 1693555216526,
"version": 1,
"sender": "3PHvwN8hHP3Egoz8iZPJomnDQTtyJzUtWdY",
"senderPublicKey": "GSNzyFY71E8i1sqNhKKWc3HLXWujQ1FR51fMFjJ4d58G",
"proofs": [
"3MUAqVYYQrs962mDt7Bri6x9WgMY9BMxnAcBnttvbaHBzzMS6NesQWPkqKijQE3wa89GGwjufoo8FNK6RAwkaDm6"
],
"script": "base64:BgIECAISAAwACHdhdmVzREFPCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBC3ZhbHVlT3JFbHNlAgkAoggBAgh3YXZlc0RBTwIjM1BFd1JjWU5BVXRvRnZLcEJoS29pd2FqblpmZG9EUjZoNGgCGGludmFsaWQgd2F2ZXNEQU8gYWRkcmVzcwAMZGVzdGluYXRpb25zCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQIMZGVzdGluYXRpb25zAnczUENGaXM1eFpxcGtBWjZLNjNLNjhYUXlMMVRwY00yZHFKRT0zMzMsM1BDRDZhVVRrS0YzODVaMlBGSmlXeHFLUERZYTlhZ1BFaWc9MzMzLDNQM2t3blF5akVQRVRyb1Y0VTVzZ1d4Q3lRc201UkpFOEZUPTMzNAIBLAAGb3JhY2xlCQEHQWRkcmVzcwEBGgFXw4nuidFTWhQUZTvI/d/0hIb99hEAq5RYAAp3YXZlc1ByaWNlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUGb3JhY2xlAhclcyVzX19wcmljZV9fV0FWRVMtVVNEVAIgV0FWRVMgcHJpY2UgaXMgbm90IGluIHRoZSBPcmFjbGUACXNpeERpZ2l0cwDAhD0ABnVzZFN1bQkBC3ZhbHVlT3JFbHNlAgkAnwgBAgd1c2Qtc3VtCQBoAgDQDwUJc2l4RGlnaXRzAA51c2REZXN0aW5hdGlvbgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAQt2YWx1ZU9yRWxzZQIJAKIIAQIPdXNkLWRlc3RpbmF0aW9uAiMzUDNrd25ReWpFUEVUcm9WNFU1c2dXeEN5UXNtNVJKRThGVAIidXNkLWRlc3RpbmF0aW9uIGlzIGludmFsaWQgYWRkcmVzcwARdXNkTGFzdEhlaWdoU3RvcmUCD3VzZC1sYXN0LWhlaWdodAAEQkFTRQDoBwAGbW9udGhSCQBoAgCgCwDl7QEAC3VzZFBlckJsb2NrCQBrAwUGdXNkU3VtBQRCQVNFBQZtb250aFIADXJlc2VydmVBbW91bnQAgMLXLwEBaQEFY2xhaW0ABAFjCQD8BwQFCHdhdmVzREFPAgVjbGFpbQUDbmlsBQNuaWwDCQAAAgUBYwUBYwQFdG90YWwJAGUCCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQUNcmVzZXJ2ZUFtb3VudAMJAGcCAAAFBXRvdGFsCQACAQIIbm8gd2F2ZXMECmxhc3RIZWlnaHQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQURdXNkTGFzdEhlaWdoU3RvcmUAhoDoAQQGYmxvY2tzCQBlAgUGaGVpZ2h0BQpsYXN0SGVpZ2h0BAskdDAxNDczMjEwOAMJAGYCAAEFBmJsb2NrcwkAlAoCBQV0b3RhbAUDbmlsBAN1c2QJAGgCBQt1c2RQZXJCbG9jawUGYmxvY2tzBAt3YXZlc0ZvclVzZAkAawMFA3VzZAUJc2l4RGlnaXRzBQp3YXZlc1ByaWNlAwkAZgIFC3dhdmVzRm9yVXNkBQV0b3RhbAkAAgECEG5vIHdhdmVzIGZvciB1c2QEBW1vbnRoCQBrAwUGaGVpZ2h0BQRCQVNFBQZtb250aFIEE3dhdmVzRm9yVXNkU3VtU3RvcmUJAKwCAgIOd2F2ZXMtZm9yLXVzZC0JAKQDAQUFbW9udGgJAJQKAgkAZQIFBXRvdGFsBQt3YXZlc0ZvclVzZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURdXNkTGFzdEhlaWdoU3RvcmUFBmhlaWdodAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ51c2REZXN0aW5hdGlvbgULd2F2ZXNGb3JVc2QFBHVuaXQJAMwIAgkBDEludGVnZXJFbnRyeQIFE3dhdmVzRm9yVXNkU3VtU3RvcmUJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFE3dhdmVzRm9yVXNkU3VtU3RvcmUAAAULd2F2ZXNGb3JVc2QFA25pbAQEcmVzdAgFCyR0MDE0NzMyMTA4Al8xBAd1c2RDbWRzCAULJHQwMTQ3MzIxMDgCXzIKAQRmb2xkAgNhY2MLZGVzdGluYXRpb24DCQAAAgkAkAMBBQNhY2MJAJADAQUMZGVzdGluYXRpb25zBQNhY2MEBGRhdGEJALUJAgULZGVzdGluYXRpb24CAT0EB2FkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFBGRhdGEAAAIaTVVTVCBCRSBWQUxJRCBBRERSRVNTPXBhcnQEBHBhcnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFBGRhdGEAAQISYWRyPU1VU1QgQkUgTlVNQkVSBAZhbW91bnQJAGsDBQRyZXN0BQRwYXJ0BQRCQVNFCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFB2FkZHJlc3MFBmFtb3VudAUEdW5pdAUDYWNjCQDOCAIFB3VzZENtZHMKAAIkbAUMZGVzdGluYXRpb25zCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyAzCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuABCB8FQ=",
"chainId": 87,
"height": 3801702,
"applicationStatus": "succeeded",
"spentComplexity": 0
}
View: original | compacted
Prev: EWbhbMsx3WxmWpkxsreFrDWJippJnnfAjFLjuMFhqjN3
Next: 6KANaZQKaXMA3546GL9iE2xArKYsNhjArczLKhSDTY5h
Diff:
Old | New | | Differences |
---|
7 | 7 | | |
---|
8 | 8 | | let oracle = Address(base58'3PKkojKdd6BBzTf1RXbQVfUDraNFXXHKzQF') |
---|
9 | 9 | | |
---|
10 | | - | let wavesPrice = getIntegerValue(oracle, "%s%s__price__WAVES-USDT") |
---|
| 10 | + | let wavesPrice = valueOrErrorMessage(getInteger(oracle, "%s%s__price__WAVES-USDT"), "WAVES price is not in the Oracle") |
---|
11 | 11 | | |
---|
12 | | - | let usdSum = valueOrElse(getInteger("usd-sum"), 2000) |
---|
| 12 | + | let sixDigits = 1000000 |
---|
| 13 | + | |
---|
| 14 | + | let usdSum = valueOrElse(getInteger("usd-sum"), (2000 * sixDigits)) |
---|
13 | 15 | | |
---|
14 | 16 | | let usdDestination = valueOrErrorMessage(addressFromString(valueOrElse(getString("usd-destination"), "3P3kwnQyjEPETroV4U5sgWxCyQsm5RJE8FT")), "usd-destination is invalid address") |
---|
15 | 17 | | |
---|
16 | 18 | | let usdLastHeighStore = "usd-last-height" |
---|
17 | 19 | | |
---|
18 | | - | let RBase = 100000000 |
---|
| 20 | + | let BASE = 1000 |
---|
19 | 21 | | |
---|
20 | | - | let usdPerBlockR = fraction(usdSum, (RBase * 1000), (1440 * 30437)) |
---|
| 22 | + | let monthR = (1440 * 30437) |
---|
21 | 23 | | |
---|
22 | | - | let BASE = 100 |
---|
| 24 | + | let usdPerBlock = fraction(usdSum, BASE, monthR) |
---|
23 | 25 | | |
---|
24 | 26 | | let reserveAmount = 100000000 |
---|
25 | 27 | | |
---|
|
34 | 36 | | else { |
---|
35 | 37 | | let lastHeight = valueOrElse(getInteger(usdLastHeighStore), 3801094) |
---|
36 | 38 | | let blocks = (height - lastHeight) |
---|
37 | | - | let $t013681780 = if ((1 > blocks)) |
---|
| 39 | + | let $t014732108 = if ((1 > blocks)) |
---|
38 | 40 | | then $Tuple2(total, nil) |
---|
39 | 41 | | else { |
---|
40 | | - | let usd = (usdPerBlockR * blocks) |
---|
41 | | - | let wavesForUsd = fraction(usd, 1000000, (wavesPrice * RBase)) |
---|
| 42 | + | let usd = (usdPerBlock * blocks) |
---|
| 43 | + | let wavesForUsd = fraction(usd, sixDigits, wavesPrice) |
---|
42 | 44 | | if ((wavesForUsd > total)) |
---|
43 | 45 | | then throw("no waves for usd") |
---|
44 | | - | else $Tuple2((total - wavesForUsd), [IntegerEntry(usdLastHeighStore, height), ScriptTransfer(usdDestination, wavesForUsd, unit)]) |
---|
| 46 | + | else { |
---|
| 47 | + | let month = fraction(height, BASE, monthR) |
---|
| 48 | + | let wavesForUsdSumStore = ("waves-for-usd-" + toString(month)) |
---|
| 49 | + | $Tuple2((total - wavesForUsd), [IntegerEntry(usdLastHeighStore, height), ScriptTransfer(usdDestination, wavesForUsd, unit), IntegerEntry(wavesForUsdSumStore, (valueOrElse(getInteger(wavesForUsdSumStore), 0) + wavesForUsd))]) |
---|
| 50 | + | } |
---|
45 | 51 | | } |
---|
46 | | - | let rest = $t013681780._1 |
---|
47 | | - | let usdCmds = $t013681780._2 |
---|
| 52 | + | let rest = $t014732108._1 |
---|
| 53 | + | let usdCmds = $t014732108._2 |
---|
48 | 54 | | func fold (acc,destination) = if ((size(acc) == size(destinations))) |
---|
49 | 55 | | then acc |
---|
50 | 56 | | else { |
---|
51 | 57 | | let data = split(destination, "=") |
---|
52 | 58 | | let address = valueOrErrorMessage(addressFromString(data[0]), "MUST BE VALID ADDRESS=part") |
---|
53 | 59 | | let part = valueOrErrorMessage(parseInt(data[1]), "adr=MUST BE NUMBER") |
---|
54 | | - | let amount = fraction(rest, BASE, part) |
---|
| 60 | + | let amount = fraction(rest, part, BASE) |
---|
55 | 61 | | ScriptTransfer(address, amount, unit) :: acc |
---|
56 | 62 | | } |
---|
57 | 63 | | |
---|
Full:
Old | New | | Differences |
---|
1 | 1 | | {-# STDLIB_VERSION 6 #-} |
---|
2 | 2 | | {-# SCRIPT_TYPE ACCOUNT #-} |
---|
3 | 3 | | {-# CONTENT_TYPE DAPP #-} |
---|
4 | 4 | | let wavesDAO = valueOrErrorMessage(addressFromString(valueOrElse(getString("wavesDAO"), "3PEwRcYNAUtoFvKpBhKoiwajnZfdoDR6h4h")), "invalid wavesDAO address") |
---|
5 | 5 | | |
---|
6 | 6 | | let destinations = split(valueOrElse(getString("destinations"), "3PCFis5xZqpkAZ6K63K68XQyL1TpcM2dqJE=333,3PCD6aUTkKF385Z2PFJiWxqKPDYa9agPEig=333,3P3kwnQyjEPETroV4U5sgWxCyQsm5RJE8FT=334"), ",") |
---|
7 | 7 | | |
---|
8 | 8 | | let oracle = Address(base58'3PKkojKdd6BBzTf1RXbQVfUDraNFXXHKzQF') |
---|
9 | 9 | | |
---|
10 | | - | let wavesPrice = getIntegerValue(oracle, "%s%s__price__WAVES-USDT") |
---|
| 10 | + | let wavesPrice = valueOrErrorMessage(getInteger(oracle, "%s%s__price__WAVES-USDT"), "WAVES price is not in the Oracle") |
---|
11 | 11 | | |
---|
12 | | - | let usdSum = valueOrElse(getInteger("usd-sum"), 2000) |
---|
| 12 | + | let sixDigits = 1000000 |
---|
| 13 | + | |
---|
| 14 | + | let usdSum = valueOrElse(getInteger("usd-sum"), (2000 * sixDigits)) |
---|
13 | 15 | | |
---|
14 | 16 | | let usdDestination = valueOrErrorMessage(addressFromString(valueOrElse(getString("usd-destination"), "3P3kwnQyjEPETroV4U5sgWxCyQsm5RJE8FT")), "usd-destination is invalid address") |
---|
15 | 17 | | |
---|
16 | 18 | | let usdLastHeighStore = "usd-last-height" |
---|
17 | 19 | | |
---|
18 | | - | let RBase = 100000000 |
---|
| 20 | + | let BASE = 1000 |
---|
19 | 21 | | |
---|
20 | | - | let usdPerBlockR = fraction(usdSum, (RBase * 1000), (1440 * 30437)) |
---|
| 22 | + | let monthR = (1440 * 30437) |
---|
21 | 23 | | |
---|
22 | | - | let BASE = 100 |
---|
| 24 | + | let usdPerBlock = fraction(usdSum, BASE, monthR) |
---|
23 | 25 | | |
---|
24 | 26 | | let reserveAmount = 100000000 |
---|
25 | 27 | | |
---|
26 | 28 | | @Callable(i) |
---|
27 | 29 | | func claim () = { |
---|
28 | 30 | | let c = invoke(wavesDAO, "claim", nil, nil) |
---|
29 | 31 | | if ((c == c)) |
---|
30 | 32 | | then { |
---|
31 | 33 | | let total = (wavesBalance(this).available - reserveAmount) |
---|
32 | 34 | | if ((0 >= total)) |
---|
33 | 35 | | then throw("no waves") |
---|
34 | 36 | | else { |
---|
35 | 37 | | let lastHeight = valueOrElse(getInteger(usdLastHeighStore), 3801094) |
---|
36 | 38 | | let blocks = (height - lastHeight) |
---|
37 | | - | let $t013681780 = if ((1 > blocks)) |
---|
| 39 | + | let $t014732108 = if ((1 > blocks)) |
---|
38 | 40 | | then $Tuple2(total, nil) |
---|
39 | 41 | | else { |
---|
40 | | - | let usd = (usdPerBlockR * blocks) |
---|
41 | | - | let wavesForUsd = fraction(usd, 1000000, (wavesPrice * RBase)) |
---|
| 42 | + | let usd = (usdPerBlock * blocks) |
---|
| 43 | + | let wavesForUsd = fraction(usd, sixDigits, wavesPrice) |
---|
42 | 44 | | if ((wavesForUsd > total)) |
---|
43 | 45 | | then throw("no waves for usd") |
---|
44 | | - | else $Tuple2((total - wavesForUsd), [IntegerEntry(usdLastHeighStore, height), ScriptTransfer(usdDestination, wavesForUsd, unit)]) |
---|
| 46 | + | else { |
---|
| 47 | + | let month = fraction(height, BASE, monthR) |
---|
| 48 | + | let wavesForUsdSumStore = ("waves-for-usd-" + toString(month)) |
---|
| 49 | + | $Tuple2((total - wavesForUsd), [IntegerEntry(usdLastHeighStore, height), ScriptTransfer(usdDestination, wavesForUsd, unit), IntegerEntry(wavesForUsdSumStore, (valueOrElse(getInteger(wavesForUsdSumStore), 0) + wavesForUsd))]) |
---|
| 50 | + | } |
---|
45 | 51 | | } |
---|
46 | | - | let rest = $t013681780._1 |
---|
47 | | - | let usdCmds = $t013681780._2 |
---|
| 52 | + | let rest = $t014732108._1 |
---|
| 53 | + | let usdCmds = $t014732108._2 |
---|
48 | 54 | | func fold (acc,destination) = if ((size(acc) == size(destinations))) |
---|
49 | 55 | | then acc |
---|
50 | 56 | | else { |
---|
51 | 57 | | let data = split(destination, "=") |
---|
52 | 58 | | let address = valueOrErrorMessage(addressFromString(data[0]), "MUST BE VALID ADDRESS=part") |
---|
53 | 59 | | let part = valueOrErrorMessage(parseInt(data[1]), "adr=MUST BE NUMBER") |
---|
54 | | - | let amount = fraction(rest, BASE, part) |
---|
| 60 | + | let amount = fraction(rest, part, BASE) |
---|
55 | 61 | | ScriptTransfer(address, amount, unit) :: acc |
---|
56 | 62 | | } |
---|
57 | 63 | | |
---|
58 | 64 | | (usdCmds ++ { |
---|
59 | 65 | | let $l = destinations |
---|
60 | 66 | | let $s = size($l) |
---|
61 | 67 | | let $acc0 = nil |
---|
62 | 68 | | func $f0_1 ($a,$i) = if (($i >= $s)) |
---|
63 | 69 | | then $a |
---|
64 | 70 | | else fold($a, $l[$i]) |
---|
65 | 71 | | |
---|
66 | 72 | | func $f0_2 ($a,$i) = if (($i >= $s)) |
---|
67 | 73 | | then $a |
---|
68 | 74 | | else throw("List size exceeds 3") |
---|
69 | 75 | | |
---|
70 | 76 | | $f0_2($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3) |
---|
71 | 77 | | }) |
---|
72 | 78 | | } |
---|
73 | 79 | | } |
---|
74 | 80 | | else throw("Strict value is not equal to itself.") |
---|
75 | 81 | | } |
---|
76 | 82 | | |
---|
77 | 83 | | |
---|