Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何向智能合约余额发送ERC20代币?_Javascript_Api_Ethereum_Solidity_Erc20 - Fatal编程技术网

Javascript 如何向智能合约余额发送ERC20代币?

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

我正试图构建一个智能合约并继承一些函数来交换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" 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并直接提供流动性。