【问题标题】:How to make minting function that takes 0.1 ethereum in Solidity?如何在 Solidity 中制作需要 0.1 个以太币的铸币功能?
【发布时间】:2022-07-24 20:04:30
【问题描述】:

有人可以解释一下如何在 Solidity 中创建一个为 0.1 eth 铸造令牌并在 HardHat 中验证它的函数吗?到目前为止我已经这样做了:

安全帽:

[owner] = await ethers.getSigners();
const Nft = await ethers.getContractFactory("contract");
const nft = await Nft.deploy(owner.address);

prov = ethers.getDefaultProvider();
let balance = await prov.getBalance(owner.address);
console.log(balance); <-- evaluates to 10000000000000

await hoodie.mint({ value: ethers.utils.parseEther("0.1") });

console.log(balance); <-- still evaluates to 10000000000000

坚固性:

function mint() payable public returns (uint256) {;
        require(msg.value == 0.1 ether || msg.value == 100000000000000000 wei, "Transaction amount has to be 0.1 eth");

        _safeMint(msg.sender, token_id);

        return token_id;
    }

提前致谢!

【问题讨论】:

  • 如果我理解正确的话,你想铸造一个 NFT 并将 0.1 以太币转移到合约中,对吧?

标签: token ethereum solidity nft hardhat


【解决方案1】:

在这种情况下,

您可以尝试添加批准和转移方法。

approve 需要您批准资金转帐

transferFrom 需要进行资金转移

合同:

function mint() payable public returns (uint256) {
     require(msg.value == 0.1 ether || msg.value == 100000000000000000 
         wei, "Transaction amount has to be 0.1 eth");

     IERC20(*the ETH address here*).approve(msg.sender, msg.value);
     IERC20(*the ETH address here*).transferFrom(msg.sender, address(this), msg.value);

      _safeMint(msg.sender, token_id);

     return token_id;
    }

【讨论】:

  • 这个实现是否也适用于 ERC721,忘了说我使用的是那个标准?
  • 是的,就是将资金从一个地址转移到另一个地址
【解决方案2】:
     require(msg.value == 0.1 ether || msg.value == 100000000000000000 
         wei, "Transaction amount has to be 0.1 eth");

      payable(this).transfer(msg.value);

      _safeMint(msg.sender, token_id);

     return token_id;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-22
    • 2022-12-18
    • 1970-01-01
    • 2021-12-22
    • 2021-09-02
    • 2019-10-17
    • 2022-11-14
    • 2023-01-16
    相关资源
    最近更新 更多