O recurso está a ser carregado... Carregamento...

exchange.IO("decodificar",...)

Oexchange.IO("decode", ...)A função é chamada de uma forma que é usada para decodificação.

Oexchange.IO("decode", ...)Retorna uma cadeia quando há apenas um dado especificado pelodataFormatRetorna uma matriz quando há mais de um dado especificado pelodataFormatParâmetro. matriz, string

exchange.IO(k, dadosFormato, dados)

OkParâmetro utilizado para definir a função doexchange.IO()função, e configurá-lo para"decode"significa que a função é utilizada para decodificação de dados. k verdade cordel OdataFormatO parâmetro é utilizado para especificar o tipo e a ordem dos dados decodificados. DataFormat verdade cordel OdataParâmetro utilizado para definir os dados a decodificar. dados verdade cordel

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

Função inversa doexchange.IO("encode", ...)Função:

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

O seguinte exemplo realiza primeiro umencodePackedoperação nopathProcessamento de parâmetros, porque oexactOutputchamada de método que precisa ser codificada mais tarde requerpathcomo um parâmetro.encodeOexactOutputmétodo do contrato de roteamento, que tem apenas um parâmetro de tipotuple. Nome do métodoexactOutputé codificado como:0x09b81346, e utilizando oexchange.IO("decode", ...)método para decodificar o resultadodecodeRaw, consistente com a variáveldataTuple.

Para o processamento de dados, oexchange.IO()Função suporta não só codificação, mas também decodificação.

"Encodificados",...) Intercâmbio.IO (("chave",...)