In der FMZ Quant Trading Plattform implementiert es hauptsächlich verschiedene Funktionen, Anrufe im Zusammenhang mit Blockchain überexchange.IO()
Das folgende Dokument beschreibt dieexchange.IO()
Die Anrufmethode derexchange.IO("abi", ...)
Die Funktion wird zur Registrierung eines ABI verwendet.
exchange.IO(k, Adresse, abiInhalt)
Diek
Parameter wird verwendet, um die Funktion derexchange.IO()
Funktion, auf"abi"
bedeutet, dass die Funktion zur Registrierung verwendet wirdABI
- Ich weiß.
k
wahr
String
Dieaddress
Der Parameter wird verwendet, um die Adresse des Smart Contracts anzugeben.
Anschrift
wahr
String
DieabiContent
Parameter wird verwendet, um dieABI
der Smart Contract.
abiInhalt
wahr
String
function main() {
// register Uniswap SwapRouter02 abi
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"}]`
// Get the ```ABI``` content of the contract can be obtained with the following URL, taking the ```result``` field only, e.g:
exchange.IO("abi", routerAddress, abi)
}
Die Methoden zum Aufrufen von Smart Contracts müssen nicht registriert werden, wenn es sich um Standardmethoden von ERC20 handelt.
Holen Sie dieABI
Der Inhalt des Auftrags kann unter folgender URL abgerufen werden:result
nur Feld, z. B.:
https://api.etherscan.io/api?module=contract&action=getabi&address=0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45
Die Anrufmethode vonexchange.IO("api", "eth", ...)
Die Funktion wird verwendet, um die Methode Ethereum RPC aufzurufen.
Dieexchange.IO("api", "eth", ...)
Funktion gibt den Rückgabewert der genannten RPC-Methode zurück.
String, number, bool, object, array, null und alle anderen vom System unterstützten Typen
exchange.IO(k, BlockChain, rpcMethode)exchange.IO(k, BlockChain, rpcMethode,...args)
Diek
Parameter wird verwendet, um die Funktion derexchange.IO()
Funktion, auf"api"
zeigt an, dass die Funktion zur Erweiterung der Anrufanfrage verwendet wird.
k
wahr
String
DieblockChain
Parameter wird verwendet, um die Funktion derexchange.IO()
Funktion, auf"eth"
zeigt an, dass die Funktion für Anrufe der RPC-Methode im Ethereum-Netzwerk verwendet wird.
BlockChain
- Das stimmt.
String
DierpcMethod
Parameter wird verwendet, um die von derexchange.IO()
Funktion.
rpcMethode
wahr
String
Diearg
Parameter wird verwendet, um die Parameter der zu aufrufenden RPC-Methode anzugeben.arg
Die Art und Anzahl derarg
Die Parameter hängen von der von derrpcMethod
Parameter.
Arg
falsche
String, number, bool, object, array, function, null und alle anderen vom System unterstützten Typen
function main() {
// "owner" needs to be replaced with the specific wallet address
// Parameter labels for the "latest" string position: 'latest', 'earliest' or 'pending', please refrer to https://eth.wiki/json-rpc/API#the-default-block-parameter
// The return value ethBalance is a hexadecimal string: 0x9b19ce56113070
var ethBalance = exchange.IO("api", "eth", "eth_getBalance", "owner", "latest")
// ETH has a precision unit of 1e18
var ethDecimal = 18
// Because of the JavaScript language precision, it is necessary to use the system underlying package function BigInt, BigDecimal to process
// Convert ethBalance to readable amount, 0x9b19ce56113070 to 0.043656995388076145
Log(Number((BigDecimal(BigInt(ethBalance))/BigDecimal(Math.pow(10, ethDecimal))).toString()))
}
Überprüfen Sie den ETH-Guthaben in Ihrer Brieftasche:
function mian() {
// ETH has a precision unit of 1e18
var ethDecimal = 18
// Number of transfers, readable amount e.g. 0.01 ETH
var sendAmount = 0.01
// Due to the JavaScript language precision, it is necessary to use the system underlying encapsulated functions BigInt, BigDecimal to process, and to convert the readable amount to the data processed on the chain
var toAmount = (BigDecimal(sendAmount)*BigDecimal(Math.pow(10, ethDecimal))).toFixed(0)
// "toAddress" is the address of the recipient's ETH wallet at the time of the transfer, which needs to be filled in specifically, and toAmount is the number of transfers
exchange.IO("api", "eth", "send", "toAddress", toAmount)
}
Für ETH-Überweisungen können Sie die{gasPrice: 11, gasLimit: 111, nonce: 111}
Parameter, der auf den letzten Parameter desexchange.IO()
Sie können dienonce
und verwenden Sie die System-Standard, oder lassengasLimit/gasPrice/nonce
Deaktivieren und verwenden Sie den Systemstandardwert für alle.
function toAmount(s, decimals) {
return Number((BigDecimal(BigInt(s))/BigDecimal(Math.pow(10, decimals))).toString())
}
function main() {
var gasPrice = exchange.IO("api", "eth", "eth_gasPrice")
Log("gasPrice:", toAmount(gasPrice, 0)) // 5000000000 , in wei (5 gwei)
}
AbfragegasPrice
:
function toAmount(s, decimals) {
// The toAmount function can convert hex-encoded values to decimal values
return Number((BigDecimal(BigInt(s))/BigDecimal(Math.pow(10, decimals))).toString())
}
function main() {
// Coding approve (authorization) method calls
var data = exchange.IO("encode", "0x111111111117dC0aa78b770fA6A738034120C302", "approve", "0xe592427a0aece92de3edee1f18e0157c05861564", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")
Log("data:", data)
var gasPrice = exchange.IO("api", "eth", "eth_gasPrice")
Log("gasPrice:", toAmount(gasPrice, 0))
var obj = {
"from" : "0x0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", // walletAddress
"to" : "0x111111111117dC0aa78b770fA6A738034120C302",
"gasPrice" : gasPrice,
"value" : "0x0",
"data" : "0x" + data,
}
var gasLimit = exchange.IO("api", "eth", "eth_estimateGas", obj)
Log("gasLimit:", toAmount(gasLimit, 0))
Log("gas fee", toAmount(gasLimit, 0) * toAmount(gasPrice, 0) / 1e18)
}
Abfrageeth_estimateGas
:
Der zweite Parameter derexchange.IO()
Funktion mit"eth"
kann direkt die RPC-Methoden aufrufen, die dem Ethereum-Node-Server zur Verfügung stehen.
Ich habe dich nicht gesehen.
Dieexchange.IO("encode", ...)
Die Funktion wird für die Datenkodierung aufgerufen.
Dieexchange.IO("encode", ...)
Funktion gibt die codierten Daten zurück.
String
exchange.IO(k, Datenformat,...args)exchange.IO(k, Adresse, Datenformat)exchange.IO(k, Adresse, Datenformat,...args)
Diek
Parameter wird verwendet, um die Funktion derexchange.IO()
Funktion, auf"encode"
bedeutet, dass die Funktion für die Datenkodierung verwendet wird.
k
wahr
String
Dieaddress
Die Parameter werden verwendet, um die Adresse des Smart Contracts festzulegen.exchange.IO("encode", ...)
Funktion, die in deraddress
Der Parameter zeigt die Codierung der Methode auf dem Smart Contract an.exchange.IO("encode", ...)
Funktion, wennaddress
wenn der Parameter nicht übergeben wird, wird die Funktion verwendet, um die angegebene Typfolge zu kodieren, und ist funktionell gleichwertig mitabi.encode
inSolidity
- Ich weiß.
Anschrift
falsche
String
DiedataFormat
Der Parameter wird verwendet, um die Methode, den Typ und die Reihenfolge der codierten Daten anzugeben.
DatenFormat
- Das stimmt.
String
Diearg
Parameter wird verwendet, um den spezifischen Datenwert anzugeben, der demdataFormat
Es kann mehr als einearg
Parameter und die Art und Anzahl derarg
Parameter hängen von derdataFormat
Einstellung der Parameter.
Arg
falsche
String, number, tuple, array und alle anderen vom System unterstützten Typen
function main() {
// Main network address of ContractV3SwapRouterV2: 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45
// Calling the unwrapWETH9 method requires registering the ABI first, which is omitted here
// "owner" represents the wallet address, which need to fill in the specific, 1 represents the number of unpacking, unpacking a WETH into ETH
var data = exchange.IO("encode", "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45", "unwrapWETH9(uint256,address)", 1, "owner")
Log(data)
}
Zum Beispiel, rufen Sie die CodierungsmethodeunwrapWETH9
:
function main() {
var x = 10
var address = "0x02a5fBb259d20A3Ad2Fdf9CCADeF86F6C1c1Ccc9"
var str = "Hello World"
var array = [1, 2, 3]
var ret = exchange.IO("encode", "uint256,address,string,uint256[]", x, address, str, array) // uint i.e. uint256 , the type length needs to be specified on FMZ
Log("ret:", ret)
/*
000000000000000000000000000000000000000000000000000000000000000a // x
00000000000000000000000002a5fbb259d20a3ad2fdf9ccadef86f6c1c1ccc9 // address
0000000000000000000000000000000000000000000000000000000000000080 // Offset of str
00000000000000000000000000000000000000000000000000000000000000c0 // Offset of array
000000000000000000000000000000000000000000000000000000000000000b // The length of str
48656c6c6f20576f726c64000000000000000000000000000000000000000000 // str data
0000000000000000000000000000000000000000000000000000000000000003 // The length of the array
0000000000000000000000000000000000000000000000000000000000000001 // array the first data
0000000000000000000000000000000000000000000000000000000000000002 // array the second data
0000000000000000000000000000000000000000000000000000000000000003 // array the third data
*/
}
Es ist gleichbedeutend mit dem Codierungsbeispiel vonabi.encode
inSolidity
:
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)
}
Es unterstützt die Codierung eines Tupels oder einer Typreihenfolge, die ein Tupel enthält.
Diese Typordnung besteht austuple
, bytes
Also, wenn Sie anrufenexchange.IO()
Für die Kodierung müssen Sie zwei Parameter weitergeben:
{
a: 30,
b: 20,
c: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
}
Die eingegebenen Parameter müssen auch mit der Struktur und dem Typ dertuple
, wie sie in dertypes
Parameter des Formulars:tuple(a uint256,b uint8,c address)
.
bytes
:"0011"
function main() {
var path = ["0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", "0xdac17f958d2ee523a2206206994597c13d831ec7"] // ETH address, USDT address
var ret = exchange.IO("encode", "address[]", path)
Log("encode: ", ret)
}
Es unterstützt die sequentielle Codierung von Arrays oder Arraytypen, die Arrays enthalten:
Dieexchange.IO()
Funktion umfasst dieencode
Methode, die den Funktionsanrufcode zurückgeben kannhex
Für spezifische Anwendungen können Sie sich auf die öffentlich zugänglichen Plattformen beziehen
Dieexchange.IO("encodePacked", ...)
Funktion wird auf eine Weise aufgerufen, die für verwendet wirdencodePacked
encoding.
Dieexchange.IO("encodePacked", ...)
Funktion gibt dieencodePacked
verschlüsselte Daten.
String
exchange.IO(k, Datenformat,...args)
Diek
Parameter wird verwendet, um die Funktion derexchange.IO()
Funktion, auf"encodePacked"
bedeutet, dass die Funktion für Daten verwendet wirdencodePacked
Verschlüsselung.
k
wahr
String
DiedataFormat
Der Parameter wird verwendet, um den Typ und die Reihenfolge derencodePacked
verschlüsselte Daten.
DatenFormat
wahr
String
Diearg
Parameter wird verwendet, um den spezifischen Datenwert anzugeben, der demdataFormat
Es kann mehr als einearg
Parameter und die Art und Anzahl derarg
Parameter hängen von derdataFormat
Einstellung der Parameter.
Arg
- Das stimmt.
String, number, tuple, array und alle anderen vom System unterstützten Typen
function main() {
var fee = exchange.IO("encodePacked", "uint24", 3000)
var tokenInAddress = "0x111111111117dC0aa78b770fA6A738034120C302"
var tokenOutAddress = "0x6b175474e89094c44da98b954eedeac495271d0f"
var path = tokenInAddress.slice(2).toLowerCase()
path += fee + tokenOutAddress.slice(2).toLowerCase()
Log("path:", path)
}
Bei AnwendungUniswap V3
, müssen Sie in den Parametern wie den Austausch Pfad passieren, müssen Sie dieencodePacked
Codierung:
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.
Dieexchange.IO("key", ...)
Die Funktion wird so aufgerufen, dass private Schlüssel gewechselt werden können.
exchange.IO(K, Taste)
Der Parameterk
wird verwendet, um die Funktion derexchange.IO()
Funktion, auf"key"
bedeutet, dass die Funktion zum Umschalten des privaten Schlüssels verwendet wird.
k
wahr
String
Diekey
Parameter wird verwendet, um den privaten Schlüssel festzulegen.
Schlüssel
wahr
String
function main() {
exchange.IO("key", "Private Key") // "Private Key" represents the private key string, which needs to be filled in specifically
}
Dieexchange.IO()
Die Funktion unterstützt das Wechseln privater Schlüssel und kann mehrere Wallet-Adressen manipulieren.
Dieexchange.IO("api", ...)
Funktion wird auf eine Weise aufgerufen, die verwendet wird, um die Methoden des Smart Contracts aufzurufen.
Dieexchange.IO("api", ...)
Funktion gibt den Rückgabewert der sogenannten Smart-Contract-Methode zurück.
String, number, bool, object, array, null und alle anderen vom System unterstützten Typen
exchange.IO(k, Anschrift, Methode)exchange.IO(k, Anschrift, Methode,... args)exchange.IO(k, Anschrift, Methode, Wert,... args)
Diek
Parameter wird verwendet, um die Funktion derexchange.IO()
Funktion, auf"api"
zeigt an, dass die Funktion zur Erweiterung der Anrufanfrage verwendet wird.
k
wahr
String
Dieaddress
Der Parameter wird verwendet, um die Adresse des Smart Contracts anzugeben.
Anschrift
wahr
String
Diemethod
Der Parameter wird verwendet, um die Methode des zu aufrufenden Smart Contracts anzugeben.
Methode
- Das stimmt.
String
Dievalue
Der ETH-Parameter wird verwendet, um den zu versendenden ETH-Betrag festzulegen.stateMutability
Attribut der auszuführenden Smart Contract-Methode istpayable
, dann dievalue
Der Parameter muss übergeben werden."stateMutability": "payable"
Das Attribut kann im ABI angezeigt werden.exchange.IO()
Funktion wird den erforderlichen Parameter auf der Grundlage derstateMutability
Das ist ein Attribut in der ABI, das registriert wurde.stateMutability
Attribut istnonpayable
, dann dievalue
Parameter muss nicht übergeben werden.
Wert
falsche
Zahl, Zeichenfolge
Diearg
Parameter wird verwendet, um die Parameter der Methode des zu aufrufenden Smart Contracts anzugeben.arg
Parameter und die Art und Anzahl derarg
Parameter hängen von der Methode des zu aufrufenden Smart Contracts ab.
Arg
falsche
String, number, bool und alle anderen vom System unterstützten Typen
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
}
Diedecimals
Methode ist eineconstant
Die ERC20-Technologie ist eine Methode, die keinen Gasverbrauch verursacht und die Präzisionsdaten eines Tokens abfragen kann.decimals
Rückgabewert: die Präzisionsdaten des Tokens.
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"))
}
Dieallowance
Methode ist eineconstant
Die ERC20-Methode, die keinen Gasverbrauch erzeugt und den zugelassenen Betrag eines Tokens für eine bestimmte Vertragsadresse abfragen kann.allowance
Die Methode nimmt 2 Parameter an, der erste ist die Wallet-Adresse und der zweite die autorisierte Adresse.
owner
: die Adresse der Brieftasche, das Beispiel wird durch die Zeichenfolge spender
: die Adresse des genehmigten Auftrags, das Beispiel wird durch die Zeichenfolge Uniswap 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 || {})
}
Diemulticall
Die Methode ist nichtconstant
Verfahren derUniswap V3
die Gasverbrauch erzeugt und zur Einlösung von Token auf verschiedene Arten verwendet wird.
Diemulticall
Methode kann verschiedene Möglichkeiten haben, Parameter zu übergeben, Sie können die ABI überprüfen, die die Methode speziell enthält, Sie müssen die ABI registrieren, bevor Sie die Methode aufrufen.
Für konkrete Beispielemulticall
Sie können sich auf die öffentlich zugänglichen Plattformen beziehen.
Einige Details werden hier mit Pseudo-Code beschrieben:
exchange.IO("api", ContractV3SwapRouterV2, "multicall(uint256,bytes[])", value, deadline, data)
ContractV3SwapRouterV2
: Adresse des Routers v2 von Uniswap V3.value
: der zu übertragende Betrag an ETH, der auf 0 festgelegt ist, wenn das TokenIn-Token der Börsengeschäft nicht ETH ist.deadline
: deadline
ist der Parameter dermulticall
Methode, die auf (neues Datum (().getTime (()) / 1000) + 3600 eingestellt werden kann, was anzeigt, dass sie für eine Stunde gültig ist.data
: data
ist der Parameter dermulticall
Methode, die Daten des zu durchführenden Verpackungsverfahrens.
Ähnlich wieexchange.IO("api", "eth", "send", "toAddress", toAmount)
, diegasLimit/gasPrice/nonce
Die Einstellung des Methodenanrufs kann beim Aufrufen dermulticall
Methode.
Wir verwenden Pseudo-Code, um zu beschreiben:
exchange.IO("api", ContractV3SwapRouterV2, "multicall(uint256,bytes[])", value, deadline, data, {gasPrice: 123456, gasLimit: 21000})
Der Parameter{gasPrice: 11, gasLimit: 111, nonce: 111}
Die Anpassung an die spezifischen Bedürfnisse kann auf den letzten Parameter desexchange.IO()
Funktion.
Sie können dienonce
und verwenden Sie den System-Standardwert, oder lassen SiegasLimit/gasPrice/nonce
Deaktivieren und verwenden Sie den Systemstandardwert für alle.
Dieexchange.IO("address")
Die Funktion wird so aufgerufen, dass sie die Adresse der von dem Exchange-Objekt {@var/EXCHANGE exchange} konfigurierten Brieftasche erhält.
Dieexchange.IO("address")
Funktion gibt die konfigurierte Wallet-Adresse zurück.
String
exchange.IO(k)
Diek
Parameter wird verwendet, um die Funktion derexchange.IO()
Funktion, auf"address"
bedeutet, dass die Funktion verwendet wird, um die konfigurierte Wallet-Adresse zu erhalten.
k
- Das stimmt.
String
function main() {
Log(exchange.IO("address")) // Print the wallet address of the private key configured on the exchange object
}
Dieexchange.IO("base", ...)
Die Funktion wird so aufgerufen, dass die RPC-Knotenadresse festgelegt wird.
exchange.IO(k, Anschrift)
Diek
Parameter wird verwendet, um die Funktion derexchange.IO()
Funktion, auf"base"
bedeutet, dass die Funktion zum Wechseln von RPC-Knoten verwendet wird.
k
wahr
String
Dieaddress
Parameter wird verwendet, um die RPC-Knotenadresse festzulegen.
Anschrift
wahr
String
function main() {
var chainRpc = "https://bsc-dataseed.binance.org"
e.IO("base", chainRpc) // Switching to BSC chain
}
Faden
TA