The architecture of Covenants Routines contracts is designed to be as general purpose as possible so as to make it easy for individual wallets, organizations, and all customized smart contracts to host and integrate them.
To this end, integration with these contracts is represented by an extension that can adapt to the needs of different projects. And, in fact, the contracts do not even have to know who their host is, since integration with them is carried out entirely by the extension.
For this reason, it is important that the extension is in line with general integration needs. While it can be freely programmed, it has three mandatory functions that enable it to interact correctly with the underlying Routines contract. These three functions are:
function active() public view returns (bool)
function receiveTokens (address memory tokenAddresses, uint256 memory transferAmounts, uint256 memory amountsToMint) public
function deactivationByFailure() public
However, the content of these functions is also at the discretion of the extension developer.
This means that in order to integrate from the outside, you only need to write the extension and link it to the contract. The general function of the contract remains the same regardless of whether the host is a wallet, an Organization or a customized smart contract. The only thing that changes is the way the extension is integrated.