UNPKG

thor-devkit

Version:

Typescript library to aid DApp development on VeChain Thor

218 lines 14.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.abi = void 0; const abi_coder_1 = require("@vechain/ethers/utils/abi-coder"); const keccak_1 = require("./keccak"); const buffer_1 = require("buffer"); class Coder extends abi_coder_1.AbiCoder { constructor() { super((type, value) => { if ((type.match(/^u?int/) && !Array.isArray(value) && typeof value !== 'object') || value._ethersType === 'BigNumber') { return value.toString(); } return value; }); } encode(types, values) { try { return super.encode(types, values); } catch (err) { if (err.reason) { throw new Error(err.reason); } throw err; } } decode(types, data) { try { return super.decode(types, data); } catch (err) { if (err.reason) { throw new Error(err.reason); } throw err; } } } const coder = new Coder(); function formatSignature(fragment) { try { return abi_coder_1.formatSignature(fragment) .replace(/\(tuple\(/g, '((') .replace(/,tuple\(/g, ',('); } catch (err) { if (err.reason) { throw new Error(err.reason); } throw err; } } /** encode/decode parameters of contract function call, event log, according to ABI JSON */ var abi; (function (abi) { /** * encode single parameter * @param type type of the parameter * @param value value of the parameter * @returns encoded value in hex string */ function encodeParameter(type, value) { return coder.encode([type], [value]); } abi.encodeParameter = encodeParameter; /** * decode single parameter * @param type type of the parameter * @param data encoded parameter in hex string * @returns decoded value */ function decodeParameter(type, data) { return coder.decode([type], data)[0]; } abi.decodeParameter = decodeParameter; /** * encode a group of parameters * @param types type array * @param values value array * @returns encoded values in hex string */ function encodeParameters(types, values) { return coder.encode(types, values); } abi.encodeParameters = encodeParameters; /** * decode a group of parameters * @param types type array * @param data encoded values in hex string * @returns decoded object */ function decodeParameters(types, data) { const result = coder.decode(types, data); const decoded = {}; types.forEach((t, i) => { decoded[i] = result[i]; if (t.name) { decoded[t.name] = result[i]; } }); return decoded; } abi.decodeParameters = decodeParameters; /** for contract function */ class Function { /** * create a function object * @param definition abi definition of the function */ constructor(definition) { this.definition = definition; this.canonicalName = formatSignature(definition); this.signature = '0x' + keccak_1.keccak256(this.canonicalName).slice(0, 4).toString('hex'); } /** * encode input parameters into call data * @param args arguments for the function */ encode(...args) { return this.signature + encodeParameters(this.definition.inputs, args).slice(2); } /** * decode output data * @param outputData output data to decode */ decode(outputData) { return decodeParameters(this.definition.outputs, outputData); } } abi.Function = Function; /** for contract event */ class Event { /** for contract event */ constructor(definition) { this.definition = definition; this.canonicalName = formatSignature(definition); this.signature = '0x' + keccak_1.keccak256(this.canonicalName).toString('hex'); } /** * encode an object of indexed keys into topics. * @param indexed an object contains indexed keys */ encode(indexed) { const topics = []; if (!this.definition.anonymous) { topics.push(this.signature); } for (const input of this.definition.inputs) { if (!input.indexed) { continue; } const value = indexed[input.name]; if (value === undefined || value === null) { topics.push(null); } else { let topic; // https://docs.soliditylang.org/en/v0.8.11/abi-spec.html#encoding-of-indexed-event-parameters if (isValueType(input.type)) { topic = encodeParameter(input.type, value); } else { if (input.type === 'string') { topic = '0x' + keccak_1.keccak256(value).toString('hex'); // tslint:disable-next-line:max-line-length } else if (typeof value === 'string' && /^0x[0-9a-f]+$/i.test(value) && value.length % 2 === 0) { // value is encoded topic = '0x' + keccak_1.keccak256(buffer_1.Buffer.from(value.slice(2), 'hex')).toString('hex'); } else { throw new Error(`event.encode: invalid ${input.type} value`); } } topics.push(topic); } } return topics; } /** * decode event log * @param data data in event output * @param topics topics in event */ decode(data, topics) { if (!this.definition.anonymous) { topics = topics.slice(1); } if (this.definition.inputs.filter(t => t.indexed).length !== topics.length) { throw new Error('invalid topics count'); } const decodedNonIndexed = coder.decode(this.definition.inputs.filter(t => !t.indexed), data); const decoded = {}; this.definition.inputs.forEach((t, i) => { if (t.indexed) { const topic = topics.shift(); decoded[i] = isValueType(t.type) ? decodeParameter(t.type, topic) : topic; } else { decoded[i] = decodedNonIndexed.shift(); } if (t.name) { decoded[t.name] = decoded[i]; } }); return decoded; } } abi.Event = Event; function isValueType(type) { return (type === 'address' || type === 'bool' || /^(u?int)(\d*)$/.test(type) || /^bytes(\d+)$/.test(type)); } })(abi = exports.abi || (exports.abi = {})); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FiaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrREFBK0Y7QUFDL0YscUNBQW9DO0FBQ3BDLG1DQUErQjtBQUUvQixNQUFNLEtBQU0sU0FBUSxvQkFBUTtJQUN4QjtRQUNJLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO2dCQUM1RSxLQUFLLENBQUMsV0FBVyxLQUFLLFdBQVcsRUFBRTtnQkFDbkMsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUE7YUFDMUI7WUFDRCxPQUFPLEtBQUssQ0FBQTtRQUNoQixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBNkMsRUFBRSxNQUFhO1FBQ3RFLElBQUk7WUFDQSxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1NBQ3JDO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7YUFDOUI7WUFDRCxNQUFNLEdBQUcsQ0FBQTtTQUNaO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUE2QyxFQUFFLElBQVk7UUFDckUsSUFBSTtZQUNBLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7U0FDbkM7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTtnQkFDWixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFN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