@gear-js/api
Version:
A JavaScript library that provides functionality to connect GEAR Component APIs.
36 lines (33 loc) • 1.61 kB
JavaScript
import { blake2AsHex, blake2AsU8a } from '@polkadot/util-crypto';
import { stringToU8a, u8aToU8a } from '@polkadot/util';
import '@polkadot/types';
import 'assert';
import { CreateType } from '../metadata/create-type.js';
import '../metadata/programMetadata.js';
const VOUCHER_PREFIX_BEFORE_1100 = stringToU8a('modlpy/voucher__');
const VOUCHER_PREFIX = stringToU8a('voucher');
function generateCodeHash(code) {
return blake2AsHex(u8aToU8a(code), 256);
}
function generateProgramId(codeOrHash, salt) {
const [code, codeHash] = typeof codeOrHash === 'string' ? [undefined, codeOrHash] : [codeOrHash, undefined];
const codeHashU8a = codeHash ? u8aToU8a(codeHash) : blake2AsU8a(code, 256);
const saltU8a = CreateType.create('Vec<u8>', salt).toU8a().slice(1);
const prefix = 'program_from_user';
const programStrU8a = new TextEncoder().encode(prefix);
const id = Uint8Array.from([...programStrU8a, ...codeHashU8a, ...saltU8a]);
return blake2AsHex(id, 256);
}
function generateVoucherId(nonceOrWho, programId) {
const [nonce, who] = typeof nonceOrWho === 'string' && programId ? [undefined, nonceOrWho] : [nonceOrWho, undefined];
if (nonce) {
const nonceU8a = u8aToU8a(nonce);
const id = Uint8Array.from([...VOUCHER_PREFIX, ...nonceU8a]);
return blake2AsHex(id, 256);
}
const whoU8a = u8aToU8a(who);
const programU8a = u8aToU8a(programId);
const id = Uint8Array.from([...VOUCHER_PREFIX_BEFORE_1100, ...whoU8a, ...programU8a]);
return blake2AsHex(id, 256);
}
export { generateCodeHash, generateProgramId, generateVoucherId };