Solidity
使用 1inch API 執行自動交易
為了執行自動 1 英寸交易,我使用這兩個函式。一開始效果很好。不幸的是,在過去的幾天裡,我總是遇到同樣的錯誤:
- 失敗並出現錯誤“退貨金額不夠”
- 警告!合約執行過程中遇到的錯誤
$$ Reverted $$
def get_api_call_data(_from_coin,_to_coin): global api_data try: call_data = requests.get( f'https://api.1inch.exchange/v1.1/swap?fromTokenSymbol={_from_coin}&toTokenSymbol={_to_coin}&amount={_amount_to_exchange}&fromAddress={base_account}&slippage={slippage}&disableEstimate=true') api_data = call_data.json() except: logging.exception("get_api_call_data") return api_data def one_inch_token_swap(_from_coin,_to_coin): global tx_hash web3 = Web3(Web3.HTTPProvider(eth_provider_url)) nonce = web3.eth.getTransactionCount(base_account) json_data = get_api_call_data(_from_coin,_to_coin) data = json_data['data'] to = json_data['to'] value = _amount_to_exchange url_fees = 'https://ethgasstation.info/api/ethgasAPI.json?' r_fees = requests.get(url_fees) js_fees = json.loads(r_fees.content) Fastest = js_fees['fastest'] tx = { 'nonce': nonce, 'to': to, 'value': _amount_to_exchange, 'gasPrice':(Fastest+100)*(100000000), 'from': base_account, 'data': data, } gas = web3.eth.estimateGas(tx) tx["gas"] = gas signed_tx = web3.eth.account.signTransaction(tx, private_key) tx_hash = web3.eth.sendRawTransaction(signed_tx.rawTransaction)
這個錯誤的原因可能是什麼?
您是否“批准”了 _from_coin 到 1inch 地址?
如果您不為他批准您的代幣,1inch 不能交換您的代幣。
是的,從oneinch Swap API呼叫你得到一個json對象名(除了交易建構子,tx),有兩個欄位呼叫
"toTokenAmount" : "1089293791578517848" "fromTokenAmount" : "10000000000000000"
在簽署和發送 tx 之前,您是否進行了最後一次測試。例如,您可以檢查
toTokenAmount - (toTokenAmount * ({slippage} / 100)) > minimum_desired_amount