Solidity

使用 1inch API 執行自動交易

  • April 17, 2022

為了執行自動 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

引用自:https://ethereum.stackexchange.com/questions/89571