Sumber dimuat naik... memuat...

exchange.IO("decode",...)

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 olehdataFormatMengembalikan array apabila terdapat lebih daripada satu data yang ditentukan olehdataFormatparameter. array态string

exchange.IO(k, dataFormat, data)

Peraturankparameter digunakan untuk menetapkan fungsiexchange.IO()fungsi, dan menetapkannya kepada"decode"bermaksud bahawa fungsi digunakan untuk mendekod data. k betul senar PeraturandataFormatParameter digunakan untuk menentukan jenis dan urutan data yang didekodkan. dataFormat betul senar Perkhidmatandataparameter 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 melakukanencodePackedoperasi padapathpemprosesan parameter, keranaexactOutputpanggilan kaedah yang perlu dikodkan kemudian memerlukanpathsebagai parameter. KemudianencodeKesemuaexactOutputkaedah kontrak laluan, yang hanya mempunyai satu parameter jenistuple. Nama kaedahexactOutputdikodkan 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.

pertukaran.IO (("encodePacked",...) pertukaran.IO (("kunci",...)