如何将 ERC20 代币发送到智能合约余额?
How to send ERC20 token to smart contract balance?
我正在尝试构建一个智能合约并继承一些功能来交换 ERC20 代币,
这是我的问题?
问题一:
是否可以将ERC20代币转入智能合约余额?,
请举个例子,
即我们可以创建一个函数将 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可以,如何获取合约的代币余额?
即我们可以从这个函数中得到合约的 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;
contract SwapTest {
address public manager;
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 文档,因为它们对此进行了深入描述。
我正在尝试构建一个智能合约并继承一些功能来交换 ERC20 代币,
这是我的问题?
问题一: 是否可以将ERC20代币转入智能合约余额?, 请举个例子, 即我们可以创建一个函数将 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可以,如何获取合约的代币余额? 即我们可以从这个函数中得到合约的 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;
contract SwapTest {
address public manager;
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 文档,因为它们对此进行了深入描述。