繁体   English   中英

如何将 ERC20 代币发送到智能合约余额?

[英]How to send ERC20 token to smart contract balance?

我正在尝试构建一个智能合约并继承一些功能来交换 ERC20 代币,

这是我的问题?

问题 A:是否可以将 ERC20 代币转入智能合约余额? , 请提供一个例子,即我们可以创建一个 function 来发送 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:如果 A 是可能的,如何获得合约的代币余额? 即我们可以从这个function中得到合约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 或 Sushiswap API 与 BAND/ETH 流动性池进行交换,是使用 NodeJS 在服务器端进程上处理该过程更好,还是在solidity 中实现它?


完整的智能合约代码:

pragma solidity ^0.5.11; 

合约 SwapTest { 地址公共管理器;

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 将令牌传输给自己。

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 文档,因为它们对此进行了深入描述。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM