Socket
Socket
Sign inDemoInstall

abi-coder

Package Overview
Dependencies
Maintainers
1
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

abi-coder - npm Package Compare versions

Comparing version 2.1.0 to 3.0.0

example/abi/erc20.json

36

.eslintrc.json
{
"env": {
"browser": false,
"es6": true
"es2020": true,
"node": true
},
"plugins": ["import"],
"extends": [
"eslint:recommended",
"plugin:import/errors",
"plugin:import/warnings",
"plugin:import/recommended",
"plugin:import/typescript",
"plugin:@typescript-eslint/recommended"
],
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
},
"parserOptions": {

@@ -23,11 +17,12 @@ "parser": "@typescript-eslint/parser",

},
"plugins": ["import"],
"rules": {
"indent": ["error", 2],
"linebreak-style": ["error", "unix"],
"quotes": ["error", "single", { "avoidEscape": true }],
"semi": ["error", "always"],
"comma-dangle": ["error", "always-multiline"],
"import/first": "error",
"import/exports-last": "error",
"import/newline-after-import": "error",
"import/prefer-default-export": "error",
"import/group-exports": "error",
"import/no-duplicates": "error",
"import/no-amd": "error",
"import/no-commonjs": "error",
"import/order": [

@@ -42,7 +37,12 @@ "error",

],
"@typescript-eslint/ban-ts-ignore": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-use-before-define": "off",
"@typescript-eslint/explicit-module-boundary-types": "off"
"import/no-unused-modules": "error",
"import/no-mutable-exports": "error",
"import/no-extraneous-dependencies": ["error", {"devDependencies": ["test/**/*.test.ts"]}],
"@typescript-eslint/explicit-function-return-type": "error"
},
"settings": {
"import/resolver": {
"typescript": {}
}
}
}
{
"trailingComma": "all",
"semi": true,
"singleQuote": true
}

@@ -1,20 +0,16 @@

import { JsonFragment, JsonFragmentType, Result } from '@ethersproject/abi';
import { JsonFragment } from '@ethersproject/abi';
interface FunctionData {
name: string;
inputs: JsonFragmentType[];
values: Result;
values: ValueMap;
}
interface FunctionOutputData {
name: string;
outputs: JsonFragmentType[];
values: Result;
values: ValueMap;
}
interface Constructor {
inputs: JsonFragmentType[];
values: Result;
values: ValueMap;
}
interface Event {
name: string;
inputs: JsonFragmentType[];
values: Result;
values: ValueMap;
}

