@sen-use/web3
Version:
The library for Sentre
87 lines (86 loc) • 3.22 kB
JavaScript
;
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
// }
// }
// }