tx · HfiTjrVGRkGE8zY7SYCwr57oyRWD6tjRhgGXt6oLSb8B

3N8wRE9tq89N5SobanYnQjkt3B4FV4Xrwyg:  -0.00200000 Waves

2025.03.20 11:01 [3552110] smart account 3N8wRE9tq89N5SobanYnQjkt3B4FV4Xrwyg > SELF 0.00000000 Waves

{ "type": 13, "id": "HfiTjrVGRkGE8zY7SYCwr57oyRWD6tjRhgGXt6oLSb8B", "fee": 200000, "feeAssetId": null, "timestamp": 1742457725479, "version": 1, "sender": "3N8wRE9tq89N5SobanYnQjkt3B4FV4Xrwyg", "senderPublicKey": "9d3TkbCQgSgxHhod7UjRN4uuNmKaBp8jz2zJ6DaYPh5Q", "proofs": [ "41jMmK89HkporcC4WnsYboqgePeSpQgTyZG82G672XTsHtuNqP2F31EkjdUNPk4r2JbeKx6yvyh6H2tKz1MUmAMq" ], "script": "base64:BwILCAISBwoFCAgIAQENAANTRVACAl9fAAt3YXZlc1N0cmluZwIFV0FWRVMAEGNvbnRyYWN0RmlsZW5hbWUCE3RyYW5zZmVyLXByb3h5LnJpZGUBB3dyYXBFcnIBAXMJAKwCAgkArAICBRBjb250cmFjdEZpbGVuYW1lAgI6IAUBcwEIdGhyb3dFcnIBAXMJAAIBCQEHd3JhcEVycgEFAXMAE2tleUFsbG93ZWRBZGRyZXNzZXMJALkJAgkAzAgCAgIlcwkAzAgCAhBhbGxvd2VkQWRkcmVzc2VzBQNuaWwFA1NFUAEHa2V5VHhJZAEKdHJhbnNmZXJJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgICdHgJAMwIAgUKdHJhbnNmZXJJZAUDbmlsBQNTRVABCmtleUludm9pY2UBCnRyYW5zZmVySWQJALkJAgkAzAgCAgQlcyVzCQDMCAICB2ludm9pY2UJAMwIAgUKdHJhbnNmZXJJZAUDbmlsBQNTRVABCXR4SWRWYWx1ZQEEdHhJZAkAuQkCCQDMCAICAiVzCQDMCAIFBHR4SWQFA25pbAUDU0VQAQxpbnZvaWNlVmFsdWUEBWFzc2V0BmFtb3VudAVwcmljZQl0aW1lc3RhbXAEDGFtb3VudFN0cmluZwkApAMBBQZhbW91bnQEC3ByaWNlU3RyaW5nCQCkAwEFBXByaWNlBA90aW1lc3RhbXBTdHJpbmcJAKQDAQUJdGltZXN0YW1wCQC5CQIJAMwIAgIIJXMlZCVkJWQJAMwIAgUFYXNzZXQJAMwIAgUMYW1vdW50U3RyaW5nCQDMCAIFC3ByaWNlU3RyaW5nCQDMCAIFD3RpbWVzdGFtcFN0cmluZwUDbmlsBQNTRVABDHBhcnNlQXNzZXRJZAEFaW5wdXQDCQAAAgUFaW5wdXQFC3dhdmVzU3RyaW5nBQR1bml0CQDZBAEFBWlucHV0AQ9hc3NldElkVG9TdHJpbmcBBWlucHV0AwkAAAIFBWlucHV0BQR1bml0BQt3YXZlc1N0cmluZwkA2AQBCQEFdmFsdWUBBQVpbnB1dAEQaXNBZGRyZXNzQWxsb3dlZAEHYWRkcmVzcwQHJG1hdGNoMAkAnQgCBQR0aGlzBRNrZXlBbGxvd2VkQWRkcmVzc2VzAwkAAQIFByRtYXRjaDACBlN0cmluZwQEbGlzdAUHJG1hdGNoMAkBD2NvbnRhaW5zRWxlbWVudAIJAL0JAgUEbGlzdAUDU0VQBQdhZGRyZXNzBgEBaQEIdHJhbnNmZXIFC3RyYW5zZmVyX2lkCXJlY2lwaWVudAVhc3NldAZhbW91bnQFcHJpY2UEBmNoZWNrcwkAzAgCAwkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEHa2V5VHhJZAEFC3RyYW5zZmVyX2lkBgkBCHRocm93RXJyAQIbdHJhbnNmZXJfaWQgaXMgYWxyZWFkeSB1c2VkCQDMCAIDCQEQaXNBZGRyZXNzQWxsb3dlZAEJAKUIAQgFAWkGY2FsbGVyBgkBCHRocm93RXJyAQIdY2FsbGVyIGFkZHJlc3MgaXMgbm90IGFsbG93ZWQFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQFYmxvY2sJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7QcBBQZoZWlnaHQJAQd3cmFwRXJyAQIYY291bGQgbm90IGdldCBibG9jayBpbmZvBBByZWNpcGllbnRBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBQlyZWNpcGllbnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUQcmVjaXBpZW50QWRkcmVzcwUGYW1vdW50CQEMcGFyc2VBc3NldElkAQUFYXNzZXQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB2tleVR4SWQBBQt0cmFuc2Zlcl9pZAkBCXR4SWRWYWx1ZQEJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkAzAgCCQELU3RyaW5nRW50cnkCCQEKa2V5SW52b2ljZQEFC3RyYW5zZmVyX2lkCQEMaW52b2ljZVZhbHVlBAUFYXNzZXQFBmFtb3VudAUFcHJpY2UIBQVibG9jawl0aW1lc3RhbXAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAHRVfr", "chainId": 84, "height": 3552110, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CadguC9YBFgqWqkyTnXgW54pcJwVhrrGSo3ABFsG5nV7 Next: 2zVxGvoHZ4njdyLtCoUJUroiUa8CTFhABn56AwP9tm3D Diff:
OldNewDifferences
1212
1313 func throwErr (s) = throw(wrapErr(s))
1414
15+
16+let keyAllowedAddresses = makeString(["%s", "allowedAddresses"], SEP)
1517
1618 func keyTxId (transferId) = makeString(["%s%s", "tx", transferId], SEP)
1719
4042 else toBase58String(value(input))
4143
4244
45+func isAddressAllowed (address) = match getString(this, keyAllowedAddresses) {
46+ case list: String =>
47+ containsElement(split_51C(list, SEP), address)
48+ case _ =>
49+ true
50+}
51+
52+
4353 @Callable(i)
4454 func transfer (transfer_id,recipient,asset,amount,price) = {
4555 let checks = [if (!(isDefined(getString(keyTxId(transfer_id)))))
4656 then true
47- else throwErr("transfer_id is already used")]
57+ else throwErr("transfer_id is already used"), if (isAddressAllowed(toString(i.caller)))
58+ then true
59+ else throwErr("caller address is not allowed")]
4860 if ((checks == checks))
4961 then {
5062 let block = valueOrErrorMessage(blockInfoByHeight(height), wrapErr("could not get block info"))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 7 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let wavesString = "WAVES"
77
88 let contractFilename = "transfer-proxy.ride"
99
1010 func wrapErr (s) = ((contractFilename + ": ") + s)
1111
1212
1313 func throwErr (s) = throw(wrapErr(s))
1414
15+
16+let keyAllowedAddresses = makeString(["%s", "allowedAddresses"], SEP)
1517
1618 func keyTxId (transferId) = makeString(["%s%s", "tx", transferId], SEP)
1719
1820
1921 func keyInvoice (transferId) = makeString(["%s%s", "invoice", transferId], SEP)
2022
2123
2224 func txIdValue (txId) = makeString(["%s", txId], SEP)
2325
2426
2527 func invoiceValue (asset,amount,price,timestamp) = {
2628 let amountString = toString(amount)
2729 let priceString = toString(price)
2830 let timestampString = toString(timestamp)
2931 makeString(["%s%d%d%d", asset, amountString, priceString, timestampString], SEP)
3032 }
3133
3234
3335 func parseAssetId (input) = if ((input == wavesString))
3436 then unit
3537 else fromBase58String(input)
3638
3739
3840 func assetIdToString (input) = if ((input == unit))
3941 then wavesString
4042 else toBase58String(value(input))
4143
4244
45+func isAddressAllowed (address) = match getString(this, keyAllowedAddresses) {
46+ case list: String =>
47+ containsElement(split_51C(list, SEP), address)
48+ case _ =>
49+ true
50+}
51+
52+
4353 @Callable(i)
4454 func transfer (transfer_id,recipient,asset,amount,price) = {
4555 let checks = [if (!(isDefined(getString(keyTxId(transfer_id)))))
4656 then true
47- else throwErr("transfer_id is already used")]
57+ else throwErr("transfer_id is already used"), if (isAddressAllowed(toString(i.caller)))
58+ then true
59+ else throwErr("caller address is not allowed")]
4860 if ((checks == checks))
4961 then {
5062 let block = valueOrErrorMessage(blockInfoByHeight(height), wrapErr("could not get block info"))
5163 let recipientAddress = addressFromStringValue(recipient)
5264 [ScriptTransfer(recipientAddress, amount, parseAssetId(asset)), StringEntry(keyTxId(transfer_id), txIdValue(toBase58String(i.transactionId))), StringEntry(keyInvoice(transfer_id), invoiceValue(asset, amount, price, block.timestamp))]
5365 }
5466 else throw("Strict value is not equal to itself.")
5567 }
5668
5769

github/deemru/w8io/169f3d6 
16.41 ms