eth/tracers: more fork overrides in traceBlockToFile (#26655)
This change allows all post-Berlin forks to be specified as overrides for futureForkBlock in the config parameter for traceBlockToFile.
This commit is contained in:
		
							parent
							
								
									2def62b99b
								
							
						
					
					
						commit
						7d29fff415
					
				| @ -772,17 +772,9 @@ func (api *API) standardTraceBlockToFile(ctx context.Context, block *types.Block | ||||
| 	// actual specified block, not any preceding blocks that we have to go through
 | ||||
| 	// in order to obtain the state.
 | ||||
| 	// Therefore, it's perfectly valid to specify `"futureForkBlock": 0`, to enable `futureFork`
 | ||||
| 
 | ||||
| 	if config != nil && config.Overrides != nil { | ||||
| 		// Copy the config, to not screw up the main config
 | ||||
| 		// Note: the Clique-part is _not_ deep copied
 | ||||
| 		chainConfigCopy := new(params.ChainConfig) | ||||
| 		*chainConfigCopy = *chainConfig | ||||
| 		chainConfig = chainConfigCopy | ||||
| 		if berlin := config.Config.Overrides.BerlinBlock; berlin != nil { | ||||
| 			chainConfig.BerlinBlock = berlin | ||||
| 			canon = false | ||||
| 		} | ||||
| 		// Note: This copies the config, to not screw up the main config
 | ||||
| 		chainConfig, canon = overrideConfig(chainConfig, config.Overrides) | ||||
| 	} | ||||
| 	for i, tx := range block.Transactions() { | ||||
| 		// Prepare the transaction for un-traced execution
 | ||||
| @ -1006,3 +998,48 @@ func APIs(backend Backend) []rpc.API { | ||||
| 		}, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // overrideConfig returns a copy of original with forks enabled by override enabled,
 | ||||
| // along with a boolean that indicates whether the copy is canonical (equivalent to the original).
 | ||||
| // Note: the Clique-part is _not_ deep copied
 | ||||
| func overrideConfig(original *params.ChainConfig, override *params.ChainConfig) (*params.ChainConfig, bool) { | ||||
| 	copy := new(params.ChainConfig) | ||||
| 	*copy = *original | ||||
| 	canon := true | ||||
| 
 | ||||
| 	// Apply forks (after Berlin) to the copy.
 | ||||
| 	if block := override.BerlinBlock; block != nil { | ||||
| 		copy.BerlinBlock = block | ||||
| 		canon = false | ||||
| 	} | ||||
| 	if block := override.LondonBlock; block != nil { | ||||
| 		copy.LondonBlock = block | ||||
| 		canon = false | ||||
| 	} | ||||
| 	if block := override.ArrowGlacierBlock; block != nil { | ||||
| 		copy.ArrowGlacierBlock = block | ||||
| 		canon = false | ||||
| 	} | ||||
| 	if block := override.GrayGlacierBlock; block != nil { | ||||
| 		copy.GrayGlacierBlock = block | ||||
| 		canon = false | ||||
| 	} | ||||
| 	if block := override.MergeNetsplitBlock; block != nil { | ||||
| 		copy.MergeNetsplitBlock = block | ||||
| 		canon = false | ||||
| 	} | ||||
| 	if timestamp := override.ShanghaiTime; timestamp != nil { | ||||
| 		copy.ShanghaiTime = timestamp | ||||
| 		canon = false | ||||
| 	} | ||||
| 	if timestamp := override.CancunTime; timestamp != nil { | ||||
| 		copy.CancunTime = timestamp | ||||
| 		canon = false | ||||
| 	} | ||||
| 	if timestamp := override.PragueTime; timestamp != nil { | ||||
| 		copy.PragueTime = timestamp | ||||
| 		canon = false | ||||
| 	} | ||||
| 
 | ||||
| 	return copy, canon | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user