Merge branch 'master' into remixd_terminal

pull/1342/head
David Zagi 3 years ago committed by GitHub
commit de95647d1f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      apps/remix-ide/src/app.js
  2. 32
      apps/remix-ide/src/blockchain/blockchain.js
  3. 2
      apps/remix-ide/src/remixAppManager.js
  4. 379
      libs/remix-lib/src/helpers/hhconsoleSigs.ts
  5. 27
      libs/remix-lib/src/web3Provider/web3VmProvider.ts
  6. 6
      libs/remix-simulator/src/methods/transactions.ts
  7. 9
      libs/remix-simulator/src/provider.ts

@ -310,6 +310,7 @@ Please make a backup of your contracts and start using http://remix.ethereum.org
const contextualListener = new ContextualListener({ editor }) const contextualListener = new ContextualListener({ editor })
engine.register([ engine.register([
blockchain,
contentImport, contentImport,
themeModule, themeModule,
editor, 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(['sidePanel']) // activating host plugin separately
await appManager.activatePlugin(['home']) await appManager.activatePlugin(['home'])
await appManager.activatePlugin(['settings']) 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 // Set workspace after initial activation
if (Array.isArray(workspace)) { if (Array.isArray(workspace)) {

@ -1,7 +1,9 @@
import Web3 from 'web3' import Web3 from 'web3'
import { Plugin } from '@remixproject/engine'
import { toBuffer, addHexPrefix } from 'ethereumjs-util' import { toBuffer, addHexPrefix } from 'ethereumjs-util'
import { waterfall } from 'async' import { waterfall } from 'async'
import { EventEmitter } from 'events' import { EventEmitter } from 'events'
import { format } from 'util'
import { ExecutionContext } from './execution-context' import { ExecutionContext } from './execution-context'
import VMProvider from './providers/vm.js' import VMProvider from './providers/vm.js'
import InjectedProvider from './providers/injected.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' import { execution, EventManager, helpers } from '@remix-project/remix-lib'
const { txFormat, txExecution, typeConversion, txListener: Txlistener, TxRunner, TxRunnerWeb3, txHelper } = execution const { txFormat, txExecution, typeConversion, txListener: Txlistener, TxRunner, TxRunnerWeb3, txHelper } = execution
const { txResultHelper: resultToRemixTx } = helpers 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 // NOTE: the config object will need to be refactored out in remix-lib
constructor (config) { constructor (config) {
super(profile)
this.event = new EventManager() this.event = new EventManager()
this.executionContext = new ExecutionContext() this.executionContext = new ExecutionContext()
@ -487,6 +499,24 @@ class Blockchain {
let execResult let execResult
let returnValue = null let returnValue = null
if (isVM) { 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) execResult = await this.web3().eth.getExecutionResultFromSimulator(txResult.transactionHash)
if (execResult) { 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. // 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.

@ -8,7 +8,7 @@ const _paq = window._paq = window._paq || []
const requiredModules = [ // services + layout views + system views const requiredModules = [ // services + layout views + system views
'manager', 'compilerArtefacts', 'compilerMetadata', 'contextualListener', 'editor', 'offsetToLineColumnConverter', 'network', 'theme', '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'] '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) const dependentModules = ['git', 'hardhat'] // module which shouldn't be manually activated (e.g git is activated by remixd)

@ -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)'
}

@ -1,7 +1,9 @@
import { hexListFromBNs, formatMemory } from '../util' import { hexListFromBNs, formatMemory } from '../util'
import { normalizeHexAddress } from '../helpers/uiHelper' import { normalizeHexAddress } from '../helpers/uiHelper'
import { ConsoleLogs } from '../helpers/hhconsoleSigs'
import { toChecksumAddress, BN, bufferToHex, Address } from 'ethereumjs-util' import { toChecksumAddress, BN, bufferToHex, Address } from 'ethereumjs-util'
import Web3 from 'web3' import Web3 from 'web3'
import { ethers } from 'ethers'
export class Web3VmProvider { export class Web3VmProvider {
web3 web3
@ -9,6 +11,7 @@ export class Web3VmProvider {
vmTraces vmTraces
txs txs
txsReceipt txsReceipt
hhLogs
processingHash processingHash
processingAddress processingAddress
processingIndex processingIndex
@ -41,6 +44,7 @@ export class Web3VmProvider {
this.vmTraces = {} this.vmTraces = {}
this.txs = {} this.txs = {}
this.txsReceipt = {} this.txsReceipt = {}
this.hhLogs = {}
this.processingHash = null this.processingHash = null
this.processingAddress = null this.processingAddress = null
this.processingIndex = null this.processingIndex = null
@ -206,6 +210,29 @@ export class Web3VmProvider {
error: data.error === false ? undefined : data.error error: data.error === false ? undefined : data.error
} }
this.vmTraces[this.processingHash].structLogs.push(step) 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' || step.op === 'CALL') {
if (step.op === 'CREATE') { if (step.op === 'CREATE') {
this.processingAddress = '(Contract Creation - Step ' + this.processingIndex + ')' this.processingAddress = '(Contract Creation - Step ' + this.processingIndex + ')'

@ -57,6 +57,7 @@ export class Transactions {
eth_getTransactionByBlockHashAndIndex: this.eth_getTransactionByBlockHashAndIndex.bind(this), eth_getTransactionByBlockHashAndIndex: this.eth_getTransactionByBlockHashAndIndex.bind(this),
eth_getTransactionByBlockNumberAndIndex: this.eth_getTransactionByBlockNumberAndIndex.bind(this), eth_getTransactionByBlockNumberAndIndex: this.eth_getTransactionByBlockNumberAndIndex.bind(this),
eth_getExecutionResultFromSimulator: this.eth_getExecutionResultFromSimulator.bind(this), eth_getExecutionResultFromSimulator: this.eth_getExecutionResultFromSimulator.bind(this),
eth_getHHLogsForTx: this.eth_getHHLogsForTx.bind(this),
eth_getHashFromTagBySimulator: this.eth_getHashFromTagBySimulator.bind(this) eth_getHashFromTagBySimulator: this.eth_getHashFromTagBySimulator.bind(this)
} }
} }
@ -83,6 +84,11 @@ export class Transactions {
cb(null, this.vmContext.exeResults[txHash]) 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) { eth_getTransactionReceipt (payload, cb) {
this.vmContext.web3().eth.getTransactionReceipt(payload.params[0], (error, receipt) => { this.vmContext.web3().eth.getTransactionReceipt(payload.params[0], (error, receipt) => {
if (error) { if (error) {

@ -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)) { if (!(web3.eth && web3.eth.getHashFromTagBySimulator)) {
methods.push(new web3.extend.Method({ methods.push(new web3.extend.Method({
name: 'getHashFromTagBySimulator', name: 'getHashFromTagBySimulator',

Loading…
Cancel
Save