Solidity
在前端更新我的智能合約的 Mint Price 功能
早上好!我的智能合約具有在 totalSupply 達到 2000 個代幣鑄造後更新價格的功能。我在前端添加了一個功能,但我認為根本不干淨。在我的 Dapp 上執行良好(使用 React)但是……你有什麼想法讓它更乾淨嗎?我在 mint 函式中創建了一個函式來複製智能合約中的 Updateprice,因為我無法直接從 contract.methods 呼叫智能合約函式……有什麼建議嗎?正如我所說的已經開始工作了,但我很確定我可以獲得更清晰的程式碼。非常感謝您的建議!
智能合約:
uint128 public publicSalePrice = 0.01 ether; //Function to update publicSalePrice once 2.000 have been minted function updatePrice() internal returns (uint256) { return publicSalePrice = totalSupply() < 2000 ? 0.01 ether : 0.03 ether; } //Function Public Mint. function publicSaleMint(uint256 _quantity) external payable callerIsUser { require(sellingStep == Step.PublicSale, "Public sale is not activated"); require(totalSupply() + _quantity <= MAX_PUBLIC, "Max supply exceeded"); require(totalSupply() + _quantity <= MAX_SUPPLY, "Max supply exceeded"); require(msg.value >= updatePrice() * _quantity, "Not enought funds"); _safeMint(msg.sender, _quantity); }
現在是前端(函式 setprice 是計算 mintrate 的地方)。我還創建了一個變數 nuevoprice 來獲取智能合約的 totalSupply:
async function mint() { var _mintAmount = Number(document.querySelector("[name=amount]").value); var nuevoprice = Number(await contract.methods.totalSupply().call()); var maxsupply = 10000; function setprice() { if(nuevoprice < 2000){ return Web3.utils.toWei('0.01', 'ether');} else if(nuevoprice <= maxsupply){ return Web3.utils.toWei('0.03', 'ether');} } var mintRate = Number(setprice()); var totalAmount = mintRate * _mintAmount; await Web3Alc.eth.getMaxPriorityFeePerGas().then((tip) => { Web3Alc.eth.getBlock('pending').then((block) => { var baseFee = Number(block.baseFeePerGas); var maxPriority = Number(tip); var maxFee = baseFee + maxPriority; contract.methods.publicSaleMint(_mintAmount) .send({from: account, value: String(totalAmount), maxFeePerGas: maxFee, maxPriorityFeePerGas: maxPriority}); }); }) }
有幾點需要注意,但沒什麼大不了的。
require(totalSupply() + _quantity <= MAX_PUBLIC, "Max supply exceeded"); require(totalSupply() + _quantity <= MAX_SUPPLY, "Max supply exceeded");
如果
MAX_PUBLIC
andMAX_SUPPLY
中的一個總是大於另一個,您可以刪除一個語句。銷售結束後有機會
setprice
返回undefined
,打破進一步的計算。考慮從您的請求中刪除 gas 費用估算。當請求交易簽名時,Metamask 和其他提供者將在內部計算這些值。