@meterio/devkit
Version:
Typescript library to aid DApp development on Meter network
213 lines • 15.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.abi = void 0;
const abi_1 = require("@ethersproject/abi");
const keccak_1 = require("./cry/keccak");
class Coder extends abi_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();
/** 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].toString();
}
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.map((p) => p.type), 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.map((p) => p.type), 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.signature = '0x' + keccak256(this.canonicalName).slice(0, 4).toString('hex');
this.fragment = abi_1.FunctionFragment.from(definition);
this.iface = new abi_1.Interface([this.fragment]);
this.canonicalName = this.fragment.format(abi_1.FormatTypes.full);
this.signature = this.iface.getSighash(this.fragment);
}
/**
* 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.fragment = abi_1.EventFragment.from(definition);
this.canonicalName = this.fragment.format(abi_1.FormatTypes.full);
this.iface = new abi_1.Interface([this.fragment]);
this.signature = this.iface.getEventTopic(definition.name);
}
/**
* 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;
if (isDynamicType(input.type)) {
if (input.type === 'string') {
topic = '0x' + (0, keccak_1.keccak256)(value).toString('hex');
}
else {
if (typeof value === 'string' &&
/^0x[0-9a-f]+$/i.test(value) &&
value.length % 2 === 0) {
topic = '0x' + (0, keccak_1.keccak256)(Buffer.from(value.slice(2), 'hex')).toString('hex');
}
else {
throw new Error(`invalid ${input.type} value`);
}
}
}
else {
topic = encodeParameter(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');
}
let padded = data;
if (data.length % 2 == 1) {
padded += '0';
}
const decodedNonIndexed = coder.decode(this.definition.inputs.filter((t) => !t.indexed).map((t) => t.type), padded);
// console.log('DECODENON INDEX:', decodedNonIndexed);
const decoded = {};
let nonIndexed = 0;
this.definition.inputs.forEach((t, i) => {
if (t.indexed) {
const topic = topics.shift();
decoded[i] = isDynamicType(t.type) ? topic : decodeParameter(t.type, topic);
}
else {
decoded[i] = decodedNonIndexed[nonIndexed++];
}
if (t.name) {
decoded[t.name] = decoded[i];
}
});
return decoded;
}
}
abi.Event = Event;
function isDynamicType(type) {
return type === 'bytes' || type === 'string' || type.endsWith('[]');
}
})(abi = exports.abi || (exports.abi = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FiaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0Q0FPNEI7QUFDNUIseUNBQXlDO0FBRXpDLE1BQU0sS0FBTSxTQUFRLGNBQVE7SUFDMUI7UUFDRSxLQUFLLENBQUMsQ0FBQyxJQUFZLEVBQUUsS0FBVSxFQUFFLEVBQUU7WUFDakMsSUFDRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQztnQkFDNUUsS0FBSyxDQUFDLFdBQVcsS0FBSyxXQUFXLEVBQ2pDO2dCQUNBLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ3pCO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBZSxFQUFFLE1BQWE7UUFDMUMsSUFBSTtZQUNGLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDcEM7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTtnQkFDZCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUM3QjtZQUNELE1BQU0sR0FBRyxDQUFDO1NBQ1g7SUFDSCxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQWUsRUFBRSxJQUFZO1FBQ3pDLElBQUk7WUFDRixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2xDO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDN0I7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