Transactions

使用 Rinkeby Clique PoA 在專用網路中創建白名單?

  • March 26, 2022

我想創建一個專用網路,將智能合約的創建限制為帳戶白名單。有什麼選擇嗎?

我認為您可以通過僅在設置網路時為您希望能夠與 Ether 創建契約的賬戶預先註資來實現這一點——Puppeth 為您提供了在創建創世塊時執行此操作的選項。

創建合約會消耗氣體,因此只有在您的網路中有資金的賬戶才能創建合約。

是的,可以將合約的創建限制在白名單賬戶中。我在具有 PoA 並基於奇偶校驗節點乙太坊客戶端的公共許可區塊鏈中做到了這一點。

您唯一需要的是一個智能合約和 spec.json 文件中的兩個條目。可以在此處以精細的方式向帳戶授予權限。

管理訪問的契約

您的合約程式碼應如下所示(來源https://gitlab.com/ihk-muenchen/open-ethereum-hash-manager):

pragma solidity 0.5.17;

import "./openzeppelin/access/roles/WhitelistedRole.sol";

// @title Manages transaction on the network
contract TransactionType is WhitelistedRole {
   // ---- EVENTS ----------------------------------------------------------------------------------------------------
   event ConstructorDone(address _creator, string version);

   // ---- FIELDS -----------------------------------------------------------------------------------------------------
   /// Allowed transaction types mask
   uint32 private constant NONE = 0;
   uint32 private constant BASIC = 0x01;
   uint32 private constant CALL = 0x02;
   uint32 private constant CREATE = 0x04;
   uint32 private constant ALL = 0x0f;

   // ---- CONSTRUCTOR ------------------------------------------------------------------------------------------------

   constructor() public {
       addWhitelisted(msg.sender); // deployment account

       emit ConstructorDone(msg.sender, "4.0.0");
   }

   // ---- FUNCTIONS -------------------------------------------------------------------------------------------------

   function allowedTxTypes(address user) public view returns (uint32) {
       if (isWhitelisted(user)) {
           return ALL;
       }
       return CALL | BASIC; //contract calls and Eth transfers allowed.
   }
}

將此合約部署到區塊鏈並使用您希望啟用的帳戶添加呼叫 addWhitelisted()。

區塊鏈規範

然後你需要像這樣將合約地址添加到你的 spec.json 中:

...
"params": {
  "transactionPermissionContract": "0xccc768B2691720fd4ba5aA7058Bd992Ee074cA10",
  "transactionPermissionContractTransition": "0x32"
},
...

將合約地址(此處為 0xccc768B2691720fd4ba5aA7058Bd992Ee074cA10)的值替換為您自己的值。在transactionPermissionContractTransition中使用十六進制數設置起始塊(此處為塊號 50)。

在https://openethereum.wiki/Permissioning/#transaction-type找到更多資訊

免責聲明

我不是 100% 確定這也適用於 Rinkeby Clique PoA - 但非常有信心。所描述的解決方案已使用單個乙太坊客戶端網路實施和測試。我們開始研究多乙太坊客戶端解決方案,但因為配置中存在一些限製而停止,結果證明是您的特定要求的阻礙。

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