multisig-ui/src/utils/idl.ts

34 lines
913 B
TypeScript

import { struct, Layout } from "buffer-layout";
import { rustEnum } from "@project-serum/borsh";
// Simplified since we only use the SetBuffer variant.
export type IdlInstruction =
| Create
| CreateBuffer
| Write
| SetBuffer
| SetAuthority;
type Create = {};
type CreateBuffer = {};
type Write = {};
type SetBuffer = {};
type SetAuthority = {};
const IDL_INSTRUCTION_LAYOUT: Layout<IdlInstruction> = rustEnum([
struct([], "create"),
struct([], "createBuffer"),
struct([], "write"),
struct([], "setBuffer"),
struct([], "setAuthority"),
]);
export function encodeInstruction(i: IdlInstruction): Buffer {
const buffer = Buffer.alloc(1000); // TODO: use a tighter buffer.
const len = IDL_INSTRUCTION_LAYOUT.encode(i, buffer);
return Buffer.concat([IDL_TAG, buffer.slice(0, len)]);
}
// Reverse for little endian.
export const IDL_TAG = Buffer.from("0a69e9a778bcf440", "hex").reverse();