[英]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.