Javascript 如何向智能合约余额发送ERC20代币?
我正试图构建一个智能合约并继承一些函数来交换ERC20代币 这是我的问题 问题A: 是否可以将ERC20代币转移到智能合约余额?, 请举例说明, i、 e.我们可以创建一个函数,将ETH发送到智能合约Javascript 如何向智能合约余额发送ERC20代币?,javascript,api,ethereum,solidity,erc20,Javascript,Api,Ethereum,Solidity,Erc20,我正试图构建一个智能合约并继承一些函数来交换ERC20代币 这是我的问题 问题A: 是否可以将ERC20代币转移到智能合约余额?, 请举例说明, i、 e.我们可以创建一个函数,将ETH发送到智能合约 function contribute() external payable {} //It will allow us to send ETH to smart contract balance,but how to send,for example, "BAND" tok
function contribute() external payable {}
//It will allow us to send ETH to smart contract balance,but how to send,for example, "BAND" token
//to smart contract balance?
问题B:
如果可能,如何获得合同的代币余额?
i、 e.我们可以通过此函数获得合同ETH余额:
// Get ETH balance
function getBalance() external view returns(uint) {
return address(this).balance;
}
// How to return contract's BAND balance, if A is possible ...
问题C:
如果“A”是可能的,如何使用Uniswap或swap API向BAND/ETH流动性池进行掉期,
使用NodeJS在服务器端进程上处理该进程更好,还是以稳定的方式实现它更好
完整智能合约代码:
pragma solidity ^0.5.11;
合同交换{
向公共经理讲话
constructor() public {
manager = msg.sender;
}
modifier OnlyManager() {
require(msg.sender == manager);
_;
}
// Add funds to contract
function contribute() external payable {}
// Get ETH balance
function getBalance() external view returns(uint) {
return address(this).balance;
}
// Send provided amount of WEI to recipient
function sendEther (address payable recipient, uint weiAmount) external OnlyManager{
recipient.transfer(weiAmount);
}
// Send contract balance to recipient
function withdrawBalance (address payable recipient) external OnlyManager{
recipient.transfer(address(this).balance);
}
}
期待你们的回音,
提前感谢。在处理外部合同时,首先要包含一个接口定义,以便您可以调用合同的函数
interface ERC20 {
function balanceOf(address owner) external view returns (unit);
function allowance(address owner, address spender) external view returns (unit);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
}
A:代币可以直接转移到合同地址,无需指定其他功能。不过,根据您的用例,您还可以编写一个将令牌传输到自身的函数
function transferToMe(address _owner, address _token, unit _amount) public {
ERC20(_token).transferFrom(_owner, address(this), _amount);
}
B:您可以使用:
function getBalanceOfToken(address _address) public view returns (unit) {
return ERC20(_address).balanceOf(address(this));
}
C:如果您需要合同能够交换代币,则需要包含相应的功能。请参阅Uniswap或Sushiswap文档,因为它们对此进行了深入的描述。对于StackOverflow问答格式,我建议您每个问题只添加一个问题。要创建Uniswap v2池,您需要调用带有相应参数的Uniswap Factory contract。下载Uniswap源代码并进行检查。已检查Uniswap对的my DB。要创建的对已存在,地址为0xf421c3f2e695C2D4C0765379cCace8adE4a480D9。此外,BAND token还有16对其他token:DIA、NMR、YFI、GEM、AXIA、DAI、BAT、USDC、YUNO、UNI、LINK、DREAM、AGI。请告知如何对其进行测试?所以我在Rinkeby网络上部署contract,问题是如何获取任何ERC20令牌来测试它,因为metamask不允许在测试网络上进行交换,所以我想在Rinkeby网络上部署contract,然后从metamask发送ERC20令牌,并在稍后实现时调用交换函数,提前感谢您可以在打开Metamask时切换网络。然后你可以用一些Rinkeby Ether交换一些ERC20代币并测试你的功能。你需要一个功能来将代币从智能合约中转移出去,否则这些代币将永远被锁定在那里。为此,只需使用ERC20接口中定义的传输。您还可以连接uniswap并直接提供流动性。