Contract-Invocation
智能合約上的使用者白名單
假設我有這個智能合約,只能由一組已知使用者(有限的地址列表)呼叫。
實現此邏輯的明顯方法是簡單地跟踪列表中的這些地址,並在呼叫函式時驗證地址,儘管我需要考慮一些限制:
- 我不能在契約上公開這些地址。所以不能在合約上儲存地址列表。
- 我對可以列入白名單的使用者數量沒有限制。該契約中可能有幾百萬使用者被列入白名單。
我找不到解決這個問題的好方法,我認為這應該很常見。我正在考慮進行基於令牌的驗證,但不確定這在智能合約中是否可行。這個案例有什麼解決方案嗎?
以前使用者的答案對於數百萬可能的使用者列表並不適用——您將花費數十億的汽油來添加所有使用者,這顯然太多了。你想要的是一個 Merkle 樹,它幾乎可以免費添加任意數量的使用者。這是一個很好的例子,應該提供你想要的。
您可以使用私有欄位和公共 set 方法解決您的兩個問題。
contract MyToken is Ownable { mapping(address -> bool) whiteListUsers; // this is private modifier onlyWhiteListed() { require(whiteListUsers[msg.sender], "Only whitelist allowed"); _; } function addToWhiteList(address[] users) public onlyOwner { for (int i = 0; i < users.length; i++) { whiteListUsers[users[i]] = true; } } function doSomething() public onlyWhiteListed() { // your logic } }