@@ -25,2 +21,4 @@ interface EventEncoding {

}
declare type Value = any;
declare type ValueMap = Record<string, Value>;
declare class Coder {

@@ -35,6 +33,6 @@ private abi;

decodeFunctionOutput(name: string, data: string): FunctionOutputData;
encodeConstructor(values: any[]): string;
encodeEvent(name: string, values: any[]): EventEncoding;
encodeFunction(name: string, values: any[]): string;
encodeFunctionOutput(name: string, values: any[]): string;
encodeConstructor(valueMap: ValueMap): string;
encodeEvent(name: string, values: Record<string, Value>): EventEncoding;
encodeFunction(name: string, valueMap: Record<string, Value>): string;
encodeFunctionOutput(name: string, valueMap: Record<string, Value>): string;
private getConstructor;

@@ -49,1 +47,2 @@ private getFunctionByName;

export { FunctionData, FunctionOutputData, Constructor, Event, EventEncoding };
//# sourceMappingURL=index.d.ts.map

@@ -17,259 +17,348 @@ "use strict";

function Coder(abi) {
Object.defineProperty(this, "abi", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
this.abi = abi;
}
Coder.prototype.getFunctionSelector = function (name) {
var func = this.getFunctionByName(name);
var jsonInputs = func === null || func === void 0 ? void 0 : func.inputs;
if (!jsonInputs) {
throw Error;
Object.defineProperty(Coder.prototype, "getFunctionSelector", {
enumerable: false,
configurable: true,
writable: true,
value: function (name) {
var func = this.getFunctionByName(name);
var jsonInputs = func === null || func === void 0 ? void 0 : func.inputs;
if (!jsonInputs) {
throw Error;
}
var inputs = jsonInputs.map(function (input) { return abi_1.ParamType.fromObject(input); });
var signature = Coder.getSignature(name, inputs);
var hash = sha3(signature);
return hash.substring(0, 10);
}
var inputs = jsonInputs.map(function (input) { return abi_1.ParamType.fromObject(input); });
var signature = Coder.getSignature(name, inputs);
var hash = sha3(signature);
return hash.substring(0, 10);
};
Coder.prototype.getEventTopic = function (name) {
var event = this.getEventByName(name);
var jsonInputs = event === null || event === void 0 ? void 0 : event.inputs;
if (!jsonInputs) {
throw Error;
});
Object.defineProperty(Coder.prototype, "getEventTopic", {
enumerable: false,
configurable: true,
writable: true,
value: function (name) {
var event = this.getEventByName(name);
var jsonInputs = event === null || event === void 0 ? void 0 : event.inputs;
if (!jsonInputs) {
throw Error;
}
var inputs = jsonInputs.map(function (input) { return abi_1.ParamType.fromObject(input); });
var signature = Coder.getSignature(name, inputs);
return sha3(signature);
}
var inputs = jsonInputs.map(function (input) { return abi_1.ParamType.fromObject(input); });
var signature = Coder.getSignature(name, inputs);
return sha3(signature);
};
Coder.prototype.decodeConstructor = function (data) {
var constructor = this.getConstructor();
var jsonInputs = constructor === null || constructor === void 0 ? void 0 : constructor.inputs;
if (!jsonInputs) {
throw Error;
});
Object.defineProperty(Coder.prototype, "decodeConstructor", {
enumerable: false,
configurable: true,
writable: true,
value: function (data) {
var constructor = this.getConstructor();
var jsonInputs = constructor === null || constructor === void 0 ? void 0 : constructor.inputs;
if (!jsonInputs) {
throw Error;
}
var inputs = jsonInputs.map(function (input) { return abi_1.ParamType.fromObject(input); });
var result = abi_1.defaultAbiCoder.decode(inputs, data);
var values = toValueMap(result, inputs);
return {
values: values,
};
}
var inputs = jsonInputs.map(function (input) { return abi_1.ParamType.fromObject(input); });
var result = abi_1.defaultAbiCoder.decode(inputs, data);
return {
inputs: inputs,
values: result,
};
};
Coder.prototype.decodeEvent = function (topics, data) {
var event = this.getEventByTopic(topics[0]);
var dataTopics = topics.slice(1);
var jsonInputs = event === null || event === void 0 ? void 0 : event.inputs;
if (!jsonInputs) {
throw Error;
});
Object.defineProperty(Coder.prototype, "decodeEvent", {
enumerable: false,
configurable: true,
writable: true,
value: function (topics, data) {
var event = this.getEventByTopic(topics[0]);
var dataTopics = topics.slice(1);
var jsonInputs = event === null || event === void 0 ? void 0 : event.inputs;
if (!jsonInputs) {
throw Error;
}
var inputs = jsonInputs.map(function (input) { return abi_1.ParamType.fromObject(input); });
// Decode topics
var topicInputs = inputs.filter(function (input) { return input.indexed; });
var topicResult = topicInputs.map(function (input, index) {
var topic = dataTopics[index];
var params = abi_1.defaultAbiCoder.decode([input], topic);
var param = params[0];
return param;
});
// Decode data
var dataInputs = inputs.filter(function (input) { return !input.indexed; });
var dataResult = abi_1.defaultAbiCoder.decode(dataInputs, data);
// Concat
if (!event.name) {
throw Error;
}
var topicIndex = 0;
var dataIndex = 0;
var result = [];
for (var _i = 0, inputs_1 = inputs; _i < inputs_1.length; _i++) {
var input = inputs_1[_i];
if (input.indexed) {
result.push(topicResult[topicIndex]);
topicIndex++;
}
else {
result.push(dataResult[dataIndex]);
dataIndex++;
}
}
var values = toValueMap(result, inputs);
return {
name: event.name,
values: values,
};
}
var inputs = jsonInputs.map(function (input) { return abi_1.ParamType.fromObject(input); });
// Decode topics
var topicInputs = inputs.filter(function (input) { return input.indexed; });
var topicResult = topicInputs.map(function (input, index) {
var topic = dataTopics[index];
var params = abi_1.defaultAbiCoder.decode([input], topic);
var param = params[0];
return param;
});
// Decode data
var dataInputs = inputs.filter(function (input) { return !input.indexed; });
var dataResult = abi_1.defaultAbiCoder.decode(dataInputs, data);
// Concat
if (!event.name) {
throw Error;
}
var topicIndex = 0;
var dataIndex = 0;
var result = [];
for (var _i = 0, inputs_1 = inputs; _i < inputs_1.length; _i++) {
var input = inputs_1[_i];
if (input.indexed) {
result.push(topicResult[topicIndex]);
topicIndex++;
});
Object.defineProperty(Coder.prototype, "decodeFunction", {
enumerable: false,
configurable: true,
writable: true,
value: function (data) {
var selector = data.substring(0, 10);
var func = this.getFunctionBySelector(selector);
// Decode calldata using function inputs
var jsonInputs = func === null || func === void 0 ? void 0 : func.inputs;
if (!jsonInputs) {
throw Error;
}
else {
result.push(dataResult[dataIndex]);
dataIndex++;
var inputs = jsonInputs.map(function (input) { return abi_1.ParamType.fromObject(input); });
var calldata = "0x".concat(data.substring(10));
var result = abi_1.defaultAbiCoder.decode(inputs, calldata);
var values = toValueMap(result, inputs);
if (!func.name) {
throw Error;
}
return {
name: func.name,
values: values,
};
}
return {
name: event.name,
inputs: inputs,
values: result,
};
};
Coder.prototype.decodeFunction = function (data) {
var selector = data.substring(0, 10);
var func = this.getFunctionBySelector(selector);
// Decode calldata using function inputs
var jsonInputs = func === null || func === void 0 ? void 0 : func.inputs;
if (!jsonInputs) {
throw Error;
});
Object.defineProperty(Coder.prototype, "decodeFunctionOutput", {
enumerable: false,
configurable: true,
writable: true,
value: function (name, data) {
var func = this.getFunctionByName(name);
var jsonOutputs = func === null || func === void 0 ? void 0 : func.outputs;
if (!jsonOutputs) {
throw Error;
}
var outputs = jsonOutputs.map(function (output) { return abi_1.ParamType.fromObject(output); });
var result = abi_1.defaultAbiCoder.decode(outputs, data);
var values = toValueMap(result, outputs);
return {
name: name,
values: values,
};
}
var inputs = jsonInputs.map(function (input) { return abi_1.ParamType.fromObject(input); });
var calldata = "0x".concat(data.substring(10));
var result = abi_1.defaultAbiCoder.decode(inputs, calldata);
if (!func.name) {
throw Error;
});
Object.defineProperty(Coder.prototype, "encodeConstructor", {
enumerable: false,
configurable: true,
writable: true,
value: function (valueMap) {
var constructor = this.getConstructor();
var jsonInputs = constructor === null || constructor === void 0 ? void 0 : constructor.inputs;
if (!jsonInputs) {
throw Error;
}
var inputs = jsonInputs.map(function (input) { return abi_1.ParamType.fromObject(input); });
var values = toValues(valueMap, inputs);
return abi_1.defaultAbiCoder.encode(inputs, values);
}
return {
name: func.name,
inputs: inputs,
values: result,
};
};
Coder.prototype.decodeFunctionOutput = function (name, data) {
var func = this.getFunctionByName(name);
var jsonOutputs = func === null || func === void 0 ? void 0 : func.outputs;
if (!jsonOutputs) {
throw Error;
}
var outputs = jsonOutputs.map(function (output) { return abi_1.ParamType.fromObject(output); });
var result = abi_1.defaultAbiCoder.decode(outputs, data);
return {
name: name,
outputs: outputs,
values: result,
};
};
Coder.prototype.encodeConstructor = function (values) {
var constructor = this.getConstructor();
var jsonInputs = constructor === null || constructor === void 0 ? void 0 : constructor.inputs;
if (!jsonInputs) {
throw Error;
}
var inputs = jsonInputs.map(function (input) { return abi_1.ParamType.fromObject(input); });
return abi_1.defaultAbiCoder.encode(inputs, values);
};
Coder.prototype.encodeEvent = function (name, values) {
var event = this.getEventByName(name);
var jsonInputs = event === null || event === void 0 ? void 0 : event.inputs;
if (!jsonInputs) {
throw Error;
}
var inputs = jsonInputs.map(function (input) { return abi_1.ParamType.fromObject(input); });
var eventSignature = Coder.getSignature(name, inputs);
var eventTopic = sha3(eventSignature);
// Group params by type
var topicResult = [];
var dataResult = [];
for (var i = 0; i < inputs.length; i++) {
var input = inputs[i];
var value = values[i];
if (input.indexed) {
topicResult.push(value);
});
Object.defineProperty(Coder.prototype, "encodeEvent", {
enumerable: false,
configurable: true,
writable: true,
value: function (name, values) {
var event = this.getEventByName(name);
var jsonInputs = event === null || event === void 0 ? void 0 : event.inputs;
if (!jsonInputs) {
throw Error;
}
else {
dataResult.push(value);
var inputs = jsonInputs.map(function (input) { return abi_1.ParamType.fromObject(input); });
var eventSignature = Coder.getSignature(name, inputs);
var eventTopic = sha3(eventSignature);
// Group params by type
var topicResult = [];
var dataResult = [];
for (var i = 0; i < inputs.length; i++) {
var input = inputs[i];
var value = values[input.name];
if (input.indexed) {
topicResult.push(value);
}
else {
dataResult.push(value);
}
}
// Encode topic params
var topicInputs = inputs.filter(function (input) { return input.indexed; });
var dataTopics = topicInputs.map(function (input, index) {
return abi_1.defaultAbiCoder.encode([input], [topicResult[index]]);
});
var topics = __spreadArray([eventTopic], dataTopics, true);
// Encode data params
var dataInputs = inputs.filter(function (input) { return !input.indexed; });
var data = abi_1.defaultAbiCoder.encode(dataInputs, dataResult);
return {
topics: topics,
data: data,
};
}
// Encode topic params
var topicInputs = inputs.filter(function (input) { return input.indexed; });
var dataTopics = topicInputs.map(function (input, index) {
return abi_1.defaultAbiCoder.encode([input], [topicResult[index]]);
});
var topics = __spreadArray([eventTopic], dataTopics, true);
// Encode data params
var dataInputs = inputs.filter(function (input) { return !input.indexed; });
var data = abi_1.defaultAbiCoder.encode(dataInputs, dataResult);
return {
topics: topics,
data: data,
};
};
Coder.prototype.encodeFunction = function (name, values) {
var func = this.getFunctionByName(name);
var jsonInputs = func === null || func === void 0 ? void 0 : func.inputs;
if (!jsonInputs) {
throw Error;
});
Object.defineProperty(Coder.prototype, "encodeFunction", {
enumerable: false,
configurable: true,
writable: true,
value: function (name, valueMap) {
var func = this.getFunctionByName(name);
var jsonInputs = func === null || func === void 0 ? void 0 : func.inputs;
if (!jsonInputs) {
throw Error;
}
var inputs = jsonInputs.map(function (input) { return abi_1.ParamType.fromObject(input); });
var signature = Coder.getSignature(name, inputs);
var selector = sha3(signature).substring(2, 10);
var values = toValues(valueMap, inputs);
var argumentString = abi_1.defaultAbiCoder.encode(inputs, values);
var argumentData = argumentString.substring(2);
var inputData = "0x".concat(selector).concat(argumentData);
return inputData;
}
var inputs = jsonInputs.map(function (input) { return abi_1.ParamType.fromObject(input); });
var signature = Coder.getSignature(name, inputs);
var selector = sha3(signature).substring(2, 10);
var argumentString = abi_1.defaultAbiCoder.encode(inputs, values);
var argumentData = argumentString.substring(2);
var inputData = "0x".concat(selector).concat(argumentData);
return inputData;
};
Coder.prototype.encodeFunctionOutput = function (name, values) {
var func = this.getFunctionByName(name);
var jsonOutputs = func.outputs;
if (!jsonOutputs) {
throw Error;
});
Object.defineProperty(Coder.prototype, "encodeFunctionOutput", {
enumerable: false,
configurable: true,
writable: true,
value: function (name, valueMap) {
var func = this.getFunctionByName(name);
var jsonOutputs = func.outputs;
if (!jsonOutputs) {
throw Error;
}
var outputs = jsonOutputs.map(function (output) { return abi_1.ParamType.fromObject(output); });
var values = toValues(valueMap, outputs);
return abi_1.defaultAbiCoder.encode(outputs, values);
}
var outputs = jsonOutputs.map(function (output) { return abi_1.ParamType.fromObject(output); });
return abi_1.defaultAbiCoder.encode(outputs, values);
};
Coder.prototype.getConstructor = function () {
var constructor = this.abi.find(function (item) { return item.type === 'constructor'; });
if (!constructor) {
throw Error;
});
Object.defineProperty(Coder.prototype, "getConstructor", {
enumerable: false,
configurable: true,
writable: true,
value: function () {
var constructor = this.abi.find(function (item) { return item.type === 'constructor'; });
if (!constructor) {
throw Error;
}
return constructor;
}
return constructor;
};
Coder.prototype.getFunctionByName = function (name) {
var func = this.abi.find(function (item) { return item.type === 'function' && item.name === name; });
if (!func) {
throw Error;
});
Object.defineProperty(Coder.prototype, "getFunctionByName", {
enumerable: false,
configurable: true,
writable: true,
value: function (name) {
var func = this.abi.find(function (item) { return item.type === 'function' && item.name === name; });
if (!func) {
throw Error;
}
return func;
}
return func;
};
Coder.prototype.getFunctionBySelector = function (selector) {
var functions = this.abi.filter(function (item) { return item.type === 'function'; });
var func = functions.find(function (func) {
var name = func.name;
var jsonInputs = func.inputs;
if (!name || !jsonInputs) {
return false;
});
Object.defineProperty(Coder.prototype, "getFunctionBySelector", {
enumerable: false,
configurable: true,
writable: true,
value: function (selector) {
var functions = this.abi.filter(function (item) { return item.type === 'function'; });
var func = functions.find(function (func) {
var name = func.name;
var jsonInputs = func.inputs;
if (!name || !jsonInputs) {
return false;
}
var inputs = jsonInputs.map(function (input) { return abi_1.ParamType.fromObject(input); });
var signature = Coder.getSignature(name, inputs);
var hash = sha3(signature);
var funcSelector = hash.substring(0, 10);
return funcSelector === selector;
});
if (!func) {
throw Error;
}
var inputs = jsonInputs.map(function (input) { return abi_1.ParamType.fromObject(input); });
var signature = Coder.getSignature(name, inputs);
var hash = sha3(signature);
var funcSelector = hash.substring(0, 10);
return funcSelector === selector;
});
if (!func) {
throw Error;
return func;
}
return func;
};
Coder.prototype.getEventByName = function (name) {
var event = this.abi.find(function (item) { return item.type === 'event' && item.name === name; });
if (!event) {
throw Error;
});
Object.defineProperty(Coder.prototype, "getEventByName", {
enumerable: false,
configurable: true,
writable: true,
value: function (name) {
var event = this.abi.find(function (item) { return item.type === 'event' && item.name === name; });
if (!event) {
throw Error;
}
return event;
}
return event;
};
Coder.prototype.getEventByTopic = function (topic) {
var events = this.abi.filter(function (item) { return item.type === 'event'; });
var event = events.find(function (event) {
var name = event.name;
var jsonInputs = event.inputs;
if (!name || !jsonInputs) {
return false;
});
Object.defineProperty(Coder.prototype, "getEventByTopic", {
enumerable: false,
configurable: true,
writable: true,
value: function (topic) {
var events = this.abi.filter(function (item) { return item.type === 'event'; });
var event = events.find(function (event) {
var name = event.name;
var jsonInputs = event.inputs;
if (!name || !jsonInputs) {
return false;
}
var inputs = jsonInputs.map(function (input) { return abi_1.ParamType.fromObject(input); });
var signature = Coder.getSignature(name, inputs);
var eventTopic = sha3(signature);
return eventTopic === topic;
});
if (!event) {
throw Error;
}
var inputs = jsonInputs.map(function (input) { return abi_1.ParamType.fromObject(input); });
var signature = Coder.getSignature(name, inputs);
var eventTopic = sha3(signature);
return eventTopic === topic;
});
if (!event) {
throw Error;
return event;
}
return event;
};
Coder.getSignature = function (name, inputs) {
var types = [];
for (var _i = 0, inputs_2 = inputs; _i < inputs_2.length; _i++) {
var input = inputs_2[_i];
if (input.type.startsWith('tuple')) {
var tupleString = Coder.getSignature('', input.components);
var arrayArityString = input.type.substring('tuple'.length);
var type = "".concat(tupleString).concat(arrayArityString);
types.push(type);
});
Object.defineProperty(Coder, "getSignature", {
enumerable: false,
configurable: true,
writable: true,
value: function (name, inputs) {
var types = [];
for (var _i = 0, inputs_2 = inputs; _i < inputs_2.length; _i++) {
var input = inputs_2[_i];
if (input.type.startsWith('tuple')) {
var tupleString = Coder.getSignature('', input.components);
var arrayArityString = input.type.substring('tuple'.length);
var type = "".concat(tupleString).concat(arrayArityString);
types.push(type);
}
else {
types.push(input.type);
}
}
else {
types.push(input.type);
}
var typeString = types.join(',');
var functionSignature = "".concat(name, "(").concat(typeString, ")");
return functionSignature;
}
var typeString = types.join(',');
var functionSignature = "".concat(name, "(").concat(typeString, ")");
return functionSignature;
};
});
return Coder;

@@ -280,2 +369,14 @@ }());

}
function toValueMap(result, inputs) {
return Object.fromEntries(result.map(function (value, index) {
var input = inputs[index];
return [input.name, value];
}));
}
function toValues(values, inputs) {
return inputs.map(function (input) {
return values[input.name];
});
}
exports.default = Coder;
//# sourceMappingURL=index.js.map
{
"name": "abi-coder",
"version": "2.1.0",
"version": "3.0.0",
"description": "ABI function, event, and contrustor encoder/decoder",

@@ -31,15 +31,15 @@ "main": "lib/index.js",

"devDependencies": {
"@ethersproject/bignumber": "5.5.0",
"@ethersproject/bignumber": "5.6.0",
"@types/node": "17.0.5",
"@typescript-eslint/eslint-plugin": "5.11.0",
"@typescript-eslint/parser": "5.11.0",
"eslint": "8.9.0",
"eslint-import-resolver-typescript": "2.5.0",
"eslint-plugin-import": "2.25.4",
"@typescript-eslint/eslint-plugin": "5.21.0",
"@typescript-eslint/parser": "5.21.0",
"eslint": "8.14.0",
"eslint-import-resolver-typescript": "2.7.1",
"eslint-plugin-import": "2.26.0",
"eslint-plugin-prettier": "4.0.0",
"prettier": "2.5.1",
"ts-node": "10.5.0",
"typescript": "4.5.5",
"vitest": "0.3.5"
"prettier": "2.6.2",
"ts-node": "10.7.0",
"typescript": "4.6.4",
"vitest": "0.10.0"
}
}
{
"extends": [
"config:base"
"config:base",
":preserveSemverRanges",
":disableDependencyDashboard"
],
"schedule": ["before 8am on the first day of the month"],
"packageRules": [
{
"updateTypes": ["minor", "patch", "pin", "digest"],
"automerge": true
},
{
"depTypeList": ["devDependencies"],
"automerge": true
}
]
}
import {
JsonFragment,
JsonFragmentType,
ParamType,

@@ -13,4 +12,3 @@ Result,

name: string;
inputs: JsonFragmentType[];
values: Result;
values: ValueMap;
}

@@ -20,9 +18,7 @@

name: string;
outputs: JsonFragmentType[];
values: Result;
values: ValueMap;
}
interface Constructor {
inputs: JsonFragmentType[];
values: Result;
values: ValueMap;
}

@@ -32,4 +28,3 @@

name: string;
inputs: JsonFragmentType[];
values: Result;
values: ValueMap;
}

@@ -42,2 +37,7 @@

// eslint-disable-next-line @typescript-eslint/no-explicit-any
type Value = any;
type Values = Value[];
type ValueMap = Record<string, Value>;
class Coder {

@@ -81,5 +81,5 @@ private abi: JsonFragment[];

const result = defaultAbiCoder.decode(inputs, data);
const values = toValueMap(result, inputs);
return {
inputs,
values: result,
values,
};

@@ -123,6 +123,6 @@ }

}
const values = toValueMap(result, inputs);
return {
name: event.name,
inputs,
values: result,
values,
};

@@ -142,2 +142,3 @@ }

const result = defaultAbiCoder.decode(inputs, calldata);
const values = toValueMap(result, inputs);

@@ -149,4 +150,3 @@ if (!func.name) {

name: func.name,
inputs,
values: result,
values,
};

@@ -163,10 +163,10 @@ }

const result = defaultAbiCoder.decode(outputs, data);
const values = toValueMap(result, outputs);
return {
name,
outputs,
values: result,
values,
};
}
encodeConstructor(values: any[]): string {
encodeConstructor(valueMap: ValueMap): string {
const constructor = this.getConstructor();

@@ -178,6 +178,7 @@ const jsonInputs = constructor?.inputs;

const inputs = jsonInputs.map((input) => ParamType.fromObject(input));
const values = toValues(valueMap, inputs);
return defaultAbiCoder.encode(inputs, values);
}
encodeEvent(name: string, values: any[]): EventEncoding {
encodeEvent(name: string, values: Record<string, Value>): EventEncoding {
const event = this.getEventByName(name);

@@ -193,6 +194,6 @@ const jsonInputs = event?.inputs;

const topicResult: Result = [];
const dataResult: any[] = [];
const dataResult: Values = [];
for (let i = 0; i < inputs.length; i++) {
const input = inputs[i];
const value = values[i];
const value = values[input.name];
if (input.indexed) {

@@ -220,3 +221,3 @@ topicResult.push(value);

encodeFunction(name: string, values: any[]): string {
encodeFunction(name: string, valueMap: Record<string, Value>): string {
const func = this.getFunctionByName(name);

@@ -230,2 +231,3 @@ const jsonInputs = func?.inputs;

const selector = sha3(signature).substring(2, 10);
const values = toValues(valueMap, inputs);
const argumentString = defaultAbiCoder.encode(inputs, values);

@@ -237,3 +239,3 @@ const argumentData = argumentString.substring(2);

encodeFunctionOutput(name: string, values: any[]): string {
encodeFunctionOutput(name: string, valueMap: Record<string, Value>): string {
const func = this.getFunctionByName(name);

@@ -245,2 +247,3 @@ const jsonOutputs = func.outputs;

const outputs = jsonOutputs.map((output) => ParamType.fromObject(output));
const values = toValues(valueMap, outputs);
return defaultAbiCoder.encode(outputs, values);

@@ -334,8 +337,23 @@ }

function sha3(input: string) {
function sha3(input: string): string {
return keccak256(toUtf8Bytes(input));
}
function toValueMap(result: Result, inputs: ParamType[]): ValueMap {
return Object.fromEntries(
result.map((value, index) => {
const input: ParamType = inputs[index];
return [input.name, value];
}),
);
}
function toValues(values: Record<string, Value>, inputs: ParamType[]): Values {
return inputs.map((input) => {
return values[input.name];
});
}
export default Coder;
export { FunctionData, FunctionOutputData, Constructor, Event, EventEncoding };

@@ -45,3 +45,3 @@ [

{
"name": "",
"name": "supply",
"type": "uint256"

@@ -48,0 +48,0 @@ }

@@ -36,3 +36,52 @@ [

"type": "function"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": false,
"internalType": "int256",
"name": "amount0",
"type": "int256"
},
{
"indexed": false,
"internalType": "int256",
"name": "amount1",
"type": "int256"
},
{
"indexed": false,
"internalType": "uint160",
"name": "sqrtPriceX96",
"type": "uint160"
},
{
"indexed": false,
"internalType": "uint128",
"name": "liquidity",
"type": "uint128"
},
{
"indexed": false,
"internalType": "int24",
"name": "tick",
"type": "int24"
}
],
"name": "Swap",
"type": "event"
}
]

@@ -55,4 +55,3 @@ import { BigNumber } from '@ethersproject/bignumber';

expect(initEvent.name).toEqual('Init');
expect(initEvent.inputs.length).toEqual(initEvent.values.length);
expect(initEvent.values).toEqual([]);
expect(initEvent.values).toEqual({});
});

@@ -69,9 +68,6 @@

expect(withdrawalEvent.name).toEqual('Withdrawal');
expect(withdrawalEvent.inputs.length).toEqual(
withdrawalEvent.values.length,
);
expect(withdrawalEvent.values).toEqual([
'0x8939B49A0983A9E6eF416C23cCd8B04aF0E8A006',
BigNumber.from('500000000000000000'),
]);
expect(withdrawalEvent.values).toEqual({
src: '0x8939B49A0983A9E6eF416C23cCd8B04aF0E8A006',
wad: BigNumber.from('500000000000000000'),
});
});

@@ -89,11 +85,31 @@

expect(transferEvent.name).toEqual('Transfer');
expect(transferEvent.inputs.length).toEqual(transferEvent.values.length);
expect(transferEvent.values).toEqual([
'0xb5CFcb4D4745cBBD252945856E1B6eaadCf2fC4E',
'0x694c6aea9444876d4fA9375fC9089C370F8E9edA',
BigNumber.from('1015479348216300000000'),
]);
expect(transferEvent.values).toEqual({
from: '0xb5CFcb4D4745cBBD252945856E1B6eaadCf2fC4E',
to: '0x694c6aea9444876d4fA9375fC9089C370F8E9edA',
value: BigNumber.from('1015479348216300000000'),
});
});
test('decodes event with tuple', () => {
test('decodes event with 7 arguments', () => {
const swapEvent = swapperCoder.decodeEvent(
[
'0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67',
'0x0000000000000000000000005f62593c70069abb35dfe2b63db969e8906609d6',
'0x0000000000000000000000003ce42ef6b6617b5950c13d1c258ecfdcd30bb4de',
],
'0xfffffffffffffffffffffffffffffffffffffffffffffe98bd31cc11bd70fe680000000000000000000000000000000000000000000000000a8c0ff92d4c0000000000000000000000000000000000000000000002bf79e9d3bac931bdce2834000000000000000000000000000000000000000000000102f396df184811f89cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9dbd',
);
expect(swapEvent.name).toEqual('Swap');
expect(swapEvent.values).toEqual({
sender: '0x5f62593C70069AbB35dFe2B63db969e8906609d6',
recipient: '0x3Ce42eF6b6617b5950C13D1c258eCFDcd30bB4De',
amount0: BigNumber.from('-6627194964611846570392'),
amount1: BigNumber.from('760000000000000000'),
sqrtPriceX96: BigNumber.from('850450570881608614360786996'),
liquidity: BigNumber.from('4776812432910168750236'),
tick: -90691,
});
});
test('decodes event with many arguments', () => {
const fillEvent = zeroExCoder.decodeEvent(

@@ -109,20 +125,52 @@ [

expect(fillEvent.name).toEqual('Fill');
expect(fillEvent.inputs.length).toEqual(fillEvent.values.length);
expect(fillEvent.values).toEqual([
'0x7b1886e49AB5433bb46f7258548092DC8CdCA28B',
'0x1000000000000000000000000000000000000011',
'0xf47261b0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
'0xf47261b0000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
'0x',
'0x',
'0x9039f36033ca5ec4d518a26ce468a9c8d31bdbe9f9aa65767fa50f8c10b2019d',
'0x58e327D64Fc77fA36f698989623c3E4f058C8a89',
'0x58e327D64Fc77fA36f698989623c3E4f058C8a89',
BigNumber.from('35000000000000000000'),
BigNumber.from('138903388933'),
BigNumber.from('0'),
BigNumber.from('0'),
BigNumber.from('0'),
]);
expect(fillEvent.values).toEqual({
makerAddress: '0x7b1886e49AB5433bb46f7258548092DC8CdCA28B',
feeRecipientAddress: '0x1000000000000000000000000000000000000011',
makerAssetData:
'0xf47261b0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
takerAssetData:
'0xf47261b0000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
makerFeeAssetData: '0x',
takerFeeAssetData: '0x',
orderHash:
'0x9039f36033ca5ec4d518a26ce468a9c8d31bdbe9f9aa65767fa50f8c10b2019d',
takerAddress: '0x58e327D64Fc77fA36f698989623c3E4f058C8a89',
senderAddress: '0x58e327D64Fc77fA36f698989623c3E4f058C8a89',
makerAssetFilledAmount: BigNumber.from('35000000000000000000'),
takerAssetFilledAmount: BigNumber.from('138903388933'),
makerFeePaid: BigNumber.from('0'),
takerFeePaid: BigNumber.from('0'),
protocolFeePaid: BigNumber.from('0'),
});
});
test('decodes event with a tuple', () => {
const newMarketplaceEvent = marketCoder.decodeEvent(
['0x44c1325bfcaffc6218fee9f77391dac11c5b3720b1466a6dc54203d076bed8cc'],
'0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000286dc6324127aad68397ecc2c928c23e7b40fe070000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000064d61746368610000000000000000000000000000000000000000000000000000000000000000000000000000286dc6324127aad68397ecc2c928c23e7b40fe070000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000000054d6f636861000000000000000000000000000000000000000000000000000000000000000000000000000000286dc6324127aad68397ecc2c928c23e7b40fe070000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000054c6174746500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000004',
);
expect(newMarketplaceEvent.name).toEqual('NewMarketplace');
expect(newMarketplaceEvent.values.goods[0].seller).toEqual(
'0x286Dc6324127Aad68397EcC2C928C23E7B40Fe07',
);
expect(newMarketplaceEvent.values.goods[0].name).toEqual('Matcha');
expect(newMarketplaceEvent.values.goods[0].price).toEqual(
BigNumber.from(7),
);
expect(newMarketplaceEvent.values.goods[1].seller).toEqual(
'0x286Dc6324127Aad68397EcC2C928C23E7B40Fe07',
);
expect(newMarketplaceEvent.values.goods[1].name).toEqual('Mocha');
expect(newMarketplaceEvent.values.goods[1].price).toEqual(
BigNumber.from(9),
);
expect(newMarketplaceEvent.values.goods[2].seller).toEqual(
'0x286Dc6324127Aad68397EcC2C928C23E7B40Fe07',
);
expect(newMarketplaceEvent.values.goods[2].name).toEqual('Latte');
expect(newMarketplaceEvent.values.goods[2].price).toEqual(
BigNumber.from(4),
);
expect(newMarketplaceEvent.values.sellerIds).toEqual([4]);
});
});

@@ -134,6 +182,3 @@

expect(depositFunction.name).toEqual('deposit');
expect(depositFunction.inputs.length).toEqual(
depositFunction.values.length,
);
expect(depositFunction.values).toEqual([]);
expect(depositFunction.values).toEqual({});
});

@@ -146,11 +191,6 @@

expect(transferFunction.name).toEqual('transfer');
expect(transferFunction.inputs.length).toEqual(
transferFunction.values.length,
);
expect(transferFunction.values[0]).toEqual(
'0x694c6aea9444876d4fA9375fC9089C370F8E9edA',
);
expect(transferFunction.values[1]).toEqual(
BigNumber.from('1015479348216300000000'),
);
expect(transferFunction.values).toEqual({
_to: '0x694c6aea9444876d4fA9375fC9089C370F8E9edA',
_value: BigNumber.from('1015479348216300000000'),
});
});

@@ -163,77 +203,90 @@

expect(matchOrdersFunction.name).toEqual('matchOrders');
expect(matchOrdersFunction.inputs.length).toEqual(
matchOrdersFunction.values.length,
);
expect(matchOrdersFunction.values[0][0]).toEqual(
expect(matchOrdersFunction.values.leftOrder.makerAddress).toEqual(
'0x7b1886e49AB5433bb46f7258548092DC8CdCA28B',
);
expect(matchOrdersFunction.values[0][1]).toEqual(
expect(matchOrdersFunction.values.leftOrder.takerAddress).toEqual(
'0x0000000000000000000000000000000000000000',
);
expect(matchOrdersFunction.values[0][2]).toEqual(
expect(matchOrdersFunction.values.leftOrder.feeRecipientAddress).toEqual(
'0x1000000000000000000000000000000000000011',
);
expect(matchOrdersFunction.values[0][3]).toEqual(
expect(matchOrdersFunction.values.leftOrder.senderAddress).toEqual(
'0x0000000000000000000000000000000000000000',
);
expect(matchOrdersFunction.values[0][4]).toEqual(
expect(matchOrdersFunction.values.leftOrder.makerAssetAmount).toEqual(
BigNumber.from('35000000000000000000'),
);
expect(matchOrdersFunction.values[0][5]).toEqual(
expect(matchOrdersFunction.values.leftOrder.takerAssetAmount).toEqual(
BigNumber.from('138903388933'),
);
expect(matchOrdersFunction.values[0][6]).toEqual(BigNumber.from('0'));
expect(matchOrdersFunction.values[0][7]).toEqual(BigNumber.from('0'));
expect(matchOrdersFunction.values[0][8]).toEqual(
BigNumber.from('1640057690'),
expect(matchOrdersFunction.values.leftOrder.makerFee).toEqual(
BigNumber.from('0'),
);
expect(matchOrdersFunction.values[0][9]).toEqual(
expect(matchOrdersFunction.values.leftOrder.takerFee).toEqual(
BigNumber.from('0'),
);
expect(
matchOrdersFunction.values.leftOrder.expirationTimeSeconds,
).toEqual(BigNumber.from('1640057690'));
expect(matchOrdersFunction.values.leftOrder.salt).toEqual(
BigNumber.from('1640057648758'),
);
expect(matchOrdersFunction.values[0][10]).toEqual(
expect(matchOrdersFunction.values.leftOrder.makerAssetData).toEqual(
'0xf47261b0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
);
expect(matchOrdersFunction.values[0][11]).toEqual(
expect(matchOrdersFunction.values.leftOrder.takerAssetData).toEqual(
'0xf47261b0000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
);
expect(matchOrdersFunction.values[0][12]).toEqual('0x');
expect(matchOrdersFunction.values[0][13]).toEqual('0x');
expect(matchOrdersFunction.values[1][0]).toEqual(
expect(matchOrdersFunction.values.leftOrder.makerFeeAssetData).toEqual(
'0x',
);
expect(matchOrdersFunction.values.leftOrder.takerFeeAssetData).toEqual(
'0x',
);
expect(matchOrdersFunction.values.rightOrder.makerAddress).toEqual(
'0x7b1886e49AB5433bb46f7258548092DC8CdCA28B',
);
expect(matchOrdersFunction.values[1][1]).toEqual(
expect(matchOrdersFunction.values.rightOrder.takerAddress).toEqual(
'0x0000000000000000000000000000000000000000',
);
expect(matchOrdersFunction.values[1][2]).toEqual(
expect(matchOrdersFunction.values.rightOrder.feeRecipientAddress).toEqual(
'0x1000000000000000000000000000000000000011',
);
expect(matchOrdersFunction.values[1][3]).toEqual(
expect(matchOrdersFunction.values.rightOrder.senderAddress).toEqual(
'0x0000000000000000000000000000000000000000',
);
expect(matchOrdersFunction.values[1][4]).toEqual(
expect(matchOrdersFunction.values.rightOrder.makerAssetAmount).toEqual(
BigNumber.from('328851133418'),
);
expect(matchOrdersFunction.values[1][5]).toEqual(
expect(matchOrdersFunction.values.rightOrder.takerAssetAmount).toEqual(
BigNumber.from('82789851859423461376'),
);
expect(matchOrdersFunction.values[1][6]).toEqual(BigNumber.from('0'));
expect(matchOrdersFunction.values[1][7]).toEqual(BigNumber.from('0'));
expect(matchOrdersFunction.values[1][8]).toEqual(
BigNumber.from('1640057718'),
expect(matchOrdersFunction.values.rightOrder.makerFee).toEqual(
BigNumber.from('0'),
);
expect(matchOrdersFunction.values[1][9]).toEqual(
expect(matchOrdersFunction.values.rightOrder.takerFee).toEqual(
BigNumber.from('0'),
);
expect(
matchOrdersFunction.values.rightOrder.expirationTimeSeconds,
).toEqual(BigNumber.from('1640057718'));
expect(matchOrdersFunction.values.rightOrder.salt).toEqual(
BigNumber.from('1640057690545'),
);
expect(matchOrdersFunction.values[1][10]).toEqual(
expect(matchOrdersFunction.values.rightOrder.makerAssetData).toEqual(
'0xf47261b0000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
);
expect(matchOrdersFunction.values[1][11]).toEqual(
expect(matchOrdersFunction.values.rightOrder.takerAssetData).toEqual(
'0xf47261b0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
);
expect(matchOrdersFunction.values[1][12]).toEqual('0x');
expect(matchOrdersFunction.values[1][13]).toEqual('0x');
expect(matchOrdersFunction.values[2]).toEqual(
expect(matchOrdersFunction.values.rightOrder.makerFeeAssetData).toEqual(
'0x',
);
expect(matchOrdersFunction.values.rightOrder.takerFeeAssetData).toEqual(
'0x',
);
expect(matchOrdersFunction.values.leftSignature).toEqual(
'0x1ba64ca0f6f8ca7943163ec02ff09cad3e54c2ff74fc325849cd9f8cbee0826cee16d8fc0e36ed44fe9695499e6803768668a4d0a96ae4da7e5fe8d86604a9ef1c03',
);
expect(matchOrdersFunction.values[3]).toEqual(
expect(matchOrdersFunction.values.rightSignature).toEqual(
'0x1cb4ca963bc1bf9e9ffe3c5e8ea2f9c38a716cd0ff0ec26a808dd31813d2651bc039dd04a26f9ffbfde14ed84e466ba9dcf74a84aedeacd4e375a1620dd1e9273603',

@@ -248,39 +301,36 @@ );

expect(updateMarketsFunction.name).toEqual('updateMarkets');
expect(updateMarketsFunction.inputs.length).toEqual(
updateMarketsFunction.values.length,
);
expect(updateMarketsFunction.values[0][0][0][0]).toEqual(
expect(updateMarketsFunction.values.goods[0][0].seller).toEqual(
'0x3DCa2eCBBfadbCbf83CfD456E1657A52E170CbF3',
);
expect(updateMarketsFunction.values[0][0][0][1]).toEqual('Apple');
expect(updateMarketsFunction.values[0][0][0][2]).toEqual(
expect(updateMarketsFunction.values.goods[0][0].name).toEqual('Apple');
expect(updateMarketsFunction.values.goods[0][0].price).toEqual(
BigNumber.from(35),
);
expect(updateMarketsFunction.values[0][0][1][0]).toEqual(
expect(updateMarketsFunction.values.goods[0][1].seller).toEqual(
'0x3DCa2eCBBfadbCbf83CfD456E1657A52E170CbF3',
);
expect(updateMarketsFunction.values[0][0][1][1]).toEqual('Pear');
expect(updateMarketsFunction.values[0][0][1][2]).toEqual(
expect(updateMarketsFunction.values.goods[0][1].name).toEqual('Pear');
expect(updateMarketsFunction.values.goods[0][1].price).toEqual(
BigNumber.from(32),
);
expect(updateMarketsFunction.values[0][1][0][0]).toEqual(
expect(updateMarketsFunction.values.goods[1][0].seller).toEqual(
'0x1f56BfF579f7a57326d07823a00A7fF0e57CBb4f',
);
expect(updateMarketsFunction.values[0][1][0][1]).toEqual('Paper');
expect(updateMarketsFunction.values[0][1][0][2]).toEqual(
expect(updateMarketsFunction.values.goods[1][0].name).toEqual('Paper');
expect(updateMarketsFunction.values.goods[1][0].price).toEqual(
BigNumber.from(120),
);
expect(updateMarketsFunction.values[0][1][1][0]).toEqual(
expect(updateMarketsFunction.values.goods[1][1].seller).toEqual(
'0x1f56BfF579f7a57326d07823a00A7fF0e57CBb4f',
);
expect(updateMarketsFunction.values[0][1][1][1]).toEqual('Pen');
expect(updateMarketsFunction.values[0][1][1][2]).toEqual(
expect(updateMarketsFunction.values.goods[1][1].name).toEqual('Pen');
expect(updateMarketsFunction.values.goods[1][1].price).toEqual(
BigNumber.from(50),
);
expect(updateMarketsFunction.values[0][1][2][0]).toEqual(
expect(updateMarketsFunction.values.goods[1][2].seller).toEqual(
'0x1f56BfF579f7a57326d07823a00A7fF0e57CBb4f',
);
expect(updateMarketsFunction.values[0][1][2][1]).toEqual('Staples');
expect(updateMarketsFunction.values[0][1][2][2]).toEqual(
expect(updateMarketsFunction.values.goods[1][2].name).toEqual('Staples');
expect(updateMarketsFunction.values.goods[1][2].price).toEqual(
BigNumber.from(8),

@@ -295,11 +345,8 @@ );

expect(addSellerFunction.name).toEqual('addSeller');
expect(addSellerFunction.inputs.length).toEqual(
addSellerFunction.values.length,
);
expect(addSellerFunction.values[0][0]).toEqual('Mark');
expect(addSellerFunction.values[0][1][0]).toEqual(
expect(addSellerFunction.values.seller.name).toEqual('Mark');
expect(addSellerFunction.values.seller.team.team).toEqual(
'0x00192Fb10dF37c9FB26829eb2CC623cd1BF599E8',
);
expect(addSellerFunction.values[0][1][1]).toEqual('Blue');
expect(addSellerFunction.values[0][1][2]).toEqual(13);
expect(addSellerFunction.values.seller.team.name).toEqual('Blue');
expect(addSellerFunction.values.seller.team.id).toEqual(13);
});

@@ -314,6 +361,3 @@ });

);
expect(swapFunctionOutput.outputs.length).toEqual(
swapFunctionOutput.values.length,
);
expect(swapFunctionOutput.values).toEqual([]);
expect(swapFunctionOutput.values).toEqual({});

@@ -324,6 +368,3 @@ const registrerSellersFunctionOutput = marketCoder.decodeFunctionOutput(

);
expect(registrerSellersFunctionOutput.outputs.length).toEqual(
registrerSellersFunctionOutput.values.length,
);
expect(registrerSellersFunctionOutput.values).toEqual([]);
expect(registrerSellersFunctionOutput.values).toEqual({});
});

@@ -336,8 +377,5 @@

);
expect(totalSupplyFunctionOutput.outputs.length).toEqual(
totalSupplyFunctionOutput.values.length,
);
expect(totalSupplyFunctionOutput.values).toEqual([
BigNumber.from('500000000000000000'),
]);
expect(totalSupplyFunctionOutput.values).toEqual({
supply: BigNumber.from('500000000000000000'),
});

@@ -348,8 +386,5 @@ const ownerFunctionOutput = zeroExCoder.decodeFunctionOutput(

);
expect(ownerFunctionOutput.outputs.length).toEqual(
ownerFunctionOutput.values.length,
);
expect(ownerFunctionOutput.values).toEqual([
'0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
]);
expect(ownerFunctionOutput.values).toEqual({
owner: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
});

@@ -360,8 +395,5 @@ const balanceOfFunctionOutput = erc20Coder.decodeFunctionOutput(

);
expect(balanceOfFunctionOutput.outputs.length).toEqual(
balanceOfFunctionOutput.values.length,
);
expect(balanceOfFunctionOutput.values[0]).toEqual(
BigNumber.from('13500000000000000000'),
);
expect(balanceOfFunctionOutput.values).toEqual({
balance: BigNumber.from('13500000000000000000'),
});
});

@@ -375,20 +407,20 @@

);
expect(batchFillOrdersNoThrowFunctionOutput.outputs.length).toEqual(
batchFillOrdersNoThrowFunctionOutput.values.length,
);
expect(batchFillOrdersNoThrowFunctionOutput.values[0][0][0]).toEqual(
BigNumber.from('328851133418'),
);
expect(batchFillOrdersNoThrowFunctionOutput.values[0][0][1]).toEqual(
BigNumber.from('82789851859423461376'),
);
expect(batchFillOrdersNoThrowFunctionOutput.values[0][0][2]).toEqual(
BigNumber.from('0'),
);
expect(batchFillOrdersNoThrowFunctionOutput.values[0][0][3]).toEqual(
BigNumber.from('0'),
);
expect(batchFillOrdersNoThrowFunctionOutput.values[0][0][4]).toEqual(
BigNumber.from('0'),
);
expect(
batchFillOrdersNoThrowFunctionOutput.values.fillResults[0]
.makerAssetFilledAmount,
).toEqual(BigNumber.from('328851133418'));
expect(
batchFillOrdersNoThrowFunctionOutput.values.fillResults[0]
.takerAssetFilledAmount,
).toEqual(BigNumber.from('82789851859423461376'));
expect(
batchFillOrdersNoThrowFunctionOutput.values.fillResults[0].makerFeePaid,
).toEqual(BigNumber.from('0'));
expect(
batchFillOrdersNoThrowFunctionOutput.values.fillResults[0].takerFeePaid,
).toEqual(BigNumber.from('0'));
expect(
batchFillOrdersNoThrowFunctionOutput.values.fillResults[0]
.protocolFeePaid,
).toEqual(BigNumber.from('0'));
});

@@ -403,7 +435,6 @@ });

expect(constructor.inputs.length).toEqual(constructor.values.length);
expect(constructor.values[0]).toEqual(
'0x44616920537461626c65636f696e000000000000000000000000000000000000',
);
expect(constructor.values[1]).toEqual('0x4441490000000000');
expect(constructor.values).toEqual({
name: '0x44616920537461626c65636f696e000000000000000000000000000000000000',
symbol: '0x4441490000000000',
});
});

@@ -414,3 +445,3 @@ });

test('encodes event with no arguments', () => {
expect(marketCoder.encodeEvent('Init', [])).toEqual({
expect(marketCoder.encodeEvent('Init', {})).toEqual({
topics: [

@@ -425,6 +456,6 @@ '0x57a86f7d14ccde89e22870afe839e3011216827daa9b24e18629f0a1e9d6cc14',

expect(
wethCoder.encodeEvent('Withdrawal', [
'0x8939b49a0983a9e6ef416c23ccd8b04af0e8a006',
'500000000000000000',
]),
wethCoder.encodeEvent('Withdrawal', {
src: '0x8939b49a0983a9e6ef416c23ccd8b04af0e8a006',
wad: '500000000000000000',
}),
).toEqual({

@@ -441,7 +472,7 @@ topics: [

expect(
erc20Coder.encodeEvent('Transfer', [
'0xb5cfcb4d4745cbbd252945856e1b6eaadcf2fc4e',
'0x694c6aea9444876d4fa9375fc9089c370f8e9eda',
'1015479348216300000000',
]),
erc20Coder.encodeEvent('Transfer', {
from: '0xb5cfcb4d4745cbbd252945856e1b6eaadcf2fc4e',
to: '0x694c6aea9444876d4fa9375fc9089c370f8e9eda',
value: '1015479348216300000000',
}),
).toEqual({

@@ -457,20 +488,23 @@ topics: [

test('encodes event with a tuple', () => {
test('encodes event with many arguments', () => {
expect(
zeroExCoder.encodeEvent('Fill', [
'0x7b1886e49ab5433bb46f7258548092dc8cdca28b',
'0x1000000000000000000000000000000000000011',
'0xf47261b0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
'0xf47261b0000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
'0x',
'0x',
'0x9039f36033ca5ec4d518a26ce468a9c8d31bdbe9f9aa65767fa50f8c10b2019d',
'0x58e327d64fc77fa36f698989623c3e4f058c8a89',
'0x58e327d64fc77fa36f698989623c3e4f058c8a89',
'35000000000000000000',
'138903388933',
'0',
'0',
'0',
]),
zeroExCoder.encodeEvent('Fill', {
makerAddress: '0x7b1886e49ab5433bb46f7258548092dc8cdca28b',
feeRecipientAddress: '0x1000000000000000000000000000000000000011',
makerAssetData:
'0xf47261b0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
takerAssetData:
'0xf47261b0000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
makerFeeAssetData: '0x',
takerFeeAssetData: '0x',
orderHash:
'0x9039f36033ca5ec4d518a26ce468a9c8d31bdbe9f9aa65767fa50f8c10b2019d',
takerAddress: '0x58e327d64fc77fa36f698989623c3e4f058c8a89',
senderAddress: '0x58e327d64fc77fa36f698989623c3e4f058c8a89',
makerAssetFilledAmount: '35000000000000000000',
takerAssetFilledAmount: '138903388933',
makerFeePaid: '0',
takerFeePaid: '0',
protocolFeePaid: '0',
}),
).toEqual({

@@ -486,2 +520,32 @@ topics: [

});
test('encodes event with a tuple', () => {
expect(
marketCoder.encodeEvent('NewMarketplace', {
goods: [
{
seller: '0x286Dc6324127Aad68397EcC2C928C23E7B40Fe07',
name: 'Matcha',
price: 7,
},
{
seller: '0x286Dc6324127Aad68397EcC2C928C23E7B40Fe07',
name: 'Mocha',
price: 9,
},
{
seller: '0x286Dc6324127Aad68397EcC2C928C23E7B40Fe07',
name: 'Latte',
price: 4,
},
],
sellerIds: [4],
}),
).toEqual({
topics: [
'0x44c1325bfcaffc6218fee9f77391dac11c5b3720b1466a6dc54203d076bed8cc',
],
data: '0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000286dc6324127aad68397ecc2c928c23e7b40fe070000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000064d61746368610000000000000000000000000000000000000000000000000000000000000000000000000000286dc6324127aad68397ecc2c928c23e7b40fe070000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000000054d6f636861000000000000000000000000000000000000000000000000000000000000000000000000000000286dc6324127aad68397ecc2c928c23e7b40fe070000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000054c6174746500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000004',
});
});
});

@@ -491,5 +555,5 @@

test('encodes function with no arguments', () => {
expect(wethCoder.encodeFunction('deposit', [])).toEqual('0xd0e30db0');
expect(wethCoder.encodeFunction('deposit', {})).toEqual('0xd0e30db0');
expect(zeroExCoder.encodeFunction('owner', [])).toEqual('0x8da5cb5b');
expect(zeroExCoder.encodeFunction('owner', {})).toEqual('0x8da5cb5b');
});

@@ -499,5 +563,5 @@

expect(
erc20Coder.encodeFunction('balanceOf', [
'0x1a9c8182c09f50c8318d769245bea52c32be35bc',
]),
erc20Coder.encodeFunction('balanceOf', {
_owner: '0x1a9c8182c09f50c8318d769245bea52c32be35bc',
}),
).toEqual(

@@ -510,6 +574,6 @@ '0x70a082310000000000000000000000001a9c8182c09f50c8318d769245bea52c32be35bc',

expect(
erc20Coder.encodeFunction('transfer', [
'0x694c6aea9444876d4fA9375fC9089C370F8E9edA',
'1015479348216300000000',
]),
erc20Coder.encodeFunction('transfer', {
_to: '0x694c6aea9444876d4fA9375fC9089C370F8E9edA',
_value: '1015479348216300000000',
}),
).toEqual(

@@ -522,4 +586,4 @@ '0xa9059cbb000000000000000000000000694c6aea9444876d4fa9375fc9089c370f8e9eda0000000000000000000000000000000000000000000000370c9b5ef669c35300',

expect(
swapperCoder.encodeFunction('swap', [
{
swapperCoder.encodeFunction('swap', {
quote: {
inAmount: '250000000',

@@ -529,4 +593,4 @@ inAsset: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',

},
'1633000000',
]),
deadline: '1633000000',
}),
).toEqual(

@@ -537,4 +601,4 @@ '0xa18d33e1000000000000000000000000000000000000000000000000000000000ee6b280000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000000000000000000000000000000000000061559a40',

expect(
zeroExCoder.encodeFunction('matchOrders', [
{
zeroExCoder.encodeFunction('matchOrders', {
leftOrder: {
makerAddress: '0x7b1886e49AB5433bb46f7258548092DC8CdCA28B',

@@ -544,8 +608,8 @@ takerAddress: '0x0000000000000000000000000000000000000000',

senderAddress: '0x0000000000000000000000000000000000000000',
makerAssetAmount: '35000000000000000000',
takerAssetAmount: '138903388933',
makerFee: '0',
takerFee: '0',
expirationTimeSeconds: '1640057690',
salt: '1640057648758',
makerAssetAmount: BigNumber.from('35000000000000000000'),
takerAssetAmount: BigNumber.from('138903388933'),
makerFee: BigNumber.from('0'),
takerFee: BigNumber.from('0'),
expirationTimeSeconds: BigNumber.from('1640057690'),
salt: BigNumber.from('1640057648758'),
makerAssetData:

@@ -558,3 +622,3 @@ '0xf47261b0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',

},
{
rightOrder: {
makerAddress: '0x7b1886e49AB5433bb46f7258548092DC8CdCA28B',

@@ -564,8 +628,8 @@ takerAddress: '0x0000000000000000000000000000000000000000',

senderAddress: '0x0000000000000000000000000000000000000000',
makerAssetAmount: '328851133418',
takerAssetAmount: '82789851859423461376',
makerFee: '0',
takerFee: '0',
expirationTimeSeconds: '1640057718',
salt: '1640057690545',
makerAssetAmount: BigNumber.from('328851133418'),
takerAssetAmount: BigNumber.from('82789851859423461376'),
makerFee: BigNumber.from('0'),
takerFee: BigNumber.from('0'),
expirationTimeSeconds: BigNumber.from('1640057718'),
salt: BigNumber.from('1640057690545'),
makerAssetData:

@@ -578,5 +642,7 @@ '0xf47261b0000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',

},
'0x1ba64ca0f6f8ca7943163ec02ff09cad3e54c2ff74fc325849cd9f8cbee0826cee16d8fc0e36ed44fe9695499e6803768668a4d0a96ae4da7e5fe8d86604a9ef1c03',
'0x1cb4ca963bc1bf9e9ffe3c5e8ea2f9c38a716cd0ff0ec26a808dd31813d2651bc039dd04a26f9ffbfde14ed84e466ba9dcf74a84aedeacd4e375a1620dd1e9273603',
]),
leftSignature:
'0x1ba64ca0f6f8ca7943163ec02ff09cad3e54c2ff74fc325849cd9f8cbee0826cee16d8fc0e36ed44fe9695499e6803768668a4d0a96ae4da7e5fe8d86604a9ef1c03',
rightSignature:
'0x1cb4ca963bc1bf9e9ffe3c5e8ea2f9c38a716cd0ff0ec26a808dd31813d2651bc039dd04a26f9ffbfde14ed84e466ba9dcf74a84aedeacd4e375a1620dd1e9273603',
}),
).toEqual(

@@ -589,15 +655,35 @@ '0x88ec79fb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000006800000000000000000000000007b1886e49ab5433bb46f7258548092dc8cdca28b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e5b8fa8fe2ac00000000000000000000000000000000000000000000000000000000002057498305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061c14b5a0000000000000000000000000000000000000000000000000000017ddb0db67600000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000024f47261b0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024f47261b0000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b1886e49ab5433bb46f7258548092dc8cdca28b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c910e13ea0000000000000000000000000000000000000000000000047cf0a3a070260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061c14b760000000000000000000000000000000000000000000000000000017ddb0e59b100000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000024f47261b0000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024f47261b0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000421ba64ca0f6f8ca7943163ec02ff09cad3e54c2ff74fc325849cd9f8cbee0826cee16d8fc0e36ed44fe9695499e6803768668a4d0a96ae4da7e5fe8d86604a9ef1c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000421cb4ca963bc1bf9e9ffe3c5e8ea2f9c38a716cd0ff0ec26a808dd31813d2651bc039dd04a26f9ffbfde14ed84e466ba9dcf74a84aedeacd4e375a1620dd1e9273603000000000000000000000000000000000000000000000000000000000000',

expect(
marketCoder.encodeFunction('updateMarkets', [
[
marketCoder.encodeFunction('updateMarkets', {
goods: [
[
['0x3DCa2eCBBfadbCbf83CfD456E1657A52E170CbF3', 'Apple', 35],
['0x3DCa2eCBBfadbCbf83CfD456E1657A52E170CbF3', 'Pear', 32],
{
seller: '0x3DCa2eCBBfadbCbf83CfD456E1657A52E170CbF3',
name: 'Apple',
price: 35,
},
{
seller: '0x3DCa2eCBBfadbCbf83CfD456E1657A52E170CbF3',
name: 'Pear',
price: 32,
},
],
[
['0x1f56BfF579f7a57326d07823a00A7fF0e57CBb4f', 'Paper', 120],
['0x1f56BfF579f7a57326d07823a00A7fF0e57CBb4f', 'Pen', 50],
['0x1f56BfF579f7a57326d07823a00A7fF0e57CBb4f', 'Staples', 8],
{
seller: '0x1f56BfF579f7a57326d07823a00A7fF0e57CBb4f',
name: 'Paper',
price: 120,
},
{
seller: '0x1f56BfF579f7a57326d07823a00A7fF0e57CBb4f',
name: 'Pen',
price: 50,
},
{
seller: '0x1f56BfF579f7a57326d07823a00A7fF0e57CBb4f',
name: 'Staples',
price: 8,
},
],
],
]),
}),
).toEqual(

@@ -610,5 +696,12 @@ '0x0d85954c00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000003dca2ecbbfadbcbf83cfd456e1657a52e170cbf30000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000054170706c650000000000000000000000000000000000000000000000000000000000000000000000000000003dca2ecbbfadbcbf83cfd456e1657a52e170cbf3000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004506561720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000001f56bff579f7a57326d07823a00a7ff0e57cbb4f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000000550617065720000000000000000000000000000000000000000000000000000000000000000000000000000001f56bff579f7a57326d07823a00a7ff0e57cbb4f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000350656e00000000000000000000000000000000000000000000000000000000000000000000000000000000001f56bff579f7a57326d07823a00a7ff0e57cbb4f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000007537461706c657300000000000000000000000000000000000000000000000000',

expect(
marketCoder.encodeFunction('addSeller', [
['Mark', ['0x00192Fb10dF37c9FB26829eb2CC623cd1BF599E8', 'Blue', 13]],
]),
marketCoder.encodeFunction('addSeller', {
seller: {
name: 'Mark',
team: {
team: '0x00192Fb10dF37c9FB26829eb2CC623cd1BF599E8',
name: 'Blue',
id: 13,
},
},
}),
).toEqual(

@@ -629,5 +722,5 @@ '0xe92a0f7900000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000044d61726b0000000000000000000000000000000000000000000000000000000000000000000000000000000000192fb10df37c9fb26829eb2cc623cd1bf599e80000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000004426c756500000000000000000000000000000000000000000000000000000000',

expect(
erc20Coder.encodeFunctionOutput('totalSupply', [
BigNumber.from('500000000000000000'),
]),
erc20Coder.encodeFunctionOutput('totalSupply', {
supply: BigNumber.from('500000000000000000'),
}),
).toEqual(

@@ -640,13 +733,13 @@ '0x00000000000000000000000000000000000000000000000006f05b59d3b20000',

expect(
zeroExCoder.encodeFunctionOutput('batchFillOrdersNoThrow', [
[
[
BigNumber.from('328851133418'),
BigNumber.from('82789851859423461376'),
BigNumber.from('0'),
BigNumber.from('0'),
BigNumber.from('0'),
],
zeroExCoder.encodeFunctionOutput('batchFillOrdersNoThrow', {
fillResults: [
{
makerAssetFilledAmount: BigNumber.from('328851133418'),
takerAssetFilledAmount: BigNumber.from('82789851859423461376'),
makerFeePaid: BigNumber.from('0'),
takerFeePaid: BigNumber.from('0'),
protocolFeePaid: BigNumber.from('0'),
},
],
]),
}),
).toEqual(

@@ -661,6 +754,6 @@ '0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000004c910e13ea0000000000000000000000000000000000000000000000047cf0a3a070260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',

expect(
tokenCoder.encodeConstructor([
'0x44616920537461626c65636f696e000000000000000000000000000000000000',
'0x4441490000000000',
]),
tokenCoder.encodeConstructor({
name: '0x44616920537461626c65636f696e000000000000000000000000000000000000',
symbol: '0x4441490000000000',
}),
).toEqual(

@@ -667,0 +760,0 @@ '0x44616920537461626c65636f696e0000000000000000000000000000000000004441490000000000000000000000000000000000000000000000000000000000',

{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"target": "ES5",
"module": "CommonJS",
"moduleResolution": "node",
"declaration": true,
"declarationMap": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"noEmitOnError": true,
"noFallthroughCasesInSwitch": true,
"noImplicitAny": true,
"noImplicitOverride": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noPropertyAccessFromIndexSignature": false,
"noUncheckedIndexedAccess": false,
"resolveJsonModule": true,
"skipLibCheck": true,
"sourceMap": true,
"strict": true,
"useDefineForClassFields": true,
"outDir": "./lib",
"allowSyntheticDefaultImports": true,
"resolveJsonModule": true,
"strict": true
"baseUrl": "src",
"paths": {
"@/*": ["*"]
}
},
"include": ["src"],
"exclude": ["node_modules", "**/__tests__/*"]
"include": ["src/**/*.ts", "tests/**/*.ts"]
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc