code: func (api *PrivateDebugAPI) TraceTransaction(ctx context.Context, hash common.Hash, config *TraceConfig) (interface{}, error) {
  	// Retrieve the transaction and assemble its EVM context
  	tx, blockHash, _, index := rawdb.ReadTransaction(api.eth.ChainDb(), hash)
  	if tx == nil {
  		return nil, fmt.Errorf("transaction %#x not found", hash)
  	}
  	reexec := defaultTraceReexec
  	if config != nil && config.Reexec != nil {
  		reexec = *config.Reexec
  	}
  	msg, vmctx, statedb, err := api.computeTxEnv(blockHash, int(index), reexec)
  	if err != nil {
  		return nil, err
  	}
  	// Trace the transaction and return
  	return api.traceTx(ctx, msg, vmctx, statedb, config)
  }
docs: // TraceTransaction returns the structured logs created during the execution of EVM
  // and returns them as a JSON object.