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:
OldNewDifferences
77
88 let oracle = Address(base58'3PKkojKdd6BBzTf1RXbQVfUDraNFXXHKzQF')
99
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")
1111
12-let usdSum = valueOrElse(getInteger("usd-sum"), 2000)
12+let sixDigits = 1000000
13+
14+let usdSum = valueOrElse(getInteger("usd-sum"), (2000 * sixDigits))
1315
1416 let usdDestination = valueOrErrorMessage(addressFromString(valueOrElse(getString("usd-destination"), "3P3kwnQyjEPETroV4U5sgWxCyQsm5RJE8FT")), "usd-destination is invalid address")
1517
1618 let usdLastHeighStore = "usd-last-height"
1719
18-let RBase = 100000000
20+let BASE = 1000
1921
20-let usdPerBlockR = fraction(usdSum, (RBase * 1000), (1440 * 30437))
22+let monthR = (1440 * 30437)
2123
22-let BASE = 100
24+let usdPerBlock = fraction(usdSum, BASE, monthR)
2325
2426 let reserveAmount = 100000000
2527
3436 else {
3537 let lastHeight = valueOrElse(getInteger(usdLastHeighStore), 3801094)
3638 let blocks = (height - lastHeight)
37- let $t013681780 = if ((1 > blocks))
39+ let $t014732108 = if ((1 > blocks))
3840 then $Tuple2(total, nil)
3941 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)
4244 if ((wavesForUsd > total))
4345 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+ }
4551 }
46- let rest = $t013681780._1
47- let usdCmds = $t013681780._2
52+ let rest = $t014732108._1
53+ let usdCmds = $t014732108._2
4854 func fold (acc,destination) = if ((size(acc) == size(destinations)))
4955 then acc
5056 else {
5157 let data = split(destination, "=")
5258 let address = valueOrErrorMessage(addressFromString(data[0]), "MUST BE VALID ADDRESS=part")
5359 let part = valueOrErrorMessage(parseInt(data[1]), "adr=MUST BE NUMBER")
54- let amount = fraction(rest, BASE, part)
60+ let amount = fraction(rest, part, BASE)
5561 ScriptTransfer(address, amount, unit) :: acc
5662 }
5763
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let wavesDAO = valueOrErrorMessage(addressFromString(valueOrElse(getString("wavesDAO"), "3PEwRcYNAUtoFvKpBhKoiwajnZfdoDR6h4h")), "invalid wavesDAO address")
55
66 let destinations = split(valueOrElse(getString("destinations"), "3PCFis5xZqpkAZ6K63K68XQyL1TpcM2dqJE=333,3PCD6aUTkKF385Z2PFJiWxqKPDYa9agPEig=333,3P3kwnQyjEPETroV4U5sgWxCyQsm5RJE8FT=334"), ",")
77
88 let oracle = Address(base58'3PKkojKdd6BBzTf1RXbQVfUDraNFXXHKzQF')
99
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")
1111
12-let usdSum = valueOrElse(getInteger("usd-sum"), 2000)
12+let sixDigits = 1000000
13+
14+let usdSum = valueOrElse(getInteger("usd-sum"), (2000 * sixDigits))
1315
1416 let usdDestination = valueOrErrorMessage(addressFromString(valueOrElse(getString("usd-destination"), "3P3kwnQyjEPETroV4U5sgWxCyQsm5RJE8FT")), "usd-destination is invalid address")
1517
1618 let usdLastHeighStore = "usd-last-height"
1719
18-let RBase = 100000000
20+let BASE = 1000
1921
20-let usdPerBlockR = fraction(usdSum, (RBase * 1000), (1440 * 30437))
22+let monthR = (1440 * 30437)
2123
22-let BASE = 100
24+let usdPerBlock = fraction(usdSum, BASE, monthR)
2325
2426 let reserveAmount = 100000000
2527
2628 @Callable(i)
2729 func claim () = {
2830 let c = invoke(wavesDAO, "claim", nil, nil)
2931 if ((c == c))
3032 then {
3133 let total = (wavesBalance(this).available - reserveAmount)
3234 if ((0 >= total))
3335 then throw("no waves")
3436 else {
3537 let lastHeight = valueOrElse(getInteger(usdLastHeighStore), 3801094)
3638 let blocks = (height - lastHeight)
37- let $t013681780 = if ((1 > blocks))
39+ let $t014732108 = if ((1 > blocks))
3840 then $Tuple2(total, nil)
3941 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)
4244 if ((wavesForUsd > total))
4345 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+ }
4551 }
46- let rest = $t013681780._1
47- let usdCmds = $t013681780._2
52+ let rest = $t014732108._1
53+ let usdCmds = $t014732108._2
4854 func fold (acc,destination) = if ((size(acc) == size(destinations)))
4955 then acc
5056 else {
5157 let data = split(destination, "=")
5258 let address = valueOrErrorMessage(addressFromString(data[0]), "MUST BE VALID ADDRESS=part")
5359 let part = valueOrErrorMessage(parseInt(data[1]), "adr=MUST BE NUMBER")
54- let amount = fraction(rest, BASE, part)
60+ let amount = fraction(rest, part, BASE)
5561 ScriptTransfer(address, amount, unit) :: acc
5662 }
5763
5864 (usdCmds ++ {
5965 let $l = destinations
6066 let $s = size($l)
6167 let $acc0 = nil
6268 func $f0_1 ($a,$i) = if (($i >= $s))
6369 then $a
6470 else fold($a, $l[$i])
6571
6672 func $f0_2 ($a,$i) = if (($i >= $s))
6773 then $a
6874 else throw("List size exceeds 3")
6975
7076 $f0_2($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3)
7177 })
7278 }
7379 }
7480 else throw("Strict value is not equal to itself.")
7581 }
7682
7783

github/deemru/w8io/3ef1775 
51.28 ms