Baseline Protocol Truffle Box
Developer Tools 🛠️
Workflows 🧰
Organization Registry 💼
Each organization registered within the OrgRegistry first generates a secp256k1 keypair and uses the Ethereum public address representation as "primary key" for future resolution. This key SHOULD NOT sign transactions. A best practice is to use an HD wallet to rotate keys, preventing any account from signing more than a single transaction.
Note that an organization may not update its address.
struct Org {
address orgAddress;
bytes32 name;
bytes messagingEndpoint;
bytes whisperKey;
bytes zkpPublicKey;
bytes metadata;
}
struct OrgInterfaces {
bytes32 groupName;
address tokenAddress;
address shieldAddress;
address verifierAddress;
}
mapping (address => Org) orgMap;
mapping (uint => OrgInterfaces) orgInterfaceMap;
uint orgInterfaceCount;
Org[] public orgs;
mapping(address => address) managerMap;
event RegisterOrg(
bytes32 _name,
address _address,
bytes _messagingEndpoint,
bytes _whisperKey,
bytes _zkpPublicKey,
bytes _metadata
);
event UpdateOrg(
bytes32 _name,
address _address,
bytes _messagingEndpoint,
bytes _whisperKey,
bytes _zkpPublicKey,
bytes _metadata
);
Shield 🛡
Unlike the Radish34 Reference Implementation, the contracts package does not include a "shield" contract. Rather, it is up to each workgroup to determine a suitable shielding mechanism to ensure privacy. For example, the IBaselineRPC implementation within the Nethermind client used in the BRI-1 Reference Implementation ships with shield contract binaries (i.e., including the MerkleTreeSHA contract).
Registry Contracts Overview 🏢
Files Description Table
| contracts/registry/IOrgRegistry.sol | 0514e15aa16c4c92f61c3cdc3f17d93e3ee56377 |
| contracts/registry/OrgRegistry.sol | e0bb2ddd83c0d3373d6b58d50ec756a833ac88d0 |
| contracts/registry/Registrar.sol | 6507a72d2283a5e2cc04bc99ea90ef1f878fe9b7 |
Contracts Description Table
| └ | Function Name | Visibility | Mutability | Modifiers |
| | | | |
| IOrgRegistry | Interface | | | |
| └ | registerOrg | External ❗️ | 🛑 | NO❗️ |
| └ | updateOrg | External ❗️ | 🛑 | NO❗️ |
| └ | getOrgCount | External ❗️ | | NO❗️ |
| └ | getOrg | External ❗️ | | NO❗️ |
| | | | |
| OrgRegistry | Implementation | Ownable, ERC165Compatible, Registrar, IOrgRegistry | | |
| └ | | Public ❗️ | 🛑 | ERC165Compatible Registrar |
| └ | setInterfaces | Public ❗️ | 🛑 | onlyOwner |
| └ | getInterfaces | External ❗️ | | NO❗️ |
| └ | canImplementInterfaceForAddress | External ❗️ | | NO❗️ |
| └ | assignManager | External ❗️ | 🛑 | onlyOwner |
| └ | registerOrg | External ❗️ | 🛑 | onlyOwner |
| └ | updateOrg | External ❗️ | 🛑 | NO❗️ |
| └ | registerInterfaces | External ❗️ | 🛑 | onlyOwner |
| └ | getOrgCount | External ❗️ | | NO❗️ |
| └ | getOrg | External ❗️ | | NO❗️ |
| └ | getInterfaceAddresses | External ❗️ | | NO❗️ |
| | | | |
| Registrar | Implementation | | | |
| └ | | Public ❗️ | 🛑 | NO❗️ |
| └ | setInterfaceImplementation | Internal 🔒 | 🛑 | |
| └ | interfaceAddr | External ❗️ | | NO❗️ |
| └ | assignManagement | Internal 🔒 | 🛑 | |
| └ | getManager | Public ❗️ | | NO❗️ |
Legend
| 🛑 | Function can modify state |
| 💵 | Function is payable |
Privacy Contracts Description Report 🔮
Files Description Table
| contracts/privacy/IShield.sol | c4b6e694bbdd4317e6fdc1e595e467cb10e5e1dd |
| contracts/privacy/IVerifier.sol | ba4926ea2f01fde5d11362808fc1e573e69e31e3 |
| contracts/privacy/Shield.sol | 14415a0a47a10c0865993bdc3c8a350c683dc69f |
Contracts Description Table
| └ | Function Name | Visibility | Mutability | Modifiers |
| | | | |
| IShield | Interface | | | |
| └ | getVerifier | External ❗️ | | NO❗️ |
| └ | verifyAndPush | External ❗️ | 🛑 | NO❗️ |
| | | | |
| IVerifier | Interface | | | |
| └ | verify | External ❗️ | 🛑 | NO❗️ |
| | | | |
| Shield | Implementation | IShield, MerkleTreeSHA256 | | |
| └ | | Public ❗️ | 🛑 | MerkleTreeSHA256 |
| └ | getVerifier | External ❗️ | | NO❗️ |
| └ | verifyAndPush | External ❗️ | 🛑 | NO❗️ |
Legend
| 🛑 | Function can modify state |
| 💵 | Function is payable |
License
CC-0