ProtocolTokenAuthority
allows governance to specify which addresses are allowed to mint
or burn
protocol tokens. This is done by either setting an address as the root
of the contract, the owner
of the contract or by whitelisting an address in the authorizedAccounts
mapping.root
- contract's root controlling address.owner
- the second most powerful address controlling the contract. It cannot set the root
but it can set another owner
.authorizedAccounts[account: address]
- mapping of addresses that are allowed to print protocol tokens.isRootCalling
- modifier checking if the msg.sender
is the root
isRootOrOwnerCalling
- modifier checking if the msg.sender
is the root
or the owner
setRoot(usr: address)
- sets a new rootsetOwner(usr: address)
- sets a new owneraddAuthorization(usr: address)
- authorize a new address to print tokensremoveAuthorization(usr: address)
- de-authorize an address from printing tokenscanCall(src: address, address, sig: bytes4)
- checks whether an address can call mint
, burn
or burnFrom
inside the protocol tokenauth
ed accounts, owner
and root
are the ones who pass the canCall
check and thus, are able mint
, burn
and burnFrom
. root
and owner
can add or remove authorized addresses. owner
cannot set a new root
but can only change the owner
. root
has complete power and can change both the root
and the owner
.