This library is designed to simplify and standardise the process of fetching data and interacting with various DeFi protocols, which often have unique interfaces and data structures. Our adapters 1) fetch and transform underlying protocol data into a standardised format that can be easily used by portfolio dashboards and 2) generate transaction params to create and update protocol positions.
Note: Please note that in this library, adapters must query on-chain data to ensure accuracy and reliability, we do not accept centralised APIs to get positions, withdrawals, deposits, profits or rewards.
Watch the setup video for a detailed guide.
- Install:
nvm use
to select the environmentnpm i
to install dependenciesnpm run build
to build the CLI
- Run project:
npm run dev
to run the project
Continue watching videos for the following steps or, alternatively, find a written version in Steps to create a read adapter
Watch the build adapter video for a detailed guide.
- Use CLI:
npm run new-adapter
this launches our interactive CLI that will prompt you with a series of questions
Watch the inspect your adapter video for a detailed guide.
Watch the build contract classes from ABIs video for a detailed guide.
- Save a json file with your abi and add it to your ${protocolName}/contracts/abis/ folder
- Run:
npm run build-types
to generate your smart contract classes
Watch the build your DeFi asset metadata video for a detailed guide.
- Implement the
getProtocolToken
method in your adapter and make sure it is decorated with@CacheToDb
.
- If the adapter requires additional metadata. The
AdditionalMetadata
type should be updated accordingly, otherwise it should be deleted. - You can add any data that is serializable as JSON (including BigInt) as additional metadata.
- There are four protected fields that, if added, must adhere to stricter types. Those are:
{
underlyingTokens?: Erc20ExtendedMetadata[]
rewardTokens?: Erc20ExtendedMetadata[]
extraRewardTokens?: Erc20ExtendedMetadata[]
tokenId?: string
}
- Run:
npm run build-metadata-db -- -p <protocol-id> -pd <product-id>
to create your metadata files
Watch the build your snapshot tests video for a detailed guide.
- Populate your test cases file.
- Run:
npm run build-snapshots -- -p <protocol-id>
to build your snapshot tests
The tutorial video below shows an intro to on how to add write adapter actions to an existing read adapter:
Don't have a read adapter? And don't intend to create a read adapter? Then:
- Select "WriteOnlyAdapterTemplate" on our new-adapter CLI. See section "Build adapter steps" above for more information.
- Implement the
getProtocolToken
method see section "Build your DeFi asset metadata" above for more information. - Then follow the video tutorial below:
Watch the build write adapter video for a detailed guide.
Example code for write-adapters, as described in the above video:
export const WriteActionInputs = {
[WriteActions.Deposit]: z.object({
asset: z.string(),
amount: z.string(),
onBehalfOf: z.string(),
referralCode: z.number(),
}),
[WriteActions.Withdraw]: z.object({
asset: z.string(),
amount: z.string(),
to: z.string(),
}),
} satisfies WriteActionInputSchemas
async getTransactionParams({
action,
inputs,
}: Extract<
GetTransactionParams,
{ protocolId: typeof Protocol.YourProtocolKey; productId: 'YourProductId' }
>): Promise<{ to: string; data: string }> {
switch (action) {
case WriteActions.Deposit: {
const { asset, amount, onBehalfOf, referralCode } = inputs
return poolContract.supply.populateTransaction(
asset,
amount,
onBehalfOf,
referralCode,
)
}
case WriteActions.Withdraw: {
const { asset, amount, to } = inputs
return poolContract.withdraw.populateTransaction(asset, amount, to)
}
}
}