DFS Registry
All the contract addresses used in the protocol are registered in the DFSRegistry
contract.
Each contract has an unique ID and the same ID cannot be registered twice. A contract address can be fetched by calling getAddr(id)
.
// Example of fetching the contract address
const contractAddr = await registry.getAddr(bytes4(utils.keccak256(utils.toUtf8Bytes(contractName))));
The first time a contract address is registered a waitPeriod
is also set, which represents the number of seconds needed to pass before the contract address can be updated. In order to update the contract address you call startContractChange
and wait for the entry's waitPeriod
before you can call approveContractChange
. This is done so that users have sufficient time to exit the system, or the owners have enough time to react in case of a malicious contract upgrade.
While the contract is in the process of an update, the update can be canceled using cancelContractChange
.
Below is the interface of the contract:
contract DFSRegistry {
function getAddr(bytes4 _id) public view returns (address);
function isRegistered(bytes4 _id) public view returns (bool);
function addNewContract(bytes4 _id, address _contractAddr, uint256 _waitPeriod) public onlyOwner;
function startContractChange(bytes4 _id, address _newContractAddr) public onlyOwner;
function approveContractChange(bytes4 _id) public onlyOwner;
function cancelContractChange(bytes4 _id) public onlyOwner;
function startWaitPeriodChange(bytes4 _id, uint256 _newWaitPeriod) public onlyOwner;
function approveWaitPeriodChange(bytes4 _id) public onlyOwner;
function cancelWaitPeriodChange(bytes4 _id) public onlyOwner
}
Last updated
Was this helpful?