update decodeEvent, convert address to lowercase

This commit is contained in:
CounterFire2023 2024-08-15 10:54:06 +08:00
parent 039c07ff1c
commit cf4af92b81
10 changed files with 1968 additions and 77 deletions

View File

@ -19431,31 +19431,38 @@ function checkPersionalSign(message, address, signature) {
var getTopics = (abi) => {
return (0, import_web3_utils.keccak256)((0, import_web3_utils._jsonInterfaceMethodToString)(abi));
};
var parseOne = (input, value) => {
if (input.type === "tuple[]") {
return value.map((item) => {
let itemData = {};
for (let j = 0; j < input.components.length; j++) {
const component = input.components[j];
itemData[component.name] = parseOne(component, item[j]);
}
return itemData;
});
} else if (input.type === "tuple") {
let itemData = {};
for (let j = 0; j < input.components.length; j++) {
const component = input.components[j];
itemData[component.name] = parseOne(component, value[j]);
}
return itemData;
} else {
if (input.type === "address") {
return value.toLowerCase();
}
return value;
}
};
var decodeEvent = (abi, eventData) => {
const abiInputs = abi.inputs;
let result = import_web3_eth_abi.default.decodeLog(abiInputs, eventData.data, eventData.topics.slice(1));
let decodedData = {};
for (let i = 0; i < abiInputs.length; i++) {
const input = abiInputs[i];
if (input.type === "tuple[]") {
decodedData[input.name] = result[i].map((item) => {
let itemData = {};
for (let j = 0; j < input.components.length; j++) {
const component = input.components[j];
itemData[component.name] = item[j];
}
return itemData;
});
} else if (input.type === "tuple") {
let itemData = {};
for (let j = 0; j < input.components.length; j++) {
const component = input.components[j];
itemData[component.name] = result[i][j];
}
decodedData[input.name] = itemData;
} else {
decodedData[input.name] = result[i];
}
const value = result[i];
decodedData[input.name] = parseOne(input, value);
}
return decodedData;
};

File diff suppressed because one or more lines are too long

View File

@ -19426,31 +19426,38 @@ function checkPersionalSign(message, address, signature) {
var getTopics = (abi) => {
return (0, import_web3_utils.keccak256)((0, import_web3_utils._jsonInterfaceMethodToString)(abi));
};
var parseOne = (input, value) => {
if (input.type === "tuple[]") {
return value.map((item) => {
let itemData = {};
for (let j = 0; j < input.components.length; j++) {
const component = input.components[j];
itemData[component.name] = parseOne(component, item[j]);
}
return itemData;
});
} else if (input.type === "tuple") {
let itemData = {};
for (let j = 0; j < input.components.length; j++) {
const component = input.components[j];
itemData[component.name] = parseOne(component, value[j]);
}
return itemData;
} else {
if (input.type === "address") {
return value.toLowerCase();
}
return value;
}
};
var decodeEvent = (abi, eventData) => {
const abiInputs = abi.inputs;
let result = import_web3_eth_abi.default.decodeLog(abiInputs, eventData.data, eventData.topics.slice(1));
let decodedData = {};
for (let i = 0; i < abiInputs.length; i++) {
const input = abiInputs[i];
if (input.type === "tuple[]") {
decodedData[input.name] = result[i].map((item) => {
let itemData = {};
for (let j = 0; j < input.components.length; j++) {
const component = input.components[j];
itemData[component.name] = item[j];
}
return itemData;
});
} else if (input.type === "tuple") {
let itemData = {};
for (let j = 0; j < input.components.length; j++) {
const component = input.components[j];
itemData[component.name] = result[i][j];
}
decodedData[input.name] = itemData;
} else {
decodedData[input.name] = result[i];
}
const value = result[i];
decodedData[input.name] = parseOne(input, value);
}
return decodedData;
};

File diff suppressed because one or more lines are too long

5
jest.config.js Normal file
View File

@ -0,0 +1,5 @@
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
}

View File

@ -26,7 +26,8 @@
"scripts": {
"build": "tsup",
"lint": "eslint --ext .ts src/**",
"format": "eslint --ext .ts src/** --fix"
"format": "eslint --ext .ts src/** --fix",
"test": "jest"
},
"author": "",
"license": "ISC",
@ -39,14 +40,18 @@
"web3": "^1.7.4"
},
"devDependencies": {
"@jest/globals": "^29.7.0",
"@types/crypto-js": "^4.2.1",
"@types/jest": "^29.5.12",
"@types/node-fetch": "^2.6.11",
"@types/redis": "^2.8.28",
"@typescript-eslint/eslint-plugin": "^6.19.0",
"@typescript-eslint/parser": "^6.19.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.1.3",
"jest": "^29.7.0",
"prettier": "^3.2.3",
"ts-jest": "^29.1.2",
"ts-node": "^10.9.2",
"tsup": "^8.0.1",
"typescript": "^5.3.3"

8
src/test.ts Normal file
View File

@ -0,0 +1,8 @@
import { convert } from "utils/number.util"
let alphabet = '3fBCM8j17XNA9xYun4wmLWep2oHFlhPcgyEJskqOz6GK0UtV5ZRaDSvrTbidQI'
let id1 = '95c9a166b7bd65'
console.log(convert({ numStr: id1, base: 16, to: 52, alphabet }))
let id2 = '95c9a166b7bd66'
console.log(convert({ numStr: id2, base: 16, to: 52, alphabet }))

View File

@ -109,32 +109,39 @@ export const getTopics = (abi: AbiItem) => {
return keccak256(_jsonInterfaceMethodToString(abi))
}
const parseOne = (input: AbiInput, value: any) => {
if (input.type === 'tuple[]') {
return value.map((item: any) => {
let itemData = {}
for (let j = 0; j < input.components.length; j++) {
const component = input.components[j]
itemData[component.name] = parseOne(component, item[j])
}
return itemData
})
} else if (input.type === 'tuple') {
let itemData = {}
for (let j = 0; j < input.components.length; j++) {
const component = input.components[j]
itemData[component.name] = parseOne(component, value[j])
}
return itemData
} else {
if (input.type === 'address') {
return value.toLowerCase()
}
return value
}
}
export const decodeEvent = (abi: AbiItem, eventData: { data: string; topics: string[] }) => {
const abiInputs = abi.inputs
let result = web3abi.decodeLog(abiInputs, eventData.data, eventData.topics.slice(1))
let decodedData: any = {}
for (let i = 0; i < abiInputs.length; i++) {
const input: AbiInput = abiInputs[i]
if (input.type === 'tuple[]') {
// @ts-ignore
decodedData[input.name] = result[i].map(item => {
let itemData = {}
for (let j = 0; j < input.components.length; j++) {
const component = input.components[j]
itemData[component.name] = item[j]
}
return itemData
})
} else if (input.type === 'tuple') {
let itemData = {}
for (let j = 0; j < input.components.length; j++) {
const component = input.components[j]
itemData[component.name] = result[i][j]
}
decodedData[input.name] = itemData
} else {
decodedData[input.name] = result[i]
}
const value = result[i]
decodedData[input.name] = parseOne(input, value)
}
return decodedData
}

13
test/number.util.test.ts Normal file
View File

@ -0,0 +1,13 @@
import { describe, expect } from '@jest/globals'
import { convert } from '../src/utils/number.util'
describe('Number Utils Tests', () => {
it('should return true for voucher code', async () => {
let alphabet = '3fBCM8j17XNA9xYun4wmLWep2oHFlhPcgyEJskqOz6GK0UtV5ZRaDSvrTbidQI'
let id1 = '95c9a166b7bd65'
let val1 = convert({ numStr: id1, base: 16, to: 52, alphabet })
let id2 = '95c9a166b7bd66'
let val2 = convert({ numStr: id2, base: 16, to: 52, alphabet })
// expect(result).toBe(true)
})
})

1871
yarn.lock

File diff suppressed because it is too large Load Diff