From b714b151ddd2d01480117f665d856e6b4e43da7a Mon Sep 17 00:00:00 2001 From: tiendn <tiendn@stellalab.com> Date: Thu, 27 Jul 2023 11:36:00 +0700 Subject: [PATCH] fix: decode contructor contract code cor-17 --- package.json | 1 - .../tabs/ContractCodeTab/ContructorArgs.tsx | 33 +++++---- yarn.lock | 69 +------------------ 3 files changed, 24 insertions(+), 79 deletions(-) diff --git a/package.json b/package.json index 0a21cecc..ccc619d4 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,6 @@ "abi-decoder": "^2.4.0", "axios": "^0.27.2", "bignumber.js": "^9.1.0", - "canoe-solidity": "^0.1.0", "chart.js": "^3.9.1", "chartjs-adapter-dayjs": "^1.0.0", "clsx": "^1.2.1", diff --git a/views/accounts/tabs/ContractCodeTab/ContructorArgs.tsx b/views/accounts/tabs/ContractCodeTab/ContructorArgs.tsx index bcac6a89..d7c81092 100644 --- a/views/accounts/tabs/ContractCodeTab/ContructorArgs.tsx +++ b/views/accounts/tabs/ContractCodeTab/ContructorArgs.tsx @@ -1,5 +1,6 @@ -import { decodeConstructorArgs } from 'canoe-solidity' import AutoLanguageView from 'components/CodeView/AutoView' +import { useMemo } from 'react' +import Web3 from 'web3' interface DecodeArgItem { name: string @@ -18,17 +19,25 @@ const getData = (type, data) => { } const ContractConstructorArguments = ({ abi, constructorArgument }: Props) => { - if (!abi || !constructorArgument) return - const decodeArgs = decodeConstructorArgs(JSON.parse(abi), constructorArgument) - const code = ` - ${constructorArgument} - - ${decodeArgs.map( - (d: DecodeArgItem, index: number) => `Arg [${index}] (${d.type}): ${getData(d.type, d.data)} ${ - d.name ? `(${d.name})` : '' - } - ` - )}`.replaceAll(',', '') + const code = useMemo(() => { + const abiJson = JSON.parse(abi) + const contractConstructor = abiJson.find(item => item.type === 'constructor') + const decodeArgsInput = contractConstructor.inputs + const decodeArgsType: string[] = decodeArgsInput.map(item => item.type) + const web3 = new Web3() + const decodeArgs = web3.eth.abi.decodeParameters(decodeArgsType, constructorArgument) + const result = `${constructorArgument} + +${decodeArgsType.map( + (d: string, index: number) => `Arg [${index}] (${d}): ${getData(d, decodeArgs[index])} (${ + decodeArgsInput[index].name + }) +` +)}`.replaceAll(',', '') + return result + }, [abi, constructorArgument]) + + if (!abi || !constructorArgument) return '' return ( <div className="margin-bottom-xl"> <AutoLanguageView code={code} filename="Constructor Arguments" /> diff --git a/yarn.lock b/yarn.lock index 8cdfa866..c27d251f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3117,13 +3117,6 @@ dependencies: "@babel/types" "^7.3.0" -"@types/bn.js@^4.11.3": - version "4.11.6" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" - integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== - dependencies: - "@types/node" "*" - "@types/bn.js@^5.1.0": version "5.1.1" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" @@ -4041,7 +4034,7 @@ bn.js@4.11.6: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== -bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9: +bn.js@^4.11.6, bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== @@ -4295,15 +4288,6 @@ caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001449: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001451.tgz#2e197c698fc1373d63e1406d6607ea4617c613f1" integrity sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w== -canoe-solidity@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/canoe-solidity/-/canoe-solidity-0.1.0.tgz#8082030569e4623626bb4adc6bbe50245e4b4002" - integrity sha512-lfkV5U4ABKGO/QdK0DonJS7UTr5qoZJVnfnqwVdYRqxS4fNns12g0XJRBZV4Zgc3VcR840SpV68x8WvrTy/Srw== - dependencies: - ethereumjs-abi "^0.6.5" - ethereumjs-util "^5.2.0" - underscore "^1.9.1" - cardinal@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" @@ -5352,7 +5336,7 @@ electron-to-chromium@^1.4.284: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.293.tgz#eaea755ad37a0f1759874a8597b33be62def2781" integrity sha512-h7vBlhC83NsgC9UO3LOZx91xgstIrHk5iqMbZgnEArL5rHTM6HfsUZhnwb3oRnNetXM1741kB9SO7x9jLshz5A== -elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.4: +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -5879,40 +5863,6 @@ ethereum-cryptography@^0.1.3: secp256k1 "^4.0.1" setimmediate "^1.0.5" -ethereumjs-abi@^0.6.5: - version "0.6.8" - resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" - integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== - dependencies: - bn.js "^4.11.8" - ethereumjs-util "^6.0.0" - -ethereumjs-util@^5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz#a833f0e5fca7e5b361384dc76301a721f537bf65" - integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== - dependencies: - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "^0.1.3" - rlp "^2.0.0" - safe-buffer "^5.1.1" - -ethereumjs-util@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" - integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== - dependencies: - "@types/bn.js" "^4.11.3" - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "0.1.6" - rlp "^2.2.3" - ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.5: version "7.1.5" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" @@ -5968,14 +5918,6 @@ ethjs-unit@0.1.6: bn.js "4.11.6" number-to-bn "1.7.0" -ethjs-util@0.1.6, ethjs-util@^0.1.3: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" - integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== - dependencies: - is-hex-prefixed "1.0.0" - strip-hex-prefix "1.0.0" - eventemitter2@6.4.7: version "6.4.7" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" @@ -10912,7 +10854,7 @@ ripemd160@^2.0.0, ripemd160@^2.0.1, ripemd160@^2.0.2: hash-base "^3.0.0" inherits "^2.0.1" -rlp@^2.0.0, rlp@^2.2.3, rlp@^2.2.4: +rlp@^2.2.4: version "2.2.7" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== @@ -12022,11 +11964,6 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -underscore@^1.9.1: - version "1.13.6" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" - integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== - unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"