Peraturanexchange.IO("decode", ...)
fungsi dipanggil dengan cara yang digunakan untuk dekoding.
Peraturanexchange.IO("decode", ...)
fungsi mengembalikan data yang didekode. Mengembalikan string ketika hanya ada satu data yang ditentukan olehdataFormat
Mengembalikan array ketika ada lebih dari satu data yang ditentukan olehdataFormat
Parameter.
arrayćstring
exchange.IO(k, data)
Peraturank
parameter digunakan untuk mengatur fungsi dariexchange.IO()
fungsi, dan mengaturnya ke"decode"
berarti bahwa fungsi digunakan untuk dekoding data.
k
benar
string
PeraturandataFormat
Parameter digunakan untuk menentukan jenis dan urutan data yang didekode.
dataFormat
benar
string
Peraturandata
Parameter digunakan untuk mengatur data yang akan didekode.
data
benar
string
function main() {
var types = "tuple(a uint256,b uint8,c address),bytes"
var ret = exchange.IO("encode", types, {
a: 30,
b: 20,
c: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
}, "0011")
Log("encode: ", ret)
var rawData = exchange.IO("decode", types, ret)
Log("decode:", rawData)
}
Operasi terbalik dariexchange.IO("encode", ...)
Fungsi:
function main() {
// register SwapRouter02 abi
var walletAddress = "0x398a93ca23CBdd2642a07445bCD2b8435e0a373f"
var routerAddress = "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45"
var abi = `[{"inputs":[{"components":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMaximum","type":"uint256"}],"internalType":"struct IV3SwapRouter.ExactOutputParams","name":"params","type":"tuple"}],"name":"exactOutput","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"}]`
exchange.IO("abi", routerAddress, abi) // abi only uses the contents of the local exactOutput method, the full abi can be searched on the Internet
// encode path
var fee = exchange.IO("encodePacked", "uint24", 3000)
var tokenInAddress = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
var tokenOutAddress = "0xdac17f958d2ee523a2206206994597c13d831ec7"
var path = tokenInAddress.slice(2).toLowerCase()
path += fee + tokenOutAddress.slice(2).toLowerCase()
Log("path:", path)
var dataTuple = {
"path" : path,
"recipient" : walletAddress,
"amountOut" : 1000,
"amountInMaximum" : 1,
}
// encode SwapRouter02 exactOutput
var rawData = exchange.IO("encode", routerAddress, "exactOutput", dataTuple)
Log("method hash:", rawData.slice(0, 8)) // 09b81346
Log("params hash:", rawData.slice(8))
// decode exactOutput params
var decodeRaw = exchange.IO("decode", "tuple(path bytes,recipient address,amountOut uint256,amountInMaximum uint256)", rawData.slice(8))
Log("decodeRaw:", decodeRaw)
}
Contoh berikut pertama melakukanencodePacked
operasi padapath
proses parameter, karenaexactOutput
panggilan metode yang perlu dikodekan kemudian membutuhkanpath
sebagai parameter. Kemudianencode
yangexactOutput
metode kontrak rute, yang hanya memiliki satu parameter jenistuple
. Nama metodeexactOutput
dikodekan sebagai:0x09b81346
, dan menggunakanexchange.IO("decode", ...)
metode untuk mendekode hasildecodeRaw
, konsisten dengan variabeldataTuple
.
Untuk pengolahan data,exchange.IO()
fungsi mendukung tidak hanya pengkodean, tetapi juga dekodean.