簡體   English   中英

允許合約從 msg.sender 獲取 ERC20 代幣

[英]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)代表您進行轉賬需要allowanceapprove

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM