Dieexchange.IO("decode", ...)
Funktion wird auf eine Art und Weise aufgerufen, die für die Entschlüsselung verwendet wird.
Dieexchange.IO("decode", ...)
Funktion gibt die entschlüsselten Daten zurück. Gibt eine Zeichenkette zurück, wenn nur ein von derdataFormat
Parameter. Gibt ein Array zurück, wenn mehr als ein von derdataFormat
Parameter.
- Das ist nicht wahr.
exchange.IO(k, Daten)
Diek
Parameter wird verwendet, um die Funktion derexchange.IO()
Funktion und Einstellung auf"decode"
bedeutet, dass die Funktion zur Datenentzifferung verwendet wird.
k
wahr
String
DiedataFormat
Der Parameter wird verwendet, um den Typ und die Reihenfolge der entschlüsselten Daten anzugeben.
DatenFormat
- Das stimmt.
String
Diedata
Der Parameter wird verwendet, um die zu entschlüsselnden Daten festzulegen.
Daten
wahr
String
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)
}
Umgekehrter Betrieb derexchange.IO("encode", ...)
Funktion:
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)
}
Das folgende Beispiel führt zunächst eineencodePacked
Betrieb auf derpath
Parameterverarbeitung, weil dieexactOutput
Methodenanruf, der später codiert werden muss, erfordertpath
als Parameter. Dannencode
DieexactOutput
Methode des Routingvertrags, die nur einen Parameter des Typs enthälttuple
. Die MethodenbezeichnungexactOutput
wird als0x09b81346
, und mit Hilfe derexchange.IO("decode", ...)
Methode zur Entschlüsselung der resultierendendecodeRaw
, entsprechend der VariablendataTuple
.
Für die Datenverarbeitung werden dieexchange.IO()
Funktion unterstützt nicht nur die Kodierung, sondern auch die Entschlüsselung.