tx · ekrk3RoaYGx5v5Sm47tvYU1fNAuUmsg9N85pwhynBd3

3N91zFrRoofbPpkoDbWKrQsQSdLu2EgLL8c:  -0.01000000 Waves

2023.10.23 15:18 [2811243] smart account 3N91zFrRoofbPpkoDbWKrQsQSdLu2EgLL8c > SELF 0.00000000 Waves

{ "type": 13, "id": "ekrk3RoaYGx5v5Sm47tvYU1fNAuUmsg9N85pwhynBd3", "fee": 1000000, "feeAssetId": null, "timestamp": 1698063557163, "version": 2, "chainId": 84, "sender": "3N91zFrRoofbPpkoDbWKrQsQSdLu2EgLL8c", "senderPublicKey": "5FyjUYCR5Q8jvG6ri6Ysz574HerUK6r1LJzzQ7DvSkLk", "proofs": [ "8g2PBmSCgLE8emHD7Vaxy5Fvq1Z5GLzNN1ZcV653aSuSMtMNnqqPnobRmbNa6yBUwvqzrVqNDUYspcgUkwdvKJY" ], "script": "base64:BgIWCAISBgoEAgICARIECgICAhIECgIIAhoACXNlcGFyYXRvcgICX18AB2NoYWluSWQJAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEACGNoYWluSWRUAQFUAAhjaGFpbklkVwEBVwELbXVzdEFkZHJlc3MCAWkHYWRkcmVzcwMJAAACCAUBaQZjYWxsZXIFB2FkZHJlc3MGCQACAQIRcGVybWlzc2lvbiBkZW5pZWQBCG11c3RUaGlzAQFpCQELbXVzdEFkZHJlc3MCBQFpBQR0aGlzABFrU2VydmljZVB1YmxpY0tleQIUJXNfX3NlcnZpY2VQdWJsaWNLZXkADWtCb3RQdWJsaWNLZXkCECVzX19ib3RQdWJsaWNLZXkADmtBY2NvdW50U2NyaXB0AhElc19fYWNjb3VudFNjcmlwdAENYWNjb3VudFNjcmlwdAAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQR0aGlzBQ5rQWNjb3VudFNjcmlwdAIZYWNjb3VudCBzY3JpcHQgaXMgbm90IHNldAANa1Jld2FyZEFtb3VudAIQJXNfX3Jld2FyZEFtb3VudAEMcmV3YXJkQW1vdW50AAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMFDWtSZXdhcmRBbW91bnQCGHJld2FyZCBhbW91bnQgaXMgbm90IHNldAAUQUNDT1VOVF9TVEFUVVNfRU1QVFkAAAAUQUNDT1VOVF9TVEFUVVNfUkVBRFkAAQEOa0FjY291bnRTdGF0dXMBCWFjY291bnRJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgUJYWNjb3VudElkCQDMCAICBnN0YXR1cwUDbmlsBQlzZXBhcmF0b3IBDWFjY291bnRTdGF0dXMBCWFjY291bnRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMJAQ5rQWNjb3VudFN0YXR1cwEFCWFjY291bnRJZAIUYWNjb3VudCBpcyBub3QgZm91bmQBGGtBY2NvdW50Q3JlYXRvclB1YmxpY0tleQEJYWNjb3VudElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCBQlhY2NvdW50SWQJAMwIAgIQY3JlYXRvclB1YmxpY0tleQUDbmlsBQlzZXBhcmF0b3IBFmtBY2NvdW50T3duZXJQdWJsaWNLZXkBCWFjY291bnRJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgUJYWNjb3VudElkCQDMCAICDm93bmVyUHVibGljS2V5BQNuaWwFCXNlcGFyYXRvcgEVa0FjY291bnRBbW91bnRBc3NldElkAQlhY2NvdW50SWQJALkJAgkAzAgCAgQlcyVzCQDMCAIFCWFjY291bnRJZAkAzAgCAg1hbW91bnRBc3NldElkBQNuaWwFCXNlcGFyYXRvcgEUa0FjY291bnRQcmljZUFzc2V0SWQBCWFjY291bnRJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgUJYWNjb3VudElkCQDMCAICDHByaWNlQXNzZXRJZAUDbmlsBQlzZXBhcmF0b3IBHGtBY2NvdW50SWRUb0FjY291bnRQdWJsaWNLZXkBCWFjY291bnRJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgUJYWNjb3VudElkCQDMCAICG2FjY291bnRJZFRvQWNjb3VudFB1YmxpY0tleQUDbmlsBQlzZXBhcmF0b3IBGmtBY2NvdW50QWRkcmVzc1RvQWNjb3VudElkAQ5hY2NvdW50QWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgkApQgBBQ5hY2NvdW50QWRkcmVzcwkAzAgCAhlhY2NvdW50QWRkcmVzc1RvQWNjb3VudElkBQNuaWwFCXNlcGFyYXRvcgEMa1BhaXJBbGxvd2VkAg1hbW91bnRBc3NldElkDHByaWNlQXNzZXRJZAkAuQkCCQDMCAICBiVzJXMlcwkAzAgCCQDYBAEFDWFtb3VudEFzc2V0SWQJAMwIAgkA2AQBBQxwcmljZUFzc2V0SWQJAMwIAgILcGFpckFsbG93ZWQFA25pbAUJc2VwYXJhdG9yAQtwYWlyQWxsb3dlZAINYW1vdW50QXNzZXRJZAxwcmljZUFzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwkBDGtQYWlyQWxsb3dlZAIFDWFtb3VudEFzc2V0SWQFDHByaWNlQXNzZXRJZAcADnNlcnZpY2VBZGRyZXNzCQCnCAEJARFAZXh0ck5hdGl2ZSgxMDUyKQIFBHRoaXMFEWtTZXJ2aWNlUHVibGljS2V5AAxib3RQdWJsaWNLZXkJARFAZXh0ck5hdGl2ZSgxMDUyKQIFBHRoaXMFDWtCb3RQdWJsaWNLZXkDAWkBBGluaXQEEHNlcnZpY2VQdWJsaWNLZXkMYm90UHVibGljS2V5DWFjY291bnRTY3JpcHQMcmV3YXJkQW1vdW50BAtjaGVja0NhbGxlcgkBCG11c3RUaGlzAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIJAJQKAgkAzAgCCQELQmluYXJ5RW50cnkCBRFrU2VydmljZVB1YmxpY0tleQUQc2VydmljZVB1YmxpY0tleQkAzAgCCQELQmluYXJ5RW50cnkCBQ1rQm90UHVibGljS2V5BQxib3RQdWJsaWNLZXkJAMwIAgkBC0JpbmFyeUVudHJ5AgUOa0FjY291bnRTY3JpcHQFDWFjY291bnRTY3JpcHQJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtSZXdhcmRBbW91bnQFDHJld2FyZEFtb3VudAUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB3JlcXVlc3QCDWFtb3VudEFzc2V0SWQMcHJpY2VBc3NldElkBAlhY2NvdW50SWQJANgEAQkA9wMBCQDLAQIJAMsBAggIBQFpBmNhbGxlcgVieXRlcwUNYW1vdW50QXNzZXRJZAUMcHJpY2VBc3NldElkBAZjaGVja3MJAMwIAgMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEGCQACAQIVMSBwYXltZW50IGlzIHJlcXVpcmVkCQDMCAIDCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQR1bml0BgkAAgECDWludmFsaWQgYXNzZXQJAMwIAgMJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkBDHJld2FyZEFtb3VudAAGCQACAQIOaW52YWxpZCBhbW91bnQJAMwIAgMJAQtwYWlyQWxsb3dlZAIFDWFtb3VudEFzc2V0SWQFDHByaWNlQXNzZXRJZAYJAAIBAhNwYWlyIGlzIG5vdCBhbGxvd2VkCQDMCAIDCQAAAgkAmggCBQR0aGlzCQEOa0FjY291bnRTdGF0dXMBBQlhY2NvdW50SWQFBHVuaXQGCQACAQIWYWNjb3VudCBhbHJlYWR5IGV4aXN0cwUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ5rQWNjb3VudFN0YXR1cwEFCWFjY291bnRJZAAACQDMCAIJAQtCaW5hcnlFbnRyeQIJARZrQWNjb3VudE93bmVyUHVibGljS2V5AQUJYWNjb3VudElkCAUBaQ9jYWxsZXJQdWJsaWNLZXkJAMwIAgkBC0JpbmFyeUVudHJ5AgkBFWtBY2NvdW50QW1vdW50QXNzZXRJZAEFCWFjY291bnRJZAUNYW1vdW50QXNzZXRJZAkAzAgCCQELQmluYXJ5RW50cnkCCQEUa0FjY291bnRQcmljZUFzc2V0SWQBBQlhY2NvdW50SWQFDHByaWNlQXNzZXRJZAUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCGNvbXBsZXRlAglhY2NvdW50SWQQY3JlYXRvclB1YmxpY0tleQQQYWNjb3VudFB1YmxpY0tleQgFAWkPY2FsbGVyUHVibGljS2V5BA5hY2NvdW50QWRkcmVzcwgFAWkGY2FsbGVyBAZjaGVja3MJAMwIAgMJAAACCQENYWNjb3VudFN0YXR1cwEFCWFjY291bnRJZAUUQUNDT1VOVF9TVEFUVVNfRU1QVFkGCQACAQIZYWNjb3VudCBpcyBhbHJlYWR5IGV4aXN0cwkAzAgCAwQHJG1hdGNoMAkA8QcBBQ5hY2NvdW50QWRkcmVzcwMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQAAAgUBYgkA8RUBCQENYWNjb3VudFNjcmlwdAAHBgkAAgECDmludmFsaWQgc2NyaXB0BQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEDmNyZWF0b3JBZGRyZXNzCQCnCAEFEGNyZWF0b3JQdWJsaWNLZXkJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDmtBY2NvdW50U3RhdHVzAQUJYWNjb3VudElkBRRBQ0NPVU5UX1NUQVRVU19SRUFEWQkAzAgCCQELQmluYXJ5RW50cnkCCQEYa0FjY291bnRDcmVhdG9yUHVibGljS2V5AQUJYWNjb3VudElkBRBjcmVhdG9yUHVibGljS2V5CQDMCAIJAQtCaW5hcnlFbnRyeQIJARxrQWNjb3VudElkVG9BY2NvdW50UHVibGljS2V5AQUJYWNjb3VudElkBRBhY2NvdW50UHVibGljS2V5CQDMCAIJAQtTdHJpbmdFbnRyeQIJARprQWNjb3VudEFkZHJlc3NUb0FjY291bnRJZAEFDmFjY291bnRBZGRyZXNzBQlhY2NvdW50SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUOY3JlYXRvckFkZHJlc3MJAQxyZXdhcmRBbW91bnQABQR1bml0BQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4At2KY4A==", "height": 2811243, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4veqf1rKZj98VkW5eHW4Xpq45bP1axVAgNLFxRCMHqDy Next: 7t3hKbDaEDscitJVr4p2E8VYHPpHPdBu2XdTzHaHbpfw Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let separator = "__"
55
6+let chainId = take(drop(this.bytes, 1), 1)
7+
8+let chainIdT = base58'2T'
9+
10+let chainIdW = base58'2W'
11+
612 func mustAddress (i,address) = if ((i.caller == address))
713 then true
8- else throw()
14+ else throw("permission denied")
915
1016
1117 func mustThis (i) = mustAddress(i, this)
5359 func kAccountAddressToAccountId (accountAddress) = makeString(["%s%s", toString(accountAddress), "accountAddressToAccountId"], separator)
5460
5561
62+func kPairAllowed (amountAssetId,priceAssetId) = makeString(["%s%s%s", toBase58String(amountAssetId), toBase58String(priceAssetId), "pairAllowed"], separator)
63+
64+
65+func pairAllowed (amountAssetId,priceAssetId) = valueOrElse(getBoolean(this, kPairAllowed(amountAssetId, priceAssetId)), false)
66+
67+
5668 let serviceAddress = addressFromPublicKey(getBinaryValue(this, kServicePublicKey))
5769
5870 let botPublicKey = getBinaryValue(this, kBotPublicKey)
7688 then true
7789 else throw("invalid asset"), if ((i.payments[0].amount == rewardAmount()))
7890 then true
79- else throw("invalid amount"), if ((getInteger(this, kAccountStatus(accountId)) == unit))
91+ else throw("invalid amount"), if (pairAllowed(amountAssetId, priceAssetId))
92+ then true
93+ else throw("pair is not allowed"), if ((getInteger(this, kAccountStatus(accountId)) == unit))
8094 then true
8195 else throw("account already exists")]
8296 if ((checks == checks))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let separator = "__"
55
6+let chainId = take(drop(this.bytes, 1), 1)
7+
8+let chainIdT = base58'2T'
9+
10+let chainIdW = base58'2W'
11+
612 func mustAddress (i,address) = if ((i.caller == address))
713 then true
8- else throw()
14+ else throw("permission denied")
915
1016
1117 func mustThis (i) = mustAddress(i, this)
1218
1319
1420 let kServicePublicKey = "%s__servicePublicKey"
1521
1622 let kBotPublicKey = "%s__botPublicKey"
1723
1824 let kAccountScript = "%s__accountScript"
1925
2026 func accountScript () = valueOrErrorMessage(getBinary(this, kAccountScript), "account script is not set")
2127
2228
2329 let kRewardAmount = "%s__rewardAmount"
2430
2531 func rewardAmount () = valueOrErrorMessage(getInteger(this, kRewardAmount), "reward amount is not set")
2632
2733
2834 let ACCOUNT_STATUS_EMPTY = 0
2935
3036 let ACCOUNT_STATUS_READY = 1
3137
3238 func kAccountStatus (accountId) = makeString(["%s%s", accountId, "status"], separator)
3339
3440
3541 func accountStatus (accountId) = valueOrErrorMessage(getInteger(this, kAccountStatus(accountId)), "account is not found")
3642
3743
3844 func kAccountCreatorPublicKey (accountId) = makeString(["%s%s", accountId, "creatorPublicKey"], separator)
3945
4046
4147 func kAccountOwnerPublicKey (accountId) = makeString(["%s%s", accountId, "ownerPublicKey"], separator)
4248
4349
4450 func kAccountAmountAssetId (accountId) = makeString(["%s%s", accountId, "amountAssetId"], separator)
4551
4652
4753 func kAccountPriceAssetId (accountId) = makeString(["%s%s", accountId, "priceAssetId"], separator)
4854
4955
5056 func kAccountIdToAccountPublicKey (accountId) = makeString(["%s%s", accountId, "accountIdToAccountPublicKey"], separator)
5157
5258
5359 func kAccountAddressToAccountId (accountAddress) = makeString(["%s%s", toString(accountAddress), "accountAddressToAccountId"], separator)
5460
5561
62+func kPairAllowed (amountAssetId,priceAssetId) = makeString(["%s%s%s", toBase58String(amountAssetId), toBase58String(priceAssetId), "pairAllowed"], separator)
63+
64+
65+func pairAllowed (amountAssetId,priceAssetId) = valueOrElse(getBoolean(this, kPairAllowed(amountAssetId, priceAssetId)), false)
66+
67+
5668 let serviceAddress = addressFromPublicKey(getBinaryValue(this, kServicePublicKey))
5769
5870 let botPublicKey = getBinaryValue(this, kBotPublicKey)
5971
6072 @Callable(i)
6173 func init (servicePublicKey,botPublicKey,accountScript,rewardAmount) = {
6274 let checkCaller = mustThis(i)
6375 if ((checkCaller == checkCaller))
6476 then $Tuple2([BinaryEntry(kServicePublicKey, servicePublicKey), BinaryEntry(kBotPublicKey, botPublicKey), BinaryEntry(kAccountScript, accountScript), IntegerEntry(kRewardAmount, rewardAmount)], unit)
6577 else throw("Strict value is not equal to itself.")
6678 }
6779
6880
6981
7082 @Callable(i)
7183 func request (amountAssetId,priceAssetId) = {
7284 let accountId = toBase58String(sha256(((i.caller.bytes + amountAssetId) + priceAssetId)))
7385 let checks = [if ((size(i.payments) == 1))
7486 then true
7587 else throw("1 payment is required"), if ((i.payments[0].assetId == unit))
7688 then true
7789 else throw("invalid asset"), if ((i.payments[0].amount == rewardAmount()))
7890 then true
79- else throw("invalid amount"), if ((getInteger(this, kAccountStatus(accountId)) == unit))
91+ else throw("invalid amount"), if (pairAllowed(amountAssetId, priceAssetId))
92+ then true
93+ else throw("pair is not allowed"), if ((getInteger(this, kAccountStatus(accountId)) == unit))
8094 then true
8195 else throw("account already exists")]
8296 if ((checks == checks))
8397 then $Tuple2([IntegerEntry(kAccountStatus(accountId), 0), BinaryEntry(kAccountOwnerPublicKey(accountId), i.callerPublicKey), BinaryEntry(kAccountAmountAssetId(accountId), amountAssetId), BinaryEntry(kAccountPriceAssetId(accountId), priceAssetId)], unit)
8498 else throw("Strict value is not equal to itself.")
8599 }
86100
87101
88102
89103 @Callable(i)
90104 func complete (accountId,creatorPublicKey) = {
91105 let accountPublicKey = i.callerPublicKey
92106 let accountAddress = i.caller
93107 let checks = [if ((accountStatus(accountId) == ACCOUNT_STATUS_EMPTY))
94108 then true
95109 else throw("account is already exists"), if ( match scriptHash(accountAddress) {
96110 case b: ByteVector =>
97111 (b == blake2b256_32Kb(accountScript()))
98112 case _ =>
99113 false
100114 })
101115 then true
102116 else throw("invalid script")]
103117 if ((checks == checks))
104118 then {
105119 let creatorAddress = addressFromPublicKey(creatorPublicKey)
106120 $Tuple2([IntegerEntry(kAccountStatus(accountId), ACCOUNT_STATUS_READY), BinaryEntry(kAccountCreatorPublicKey(accountId), creatorPublicKey), BinaryEntry(kAccountIdToAccountPublicKey(accountId), accountPublicKey), StringEntry(kAccountAddressToAccountId(accountAddress), accountId), ScriptTransfer(creatorAddress, rewardAmount(), unit)], unit)
107121 }
108122 else throw("Strict value is not equal to itself.")
109123 }
110124
111125

github/deemru/w8io/c3f4982 
30.09 ms