1

我有 3 份合同要执行。合同是master和。所以主合约是由一个人发起的,即私有链的所有者(基于geth)。管理合约提供对某些地址的访问。这些管理实例由主创建。我正在使用修饰符来确保这一点。客户合同只能由管理员和主合同进行交互。admincustomer

我已将这些地址映射到存储在本地 Redis 数据库中的帐户(使用用户名和密码)。我的合同结构截图如下:

主合同

contract MasterContract{
    bool public state = false;
    address public masterAddress;
    bool permCheck;


    // ACL
    // Subject(Role) - Object/Subject - permission - On/Off
    mapping (uint => mapping(uint => perm)) public acl;

    // Init Function
    function masterContractInit(string name,string detail){
      if(msg.sender!="0x0"){
        throw;
      }else{
        masterAddress = msg.sender;
      }
    }

    modifier onlyMasterAccess{
      if (msg.sender == masterAddress) _
      else throw;
    }
}

管理合同

contract AdminContract{
  bool state=false;
  struct Admin{
      bool status;
      string name;
  }
  mapping (address => admin ) public admins;

  // How to reference this masterAddress?
  modifier checkMasterAndAdminAccess{
    if (msg.sender == masterAddress || admins[msg.sender].status) _
    else throw;
  }

  function initAdminContract() onlyMasterAccess{    
    state = true;
  }

  function addAdmin(address addr, string name) onlyMasterAccess{
    admins[addr]=Admin(true, name);
  }

  function revokeAdmin(address addr) onlyMasterAccess{
    if(addr!="0x0"){
      throw;
    }else{
      admins[addr].status = false;
    }
  }
}

客户合同

contract Customer{
  bool public state = false;

  function initCustomerContract() onlyMasterAccess{    
    state = true;
  }

  function foo() checkMasterAndAdminAccess{
    // Do something here
    // only admin or master can call this function
  }

  function bar(){
    // Do something, but allow others to modify this
  }   
}

现在我需要进一步了解如何组合这些合约,并参考客户合约中的 master 和 admin 地址来使用修饰符checkMasterAndAdminAccess。理想情况下,当编译成 ABI 并在我的 Nodejs 应用程序中使用它时,我希望将这些合约放入单独的文件中,因为它们会变得很大。

这是推荐的做法吗?

只有一个人控制一个主合约实例(因此只有一个地址可以访问它)。其他合约可能被多次实例化

我可以就如何实现上述目标获得一些指导。

4

0 回答 0