This commit is contained in:
Tim Williams 2018-06-21 14:36:39 -04:00 committed by Dustin Brickwood
parent e6fdff4860
commit de32947dcf
10 changed files with 280 additions and 68 deletions

View file

@ -13,8 +13,15 @@ import (
_ "github.com/lib/pq"
Rewards "github.com/ethereum/go-ethereum/consensus/ethash"
"github.com/ethereum/go-ethereum/shyfttracerinterface"
)
var IShyftTracer shyfttracerinterface.IShyftTracer
func SetIShyftTracer(st shyfttracerinterface.IShyftTracer) {
IShyftTracer = st
}
//SBlock type
type SBlock struct {
Hash string
@ -165,7 +172,7 @@ func SwriteTransactions(sqldb *sql.DB, tx *types.Transaction, blockHash common.H
Data: tx.Data(),
}
txHash := txData.TxHash.Hex()
MyTraceTransaction(txHash) //.chaindb_global
IShyftTracer.MyTraceTransaction(txHash) //.chaindb_global
from := txData.From.Hex()
blockHasher := txData.BlockHash
amount := txData.Amount.String()

View file

@ -1,60 +0,0 @@
package core
import (
"github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/common"
"fmt"
)
const (
// defaultTraceReexec is the number of blocks the tracer is willing to go back
// and reexecute to produce missing historical state necessary to run a specific
// trace.
defaultTraceReexec = uint64(128)
)
//var api *eth.PrivateDebugAPI
var EthereumObject interface{}
var Chaindb_global ethdb.Database
func SetChainDB(db ethdb.Database){
Chaindb_global = db
}
func MyTraceTransaction(hash string) (interface{}) {
//fmt.Println("THE stringed hash is in MYTRACETRANSACTION")
//fmt.Println(hash)
//fmt.Println(ethObjectInterface.GetEthObject())
common_hash := common.HexToHash(hash)
//fmt.Println("the chain db is in MyTraceTransaction")
//fmt.Println(Chaindb_global)
if Chaindb_global == nil {
return nil
}
tx, blockHash, _, index := GetTransaction(Chaindb_global, common_hash)
//reexec := defaultTraceReexec
//if config != nil && config.Reexec != nil {
// reexec = *config.Reexec
//}
//msg, vmctx, statedb, err := eth.api.computeTxEnv(blockHash, int(index), reexec)
if tx == nil {
fmt.Println("TRANSACTION NOT FOUND IN MyTraceTransaction +++++++++")
}
fmt.Println("the tx is ")
fmt.Println(tx)
fmt.Println(blockHash)
fmt.Println(index)
return 42
}
func setEthObject(ethobj interface{}){
EthereumObject = ethobj
}

View file

@ -330,7 +330,7 @@ func (api *PublicDebugAPI) DumpBlock(blockNr rpc.BlockNumber) (state.Dump, error
// PrivateDebugAPI is the collection of Ethereum full node APIs exposed over
// the private debugging endpoint.
type PrivateDebugAPI struct {
type PrivateDebugAPI struct {
config *params.ChainConfig
eth *Ethereum
}

View file

@ -532,6 +532,189 @@ func (api *PrivateDebugAPI) computeStateDB(block *types.Block, reexec uint64) (*
// TraceTransaction returns the structured logs created during the execution of EVM
// and returns them as a JSON object.
func (api *PrivateDebugAPI) TraceTransaction(ctx context.Context, hash common.Hash, config *TraceConfig) (interface{}, error) {
fmt.Println("TRACE TRANSACTION ++++++!+!+!+!+!+!+!+!+!+!+!+!++!")
_, file, no, ok := runtime.Caller(1)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(2)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(3)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(4)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(5)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(6)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(7)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(8)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(9)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(10)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(11)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(12)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(13)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(14)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(15)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(16)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(17)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(18)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(19)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(20)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(21)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(22)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(23)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(24)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(25)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(26)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(27)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(28)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(29)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(30)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(31)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(32)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(33)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(34)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(35)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(36)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(37)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(38)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(39)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(40)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
fmt.Println("////////////// ++++++++++++++++ /////////////////// Phantom *(!*!*!*!*!*!**!*!*")
_, file, no, ok = runtime.Caller(41)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(42)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(43)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
_, file, no, ok = runtime.Caller(44)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
fmt.Println("////////////// ++++++++++++++++ /////////////////// TraceTransaction *(!*!*!*!*!*!**!*!*")
_, file, no, ok = runtime.Caller(45)
if ok {
fmt.Printf("called from %s#%d\n", file, no)
}
// NOTE:SHYFT
fmt.Printf("\n\t[API_TRACER.GO api.config] %+v", api.config)
fmt.Printf("\n\t[API_TRACER.GO api.eth] %+v\n", api.eth)

View file

@ -51,7 +51,7 @@ import (
var BlockchainObject *core.BlockChain
var DebugApi *PrivateDebugAPI
var DebugApi PrivateDebugAPI
type LesServer interface {
Start(srvr *p2p.Server)
@ -106,6 +106,9 @@ func (s *Ethereum) AddLesServer(ls LesServer) {
// initialisation of the common Ethereum object)
func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) {
shyft_tracer := new(ShyftTracer)
core.SetIShyftTracer(shyft_tracer)
fmt.Println("++++++++++")
_, file, no, ok := runtime.Caller(1)
if ok {

View file

@ -4,22 +4,27 @@ import (
"github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/node"
"fmt"
"github.com/ethereum/go-ethereum/core"
)
var Chaindb_global ethdb.Database
func SetChainDB(db ethdb.Database){
Chaindb_global = db
}
func chaindb(ctx *node.ServiceContext, config *Config) (ethdb.Database, error) {
fmt.Println("DO WE GET HERE ++++++++++++++++++++++++++++++++")
fmt.Printf("%+v", ctx)
if core.Chaindb_global != nil {
return core.Chaindb_global, nil
if Chaindb_global != nil {
return Chaindb_global, nil
}
fmt.Println("FAR OUT ++++++++++++++++++++++++++++++++")
chainDb, err := CreateDB(ctx, config, "chaindata")
fmt.Println("CHECK CHECK ++++++++++++++++")
if err == nil {
core.SetChainDB(chainDb)
return core.Chaindb_global, nil
SetChainDB(chainDb)
return Chaindb_global, nil
}
return nil, err
}

63
eth/shyft_tracer.go Normal file
View file

@ -0,0 +1,63 @@
package eth
import (
"github.com/ethereum/go-ethereum/common"
"fmt"
"github.com/ethereum/go-ethereum/core"
)
//const (
// // defaultTraceReexec is the number of blocks the tracer is willing to go back
// // and reexecute to produce missing historical state necessary to run a specific
// // trace.
// defaultTraceReexec = uint64(128)
//)
//var api *eth.PrivateDebugAPI
var EthereumObject interface{}
type ShyftTracer struct {}
func (st ShyftTracer) MyTraceTransaction(hash string) (interface{}) {
//fmt.Println("THE stringed hash is in MYTRACETRANSACTION")
//fmt.Println(hash)
//fmt.Println(ethObjectInterface.GetEthObject())
common_hash := common.HexToHash(hash)
//fmt.Println("the chain db is in MyTraceTransaction")
//fmt.Println(Chaindb_global)
if Chaindb_global == nil {
return nil
}
tx, blockHash, _, index := core.GetTransaction(Chaindb_global, common_hash)
if tx == nil {
fmt.Println("TRANSACTION NOT FOUND IN MyTraceTransaction +++++++++")
}
reexec := defaultTraceReexec
//if config != nil && config.Reexec != nil {
// reexec = *config.Reexec
//}
msg, vmctx, statedb, err := DebugApi.computeTxEnv(blockHash, int(index), reexec)
fmt.Println("stuff and nonsense")
fmt.Println(msg)
fmt.Println(vmctx)
fmt.Println(statedb)
fmt.Println(err)
//fmt.Println("the tx is ")
//fmt.Println(tx)
//fmt.Println(blockHash)
//fmt.Println(index)
//DebugApi.traceTx(ctx, msg, vmctx, statedb, config)
return 42
}
func setEthObject(ethobj interface{}){
EthereumObject = ethobj
}

View file

@ -188,6 +188,8 @@ loop:
arguments = make([]interface{}, 1)
}
arguments[0] = timer.call.ArgumentList[0]
fmt.Println("The arguments are")
fmt.Println(arguments)
_, err := vm.Call(`Function.call.call`, nil, arguments...)
if err != nil {
fmt.Println("js error:", err, arguments)

View file

@ -231,6 +231,10 @@ func (h *virtualHostHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
if ipAddr := net.ParseIP(host); ipAddr != nil {
// It's an IP address, we can serve that
fmt.Println("THE write is ")
fmt.Println(w)
fmt.Println("The read is ")
fmt.Println(r)
h.next.ServeHTTP(w, r)
return

View file

@ -0,0 +1,5 @@
package shyfttracerinterface
type IShyftTracer interface {
MyTraceTransaction(hash string) (interface{})
}