【问题标题】:Native coin MATIC has a Contract Address on the Polygon Network?原生币 MATIC 在 Polygon Network 上有合约地址?
【发布时间】:2022-12-10 07:57:33
【问题描述】:

我目前正在为 Polygon 区块链开发捐赠智能合约。 捐赠合同应接收多种类型的硬币,如(MATIC、USDT、USDC 等)。

我首先制作了如下所示的捐赠功能:

function donate(address donor, address token, bool isNativeCoin, uint256 amount);

但后来,我注意到 Polygon 网络的 MATIC 地址与其他基于 evm 的链不同。

所以我删除了方法参数中的isNativeCoin标志变量。

function donate(address donor, address token, uint256 amount);

但我不知道那是真正的 MATIC 地址,也不知道 Polygon 与其他链有何不同。

这是我对 Polygon MATIC 和 WMATIC 地址的研究。

如果我在我的 metamask 钱包中导入 0x0000000000000000000000000000000000001010 作为代币,它会显示与 Native MATIC 余额相同的余额。这太有趣了。

这是完整的模型代码。

    address MATIC_TOKEN = 0x0000000000000000000000000000000000001010;

    DonationInfo[] donations;
    
    function _safeTransferMatic(address to, uint256 amount) internal {
      (bool success, ) = to.call{value: amount}("");
      require(success, "MATIC_TRANSFER_FAILED");
    }
        
    function donate(address donor, address token, uint256 amount) {
      donations.push(DonationInfo(donor, token, amount);
    }
    
    function sendDonation(uint256 donateIndex) {
      if (donations[donateIndex].token == MATIC_TOKEN) {
        _safeTransferMatic(charityPartner, donations[donateIndex].amount);
      } else {
IERC20(donations[donateIndex].token).safeTransfer(charityPartner,donations[donateIndex].amount);
      }
    }

上面的代码是正确的还是我应该使用isNativeCoin标志变量?

您能解释一下 Polygon MATIC 地址吗?

【问题讨论】:

    标签: optimization solidity polygon erc20 evm


    【解决方案1】:

    0x0000000000000000000000000000000000001010 是一个预编译支持一些EIP-20 函数,例如balanceOf(address)name()symbol()decimals()。它确实不是支持transfer(address, uint256)approve(address, uint256)transferFrom(address, address, uint256)等功能。

    基本上,它是一个特殊地址,不是支持部分但不是所有 EIP-20 功能的合约。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-05
      • 2021-07-18
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      • 2022-10-22
      相关资源
      最近更新 更多