O recurso está a ser carregado... Carregamento...

exchange.IO("api",...)

Oexchange.IO("api", ...)A função é chamada de uma forma que é usada para chamar os métodos do contrato inteligente.

Oexchange.IO("api", ...)A função retorna o valor de retorno do método chamado contrato inteligente. string, number, bool, object, array, null e todos os outros tipos suportados pelo sistema

exchange.IO(k, endereço, método)exchange.IO(k, endereço, método,...args)exchange.IO(k, endereço, método, valor,...args)

OkParâmetro utilizado para definir a função doexchange.IO()função, definida em"api"indica que a função é utilizada para estender a solicitação de chamada. k verdade cordel OaddressO parâmetro é utilizado para especificar o endereço do contrato inteligente. Endereço verdade cordel OmethodO parâmetro é utilizado para especificar o método do contrato inteligente a ser chamado. Método verdade cordel OvalueO parâmetro é usado para definir a quantidade de ETH a ser enviada.stateMutabilityAtributo do método de contrato inteligente a executar épayable, em seguida, ovalueO parâmetro precisa ser passado."stateMutability": "payable"O atributo pode ser visualizado a partir do ABI.exchange.IO()A função determinará o parâmetro requerido com base nostateMutabilityO atributo no ABI que foi registrado.stateMutabilityatributo énonpayable, em seguida, ovalueParâmetro não precisa ser transmitido. Valor Falso número, string OargO parâmetro é usado para especificar os parâmetros do método do contrato inteligente a ser chamado.argParâmetro, tipo e número deargOs parâmetros dependem do método do contrato inteligente a ser chamado. arg Falso string, number, bool e todos os outros tipos suportados pelo sistema

function main(){
    var tokenAddress = "0x111111111117dC0aa78b770fA6A738034120C302"    // The contract address of the token, the token is 1INCH in the example
    Log(exchange.IO("api", tokenAddress, "decimals"))                  // Query, print 1INCH tokens with precision index of 18
}

OdecimalsO método éconstantO método ERC20 que não incorre no consumo de gás e que pode consultar os dados de precisão de um token.decimalsO método não possui parâmetros. Valor de retorno: dados de precisão do token.

function main(){
    // The contract address of the token, in the example the token is 1INCH
    var tokenAddress = "0x111111111117dC0aa78b770fA6A738034120C302"                          

    // For example, the query yields 1000000000000000000, divided by the precision unit of the token 1e18, the wallet to which the current exchange object is bound has authorized 1 1INCH to the spender address
    Log(exchange.IO("api", tokenAddress, "allowance", "owner", "spender"))   
}

OallowanceO método éconstantO ERC20 é um método de ERC20 que não gera consumo de gás e pode consultar a quantidade autorizada de um token para um determinado endereço de contrato.allowanceO método leva 2 parâmetros, o primeiro é o endereço da carteira e o segundo é o endereço autorizado.
owner: o endereço da carteira, o exemplo é substituído pela cadeia owner, o uso real precisa preencher o endereço específico.spender: o endereço do contrato autorizado, o exemplo é substituído pela cadeia spender, o uso real precisa preencher o endereço específico, por exemplo, pode serUniswap V3 router v1 address.

function main(){
    // The contract address of the token, the token is 1INCH in the example
    var tokenAddress = "0x111111111117dC0aa78b770fA6A738034120C302"                 

    // The hexadecimal string of the authorization amount: 0xde0b6b3a7640000 , the corresponding decimal string: 1e18 , 1e18 divided by the precision unit of the token, i.e. 1 token amount, so this refers to the authorization of one token
    Log(exchange.IO("api", tokenAddress, "approve", "spender", "0xde0b6b3a7640000"))  
}```
The ```approve``` method is a non-```constant``` method of ERC20, which generates gas consumption and is used to authorize the operation amount of a token to a contract address. The ```approve``` method takes 2 parameters, the first one is the address to be authorized and the second one is the amount to be authorized. Return value: txid.  
```spender```: the address of the authorized contract, the example is replaced by the string "spender", the actual use needs to fill in the specific address, for example, it can be ```Uniswap V3 router v1``` address. ```0xde0b6b3a7640000```: the number of authorizations, here is the hexadecimal string, the corresponding decimal value is 1e18, divided by the token precision unit in the example (i.e. 1e18). The result is that 1 token is authorized. The third parameter of the ```exchange.IO()``` function is passed to the method name ```approve```, which can also be written in the form of methodId, such as "0x571ac8b0". It is also possible to write the full standard method name, for example: "approve(address,uint256)".
```javascript
function main() {
    var ContractV3SwapRouterV2 = "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45"
    var tokenInName = "ETH"
    var amountIn = 0.01
    var options = {gasPrice: 5000000000, gasLimit: 21000, nonce: 100}   // This is an example, depending on the actual scene settings
    var data = ""                                                       // The encoded data, here is the empty string, depending on the actual scene settings
    var tx = exchange.IO("api", ContractV3SwapRouterV2, "multicall(uint256,bytes[])", (tokenInName == 'ETH' ? amountIn : 0), (new Date().getTime() / 1000) + 3600, data, options || {})
}

OmulticallO método é um não-constantmétodo deUniswap V3que gera consumo de gás e é usado para resgatar tokens de várias maneiras. Omulticallmétodo pode ter várias maneiras de passar parâmetros, você pode verificar o ABI que contém o método especificamente, você precisa registrar o ABI antes de chamar o método.

Para exemplos específicos demulticallOs métodos de chamadas podem ser consultados nas plataformas disponíveis publicamente.Uniswap V3 Trade Modelo

Alguns detalhes são descritos aqui usando pseudo-código:


exchange.IO("api", ContractV3SwapRouterV2, "multicall(uint256,bytes[])", value, deadline, data)

ContractV3SwapRouterV2: endereço do roteador v2 do Uniswap V3.value: o montante de ETH a transferir, definido em 0 se o tokenIn da operação de troca não for o ETH.deadline: deadlineé o parâmetro domulticallmétodo, que pode ser definido como (new Date().getTime() / 1000) + 3600, indicando que é válido por uma hora.data: dataé o parâmetro domulticallmétodo, os dados da operação de embalagem a realizar.

Semelhante aexchange.IO("api", "eth", "send", "toAddress", toAmount), ogasLimit/gasPrice/nonceconfiguração do método chamada pode ser especificado ao chamar omulticallmétodo. Novamente, usamos pseudo-código para descrever:


exchange.IO("api", ContractV3SwapRouterV2, "multicall(uint256,bytes[])", value, deadline, data, {gasPrice: 123456, gasLimit: 21000})

O parâmetro{gasPrice: 11, gasLimit: 111, nonce: 111}O sistema pode ser definido de acordo com as necessidades específicas, que é definido para o último parâmetro doexchange.IO()função. Pode omitir ononcee usar o valor padrão do sistema, ou deixargasLimit/gasPrice/nonceDesativar e usar o valor padrão do sistema para todos.

Intercâmbio.IO (("chave",...) Câmbio.IO (("endereço")