В процессе загрузки ресурсов... загрузка...

Код поддержки

Функцияexchange.IOвключает в себяencodeметод, который может вернуть код вызова функцииhexформат строки. Вы можете ознакомиться с публично доступными платформамиUniswap V3 Trading Class Library шаблондля особого использования. Вызов кодировкиunwrapWETH9Метод используется здесь в качестве примера:

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

Когда вы звонитеexchange.IO("encode",...)функция, если второй параметр (тип строки) начинается с0x, это означает вызов метода на закодированный (encodeУмный контракт. Если он не начинается с0x, он используется для кодирования указанного порядка типа.abi.encodeвsolidity- Обратитесь к следующему примеру.

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
    */
}

Поддержка последовательного кодирования тупелей или типов, содержащих тупели:

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

Этот тип порядка состоит из:tupleиbytes, так что два параметра должны быть переданы при вызовеexchange.IOдоencode:

  • Переменные, соответствующие типу тупла:
    {
        a: 30,
        b: 20,
        c: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
    }
    
    Переданные параметры также должны соответствовать структуре и типуtuple, как определено вtypesпараметр:tuple(a uint256, b uint8, c address).
  • Переменные, соответствующие типу байтов:
    "0011"
    

Поддержка последовательного кодирования массивов или типов, содержащих массивы:

function main() {
    var path = ["0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", "0xdac17f958d2ee523a2206206994597c13d831ec7"]   // ETH address, USDT address
    var ret = exchange.IO("encode", "address[]", path)
    Log("encode: ", ret)
}
Способ вызова Ethereum RPC Поддержка encodePacked