From 561dbe5d942eb396dbf44f78f08e929c9a7e9d97 Mon Sep 17 00:00:00 2001 From: Satan-web3 Date: Tue, 8 Oct 2024 14:07:29 +0800 Subject: [PATCH 01/18] feat: add function DTriggerSmartContract --- src/utils/transaction.ts | 21 +++++++- test/utils/transaction.test.ts | 97 ++++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 test/utils/transaction.test.ts diff --git a/src/utils/transaction.ts b/src/utils/transaction.ts index 473b17ce..62207ce3 100644 --- a/src/utils/transaction.ts +++ b/src/utils/transaction.ts @@ -52,6 +52,7 @@ const { ExchangeCreateContract, ExchangeInjectContract, ExchangeWithdrawContract globalThis.TronWebProto; import { byteArray2hexStr } from './bytes.js'; +import { hexStr2byteArray } from './code.js'; import { sha256, keccak256 } from './ethersUtils.js'; import TronWeb from '../tronweb.js'; import { isHex } from './validations.js'; @@ -988,4 +989,22 @@ const txPbToTxID = (transactionPb) => { return txID; }; -export { txJsonToPb, txPbToTxID, txPbToRawDataHex, txJsonToPbWithArgs, txCheckWithArgs, txCheck }; +const getValueFromRawDataHex = (rawDataHex: string): Uint8Array => { + const pb = Transaction.raw.deserializeBinary(hexStr2byteArray(rawDataHex)); + return pb.getContractList()[0].getParameter().getValue(); +}; + +const DTriggerSmartContract = (rawDataHex: string) => { + const value = getValueFromRawDataHex(rawDataHex); + const triggerSmartContract = TriggerSmartContract.deserializeBinary(value); + return { + owner_address: byteArray2hexStr(triggerSmartContract.getOwnerAddress_asU8()), + contract_address: byteArray2hexStr(triggerSmartContract.getContractAddress_asU8()), + call_value: triggerSmartContract.getCallValue(), + data: byteArray2hexStr(triggerSmartContract.getData_asU8()), + call_token_value: triggerSmartContract.getCallTokenValue(), + token_id: triggerSmartContract.getTokenId(), + }; +}; + +export { txJsonToPb, txPbToTxID, txPbToRawDataHex, txJsonToPbWithArgs, txCheckWithArgs, txCheck, DTriggerSmartContract }; diff --git a/test/utils/transaction.test.ts b/test/utils/transaction.test.ts new file mode 100644 index 00000000..9c0bc504 --- /dev/null +++ b/test/utils/transaction.test.ts @@ -0,0 +1,97 @@ +import { assert } from 'chai'; +import { TronWeb, utils, TransactionBuilder } from '../setup/TronWeb.js'; +import tronWebBuilder from '../helpers/tronWebBuilder.js'; +// @ts-ignore +import { decodeRlp } from 'ethers/utils'; + +describe.only('#TronWeb.utils.transaction', function() { + let tronWeb: TronWeb; + + describe('DTriggerSmartContract', async () => { + let tx: Awaited>['transaction']; + let account: Awaited>; + let account2: Awaited>; + const contractAddress = 'TU1ntBzpGPp7GJkzxLTKwYsneJ9JKUmBCK'; // nile usdt address + before(async () => { + tronWeb = tronWebBuilder.createInstance(); + account = await tronWeb.createAccount(); + account2 = await tronWeb.createAccount(); + tx = (await tronWeb.transactionBuilder.triggerSmartContract( + contractAddress, + 'transfer(address,uint256)', + { + txLocal: true, + tokenId: '1000008', + tokenValue: 100, + }, + [ + { type: "address", value: account2.address.base58 }, + { type: "uint256", value: 100000000 } + ], + account.address.base58, + )).transaction; + }); + it('should deserialize the right result', async () => { + const dResult = utils.transaction.DTriggerSmartContract(tx.raw_data_hex); + assert.equal(dResult.owner_address, account.address.hex); + assert.equal(dResult.contract_address, utils.address.toHex(contractAddress).toUpperCase()); + assert.equal(dResult.call_value, 0); + assert.equal(dResult.call_token_value, 100); + assert.equal(dResult.token_id, '1000008'); + + const getFunctionSelectorHex = (functionSelector: string) => { + return utils.ethersUtils.keccak256(Buffer.from(functionSelector, 'utf-8')).toString().substring(2, 10); + }; + + const encodeParameters = (parameters: { type: string; value: unknown }[]) => { + const abiCoder = new utils.ethersUtils.AbiCoder(); + let types: string[] = []; + const values: any[] = []; + + for (let i = 0; i < parameters.length; i++) { + let { value } = parameters[i]; + const { type } = parameters[i]; + const replaceAddressPrefix = (value: unknown): any => { + if (Array.isArray(value)) { + return value.map((v) => replaceAddressPrefix(v)); + } + return utils.address.toHex(value as string).replace('41', '0x'); + }; + if (type === 'address') value = replaceAddressPrefix(value); + else if (type.match(/^([^\x5b]*)(\x5b|$)/)?.[0] === 'address[') value = replaceAddressPrefix(value); + + types.push(type); + values.push(value); + } + + types = types.map((type) => { + if (/trcToken/.test(type)) { + type = type.replace(/trcToken/, 'uint256'); + } + return type; + }); + + return abiCoder.encode(types, values).replace(/^(0x)/, ''); + }; + + const getData = (functionSelector: string, parameters: { type: string; value: unknown }[]) => { + return getFunctionSelectorHex(functionSelector) + encodeParameters(parameters); + }; + assert.equal(dResult.data, getData( + 'transfer(address,uint256)', + [ + { type: "address", value: account2.address.base58 }, + { type: "uint256", value: 100000000 } + ] + ).toUpperCase()); + const abiCoder = new utils.ethersUtils.AbiCoder(); + const functionSelector = getFunctionSelectorHex('transfer(address,uint256)'); + const data = abiCoder.decode(['address', 'uint256'], '0x' + dResult.data.slice(8)); + const address = tronWeb.address.fromHex(data[0].replace('0x', '41')); + const amount = data[1]; + assert.equal(functionSelector, dResult.data.slice(0, 8).toLowerCase()); + assert.equal(address, account2.address.base58); + assert.equal(amount, 100000000); + }); + }); +}) \ No newline at end of file From 5562c0f60f64468df4da6e153c9b557a5c90bc54 Mon Sep 17 00:00:00 2001 From: Satan-web3 Date: Tue, 8 Oct 2024 14:08:14 +0800 Subject: [PATCH 02/18] chore: change version --- package.json | 2 +- src/tronweb.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 7563f945..2ce865be 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tronweb", - "version": "6.0.0", + "version": "6.0.1", "description": "JavaScript SDK that encapsulates the TRON HTTP API", "main": "./lib/commonjs/index.js", "module": "./lib/esm/index.js", diff --git a/src/tronweb.ts b/src/tronweb.ts index 3041d7b2..e6c3e1fd 100644 --- a/src/tronweb.ts +++ b/src/tronweb.ts @@ -22,7 +22,7 @@ const DEFAULT_VERSION = '4.7.1'; const FEE_LIMIT = 150000000; -const version = '6.0.0'; +const version = '6.0.1'; function isValidOptions(options: unknown): options is TronWebOptions { return ( From e9caad004bccb0182cc49b3ea635ec983ae8df90 Mon Sep 17 00:00:00 2001 From: Satan-web3 Date: Tue, 15 Oct 2024 17:30:34 +0800 Subject: [PATCH 03/18] feat: deserialize all data in raw_data_hex --- package-lock.json | 4 ++-- src/utils/transaction.ts | 35 +++++++++++++++++++++++++++++----- test/utils/transaction.test.ts | 32 ++++++++++++++++++++++--------- 3 files changed, 55 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index ddaa312b..74a6a20b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "tronweb", - "version": "6.0.0", + "version": "6.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "tronweb", - "version": "6.0.0", + "version": "6.0.1", "license": "MIT", "dependencies": { "@babel/runtime": "^7.0.0", diff --git a/src/utils/transaction.ts b/src/utils/transaction.ts index 62207ce3..34f53708 100644 --- a/src/utils/transaction.ts +++ b/src/utils/transaction.ts @@ -989,15 +989,39 @@ const txPbToTxID = (transactionPb) => { return txID; }; -const getValueFromRawDataHex = (rawDataHex: string): Uint8Array => { + + +const DCommonData = (rawDataHex: string) => { const pb = Transaction.raw.deserializeBinary(hexStr2byteArray(rawDataHex)); - return pb.getContractList()[0].getParameter().getValue(); + const contract = pb.getContractList()[0]; + const valuePb = contract.getParameter().getValue(); + return [ + { + contract: [ + { + parameter: { + value: {}, + type_url: contract.getParameter().getTypeUrl(), + }, + type: contract.getType(), + Permission_id: contract.getPermissionId(), + }, + ], + data: pb.getData(), + fee_limit: pb.getFeeLimit(), + ref_block_bytes: byteArray2hexStr(pb.getRefBlockBytes_asU8()), + ref_block_hash: byteArray2hexStr(pb.getRefBlockHash_asU8()), + expiration: pb.getExpiration(), + timestamp: pb.getTimestamp(), + }, + valuePb, + ]; }; const DTriggerSmartContract = (rawDataHex: string) => { - const value = getValueFromRawDataHex(rawDataHex); - const triggerSmartContract = TriggerSmartContract.deserializeBinary(value); - return { + const [commonData, valuePb] = DCommonData(rawDataHex); + const triggerSmartContract = TriggerSmartContract.deserializeBinary(valuePb); + commonData.contract[0].parameter.value = { owner_address: byteArray2hexStr(triggerSmartContract.getOwnerAddress_asU8()), contract_address: byteArray2hexStr(triggerSmartContract.getContractAddress_asU8()), call_value: triggerSmartContract.getCallValue(), @@ -1005,6 +1029,7 @@ const DTriggerSmartContract = (rawDataHex: string) => { call_token_value: triggerSmartContract.getCallTokenValue(), token_id: triggerSmartContract.getTokenId(), }; + return commonData; }; export { txJsonToPb, txPbToTxID, txPbToRawDataHex, txJsonToPbWithArgs, txCheckWithArgs, txCheck, DTriggerSmartContract }; diff --git a/test/utils/transaction.test.ts b/test/utils/transaction.test.ts index 9c0bc504..d93ef682 100644 --- a/test/utils/transaction.test.ts +++ b/test/utils/transaction.test.ts @@ -4,7 +4,7 @@ import tronWebBuilder from '../helpers/tronWebBuilder.js'; // @ts-ignore import { decodeRlp } from 'ethers/utils'; -describe.only('#TronWeb.utils.transaction', function() { +describe('#TronWeb.utils.transaction', function() { let tronWeb: TronWeb; describe('DTriggerSmartContract', async () => { @@ -23,6 +23,7 @@ describe.only('#TronWeb.utils.transaction', function() { txLocal: true, tokenId: '1000008', tokenValue: 100, + feeLimit: 100 * (10 ** 6), }, [ { type: "address", value: account2.address.base58 }, @@ -33,11 +34,12 @@ describe.only('#TronWeb.utils.transaction', function() { }); it('should deserialize the right result', async () => { const dResult = utils.transaction.DTriggerSmartContract(tx.raw_data_hex); - assert.equal(dResult.owner_address, account.address.hex); - assert.equal(dResult.contract_address, utils.address.toHex(contractAddress).toUpperCase()); - assert.equal(dResult.call_value, 0); - assert.equal(dResult.call_token_value, 100); - assert.equal(dResult.token_id, '1000008'); + const value = dResult.contract[0].parameter.value; + assert.equal(value.owner_address, account.address.hex); + assert.equal(value.contract_address, utils.address.toHex(contractAddress).toUpperCase()); + assert.equal(value.call_value, 0); + assert.equal(value.call_token_value, 100); + assert.equal(value.token_id, '1000008'); const getFunctionSelectorHex = (functionSelector: string) => { return utils.ethersUtils.keccak256(Buffer.from(functionSelector, 'utf-8')).toString().substring(2, 10); @@ -77,7 +79,7 @@ describe.only('#TronWeb.utils.transaction', function() { const getData = (functionSelector: string, parameters: { type: string; value: unknown }[]) => { return getFunctionSelectorHex(functionSelector) + encodeParameters(parameters); }; - assert.equal(dResult.data, getData( + assert.equal(value.data, getData( 'transfer(address,uint256)', [ { type: "address", value: account2.address.base58 }, @@ -86,12 +88,24 @@ describe.only('#TronWeb.utils.transaction', function() { ).toUpperCase()); const abiCoder = new utils.ethersUtils.AbiCoder(); const functionSelector = getFunctionSelectorHex('transfer(address,uint256)'); - const data = abiCoder.decode(['address', 'uint256'], '0x' + dResult.data.slice(8)); + const data = abiCoder.decode(['address', 'uint256'], '0x' + value.data.slice(8)); const address = tronWeb.address.fromHex(data[0].replace('0x', '41')); const amount = data[1]; - assert.equal(functionSelector, dResult.data.slice(0, 8).toLowerCase()); + assert.equal(functionSelector, value.data.slice(0, 8).toLowerCase()); assert.equal(address, account2.address.base58); assert.equal(amount, 100000000); + + assert.equal(dResult.contract[0].Permission_id, 0); + assert.equal(dResult.contract[0].parameter.type_url, tx.raw_data.contract[0].parameter.type_url); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + assert.equal(dResult.contract[0].type, TronWebProto.Transaction.Contract.ContractType.TRIGGERSMARTCONTRACT); + assert.equal(dResult.expiration, tx.raw_data.expiration); + assert.equal(dResult.timestamp, tx.raw_data.timestamp); + assert.equal(dResult.ref_block_bytes.toLowerCase(), tx.raw_data.ref_block_bytes); + assert.equal(dResult.ref_block_hash.toLowerCase(), tx.raw_data.ref_block_hash); + assert.equal(dResult.data, tx.raw_data.data || ''); + assert.equal(dResult.fee_limit, tx.raw_data.fee_limit); }); }); }) \ No newline at end of file From d2336d14f63251810db8629e4ab6b2b3f0dfd832 Mon Sep 17 00:00:00 2001 From: Satan-web3 Date: Wed, 16 Oct 2024 12:30:22 +0800 Subject: [PATCH 04/18] fix: data should be translated to hex --- src/utils/transaction.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/transaction.ts b/src/utils/transaction.ts index 34f53708..ff259a04 100644 --- a/src/utils/transaction.ts +++ b/src/utils/transaction.ts @@ -1007,7 +1007,7 @@ const DCommonData = (rawDataHex: string) => { Permission_id: contract.getPermissionId(), }, ], - data: pb.getData(), + data: byteArray2hexStr(pb.getData()), fee_limit: pb.getFeeLimit(), ref_block_bytes: byteArray2hexStr(pb.getRefBlockBytes_asU8()), ref_block_hash: byteArray2hexStr(pb.getRefBlockHash_asU8()), From 31ef50a111a4da396c3d1631c1005a6d24adc7cc Mon Sep 17 00:00:00 2001 From: Satan-web3 Date: Wed, 16 Oct 2024 12:34:08 +0800 Subject: [PATCH 05/18] chore: address all audit issue --- package-lock.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 74a6a20b..6adb0fc8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3902,9 +3902,9 @@ "dev": true }, "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "dev": true, "engines": { "node": ">= 0.6" @@ -4366,9 +4366,9 @@ } }, "node_modules/engine.io": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", - "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", + "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", "dev": true, "dependencies": { "@types/cookie": "^0.4.1", @@ -4376,7 +4376,7 @@ "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", @@ -4387,9 +4387,9 @@ } }, "node_modules/engine.io-parser": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", - "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", "dev": true, "engines": { "node": ">=10.0.0" @@ -9129,16 +9129,16 @@ } }, "node_modules/socket.io": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", - "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz", + "integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==", "dev": true, "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.5.2", + "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" }, From a69274b71df97c414bc3b9be6906cfcf8ff20cf6 Mon Sep 17 00:00:00 2001 From: Satan-web3 Date: Fri, 25 Oct 2024 11:05:12 +0800 Subject: [PATCH 06/18] feat: change migration guide url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 02b6a458..05118114 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,7 @@ First of all, in your typescript file, define TronWeb: import { TronWeb, utils as TronWebUtils, Trx, TransactionBuilder, Contract, Event, Plugin } from 'tronweb'; ``` -Please note that this is not the same as v5.x. If you want to dive into more differences, check out [migration guide](https://tronweb.network/docu/docs/6.0.0/Migrating%20from%20v5) +Please note that this is not the same as v5.x. If you want to dive into more differences, check out [migration guide](https://tronweb.network/docu/docs/Migrating%20from%20v5) When you instantiate TronWeb you can define From 41de83f0849a0cfe7c97885dcf52b2a736db439c Mon Sep 17 00:00:00 2001 From: Satan-web3 Date: Tue, 5 Nov 2024 14:42:32 +0800 Subject: [PATCH 07/18] doc: update change log --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf732e05..7411ccf5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ Change Log ========= +__6.0.1__ +- Support deserialize TriggerSmartContract transaction by raw_data_hex. + __6.0.0__ - Fix [issue543](https://github.com/tronprotocol/tronweb/issues/543), replace type AxiosHeaders with InstanceType. - Add type for value field in the return of the creation by TransactionBuilder methods. From 18ed2d47899cdb6987b88a38201c4564648347e3 Mon Sep 17 00:00:00 2001 From: Satan-web3 Date: Tue, 19 Nov 2024 09:46:24 +0800 Subject: [PATCH 08/18] doc: add faq in readme --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index 05118114..be02612a 100644 --- a/README.md +++ b/README.md @@ -170,6 +170,20 @@ const tronWeb = new TronWeb({ ) ``` +## FAQ + +1. Cannot destructure property 'Transaction' of 'globalThis.TronWebProto' as it is undefined. + +This is a problem caused by webpack as it doesn't load cjs file correctly. To solve this problem, you need to add a new rule like below: +``` +{ + test: /\.cjs$/, + type: 'javascript/auto' +} +``` + +For more questions, please refer to [TronWeb Doc](https://tronweb.network/docu/docs/Migrating%20from%20v5#faq). + ## Integrity Check The package files will be signed using a GPG key pair, and the correctness of the signature will be verified using the following public key: From e27f89d8f8ccbd1579fa3a70da9e05695ea099a0 Mon Sep 17 00:00:00 2001 From: Satan-web3 Date: Fri, 22 Nov 2024 15:16:26 +0800 Subject: [PATCH 09/18] chore: address audit issue --- package-lock.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6adb0fc8..ccb714f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3981,9 +3981,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "dependencies": { "path-key": "^3.1.0", @@ -4710,7 +4710,7 @@ "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", @@ -10204,7 +10204,7 @@ "@webpack-cli/serve": "^2.0.5", "colorette": "^2.0.14", "commander": "^10.0.1", - "cross-spawn": "^7.0.3", + "cross-spawn": "^7.0.6", "envinfo": "^7.7.3", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", From aeac15472077d04c1cc48be4dbf74b04d7244214 Mon Sep 17 00:00:00 2001 From: Satan-web3 Date: Wed, 27 Nov 2024 17:20:59 +0800 Subject: [PATCH 10/18] chore: update ethers --- package-lock.json | 32 ++++++++++++++++++++------------ package.json | 2 +- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index ccb714f6..78800fe1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "axios": "^1.7.4", "bignumber.js": "^9.0.1", "ethereum-cryptography": "^2.1.3", - "ethers": "^6.13.1", + "ethers": "^6.13.4", "eventemitter3": "^3.1.0", "semver": "^5.6.0", "validator": "^13.7.0" @@ -5227,9 +5227,9 @@ } }, "node_modules/ethers": { - "version": "6.13.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.1.tgz", - "integrity": "sha512-hdJ2HOxg/xx97Lm9HdCWk949BfYqYWpyw4//78SiwOLgASyfrNszfMUNB2joKjvGUdwhHfaiMMFFwacVVoLR9A==", + "version": "6.13.4", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.4.tgz", + "integrity": "sha512-21YtnZVg4/zKkCQPjrDj38B1r4nQvTZLopUGMLQ1ePU2zV/joCfDC3t3iKQjWRzjjjbzR+mdAIoikeBRNkdllA==", "funding": [ { "type": "individual", @@ -5244,9 +5244,9 @@ "@adraffy/ens-normalize": "1.10.1", "@noble/curves": "1.2.0", "@noble/hashes": "1.3.2", - "@types/node": "18.15.13", + "@types/node": "22.7.5", "aes-js": "4.0.0-beta.5", - "tslib": "2.4.0", + "tslib": "2.7.0", "ws": "8.17.1" }, "engines": { @@ -5276,9 +5276,17 @@ } }, "node_modules/ethers/node_modules/@types/node": { - "version": "18.15.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", - "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/ethers/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" }, "node_modules/eventemitter3": { "version": "3.1.2", @@ -9742,9 +9750,9 @@ } }, "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" }, "node_modules/tsutils": { "version": "3.21.0", diff --git a/package.json b/package.json index 2ce865be..409e34fc 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "axios": "^1.7.4", "bignumber.js": "^9.0.1", "ethereum-cryptography": "^2.1.3", - "ethers": "^6.13.1", + "ethers": "^6.13.4", "eventemitter3": "^3.1.0", "semver": "^5.6.0", "validator": "^13.7.0" From ef8ba86253c04b878079021f117bd54e37cedb71 Mon Sep 17 00:00:00 2001 From: Satan-web3 Date: Wed, 25 Dec 2024 14:24:50 +0800 Subject: [PATCH 11/18] feat: replace @tronweb3/google-protobuf to google-protobuf --- package-lock.json | 12 ++++++------ package.json | 2 +- src/protocol/core/Tron_pb.cjs | 4 ++-- src/protocol/core/contract/account_contract_pb.cjs | 2 +- .../core/contract/asset_issue_contract_pb.cjs | 2 +- src/protocol/core/contract/balance_contract_pb.cjs | 2 +- src/protocol/core/contract/common_pb.cjs | 2 +- src/protocol/core/contract/exchange_contract_pb.cjs | 2 +- src/protocol/core/contract/proposal_contract_pb.cjs | 2 +- src/protocol/core/contract/smart_contract_pb.cjs | 2 +- src/protocol/core/contract/storage_contract_pb.cjs | 2 +- .../core/contract/vote_asset_contract_pb.cjs | 2 +- src/protocol/core/contract/witness_contract_pb.cjs | 2 +- src/utils/transaction.ts | 2 +- 14 files changed, 20 insertions(+), 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index 78800fe1..572cfe13 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,12 +10,12 @@ "license": "MIT", "dependencies": { "@babel/runtime": "^7.0.0", - "@tronweb3/google-protobuf": "^3.21.2", "axios": "^1.7.4", "bignumber.js": "^9.0.1", "ethereum-cryptography": "^2.1.3", "ethers": "^6.13.4", "eventemitter3": "^3.1.0", + "google-protobuf": "^3.21.4", "semver": "^5.6.0", "validator": "^13.7.0" }, @@ -2353,11 +2353,6 @@ "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", "dev": true }, - "node_modules/@tronweb3/google-protobuf": { - "version": "3.21.2", - "resolved": "https://registry.npmjs.org/@tronweb3/google-protobuf/-/google-protobuf-3.21.2.tgz", - "integrity": "sha512-IVcT2GfWX3K6tHUVhs14NP5uzKhQt4KeDya1g9ACxuZsUzsaoGUIGzceK2Ltu7xp1YV94AaHOf4yxLAivlvEkQ==" - }, "node_modules/@types/chai": { "version": "4.3.16", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.16.tgz", @@ -5891,6 +5886,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/google-protobuf": { + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.4.tgz", + "integrity": "sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==" + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", diff --git a/package.json b/package.json index 409e34fc..e2e1fbe3 100644 --- a/package.json +++ b/package.json @@ -58,12 +58,12 @@ }, "dependencies": { "@babel/runtime": "^7.0.0", - "@tronweb3/google-protobuf": "^3.21.2", "axios": "^1.7.4", "bignumber.js": "^9.0.1", "ethereum-cryptography": "^2.1.3", "ethers": "^6.13.4", "eventemitter3": "^3.1.0", + "google-protobuf": "^3.21.4", "semver": "^5.6.0", "validator": "^13.7.0" }, diff --git a/src/protocol/core/Tron_pb.cjs b/src/protocol/core/Tron_pb.cjs index dd41ce11..49322fae 100644 --- a/src/protocol/core/Tron_pb.cjs +++ b/src/protocol/core/Tron_pb.cjs @@ -11,7 +11,7 @@ /* eslint-disable */ // @ts-nocheck -var jspb = require('@tronweb3/google-protobuf'); +var jspb = require('google-protobuf'); var goog = jspb; var global = (typeof globalThis !== 'undefined' && globalThis) || @@ -21,7 +21,7 @@ var global = (function () { return this; }).call(null) || Function('return this')(); -var google_protobuf_any_pb = require('@tronweb3/google-protobuf/google/protobuf/any_pb.js'); +var google_protobuf_any_pb = require('google-protobuf/google/protobuf/any_pb.js'); goog.object.extend(proto, google_protobuf_any_pb); goog.exportSymbol('TronWebProto.Account', null, global); goog.exportSymbol('TronWebProto.Account.AccountResource', null, global); diff --git a/src/protocol/core/contract/account_contract_pb.cjs b/src/protocol/core/contract/account_contract_pb.cjs index dd17a908..f53a73a4 100644 --- a/src/protocol/core/contract/account_contract_pb.cjs +++ b/src/protocol/core/contract/account_contract_pb.cjs @@ -11,7 +11,7 @@ /* eslint-disable */ // @ts-nocheck -var jspb = require('@tronweb3/google-protobuf'); +var jspb = require('google-protobuf'); var goog = jspb; var global = (typeof globalThis !== 'undefined' && globalThis) || diff --git a/src/protocol/core/contract/asset_issue_contract_pb.cjs b/src/protocol/core/contract/asset_issue_contract_pb.cjs index 37a748a2..38406949 100644 --- a/src/protocol/core/contract/asset_issue_contract_pb.cjs +++ b/src/protocol/core/contract/asset_issue_contract_pb.cjs @@ -11,7 +11,7 @@ /* eslint-disable */ // @ts-nocheck -var jspb = require('@tronweb3/google-protobuf'); +var jspb = require('google-protobuf'); var goog = jspb; var global = (typeof globalThis !== 'undefined' && globalThis) || diff --git a/src/protocol/core/contract/balance_contract_pb.cjs b/src/protocol/core/contract/balance_contract_pb.cjs index 8bf100bf..c7980a57 100644 --- a/src/protocol/core/contract/balance_contract_pb.cjs +++ b/src/protocol/core/contract/balance_contract_pb.cjs @@ -11,7 +11,7 @@ /* eslint-disable */ // @ts-nocheck -var jspb = require('@tronweb3/google-protobuf'); +var jspb = require('google-protobuf'); var goog = jspb; var global = (typeof globalThis !== 'undefined' && globalThis) || diff --git a/src/protocol/core/contract/common_pb.cjs b/src/protocol/core/contract/common_pb.cjs index dafdf355..fc225416 100644 --- a/src/protocol/core/contract/common_pb.cjs +++ b/src/protocol/core/contract/common_pb.cjs @@ -11,7 +11,7 @@ /* eslint-disable */ // @ts-nocheck -var jspb = require('@tronweb3/google-protobuf'); +var jspb = require('google-protobuf'); var goog = jspb; var global = (typeof globalThis !== 'undefined' && globalThis) || diff --git a/src/protocol/core/contract/exchange_contract_pb.cjs b/src/protocol/core/contract/exchange_contract_pb.cjs index 909dd355..d3c5d23b 100644 --- a/src/protocol/core/contract/exchange_contract_pb.cjs +++ b/src/protocol/core/contract/exchange_contract_pb.cjs @@ -11,7 +11,7 @@ /* eslint-disable */ // @ts-nocheck -var jspb = require('@tronweb3/google-protobuf'); +var jspb = require('google-protobuf'); var goog = jspb; var global = (typeof globalThis !== 'undefined' && globalThis) || diff --git a/src/protocol/core/contract/proposal_contract_pb.cjs b/src/protocol/core/contract/proposal_contract_pb.cjs index 9bd5c8ba..7b0f0138 100644 --- a/src/protocol/core/contract/proposal_contract_pb.cjs +++ b/src/protocol/core/contract/proposal_contract_pb.cjs @@ -11,7 +11,7 @@ /* eslint-disable */ // @ts-nocheck -var jspb = require('@tronweb3/google-protobuf'); +var jspb = require('google-protobuf'); var goog = jspb; var global = (typeof globalThis !== 'undefined' && globalThis) || diff --git a/src/protocol/core/contract/smart_contract_pb.cjs b/src/protocol/core/contract/smart_contract_pb.cjs index 8c5998d2..feaee8c2 100644 --- a/src/protocol/core/contract/smart_contract_pb.cjs +++ b/src/protocol/core/contract/smart_contract_pb.cjs @@ -11,7 +11,7 @@ /* eslint-disable */ // @ts-nocheck -var jspb = require('@tronweb3/google-protobuf'); +var jspb = require('google-protobuf'); var goog = jspb; var global = (typeof globalThis !== 'undefined' && globalThis) || diff --git a/src/protocol/core/contract/storage_contract_pb.cjs b/src/protocol/core/contract/storage_contract_pb.cjs index cb6361c7..a13bd840 100644 --- a/src/protocol/core/contract/storage_contract_pb.cjs +++ b/src/protocol/core/contract/storage_contract_pb.cjs @@ -11,7 +11,7 @@ /* eslint-disable */ // @ts-nocheck -var jspb = require('@tronweb3/google-protobuf'); +var jspb = require('google-protobuf'); var goog = jspb; var global = (typeof globalThis !== 'undefined' && globalThis) || diff --git a/src/protocol/core/contract/vote_asset_contract_pb.cjs b/src/protocol/core/contract/vote_asset_contract_pb.cjs index 8b120131..1fbeb6df 100644 --- a/src/protocol/core/contract/vote_asset_contract_pb.cjs +++ b/src/protocol/core/contract/vote_asset_contract_pb.cjs @@ -11,7 +11,7 @@ /* eslint-disable */ // @ts-nocheck -var jspb = require('@tronweb3/google-protobuf'); +var jspb = require('google-protobuf'); var goog = jspb; var global = (typeof globalThis !== 'undefined' && globalThis) || diff --git a/src/protocol/core/contract/witness_contract_pb.cjs b/src/protocol/core/contract/witness_contract_pb.cjs index 92489453..66e511f5 100644 --- a/src/protocol/core/contract/witness_contract_pb.cjs +++ b/src/protocol/core/contract/witness_contract_pb.cjs @@ -11,7 +11,7 @@ /* eslint-disable */ // @ts-nocheck -var jspb = require('@tronweb3/google-protobuf'); +var jspb = require('google-protobuf'); var goog = jspb; var global = (typeof globalThis !== 'undefined' && globalThis) || diff --git a/src/utils/transaction.ts b/src/utils/transaction.ts index ff259a04..9dad6218 100644 --- a/src/utils/transaction.ts +++ b/src/utils/transaction.ts @@ -1,6 +1,6 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-nocheck -import google_protobuf_any_pb from '@tronweb3/google-protobuf/google/protobuf/any_pb.js'; +import google_protobuf_any_pb from 'google-protobuf/google/protobuf/any_pb.js'; import '../protocol/core/Tron_pb.cjs'; const { Transaction, Permission, Key } = globalThis.TronWebProto; From f66a8c575138f45b655d7fc847771cfd79037e9e Mon Sep 17 00:00:00 2001 From: Satan-web3 Date: Fri, 27 Dec 2024 11:57:55 +0800 Subject: [PATCH 12/18] fix: fix type error --- src/lib/trx.ts | 20 ++++++++++---------- src/types/APIResponse.ts | 4 ++-- src/types/Trx.ts | 1 + 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/lib/trx.ts b/src/lib/trx.ts index e3bee6bb..a8fe9503 100644 --- a/src/lib/trx.ts +++ b/src/lib/trx.ts @@ -145,7 +145,7 @@ export class Trx { async getTransactionFromBlock( block: 'earliest' | 'latest' | number | string | false = this.tronWeb.defaultBlock, index: number - ): Promise { + ): Promise { const { transactions } = await this.getBlock(block); if (!transactions) { throw new Error('Transaction not found in block'); @@ -156,7 +156,7 @@ export class Trx { async getTransactionsFromBlock( block: 'earliest' | 'latest' | number | string | false = this.tronWeb.defaultBlock - ): Promise { + ): Promise { const { transactions } = await this.getBlock(block); if (!transactions) { throw new Error('Transaction not found in block'); @@ -164,8 +164,8 @@ export class Trx { return transactions; } - async getTransaction(transactionID: string): Promise { - const transaction = await this.tronWeb.fullNode.request( + async getTransaction(transactionID: string): Promise { + const transaction = await this.tronWeb.fullNode.request( 'wallet/gettransactionbyid', { value: transactionID, @@ -178,8 +178,8 @@ export class Trx { return transaction; } - async getConfirmedTransaction(transactionID: string): Promise { - const transaction = await this.tronWeb.solidityNode.request( + async getConfirmedTransaction(transactionID: string): Promise { + const transaction = await this.tronWeb.solidityNode.request( 'walletsolidity/gettransactionbyid', { value: transactionID, @@ -200,11 +200,11 @@ export class Trx { return this.tronWeb.solidityNode.request('walletsolidity/gettransactioninfobyid', { value: transactionID }, 'post'); } - getTransactionsToAddress(address = this.tronWeb.defaultAddress.hex, limit = 30, offset = 0): Promise { + getTransactionsToAddress(address = this.tronWeb.defaultAddress.hex, limit = 30, offset = 0): Promise { return this.getTransactionsRelated(this.tronWeb.address.toHex(address as string), 'to', limit, offset); } - getTransactionsFromAddress(address = this.tronWeb.defaultAddress.hex, limit = 30, offset = 0): Promise { + getTransactionsFromAddress(address = this.tronWeb.defaultAddress.hex, limit = 30, offset = 0): Promise { return this.getTransactionsRelated(this.tronWeb.address.toHex(address as string), 'from', limit, offset); } @@ -213,7 +213,7 @@ export class Trx { direction = 'all', limit = 30, offset = 0 - ): Promise { + ): Promise { if (!['to', 'from', 'all'].includes(direction)) { throw new Error('Invalid direction provided: Expected "to", "from" or "all"'); } @@ -247,7 +247,7 @@ export class Trx { address = this.tronWeb.address.toHex(address as string); return this.tronWeb.solidityNode - .request<{ transaction: Transaction[] }>( + .request<{ transaction: SignedTransaction[] }>( `walletextension/gettransactions${direction}this`, { account: { diff --git a/src/types/APIResponse.ts b/src/types/APIResponse.ts index a4e6e244..11d28544 100644 --- a/src/types/APIResponse.ts +++ b/src/types/APIResponse.ts @@ -1,5 +1,5 @@ import { Permission } from './Contract.js'; -import { Transaction, TransactionWrapper } from './Transaction.js'; +import { SignedTransaction, TransactionWrapper } from './Transaction.js'; export interface BlockHeaderRawData { number: number; @@ -21,7 +21,7 @@ export interface BlockWithoutDetail { export interface Block { blockID: string; /** If a block has 0 transaction, this prop will be undefined */ - transactions?: Transaction[]; + transactions?: SignedTransaction[]; block_header: BlockHeader; } diff --git a/src/types/Trx.ts b/src/types/Trx.ts index 15ec05cb..1a28be33 100644 --- a/src/types/Trx.ts +++ b/src/types/Trx.ts @@ -181,6 +181,7 @@ enum BroadcastReturn_response_code { export interface BroadcastReturn { result: boolean; + txid: string; code: BroadcastReturn_response_code; message: string; transaction: T; From 6034b7fd8a8cd7fafd3f7b24788779e9f8b81fdc Mon Sep 17 00:00:00 2001 From: Satan-web3 Date: Mon, 6 Jan 2025 11:46:15 +0800 Subject: [PATCH 13/18] fix: change GetTransactionResponse type --- src/lib/trx.ts | 22 +++++++++++----------- src/types/APIResponse.ts | 11 ++++++++++- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/lib/trx.ts b/src/lib/trx.ts index a8fe9503..386fd458 100644 --- a/src/lib/trx.ts +++ b/src/lib/trx.ts @@ -5,7 +5,7 @@ import { ADDRESS_PREFIX } from '../utils/address.js'; import { Validator } from '../paramValidator/index.js'; import { txCheck } from '../utils/transaction.js'; import { ecRecover } from '../utils/crypto.js'; -import { Block } from '../types/APIResponse.js'; +import { Block, GetTransactionResponse } from '../types/APIResponse.js'; import { Token, Account, @@ -145,7 +145,7 @@ export class Trx { async getTransactionFromBlock( block: 'earliest' | 'latest' | number | string | false = this.tronWeb.defaultBlock, index: number - ): Promise { + ): Promise { const { transactions } = await this.getBlock(block); if (!transactions) { throw new Error('Transaction not found in block'); @@ -156,7 +156,7 @@ export class Trx { async getTransactionsFromBlock( block: 'earliest' | 'latest' | number | string | false = this.tronWeb.defaultBlock - ): Promise { + ): Promise { const { transactions } = await this.getBlock(block); if (!transactions) { throw new Error('Transaction not found in block'); @@ -164,8 +164,8 @@ export class Trx { return transactions; } - async getTransaction(transactionID: string): Promise { - const transaction = await this.tronWeb.fullNode.request( + async getTransaction(transactionID: string): Promise { + const transaction = await this.tronWeb.fullNode.request( 'wallet/gettransactionbyid', { value: transactionID, @@ -178,8 +178,8 @@ export class Trx { return transaction; } - async getConfirmedTransaction(transactionID: string): Promise { - const transaction = await this.tronWeb.solidityNode.request( + async getConfirmedTransaction(transactionID: string): Promise { + const transaction = await this.tronWeb.solidityNode.request( 'walletsolidity/gettransactionbyid', { value: transactionID, @@ -200,11 +200,11 @@ export class Trx { return this.tronWeb.solidityNode.request('walletsolidity/gettransactioninfobyid', { value: transactionID }, 'post'); } - getTransactionsToAddress(address = this.tronWeb.defaultAddress.hex, limit = 30, offset = 0): Promise { + getTransactionsToAddress(address = this.tronWeb.defaultAddress.hex, limit = 30, offset = 0): Promise { return this.getTransactionsRelated(this.tronWeb.address.toHex(address as string), 'to', limit, offset); } - getTransactionsFromAddress(address = this.tronWeb.defaultAddress.hex, limit = 30, offset = 0): Promise { + getTransactionsFromAddress(address = this.tronWeb.defaultAddress.hex, limit = 30, offset = 0): Promise { return this.getTransactionsRelated(this.tronWeb.address.toHex(address as string), 'from', limit, offset); } @@ -213,7 +213,7 @@ export class Trx { direction = 'all', limit = 30, offset = 0 - ): Promise { + ): Promise { if (!['to', 'from', 'all'].includes(direction)) { throw new Error('Invalid direction provided: Expected "to", "from" or "all"'); } @@ -247,7 +247,7 @@ export class Trx { address = this.tronWeb.address.toHex(address as string); return this.tronWeb.solidityNode - .request<{ transaction: SignedTransaction[] }>( + .request<{ transaction: GetTransactionResponse[] }>( `walletextension/gettransactions${direction}this`, { account: { diff --git a/src/types/APIResponse.ts b/src/types/APIResponse.ts index 11d28544..b3525474 100644 --- a/src/types/APIResponse.ts +++ b/src/types/APIResponse.ts @@ -18,10 +18,19 @@ export interface BlockWithoutDetail { block_header: BlockHeader; } +export interface GetTransactionResponse extends Omit { + visible?: boolean; + ret: [ + { + contractRet: string; + } + ]; +} + export interface Block { blockID: string; /** If a block has 0 transaction, this prop will be undefined */ - transactions?: SignedTransaction[]; + transactions?: GetTransactionResponse[]; block_header: BlockHeader; } From 64da5a1120bdd8d045c272961b7d8ec5c5056ed2 Mon Sep 17 00:00:00 2001 From: Satan-web3 Date: Mon, 6 Jan 2025 11:50:42 +0800 Subject: [PATCH 14/18] chore: update change log --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7411ccf5..2f435b1b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ Change Log __6.0.1__ - Support deserialize TriggerSmartContract transaction by raw_data_hex. +- Replace `@tronweb3/google-protobuf` with `google-protobuf`. +- Fix transaction return type in `Block` and some get transaction api. __6.0.0__ - Fix [issue543](https://github.com/tronprotocol/tronweb/issues/543), replace type AxiosHeaders with InstanceType. From 38f7c2fba25b2d65176bb7c171c014e9fd44991c Mon Sep 17 00:00:00 2001 From: Satan-web3 Date: Fri, 10 Jan 2025 12:17:02 +0800 Subject: [PATCH 15/18] fix: trx api returned Permission not the same with local Permission --- src/types/APIResponse.ts | 5 ++++- src/types/Trx.ts | 11 ++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/types/APIResponse.ts b/src/types/APIResponse.ts index b3525474..b8736a0f 100644 --- a/src/types/APIResponse.ts +++ b/src/types/APIResponse.ts @@ -1,6 +1,9 @@ import { Permission } from './Contract.js'; import { SignedTransaction, TransactionWrapper } from './Transaction.js'; +export interface APIReturnedPermission extends Omit { + type: string; +} export interface BlockHeaderRawData { number: number; txTrieRoot: string; @@ -35,7 +38,7 @@ export interface Block { } export interface GetSignWeightResponse { - permission: Permission; + permission: APIReturnedPermission; result: { code: string; }; diff --git a/src/types/Trx.ts b/src/types/Trx.ts index 1a28be33..92efddc3 100644 --- a/src/types/Trx.ts +++ b/src/types/Trx.ts @@ -1,6 +1,7 @@ -import { AccountType, Permission } from './Contract.js'; +import { AccountType } from './Contract.js'; import { SignedTransaction, Transaction } from './Transaction.js'; import { Resource } from './TransactionBuilder.js'; +import { APIReturnedPermission } from './APIResponse.js'; type HTTPMap = Record[]; @@ -109,9 +110,9 @@ export interface Account { net_window_optimized: number; account_resource: AccountResource; codeHash: string; - owner_permission: Permission; - witness_permission: Permission; - active_permission: Permission[]; + owner_permission: APIReturnedPermission; + witness_permission: APIReturnedPermission; + active_permission: APIReturnedPermission[]; frozenV2: FreezeV2[]; unfrozenV2: UnFreezeV2[]; delegated_frozenV2_balance_for_bandwidth: number; @@ -156,7 +157,7 @@ interface TransactionSignWeightResult { } export interface TransactionSignWeight { - permission: Permission; + permission: APIReturnedPermission; approved_list: string[]; current_weight: number; result: TransactionSignWeightResult; From 5826f3602c0061f6c6cba4a816de1037294bc3fb Mon Sep 17 00:00:00 2001 From: Satan-web3 Date: Mon, 13 Jan 2025 16:34:49 +0800 Subject: [PATCH 16/18] fix: type is optional in APIReturnedPermission --- src/types/APIResponse.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/types/APIResponse.ts b/src/types/APIResponse.ts index b8736a0f..89308715 100644 --- a/src/types/APIResponse.ts +++ b/src/types/APIResponse.ts @@ -2,7 +2,7 @@ import { Permission } from './Contract.js'; import { SignedTransaction, TransactionWrapper } from './Transaction.js'; export interface APIReturnedPermission extends Omit { - type: string; + type?: string; } export interface BlockHeaderRawData { number: number; From 6c93731ea5ce85b6372baef42aae4ebda32e7ed6 Mon Sep 17 00:00:00 2001 From: Satan-web3 Date: Wed, 15 Jan 2025 11:28:18 +0800 Subject: [PATCH 17/18] fix: fix type error --- src/types/Trx.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/types/Trx.ts b/src/types/Trx.ts index 92efddc3..cb797dda 100644 --- a/src/types/Trx.ts +++ b/src/types/Trx.ts @@ -107,7 +107,7 @@ export interface Account { latest_consume_free_time: number; account_id: string; net_window_size: number; - net_window_optimized: number; + net_window_optimized: boolean; account_resource: AccountResource; codeHash: string; owner_permission: APIReturnedPermission; From 198c30587f6ed1455dbca1f8be1711013d01c45b Mon Sep 17 00:00:00 2001 From: Satan-web3 Date: Thu, 16 Jan 2025 13:24:53 +0800 Subject: [PATCH 18/18] chore: update change log --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f435b1b..96de8c2e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ Change Log __6.0.1__ - Support deserialize TriggerSmartContract transaction by raw_data_hex. - Replace `@tronweb3/google-protobuf` with `google-protobuf`. -- Fix transaction return type in `Block` and some get transaction api. +- Fix some type errors and API return type compatibility issues. __6.0.0__ - Fix [issue543](https://github.com/tronprotocol/tronweb/issues/543), replace type AxiosHeaders with InstanceType.