当前位置: 首页 > 知识库问答 >
问题:

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

慎望
2023-03-14

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

这是我的问题?

问题A:是否可以将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在服务器端进程上处理该过程更好,还是以可靠的方式实现?

完整的智能合约代码

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);
    }
}

期待收到你们的回复,提前致谢。

共有1个答案

窦国源
2023-03-14

处理外部合约时,首先包括一个接口定义,因此您可以调用合约的函数。

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); 
}

答:代币可以直接转移到合约的地址,无需指定其他功能。但是,根据您的用例,您还可以编写一个将令牌传输到自身的函数。

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令牌从用户转移到智能合约,并从智能合约转移到用户。我在调用transferFrom函数之前批准了它,但事务失败。我试过只打电话给approve,而不打电话给transferFrom。它很管用。我正在林克比测试网上测试。 我在测试注入了web3的混音。我得到的错误是 此外,我在 rinkeby 测试网上的测试钱包中有令牌,我正在使用注入的 remix

  • 我的目标是创建一个智能合约,用户可以使用该合约存入erc20并提取erc20代币。我尝试使用token transfer实现此功能,transferfrom函数尝试将令牌发送到合约地址。但它显示了一些错误。我尝试了互联网上所有可能的解决方案,但没有运气。请帮助我######################################## 在此输入图像描述 在此输入图像描述 当我试图转移使用保存

  • 最近,我在处理具有质押功能的智能合约时遇到了一个问题。通过IERC20界面,我设法与来自另一个合约的Erc20令牌进行交互,但仍然存在一个混乱。我正在开发一个智能合约,用户可以在智能合约中抵押我的代币(代币已经部署在网络中),当质押持续时间结束时,利益相关者可以获得他们的质押金额以及奖励的代币。对于奖励代币,我想铸造新的代币,以奖励我的智能合约中的利益相关者。如何在另一个智能合约中使用薄荷功能?我

  • 我正在审查OpenZeppelin的智能合约,在许多情况下,我发现往往存在冗余或重复的继承。 在本例中,ERC20实现了已经实现了IERC20的IERC20元数据。尽管如此,合同实现了这两个。我试着移除冗余接口,效果很好。这有什么原因吗?是否仅出于清晰或易读目的?

  • 环境要求 搭建测试网络 创建第一个合约 发布合约 执行合约 昵称 GOVM后台的合约流程 关键字 系统接口

  • 指导编写一个EOSIO的智能合约 模块 Account API 查询账户数据的API. Chain API 查询链内部状态的API. Database API 存储和检索EOS.IO区块链的数据API根据以下广泛结构来组织数据. Math API 定义常用的数学函数. Action API 定义用于查询操作属性的API. Memory API 定义常用的记忆功能. Console API 使应用程