[英]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.