diff --git a/src/formulas/formulas/contract/distribution/daoRewardsDistributor.ts b/src/formulas/formulas/contract/distribution/daoRewardsDistributor.ts new file mode 100644 index 00000000..9a97a958 --- /dev/null +++ b/src/formulas/formulas/contract/distribution/daoRewardsDistributor.ts @@ -0,0 +1,63 @@ +import { ContractFormula } from '@/types' + +export const distribution: ContractFormula< + any, + { + id: string + } +> = { + compute: async ({ + contractAddress, + getTransformationMatch, + args: { id }, + }) => { + if (!id) { + throw new Error('missing `id`') + } + + const distribution = ( + await getTransformationMatch(contractAddress, `distribution:${id}`) + )?.value + + if (!distribution) { + throw new Error(`distribution not found for id: ${id}`) + } + + return distribution + }, +} + +export const distributions: ContractFormula< + { + distributions: any[] + }, + { + limit?: string + startAfter?: string + } +> = { + compute: async ({ + contractAddress, + getTransformationMap, + args: { limit, startAfter }, + }) => { + const limitNum = limit ? Math.max(0, Number(limit)) : Infinity + const startAfterNum = startAfter ? Number(startAfter) : -1 + + const map = + (await getTransformationMap( + contractAddress, + 'distribution' + )) ?? {} + const distributions = Object.entries(map) + // Ascending by ID. + .sort(([a], [b]) => Number(a) - Number(b)) + .filter(([id]) => Number(id) > startAfterNum) + .slice(0, limitNum) + .map(([, distribution]) => distribution) + + return { + distributions, + } + }, +} diff --git a/src/formulas/formulas/contract/distribution/index.ts b/src/formulas/formulas/contract/distribution/index.ts new file mode 100644 index 00000000..be4972f4 --- /dev/null +++ b/src/formulas/formulas/contract/distribution/index.ts @@ -0,0 +1 @@ +export * as daoRewardsDistributor from './daoRewardsDistributor' diff --git a/src/formulas/formulas/contract/index.ts b/src/formulas/formulas/contract/index.ts index f9ef11a5..c6610231 100644 --- a/src/formulas/formulas/contract/index.ts +++ b/src/formulas/formulas/contract/index.ts @@ -1,4 +1,5 @@ export * from './daoCore' +export * from './distribution' export * from './external' export * as neutron from './neutron' export * from './polytone' diff --git a/src/transformers/transformers/distribution/daoRewardsDistributor.ts b/src/transformers/transformers/distribution/daoRewardsDistributor.ts new file mode 100644 index 00000000..9ac0fbd3 --- /dev/null +++ b/src/transformers/transformers/distribution/daoRewardsDistributor.ts @@ -0,0 +1,13 @@ +import { makeTransformerForMap } from '@/transformers/utils' +import { Transformer } from '@/types' + +const CODE_IDS_KEYS: string[] = ['dao-rewards-distributor'] + +const distributions: Transformer = makeTransformerForMap( + CODE_IDS_KEYS, + 'distribution', + 'd', + { numericKey: true } +) + +export default [distributions] diff --git a/src/transformers/transformers/distribution/index.ts b/src/transformers/transformers/distribution/index.ts new file mode 100644 index 00000000..b3f593bb --- /dev/null +++ b/src/transformers/transformers/distribution/index.ts @@ -0,0 +1,3 @@ +import daoRewardsDistributor from './daoRewardsDistributor' + +export default [...daoRewardsDistributor] diff --git a/src/transformers/transformers/index.ts b/src/transformers/transformers/index.ts index 1d8f288b..63d19b19 100644 --- a/src/transformers/transformers/index.ts +++ b/src/transformers/transformers/index.ts @@ -10,6 +10,7 @@ import { import common from './common' import dao from './dao' +import distribution from './distribution' import external from './external' import polytone from './polytone' import prePropose from './prePropose' @@ -31,6 +32,7 @@ export const getProcessedTransformers = ( // Add transformers here. ...common, ...dao, + ...distribution, ...external, ...polytone, ...prePropose,