Sumber daya yang dimuat... Pemuatan...

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

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 olehdataFormatMengembalikan array ketika ada lebih dari satu data yang ditentukan olehdataFormatParameter. array态string

exchange.IO(k, data)

Peraturankparameter digunakan untuk mengatur fungsi dariexchange.IO()fungsi, dan mengaturnya ke"decode"berarti bahwa fungsi digunakan untuk dekoding data. k benar string PeraturandataFormatParameter digunakan untuk menentukan jenis dan urutan data yang didekode. dataFormat benar string PeraturandataParameter 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 melakukanencodePackedoperasi padapathproses parameter, karenaexactOutputpanggilan metode yang perlu dikodekan kemudian membutuhkanpathsebagai parameter. KemudianencodeyangexactOutputmetode kontrak rute, yang hanya memiliki satu parameter jenistuple. Nama metodeexactOutputdikodekan 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.

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