Solidity

記錄使用者組鑄造的數量

  • February 23, 2022

嗨,我正在開發一個薄荷功能,其中有 3 個使用者組,即 A、B、C。總供應量分為 2 個,2 個使用者組共享相同數量的供應量。我正在尋找一種方法來跟踪 A 組鑄造的總數,以便在我的 B 組邏輯中使用該變數。

這是我的程式碼精簡以說明我的意思-

       uint256 public maxSupply = 2000;

       if(groupA == true) {
           maxSupply = 1000; 
           uint256 totalMinted = ?; // NEED TO KEEP TRACK ON HOW MANY WERE MINTED

        uint256 ownerTokenCount = addressMintedBalance[msg.sender];
        require(ownerTokenCount + _mintAmount <= perAddressLimit, "max per address exceeded");
       }
       if(groupB == true) {
           maxSupply = 1000 - totalMinted; // GET REMAINING SUPPLY TOTAL
       } 
       if(groupC == true) {
        maxSupply = 1000;
       }

使用 ownerTokenCount 我可以跟踪為使用者鑄造的數量,但我需要使用 group A 函式跟踪鑄造的總量。任何不需要大量氣體的想法?

對於我的解決方案,我最終在我的函式中使用了帶有一些自定義邏輯的計數器 -

import "@openzeppelin/contracts/utils/Counters.sol";
...
using Counters for Counters.Counter;
...
Counters.Counter private supply;
...
supply.increment();

如果您想要一個非常低的氣體解決方案,假設您已經有辦法知道使用者何時屬於每個組以及每個組的限制似乎是一個小數字,您可以嘗試使用按位運算來儲存每個組的數量已經鑄造並將其寫入單個變數,為每個值分配有限數量的字節,這樣如果您一次需要三個值,您可以用更少的氣體進行讀寫

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