tx · AkJqAGEiwucVRK15PBpN6JH2StKnrt4teCcLNTt6qVNF

3MwyBKGZcdChEK9Z55HwLn3A2EgwEJJpqC1:  -0.01000000 Waves

2024.01.09 11:13 [2923686] smart account 3MwyBKGZcdChEK9Z55HwLn3A2EgwEJJpqC1 > SELF 0.00000000 Waves

{ "type": 13, "id": "AkJqAGEiwucVRK15PBpN6JH2StKnrt4teCcLNTt6qVNF", "fee": 1000000, "feeAssetId": null, "timestamp": 1704788073399, "version": 2, "chainId": 84, "sender": "3MwyBKGZcdChEK9Z55HwLn3A2EgwEJJpqC1", "senderPublicKey": "7c3qLtcJ7EaPS2JDjXv8MBbd4kpyc6R27wcn5GgvZhur", "proofs": [ "34hPtvmwRLmt9Db1ygaYGcsYvQ147ytihP8GKBrpxdqk33DH2GNDvXeLGJJk6SNNSuw7eoG7F33YHDAfnSRkmq7b" ], "script": "base64:BgIKCAISBgoECAEBAQ8ADGNvbnRyYWN0RmlsZQIQdmVzdGluZ19uZW8ucmlkZQADU0VQAgJfXwARTUFYX1ZFU1RJTkdfQ09VTlQAZAEIdGhyb3dFcnIBA21zZwkAAgEJAKwCAgkArAICBQxjb250cmFjdEZpbGUCAjogBQNtc2cACmtleUFzc2V0SWQJALkJAgkAzAgCAgIlcwkAzAgCAgdhc3NldElkBQNuaWwFA1NFUAANYXNzZXRJZFN0cmluZwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQprZXlBc3NldElkAgVXQVZFUwAMYXNzZXRJZEJ5dGVzAwkAAAIFDWFzc2V0SWRTdHJpbmcCBVdBVkVTBQR1bml0CQDZBAEFDWFzc2V0SWRTdHJpbmcBFGlzVmFsaWRBZGRyZXNzU3RyaW5nAQ1hZGRyZXNzU3RyaW5nBAckbWF0Y2gwCQCmCAEFDWFkZHJlc3NTdHJpbmcDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAYHAQ5rZXlVc2VyVmVzdGluZwILdXNlckFkZHJlc3MCaWQEBmNoZWNrcwkAzAgCAwkBFGlzVmFsaWRBZGRyZXNzU3RyaW5nAQULdXNlckFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIVYWRkcmVzcyBpcyBub3QgdmFsaWQ6CQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwCASAJAMwIAgMDCQBnAgUCaWQAAAkAZgIFEU1BWF9WRVNUSU5HX0NPVU5UBQJpZAcGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIOaWQgaXMgaW52YWxpZDoJAMwIAgkApAMBBQJpZAUDbmlsAgEgBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MJALkJAgkAzAgCAgQlcyVkCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAIJAKQDAQUCaWQFA25pbAUDU0VQCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARFmb3JtYXRVc2VyVmVzdGluZwMNdmVzdGluZ0Ftb3VudApzdGFydEJsb2NrCmxvY2tMZW5ndGgEBmNoZWNrcwkAzAgCAwkAZwIFDXZlc3RpbmdBbW91bnQAAAYJAQh0aHJvd0VycgECIXZlc3RpbmcgYW1vdW50IGNhbm5vdCBiZSBuZWdhdGl2ZQkAzAgCAwkAZwIFCnN0YXJ0QmxvY2sAAAYJAQh0aHJvd0VycgECHnN0YXJ0IGJsb2NrIGNhbm5vdCBiZSBuZWdhdGl2ZQkAzAgCAwkAZwIFCmxvY2tMZW5ndGgAAAYJAQh0aHJvd0VycgECHmxvY2sgbGVuZ3RoIGNhbm5vdCBiZSBuZWdhdGl2ZQUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzCQC5CQIJAMwIAgIGJWQlZCVkCQDMCAIJAKQDAQUNdmVzdGluZ0Ftb3VudAkAzAgCCQCkAwEFCnN0YXJ0QmxvY2sJAMwIAgkApAMBBQpsb2NrTGVuZ3RoBQNuaWwFA1NFUAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEQcGFyc2VVc2VyVmVzdGluZwILdXNlckFkZHJlc3MCaWQEByRtYXRjaDAJAJ0IAgUEdGhpcwkBDmtleVVzZXJWZXN0aW5nAgULdXNlckFkZHJlc3MFAmlkAwkAAQIFByRtYXRjaDACBlN0cmluZwQJcmF3U3RyaW5nBQckbWF0Y2gwBAtzcGxpdFN0cmluZwkAtQkCBQlyYXdTdHJpbmcFA1NFUAQNdmVzdGluZ0Ftb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC3NwbGl0U3RyaW5nAAEECnN0YXJ0QmxvY2sJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtzcGxpdFN0cmluZwACBApsb2NrTGVuZ3RoCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULc3BsaXRTdHJpbmcAAwkAlQoDBQ12ZXN0aW5nQW1vdW50BQpzdGFydEJsb2NrBQpsb2NrTGVuZ3RoCQCVCgMAAAAAAAABEmNhbGNVbmxvY2tlZEFtb3VudAMGYW1vdW50CnN0YXJ0QmxvY2sKbG9ja0xlbmd0aAQNZWxhcHNlZEJsb2NrcwkAZQIFBmhlaWdodAUKc3RhcnRCbG9jawQOdW5sb2NrZWRBbW91bnQDAwkBAiE9AgUKbG9ja0xlbmd0aAAACQBmAgUNZWxhcHNlZEJsb2NrcwAABwkAlwMBCQDMCAIJAGsDBQZhbW91bnQFDWVsYXBzZWRCbG9ja3MFCmxvY2tMZW5ndGgJAMwIAgUGYW1vdW50BQNuaWwAAAkAlAoCBQ51bmxvY2tlZEFtb3VudAkAZQIFBmFtb3VudAUOdW5sb2NrZWRBbW91bnQBFWdldFVzZXJVbmxvY2tlZEFtb3VudAILdXNlckFkZHJlc3MCaWQECyR0MDIyMzIyMzExCQEQcGFyc2VVc2VyVmVzdGluZwIFC3VzZXJBZGRyZXNzBQJpZAQNdmVzdGluZ0Ftb3VudAgFCyR0MDIyMzIyMzExAl8xBApzdGFydEJsb2NrCAULJHQwMjIzMjIzMTECXzIECmxvY2tMZW5ndGgIBQskdDAyMjMyMjMxMQJfMwQLJHQwMjMxNDI0MTEJARJjYWxjVW5sb2NrZWRBbW91bnQDBQ12ZXN0aW5nQW1vdW50BQpzdGFydEJsb2NrBQpsb2NrTGVuZ3RoBA51bmxvY2tlZEFtb3VudAgFCyR0MDIzMTQyNDExAl8xBA9yZW1haW5pbmdBbW91bnQIBQskdDAyMzE0MjQxMQJfMgkAlAoCBQ51bmxvY2tlZEFtb3VudAUPcmVtYWluaW5nQW1vdW50ARNnZXRVc2VyQ2xhaW1BY3Rpb25zAgt1c2VyQWRkcmVzcwJpZAQLJHQwMjUxNDI1OTMJARBwYXJzZVVzZXJWZXN0aW5nAgULdXNlckFkZHJlc3MFAmlkBA12ZXN0aW5nQW1vdW50CAULJHQwMjUxNDI1OTMCXzEECnN0YXJ0QmxvY2sIBQskdDAyNTE0MjU5MwJfMgQKbG9ja0xlbmd0aAgFCyR0MDI1MTQyNTkzAl8zBAskdDAyNTk2MjY3NAkBFWdldFVzZXJVbmxvY2tlZEFtb3VudAIFC3VzZXJBZGRyZXNzBQJpZAQOdW5sb2NrZWRBbW91bnQIBQskdDAyNTk2MjY3NAJfMQQPcmVtYWluaW5nQW1vdW50CAULJHQwMjU5NjI2NzQCXzIED3JlbWFpbmluZ0Jsb2NrcwkAlgMBCQDMCAIJAGUCCQBkAgUKc3RhcnRCbG9jawUKbG9ja0xlbmd0aAUGaGVpZ2h0CQDMCAIAAAUDbmlsAwkBAiE9AgUOdW5sb2NrZWRBbW91bnQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQt1c2VyQWRkcmVzcwUOdW5sb2NrZWRBbW91bnQFDGFzc2V0SWRCeXRlcwkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5VXNlclZlc3RpbmcCBQt1c2VyQWRkcmVzcwUCaWQJARFmb3JtYXRVc2VyVmVzdGluZwMFD3JlbWFpbmluZ0Ftb3VudAUGaGVpZ2h0BQ9yZW1haW5pbmdCbG9ja3MFA25pbAUDbmlsARRnZXROZXdWZXN0aW5nQWN0aW9ucwULdXNlckFkZHJlc3MCaWQNdmVzdGluZ0Ftb3VudApzdGFydEJsb2NrCmxvY2tMZW5ndGgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVVzZXJWZXN0aW5nAgULdXNlckFkZHJlc3MFAmlkCQERZm9ybWF0VXNlclZlc3RpbmcDBQ12ZXN0aW5nQW1vdW50BQpzdGFydEJsb2NrBQpsb2NrTGVuZ3RoBQNuaWwBAWkBA2ZvbwQLdXNlckFkZHJlc3MNdmVzdGluZ0Ftb3VudApzdGFydEJsb2NrCmxvY2tMZW5ndGgJARRnZXROZXdWZXN0aW5nQWN0aW9ucwUFC3VzZXJBZGRyZXNzAAAFDXZlc3RpbmdBbW91bnQFCnN0YXJ0QmxvY2sFCmxvY2tMZW5ndGgAhBzUFA==", "height": 2923686, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GSC9mfg97EnYEp87iPYPW5RJbNhk2CWo1hi1Jee3Jrgd Next: 8bP92YyAG111dLAhgnToJPZjydh7iYjARKyp4D5U7JsK Diff:
OldNewDifferences
1818 then unit
1919 else fromBase58String(assetIdString)
2020
21-func keyUserVesting (userAddress,id) = makeString(["%s%d", userAddress, toString(id)], SEP)
21+func isValidAddressString (addressString) = match addressFromString(addressString) {
22+ case a: Address =>
23+ true
24+ case _ =>
25+ false
26+}
27+
28+
29+func keyUserVesting (userAddress,id) = {
30+ let checks = [if (isValidAddressString(userAddress))
31+ then true
32+ else throwErr(makeString(["address is not valid:", userAddress], " ")), if (if ((id >= 0))
33+ then (MAX_VESTING_COUNT > id)
34+ else false)
35+ then true
36+ else throwErr(makeString(["id is invalid:", toString(id)], " "))]
37+ if ((checks == checks))
38+ then makeString(["%s%d", userAddress, toString(id)], SEP)
39+ else throw("Strict value is not equal to itself.")
40+ }
2241
2342
2443 func formatUserVesting (vestingAmount,startBlock,lockLength) = {
5978
6079
6180 func getUserUnlockedAmount (userAddress,id) = {
62- let $t018281907 = parseUserVesting(userAddress, id)
63- let vestingAmount = $t018281907._1
64- let startBlock = $t018281907._2
65- let lockLength = $t018281907._3
66- let $t019102007 = calcUnlockedAmount(vestingAmount, startBlock, lockLength)
67- let unlockedAmount = $t019102007._1
68- let remainingAmount = $t019102007._2
81+ let $t022322311 = parseUserVesting(userAddress, id)
82+ let vestingAmount = $t022322311._1
83+ let startBlock = $t022322311._2
84+ let lockLength = $t022322311._3
85+ let $t023142411 = calcUnlockedAmount(vestingAmount, startBlock, lockLength)
86+ let unlockedAmount = $t023142411._1
87+ let remainingAmount = $t023142411._2
6988 $Tuple2(unlockedAmount, remainingAmount)
7089 }
7190
7291
73-func getUserClaimChanges (userAddress,id) = {
74- let $t021102189 = parseUserVesting(userAddress, id)
75- let vestingAmount = $t021102189._1
76- let startBlock = $t021102189._2
77- let lockLength = $t021102189._3
78- let $t021922270 = getUserUnlockedAmount(userAddress, id)
79- let unlockedAmount = $t021922270._1
80- let remainingAmount = $t021922270._2
92+func getUserClaimActions (userAddress,id) = {
93+ let $t025142593 = parseUserVesting(userAddress, id)
94+ let vestingAmount = $t025142593._1
95+ let startBlock = $t025142593._2
96+ let lockLength = $t025142593._3
97+ let $t025962674 = getUserUnlockedAmount(userAddress, id)
98+ let unlockedAmount = $t025962674._1
99+ let remainingAmount = $t025962674._2
81100 let remainingBlocks = max([((startBlock + lockLength) - height), 0])
82101 if ((unlockedAmount != 0))
83102 then [ScriptTransfer(addressFromStringValue(userAddress), unlockedAmount, assetIdBytes), StringEntry(keyUserVesting(userAddress, id), formatUserVesting(remainingAmount, height, remainingBlocks))]
85104 }
86105
87106
107+func getNewVestingActions (userAddress,id,vestingAmount,startBlock,lockLength) = [StringEntry(keyUserVesting(userAddress, id), formatUserVesting(vestingAmount, startBlock, lockLength))]
108+
109+
110+@Callable(i)
111+func foo (userAddress,vestingAmount,startBlock,lockLength) = getNewVestingActions(userAddress, 0, vestingAmount, startBlock, lockLength)
112+
88113
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let contractFile = "vesting_neo.ride"
55
66 let SEP = "__"
77
88 let MAX_VESTING_COUNT = 100
99
1010 func throwErr (msg) = throw(((contractFile + ": ") + msg))
1111
1212
1313 let keyAssetId = makeString(["%s", "assetId"], SEP)
1414
1515 let assetIdString = valueOrElse(getString(this, keyAssetId), "WAVES")
1616
1717 let assetIdBytes = if ((assetIdString == "WAVES"))
1818 then unit
1919 else fromBase58String(assetIdString)
2020
21-func keyUserVesting (userAddress,id) = makeString(["%s%d", userAddress, toString(id)], SEP)
21+func isValidAddressString (addressString) = match addressFromString(addressString) {
22+ case a: Address =>
23+ true
24+ case _ =>
25+ false
26+}
27+
28+
29+func keyUserVesting (userAddress,id) = {
30+ let checks = [if (isValidAddressString(userAddress))
31+ then true
32+ else throwErr(makeString(["address is not valid:", userAddress], " ")), if (if ((id >= 0))
33+ then (MAX_VESTING_COUNT > id)
34+ else false)
35+ then true
36+ else throwErr(makeString(["id is invalid:", toString(id)], " "))]
37+ if ((checks == checks))
38+ then makeString(["%s%d", userAddress, toString(id)], SEP)
39+ else throw("Strict value is not equal to itself.")
40+ }
2241
2342
2443 func formatUserVesting (vestingAmount,startBlock,lockLength) = {
2544 let checks = [if ((vestingAmount >= 0))
2645 then true
2746 else throwErr("vesting amount cannot be negative"), if ((startBlock >= 0))
2847 then true
2948 else throwErr("start block cannot be negative"), if ((lockLength >= 0))
3049 then true
3150 else throwErr("lock length cannot be negative")]
3251 if ((checks == checks))
3352 then makeString(["%d%d%d", toString(vestingAmount), toString(startBlock), toString(lockLength)], SEP)
3453 else throw("Strict value is not equal to itself.")
3554 }
3655
3756
3857 func parseUserVesting (userAddress,id) = match getString(this, keyUserVesting(userAddress, id)) {
3958 case rawString: String =>
4059 let splitString = split(rawString, SEP)
4160 let vestingAmount = parseIntValue(splitString[1])
4261 let startBlock = parseIntValue(splitString[2])
4362 let lockLength = parseIntValue(splitString[3])
4463 $Tuple3(vestingAmount, startBlock, lockLength)
4564 case _ =>
4665 $Tuple3(0, 0, 0)
4766 }
4867
4968
5069 func calcUnlockedAmount (amount,startBlock,lockLength) = {
5170 let elapsedBlocks = (height - startBlock)
5271 let unlockedAmount = if (if ((lockLength != 0))
5372 then (elapsedBlocks > 0)
5473 else false)
5574 then min([fraction(amount, elapsedBlocks, lockLength), amount])
5675 else 0
5776 $Tuple2(unlockedAmount, (amount - unlockedAmount))
5877 }
5978
6079
6180 func getUserUnlockedAmount (userAddress,id) = {
62- let $t018281907 = parseUserVesting(userAddress, id)
63- let vestingAmount = $t018281907._1
64- let startBlock = $t018281907._2
65- let lockLength = $t018281907._3
66- let $t019102007 = calcUnlockedAmount(vestingAmount, startBlock, lockLength)
67- let unlockedAmount = $t019102007._1
68- let remainingAmount = $t019102007._2
81+ let $t022322311 = parseUserVesting(userAddress, id)
82+ let vestingAmount = $t022322311._1
83+ let startBlock = $t022322311._2
84+ let lockLength = $t022322311._3
85+ let $t023142411 = calcUnlockedAmount(vestingAmount, startBlock, lockLength)
86+ let unlockedAmount = $t023142411._1
87+ let remainingAmount = $t023142411._2
6988 $Tuple2(unlockedAmount, remainingAmount)
7089 }
7190
7291
73-func getUserClaimChanges (userAddress,id) = {
74- let $t021102189 = parseUserVesting(userAddress, id)
75- let vestingAmount = $t021102189._1
76- let startBlock = $t021102189._2
77- let lockLength = $t021102189._3
78- let $t021922270 = getUserUnlockedAmount(userAddress, id)
79- let unlockedAmount = $t021922270._1
80- let remainingAmount = $t021922270._2
92+func getUserClaimActions (userAddress,id) = {
93+ let $t025142593 = parseUserVesting(userAddress, id)
94+ let vestingAmount = $t025142593._1
95+ let startBlock = $t025142593._2
96+ let lockLength = $t025142593._3
97+ let $t025962674 = getUserUnlockedAmount(userAddress, id)
98+ let unlockedAmount = $t025962674._1
99+ let remainingAmount = $t025962674._2
81100 let remainingBlocks = max([((startBlock + lockLength) - height), 0])
82101 if ((unlockedAmount != 0))
83102 then [ScriptTransfer(addressFromStringValue(userAddress), unlockedAmount, assetIdBytes), StringEntry(keyUserVesting(userAddress, id), formatUserVesting(remainingAmount, height, remainingBlocks))]
84103 else nil
85104 }
86105
87106
107+func getNewVestingActions (userAddress,id,vestingAmount,startBlock,lockLength) = [StringEntry(keyUserVesting(userAddress, id), formatUserVesting(vestingAmount, startBlock, lockLength))]
108+
109+
110+@Callable(i)
111+func foo (userAddress,vestingAmount,startBlock,lockLength) = getNewVestingActions(userAddress, 0, vestingAmount, startBlock, lockLength)
112+
88113

github/deemru/w8io/169f3d6 
38.45 ms