UNPKG

@gear-js/api

Version:

A JavaScript library that provides functionality to connect GEAR Component APIs.

36 lines (33 loc) 1.61 kB
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 };