Solidity
我們可以從前端的 bytes32 雜湊中返回值嗎
我有一個價值是
bytes32 private constant ADMIN = keccak256(abi.encodePacked("ADMIN"));
所以一個值儲存在 ADMIN 中,它是 byte32 我想要一種方式,我可以通過它在前端顯示什麼值儲存在 bytes32
我的網站需要多個權限級別,所以我希望管理員擁有權限,他們可以在創建角色後創建角色,可以將其分配給已完成的地址,但只需要一種我可以獲得 bytes32 值的方法
你可能不明白這裡發生了什麼。這段程式碼:
bytes32 private constant ADMIN = keccak256(abi.encodePacked("ADMIN"));
只是一個字元串的 keccak256 散列。像這樣的庫將使用雜湊作為映射的鍵。
所以是的,您可以輕鬆地在前端顯示數據。例如,在 Ethers 中(這裡有一個關於 Ethers keccak256 的有用資源):
ethers.utils.keccak256(ethers.utils.toUtf8Bytes("ADMIN"));
將與儲存在合約中的雜湊相同。但它不會真正幫助你做任何事情。
聽起來您正在嘗試確保有一個管理員具有薄荷或類似權限的權限。這通常不由前端處理,而是在實際契約中處理。我不知道您使用的是什麼庫,但應該有一個功能可以將角色添加到地址。(這是 OZ 訪問控制中的位置。)部署者通常會收到一個預設角色。
您要保護的函式應該有一個
require
或自定義錯誤。例如:// this isn't exactly like the OZ Access Control listed above mapping(bytes32 => mapping(address => bool)) roles; function mint(address recipient, uint256 quantity) public { require(roles[ADMIN][msg.sender], "unauthorized"); // the rest of the mint logic goes here