如何解决如何在 Metamask 上只确认一次然后机器人会在之后下交换订单?
我在 HTML/JavaScript 上有这段代码; 它命令 Metamask 交换 Pancakeswap,它运行,但它需要用户的 2 次批准:第一次令牌批准和第二次交换操作。我觉得第二次可能没有必要,特别是如果我们正在制作一个机器人。
如何避免第二个?
我只想批准订单一次,然后当机器人找到交换的好机会时自动进行这笔交易......
async function swapFunction() {
const provider = new ethers.providers.Web3Provider(window.ethereum)
const signer = provider.getSigner()
var signerAddress = await signer.getAddress()
const ACCOUNT = provider.getSigner(0);
var ROUTER_ADDR = '0x05ff2b0db69458a0750badebc4f9e13add608c7f'; //pancakeswap router
var ROUTER_CONTRACT = await new ethers.Contract(
ROUTER_ADDR,[
'function getAmountsOut(uint amountIn,address[] memory path) public view returns (uint[] memory amounts)','function swapExactTokensForTokens(uint amountIn,uint amountOutMin,address[] calldata path,address to,uint deadline) external returns (uint[] memory amounts)',],ACCOUNT
);
console.log(ROUTER_CONTRACT,"<< ROUTER_CONTRACT")
var BASE = "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c";
var TOKEN = "0xe9e7cea3dedca5984780bafc599bd69add087d56";
var BASE_CONTRACT = new ethers.Contract(
BASE,[
'function approve(address spender,uint value) external returns (bool)','function decimals() public view returns (uint8)','function balanceOf(address account) external view returns (uint256)','function allowance(address _owner,address spender) external view returns (uint256)'
],ACCOUNT
);
console.log(BASE_CONTRACT,"<< BASE_CONTRACT")
var amountIn_weiBN = ethers.utils.parseEther("0.001");
var gasLimit = 300000;
var gasPrice_weiBN = ethers.utils.parseUnits(`${5}`,'gwei');;
var approved = false
// ****************** Here Metamask ask to Click Confirmation 1st time. *******************
var approved = await BASE_CONTRACT.approve( ROUTER_ADDR,amountIn_weiBN,{
'gasLimit': gasLimit,'gasPrice': gasPrice_weiBN
});
console.log(approved,"<< approved")
var routeramountsOutBN = await ROUTER_CONTRACT.getAmountsOut( amountIn_weiBN,[BASE,TOKEN]);
console.log(routeramountsOutBN,"<<< routeramountsOutBN")
// .... Here will come some bot logics ....
// How to avoid this second time Confirmation ??
// ****************** Here Metamask ask to Click Confirmation 2nd time. *******************
var tx = await ROUTER_CONTRACT.swapExactTokensForTokens(
routeramountsOutBN[0],routeramountsOutBN[1],TOKEN],signerAddress,Date.Now() + 1000 * 60 * 10,//10 minutes
{
'gasLimit': gasLimit,'gasPrice': gasPrice_weiBN
})
console.log(tx,"<<< tx")
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。