簡體   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