fbonds-core
Version:
Banx protocol sdk
59 lines (58 loc) • 2.97 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getProposalPubkey = getProposalPubkey;
exports.encodeProposalName = encodeProposalName;
exports.decodeProposalName = decodeProposalName;
exports.getProposalVariantPubkey = getProposalVariantPubkey;
exports.getVotePubkey = getVotePubkey;
const constants_1 = require("../../constants");
const anchor_1 = require("@coral-xyz/anchor");
function getProposalPubkey(program, args) {
return __awaiter(this, void 0, void 0, function* () {
const [proposal] = yield anchor_1.web3.PublicKey.findProgramAddress([encodeProposalName(args), constants_1.ENCODER.encode(args.week.toString())], program.programId);
return proposal;
});
}
function encodeProposalName(args) {
if (!args.name)
throw new Error('Name is required');
if (args.name.includes('\0'))
throw new Error('Name contains forbidden character');
// Check that name contains a forbidden character
const size = 32;
const encodedBytes = Buffer.from(args.name, 'utf-8');
if (encodedBytes.length > size)
throw new Error('Name too long');
// Если меньше, добавим нулевые байты для заполнения до 128 байт
const paddedBuffer = Buffer.alloc(size);
encodedBytes.copy(paddedBuffer);
return paddedBuffer;
}
function decodeProposalName(value) {
return (Buffer.from(value)
.toString('utf-8')
// Since the byte array may contain padding (null bytes, represented as 0), you can use replace(/\0/g, '') to remove these null bytes from the resulting string.
.replace(/\0/g, ''));
}
// export function decode
function getProposalVariantPubkey(program, args, accounts) {
return __awaiter(this, void 0, void 0, function* () {
const [variant] = yield anchor_1.web3.PublicKey.findProgramAddress([encodeProposalName(args), accounts.proposalPubkey.toBuffer()], program.programId);
return variant;
});
}
function getVotePubkey(program, accounts) {
return __awaiter(this, void 0, void 0, function* () {
const [vote] = yield anchor_1.web3.PublicKey.findProgramAddress([accounts.userPubkey.toBuffer(), accounts.proposalPubkey.toBuffer()], program.programId);
return vote;
});
}