Solidity

在前端更新我的智能合約的 Mint Price 功能

  • August 29, 2022

早上好!我的智能合約具有在 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_PUBLICandMAX_SUPPLY中的一個總是大於另一個,您可以刪除一個語句。

銷售結束後有機會setprice返回undefined,打破進一步的計算。

考慮從您的請求中刪除 gas 費用估算。當請求交易簽名時,Metamask 和其他提供者將在內部計算這些值。

引用自:https://ethereum.stackexchange.com/questions/134566