【发布时间】: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 地址的研究。
-
马蒂奇
https://mumbai.polygonscan.com/address/0x0000000000000000000000000000000000001010 https://polygonscan.com/address/0x0000000000000000000000000000000000001010
-
WMATIC
https://mumbai.polygonscan.com/address/0x9c3c9283d3e44854697cd22d3faa240cfb032889#code https://polygonscan.com/address/0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270
如果我在我的 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