Web3js

無法批准或出售代幣 swapExactTokensForTokens:交易失敗(不是honeypot)

  • January 5, 2022

我正在嘗試出售代幣(DOBO)。購買DOBO是沒有問題的,它通過了。但是我不能賣。我收到一個失敗的交易,但在 node.js 上沒有錯誤消息(請參閱https://bscscan.com/tx/0x2a1e3af0c800dc1280c5f5a7e45cdb1a8914f2dcd66a63cd44ba397411a30442)。我的錢包裡有足夠的 DOBO 和足夠的 BNB。起初我以為是因為 DOBO 沒有在 Pancakeswap 上獲得批准。我嘗試在程式碼中實現批准(見下文),但這不起作用。我最終手動批准了它,但我仍然收到失敗的銷售交易。

為什麼我不能批准代幣銷售?為什麼我在嘗試出售代幣時會收到錯誤消息?

謝謝你的幫助!

const ethers           = require('ethers');
const WSS              = "wss:/XXX" // NODE CONNECTION
const Seed             = 'XXX XXX'  // WALLET SEEDPHRASE
const recipientaddress = '0x8d25C18e2280A05aF12c2620388116Fb2a72a236' // WALLET ADDRESS
const routeraddress    = '0x10ed43c718714eb63d5aa57b78b54704e256024e' // PANCAKESWAP ROUTER
const amountIn         = ethers.utils.parseUnits('10', 'ether');      // SELL 10 DOBO
const minBuy           = ethers.utils.parseUnits('0',  'ether')       // NO MINIMUM
const shitCoin         = 'ae2df9f730c54400934c06a17462c41c08a06ed8'; // DOBO
const moneyToken       = 'bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c'; // wBNB
const provider         = new ethers.providers.WebSocketProvider(WSS);
const wallet           = ethers.Wallet.fromMnemonic(Seed);
const account          = wallet.connect(provider);

const router = new ethers.Contract(
   routeraddress,
   ['function swapExactTokensForTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts)'],
   account
 );

// APPROVE TOKEN
   const fullToken1 = ("0x"+shitCoin); // DOBO
   const approveToken = new ethers.Contract(
       fullToken1,
       [
         'function approve(address spender, uint amount) public returns(bool)',
       ],
       account
     );

     const init = async () => {
       const tx = await approveToken.approve(
         routeraddress, 
         '1000' // APPROVE TRADING 1000 DOBO?
       );
       const receipt = await tx.wait(); 
       console.log('Transaction receipt');
       console.log(receipt);
     }


     // SELL TOKEN
     router.swapExactTokensForTokens(
       amountIn, // 10 DOBO
       minBuy, // set to 0
       [shitCoin, moneyToken],
       recipientaddress,
       Date.now() + 1000 * 60 * 10,
       {
           gasPrice: ethers.utils.parseUnits('10', 'gwei'),
           gasLimit: '2100000'
       }
     )

你只批准了 1000 wei 的 DOBO,但試圖交換 10 乙太的 DOBO (10*10^18)。

嘗試將 1000 更改為amountIn您的批准 tx。

除了 Kenzo 的回答。

查看您共享的交易和 bsc 的狀態,您似乎正在批准 from 交易。

內部 tx 嘗試將 DOBO 從 傳輸到 時0x8d25c18e2280a05af12c2620388116fb2a72a236失敗0xbe80839a3be4d3953d5588a60a11aeaed286b593

查詢此組合的津貼返回0,因此看起來沒有設置津貼。

此外,init在您的剪輯中永遠不會呼叫設置津貼的塊。

在此處輸入圖像描述

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