繁体   English   中英

如何在 Solidity 中制作需要 0.1 个以太坊的铸币功能?

[英]How to make minting function that takes 0.1 ethereum in Solidity?

有人可以解释一下如何在 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;
    }

提前致谢!

在这种情况下,

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

需要批准才能让您批准资金转移

需要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;
    }

您需要使用payable在智能合约中转移ETH或BNB等原生代币。

然后您可以使用令牌 ID 调用 _safeMint() 私有函数。 您还需要在铸币后增加令牌 ID。

function mint() payable public returns (uint256) {
     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);

      token_id.increament();

      return token_id;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM