@@ -14,6 +14,8 @@ import type {
14
14
HttpHeader ,
15
15
TracingConfigWithBuffers ,
16
16
} from "@nomicfoundation/edr" ;
17
+ import { privateToAddress } from "@ethereumjs/util" ;
18
+ import { precompileP256Verify } from "@nomicfoundation/edr" ;
17
19
import picocolors from "picocolors" ;
18
20
import debug from "debug" ;
19
21
import { EventEmitter } from "events" ;
@@ -192,6 +194,19 @@ export class EdrProviderWrapper
192
194
l1HardforkFromString ( ethereumsjsHardforkToEdrSpecId ( hardforkName ) )
193
195
) ;
194
196
197
+ for ( const account of config . genesisAccounts ) {
198
+ const privateKey = Uint8Array . from (
199
+ Buffer . from ( account . privateKey . slice ( 2 ) , "hex" )
200
+ ) ;
201
+
202
+ genesisState . push ( {
203
+ address : privateToAddress ( privateKey ) ,
204
+ balance : BigInt ( account . balance ) ,
205
+ nonce : 0n ,
206
+ storage : [ ] ,
207
+ } ) ;
208
+ }
209
+
195
210
const context = await getGlobalEdrContext ( ) ;
196
211
const provider = await context . createProvider (
197
212
GENERIC_CHAIN_TYPE ,
@@ -203,25 +218,31 @@ export class EdrProviderWrapper
203
218
bailOnTransactionFailure : config . throwOnTransactionFailures ,
204
219
blockGasLimit : BigInt ( config . blockGasLimit ) ,
205
220
chainId : BigInt ( config . chainId ) ,
206
- chains : Array . from ( config . chains , ( [ chainId , hardforkConfig ] ) => {
207
- return {
208
- chainId : BigInt ( chainId ) ,
209
- hardforks : Array . from (
210
- hardforkConfig . hardforkHistory ,
211
- ( [ hardfork , blockNumber ] ) => {
212
- return {
213
- blockNumber : BigInt ( blockNumber ) ,
214
- specId : ethereumsjsHardforkToEdrSpecId (
215
- getHardforkName ( hardfork )
216
- ) ,
217
- } ;
218
- }
219
- ) ,
220
- } ;
221
- } ) ,
221
+ chainOverrides : Array . from (
222
+ config . chains ,
223
+ ( [ chainId , hardforkConfig ] ) => {
224
+ return {
225
+ chainId : BigInt ( chainId ) ,
226
+ name : "Unknown" ,
227
+ hardforks : Array . from (
228
+ hardforkConfig . hardforkHistory ,
229
+ ( [ hardfork , blockNumber ] ) => {
230
+ return {
231
+ condition : { blockNumber : BigInt ( blockNumber ) } ,
232
+ hardfork : ethereumsjsHardforkToEdrSpecId (
233
+ getHardforkName ( hardfork )
234
+ ) ,
235
+ } ;
236
+ }
237
+ ) ,
238
+ } ;
239
+ }
240
+ ) ,
222
241
cacheDir : config . forkCachePath ,
223
242
coinbase : Buffer . from ( coinbase . slice ( 2 ) , "hex" ) ,
224
- enableRip7212 : config . enableRip7212 ,
243
+ precompileOverrides : config . enableRip7212
244
+ ? [ precompileP256Verify ( ) ]
245
+ : [ ] ,
225
246
fork,
226
247
genesisState,
227
248
hardfork : ethereumsjsHardforkToEdrSpecId ( hardforkName ) ,
@@ -239,16 +260,20 @@ export class EdrProviderWrapper
239
260
} ,
240
261
} ,
241
262
networkId : BigInt ( config . networkId ) ,
263
+ observability : { } ,
242
264
ownedAccounts : config . genesisAccounts . map ( ( account ) => {
243
- return {
244
- secretKey : account . privateKey ,
245
- balance : BigInt ( account . balance ) ,
246
- } ;
265
+ return account . privateKey ;
247
266
} ) ,
248
267
} ,
249
268
{
250
269
enable : loggerConfig . enabled ,
251
- decodeConsoleLogInputsCallback : ConsoleLogger . getDecodedLogs ,
270
+ decodeConsoleLogInputsCallback : ( inputs : ArrayBuffer [ ] ) => {
271
+ return ConsoleLogger . getDecodedLogs (
272
+ inputs . map ( ( input ) => {
273
+ return Buffer . from ( input ) ;
274
+ } )
275
+ ) ;
276
+ } ,
252
277
printLineCallback : ( message : string , replace : boolean ) => {
253
278
if ( replace ) {
254
279
replaceLastLineFn ( message ) ;
@@ -318,7 +343,7 @@ export class EdrProviderWrapper
318
343
const rawTraces = responseObject . traces ;
319
344
for ( const rawTrace of rawTraces ) {
320
345
// For other consumers in JS we need to marshall the entire trace over FFI
321
- const trace = rawTrace . trace ( ) ;
346
+ const trace = rawTrace . trace ;
322
347
323
348
// beforeTx event
324
349
if ( this . _node . _vm . events . listenerCount ( "beforeTx" ) > 0 ) {
@@ -421,8 +446,11 @@ export class EdrProviderWrapper
421
446
this . _callOverrideCallback = callback ;
422
447
423
448
await this . _provider . setCallOverrideCallback (
424
- async ( address : Buffer , data : Buffer ) => {
425
- return this . _callOverrideCallback ?.( address , data ) ;
449
+ async ( address : ArrayBuffer , data : ArrayBuffer ) => {
450
+ return this . _callOverrideCallback ?.(
451
+ Buffer . from ( address ) ,
452
+ Buffer . from ( data )
453
+ ) ;
426
454
}
427
455
) ;
428
456
}
0 commit comments