Transient Labs T.R.A.C.E. Registered Agents Registry
Registered agents are a way for to ensure that proper data is inscribed on-chain for T.R.A.C.E. This registry allows for global registered agents to be created or removed as needed. It also allows creators to add their own registered agents per contract.
Disclaimer
This codebase is provided on an "as is" and "as available" basis.
We do not give any warranties and will not be liable for any loss incurred through any use of this codebase.
License
This code is copyright Transient Labs, Inc 2023 and is licensed under the MIT license.
ITRACERSRegistry
Author: transientlabs.xyz
Interface for TRACE Registered Agents Registry
Functions
setRegisteredAgent
Function to add a global registered agent by the contract owner
This is a for a global registered agent so registeredAgent.numberOfStories
is ignored
MUST emit the event RegisteredAgentUpdate
function setRegisteredAgent(address registeredAgentAddress, RegisteredAgent memory registeredAgent) external;
Parameters
Name | Type | Description |
---|---|---|
registeredAgentAddress | address | The registered agent address |
registeredAgent | RegisteredAgent | The registered agent |
setRegisteredAgentOverride
Function to add a registered agent override by an nft contract owner or admin
MUST emit the event RegisteredAgentOverrideUpdate
function setRegisteredAgentOverride(
address nftContract,
address registeredAgentAddress,
RegisteredAgent calldata registeredAgent
) external;
Parameters
Name | Type | Description |
---|---|---|
nftContract | address | The nft contract |
registeredAgentAddress | address | The registered agent address |
registeredAgent | RegisteredAgent | The registered agent |
isRegisteredAgent
Function callable by an nft contract to check the registered agent
This MUST be called by the nft contract in order to check overrides properly
Adjusts overrides that are limited in the number of stories allowed, hence no view modifier
function isRegisteredAgent(address registeredAgentAddress) external returns (bool, string memory);
Parameters
Name | Type | Description |
---|---|---|
registeredAgentAddress | address | The registered agent address |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | bool Boolean indicating if the address is question is a registered agent or not |
<none> | string | string The name of the registered agent |
getRegisteredAgent
External view function to get a registered agent, returning an overrided agent for a contract if it exists
function getRegisteredAgent(address nftContract, address registeredAgentAddress)
external
view
returns (RegisteredAgent memory registeredAgent);
Parameters
Name | Type | Description |
---|---|---|
nftContract | address | The nft contract (set to the zero address if not looking for an override) |
registeredAgentAddress | address | The registered agent address |
Returns
Name | Type | Description |
---|---|---|
registeredAgent | RegisteredAgent | The registered agent struct |
Events
RegisteredAgentUpdate
event whenever a registered agent is added, removed, or updated
event RegisteredAgentUpdate(
address indexed sender, address indexed registeredAgentAddress, RegisteredAgent registeredAgent
);
RegisteredAgentOverrideUpdate
event whenever a registered agent override is added, removed, or updated
event RegisteredAgentOverrideUpdate(
address indexed sender,
address indexed nftContract,
address indexed indexedregisteredAgentAddress,
RegisteredAgent registeredAgent
);
Structs
RegisteredAgent
Struct defining a registered agent
struct RegisteredAgent {
bool isPermanent;
uint128 numberOfStories;
string name;
}
TRACERSRegistry
Inherits: Ownable, ERC165, ITRACERSRegistry
Author: transientlabs.xyz
Registry for TRACE Registered agents
State Variables
ADMIN_ROLE
bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE");
_registeredAgents
mapping(address => RegisteredAgent) private _registeredAgents;
_registeredAgentOverrides
mapping(address => mapping(address => RegisteredAgent)) private _registeredAgentOverrides;
Functions
constructor
constructor(address initOwner) Ownable(initOwner);
Parameters
Name | Type | Description |
---|---|---|
initOwner | address | The initial owner of the contract |
setRegisteredAgent
Function to add a global registered agent by the contract owner
This is a for a global registered agent so registeredAgent.numberOfStories
is ignored
function setRegisteredAgent(address registeredAgentAddress, RegisteredAgent memory registeredAgent)
external
onlyOwner;
Parameters
Name | Type | Description |
---|---|---|
registeredAgentAddress | address | The registered agent address |
registeredAgent | RegisteredAgent | The registered agent |
setRegisteredAgentOverride
Function to add a registered agent override by an nft contract owner or admin
MUST emit the event RegisteredAgentOverrideUpdate
function setRegisteredAgentOverride(
address nftContract,
address registeredAgentAddress,
RegisteredAgent calldata registeredAgent
) external;
Parameters
Name | Type | Description |
---|---|---|
nftContract | address | The nft contract |
registeredAgentAddress | address | The registered agent address |
registeredAgent | RegisteredAgent | The registered agent |
isRegisteredAgent
Function callable by an nft contract to check the registered agent
This MUST be called by the nft contract in order to check overrides properly
function isRegisteredAgent(address registeredAgentAddress) external returns (bool, string memory);
Parameters
Name | Type | Description |
---|---|---|
registeredAgentAddress | address | The registered agent address |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | bool Boolean indicating if the address is question is a registered agent or not |
<none> | string | string The name of the registered agent |
getRegisteredAgent
External view function to get a registered agent, returning an overrided agent for a contract if it exists
function getRegisteredAgent(address nftContract, address registeredAgentAddress)
external
view
returns (RegisteredAgent memory registeredAgent);
Parameters
Name | Type | Description |
---|---|---|
nftContract | address | The nft contract (set to the zero address if not looking for an override) |
registeredAgentAddress | address | The registered agent address |
Returns
Name | Type | Description |
---|---|---|
registeredAgent | RegisteredAgent | The registered agent struct |
supportsInterface
function supportsInterface(bytes4 interfaceId) public view override returns (bool);
Errors
NotCreatorOrAdmin
not creator or admin for nft contract
error NotCreatorOrAdmin();