From 377c802f5e8944bd4f283f2d32634321b1819f40 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Tue, 10 Aug 2021 19:31:56 +0530 Subject: [PATCH 01/13] Integrate hardhat console log --- libs/remix-lib/src/helpers/hhconsoleSigs.ts | 379 ++++++++++++++++++ .../src/web3Provider/web3VmProvider.ts | 18 + 2 files changed, 397 insertions(+) create mode 100644 libs/remix-lib/src/helpers/hhconsoleSigs.ts diff --git a/libs/remix-lib/src/helpers/hhconsoleSigs.ts b/libs/remix-lib/src/helpers/hhconsoleSigs.ts new file mode 100644 index 0000000000..f0665516e0 --- /dev/null +++ b/libs/remix-lib/src/helpers/hhconsoleSigs.ts @@ -0,0 +1,379 @@ +// Fetched from https://github.com/nomiclabs/hardhat/blob/ee4969a0a8f746f4775d4018326056d161066869/packages/hardhat-core/src/internal/hardhat-network/stack-traces/logger.ts#L47 + +export const ConsoleLogs = { + 1368866505: '()', + 1309416733: '("int")', + 4122065833: '("uint")', + 1093685164: '("string")', + 843419373: '("bool")', + 741264322: '("address")', + 199720790: '("bytes")', + 1847107880: '("bytes1")', + 3921027734: '("bytes2")', + 763578662: '("bytes3")', + 3764340945: '("bytes4")', + 2793701517: '("bytes5")', + 2927928721: '("bytes6")', + 1322614312: '("bytes7")', + 1334060334: '("bytes8")', + 2428341456: '("bytes9")', + 20780939: '("bytes10")', + 67127854: '("bytes11")', + 2258660029: '("bytes12")', + 2488442420: '("bytes13")', + 2456219775: '("bytes14")', + 3667227872: '("bytes15")', + 1717330180: '("bytes16")', + 866084666: '("bytes17")', + 3302112666: '("bytes18")', + 1584093747: '("bytes19")', + 1367925737: '("bytes20")', + 3923391840: '("bytes21")', + 3589990556: '("bytes22")', + 2879508237: '("bytes23")', + 4055063348: '("bytes24")', + 193248344: '("bytes25")', + 4172368369: '("bytes26")', + 976705501: '("bytes27")', + 3358255854: '("bytes28")', + 1265222613: '("bytes29")', + 3994207469: '("bytes30")', + 3263516050: '("bytes31")', + 666357637: '("bytes32")', + 1812949376: '("uint","uint")', + 262402885: '("uint","string")', + 510514412: '("uint","bool")', + 1491830284: '("uint","address")', + 2534451664: '("string","uint")', + 1264337527: '("string","string")', + 3283441205: '("string","bool")', + 832238387: '("string","address")', + 910912146: '("bool","uint")', + 2414527781: '("bool","string")', + 705760899: '("bool","bool")', + 2235320393: '("bool","address")', + 574869411: '("address","uint")', + 1973388987: '("address","string")', + 1974863315: '("address","bool")', + 3673216170: '("address","address")', + 3884059252: '("uint","uint","uint")', + 2104037094: '("uint","uint","string")', + 1733758967: '("uint","uint","bool")', + 3191032091: '("uint","uint","address")', + 1533929535: '("uint","string","uint")', + 1062716053: '("uint","string","string")', + 1185403086: '("uint","string","bool")', + 529592906: '("uint","string","address")', + 1515034914: '("uint","bool","uint")', + 2332955902: '("uint","bool","string")', + 3587091680: '("uint","bool","bool")', + 1112473535: '("uint","bool","address")', + 2286109610: '("uint","address","uint")', + 3464692859: '("uint","address","string")', + 2060456590: '("uint","address","bool")', + 2104993307: '("uint","address","address")', + 2526862595: '("string","uint","uint")', + 2750793529: '("string","uint","string")', + 4043501061: '("string","uint","bool")', + 3817119609: '("string","uint","address")', + 4083337817: '("string","string","uint")', + 753761519: '("string","string","string")', + 2967534005: '("string","string","bool")', + 2515337621: '("string","string","address")', + 689682896: '("string","bool","uint")', + 3801674877: '("string","bool","string")', + 2232122070: '("string","bool","bool")', + 2469116728: '("string","bool","address")', + 130552343: '("string","address","uint")', + 3773410639: '("string","address","string")', + 3374145236: '("string","address","bool")', + 4243355104: '("string","address","address")', + 995886048: '("bool","uint","uint")', + 3359211184: '("bool","uint","string")', + 464374251: '("bool","uint","bool")', + 3302110471: '("bool","uint","address")', + 3224906412: '("bool","string","uint")', + 2960557183: '("bool","string","string")', + 3686056519: '("bool","string","bool")', + 2509355347: '("bool","string","address")', + 2954061243: '("bool","bool","uint")', + 626391622: '("bool","bool","string")', + 1349555864: '("bool","bool","bool")', + 276362893: '("bool","bool","address")', + 3950005167: '("bool","address","uint")', + 3734671984: '("bool","address","string")', + 415876934: '("bool","address","bool")', + 3530962535: '("bool","address","address")', + 2273710942: '("address","uint","uint")', + 3136907337: '("address","uint","string")', + 3846889796: '("address","uint","bool")', + 2548867988: '("address","uint","address")', + 484110986: '("address","string","uint")', + 4218888805: '("address","string","string")', + 3473018801: '("address","string","bool")', + 4035396840: '("address","string","address")', + 742821141: '("address","bool","uint")', + 555898316: '("address","bool","string")', + 3951234194: '("address","bool","bool")', + 4044790253: '("address","bool","address")', + 1815506290: '("address","address","uint")', + 7426238: '("address","address","string")', + 4070990470: '("address","address","bool")', + 25986242: '("address","address","address")', + 1554033982: '("uint","uint","uint","uint")', + 2024634892: '("uint","uint","uint","string")', + 1683143115: '("uint","uint","uint","bool")', + 3766828905: '("uint","uint","uint","address")', + 949229117: '("uint","uint","string","uint")', + 2080582194: '("uint","uint","string","string")', + 2989403910: '("uint","uint","string","bool")', + 1127384482: '("uint","uint","string","address")', + 1818524812: '("uint","uint","bool","uint")', + 4024028142: '("uint","uint","bool","string")', + 2495495089: '("uint","uint","bool","bool")', + 3776410703: '("uint","uint","bool","address")', + 1628154048: '("uint","uint","address","uint")', + 3600994782: '("uint","uint","address","string")', + 2833785006: '("uint","uint","address","bool")', + 3398671136: '("uint","uint","address","address")', + 3221501959: '("uint","string","uint","uint")', + 2730232985: '("uint","string","uint","string")', + 2270850606: '("uint","string","uint","bool")', + 2877020669: '("uint","string","uint","address")', + 1995203422: '("uint","string","string","uint")', + 1474103825: '("uint","string","string","string")', + 310782872: '("uint","string","string","bool")', + 3432549024: '("uint","string","string","address")', + 2763295359: '("uint","string","bool","uint")', + 2370346144: '("uint","string","bool","string")', + 1371286465: '("uint","string","bool","bool")', + 2037328032: '("uint","string","bool","address")', + 2565338099: '("uint","string","address","uint")', + 4170733439: '("uint","string","address","string")', + 4181720887: '("uint","string","address","bool")', + 2141537675: '("uint","string","address","address")', + 1451396516: '("uint","bool","uint","uint")', + 3906845782: '("uint","bool","uint","string")', + 3534472445: '("uint","bool","uint","bool")', + 1329595790: '("uint","bool","uint","address")', + 2438978344: '("uint","bool","string","uint")', + 2754870525: '("uint","bool","string","string")', + 879671495: '("uint","bool","string","bool")', + 1231956916: '("uint","bool","string","address")', + 3173363033: '("uint","bool","bool","uint")', + 831186331: '("uint","bool","bool","string")', + 1315722005: '("uint","bool","bool","bool")', + 1392910941: '("uint","bool","bool","address")', + 1102442299: '("uint","bool","address","uint")', + 2721084958: '("uint","bool","address","string")', + 2449150530: '("uint","bool","address","bool")', + 2263728396: '("uint","bool","address","address")', + 3399106228: '("uint","address","uint","uint")', + 1054063912: '("uint","address","uint","string")', + 435581801: '("uint","address","uint","bool")', + 4256361684: '("uint","address","uint","address")', + 2697204968: '("uint","address","string","uint")', + 2373420580: '("uint","address","string","string")', + 581204390: '("uint","address","string","bool")', + 3420819197: '("uint","address","string","address")', + 2064181483: '("uint","address","bool","uint")', + 1676730946: '("uint","address","bool","string")', + 2116501773: '("uint","address","bool","bool")', + 3056677012: '("uint","address","bool","address")', + 2587672470: '("uint","address","address","uint")', + 2034490470: '("uint","address","address","string")', + 22350596: '("uint","address","address","bool")', + 1430734329: '("uint","address","address","address")', + 149837414: '("string","uint","uint","uint")', + 2773406909: '("string","uint","uint","string")', + 4147936829: '("string","uint","uint","bool")', + 3201771711: '("string","uint","uint","address")', + 2697245221: '("string","uint","string","uint")', + 1821956834: '("string","uint","string","string")', + 3919545039: '("string","uint","string","bool")', + 3144824297: '("string","uint","string","address")', + 1427009269: '("string","uint","bool","uint")', + 1993105508: '("string","uint","bool","string")', + 3816813520: '("string","uint","bool","bool")', + 3847527825: '("string","uint","bool","address")', + 1481210622: '("string","uint","address","uint")', + 844415720: '("string","uint","address","string")', + 285649143: '("string","uint","address","bool")', + 3939013249: '("string","uint","address","address")', + 3587119056: '("string","string","uint","uint")', + 2366909661: '("string","string","uint","string")', + 3864418506: '("string","string","uint","bool")', + 1565476480: '("string","string","uint","address")', + 2681211381: '("string","string","string","uint")', + 3731419658: '("string","string","string","string")', + 739726573: '("string","string","string","bool")', + 1834430276: '("string","string","string","address")', + 2256636538: '("string","string","bool","uint")', + 1585754346: '("string","string","bool","string")', + 1081628777: '("string","string","bool","bool")', + 3279013851: '("string","string","bool","address")', + 1250010474: '("string","string","address","uint")', + 3944480640: '("string","string","address","string")', + 1556958775: '("string","string","address","bool")', + 1134328815: '("string","string","address","address")', + 1572859960: '("string","bool","uint","uint")', + 1119461927: '("string","bool","uint","string")', + 1019590099: '("string","bool","uint","bool")', + 1909687565: '("string","bool","uint","address")', + 885731469: '("string","bool","string","uint")', + 2821114603: '("string","bool","string","string")', + 1066037277: '("string","bool","string","bool")', + 3764542249: '("string","bool","string","address")', + 2155164136: '("string","bool","bool","uint")', + 2636305885: '("string","bool","bool","string")', + 2304440517: '("string","bool","bool","bool")', + 1905304873: '("string","bool","bool","address")', + 685723286: '("string","bool","address","uint")', + 764294052: '("string","bool","address","string")', + 2508990662: '("string","bool","address","bool")', + 870964509: '("string","bool","address","address")', + 3668153533: '("string","address","uint","uint")', + 1280700980: '("string","address","uint","string")', + 1522647356: '("string","address","uint","bool")', + 2741431424: '("string","address","uint","address")', + 2405583849: '("string","address","string","uint")', + 609847026: '("string","address","string","string")', + 1595265676: '("string","address","string","bool")', + 2864486961: '("string","address","string","address")', + 3318856587: '("string","address","bool","uint")', + 72663161: '("string","address","bool","string")', + 2038975531: '("string","address","bool","bool")', + 573965245: '("string","address","bool","address")', + 1857524797: '("string","address","address","uint")', + 2148146279: '("string","address","address","string")', + 3047013728: '("string","address","address","bool")', + 3985582326: '("string","address","address","address")', + 853517604: '("bool","uint","uint","uint")', + 3657852616: '("bool","uint","uint","string")', + 2753397214: '("bool","uint","uint","bool")', + 4049711649: '("bool","uint","uint","address")', + 1098907931: '("bool","uint","string","uint")', + 3542771016: '("bool","uint","string","string")', + 2446522387: '("bool","uint","string","bool")', + 2781285673: '("bool","uint","string","address")', + 3554563475: '("bool","uint","bool","uint")', + 3067439572: '("bool","uint","bool","string")', + 2650928961: '("bool","uint","bool","bool")', + 1114097656: '("bool","uint","bool","address")', + 3399820138: '("bool","uint","address","uint")', + 403247937: '("bool","uint","address","string")', + 1705899016: '("bool","uint","address","bool")', + 2318373034: '("bool","uint","address","address")', + 2387273838: '("bool","string","uint","uint")', + 2007084013: '("bool","string","uint","string")', + 549177775: '("bool","string","uint","bool")', + 1529002296: '("bool","string","uint","address")', + 1574643090: '("bool","string","string","uint")', + 392356650: '("bool","string","string","string")', + 508266469: '("bool","string","string","bool")', + 2547225816: '("bool","string","string","address")', + 2372902053: '("bool","string","bool","uint")', + 1211958294: '("bool","string","bool","string")', + 3697185627: '("bool","string","bool","bool")', + 1401816747: '("bool","string","bool","address")', + 453743963: '("bool","string","address","uint")', + 316065672: '("bool","string","address","string")', + 1842623690: '("bool","string","address","bool")', + 724244700: '("bool","string","address","address")', + 1181212302: '("bool","bool","uint","uint")', + 1348569399: '("bool","bool","uint","string")', + 2874982852: '("bool","bool","uint","bool")', + 201299213: '("bool","bool","uint","address")', + 395003525: '("bool","bool","string","uint")', + 1830717265: '("bool","bool","string","string")', + 3092715066: '("bool","bool","string","bool")', + 4188875657: '("bool","bool","string","address")', + 3259532109: '("bool","bool","bool","uint")', + 719587540: '("bool","bool","bool","string")', + 992632032: '("bool","bool","bool","bool")', + 2352126746: '("bool","bool","bool","address")', + 1620281063: '("bool","bool","address","uint")', + 2695133539: '("bool","bool","address","string")', + 3231908568: '("bool","bool","address","bool")', + 4102557348: '("bool","bool","address","address")', + 2617143996: '("bool","address","uint","uint")', + 2691192883: '("bool","address","uint","string")', + 4002252402: '("bool","address","uint","bool")', + 1760647349: '("bool","address","uint","address")', + 194640930: '("bool","address","string","uint")', + 2805734838: '("bool","address","string","string")', + 3804222987: '("bool","address","string","bool")', + 1870422078: '("bool","address","string","address")', + 1287000017: '("bool","address","bool","uint")', + 1248250676: '("bool","address","bool","string")', + 1788626827: '("bool","address","bool","bool")', + 474063670: '("bool","address","bool","address")', + 1384430956: '("bool","address","address","uint")', + 3625099623: '("bool","address","address","string")', + 1180699616: '("bool","address","address","bool")', + 487903233: '("bool","address","address","address")', + 1024368100: '("address","uint","uint","uint")', + 2301889963: '("address","uint","uint","string")', + 3964381346: '("address","uint","uint","bool")', + 519451700: '("address","uint","uint","address")', + 4111650715: '("address","uint","string","uint")', + 2119616147: '("address","uint","string","string")', + 2751614737: '("address","uint","string","bool")', + 3698927108: '("address","uint","string","address")', + 1770996626: '("address","uint","bool","uint")', + 2391690869: '("address","uint","bool","string")', + 4272018778: '("address","uint","bool","bool")', + 602229106: '("address","uint","bool","address")', + 2782496616: '("address","uint","address","uint")', + 1567749022: '("address","uint","address","string")', + 4051804649: '("address","uint","address","bool")', + 3961816175: '("address","uint","address","address")', + 2764647008: '("address","string","uint","uint")', + 1561552329: '("address","string","uint","string")', + 2116357467: '("address","string","uint","bool")', + 3755464715: '("address","string","uint","address")', + 2706362425: '("address","string","string","uint")', + 1560462603: '("address","string","string","string")', + 900007711: '("address","string","string","bool")', + 2689478535: '("address","string","string","address")', + 3877655068: '("address","string","bool","uint")', + 3154862590: '("address","string","bool","string")', + 1595759775: '("address","string","bool","bool")', + 542667202: '("address","string","bool","address")', + 2350461865: '("address","string","address","uint")', + 4158874181: '("address","string","address","string")', + 233909110: '("address","string","address","bool")', + 221706784: '("address","string","address","address")', + 3255869470: '("address","bool","uint","uint")', + 2606272204: '("address","bool","uint","string")', + 2244855215: '("address","bool","uint","bool")', + 227337758: '("address","bool","uint","address")', + 2652011374: '("address","bool","string","uint")', + 1197235251: '("address","bool","string","string")', + 1353532957: '("address","bool","string","bool")', + 436029782: '("address","bool","string","address")', + 3484780374: '("address","bool","bool","uint")', + 3754205928: '("address","bool","bool","string")', + 3401856121: '("address","bool","bool","bool")', + 3476636805: '("address","bool","bool","address")', + 3698398930: '("address","bool","address","uint")', + 769095910: '("address","bool","address","string")', + 2801077007: '("address","bool","address","bool")', + 1711502813: '("address","bool","address","address")', + 1425929188: '("address","address","uint","uint")', + 2647731885: '("address","address","uint","string")', + 3270936812: '("address","address","uint","bool")', + 3603321462: '("address","address","uint","address")', + 69767936: '("address","address","string","uint")', + 566079269: '("address","address","string","string")', + 1863997774: '("address","address","string","bool")', + 2406706454: '("address","address","string","address")', + 2513854225: '("address","address","bool","uint")', + 2858762440: '("address","address","bool","string")', + 752096074: '("address","address","bool","bool")', + 2669396846: '("address","address","bool","address")', + 3982404743: '("address","address","address","uint")', + 4161329696: '("address","address","address","string")', + 238520724: '("address","address","address","bool")', + 1717301556: '("address","address","address","address")', + } \ No newline at end of file diff --git a/libs/remix-lib/src/web3Provider/web3VmProvider.ts b/libs/remix-lib/src/web3Provider/web3VmProvider.ts index b5d8ea4732..7ffad9d3fd 100644 --- a/libs/remix-lib/src/web3Provider/web3VmProvider.ts +++ b/libs/remix-lib/src/web3Provider/web3VmProvider.ts @@ -1,7 +1,9 @@ import { hexListFromBNs, formatMemory } from '../util' import { normalizeHexAddress } from '../helpers/uiHelper' +import { ConsoleLogs } from '../helpers/hhconsoleSigs' import { toChecksumAddress, BN, bufferToHex, Address } from 'ethereumjs-util' import Web3 from 'web3' +import { ethers } from 'ethers' export class Web3VmProvider { web3 @@ -206,6 +208,22 @@ export class Web3VmProvider { error: data.error === false ? undefined : data.error } this.vmTraces[this.processingHash].structLogs.push(step) + if (step.op === 'STATICCALL' && step.stack[step.stack.length - 2] === "0x000000000000000000000000000000000000000000636f6e736f6c652e6c6f67") { + const stackLength = step.stack.length + const address = step.stack[stackLength-2] + const payloadStart = parseInt(step.stack[stackLength-3], 16) + const memory = step.memory.join('') + const payloadLength = parseInt(step.stack[stackLength-4], 16) + console.log('payloadLength in pushTrace--->', payloadLength) + const payload = memory.substring(payloadStart*2, payloadStart*2 + payloadLength) + console.log('memory payload in pushTrace--->', payload) + const fnselector = parseInt('0x' + payload.substring(0, 8)) + const iface = new ethers.utils.Interface([`function log${ConsoleLogs[fnselector]} view`]) + console.log('iface--->', iface) + console.log('---->', iface.decodeFunctionData("log", '0x' + payload)) + } + + // console.log('processingAddress in ==', normalizeHexAddress(step.stack[step.stack.length - 2])) if (step.op === 'CREATE' || step.op === 'CALL') { if (step.op === 'CREATE') { this.processingAddress = '(Contract Creation - Step ' + this.processingIndex + ')' From f3252ed86016afe5f5f4ae735c9278e33ed5176a Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Tue, 10 Aug 2021 19:49:08 +0530 Subject: [PATCH 02/13] function description --- libs/remix-lib/src/web3Provider/web3VmProvider.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/remix-lib/src/web3Provider/web3VmProvider.ts b/libs/remix-lib/src/web3Provider/web3VmProvider.ts index 7ffad9d3fd..9472b81372 100644 --- a/libs/remix-lib/src/web3Provider/web3VmProvider.ts +++ b/libs/remix-lib/src/web3Provider/web3VmProvider.ts @@ -220,10 +220,10 @@ export class Web3VmProvider { const fnselector = parseInt('0x' + payload.substring(0, 8)) const iface = new ethers.utils.Interface([`function log${ConsoleLogs[fnselector]} view`]) console.log('iface--->', iface) - console.log('---->', iface.decodeFunctionData("log", '0x' + payload)) + const functionDesc = iface.getFunction('log') + console.log('---->', iface.decodeFunctionData(functionDesc, '0x' + payload)) } - // console.log('processingAddress in ==', normalizeHexAddress(step.stack[step.stack.length - 2])) if (step.op === 'CREATE' || step.op === 'CALL') { if (step.op === 'CREATE') { this.processingAddress = '(Contract Creation - Step ' + this.processingIndex + ')' From 774c305686d61e4ab25666d388204627d5893f57 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Wed, 11 Aug 2021 11:31:26 +0530 Subject: [PATCH 03/13] data decoding successful --- libs/remix-lib/src/helpers/hhconsoleSigs.ts | 752 +++++++++--------- .../src/web3Provider/web3VmProvider.ts | 17 +- 2 files changed, 383 insertions(+), 386 deletions(-) diff --git a/libs/remix-lib/src/helpers/hhconsoleSigs.ts b/libs/remix-lib/src/helpers/hhconsoleSigs.ts index f0665516e0..1ae8955736 100644 --- a/libs/remix-lib/src/helpers/hhconsoleSigs.ts +++ b/libs/remix-lib/src/helpers/hhconsoleSigs.ts @@ -1,379 +1,379 @@ // Fetched from https://github.com/nomiclabs/hardhat/blob/ee4969a0a8f746f4775d4018326056d161066869/packages/hardhat-core/src/internal/hardhat-network/stack-traces/logger.ts#L47 export const ConsoleLogs = { - 1368866505: '()', - 1309416733: '("int")', - 4122065833: '("uint")', - 1093685164: '("string")', - 843419373: '("bool")', - 741264322: '("address")', - 199720790: '("bytes")', - 1847107880: '("bytes1")', - 3921027734: '("bytes2")', - 763578662: '("bytes3")', - 3764340945: '("bytes4")', - 2793701517: '("bytes5")', - 2927928721: '("bytes6")', - 1322614312: '("bytes7")', - 1334060334: '("bytes8")', - 2428341456: '("bytes9")', - 20780939: '("bytes10")', - 67127854: '("bytes11")', - 2258660029: '("bytes12")', - 2488442420: '("bytes13")', - 2456219775: '("bytes14")', - 3667227872: '("bytes15")', - 1717330180: '("bytes16")', - 866084666: '("bytes17")', - 3302112666: '("bytes18")', - 1584093747: '("bytes19")', - 1367925737: '("bytes20")', - 3923391840: '("bytes21")', - 3589990556: '("bytes22")', - 2879508237: '("bytes23")', - 4055063348: '("bytes24")', - 193248344: '("bytes25")', - 4172368369: '("bytes26")', - 976705501: '("bytes27")', - 3358255854: '("bytes28")', - 1265222613: '("bytes29")', - 3994207469: '("bytes30")', - 3263516050: '("bytes31")', - 666357637: '("bytes32")', - 1812949376: '("uint","uint")', - 262402885: '("uint","string")', - 510514412: '("uint","bool")', - 1491830284: '("uint","address")', - 2534451664: '("string","uint")', - 1264337527: '("string","string")', - 3283441205: '("string","bool")', - 832238387: '("string","address")', - 910912146: '("bool","uint")', - 2414527781: '("bool","string")', - 705760899: '("bool","bool")', - 2235320393: '("bool","address")', - 574869411: '("address","uint")', - 1973388987: '("address","string")', - 1974863315: '("address","bool")', - 3673216170: '("address","address")', - 3884059252: '("uint","uint","uint")', - 2104037094: '("uint","uint","string")', - 1733758967: '("uint","uint","bool")', - 3191032091: '("uint","uint","address")', - 1533929535: '("uint","string","uint")', - 1062716053: '("uint","string","string")', - 1185403086: '("uint","string","bool")', - 529592906: '("uint","string","address")', - 1515034914: '("uint","bool","uint")', - 2332955902: '("uint","bool","string")', - 3587091680: '("uint","bool","bool")', - 1112473535: '("uint","bool","address")', - 2286109610: '("uint","address","uint")', - 3464692859: '("uint","address","string")', - 2060456590: '("uint","address","bool")', - 2104993307: '("uint","address","address")', - 2526862595: '("string","uint","uint")', - 2750793529: '("string","uint","string")', - 4043501061: '("string","uint","bool")', - 3817119609: '("string","uint","address")', - 4083337817: '("string","string","uint")', - 753761519: '("string","string","string")', - 2967534005: '("string","string","bool")', - 2515337621: '("string","string","address")', - 689682896: '("string","bool","uint")', - 3801674877: '("string","bool","string")', - 2232122070: '("string","bool","bool")', - 2469116728: '("string","bool","address")', - 130552343: '("string","address","uint")', - 3773410639: '("string","address","string")', - 3374145236: '("string","address","bool")', - 4243355104: '("string","address","address")', - 995886048: '("bool","uint","uint")', - 3359211184: '("bool","uint","string")', - 464374251: '("bool","uint","bool")', - 3302110471: '("bool","uint","address")', - 3224906412: '("bool","string","uint")', - 2960557183: '("bool","string","string")', - 3686056519: '("bool","string","bool")', - 2509355347: '("bool","string","address")', - 2954061243: '("bool","bool","uint")', - 626391622: '("bool","bool","string")', - 1349555864: '("bool","bool","bool")', - 276362893: '("bool","bool","address")', - 3950005167: '("bool","address","uint")', - 3734671984: '("bool","address","string")', - 415876934: '("bool","address","bool")', - 3530962535: '("bool","address","address")', - 2273710942: '("address","uint","uint")', - 3136907337: '("address","uint","string")', - 3846889796: '("address","uint","bool")', - 2548867988: '("address","uint","address")', - 484110986: '("address","string","uint")', - 4218888805: '("address","string","string")', - 3473018801: '("address","string","bool")', - 4035396840: '("address","string","address")', - 742821141: '("address","bool","uint")', - 555898316: '("address","bool","string")', - 3951234194: '("address","bool","bool")', - 4044790253: '("address","bool","address")', - 1815506290: '("address","address","uint")', - 7426238: '("address","address","string")', - 4070990470: '("address","address","bool")', - 25986242: '("address","address","address")', - 1554033982: '("uint","uint","uint","uint")', - 2024634892: '("uint","uint","uint","string")', - 1683143115: '("uint","uint","uint","bool")', - 3766828905: '("uint","uint","uint","address")', - 949229117: '("uint","uint","string","uint")', - 2080582194: '("uint","uint","string","string")', - 2989403910: '("uint","uint","string","bool")', - 1127384482: '("uint","uint","string","address")', - 1818524812: '("uint","uint","bool","uint")', - 4024028142: '("uint","uint","bool","string")', - 2495495089: '("uint","uint","bool","bool")', - 3776410703: '("uint","uint","bool","address")', - 1628154048: '("uint","uint","address","uint")', - 3600994782: '("uint","uint","address","string")', - 2833785006: '("uint","uint","address","bool")', - 3398671136: '("uint","uint","address","address")', - 3221501959: '("uint","string","uint","uint")', - 2730232985: '("uint","string","uint","string")', - 2270850606: '("uint","string","uint","bool")', - 2877020669: '("uint","string","uint","address")', - 1995203422: '("uint","string","string","uint")', - 1474103825: '("uint","string","string","string")', - 310782872: '("uint","string","string","bool")', - 3432549024: '("uint","string","string","address")', - 2763295359: '("uint","string","bool","uint")', - 2370346144: '("uint","string","bool","string")', - 1371286465: '("uint","string","bool","bool")', - 2037328032: '("uint","string","bool","address")', - 2565338099: '("uint","string","address","uint")', - 4170733439: '("uint","string","address","string")', - 4181720887: '("uint","string","address","bool")', - 2141537675: '("uint","string","address","address")', - 1451396516: '("uint","bool","uint","uint")', - 3906845782: '("uint","bool","uint","string")', - 3534472445: '("uint","bool","uint","bool")', - 1329595790: '("uint","bool","uint","address")', - 2438978344: '("uint","bool","string","uint")', - 2754870525: '("uint","bool","string","string")', - 879671495: '("uint","bool","string","bool")', - 1231956916: '("uint","bool","string","address")', - 3173363033: '("uint","bool","bool","uint")', - 831186331: '("uint","bool","bool","string")', - 1315722005: '("uint","bool","bool","bool")', - 1392910941: '("uint","bool","bool","address")', - 1102442299: '("uint","bool","address","uint")', - 2721084958: '("uint","bool","address","string")', - 2449150530: '("uint","bool","address","bool")', - 2263728396: '("uint","bool","address","address")', - 3399106228: '("uint","address","uint","uint")', - 1054063912: '("uint","address","uint","string")', - 435581801: '("uint","address","uint","bool")', - 4256361684: '("uint","address","uint","address")', - 2697204968: '("uint","address","string","uint")', - 2373420580: '("uint","address","string","string")', - 581204390: '("uint","address","string","bool")', - 3420819197: '("uint","address","string","address")', - 2064181483: '("uint","address","bool","uint")', - 1676730946: '("uint","address","bool","string")', - 2116501773: '("uint","address","bool","bool")', - 3056677012: '("uint","address","bool","address")', - 2587672470: '("uint","address","address","uint")', - 2034490470: '("uint","address","address","string")', - 22350596: '("uint","address","address","bool")', - 1430734329: '("uint","address","address","address")', - 149837414: '("string","uint","uint","uint")', - 2773406909: '("string","uint","uint","string")', - 4147936829: '("string","uint","uint","bool")', - 3201771711: '("string","uint","uint","address")', - 2697245221: '("string","uint","string","uint")', - 1821956834: '("string","uint","string","string")', - 3919545039: '("string","uint","string","bool")', - 3144824297: '("string","uint","string","address")', - 1427009269: '("string","uint","bool","uint")', - 1993105508: '("string","uint","bool","string")', - 3816813520: '("string","uint","bool","bool")', - 3847527825: '("string","uint","bool","address")', - 1481210622: '("string","uint","address","uint")', - 844415720: '("string","uint","address","string")', - 285649143: '("string","uint","address","bool")', - 3939013249: '("string","uint","address","address")', - 3587119056: '("string","string","uint","uint")', - 2366909661: '("string","string","uint","string")', - 3864418506: '("string","string","uint","bool")', - 1565476480: '("string","string","uint","address")', - 2681211381: '("string","string","string","uint")', - 3731419658: '("string","string","string","string")', - 739726573: '("string","string","string","bool")', - 1834430276: '("string","string","string","address")', - 2256636538: '("string","string","bool","uint")', - 1585754346: '("string","string","bool","string")', - 1081628777: '("string","string","bool","bool")', - 3279013851: '("string","string","bool","address")', - 1250010474: '("string","string","address","uint")', - 3944480640: '("string","string","address","string")', - 1556958775: '("string","string","address","bool")', - 1134328815: '("string","string","address","address")', - 1572859960: '("string","bool","uint","uint")', - 1119461927: '("string","bool","uint","string")', - 1019590099: '("string","bool","uint","bool")', - 1909687565: '("string","bool","uint","address")', - 885731469: '("string","bool","string","uint")', - 2821114603: '("string","bool","string","string")', - 1066037277: '("string","bool","string","bool")', - 3764542249: '("string","bool","string","address")', - 2155164136: '("string","bool","bool","uint")', - 2636305885: '("string","bool","bool","string")', - 2304440517: '("string","bool","bool","bool")', - 1905304873: '("string","bool","bool","address")', - 685723286: '("string","bool","address","uint")', - 764294052: '("string","bool","address","string")', - 2508990662: '("string","bool","address","bool")', - 870964509: '("string","bool","address","address")', - 3668153533: '("string","address","uint","uint")', - 1280700980: '("string","address","uint","string")', - 1522647356: '("string","address","uint","bool")', - 2741431424: '("string","address","uint","address")', - 2405583849: '("string","address","string","uint")', - 609847026: '("string","address","string","string")', - 1595265676: '("string","address","string","bool")', - 2864486961: '("string","address","string","address")', - 3318856587: '("string","address","bool","uint")', - 72663161: '("string","address","bool","string")', - 2038975531: '("string","address","bool","bool")', - 573965245: '("string","address","bool","address")', - 1857524797: '("string","address","address","uint")', - 2148146279: '("string","address","address","string")', - 3047013728: '("string","address","address","bool")', - 3985582326: '("string","address","address","address")', - 853517604: '("bool","uint","uint","uint")', - 3657852616: '("bool","uint","uint","string")', - 2753397214: '("bool","uint","uint","bool")', - 4049711649: '("bool","uint","uint","address")', - 1098907931: '("bool","uint","string","uint")', - 3542771016: '("bool","uint","string","string")', - 2446522387: '("bool","uint","string","bool")', - 2781285673: '("bool","uint","string","address")', - 3554563475: '("bool","uint","bool","uint")', - 3067439572: '("bool","uint","bool","string")', - 2650928961: '("bool","uint","bool","bool")', - 1114097656: '("bool","uint","bool","address")', - 3399820138: '("bool","uint","address","uint")', - 403247937: '("bool","uint","address","string")', - 1705899016: '("bool","uint","address","bool")', - 2318373034: '("bool","uint","address","address")', - 2387273838: '("bool","string","uint","uint")', - 2007084013: '("bool","string","uint","string")', - 549177775: '("bool","string","uint","bool")', - 1529002296: '("bool","string","uint","address")', - 1574643090: '("bool","string","string","uint")', - 392356650: '("bool","string","string","string")', - 508266469: '("bool","string","string","bool")', - 2547225816: '("bool","string","string","address")', - 2372902053: '("bool","string","bool","uint")', - 1211958294: '("bool","string","bool","string")', - 3697185627: '("bool","string","bool","bool")', - 1401816747: '("bool","string","bool","address")', - 453743963: '("bool","string","address","uint")', - 316065672: '("bool","string","address","string")', - 1842623690: '("bool","string","address","bool")', - 724244700: '("bool","string","address","address")', - 1181212302: '("bool","bool","uint","uint")', - 1348569399: '("bool","bool","uint","string")', - 2874982852: '("bool","bool","uint","bool")', - 201299213: '("bool","bool","uint","address")', - 395003525: '("bool","bool","string","uint")', - 1830717265: '("bool","bool","string","string")', - 3092715066: '("bool","bool","string","bool")', - 4188875657: '("bool","bool","string","address")', - 3259532109: '("bool","bool","bool","uint")', - 719587540: '("bool","bool","bool","string")', - 992632032: '("bool","bool","bool","bool")', - 2352126746: '("bool","bool","bool","address")', - 1620281063: '("bool","bool","address","uint")', - 2695133539: '("bool","bool","address","string")', - 3231908568: '("bool","bool","address","bool")', - 4102557348: '("bool","bool","address","address")', - 2617143996: '("bool","address","uint","uint")', - 2691192883: '("bool","address","uint","string")', - 4002252402: '("bool","address","uint","bool")', - 1760647349: '("bool","address","uint","address")', - 194640930: '("bool","address","string","uint")', - 2805734838: '("bool","address","string","string")', - 3804222987: '("bool","address","string","bool")', - 1870422078: '("bool","address","string","address")', - 1287000017: '("bool","address","bool","uint")', - 1248250676: '("bool","address","bool","string")', - 1788626827: '("bool","address","bool","bool")', - 474063670: '("bool","address","bool","address")', - 1384430956: '("bool","address","address","uint")', - 3625099623: '("bool","address","address","string")', - 1180699616: '("bool","address","address","bool")', - 487903233: '("bool","address","address","address")', - 1024368100: '("address","uint","uint","uint")', - 2301889963: '("address","uint","uint","string")', - 3964381346: '("address","uint","uint","bool")', - 519451700: '("address","uint","uint","address")', - 4111650715: '("address","uint","string","uint")', - 2119616147: '("address","uint","string","string")', - 2751614737: '("address","uint","string","bool")', - 3698927108: '("address","uint","string","address")', - 1770996626: '("address","uint","bool","uint")', - 2391690869: '("address","uint","bool","string")', - 4272018778: '("address","uint","bool","bool")', - 602229106: '("address","uint","bool","address")', - 2782496616: '("address","uint","address","uint")', - 1567749022: '("address","uint","address","string")', - 4051804649: '("address","uint","address","bool")', - 3961816175: '("address","uint","address","address")', - 2764647008: '("address","string","uint","uint")', - 1561552329: '("address","string","uint","string")', - 2116357467: '("address","string","uint","bool")', - 3755464715: '("address","string","uint","address")', - 2706362425: '("address","string","string","uint")', - 1560462603: '("address","string","string","string")', - 900007711: '("address","string","string","bool")', - 2689478535: '("address","string","string","address")', - 3877655068: '("address","string","bool","uint")', - 3154862590: '("address","string","bool","string")', - 1595759775: '("address","string","bool","bool")', - 542667202: '("address","string","bool","address")', - 2350461865: '("address","string","address","uint")', - 4158874181: '("address","string","address","string")', - 233909110: '("address","string","address","bool")', - 221706784: '("address","string","address","address")', - 3255869470: '("address","bool","uint","uint")', - 2606272204: '("address","bool","uint","string")', - 2244855215: '("address","bool","uint","bool")', - 227337758: '("address","bool","uint","address")', - 2652011374: '("address","bool","string","uint")', - 1197235251: '("address","bool","string","string")', - 1353532957: '("address","bool","string","bool")', - 436029782: '("address","bool","string","address")', - 3484780374: '("address","bool","bool","uint")', - 3754205928: '("address","bool","bool","string")', - 3401856121: '("address","bool","bool","bool")', - 3476636805: '("address","bool","bool","address")', - 3698398930: '("address","bool","address","uint")', - 769095910: '("address","bool","address","string")', - 2801077007: '("address","bool","address","bool")', - 1711502813: '("address","bool","address","address")', - 1425929188: '("address","address","uint","uint")', - 2647731885: '("address","address","uint","string")', - 3270936812: '("address","address","uint","bool")', - 3603321462: '("address","address","uint","address")', - 69767936: '("address","address","string","uint")', - 566079269: '("address","address","string","string")', - 1863997774: '("address","address","string","bool")', - 2406706454: '("address","address","string","address")', - 2513854225: '("address","address","bool","uint")', - 2858762440: '("address","address","bool","string")', - 752096074: '("address","address","bool","bool")', - 2669396846: '("address","address","bool","address")', - 3982404743: '("address","address","address","uint")', - 4161329696: '("address","address","address","string")', - 238520724: '("address","address","address","bool")', - 1717301556: '("address","address","address","address")', - } \ No newline at end of file + 1368866505: '()', + 1309416733: '(int)', + 4122065833: '(uint)', + 1093685164: '(string)', + 843419373: '(bool)', + 741264322: '(address)', + 199720790: '(bytes)', + 1847107880: '(bytes1)', + 3921027734: '(bytes2)', + 763578662: '(bytes3)', + 3764340945: '(bytes4)', + 2793701517: '(bytes5)', + 2927928721: '(bytes6)', + 1322614312: '(bytes7)', + 1334060334: '(bytes8)', + 2428341456: '(bytes9)', + 20780939: '(bytes10)', + 67127854: '(bytes11)', + 2258660029: '(bytes12)', + 2488442420: '(bytes13)', + 2456219775: '(bytes14)', + 3667227872: '(bytes15)', + 1717330180: '(bytes16)', + 866084666: '(bytes17)', + 3302112666: '(bytes18)', + 1584093747: '(bytes19)', + 1367925737: '(bytes20)', + 3923391840: '(bytes21)', + 3589990556: '(bytes22)', + 2879508237: '(bytes23)', + 4055063348: '(bytes24)', + 193248344: '(bytes25)', + 4172368369: '(bytes26)', + 976705501: '(bytes27)', + 3358255854: '(bytes28)', + 1265222613: '(bytes29)', + 3994207469: '(bytes30)', + 3263516050: '(bytes31)', + 666357637: '(bytes32)', + 1812949376: '(uint,uint)', + 262402885: '(uint,string)', + 510514412: '(uint,bool)', + 1491830284: '(uint,address)', + 2534451664: '(string,uint)', + 1264337527: '(string,string)', + 3283441205: '(string,bool)', + 832238387: '(string,address)', + 910912146: '(bool,uint)', + 2414527781: '(bool,string)', + 705760899: '(bool,bool)', + 2235320393: '(bool,address)', + 574869411: '(address,uint)', + 1973388987: '(address,string)', + 1974863315: '(address,bool)', + 3673216170: '(address,address)', + 3884059252: '(uint,uint,uint)', + 2104037094: '(uint,uint,string)', + 1733758967: '(uint,uint,bool)', + 3191032091: '(uint,uint,address)', + 1533929535: '(uint,string,uint)', + 1062716053: '(uint,string,string)', + 1185403086: '(uint,string,bool)', + 529592906: '(uint,string,address)', + 1515034914: '(uint,bool,uint)', + 2332955902: '(uint,bool,string)', + 3587091680: '(uint,bool,bool)', + 1112473535: '(uint,bool,address)', + 2286109610: '(uint,address,uint)', + 3464692859: '(uint,address,string)', + 2060456590: '(uint,address,bool)', + 2104993307: '(uint,address,address)', + 2526862595: '(string,uint,uint)', + 2750793529: '(string,uint,string)', + 4043501061: '(string,uint,bool)', + 3817119609: '(string,uint,address)', + 4083337817: '(string,string,uint)', + 753761519: '(string,string,string)', + 2967534005: '(string,string,bool)', + 2515337621: '(string,string,address)', + 689682896: '(string,bool,uint)', + 3801674877: '(string,bool,string)', + 2232122070: '(string,bool,bool)', + 2469116728: '(string,bool,address)', + 130552343: '(string,address,uint)', + 3773410639: '(string,address,string)', + 3374145236: '(string,address,bool)', + 4243355104: '(string,address,address)', + 995886048: '(bool,uint,uint)', + 3359211184: '(bool,uint,string)', + 464374251: '(bool,uint,bool)', + 3302110471: '(bool,uint,address)', + 3224906412: '(bool,string,uint)', + 2960557183: '(bool,string,string)', + 3686056519: '(bool,string,bool)', + 2509355347: '(bool,string,address)', + 2954061243: '(bool,bool,uint)', + 626391622: '(bool,bool,string)', + 1349555864: '(bool,bool,bool)', + 276362893: '(bool,bool,address)', + 3950005167: '(bool,address,uint)', + 3734671984: '(bool,address,string)', + 415876934: '(bool,address,bool)', + 3530962535: '(bool,address,address)', + 2273710942: '(address,uint,uint)', + 3136907337: '(address,uint,string)', + 3846889796: '(address,uint,bool)', + 2548867988: '(address,uint,address)', + 484110986: '(address,string,uint)', + 4218888805: '(address,string,string)', + 3473018801: '(address,string,bool)', + 4035396840: '(address,string,address)', + 742821141: '(address,bool,uint)', + 555898316: '(address,bool,string)', + 3951234194: '(address,bool,bool)', + 4044790253: '(address,bool,address)', + 1815506290: '(address,address,uint)', + 7426238: '(address,address,string)', + 4070990470: '(address,address,bool)', + 25986242: '(address,address,address)', + 1554033982: '(uint,uint,uint,uint)', + 2024634892: '(uint,uint,uint,string)', + 1683143115: '(uint,uint,uint,bool)', + 3766828905: '(uint,uint,uint,address)', + 949229117: '(uint,uint,string,uint)', + 2080582194: '(uint,uint,string,string)', + 2989403910: '(uint,uint,string,bool)', + 1127384482: '(uint,uint,string,address)', + 1818524812: '(uint,uint,bool,uint)', + 4024028142: '(uint,uint,bool,string)', + 2495495089: '(uint,uint,bool,bool)', + 3776410703: '(uint,uint,bool,address)', + 1628154048: '(uint,uint,address,uint)', + 3600994782: '(uint,uint,address,string)', + 2833785006: '(uint,uint,address,bool)', + 3398671136: '(uint,uint,address,address)', + 3221501959: '(uint,string,uint,uint)', + 2730232985: '(uint,string,uint,string)', + 2270850606: '(uint,string,uint,bool)', + 2877020669: '(uint,string,uint,address)', + 1995203422: '(uint,string,string,uint)', + 1474103825: '(uint,string,string,string)', + 310782872: '(uint,string,string,bool)', + 3432549024: '(uint,string,string,address)', + 2763295359: '(uint,string,bool,uint)', + 2370346144: '(uint,string,bool,string)', + 1371286465: '(uint,string,bool,bool)', + 2037328032: '(uint,string,bool,address)', + 2565338099: '(uint,string,address,uint)', + 4170733439: '(uint,string,address,string)', + 4181720887: '(uint,string,address,bool)', + 2141537675: '(uint,string,address,address)', + 1451396516: '(uint,bool,uint,uint)', + 3906845782: '(uint,bool,uint,string)', + 3534472445: '(uint,bool,uint,bool)', + 1329595790: '(uint,bool,uint,address)', + 2438978344: '(uint,bool,string,uint)', + 2754870525: '(uint,bool,string,string)', + 879671495: '(uint,bool,string,bool)', + 1231956916: '(uint,bool,string,address)', + 3173363033: '(uint,bool,bool,uint)', + 831186331: '(uint,bool,bool,string)', + 1315722005: '(uint,bool,bool,bool)', + 1392910941: '(uint,bool,bool,address)', + 1102442299: '(uint,bool,address,uint)', + 2721084958: '(uint,bool,address,string)', + 2449150530: '(uint,bool,address,bool)', + 2263728396: '(uint,bool,address,address)', + 3399106228: '(uint,address,uint,uint)', + 1054063912: '(uint,address,uint,string)', + 435581801: '(uint,address,uint,bool)', + 4256361684: '(uint,address,uint,address)', + 2697204968: '(uint,address,string,uint)', + 2373420580: '(uint,address,string,string)', + 581204390: '(uint,address,string,bool)', + 3420819197: '(uint,address,string,address)', + 2064181483: '(uint,address,bool,uint)', + 1676730946: '(uint,address,bool,string)', + 2116501773: '(uint,address,bool,bool)', + 3056677012: '(uint,address,bool,address)', + 2587672470: '(uint,address,address,uint)', + 2034490470: '(uint,address,address,string)', + 22350596: '(uint,address,address,bool)', + 1430734329: '(uint,address,address,address)', + 149837414: '(string,uint,uint,uint)', + 2773406909: '(string,uint,uint,string)', + 4147936829: '(string,uint,uint,bool)', + 3201771711: '(string,uint,uint,address)', + 2697245221: '(string,uint,string,uint)', + 1821956834: '(string,uint,string,string)', + 3919545039: '(string,uint,string,bool)', + 3144824297: '(string,uint,string,address)', + 1427009269: '(string,uint,bool,uint)', + 1993105508: '(string,uint,bool,string)', + 3816813520: '(string,uint,bool,bool)', + 3847527825: '(string,uint,bool,address)', + 1481210622: '(string,uint,address,uint)', + 844415720: '(string,uint,address,string)', + 285649143: '(string,uint,address,bool)', + 3939013249: '(string,uint,address,address)', + 3587119056: '(string,string,uint,uint)', + 2366909661: '(string,string,uint,string)', + 3864418506: '(string,string,uint,bool)', + 1565476480: '(string,string,uint,address)', + 2681211381: '(string,string,string,uint)', + 3731419658: '(string,string,string,string)', + 739726573: '(string,string,string,bool)', + 1834430276: '(string,string,string,address)', + 2256636538: '(string,string,bool,uint)', + 1585754346: '(string,string,bool,string)', + 1081628777: '(string,string,bool,bool)', + 3279013851: '(string,string,bool,address)', + 1250010474: '(string,string,address,uint)', + 3944480640: '(string,string,address,string)', + 1556958775: '(string,string,address,bool)', + 1134328815: '(string,string,address,address)', + 1572859960: '(string,bool,uint,uint)', + 1119461927: '(string,bool,uint,string)', + 1019590099: '(string,bool,uint,bool)', + 1909687565: '(string,bool,uint,address)', + 885731469: '(string,bool,string,uint)', + 2821114603: '(string,bool,string,string)', + 1066037277: '(string,bool,string,bool)', + 3764542249: '(string,bool,string,address)', + 2155164136: '(string,bool,bool,uint)', + 2636305885: '(string,bool,bool,string)', + 2304440517: '(string,bool,bool,bool)', + 1905304873: '(string,bool,bool,address)', + 685723286: '(string,bool,address,uint)', + 764294052: '(string,bool,address,string)', + 2508990662: '(string,bool,address,bool)', + 870964509: '(string,bool,address,address)', + 3668153533: '(string,address,uint,uint)', + 1280700980: '(string,address,uint,string)', + 1522647356: '(string,address,uint,bool)', + 2741431424: '(string,address,uint,address)', + 2405583849: '(string,address,string,uint)', + 609847026: '(string,address,string,string)', + 1595265676: '(string,address,string,bool)', + 2864486961: '(string,address,string,address)', + 3318856587: '(string,address,bool,uint)', + 72663161: '(string,address,bool,string)', + 2038975531: '(string,address,bool,bool)', + 573965245: '(string,address,bool,address)', + 1857524797: '(string,address,address,uint)', + 2148146279: '(string,address,address,string)', + 3047013728: '(string,address,address,bool)', + 3985582326: '(string,address,address,address)', + 853517604: '(bool,uint,uint,uint)', + 3657852616: '(bool,uint,uint,string)', + 2753397214: '(bool,uint,uint,bool)', + 4049711649: '(bool,uint,uint,address)', + 1098907931: '(bool,uint,string,uint)', + 3542771016: '(bool,uint,string,string)', + 2446522387: '(bool,uint,string,bool)', + 2781285673: '(bool,uint,string,address)', + 3554563475: '(bool,uint,bool,uint)', + 3067439572: '(bool,uint,bool,string)', + 2650928961: '(bool,uint,bool,bool)', + 1114097656: '(bool,uint,bool,address)', + 3399820138: '(bool,uint,address,uint)', + 403247937: '(bool,uint,address,string)', + 1705899016: '(bool,uint,address,bool)', + 2318373034: '(bool,uint,address,address)', + 2387273838: '(bool,string,uint,uint)', + 2007084013: '(bool,string,uint,string)', + 549177775: '(bool,string,uint,bool)', + 1529002296: '(bool,string,uint,address)', + 1574643090: '(bool,string,string,uint)', + 392356650: '(bool,string,string,string)', + 508266469: '(bool,string,string,bool)', + 2547225816: '(bool,string,string,address)', + 2372902053: '(bool,string,bool,uint)', + 1211958294: '(bool,string,bool,string)', + 3697185627: '(bool,string,bool,bool)', + 1401816747: '(bool,string,bool,address)', + 453743963: '(bool,string,address,uint)', + 316065672: '(bool,string,address,string)', + 1842623690: '(bool,string,address,bool)', + 724244700: '(bool,string,address,address)', + 1181212302: '(bool,bool,uint,uint)', + 1348569399: '(bool,bool,uint,string)', + 2874982852: '(bool,bool,uint,bool)', + 201299213: '(bool,bool,uint,address)', + 395003525: '(bool,bool,string,uint)', + 1830717265: '(bool,bool,string,string)', + 3092715066: '(bool,bool,string,bool)', + 4188875657: '(bool,bool,string,address)', + 3259532109: '(bool,bool,bool,uint)', + 719587540: '(bool,bool,bool,string)', + 992632032: '(bool,bool,bool,bool)', + 2352126746: '(bool,bool,bool,address)', + 1620281063: '(bool,bool,address,uint)', + 2695133539: '(bool,bool,address,string)', + 3231908568: '(bool,bool,address,bool)', + 4102557348: '(bool,bool,address,address)', + 2617143996: '(bool,address,uint,uint)', + 2691192883: '(bool,address,uint,string)', + 4002252402: '(bool,address,uint,bool)', + 1760647349: '(bool,address,uint,address)', + 194640930: '(bool,address,string,uint)', + 2805734838: '(bool,address,string,string)', + 3804222987: '(bool,address,string,bool)', + 1870422078: '(bool,address,string,address)', + 1287000017: '(bool,address,bool,uint)', + 1248250676: '(bool,address,bool,string)', + 1788626827: '(bool,address,bool,bool)', + 474063670: '(bool,address,bool,address)', + 1384430956: '(bool,address,address,uint)', + 3625099623: '(bool,address,address,string)', + 1180699616: '(bool,address,address,bool)', + 487903233: '(bool,address,address,address)', + 1024368100: '(address,uint,uint,uint)', + 2301889963: '(address,uint,uint,string)', + 3964381346: '(address,uint,uint,bool)', + 519451700: '(address,uint,uint,address)', + 4111650715: '(address,uint,string,uint)', + 2119616147: '(address,uint,string,string)', + 2751614737: '(address,uint,string,bool)', + 3698927108: '(address,uint,string,address)', + 1770996626: '(address,uint,bool,uint)', + 2391690869: '(address,uint,bool,string)', + 4272018778: '(address,uint,bool,bool)', + 602229106: '(address,uint,bool,address)', + 2782496616: '(address,uint,address,uint)', + 1567749022: '(address,uint,address,string)', + 4051804649: '(address,uint,address,bool)', + 3961816175: '(address,uint,address,address)', + 2764647008: '(address,string,uint,uint)', + 1561552329: '(address,string,uint,string)', + 2116357467: '(address,string,uint,bool)', + 3755464715: '(address,string,uint,address)', + 2706362425: '(address,string,string,uint)', + 1560462603: '(address,string,string,string)', + 900007711: '(address,string,string,bool)', + 2689478535: '(address,string,string,address)', + 3877655068: '(address,string,bool,uint)', + 3154862590: '(address,string,bool,string)', + 1595759775: '(address,string,bool,bool)', + 542667202: '(address,string,bool,address)', + 2350461865: '(address,string,address,uint)', + 4158874181: '(address,string,address,string)', + 233909110: '(address,string,address,bool)', + 221706784: '(address,string,address,address)', + 3255869470: '(address,bool,uint,uint)', + 2606272204: '(address,bool,uint,string)', + 2244855215: '(address,bool,uint,bool)', + 227337758: '(address,bool,uint,address)', + 2652011374: '(address,bool,string,uint)', + 1197235251: '(address,bool,string,string)', + 1353532957: '(address,bool,string,bool)', + 436029782: '(address,bool,string,address)', + 3484780374: '(address,bool,bool,uint)', + 3754205928: '(address,bool,bool,string)', + 3401856121: '(address,bool,bool,bool)', + 3476636805: '(address,bool,bool,address)', + 3698398930: '(address,bool,address,uint)', + 769095910: '(address,bool,address,string)', + 2801077007: '(address,bool,address,bool)', + 1711502813: '(address,bool,address,address)', + 1425929188: '(address,address,uint,uint)', + 2647731885: '(address,address,uint,string)', + 3270936812: '(address,address,uint,bool)', + 3603321462: '(address,address,uint,address)', + 69767936: '(address,address,string,uint)', + 566079269: '(address,address,string,string)', + 1863997774: '(address,address,string,bool)', + 2406706454: '(address,address,string,address)', + 2513854225: '(address,address,bool,uint)', + 2858762440: '(address,address,bool,string)', + 752096074: '(address,address,bool,bool)', + 2669396846: '(address,address,bool,address)', + 3982404743: '(address,address,address,uint)', + 4161329696: '(address,address,address,string)', + 238520724: '(address,address,address,bool)', + 1717301556: '(address,address,address,address)' +} diff --git a/libs/remix-lib/src/web3Provider/web3VmProvider.ts b/libs/remix-lib/src/web3Provider/web3VmProvider.ts index 9472b81372..6e5eeb5571 100644 --- a/libs/remix-lib/src/web3Provider/web3VmProvider.ts +++ b/libs/remix-lib/src/web3Provider/web3VmProvider.ts @@ -208,20 +208,17 @@ export class Web3VmProvider { error: data.error === false ? undefined : data.error } this.vmTraces[this.processingHash].structLogs.push(step) - if (step.op === 'STATICCALL' && step.stack[step.stack.length - 2] === "0x000000000000000000000000000000000000000000636f6e736f6c652e6c6f67") { + // Track hardhat console.log call + if (step.op === 'STATICCALL' && step.stack[step.stack.length - 2] === '0x000000000000000000000000000000000000000000636f6e736f6c652e6c6f67') { const stackLength = step.stack.length - const address = step.stack[stackLength-2] - const payloadStart = parseInt(step.stack[stackLength-3], 16) + const payloadStart = parseInt(step.stack[stackLength - 3], 16) const memory = step.memory.join('') - const payloadLength = parseInt(step.stack[stackLength-4], 16) - console.log('payloadLength in pushTrace--->', payloadLength) - const payload = memory.substring(payloadStart*2, payloadStart*2 + payloadLength) - console.log('memory payload in pushTrace--->', payload) + const payload = memory.substring(payloadStart * 2, memory.length) const fnselector = parseInt('0x' + payload.substring(0, 8)) const iface = new ethers.utils.Interface([`function log${ConsoleLogs[fnselector]} view`]) - console.log('iface--->', iface) - const functionDesc = iface.getFunction('log') - console.log('---->', iface.decodeFunctionData(functionDesc, '0x' + payload)) + const functionDesc = iface.getFunction(`log${ConsoleLogs[fnselector]}`) + const consoleArgs = iface.decodeFunctionData(functionDesc, '0x' + payload) + console.log(consoleArgs) } if (step.op === 'CREATE' || step.op === 'CALL') { From 0f847cfbbfb0645c3873f3852e018098b949e112 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Wed, 11 Aug 2021 13:40:21 +0530 Subject: [PATCH 04/13] get hardhat logs for tx hash method --- apps/remix-ide/src/blockchain/blockchain.js | 2 ++ libs/remix-lib/src/web3Provider/web3VmProvider.ts | 5 ++++- libs/remix-simulator/src/methods/transactions.ts | 6 ++++++ libs/remix-simulator/src/provider.ts | 9 +++++++++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/apps/remix-ide/src/blockchain/blockchain.js b/apps/remix-ide/src/blockchain/blockchain.js index 0ef7a888d4..4f5e0ffac7 100644 --- a/apps/remix-ide/src/blockchain/blockchain.js +++ b/apps/remix-ide/src/blockchain/blockchain.js @@ -487,6 +487,8 @@ class Blockchain { let execResult let returnValue = null if (isVM) { + const hhlogs = await this.web3().eth.getHHLogsForTx(txResult.transactionHash) + console.log('hhLogs--2->', hhlogs) execResult = await this.web3().eth.getExecutionResultFromSimulator(txResult.transactionHash) if (execResult) { // if it's not the VM, we don't have return value. We only have the transaction, and it does not contain the return value. diff --git a/libs/remix-lib/src/web3Provider/web3VmProvider.ts b/libs/remix-lib/src/web3Provider/web3VmProvider.ts index 6e5eeb5571..923c4cf90d 100644 --- a/libs/remix-lib/src/web3Provider/web3VmProvider.ts +++ b/libs/remix-lib/src/web3Provider/web3VmProvider.ts @@ -11,6 +11,7 @@ export class Web3VmProvider { vmTraces txs txsReceipt + hhLogs processingHash processingAddress processingIndex @@ -43,6 +44,7 @@ export class Web3VmProvider { this.vmTraces = {} this.txs = {} this.txsReceipt = {} + this.hhLogs = {} this.processingHash = null this.processingAddress = null this.processingIndex = null @@ -218,7 +220,8 @@ export class Web3VmProvider { const iface = new ethers.utils.Interface([`function log${ConsoleLogs[fnselector]} view`]) const functionDesc = iface.getFunction(`log${ConsoleLogs[fnselector]}`) const consoleArgs = iface.decodeFunctionData(functionDesc, '0x' + payload) - console.log(consoleArgs) + this.hhLogs[this.processingHash] = this.hhLogs[this.processingHash] ? this.hhLogs[this.processingHash] : [] + this.hhLogs[this.processingHash].push(consoleArgs) } if (step.op === 'CREATE' || step.op === 'CALL') { diff --git a/libs/remix-simulator/src/methods/transactions.ts b/libs/remix-simulator/src/methods/transactions.ts index 2ea3d11d54..fe8c17a275 100644 --- a/libs/remix-simulator/src/methods/transactions.ts +++ b/libs/remix-simulator/src/methods/transactions.ts @@ -57,6 +57,7 @@ export class Transactions { eth_getTransactionByBlockHashAndIndex: this.eth_getTransactionByBlockHashAndIndex.bind(this), eth_getTransactionByBlockNumberAndIndex: this.eth_getTransactionByBlockNumberAndIndex.bind(this), eth_getExecutionResultFromSimulator: this.eth_getExecutionResultFromSimulator.bind(this), + eth_getHHLogsForTx: this.eth_getHHLogsForTx.bind(this), eth_getHashFromTagBySimulator: this.eth_getHashFromTagBySimulator.bind(this) } } @@ -83,6 +84,11 @@ export class Transactions { cb(null, this.vmContext.exeResults[txHash]) } + eth_getHHLogsForTx (payload, cb) { + const txHash = payload.params[0] + cb(null, this.vmContext.currentVm.web3vm.hhLogs[txHash]) + } + eth_getTransactionReceipt (payload, cb) { this.vmContext.web3().eth.getTransactionReceipt(payload.params[0], (error, receipt) => { if (error) { diff --git a/libs/remix-simulator/src/provider.ts b/libs/remix-simulator/src/provider.ts index 152976227a..3bbdadaa82 100644 --- a/libs/remix-simulator/src/provider.ts +++ b/libs/remix-simulator/src/provider.ts @@ -103,6 +103,15 @@ export function extend (web3) { })) } + if (!(web3.eth && web3.eth.getHHLogsForTx)) { + methods.push(new web3.extend.Method({ + name: 'getHHLogsForTx', + call: 'eth_getHHLogsForTx', + inputFormatter: [null], + params: 1 + })) + } + if (!(web3.eth && web3.eth.getHashFromTagBySimulator)) { methods.push(new web3.extend.Method({ name: 'getHashFromTagBySimulator', From f3f94bd3f95b6c69f5f1af95a492a50b110d62f7 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Wed, 11 Aug 2021 19:58:10 +0530 Subject: [PATCH 05/13] blockchain as a plugin --- apps/remix-ide/src/app.js | 3 ++- apps/remix-ide/src/blockchain/blockchain.js | 14 +++++++++++++- apps/remix-ide/src/remixAppManager.js | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/apps/remix-ide/src/app.js b/apps/remix-ide/src/app.js index 67ede9b1bd..d6ecdee7e4 100644 --- a/apps/remix-ide/src/app.js +++ b/apps/remix-ide/src/app.js @@ -306,6 +306,7 @@ Please make a backup of your contracts and start using http://remix.ethereum.org const contextualListener = new ContextualListener({ editor }) engine.register([ + blockchain, contentImport, themeModule, editor, @@ -481,7 +482,7 @@ Please make a backup of your contracts and start using http://remix.ethereum.org await appManager.activatePlugin(['sidePanel']) // activating host plugin separately await appManager.activatePlugin(['home']) await appManager.activatePlugin(['settings']) - await appManager.activatePlugin(['hiddenPanel', 'pluginManager', 'filePanel', 'contextualListener', 'terminal', 'fetchAndCompile', 'contentImport']) + await appManager.activatePlugin(['hiddenPanel', 'pluginManager', 'filePanel', 'contextualListener', 'terminal', 'blockchain', 'fetchAndCompile', 'contentImport']) // Set workspace after initial activation if (Array.isArray(workspace)) { diff --git a/apps/remix-ide/src/blockchain/blockchain.js b/apps/remix-ide/src/blockchain/blockchain.js index 4f5e0ffac7..c310298f54 100644 --- a/apps/remix-ide/src/blockchain/blockchain.js +++ b/apps/remix-ide/src/blockchain/blockchain.js @@ -1,4 +1,5 @@ import Web3 from 'web3' +import { Plugin } from '@remixproject/engine' import { toBuffer, addHexPrefix } from 'ethereumjs-util' import { waterfall } from 'async' import { EventEmitter } from 'events' @@ -9,10 +10,20 @@ import NodeProvider from './providers/node.js' import { execution, EventManager, helpers } from '@remix-project/remix-lib' const { txFormat, txExecution, typeConversion, txListener: Txlistener, TxRunner, TxRunnerWeb3, txHelper } = execution const { txResultHelper: resultToRemixTx } = helpers +const packageJson = require('../../../../package.json') + +const profile = { + name: 'blockchain', + displayName: 'Blockchain', + description: 'Blockchain - Logic', + methods: [], + version: packageJson.version +} -class Blockchain { +class Blockchain extends Plugin { // NOTE: the config object will need to be refactored out in remix-lib constructor (config) { + super(profile) this.event = new EventManager() this.executionContext = new ExecutionContext() @@ -489,6 +500,7 @@ class Blockchain { if (isVM) { const hhlogs = await this.web3().eth.getHHLogsForTx(txResult.transactionHash) console.log('hhLogs--2->', hhlogs) + this.call('terminal', 'log', { type: 'info', value: hhlogs }) execResult = await this.web3().eth.getExecutionResultFromSimulator(txResult.transactionHash) if (execResult) { // if it's not the VM, we don't have return value. We only have the transaction, and it does not contain the return value. diff --git a/apps/remix-ide/src/remixAppManager.js b/apps/remix-ide/src/remixAppManager.js index 45bc5a7421..d58f6403a9 100644 --- a/apps/remix-ide/src/remixAppManager.js +++ b/apps/remix-ide/src/remixAppManager.js @@ -8,7 +8,7 @@ const _paq = window._paq = window._paq || [] const requiredModules = [ // services + layout views + system views 'manager', 'compilerArtefacts', 'compilerMetadata', 'contextualListener', 'editor', 'offsetToLineColumnConverter', 'network', 'theme', - 'fileManager', 'contentImport', 'web3Provider', 'scriptRunner', 'fetchAndCompile', 'mainPanel', 'hiddenPanel', 'sidePanel', 'menuicons', + 'fileManager', 'contentImport', 'blockchain', 'web3Provider', 'scriptRunner', 'fetchAndCompile', 'mainPanel', 'hiddenPanel', 'sidePanel', 'menuicons', 'filePanel', 'terminal', 'settings', 'pluginManager', 'tabs', 'udapp', 'dGitProvider'] const dependentModules = ['git', 'hardhat'] // module which shouldn't be manually activated (e.g git is activated by remixd) From ac82d7396087c7342f2f9f0df3d60ae59ab0c3fc Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Thu, 12 Aug 2021 11:10:50 +0530 Subject: [PATCH 06/13] show hh consoles in remix terminal --- apps/remix-ide/src/blockchain/blockchain.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/remix-ide/src/blockchain/blockchain.js b/apps/remix-ide/src/blockchain/blockchain.js index c310298f54..42e2d2c960 100644 --- a/apps/remix-ide/src/blockchain/blockchain.js +++ b/apps/remix-ide/src/blockchain/blockchain.js @@ -499,8 +499,13 @@ class Blockchain extends Plugin { let returnValue = null if (isVM) { const hhlogs = await this.web3().eth.getHHLogsForTx(txResult.transactionHash) - console.log('hhLogs--2->', hhlogs) - this.call('terminal', 'log', { type: 'info', value: hhlogs }) + if (hhlogs && hhlogs.length) { + let finalLogs = 'Console.log:\n' + for (const log of hhlogs) { + finalLogs = finalLogs + log.join('') + '\n' + } + this.call('terminal', 'log', { type: 'info', value: finalLogs }) + } execResult = await this.web3().eth.getExecutionResultFromSimulator(txResult.transactionHash) if (execResult) { // if it's not the VM, we don't have return value. We only have the transaction, and it does not contain the return value. From 5c0683efc4c0b11ec5f5d982375c399e99a04f15 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Thu, 12 Aug 2021 13:03:45 +0530 Subject: [PATCH 07/13] handle contract with no console --- apps/remix-ide/src/blockchain/blockchain.js | 2 +- libs/remix-simulator/src/methods/transactions.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/remix-ide/src/blockchain/blockchain.js b/apps/remix-ide/src/blockchain/blockchain.js index 42e2d2c960..5743a657e1 100644 --- a/apps/remix-ide/src/blockchain/blockchain.js +++ b/apps/remix-ide/src/blockchain/blockchain.js @@ -500,7 +500,7 @@ class Blockchain extends Plugin { if (isVM) { const hhlogs = await this.web3().eth.getHHLogsForTx(txResult.transactionHash) if (hhlogs && hhlogs.length) { - let finalLogs = 'Console.log:\n' + let finalLogs = 'console.log:\n' for (const log of hhlogs) { finalLogs = finalLogs + log.join('') + '\n' } diff --git a/libs/remix-simulator/src/methods/transactions.ts b/libs/remix-simulator/src/methods/transactions.ts index fe8c17a275..91f1f00a30 100644 --- a/libs/remix-simulator/src/methods/transactions.ts +++ b/libs/remix-simulator/src/methods/transactions.ts @@ -86,7 +86,7 @@ export class Transactions { eth_getHHLogsForTx (payload, cb) { const txHash = payload.params[0] - cb(null, this.vmContext.currentVm.web3vm.hhLogs[txHash]) + cb(null, this.vmContext.currentVm.web3vm.hhLogs[txHash] ? this.vmContext.currentVm.web3vm.hhLogs[txHash] : []) } eth_getTransactionReceipt (payload, cb) { From 50aa68f21a43135c76c2a0ba18d39a41fbeb3eda Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Mon, 16 Aug 2021 18:45:39 +0530 Subject: [PATCH 08/13] handle uint from console log --- .../src/web3Provider/web3VmProvider.ts | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/libs/remix-lib/src/web3Provider/web3VmProvider.ts b/libs/remix-lib/src/web3Provider/web3VmProvider.ts index 923c4cf90d..350ec0b7cb 100644 --- a/libs/remix-lib/src/web3Provider/web3VmProvider.ts +++ b/libs/remix-lib/src/web3Provider/web3VmProvider.ts @@ -215,11 +215,20 @@ export class Web3VmProvider { const stackLength = step.stack.length const payloadStart = parseInt(step.stack[stackLength - 3], 16) const memory = step.memory.join('') - const payload = memory.substring(payloadStart * 2, memory.length) - const fnselector = parseInt('0x' + payload.substring(0, 8)) - const iface = new ethers.utils.Interface([`function log${ConsoleLogs[fnselector]} view`]) - const functionDesc = iface.getFunction(`log${ConsoleLogs[fnselector]}`) - const consoleArgs = iface.decodeFunctionData(functionDesc, '0x' + payload) + let payload = memory.substring(payloadStart * 2, memory.length) + const fnselectorStr = payload.substring(0, 8) + const fnselectorStrInHex = '0x' + fnselectorStr + const fnselector = parseInt(fnselectorStrInHex) + const fnArgs = ConsoleLogs[fnselector] + const iface = new ethers.utils.Interface([`function log${fnArgs} view`]) + const functionDesc = iface.getFunction(`log${fnArgs}`) + const sigHash = iface.getSighash(`log${fnArgs}`) + if(fnArgs.includes('uint') && sigHash !== fnselectorStrInHex) { + payload = payload.replace(fnselectorStr, sigHash) + } else { + payload = '0x' + payload + } + const consoleArgs = iface.decodeFunctionData(functionDesc, payload) this.hhLogs[this.processingHash] = this.hhLogs[this.processingHash] ? this.hhLogs[this.processingHash] : [] this.hhLogs[this.processingHash].push(consoleArgs) } From bb400a432fdb1e5ec7420fa1ddd122d493d51c97 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Mon, 16 Aug 2021 18:49:48 +0530 Subject: [PATCH 09/13] linting fix --- libs/remix-lib/src/web3Provider/web3VmProvider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/remix-lib/src/web3Provider/web3VmProvider.ts b/libs/remix-lib/src/web3Provider/web3VmProvider.ts index 350ec0b7cb..ff2c5ac9e8 100644 --- a/libs/remix-lib/src/web3Provider/web3VmProvider.ts +++ b/libs/remix-lib/src/web3Provider/web3VmProvider.ts @@ -223,7 +223,7 @@ export class Web3VmProvider { const iface = new ethers.utils.Interface([`function log${fnArgs} view`]) const functionDesc = iface.getFunction(`log${fnArgs}`) const sigHash = iface.getSighash(`log${fnArgs}`) - if(fnArgs.includes('uint') && sigHash !== fnselectorStrInHex) { + if (fnArgs.includes('uint') && sigHash !== fnselectorStrInHex) { payload = payload.replace(fnselectorStr, sigHash) } else { payload = '0x' + payload From b3b77e4a5d79f4f95bfe0c8950363ab1b8eab5e4 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Mon, 16 Aug 2021 19:33:03 +0530 Subject: [PATCH 10/13] support nodejs log formatting --- apps/remix-ide/src/blockchain/blockchain.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/remix-ide/src/blockchain/blockchain.js b/apps/remix-ide/src/blockchain/blockchain.js index 5743a657e1..db35c595ab 100644 --- a/apps/remix-ide/src/blockchain/blockchain.js +++ b/apps/remix-ide/src/blockchain/blockchain.js @@ -3,6 +3,7 @@ import { Plugin } from '@remixproject/engine' import { toBuffer, addHexPrefix } from 'ethereumjs-util' import { waterfall } from 'async' import { EventEmitter } from 'events' +import { format } from 'util' import { ExecutionContext } from './execution-context' import VMProvider from './providers/vm.js' import InjectedProvider from './providers/injected.js' @@ -502,7 +503,13 @@ class Blockchain extends Plugin { if (hhlogs && hhlogs.length) { let finalLogs = 'console.log:\n' for (const log of hhlogs) { - finalLogs = finalLogs + log.join('') + '\n' + let formattedLog + if (typeof log[0] === 'string' && (log[0].includes('%s') || log[0].includes('%d'))) { + formattedLog = format(log[0], ...log.slice(1)) + } else { + formattedLog = log.join('') + } + finalLogs = finalLogs + formattedLog + '\n' } this.call('terminal', 'log', { type: 'info', value: finalLogs }) } From 701012bbd837607be9f7d234f8087696b1ef20ab Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Tue, 17 Aug 2021 17:57:15 +0530 Subject: [PATCH 11/13] space between --- apps/remix-ide/src/blockchain/blockchain.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/remix-ide/src/blockchain/blockchain.js b/apps/remix-ide/src/blockchain/blockchain.js index db35c595ab..61c10254aa 100644 --- a/apps/remix-ide/src/blockchain/blockchain.js +++ b/apps/remix-ide/src/blockchain/blockchain.js @@ -507,7 +507,7 @@ class Blockchain extends Plugin { if (typeof log[0] === 'string' && (log[0].includes('%s') || log[0].includes('%d'))) { formattedLog = format(log[0], ...log.slice(1)) } else { - formattedLog = log.join('') + formattedLog = log.join(' ') } finalLogs = finalLogs + formattedLog + '\n' } From e6e96e5ed5fc823ef727c8a8ad71054153906761 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Tue, 17 Aug 2021 18:39:10 +0530 Subject: [PATCH 12/13] comment --- apps/remix-ide/src/blockchain/blockchain.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/remix-ide/src/blockchain/blockchain.js b/apps/remix-ide/src/blockchain/blockchain.js index 61c10254aa..5519f4d829 100644 --- a/apps/remix-ide/src/blockchain/blockchain.js +++ b/apps/remix-ide/src/blockchain/blockchain.js @@ -504,6 +504,10 @@ class Blockchain extends Plugin { let finalLogs = 'console.log:\n' for (const log of hhlogs) { let formattedLog + // Hardhat implements the same formatting options that can be found in Node.js' console.log, + // which in turn uses util.format: https://nodejs.org/dist/latest-v12.x/docs/api/util.html#util_util_format_format_args + // For example: console.log("Name: %s, Age: %d", remix, 6) will log 'Name: remix, Age: 6' + // We check first arg to determine if 'util.format' is needed if (typeof log[0] === 'string' && (log[0].includes('%s') || log[0].includes('%d'))) { formattedLog = format(log[0], ...log.slice(1)) } else { From 3a8ae483c018e2a505fe62368c2d20e2904b94f4 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Tue, 17 Aug 2021 18:49:31 +0530 Subject: [PATCH 13/13] linting fix --- apps/remix-ide/src/blockchain/blockchain.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/remix-ide/src/blockchain/blockchain.js b/apps/remix-ide/src/blockchain/blockchain.js index 5519f4d829..5a87cb6ad1 100644 --- a/apps/remix-ide/src/blockchain/blockchain.js +++ b/apps/remix-ide/src/blockchain/blockchain.js @@ -504,7 +504,7 @@ class Blockchain extends Plugin { let finalLogs = 'console.log:\n' for (const log of hhlogs) { let formattedLog - // Hardhat implements the same formatting options that can be found in Node.js' console.log, + // Hardhat implements the same formatting options that can be found in Node.js' console.log, // which in turn uses util.format: https://nodejs.org/dist/latest-v12.x/docs/api/util.html#util_util_format_format_args // For example: console.log("Name: %s, Age: %d", remix, 6) will log 'Name: remix, Age: 6' // We check first arg to determine if 'util.format' is needed