Skip to main content

JBDelegatesRegistry

This contract is used to register deployers of Juicebox Delegates. It is the deployer's responsibility to register their delegates in this registry and make sure their delegate implements IERC165.

Git Source

Mainnet: 0x7A53cAA1dC4d752CAD283d039501c0Ee45719FaC

Goerli: 0xCe3Ebe8A7339D1f7703bAF363d26cD2b15D23C23

Inherits: IJBDelegatesRegistry

Mostly for front-end integration purposes. The delegate address is computed from the deployer address and the nonce used to deploy the delegate.

State Variables

deployerOf

Track which deployer deployed a delegate, based on a proactive deployer update

mapping(address => address) public override deployerOf;

Functions

addDelegate

Add a delegate to the registry (needs to implement erc165, a delegate type and deployed using create)

frontend might retrieve the correct nonce, for both contract and eoa, using ethers provider.getTransactionCount(address) or web3js web3.eth.getTransactionCount just before the delegate deployment (if adding a delegate at a later time, manual nonce counting might be needed)

function addDelegate(address _deployer, uint256 _nonce) external override;

Parameters

NameTypeDescription
_deployeraddressThe address of the deployer of a given delegate
_nonceuint256The nonce used to deploy the delegate

addDelegateCreate2

Add a delegate to the registry (needs to implement erc165, a delegate type and deployed using create2)

_salt is based on the delegate deployer own internal logic while the deployment bytecode can be retrieved in the deployment transaction (off-chain) or via abi.encodePacked(type(delegateContract).creationCode, abi.encode(constructorArguments)) (on-chain)

function addDelegateCreate2(address _deployer, bytes32 _salt, bytes calldata _bytecode) external override;

Parameters

NameTypeDescription
_deployeraddressThe address of the contract deployer
_saltbytes32An unique salt used to deploy the delegate
_bytecodebytesThe deployment bytecode used to deploy the delegate (ie including constructor and its arguments)

_checkAndAddDelegate

function _checkAndAddDelegate(address _delegate, address _deployer) internal;

_addressFrom

Compute the address of a contract deployed using create1, by an address at a given nonce

Taken from https://ethereum.stackexchange.com/a/87840/68134 - this wouldn't work for nonce > 2**32, if someone do reach that nonce please: 1) ping us, because wow 2) use another deployer

function _addressFrom(address _origin, uint256 _nonce) internal pure returns (address _address);

Parameters

NameTypeDescription
_originaddressThe address of the deployer
_nonceuint256The nonce used to deploy the contract

Events

DelegateAdded

Emitted when a deployed delegate is added

event DelegateAdded(address indexed _delegate, address indexed _deployer);

Errors

JBDelegatesRegistry_incompatibleDelegate

Throws if the delegate is not compatible with the Juicebox protocol (based on ERC165)

error JBDelegatesRegistry_incompatibleDelegate();