@gear-js/api
Version:
A JavaScript library that provides functionality to connect GEAR Component APIs.
40 lines (36 loc) • 1.77 kB
JavaScript
;
var utilCrypto = require('@polkadot/util-crypto');
var util = require('@polkadot/util');
require('@polkadot/types');
require('assert');
var createType = require('../metadata/create-type.js');
require('../metadata/programMetadata.js');
const VOUCHER_PREFIX_BEFORE_1100 = util.stringToU8a('modlpy/voucher__');
const VOUCHER_PREFIX = util.stringToU8a('voucher');
function generateCodeHash(code) {
return utilCrypto.blake2AsHex(util.u8aToU8a(code), 256);
}
function generateProgramId(codeOrHash, salt) {
const [code, codeHash] = typeof codeOrHash === 'string' ? [undefined, codeOrHash] : [codeOrHash, undefined];
const codeHashU8a = codeHash ? util.u8aToU8a(codeHash) : utilCrypto.blake2AsU8a(code, 256);
const saltU8a = createType.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 utilCrypto.blake2AsHex(id, 256);
}
function generateVoucherId(nonceOrWho, programId) {
const [nonce, who] = typeof nonceOrWho === 'string' && programId ? [undefined, nonceOrWho] : [nonceOrWho, undefined];
if (nonce) {
const nonceU8a = util.u8aToU8a(nonce);
const id = Uint8Array.from([...VOUCHER_PREFIX, ...nonceU8a]);
return utilCrypto.blake2AsHex(id, 256);
}
const whoU8a = util.u8aToU8a(who);
const programU8a = util.u8aToU8a(programId);
const id = Uint8Array.from([...VOUCHER_PREFIX_BEFORE_1100, ...whoU8a, ...programU8a]);
return utilCrypto.blake2AsHex(id, 256);
}
exports.generateCodeHash = generateCodeHash;
exports.generateProgramId = generateProgramId;
exports.generateVoucherId = generateVoucherId;