From 51ab23dd3ab288bc50339e2bca409f6f2a525ebb Mon Sep 17 00:00:00 2001 From: Eric Meyer Date: Mon, 23 Oct 2017 15:02:56 -0500 Subject: [PATCH] Output the number of transactions when logging a new block --- core/block.go | 3 ++- core/blockchain_logging_observer.go | 2 +- core/geth_blockchain.go | 19 +++++++++++++------ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/core/block.go b/core/block.go index 3eb57f06..ae0647fa 100644 --- a/core/block.go +++ b/core/block.go @@ -3,5 +3,6 @@ package core import "math/big" type Block struct { - Number *big.Int + Number *big.Int + NumberOfTransactions int } diff --git a/core/blockchain_logging_observer.go b/core/blockchain_logging_observer.go index 61eab638..9602b634 100644 --- a/core/blockchain_logging_observer.go +++ b/core/blockchain_logging_observer.go @@ -5,5 +5,5 @@ import "fmt" type BlockchainLoggingObserver struct{} func (blockchainObserver BlockchainLoggingObserver) NotifyBlockAdded(block Block) { - fmt.Printf("New block was added: %d\n", block.Number) + fmt.Printf("New block was added: %d, %d\n", block.Number, block.NumberOfTransactions) } diff --git a/core/geth_blockchain.go b/core/geth_blockchain.go index 305e723b..986579d8 100644 --- a/core/geth_blockchain.go +++ b/core/geth_blockchain.go @@ -21,12 +21,18 @@ func NewGethBlockchain(ipcPath string) *GethBlockchain { blockchain.client = client return &blockchain } -func (blockchain GethBlockchain) notifyObservers(header *types.Header) { - block := Block{Number: header.Number} +func (blockchain GethBlockchain) notifyObservers(getBlock *types.Block) { + block := convertBlock(getBlock) for _, observer := range blockchain.observers { observer.NotifyBlockAdded(block) } } +func convertBlock(gethBlock *types.Block) Block { + return Block{ + Number: gethBlock.Number(), + NumberOfTransactions: len(gethBlock.Transactions()), + } +} func (blockchain *GethBlockchain) RegisterObserver(observer BlockchainObserver) { fmt.Printf("Registering observer: %v\n", reflect.TypeOf(observer)) @@ -34,10 +40,11 @@ func (blockchain *GethBlockchain) RegisterObserver(observer BlockchainObserver) } func (blockchain *GethBlockchain) SubscribeToEvents() { - blocks := make(chan *types.Header, 10) + headers := make(chan *types.Header, 10) myContext := context.Background() - blockchain.client.SubscribeNewHead(myContext, blocks) - for block := range blocks { - blockchain.notifyObservers(block) + blockchain.client.SubscribeNewHead(myContext, headers) + for header := range headers { + gethBlock, _ := blockchain.client.BlockByNumber(myContext, header.Number) + blockchain.notifyObservers(gethBlock) } }