[英]Allowing contract to take ERC20 tokens from msg.sender
我對 Solidity 有點陌生,並且在津貼和批准方面苦苦掙扎。 我希望允許我的智能合約從msg.sender
獲取 ERC20 令牌(在本例中為 LINK)。 我在 Goerli 上使用 Remix,因此msg.sender
將是 MetaMask 錢包地址。 我已經嘗試對此進行研究,但我猜我是 ERC20 令牌上的函數,而不僅僅是我的智能合約中的函數。
每當設置approveAmount
,我都會在 MetaMask 中為msg.sender
簽署合同。
樣品.溶膠:
//SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
contract SampleContract {
IERC20 public LinkToken;
address public LinkAddress = 0x326C977E6efc84E512bB9C30f76E30c160eD06FB;
constructor() {
LinkToken = IERC20(LinkAddress);
}
// MetaMask address approves that address(this) can take 123 LINK
function approveAmount() public {
LinkToken.approve(address(this), 123);
}
// Contract will check how much LINK MetaMask address has allowed for transfer
function getAllowance() public view returns(uint256) {
return LinkToken.allowance(address(this), msg.sender);
}
}
任何以太坊合約都可以接收 ERC20 代幣。 允許市場(DEFI 或 NFT)代表您進行轉賬需要allowance
和approve
。
ERC20 標准中的 approve 和 allowance 方法到底在做什么?
您想將鏈接令牌發送到您的合同,訪問元掩碼,將鏈接令牌發送到您的鏈接資產。 確保您已經配置了元掩碼。
要測試你是否收到了合約的代幣,請在你的合約上寫入 function:
function getBalance() public view returns (uint) {
return LinkToken.balanceOf(address(this));
}
收到令牌后,請在混音上調用此 function。 如果你想發送ether
到你的合約,你需要額外的配置。 但是在嘗試向您的合約發送一些ether
之前,您會看到失敗。
為了在您的合同中接收ether
幣,您必須將這個 function 添加到您的合同中。
receive() payable external {}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.