UNPKG

@sen-use/web3

Version:
87 lines (86 loc) 3.22 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.decodeIxData = exports.encodeIxData = exports.ixDiscriminator = exports.accountDiscriminator = void 0; // import { // BorshInstructionCoder, // Idl, // IdlAccounts, // Program, // } from '@project-serum/anchor' const js_sha256_1 = require("js-sha256"); const camelcase_1 = __importDefault(require("camelcase")); const snake_case_1 = require("snake-case"); const bs58_1 = __importDefault(require("bs58")); // import { getRawProgram } from '../utils' // import { AllAccounts, AllInstructions, IxAgrsData } from './types' /** * Number of bytes of the account discriminator. */ const DISCRIMINATOR_SIZE = 8; /** * Calculates and returns a unique 8 byte discriminator prepended to all anchor accounts. * @param name The name of the account to calculate the discriminator. */ const accountDiscriminator = (name) => { return Buffer.from(js_sha256_1.sha256.digest(`account:${(0, camelcase_1.default)(name, { pascalCase: true })}`)).slice(0, DISCRIMINATOR_SIZE); }; exports.accountDiscriminator = accountDiscriminator; /** * Calculates and returns a unique 8 byte discriminator prepended to all anchor instructions. * @param name The name of the instruction to calculate the discriminator. */ const ixDiscriminator = (ixName) => { let name = (0, snake_case_1.snakeCase)(ixName); let preimage = `global:${name}`; return Buffer.from(js_sha256_1.sha256.digest(preimage)).slice(0, DISCRIMINATOR_SIZE); }; exports.ixDiscriminator = ixDiscriminator; exports.encodeIxData = bs58_1.default.encode; exports.decodeIxData = bs58_1.default.decode; // export class IdlParser<T extends Idl> { // program: Program<T> // idl: Idl // constructor(idl: T) { // this.program = getRawProgram<T>(idl) // this.idl = idl // } // parserAccountData = ( // accountName: AllAccounts<T>['name'], // bufData: Buffer, // discriminator: boolean = true, // ) => { // if (!discriminator) { // const discriminatorBuf: Buffer = accountDiscriminator(accountName) // bufData = Buffer.concat([discriminatorBuf, bufData]) // } // return this.program.coder.accounts.decode< // IdlAccounts<T>[typeof accountName] // >(accountName, bufData) // } // parserIxData = ( // ixName: AllInstructions<T>['name'], // bufData: Buffer, // discriminator: boolean = true, // ) => { // try { // const ix = this.idl.instructions.find((e) => e.name === ixName) // if (!ix) return null // if (!discriminator) { // const discriminatorBuf: Buffer = ixDiscriminator(ixName) // bufData = Buffer.concat([discriminatorBuf, bufData]) // } // const borshInstructionCoder = new BorshInstructionCoder(this.idl) // const decodeData = borshInstructionCoder.decode(bufData) // if (!decodeData) return null // return { // name: decodeData.name, // data: decodeData.data as IxAgrsData<T, typeof ixName>, // } // } catch (error) { // return null // } // } // }