Leexchange.IO("decode", ...)
La fonction est appelée d'une manière qui est utilisée pour le décryptage.
Leexchange.IO("decode", ...)
Retourne une chaîne quand il n'y a qu'une seule donnée spécifiée par ledataFormat
Retourne un tableau lorsqu'il y a plus d'une donnée spécifiée par ledataFormat
paramètre.
Le nombre d'éléments
exchange.IO(k, donnéesFormat, données
Lek
Le paramètre est utilisé pour définir la fonction deexchange.IO()
fonction, et le régler sur"decode"
signifie que la fonction est utilisée pour le décryptage des données.
K
vrai
chaîne
LedataFormat
Le paramètre est utilisé pour spécifier le type et l'ordre des données décodées.
donnéesFormat
vrai
chaîne
Ledata
paramètre est utilisé pour définir les données à décoder.
données
vrai
chaîne
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)
}
Le fonctionnement inverse de laexchange.IO("encode", ...)
fonction:
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)
}
L'exemple suivant effectue d'abord uneencodePacked
opération sur lepath
Le traitement des paramètres,exactOutput
l'appel de méthode qui doit être codé plus tard nécessitepath
comme un paramètre.encode
LeexactOutput
méthode du contrat de routage, qui ne comporte qu'un seul paramètre de typetuple
. Le nom de la méthodeexactOutput
est codé comme suit:0x09b81346
, et en utilisant leexchange.IO("decode", ...)
méthode de décryptage du code résultantdecodeRaw
, cohérente avec la variabledataTuple
.
Pour le traitement des données, leexchange.IO()
fonction prend en charge non seulement le codage, mais aussi le décodage.