Solidity

我們可以從前端的 bytes32 雜湊中返回值嗎

  • August 1, 2022

我有一個價值是 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

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