Sumber dimuat naik... memuat...

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

Peraturanexchange.IO("api", ...)fungsi dipanggil dengan cara yang digunakan untuk memanggil kaedah kontrak pintar.

Peraturanexchange.IO("api", ...)fungsi mengembalikan nilai pulangan kaedah kontrak pintar yang dipanggil. string, nombor, bool, objek, array, null dan semua jenis lain yang disokong oleh sistem

exchange.IO(k, alamat, kaedah)exchange.IO(k, alamat, kaedah,... args)exchange.IO(k, alamat, kaedah, nilai,... args)

Peraturankparameter digunakan untuk menetapkan fungsiexchange.IO()fungsi, ditetapkan kepada"api"menunjukkan bahawa fungsi digunakan untuk memperluaskan permintaan panggilan. k betul senar Peraturanaddressparameter digunakan untuk menentukan alamat kontrak pintar. alamat betul senar Peraturanmethodparameter digunakan untuk menentukan kaedah kontrak pintar yang akan dipanggil. kaedah betul senar Perkhidmatanvalueparameter digunakan untuk menetapkan jumlah ETH yang akan dihantar.stateMutabilityatribut kaedah kontrak pintar yang akan dilaksanakan adalahpayable, kemudianvalueparameter perlu lulus."stateMutability": "payable"Atribut boleh dilihat dari ABI.exchange.IO()fungsi akan menentukan parameter yang diperlukan berdasarkanstateMutabilityAtribut dalam ABI yang telah didaftarkan.stateMutabilityatribut adalahnonpayable, kemudianvalueParameter tidak perlu dihantar. nilai palsu nombor,string Peraturanargparameter digunakan untuk menentukan parameter kaedah kontrak pintar yang akan dipanggil.argparameter, dan jenis dan bilanganargparameter bergantung kepada kaedah kontrak pintar yang akan dipanggil. arg palsu rentetan, nombor, bool, dan semua jenis lain yang disokong oleh sistem

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
}

Peraturandecimalskaedah adalahconstantkaedah ERC20 yang tidak menimbulkan penggunaan gas dan ia boleh menyoal data ketepatan token.decimalsNilai pulangan: data ketepatan 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"))   
}

Peraturanallowancekaedah adalahconstantkaedah ERC20 yang tidak menjana penggunaan gas dan boleh pertanyaan jumlah yang dibenarkan token untuk alamat kontrak tertentu.allowancekaedah mengambil 2 parameter, yang pertama adalah alamat dompet dan yang kedua adalah alamat yang dibenarkan.
owner: alamat dompet, contoh digantikan dengan rentetan owner, penggunaan sebenar perlu mengisi alamat tertentu.spender: alamat kontrak yang dibenarkan, contoh digantikan oleh rentetan spender, penggunaan sebenar perlu mengisi alamat tertentu, contohnya ia bolehUniswap 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 || {})
}

Peraturanmulticallkaedah adalah bukan-constantkaedahUniswap V3yang menjana penggunaan gas dan digunakan untuk menebus token dengan pelbagai cara. Perkhidmatanmulticallkaedah boleh mempunyai pelbagai cara untuk lulus parameter, anda boleh memeriksa ABI yang mengandungi kaedah secara khusus, anda perlu mendaftar ABI sebelum memanggil kaedah.

Untuk contoh khususmulticallanda boleh merujuk kepada platforms yang tersedia untuk umumUniswap V3 Perdagangan Templat

Beberapa butiran diterangkan di sini menggunakan kod palsu:


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

ContractV3SwapRouterV2: alamat penghala v2 Uniswap V3.value: jumlah ETH untuk dipindahkan, ditetapkan kepada 0 jika token dalam operasi pertukaran bukan ETH.deadline: deadlineialah parametermulticallkaedah, yang boleh ditetapkan kepada (new Date().getTime() / 1000) + 3600, menunjukkan bahawa ia sah selama satu jam.data: dataialah parametermulticallkaedah, data operasi pembungkusan yang akan dilakukan.

Sama sepertiexchange.IO("api", "eth", "send", "toAddress", toAmount), yanggasLimit/gasPrice/noncetetapan panggilan kaedah boleh ditentukan apabila memanggilmulticallkaedah. Sekali lagi, kita menggunakan kod palsu untuk menerangkan:


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

Parameter{gasPrice: 11, gasLimit: 111, nonce: 111}boleh ditetapkan mengikut keperluan khusus, yang ditetapkan kepada parameter terakhirexchange.IO()fungsi. Anda boleh terlepasnoncedan menggunakan sistem nilai lalai, atau meninggalkangasLimit/gasPrice/noncemematikan dan menggunakan nilai lalai sistem untuk semua.

pertukaran.IO (("kunci",...) pertukaran.IO (("alamat")