Peraturanexchange.IO("decode", ...)
Fungsi dipanggil dengan cara yang digunakan untuk mendekod.
Peraturanexchange.IO("decode", ...)
fungsi mengembalikan data yang telah didekodkan. Mengembalikan rentetan apabila hanya ada satu data yang ditentukan olehdataFormat
Mengembalikan array apabila terdapat lebih daripada satu data yang ditentukan olehdataFormat
parameter.
arrayćstring
exchange.IO(k, dataFormat, data)
Peraturank
parameter digunakan untuk menetapkan fungsiexchange.IO()
fungsi, dan menetapkannya kepada"decode"
bermaksud bahawa fungsi digunakan untuk mendekod data.
k
betul
senar
PeraturandataFormat
Parameter digunakan untuk menentukan jenis dan urutan data yang didekodkan.
dataFormat
betul
senar
Perkhidmatandata
parameter digunakan untuk menetapkan data yang akan didekodkan.
data
betul
senar
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)
}
Pengoperasian terbalikexchange.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
pemprosesan parameter, keranaexactOutput
panggilan kaedah yang perlu dikodkan kemudian memerlukanpath
sebagai parameter. Kemudianencode
KesemuaexactOutput
kaedah kontrak laluan, yang hanya mempunyai satu parameter jenistuple
. Nama kaedahexactOutput
dikodkan sebagai:0x09b81346
, dan menggunakanexchange.IO("decode", ...)
kaedah untuk memecahkan kod hasildecodeRaw
, konsisten dengan pembolehubahdataTuple
.
Untuk pemprosesan data,exchange.IO()
Fungsi menyokong bukan sahaja pengekodan, tetapi juga dekod.