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

Git Source

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

NameTypeDescription
registeredAgentAddressaddressThe registered agent address
registeredAgentRegisteredAgentThe 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

NameTypeDescription
nftContractaddressThe nft contract
registeredAgentAddressaddressThe registered agent address
registeredAgentRegisteredAgentThe 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

NameTypeDescription
registeredAgentAddressaddressThe registered agent address

Returns

NameTypeDescription
<none>boolbool Boolean indicating if the address is question is a registered agent or not
<none>stringstring 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

NameTypeDescription
nftContractaddressThe nft contract (set to the zero address if not looking for an override)
registeredAgentAddressaddressThe registered agent address

Returns

NameTypeDescription
registeredAgentRegisteredAgentThe 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

Git Source

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

NameTypeDescription
initOwneraddressThe 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

NameTypeDescription
registeredAgentAddressaddressThe registered agent address
registeredAgentRegisteredAgentThe 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

NameTypeDescription
nftContractaddressThe nft contract
registeredAgentAddressaddressThe registered agent address
registeredAgentRegisteredAgentThe 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

NameTypeDescription
registeredAgentAddressaddressThe registered agent address

Returns

NameTypeDescription
<none>boolbool Boolean indicating if the address is question is a registered agent or not
<none>stringstring 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

NameTypeDescription
nftContractaddressThe nft contract (set to the zero address if not looking for an override)
registeredAgentAddressaddressThe registered agent address

Returns

NameTypeDescription
registeredAgentRegisteredAgentThe registered agent struct

supportsInterface

function supportsInterface(bytes4 interfaceId) public view override returns (bool);

Errors

NotCreatorOrAdmin

not creator or admin for nft contract

error NotCreatorOrAdmin();