diff --git a/apps/remix-ide/src/app.js b/apps/remix-ide/src/app.js index fca8897ec8..2b62254dab 100644 --- a/apps/remix-ide/src/app.js +++ b/apps/remix-ide/src/app.js @@ -310,6 +310,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, @@ -485,7 +486,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 0ef7a888d4..5a87cb6ad1 100644 --- a/apps/remix-ide/src/blockchain/blockchain.js +++ b/apps/remix-ide/src/blockchain/blockchain.js @@ -1,7 +1,9 @@ import Web3 from 'web3' +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' @@ -9,10 +11,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() @@ -487,6 +499,24 @@ class Blockchain { let execResult let returnValue = null if (isVM) { + const hhlogs = await this.web3().eth.getHHLogsForTx(txResult.transactionHash) + if (hhlogs && hhlogs.length) { + 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 { + formattedLog = log.join(' ') + } + finalLogs = finalLogs + formattedLog + '\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. 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) diff --git a/libs/remix-lib/src/helpers/hhconsoleSigs.ts b/libs/remix-lib/src/helpers/hhconsoleSigs.ts new file mode 100644 index 0000000000..1ae8955736 --- /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)' +} diff --git a/libs/remix-lib/src/web3Provider/web3VmProvider.ts b/libs/remix-lib/src/web3Provider/web3VmProvider.ts index b5d8ea4732..ff2c5ac9e8 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 @@ -9,6 +11,7 @@ export class Web3VmProvider { vmTraces txs txsReceipt + hhLogs processingHash processingAddress processingIndex @@ -41,6 +44,7 @@ export class Web3VmProvider { this.vmTraces = {} this.txs = {} this.txsReceipt = {} + this.hhLogs = {} this.processingHash = null this.processingAddress = null this.processingIndex = null @@ -206,6 +210,29 @@ export class Web3VmProvider { error: data.error === false ? undefined : data.error } this.vmTraces[this.processingHash].structLogs.push(step) + // Track hardhat console.log call + if (step.op === 'STATICCALL' && step.stack[step.stack.length - 2] === '0x000000000000000000000000000000000000000000636f6e736f6c652e6c6f67') { + const stackLength = step.stack.length + const payloadStart = parseInt(step.stack[stackLength - 3], 16) + const memory = step.memory.join('') + 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) + } + if (step.op === 'CREATE' || step.op === 'CALL') { if (step.op === 'CREATE') { this.processingAddress = '(Contract Creation - Step ' + this.processingIndex + ')' diff --git a/libs/remix-simulator/src/methods/transactions.ts b/libs/remix-simulator/src/methods/transactions.ts index 2ea3d11d54..91f1f00a30 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] ? 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',