mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 02:12:23 +00:00
internal txs are being recorded
This commit is contained in:
parent
7c98e75c72
commit
274ae75ad3
7 changed files with 268 additions and 511 deletions
|
|
@ -186,8 +186,6 @@ func WriteShyftGen(gen *Genesis, block *types.Block) {
|
||||||
panic(insertError)
|
panic(insertError)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
log.Info("Found Genesis Block")
|
log.Info("Found Genesis Block")
|
||||||
}}}
|
}}}
|
||||||
|
|
|
||||||
|
|
@ -561,12 +561,10 @@ func (api *PrivateDebugAPI) STraceTransaction(ctx context.Context, hash common.H
|
||||||
if config != nil && config.Reexec != nil {
|
if config != nil && config.Reexec != nil {
|
||||||
reexec = *config.Reexec
|
reexec = *config.Reexec
|
||||||
}
|
}
|
||||||
fmt.Println("+++++++++++++++++++++++++++ Middle")
|
|
||||||
msg, vmctx, statedb, err := api.computeTxEnv(blockHash, int(index), reexec)
|
msg, vmctx, statedb, err := api.computeTxEnv(blockHash, int(index), reexec)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
fmt.Println("+++++++++++++++++++++++++++ BOTTOM")
|
|
||||||
return api.StraceTx(ctx, msg, vmctx, statedb, config, hash)
|
return api.StraceTx(ctx, msg, vmctx, statedb, config, hash)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -583,7 +581,6 @@ func (api *PrivateDebugAPI) StraceTx(ctx context.Context, message core.Message,
|
||||||
switch {
|
switch {
|
||||||
case config != nil && config.Tracer != nil:
|
case config != nil && config.Tracer != nil:
|
||||||
// Define a meaningful timeout of a single transaction trace
|
// Define a meaningful timeout of a single transaction trace
|
||||||
fmt.Println("STRACETX")
|
|
||||||
_ = defaultTraceTimeout
|
_ = defaultTraceTimeout
|
||||||
|
|
||||||
if config.Timeout != nil {
|
if config.Timeout != nil {
|
||||||
|
|
@ -703,7 +700,6 @@ func (api *PrivateDebugAPI) traceTx(ctx context.Context, message core.Message, v
|
||||||
// computeTxEnv returns the execution environment of a certain transaction.
|
// computeTxEnv returns the execution environment of a certain transaction.
|
||||||
func (api *PrivateDebugAPI) computeTxEnv(blockHash common.Hash, txIndex int, reexec uint64) (core.Message, vm.Context, *state.StateDB, error) {
|
func (api *PrivateDebugAPI) computeTxEnv(blockHash common.Hash, txIndex int, reexec uint64) (core.Message, vm.Context, *state.StateDB, error) {
|
||||||
// Create the parent state database
|
// Create the parent state database
|
||||||
fmt.Println("COMPUTETXENV")
|
|
||||||
block := api.eth.blockchain.GetBlockByHash(blockHash)
|
block := api.eth.blockchain.GetBlockByHash(blockHash)
|
||||||
if block == nil {
|
if block == nil {
|
||||||
return nil, vm.Context{}, nil, fmt.Errorf("block %x not found", blockHash)
|
return nil, vm.Context{}, nil, fmt.Errorf("block %x not found", blockHash)
|
||||||
|
|
@ -733,6 +729,5 @@ func (api *PrivateDebugAPI) computeTxEnv(blockHash common.Hash, txIndex int, ree
|
||||||
}
|
}
|
||||||
statedb.DeleteSuicides()
|
statedb.DeleteSuicides()
|
||||||
}
|
}
|
||||||
fmt.Println("+++++++++++++++++ BOTTOM COMPUTETXENV")
|
|
||||||
return nil, vm.Context{}, nil, fmt.Errorf("tx index %d out of range for block %x", txIndex, blockHash)
|
return nil, vm.Context{}, nil, fmt.Errorf("tx index %d out of range for block %x", txIndex, blockHash)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -103,17 +103,12 @@ func (s *Ethereum) AddLesServer(ls LesServer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func SNew(config *Config) (*Ethereum, error) {
|
func SNew(config *Config) (*Ethereum, error) {
|
||||||
fmt.Println("SNEW FROM SHYFTREACER")
|
|
||||||
stopDbUpgrade := upgradeDeduplicateData(Chaindb_global)
|
stopDbUpgrade := upgradeDeduplicateData(Chaindb_global)
|
||||||
fmt.Println("ChainGlobal v+%", Chaindb_global)
|
|
||||||
chainConfig, _, _ := core.SetupGenesisBlock(Chaindb_global, config.Genesis)
|
chainConfig, _, _ := core.SetupGenesisBlock(Chaindb_global, config.Genesis)
|
||||||
eth := &Ethereum{
|
eth := &Ethereum{
|
||||||
config: config,
|
config: config,
|
||||||
chainDb: Chaindb_global,
|
chainDb: Chaindb_global,
|
||||||
chainConfig: chainConfig,
|
chainConfig: chainConfig,
|
||||||
//eventMux: ctx.EventMux,
|
|
||||||
//accountManager: ctx.AccountManager,
|
|
||||||
//engine: CreateConsensusEngine(ctx, &config.Ethash, chainConfig, Chaindb_global),
|
|
||||||
shutdownChan: make(chan bool),
|
shutdownChan: make(chan bool),
|
||||||
stopDbUpgrade: stopDbUpgrade,
|
stopDbUpgrade: stopDbUpgrade,
|
||||||
networkId: config.NetworkId,
|
networkId: config.NetworkId,
|
||||||
|
|
@ -123,15 +118,6 @@ func SNew(config *Config) (*Ethereum, error) {
|
||||||
bloomIndexer: NewBloomIndexer(Chaindb_global, params.BloomBitsBlocks),
|
bloomIndexer: NewBloomIndexer(Chaindb_global, params.BloomBitsBlocks),
|
||||||
}
|
}
|
||||||
|
|
||||||
//var (
|
|
||||||
// vmConfig = vm.Config{EnablePreimageRecording: config.EnablePreimageRecording}
|
|
||||||
// cacheConfig = &core.CacheConfig{Disabled: config.NoPruning, TrieNodeLimit: config.TrieCache, TrieTimeLimit: config.TrieTimeout}
|
|
||||||
//)
|
|
||||||
//
|
|
||||||
//eth.blockchain, err = core.NewBlockChain(chainDb, cacheConfig, eth.chainConfig, eth.engine, vmConfig)
|
|
||||||
//
|
|
||||||
//BlockchainObject = eth.blockchain
|
|
||||||
|
|
||||||
eth.blockchain = BlockchainObject
|
eth.blockchain = BlockchainObject
|
||||||
|
|
||||||
return eth, nil
|
return eth, nil
|
||||||
|
|
@ -144,11 +130,6 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) {
|
||||||
core.SetIShyftTracer(shyft_tracer)
|
core.SetIShyftTracer(shyft_tracer)
|
||||||
SetGlobalConfig(config)
|
SetGlobalConfig(config)
|
||||||
|
|
||||||
_, file, no, ok := runtime.Caller(1)
|
|
||||||
if ok {
|
|
||||||
fmt.Printf("called from %s#%d\n", file, no)
|
|
||||||
}
|
|
||||||
|
|
||||||
if config.SyncMode == downloader.LightSync {
|
if config.SyncMode == downloader.LightSync {
|
||||||
return nil, errors.New("can't run eth.Ethereum in light sync mode, use les.LightEthereum")
|
return nil, errors.New("can't run eth.Ethereum in light sync mode, use les.LightEthereum")
|
||||||
}
|
}
|
||||||
|
|
@ -232,7 +213,7 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) {
|
||||||
|
|
||||||
DebugApi.eth = eth
|
DebugApi.eth = eth
|
||||||
DebugApi.config = chainConfig
|
DebugApi.config = chainConfig
|
||||||
// Shyft Tracer
|
//@NOTE Shyft Tracer
|
||||||
InitTracerEnv()
|
InitTracerEnv()
|
||||||
|
|
||||||
return eth, nil
|
return eth, nil
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ package eth
|
||||||
import (
|
import (
|
||||||
"github.com/ethereum/go-ethereum/ethdb"
|
"github.com/ethereum/go-ethereum/ethdb"
|
||||||
"github.com/ethereum/go-ethereum/node"
|
"github.com/ethereum/go-ethereum/node"
|
||||||
"fmt"
|
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
@ -15,7 +14,6 @@ func SetChainDB(db ethdb.Database){
|
||||||
}
|
}
|
||||||
|
|
||||||
func chaindb(ctx *node.ServiceContext, config *Config) (ethdb.Database, error) {
|
func chaindb(ctx *node.ServiceContext, config *Config) (ethdb.Database, error) {
|
||||||
fmt.Printf("CTX v+%", ctx)
|
|
||||||
if Chaindb_global != nil {
|
if Chaindb_global != nil {
|
||||||
return Chaindb_global, nil
|
return Chaindb_global, nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/params"
|
"github.com/ethereum/go-ethereum/params"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var EthereumObject interface{}
|
var EthereumObject interface{}
|
||||||
|
|
@ -17,7 +16,6 @@ var Context context.Context
|
||||||
var TracerConfig *TraceConfig
|
var TracerConfig *TraceConfig
|
||||||
|
|
||||||
func InitTracerEnv() {
|
func InitTracerEnv() {
|
||||||
fmt.Println("INIT tracer Env")
|
|
||||||
config2 := params.ShyftNetworkChainConfig
|
config2 := params.ShyftNetworkChainConfig
|
||||||
|
|
||||||
jsTracer := "callTracer"
|
jsTracer := "callTracer"
|
||||||
|
|
@ -30,13 +28,9 @@ func InitTracerEnv() {
|
||||||
Reexec: nil,
|
Reexec: nil,
|
||||||
}
|
}
|
||||||
TracerConfig = config
|
TracerConfig = config
|
||||||
fmt.Println("+++++++++++++++++++++++++++ before FULLNODE", Global_config)
|
|
||||||
// called here
|
|
||||||
fullNode, _ := SNew(Global_config)
|
fullNode, _ := SNew(Global_config)
|
||||||
fmt.Println("+++++++++++++++++++++++++++ after FULLNODE")
|
|
||||||
privateAPI := NewPrivateDebugAPI(config2, fullNode)
|
privateAPI := NewPrivateDebugAPI(config2, fullNode)
|
||||||
PrivateAPI = privateAPI
|
PrivateAPI = privateAPI
|
||||||
fmt.Println("+++++++++++++++++++++++++++ after privateAPI")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (st ShyftTracer) GetTracerToRun (hash common.Hash) (interface{}, error) {
|
func (st ShyftTracer) GetTracerToRun (hash common.Hash) (interface{}, error) {
|
||||||
|
|
@ -50,6 +44,5 @@ func setEthObject(ethobj interface{}){
|
||||||
var Global_config *Config
|
var Global_config *Config
|
||||||
|
|
||||||
func SetGlobalConfig(c *Config) {
|
func SetGlobalConfig(c *Config) {
|
||||||
fmt.Println("SETGLOBAL")
|
|
||||||
Global_config = c
|
Global_config = c
|
||||||
}
|
}
|
||||||
|
|
@ -592,7 +592,6 @@ type Internals struct {
|
||||||
|
|
||||||
//@NOTE:SHYFT
|
//@NOTE:SHYFT
|
||||||
func (i *Internals) SWriteInteralTxs(hash common.Hash) {
|
func (i *Internals) SWriteInteralTxs(hash common.Hash) {
|
||||||
fmt.Println("WRITE INTERNAL")
|
|
||||||
sqldb, err := core.DBConnection()
|
sqldb, err := core.DBConnection()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
|
@ -612,7 +611,6 @@ func (i *Internals) SWriteInteralTxs(hash common.Hash) {
|
||||||
}
|
}
|
||||||
//@NOTE:SHYFT
|
//@NOTE:SHYFT
|
||||||
func (i *Internals) InternalRecursive(hash common.Hash) {
|
func (i *Internals) InternalRecursive(hash common.Hash) {
|
||||||
fmt.Println("internal recursive")
|
|
||||||
i.SWriteInteralTxs(hash)
|
i.SWriteInteralTxs(hash)
|
||||||
lengthOfCalls := len(i.Calls)
|
lengthOfCalls := len(i.Calls)
|
||||||
if lengthOfCalls == 0 {
|
if lengthOfCalls == 0 {
|
||||||
|
|
@ -671,7 +669,6 @@ func (jst *Tracer) GetResult() (json.RawMessage, error) {
|
||||||
|
|
||||||
//@NOTE:SHYFT
|
//@NOTE:SHYFT
|
||||||
func (jst *Tracer) SGetResult(hash common.Hash) (json.RawMessage, error) {
|
func (jst *Tracer) SGetResult(hash common.Hash) (json.RawMessage, error) {
|
||||||
fmt.Println("SGETRESULT")
|
|
||||||
// Transform the context into a JavaScript object and inject into the state
|
// Transform the context into a JavaScript object and inject into the state
|
||||||
obj := jst.vm.PushObject()
|
obj := jst.vm.PushObject()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,20 +11,12 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/consensus/ethash"
|
"github.com/ethereum/go-ethereum/consensus/ethash"
|
||||||
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ShyftTracer struct {}
|
type ShyftTracer struct {}
|
||||||
|
|
||||||
//Config Below
|
|
||||||
//&{Genesis:<nil> NetworkId:1 SyncMode:fast NoPruning:false LightServ:0 LightPeers:100 SkipBcVersionCheck:false DatabaseHandles:1024 DatabaseCache:768 TrieCache:256 TrieTimeout:5m0s Etherbase:[67 236 109 9 66 247 250 239 6 159 127 99 208 56 74 39 245 41 176 98] MinerThreads:4 ExtraData:[] GasPrice:+18000000000 Ethash:{CacheDir:ethash CachesInMem:2 CachesOnDisk:3 DatasetDir:$HOME/.ethash DatasetsInMem:1 DatasetsOnDisk:2 PowMode:0} TxPool:{NoLocals:false Journal:transactions.rlp Rejournal:1h0m0s PriceLimit:1 PriceBump:10 AccountSlots:16 GlobalSlots:4096 AccountQueue:64 GlobalQueue:1024 Lifetime:3h0m0s} GPO:{Blocks:20 Percentile:60 Default:<nil>} EnablePreimageRecording:false DocRoot:}SETGLOBAL
|
|
||||||
//called from /Users/dustinbrickwood/go/src/github.com/ethereum/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/cmd/utils/flags.go#1132
|
|
||||||
//
|
|
||||||
|
|
||||||
//CTX
|
|
||||||
// !(NOVERB)%!(EXTRA *node.ServiceContext=&{0xc4200326c0 map[] 0xc4201dc6c0 0xc42026f2b0})
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
testInstance = "console-tester"
|
|
||||||
testAddress = "0x8605cdbbdb6d264aa742e77020dcbc58fcdce182"
|
testAddress = "0x8605cdbbdb6d264aa742e77020dcbc58fcdce182"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -34,15 +26,6 @@ func TestBlock(t *testing.T) {
|
||||||
shyft_tracer := new(eth.ShyftTracer)
|
shyft_tracer := new(eth.ShyftTracer)
|
||||||
core.SetIShyftTracer(shyft_tracer)
|
core.SetIShyftTracer(shyft_tracer)
|
||||||
|
|
||||||
//workspace, err := ioutil.TempDir("", "console-tester-")
|
|
||||||
//if err != nil {
|
|
||||||
// t.Fatalf("failed to create temporary keystore: %v", err)
|
|
||||||
//}
|
|
||||||
|
|
||||||
//stack, err := node.New(&node.Config{DataDir: workspace, UseLightweightKDF: true, Name: testInstance})
|
|
||||||
//if err != nil {
|
|
||||||
// t.Fatalf("failed to create node: %v", err)
|
|
||||||
//}
|
|
||||||
ethConf := ð.Config{
|
ethConf := ð.Config{
|
||||||
Genesis: core.DeveloperGenesisBlock(15, common.Address{}),
|
Genesis: core.DeveloperGenesisBlock(15, common.Address{}),
|
||||||
Etherbase: common.HexToAddress(testAddress),
|
Etherbase: common.HexToAddress(testAddress),
|
||||||
|
|
@ -50,9 +33,6 @@ func TestBlock(t *testing.T) {
|
||||||
PowMode: ethash.ModeTest,
|
PowMode: ethash.ModeTest,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
//if err = stack.Register(func(ctx *node.ServiceContext) (node.Service, error) { return eth.New(ctx, ethConf) }); err != nil {
|
|
||||||
// t.Fatalf("failed to register Ethereum protocol: %v", err)
|
|
||||||
//}
|
|
||||||
|
|
||||||
eth.SetGlobalConfig(ethConf)
|
eth.SetGlobalConfig(ethConf)
|
||||||
|
|
||||||
|
|
@ -235,457 +215,272 @@ func TestBlock(t *testing.T) {
|
||||||
ClearTables()
|
ClearTables()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
//
|
||||||
|
t.Run("TestContractCreationTx", func (t *testing.T) {
|
||||||
|
key, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
|
||||||
|
signer := types.NewEIP155Signer(big.NewInt(2147483647))
|
||||||
|
|
||||||
|
//Nonce,Value, GasLimit, Gasprice, data
|
||||||
|
contractCreation := types.NewContractCreation(1, big.NewInt(111), 1111, big.NewInt(11111), []byte{0x11, 0x11, 0x11})
|
||||||
|
mytx,_ := types.SignTx(contractCreation, signer, key)
|
||||||
|
txs := []*types.Transaction{mytx}
|
||||||
|
|
||||||
|
receipt2 := &types.Receipt{
|
||||||
|
Status: types.ReceiptStatusSuccessful,
|
||||||
|
CumulativeGasUsed: 1,
|
||||||
|
Logs: []*types.Log{
|
||||||
|
{Address: common.BytesToAddress([]byte{0x11})},
|
||||||
|
{Address: common.BytesToAddress([]byte{0x01, 0x11})},
|
||||||
|
},
|
||||||
|
TxHash: common.BytesToHash([]byte{0x11, 0x11}),
|
||||||
|
ContractAddress: common.BytesToAddress([]byte{0x01, 0x11, 0x11}),
|
||||||
|
GasUsed: 111111,
|
||||||
|
}
|
||||||
|
|
||||||
|
receipts := []*types.Receipt{receipt2}
|
||||||
|
block := types.NewBlock(&types.Header{Number: big.NewInt(314)}, txs, nil, receipts)
|
||||||
|
|
||||||
|
if err := core.SWriteBlock(block, receipts); err != nil {
|
||||||
|
t.Fatalf("Failed to write block into database: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var contractAddressFromReciept string
|
||||||
|
for _, receipt := range receipts {
|
||||||
|
contractAddressFromReciept = (*types.ReceiptForStorage)(receipt).ContractAddress.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
sqldb, err := core.DBConnection()
|
||||||
|
if (err != nil) {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tx := range txs {
|
||||||
|
txn := core.SGetTransaction(sqldb, tx.Hash().String())
|
||||||
|
byt := []byte(txn)
|
||||||
|
var data core.ShyftTxEntryPretty
|
||||||
|
json.Unmarshal(byt, &data)
|
||||||
|
|
||||||
|
if tx.Hash().String() != data.TxHash {
|
||||||
|
t.Fatalf("txHash [%v]: tx Hash not found", tx.Hash().String())
|
||||||
|
}
|
||||||
|
if contractAddressFromReciept != data.To {
|
||||||
|
t.Fatalf("Contract Addr [%v]: Contract addr not found", contractAddressFromReciept)
|
||||||
|
}
|
||||||
|
if tx.From().String() != data.From {
|
||||||
|
t.Fatalf("From Addr [%v]: From addr not found", tx.From().String())
|
||||||
|
}
|
||||||
|
if tx.Nonce() != data.Nonce {
|
||||||
|
t.Fatalf("Nonce [%v]: Nonce not found", tx.Nonce())
|
||||||
|
}
|
||||||
|
if tx.Gas() != data.Gas {
|
||||||
|
t.Fatalf("Gas [%v]: Gas not found", tx.Gas())
|
||||||
|
}
|
||||||
|
if tx.GasPrice().Uint64() != data.GasPrice {
|
||||||
|
t.Fatalf("Gas Price [%v]: Gas price not found", tx.GasPrice().String())
|
||||||
|
}
|
||||||
|
if block.GasLimit() != data.GasLimit {
|
||||||
|
t.Fatalf("Gas Limit [%v]: Gas limit not found", block.GasLimit())
|
||||||
|
}
|
||||||
|
if block.Hash().String() != data.BlockHash {
|
||||||
|
t.Fatalf("Block Hash [%v]: Block hash not found", block.Hash().String())
|
||||||
|
}
|
||||||
|
if block.Number().String() != data.BlockNumber {
|
||||||
|
t.Fatalf("Block Number [%v]: Block number not found", block.Number().String())
|
||||||
|
}
|
||||||
|
if tx.Value().String() != data.Amount {
|
||||||
|
t.Fatalf("Amount [%v]: Amount not found", tx.Value().String())
|
||||||
|
}
|
||||||
|
if tx.Cost().Uint64() != data.Cost {
|
||||||
|
t.Fatalf("Cost [%v]: Cost not found", tx.Cost().String())
|
||||||
|
}
|
||||||
|
var status string
|
||||||
|
if receipt2.Status == 1 {
|
||||||
|
status = "SUCCESS"
|
||||||
|
}
|
||||||
|
if receipt2.Status == 0 {
|
||||||
|
status = "FAIL"
|
||||||
|
}
|
||||||
|
if status != data.Status {
|
||||||
|
t.Fatalf("Receipt status [%v]: Receipt status not found", status)
|
||||||
|
}
|
||||||
|
var isContract bool
|
||||||
|
if tx.To() != nil {
|
||||||
|
isContract = false
|
||||||
|
} else {
|
||||||
|
isContract = true
|
||||||
|
}
|
||||||
|
if isContract != data.IsContract {
|
||||||
|
t.Fatalf("isContract [%v]: isContract bool is incorrect", isContract)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ClearTables()
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("TestTransactionsToReturnTransactions", func(t *testing.T) {
|
||||||
|
key, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
|
||||||
|
signer := types.NewEIP155Signer(big.NewInt(2147483647))
|
||||||
|
|
||||||
|
//Nonce, To Address,Value, GasLimit, Gasprice, data
|
||||||
|
tx1 := types.NewTransaction(1, common.BytesToAddress([]byte{0x11}), big.NewInt(111), 1111, big.NewInt(11111), []byte{0x11, 0x11, 0x11})
|
||||||
|
mytx,_ := types.SignTx(tx1, signer, key)
|
||||||
|
tx2 := types.NewTransaction(2, common.BytesToAddress([]byte{0x22}), big.NewInt(222), 2222, big.NewInt(22222), []byte{0x22, 0x22, 0x22})
|
||||||
|
mytx2,_ := types.SignTx(tx2, signer, key)
|
||||||
|
tx3 := types.NewTransaction(3, common.BytesToAddress([]byte{0x33}), big.NewInt(333), 3333, big.NewInt(33333), []byte{0x33, 0x33, 0x33})
|
||||||
|
mytx3,_ := types.SignTx(tx3, signer, key)
|
||||||
|
txs := []*types.Transaction{mytx, mytx2, mytx3}
|
||||||
|
|
||||||
|
receipt1 := &types.Receipt{
|
||||||
|
Status: types.ReceiptStatusSuccessful,
|
||||||
|
CumulativeGasUsed: 1,
|
||||||
|
Logs: []*types.Log{
|
||||||
|
{Address: common.BytesToAddress([]byte{0x11})},
|
||||||
|
{Address: common.BytesToAddress([]byte{0x01, 0x11})},
|
||||||
|
},
|
||||||
|
TxHash: common.BytesToHash([]byte{0x11, 0x11}),
|
||||||
|
ContractAddress: common.BytesToAddress([]byte{0x01, 0x11, 0x11}),
|
||||||
|
GasUsed: 111111,
|
||||||
|
}
|
||||||
|
|
||||||
|
receipts := []*types.Receipt{receipt1}
|
||||||
|
block := types.NewBlock(&types.Header{Number: big.NewInt(314)}, txs, nil, receipts)
|
||||||
|
|
||||||
|
if err := core.SWriteBlock(block, receipts); err != nil {
|
||||||
|
t.Fatalf("Failed to write block into database: %v", err)
|
||||||
|
}
|
||||||
|
sqldb, err := core.DBConnection()
|
||||||
|
if (err != nil) {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tx := range txs {
|
||||||
|
txn := core.SGetTransaction(sqldb, tx.Hash().String())
|
||||||
|
byt := []byte(txn)
|
||||||
|
var data core.ShyftTxEntryPretty
|
||||||
|
json.Unmarshal(byt, &data)
|
||||||
|
|
||||||
|
//TODO age, data
|
||||||
|
if tx.Hash().String() != data.TxHash {
|
||||||
|
t.Fatalf("txHash [%v]: tx Hash not found", tx.Hash().String())
|
||||||
|
}
|
||||||
|
if tx.From().String() != data.From {
|
||||||
|
t.Fatalf("From Addr [%v]: From addr not found", tx.From().String())
|
||||||
|
}
|
||||||
|
if tx.To().String() != data.To {
|
||||||
|
t.Fatalf("To Addr [%v]: To addr not found", tx.To().String())
|
||||||
|
}
|
||||||
|
if tx.Nonce() != data.Nonce {
|
||||||
|
t.Fatalf("Nonce [%v]: Nonce not found", tx.Nonce())
|
||||||
|
}
|
||||||
|
if tx.Gas() != data.Gas {
|
||||||
|
t.Fatalf("Gas [%v]: Gas not found", tx.Gas())
|
||||||
|
}
|
||||||
|
if tx.GasPrice().Uint64() != data.GasPrice {
|
||||||
|
t.Fatalf("Gas Price [%v]: Gas price not found", tx.GasPrice().String())
|
||||||
|
}
|
||||||
|
if block.GasLimit() != data.GasLimit {
|
||||||
|
t.Fatalf("Gas Limit [%v]: Gas limit not found", block.GasLimit())
|
||||||
|
}
|
||||||
|
if block.Hash().String() != data.BlockHash {
|
||||||
|
t.Fatalf("Block Hash [%v]: Block hash not found", block.Hash().String())
|
||||||
|
}
|
||||||
|
if block.Number().String() != data.BlockNumber {
|
||||||
|
t.Fatalf("Block Number [%v]: Block number not found", block.Number().String())
|
||||||
|
}
|
||||||
|
if tx.Value().String() != data.Amount {
|
||||||
|
t.Fatalf("Amount [%v]: Amount not found", tx.Value().String())
|
||||||
|
}
|
||||||
|
if tx.Cost().Uint64() != data.Cost {
|
||||||
|
t.Fatalf("Cost [%v]: Cost not found", tx.Cost().String())
|
||||||
|
}
|
||||||
|
var status string
|
||||||
|
if receipt1.Status == 1 {
|
||||||
|
status = "SUCCESS"
|
||||||
|
}
|
||||||
|
if receipt1.Status == 0 {
|
||||||
|
status = "FAIL"
|
||||||
|
}
|
||||||
|
if status != data.Status {
|
||||||
|
t.Fatalf("Receipt status [%v]: Receipt status not found", status)
|
||||||
|
}
|
||||||
|
var isContract bool
|
||||||
|
if tx.To() != nil {
|
||||||
|
isContract = false
|
||||||
|
} else {
|
||||||
|
isContract = true
|
||||||
|
}
|
||||||
|
if isContract != data.IsContract {
|
||||||
|
t.Fatalf("isContract [%v]: isContract bool is incorrect", isContract)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if getAllTx := core.SGetAllTransactions(sqldb); len(getAllTx) == 0 {
|
||||||
|
t.Fatalf("GetAllTransactions [%v]: GetAllTransactions did not return correctly", getAllTx)
|
||||||
|
}
|
||||||
|
ClearTables()
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("TestAccountsToReturnAccounts",func(t *testing.T) {
|
||||||
|
key, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
|
||||||
|
signer := types.NewEIP155Signer(big.NewInt(2147483647))
|
||||||
|
|
||||||
|
//Nonce, To Address,Value, GasLimit, Gasprice, data
|
||||||
|
tx1 := types.NewTransaction(1, common.BytesToAddress([]byte{0x11}), big.NewInt(111), 1111, big.NewInt(11111), []byte{0x11, 0x11, 0x11})
|
||||||
|
mytx,_ := types.SignTx(tx1, signer, key)
|
||||||
|
tx2 := types.NewTransaction(2, common.BytesToAddress([]byte{0x22}), big.NewInt(222), 2222, big.NewInt(22222), []byte{0x22, 0x22, 0x22})
|
||||||
|
mytx2,_ := types.SignTx(tx2, signer, key)
|
||||||
|
tx3 := types.NewTransaction(3, common.BytesToAddress([]byte{0x33}), big.NewInt(333), 3333, big.NewInt(33333), []byte{0x33, 0x33, 0x33})
|
||||||
|
mytx3,_ := types.SignTx(tx3, signer, key)
|
||||||
|
txs := []*types.Transaction{mytx, mytx2, mytx3}
|
||||||
|
|
||||||
|
receipt1 := &types.Receipt{
|
||||||
|
Status: types.ReceiptStatusSuccessful,
|
||||||
|
CumulativeGasUsed: 1,
|
||||||
|
Logs: []*types.Log{
|
||||||
|
{Address: common.BytesToAddress([]byte{0x11})},
|
||||||
|
{Address: common.BytesToAddress([]byte{0x01, 0x11})},
|
||||||
|
},
|
||||||
|
TxHash: common.BytesToHash([]byte{0x11, 0x11}),
|
||||||
|
ContractAddress: common.BytesToAddress([]byte{0x01, 0x11, 0x11}),
|
||||||
|
GasUsed: 111111,
|
||||||
|
}
|
||||||
|
|
||||||
|
receipts := []*types.Receipt{receipt1}
|
||||||
|
block := types.NewBlock(&types.Header{Number: big.NewInt(315)}, txs, nil, receipts)
|
||||||
|
if err := core.SWriteBlock(block, receipts); err != nil {
|
||||||
|
t.Fatalf("Failed to write block into database: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
sqldb, err := core.DBConnection()
|
||||||
|
if (err != nil) {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tx := range txs {
|
||||||
|
accountAddrTo := core.SGetAccount(sqldb, tx.To().String())
|
||||||
|
byts := []byte(accountAddrTo)
|
||||||
|
var accountDataTo core.SAccounts
|
||||||
|
json.Unmarshal(byts, &accountDataTo)
|
||||||
|
|
||||||
|
if tx.To().String() != accountDataTo.Addr {
|
||||||
|
t.Fatalf("To address [%v]: To address not found", accountDataTo.Addr)
|
||||||
|
}
|
||||||
|
if tx.Value().String() != accountDataTo.Balance {
|
||||||
|
t.Fatalf("To address balance [%v]: To address balance not found", accountDataTo.Balance)
|
||||||
|
}
|
||||||
|
if strconv.FormatUint(tx.Nonce(), 10) != accountDataTo.TxCountAccount {
|
||||||
|
t.Fatalf("To account nonce [%v]: To account nonce not found", accountDataTo.TxCountAccount)
|
||||||
|
}
|
||||||
|
if getAllAccountTxs := core.SGetAccountTxs(sqldb, tx.To().String()); len(getAllAccountTxs) == 0 {
|
||||||
|
t.Fatalf("GetAccountTxs [%v]: GetAccountTxs did not return correctly", getAllAccountTxs)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if getAllAccounts := core.SGetAllAccounts(sqldb); len(getAllAccounts) == 0 {
|
||||||
|
t.Fatalf("GetAllAccounts [%v]: GetAllAccounts did not return correctly", getAllAccounts)
|
||||||
|
}
|
||||||
|
ClearTables()
|
||||||
|
})
|
||||||
|
|
||||||
ClearTables()
|
ClearTables()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//func TestBlockToReturnBlock(t *testing.T) {
|
|
||||||
// core.InitDBTest()
|
|
||||||
//
|
|
||||||
// key, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
|
|
||||||
// signer := types.NewEIP155Signer(big.NewInt(2147483647))
|
|
||||||
//
|
|
||||||
// //Nonce, To Address,Value, GasLimit, Gasprice, data
|
|
||||||
// tx1 := types.NewTransaction(1, common.BytesToAddress([]byte{0x11}), big.NewInt(111), 1111, big.NewInt(11111), []byte{0x11, 0x11, 0x11})
|
|
||||||
// mytx,_ := types.SignTx(tx1, signer, key)
|
|
||||||
// tx2 := types.NewTransaction(2, common.BytesToAddress([]byte{0x22}), big.NewInt(222), 2222, big.NewInt(22222), []byte{0x22, 0x22, 0x22})
|
|
||||||
// mytx2,_ := types.SignTx(tx2, signer, key)
|
|
||||||
// tx3 := types.NewTransaction(3, common.BytesToAddress([]byte{0x33}), big.NewInt(333), 3333, big.NewInt(33333), []byte{0x33, 0x33, 0x33})
|
|
||||||
// mytx3,_ := types.SignTx(tx3, signer, key)
|
|
||||||
// txs := []*types.Transaction{mytx, mytx2, mytx3}
|
|
||||||
//
|
|
||||||
// receipt := &types.Receipt{
|
|
||||||
// Status: types.ReceiptStatusSuccessful,
|
|
||||||
// CumulativeGasUsed: 1,
|
|
||||||
// Logs: []*types.Log{
|
|
||||||
// {Address: common.BytesToAddress([]byte{0x11})},
|
|
||||||
// {Address: common.BytesToAddress([]byte{0x01, 0x11})},
|
|
||||||
// },
|
|
||||||
// TxHash: common.BytesToHash([]byte{0x11, 0x11}),
|
|
||||||
// ContractAddress: common.BytesToAddress([]byte{0x01, 0x11, 0x11}),
|
|
||||||
// GasUsed: 111111,
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// receipts := []*types.Receipt{receipt}
|
|
||||||
// block := types.NewBlock(&types.Header{Number: big.NewInt(315)}, txs, nil, receipts)
|
|
||||||
//
|
|
||||||
// // Write and verify the block in the database
|
|
||||||
// if err := core.SWriteBlock(block, receipts); err != nil {
|
|
||||||
// t.Fatalf("Failed to write block into database: %v", err)
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// sqldb, err := core.DBConnection()
|
|
||||||
// if err != nil {
|
|
||||||
// panic(err)
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// entry := core.SGetBlock(sqldb, block.Number().String())
|
|
||||||
// byt := []byte(entry)
|
|
||||||
// var data core.SBlock
|
|
||||||
// json.Unmarshal(byt, &data)
|
|
||||||
//
|
|
||||||
// //TODO Difficulty, rewards, age
|
|
||||||
// if block.Hash().String() != data.Hash {
|
|
||||||
// t.Fatalf("Block Hash [%v]: Block hash not found", block.Hash().String())
|
|
||||||
// }
|
|
||||||
// if block.Coinbase().String() != data.Coinbase {
|
|
||||||
// t.Fatalf("Block coinbase [%v]: Block coinbase not found", block.Coinbase().String())
|
|
||||||
// }
|
|
||||||
// if block.Number().String() != data.Number {
|
|
||||||
// t.Fatalf("Block number [%v]: Block number not found", block.Number().String())
|
|
||||||
// }
|
|
||||||
// if block.GasUsed() != data.GasUsed {
|
|
||||||
// t.Fatalf("Gas Used [%v]: Gas used not found", block.GasUsed())
|
|
||||||
// }
|
|
||||||
// if block.GasLimit() != data.GasLimit {
|
|
||||||
// t.Fatalf("Gas Limit [%v]: Gas limit not found", block.GasLimit())
|
|
||||||
// }
|
|
||||||
// if block.Transactions().Len() != data.TxCount {
|
|
||||||
// t.Fatalf("Tx Count [%v]: Tx Count not found", block.Transactions().Len())
|
|
||||||
// }
|
|
||||||
// if len(block.Uncles()) != data.UncleCount {
|
|
||||||
// t.Fatalf("Uncle count [%v]: Uncle count not found", len(block.Uncles()))
|
|
||||||
// }
|
|
||||||
// if block.ParentHash().String() != data.ParentHash {
|
|
||||||
// t.Fatalf("Parent hash [%v]: Parent hash not found", block.ParentHash().String())
|
|
||||||
// }
|
|
||||||
// if block.UncleHash().String() != data.UncleHash {
|
|
||||||
// t.Fatalf("Uncle hash [%v]: Uncle hash not found", block.UncleHash().String())
|
|
||||||
// }
|
|
||||||
// if block.Size().String() != data.Size {
|
|
||||||
// t.Fatalf("Size [%v]: Size not found", block.Size().String())
|
|
||||||
// }
|
|
||||||
// if block.Nonce() != data.Nonce {
|
|
||||||
// t.Fatalf("Block nonce [%v]: Block nonce not found", block.Nonce())
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if getAllBlocks := core.SGetAllBlocks(sqldb); len(getAllBlocks) == 0 {
|
|
||||||
// t.Fatalf("GetAllBlocks [%v]: GetAllBlocks did not return correctly", getAllBlocks)
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if getAllBlocksMinedByAddress := core.SGetAllBlocksMinedByAddress(sqldb, block.Coinbase().String()); len(getAllBlocksMinedByAddress) == 0 {
|
|
||||||
// t.Fatalf("GetAllBlocksMinedByAddress [%v]: GetAllBlocksMinedByAddress did not return correctly", getAllBlocksMinedByAddress)
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// ClearTables()
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//func TestGetRecentBlock(t *testing.T) {
|
|
||||||
// key, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
|
|
||||||
// signer := types.NewEIP155Signer(big.NewInt(2147483647))
|
|
||||||
//
|
|
||||||
// //Nonce, To Address,Value, GasLimit, Gasprice, data
|
|
||||||
// tx1 := types.NewTransaction(1, common.BytesToAddress([]byte{0x11}), big.NewInt(111), 1111, big.NewInt(11111), []byte{0x11, 0x11, 0x11})
|
|
||||||
// mytx,_ := types.SignTx(tx1, signer, key)
|
|
||||||
// tx2 := types.NewTransaction(2, common.BytesToAddress([]byte{0x22}), big.NewInt(222), 2222, big.NewInt(22222), []byte{0x22, 0x22, 0x22})
|
|
||||||
// mytx2,_ := types.SignTx(tx2, signer, key)
|
|
||||||
// tx3 := types.NewTransaction(3, common.BytesToAddress([]byte{0x33}), big.NewInt(333), 3333, big.NewInt(33333), []byte{0x33, 0x33, 0x33})
|
|
||||||
// mytx3,_ := types.SignTx(tx3, signer, key)
|
|
||||||
// txs := []*types.Transaction{mytx, mytx2}
|
|
||||||
// txs1 := []*types.Transaction{mytx3}
|
|
||||||
//
|
|
||||||
// receipt1 := &types.Receipt{
|
|
||||||
// Status: types.ReceiptStatusSuccessful,
|
|
||||||
// CumulativeGasUsed: 1,
|
|
||||||
// Logs: []*types.Log{
|
|
||||||
// {Address: common.BytesToAddress([]byte{0x11})},
|
|
||||||
// {Address: common.BytesToAddress([]byte{0x01, 0x11})},
|
|
||||||
// },
|
|
||||||
// TxHash: common.BytesToHash([]byte{0x11, 0x11}),
|
|
||||||
// ContractAddress: common.BytesToAddress([]byte{0x01, 0x11, 0x11}),
|
|
||||||
// GasUsed: 111111,
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// receipts := []*types.Receipt{receipt1}
|
|
||||||
// block := types.NewBlock(&types.Header{Number: big.NewInt(322)}, txs, nil, receipts)
|
|
||||||
// block2 := types.NewBlock(&types.Header{Number: big.NewInt(320)}, txs1, nil, receipts)
|
|
||||||
// blocks := []*types.Block{block, block2}
|
|
||||||
//
|
|
||||||
// for _, bc := range blocks {
|
|
||||||
// // Write and verify the block in the database
|
|
||||||
// if err := core.SWriteBlock(bc, receipts); err != nil {
|
|
||||||
// t.Fatalf("Failed to write block into database: %v", err)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// sqldb, err := core.DBConnection()
|
|
||||||
// if (err != nil) {
|
|
||||||
// panic(err)
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// response := core.SGetRecentBlock(sqldb)
|
|
||||||
// byteRes := []byte(response)
|
|
||||||
// var recentBlock core.SBlock
|
|
||||||
// json.Unmarshal(byteRes, &recentBlock)
|
|
||||||
//
|
|
||||||
// if block.Hash().String() != recentBlock.Hash {
|
|
||||||
// t.Fatalf("Block Hash [%v]: Block hash not found", block.Hash().String())
|
|
||||||
// }
|
|
||||||
// if block.Coinbase().String() != recentBlock.Coinbase {
|
|
||||||
// t.Fatalf("Block coinbase [%v]: Block coinbase not found", block.Coinbase().String())
|
|
||||||
// }
|
|
||||||
// if block.Number().String() != recentBlock.Number {
|
|
||||||
// t.Fatalf("Block number [%v]: Block number not found", block.Number().String())
|
|
||||||
// }
|
|
||||||
// if block.GasUsed() != recentBlock.GasUsed {
|
|
||||||
// t.Fatalf("Gas Used [%v]: Gas used not found", block.GasUsed())
|
|
||||||
// }
|
|
||||||
// if block.GasLimit() != recentBlock.GasLimit {
|
|
||||||
// t.Fatalf("Gas Limit [%v]: Gas limit not found", block.GasLimit())
|
|
||||||
// }
|
|
||||||
// if block.Transactions().Len() != recentBlock.TxCount {
|
|
||||||
// t.Fatalf("Tx Count [%v]: Tx Count not found", block.Transactions().Len())
|
|
||||||
// }
|
|
||||||
// if len(block.Uncles()) != recentBlock.UncleCount {
|
|
||||||
// t.Fatalf("Uncle count [%v]: Uncle count not found", len(block.Uncles()))
|
|
||||||
// }
|
|
||||||
// if block.ParentHash().String() != recentBlock.ParentHash {
|
|
||||||
// t.Fatalf("Parent hash [%v]: Parent hash not found", block.ParentHash().String())
|
|
||||||
// }
|
|
||||||
// if block.UncleHash().String() != recentBlock.UncleHash {
|
|
||||||
// t.Fatalf("Uncle hash [%v]: Uncle hash not found", block.UncleHash().String())
|
|
||||||
// }
|
|
||||||
// if block.Size().String() != recentBlock.Size {
|
|
||||||
// t.Fatalf("Size [%v]: Size not found", block.Size().String())
|
|
||||||
// }
|
|
||||||
// if block.Nonce() != recentBlock.Nonce {
|
|
||||||
// t.Fatalf("Block nonce [%v]: Block nonce not found", block.Nonce())
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if allTxsFromBlock:= core.SGetAllTransactionsFromBlock(sqldb, block2.Number().String()); len(allTxsFromBlock) == 0 {
|
|
||||||
// t.Fatalf("GetAllTransactionsFromBlock [%v]: GetAllTransactionsFromBlock did not return correctly", allTxsFromBlock)
|
|
||||||
// }
|
|
||||||
// ClearTables()
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//func TestContractCreationTx(t *testing.T) {
|
|
||||||
// key, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
|
|
||||||
// signer := types.NewEIP155Signer(big.NewInt(2147483647))
|
|
||||||
//
|
|
||||||
// //Nonce,Value, GasLimit, Gasprice, data
|
|
||||||
// contractCreation := types.NewContractCreation(1, big.NewInt(111), 1111, big.NewInt(11111), []byte{0x11, 0x11, 0x11})
|
|
||||||
// mytx,_ := types.SignTx(contractCreation, signer, key)
|
|
||||||
// txs := []*types.Transaction{mytx}
|
|
||||||
//
|
|
||||||
// receipt2 := &types.Receipt{
|
|
||||||
// Status: types.ReceiptStatusSuccessful,
|
|
||||||
// CumulativeGasUsed: 1,
|
|
||||||
// Logs: []*types.Log{
|
|
||||||
// {Address: common.BytesToAddress([]byte{0x11})},
|
|
||||||
// {Address: common.BytesToAddress([]byte{0x01, 0x11})},
|
|
||||||
// },
|
|
||||||
// TxHash: common.BytesToHash([]byte{0x11, 0x11}),
|
|
||||||
// ContractAddress: common.BytesToAddress([]byte{0x01, 0x11, 0x11}),
|
|
||||||
// GasUsed: 111111,
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// receipts := []*types.Receipt{receipt2}
|
|
||||||
// block := types.NewBlock(&types.Header{Number: big.NewInt(314)}, txs, nil, receipts)
|
|
||||||
//
|
|
||||||
// if err := core.SWriteBlock(block, receipts); err != nil {
|
|
||||||
// t.Fatalf("Failed to write block into database: %v", err)
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// var contractAddressFromReciept string
|
|
||||||
// for _, receipt := range receipts {
|
|
||||||
// contractAddressFromReciept = (*types.ReceiptForStorage)(receipt).ContractAddress.String()
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// sqldb, err := core.DBConnection()
|
|
||||||
// if (err != nil) {
|
|
||||||
// panic(err)
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// for _, tx := range txs {
|
|
||||||
// txn := core.SGetTransaction(sqldb, tx.Hash().String())
|
|
||||||
// byt := []byte(txn)
|
|
||||||
// var data core.ShyftTxEntryPretty
|
|
||||||
// json.Unmarshal(byt, &data)
|
|
||||||
//
|
|
||||||
// if tx.Hash().String() != data.TxHash {
|
|
||||||
// t.Fatalf("txHash [%v]: tx Hash not found", tx.Hash().String())
|
|
||||||
// }
|
|
||||||
// if contractAddressFromReciept != data.To {
|
|
||||||
// t.Fatalf("Contract Addr [%v]: Contract addr not found", contractAddressFromReciept)
|
|
||||||
// }
|
|
||||||
// if tx.From().String() != data.From {
|
|
||||||
// t.Fatalf("From Addr [%v]: From addr not found", tx.From().String())
|
|
||||||
// }
|
|
||||||
// if tx.Nonce() != data.Nonce {
|
|
||||||
// t.Fatalf("Nonce [%v]: Nonce not found", tx.Nonce())
|
|
||||||
// }
|
|
||||||
// if tx.Gas() != data.Gas {
|
|
||||||
// t.Fatalf("Gas [%v]: Gas not found", tx.Gas())
|
|
||||||
// }
|
|
||||||
// if tx.GasPrice().Uint64() != data.GasPrice {
|
|
||||||
// t.Fatalf("Gas Price [%v]: Gas price not found", tx.GasPrice().String())
|
|
||||||
// }
|
|
||||||
// if block.GasLimit() != data.GasLimit {
|
|
||||||
// t.Fatalf("Gas Limit [%v]: Gas limit not found", block.GasLimit())
|
|
||||||
// }
|
|
||||||
// if block.Hash().String() != data.BlockHash {
|
|
||||||
// t.Fatalf("Block Hash [%v]: Block hash not found", block.Hash().String())
|
|
||||||
// }
|
|
||||||
// if block.Number().String() != data.BlockNumber {
|
|
||||||
// t.Fatalf("Block Number [%v]: Block number not found", block.Number().String())
|
|
||||||
// }
|
|
||||||
// if tx.Value().String() != data.Amount {
|
|
||||||
// t.Fatalf("Amount [%v]: Amount not found", tx.Value().String())
|
|
||||||
// }
|
|
||||||
// if tx.Cost().Uint64() != data.Cost {
|
|
||||||
// t.Fatalf("Cost [%v]: Cost not found", tx.Cost().String())
|
|
||||||
// }
|
|
||||||
// var status string
|
|
||||||
// if receipt2.Status == 1 {
|
|
||||||
// status = "SUCCESS"
|
|
||||||
// }
|
|
||||||
// if receipt2.Status == 0 {
|
|
||||||
// status = "FAIL"
|
|
||||||
// }
|
|
||||||
// if status != data.Status {
|
|
||||||
// t.Fatalf("Receipt status [%v]: Receipt status not found", status)
|
|
||||||
// }
|
|
||||||
// var isContract bool
|
|
||||||
// if tx.To() != nil {
|
|
||||||
// isContract = false
|
|
||||||
// } else {
|
|
||||||
// isContract = true
|
|
||||||
// }
|
|
||||||
// if isContract != data.IsContract {
|
|
||||||
// t.Fatalf("isContract [%v]: isContract bool is incorrect", isContract)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// ClearTables()
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//func TestTransactionsToReturnTransactions(t *testing.T) {
|
|
||||||
// key, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
|
|
||||||
// signer := types.NewEIP155Signer(big.NewInt(2147483647))
|
|
||||||
//
|
|
||||||
// //Nonce, To Address,Value, GasLimit, Gasprice, data
|
|
||||||
// tx1 := types.NewTransaction(1, common.BytesToAddress([]byte{0x11}), big.NewInt(111), 1111, big.NewInt(11111), []byte{0x11, 0x11, 0x11})
|
|
||||||
// mytx,_ := types.SignTx(tx1, signer, key)
|
|
||||||
// tx2 := types.NewTransaction(2, common.BytesToAddress([]byte{0x22}), big.NewInt(222), 2222, big.NewInt(22222), []byte{0x22, 0x22, 0x22})
|
|
||||||
// mytx2,_ := types.SignTx(tx2, signer, key)
|
|
||||||
// tx3 := types.NewTransaction(3, common.BytesToAddress([]byte{0x33}), big.NewInt(333), 3333, big.NewInt(33333), []byte{0x33, 0x33, 0x33})
|
|
||||||
// mytx3,_ := types.SignTx(tx3, signer, key)
|
|
||||||
// txs := []*types.Transaction{mytx, mytx2, mytx3}
|
|
||||||
//
|
|
||||||
// receipt1 := &types.Receipt{
|
|
||||||
// Status: types.ReceiptStatusSuccessful,
|
|
||||||
// CumulativeGasUsed: 1,
|
|
||||||
// Logs: []*types.Log{
|
|
||||||
// {Address: common.BytesToAddress([]byte{0x11})},
|
|
||||||
// {Address: common.BytesToAddress([]byte{0x01, 0x11})},
|
|
||||||
// },
|
|
||||||
// TxHash: common.BytesToHash([]byte{0x11, 0x11}),
|
|
||||||
// ContractAddress: common.BytesToAddress([]byte{0x01, 0x11, 0x11}),
|
|
||||||
// GasUsed: 111111,
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// receipts := []*types.Receipt{receipt1}
|
|
||||||
// block := types.NewBlock(&types.Header{Number: big.NewInt(314)}, txs, nil, receipts)
|
|
||||||
//
|
|
||||||
// if err := core.SWriteBlock(block, receipts); err != nil {
|
|
||||||
// t.Fatalf("Failed to write block into database: %v", err)
|
|
||||||
// }
|
|
||||||
// sqldb, err := core.DBConnection()
|
|
||||||
// if (err != nil) {
|
|
||||||
// panic(err)
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// for _, tx := range txs {
|
|
||||||
// txn := core.SGetTransaction(sqldb, tx.Hash().String())
|
|
||||||
// byt := []byte(txn)
|
|
||||||
// var data core.ShyftTxEntryPretty
|
|
||||||
// json.Unmarshal(byt, &data)
|
|
||||||
//
|
|
||||||
// //TODO age, data
|
|
||||||
// if tx.Hash().String() != data.TxHash {
|
|
||||||
// t.Fatalf("txHash [%v]: tx Hash not found", tx.Hash().String())
|
|
||||||
// }
|
|
||||||
// if tx.From().String() != data.From {
|
|
||||||
// t.Fatalf("From Addr [%v]: From addr not found", tx.From().String())
|
|
||||||
// }
|
|
||||||
// if tx.To().String() != data.To {
|
|
||||||
// t.Fatalf("To Addr [%v]: To addr not found", tx.To().String())
|
|
||||||
// }
|
|
||||||
// if tx.Nonce() != data.Nonce {
|
|
||||||
// t.Fatalf("Nonce [%v]: Nonce not found", tx.Nonce())
|
|
||||||
// }
|
|
||||||
// if tx.Gas() != data.Gas {
|
|
||||||
// t.Fatalf("Gas [%v]: Gas not found", tx.Gas())
|
|
||||||
// }
|
|
||||||
// if tx.GasPrice().Uint64() != data.GasPrice {
|
|
||||||
// t.Fatalf("Gas Price [%v]: Gas price not found", tx.GasPrice().String())
|
|
||||||
// }
|
|
||||||
// if block.GasLimit() != data.GasLimit {
|
|
||||||
// t.Fatalf("Gas Limit [%v]: Gas limit not found", block.GasLimit())
|
|
||||||
// }
|
|
||||||
// if block.Hash().String() != data.BlockHash {
|
|
||||||
// t.Fatalf("Block Hash [%v]: Block hash not found", block.Hash().String())
|
|
||||||
// }
|
|
||||||
// if block.Number().String() != data.BlockNumber {
|
|
||||||
// t.Fatalf("Block Number [%v]: Block number not found", block.Number().String())
|
|
||||||
// }
|
|
||||||
// if tx.Value().String() != data.Amount {
|
|
||||||
// t.Fatalf("Amount [%v]: Amount not found", tx.Value().String())
|
|
||||||
// }
|
|
||||||
// if tx.Cost().Uint64() != data.Cost {
|
|
||||||
// t.Fatalf("Cost [%v]: Cost not found", tx.Cost().String())
|
|
||||||
// }
|
|
||||||
// var status string
|
|
||||||
// if receipt1.Status == 1 {
|
|
||||||
// status = "SUCCESS"
|
|
||||||
// }
|
|
||||||
// if receipt1.Status == 0 {
|
|
||||||
// status = "FAIL"
|
|
||||||
// }
|
|
||||||
// if status != data.Status {
|
|
||||||
// t.Fatalf("Receipt status [%v]: Receipt status not found", status)
|
|
||||||
// }
|
|
||||||
// var isContract bool
|
|
||||||
// if tx.To() != nil {
|
|
||||||
// isContract = false
|
|
||||||
// } else {
|
|
||||||
// isContract = true
|
|
||||||
// }
|
|
||||||
// if isContract != data.IsContract {
|
|
||||||
// t.Fatalf("isContract [%v]: isContract bool is incorrect", isContract)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if getAllTx := core.SGetAllTransactions(sqldb); len(getAllTx) == 0 {
|
|
||||||
// t.Fatalf("GetAllTransactions [%v]: GetAllTransactions did not return correctly", getAllTx)
|
|
||||||
// }
|
|
||||||
// ClearTables()
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//func TestAccountsToReturnAccounts(t *testing.T) {
|
|
||||||
// key, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
|
|
||||||
// signer := types.NewEIP155Signer(big.NewInt(2147483647))
|
|
||||||
//
|
|
||||||
// //Nonce, To Address,Value, GasLimit, Gasprice, data
|
|
||||||
// tx1 := types.NewTransaction(1, common.BytesToAddress([]byte{0x11}), big.NewInt(111), 1111, big.NewInt(11111), []byte{0x11, 0x11, 0x11})
|
|
||||||
// mytx,_ := types.SignTx(tx1, signer, key)
|
|
||||||
// tx2 := types.NewTransaction(2, common.BytesToAddress([]byte{0x22}), big.NewInt(222), 2222, big.NewInt(22222), []byte{0x22, 0x22, 0x22})
|
|
||||||
// mytx2,_ := types.SignTx(tx2, signer, key)
|
|
||||||
// tx3 := types.NewTransaction(3, common.BytesToAddress([]byte{0x33}), big.NewInt(333), 3333, big.NewInt(33333), []byte{0x33, 0x33, 0x33})
|
|
||||||
// mytx3,_ := types.SignTx(tx3, signer, key)
|
|
||||||
// txs := []*types.Transaction{mytx, mytx2, mytx3}
|
|
||||||
//
|
|
||||||
// receipt1 := &types.Receipt{
|
|
||||||
// Status: types.ReceiptStatusSuccessful,
|
|
||||||
// CumulativeGasUsed: 1,
|
|
||||||
// Logs: []*types.Log{
|
|
||||||
// {Address: common.BytesToAddress([]byte{0x11})},
|
|
||||||
// {Address: common.BytesToAddress([]byte{0x01, 0x11})},
|
|
||||||
// },
|
|
||||||
// TxHash: common.BytesToHash([]byte{0x11, 0x11}),
|
|
||||||
// ContractAddress: common.BytesToAddress([]byte{0x01, 0x11, 0x11}),
|
|
||||||
// GasUsed: 111111,
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// receipts := []*types.Receipt{receipt1}
|
|
||||||
// block := types.NewBlock(&types.Header{Number: big.NewInt(315)}, txs, nil, receipts)
|
|
||||||
// if err := core.SWriteBlock(block, receipts); err != nil {
|
|
||||||
// t.Fatalf("Failed to write block into database: %v", err)
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// sqldb, err := core.DBConnection()
|
|
||||||
// if (err != nil) {
|
|
||||||
// panic(err)
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// for _, tx := range txs {
|
|
||||||
// accountAddrTo := core.SGetAccount(sqldb, tx.To().String())
|
|
||||||
// byts := []byte(accountAddrTo)
|
|
||||||
// var accountDataTo core.SAccounts
|
|
||||||
// json.Unmarshal(byts, &accountDataTo)
|
|
||||||
//
|
|
||||||
// if tx.To().String() != accountDataTo.Addr {
|
|
||||||
// t.Fatalf("To address [%v]: To address not found", accountDataTo.Addr)
|
|
||||||
// }
|
|
||||||
// if tx.Value().String() != accountDataTo.Balance {
|
|
||||||
// t.Fatalf("To address balance [%v]: To address balance not found", accountDataTo.Balance)
|
|
||||||
// }
|
|
||||||
// if strconv.FormatUint(tx.Nonce(), 10) != accountDataTo.TxCountAccount {
|
|
||||||
// t.Fatalf("To account nonce [%v]: To account nonce not found", accountDataTo.TxCountAccount)
|
|
||||||
// }
|
|
||||||
// if getAllAccountTxs := core.SGetAccountTxs(sqldb, tx.To().String()); len(getAllAccountTxs) == 0 {
|
|
||||||
// t.Fatalf("GetAccountTxs [%v]: GetAccountTxs did not return correctly", getAllAccountTxs)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if getAllAccounts := core.SGetAllAccounts(sqldb); len(getAllAccounts) == 0 {
|
|
||||||
// t.Fatalf("GetAllAccounts [%v]: GetAllAccounts did not return correctly", getAllAccounts)
|
|
||||||
// }
|
|
||||||
// ClearTables()
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue