Sumber dimuat naik... memuat...

Kod sokongan

Fungsiexchange.IOmerangkumiencodekaedah, yang boleh mengembalikan fungsi panggilan pengekodan untukhexformat rentetan. Anda boleh merujuk kepada platform yang tersedia untuk umumUniswap V3 Perpustakaan Kelas Perdagangan templatuntuk kegunaan khusus. Panggilan penyulitanunwrapWETH9kaedah digunakan di sini sebagai contoh:

function main() {
    // Main network address of ContractV3SwapRouterV2: 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45
    // To call the unwrapWETH9 method, you need to register the ABI first, omit the registration here.
    // "owner" represents the wallet address, it needs to fill in the specific, 1 represents the number of unwrapping, unwrap a WETH into ETH
    var data = exchange.IO("encode", "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45", "unwrapWETH9(uint256,address)", 1, "owner")
    Log(data)
}

Apabila memanggilexchange.IO("encode",...)fungsi, jika parameter kedua (jenis rentetan) bermula dengan0x, ia bermaksud panggilan kaedah pada kod (encode) kontrak pintar. Jika ia tidak bermula dengan0x, ia digunakan untuk mengkod perintah jenis yang ditentukan.abi.encodedalamsolidity. merujuk kepada contoh berikut.

function main() {
    var x = 10 
    var address = "0x02a5fBb259d20A3Ad2Fdf9CCADeF86F6C1c1Ccc9"
    var str = "Hello World"
    var array = [1, 2, 3]
    var ret = exchange.IO("encode", "uint256,address,string,uint256[]", x, address, str, array)   // uint i.e. uint256 , the type length needs to be specified on FMZ
    Log("ret:", ret)
    /*
    000000000000000000000000000000000000000000000000000000000000000a    // x
    00000000000000000000000002a5fbb259d20a3ad2fdf9ccadef86f6c1c1ccc9    // address
    0000000000000000000000000000000000000000000000000000000000000080    // offset of str
    00000000000000000000000000000000000000000000000000000000000000c0    // offset of array
    000000000000000000000000000000000000000000000000000000000000000b    // the length of str
    48656c6c6f20576f726c64000000000000000000000000000000000000000000    // str data
    0000000000000000000000000000000000000000000000000000000000000003    // the length of the array
    0000000000000000000000000000000000000000000000000000000000000001    // array the first data
    0000000000000000000000000000000000000000000000000000000000000002    // array the second data
    0000000000000000000000000000000000000000000000000000000000000003    // array the third data
    */
}

Sokong pengekodan berurutan tuples atau jenis yang mengandungi tuples:

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)
}

Perintah jenis ini terdiri daripada:tupledanbytes, jadi dua parameter perlu dihantar dalam apabila memanggilexchange.IOkepadaencode:

  • Peralihan yang sepadan dengan jenis tuple:
    {
        a: 30,
        b: 20,
        c: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
    }
    
    Parameter yang dihantar juga harus konsisten dengan struktur dan jenistuple, seperti yang ditakrifkan dalamtypesParameter:tuple(a uint256, b uint8, c address).
  • Peralihan yang sepadan dengan byte jenis:
    "0011"
    

Sokongan untuk pengekodan berurutan array atau jenis yang mengandungi array:

function main() {
    var path = ["0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", "0xdac17f958d2ee523a2206206994597c13d831ec7"]   // ETH address, USDT address
    var ret = exchange.IO("encode", "address[]", path)
    Log("encode: ", ret)
}
Kaedah Panggilan Ethereum RPC Sokongan untuk encodePacked