ProgramNode.ts 1.2 KB

1234567891011121314151617181920212223242526
  1. import { ProgramNode, programNode, ProgramVersion } from '@codama/nodes';
  2. import { accountNodeFromAnchorV00 } from './AccountNode';
  3. import { definedTypeNodeFromAnchorV00 } from './DefinedTypeNode';
  4. import { errorNodeFromAnchorV00 } from './ErrorNode';
  5. import { IdlV00 } from './idl';
  6. import { instructionNodeFromAnchorV00 } from './InstructionNode';
  7. import { pdaNodeFromAnchorV00 } from './PdaNode';
  8. export function programNodeFromAnchorV00(idl: IdlV00): ProgramNode {
  9. const origin = (idl.metadata as { origin?: 'anchor' | 'shank' }).origin ?? 'anchor';
  10. const pdas = (idl.accounts ?? []).filter(account => (account.seeds ?? []).length > 0).map(pdaNodeFromAnchorV00);
  11. const accounts = (idl.accounts ?? []).map(a => accountNodeFromAnchorV00(a, origin));
  12. const instructions = (idl.instructions ?? []).map(i => instructionNodeFromAnchorV00(i, origin));
  13. return programNode({
  14. accounts,
  15. definedTypes: (idl.types ?? []).map(definedTypeNodeFromAnchorV00),
  16. errors: (idl.errors ?? []).map(errorNodeFromAnchorV00),
  17. instructions,
  18. name: idl.name ?? '',
  19. origin,
  20. pdas,
  21. publicKey: (idl.metadata as { address?: string })?.address ?? '',
  22. version: idl.version as ProgramVersion,
  23. });
  24. }