Les ressources ont été chargées... Je charge...

exchange.IO("décodage",...)

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 ledataFormatRetourne un tableau lorsqu'il y a plus d'une donnée spécifiée par ledataFormatparamètre. Le nombre d'éléments

exchange.IO(k, donnéesFormat, données

LekLe 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 LedataFormatLe paramètre est utilisé pour spécifier le type et l'ordre des données décodées. donnéesFormat vrai chaîne Ledataparamè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 uneencodePackedopération sur lepathLe traitement des paramètres,exactOutputl'appel de méthode qui doit être codé plus tard nécessitepathcomme un paramètre.encodeLeexactOutputméthode du contrat de routage, qui ne comporte qu'un seul paramètre de typetuple. Le nom de la méthodeexactOutputest 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.

Je suis en train de faire un test. "Clé" ou "clé"