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 pelodataFormat
Retorna uma matriz quando há mais de um dado especificado pelodataFormat
Parâmetro.
matriz, string
exchange.IO(k, dadosFormato, dados)
Ok
Parâ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
OdataFormat
O parâmetro é utilizado para especificar o tipo e a ordem dos dados decodificados.
DataFormat
verdade
cordel
Odata
Parâ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 umencodePacked
operação nopath
Processamento de parâmetros, porque oexactOutput
chamada de método que precisa ser codificada mais tarde requerpath
como um parâmetro.encode
OexactOutput
mé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.