Step 3: HOW
How do you gate it?
You can create your own hooks or modifiers to include a guard in your contracts. You simply read from Keyring the status of an address with respect to a policy. This is a flexible and easy way to customise the integration to your needs.
Contact us if you need any help setting it up. We have a library of examples you can leverage.
Integration Example
Let's assume we want to guard an ERC20 transfer function.
Firstly, define the Keyring interface for checking credentials.
Secondly, define the Policy ID and the KeyringCredentialViewer address in the contract constructor. You may optionally define a Whitelist
mapping with associated values.
While Keyring currently allows whitelisting via the Keyring infrastructure at this time, this capability will be deprecated in future versions. This does not mean whitelisting cannot be performed by Keyring on behalf of an integrating partner, but it will not be handled by default. Integrating partners should define their whitelist locally on smart contracts or seek assistance from Keyring to create a whitelist-capable integration.
Then, override the functions that need permissioning. In this example OpenZepplin 5.0.2 is used for the base ERC20 implementation and so we override the _update
function in order to perform a Keyring check.
When dealing with token transfers, make sure to properly address the mint
function (where from
is the null address 0x0000...) and the burn
function (where the to
is the zero address), as the address(0)
is always regarded as unauthorised.
Last updated