В процессе загрузки ресурсов... загрузка...

exchange.IO("Декодировать",...)

Вexchange.IO("decode", ...)Функция называется таким образом, который используется для декодирования.

Вexchange.IO("decode", ...)возвращает декодированные данные. возвращает строку, когда есть только один данный, указанныйdataFormatвозвращает массив, когда есть более одного данного, указанногоdataFormatПараметр. массив, строка

exchange.IO(k, dataФормат, данные)

ВkПараметр используется для установки функцииexchange.IO()Функция и настройка на"decode"означает, что функция используется для декодирования данных. k неправда строка ВdataFormatПараметр используется для определения типа и порядка декодированных данных. DataFormat (Формат данных) Истинно строка ВdataПараметр используется для настройки данных для декодирования. данные неправда строка

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

Обратное действиеexchange.IO("encode", ...)Функция:

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

В следующем примере сначала выполняетсяencodePackedОперация наpathобработки параметров, посколькуexactOutputвызов метода, который должен быть закодирован позже требуетpathкак параметр.encode- Да.exactOutputметод договора маршрутизации, который имеет только один параметр типаtuple. Название методаexactOutputкодируется как:0x09b81346, и с использованиемexchange.IO("decode", ...)метод расшифровки полученногоdecodeRaw, в соответствии с переменнойdataTuple.

Для обработки данныхexchange.IO()функция поддерживает не только кодирование, но и декодирование.

exchange.IO (("encodePacked",...) обмен.IO (("ключ",...)