Skip to content

Commit

Permalink
DE-labtory#723 Implement consensus_service
Browse files Browse the repository at this point in the history
  • Loading branch information
AgwaB committed Sep 8, 2018
1 parent 7d2bdf6 commit 00a7be7
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 70 deletions.
52 changes: 1 addition & 51 deletions blockchain/api/block_api.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@ import (
"github.com/it-chain/engine/blockchain"
"github.com/it-chain/engine/common/event"
"github.com/it-chain/engine/common/logger"
"github.com/rs/xid"
)
)

type BlockApi struct {
publisherId string
Expand Down Expand Up @@ -83,39 +82,7 @@ func (bApi BlockApi) CommitGenesisBlock(GenesisConfPath string) error {
return bApi.eventService.Publish("block.committed", commitEvent)
}

func (bApi BlockApi) CreateBlock(txList []*blockchain.DefaultTransaction) error {
logger.Info(nil, "[Blockchain] Create Block")

lastBlock, err := bApi.blockRepository.FindLast()

if err != nil {
return ErrGetLastBlock
}

prevSeal := lastBlock.GetSeal()

height := lastBlock.GetHeight() + 1

creator := bApi.publisherId

ProposedBlock, err := blockchain.CreateProposedBlock(prevSeal, height, txList, []byte(creator))

if err != nil {
return ErrCreateProposedBlock
}

ProposedBlock.SetState(blockchain.Created)

CreateEvent, err := createBlockCreateEvent(ProposedBlock)

if err != nil {
return ErrCreateEvent
}

logger.Info(nil, fmt.Sprintf("[Blockchain] Proposed block has Created - seal: [%x], height: [%d]", ProposedBlock.Seal, ProposedBlock.Height))

return bApi.eventService.Publish("block.created", CreateEvent)
}

func (bApi BlockApi) CommitBlock(block blockchain.DefaultBlock) error {
logger.Info(nil, "[Blockchain] Committing proposed block")
Expand Down Expand Up @@ -174,20 +141,3 @@ func createBlockCommittedEvent(block blockchain.DefaultBlock) (event.BlockCommit
State: blockchain.Committed,
}, nil
}

func createBlockCreateEvent(block blockchain.DefaultBlock) (event.BlockCreated, error) {

txList := blockchain.ConvBackFromTransactionList(block.TxList)

return event.BlockCreated{
BlockId: xid.New().String(),
Seal: block.GetSeal(),
PrevSeal: block.GetPrevSeal(),
Height: block.GetHeight(),
TxList: txList,
TxSeal: block.GetTxSeal(),
Timestamp: block.GetTimestamp(),
Creator: block.GetCreator(),
State: block.GetState(),
}, nil
}
10 changes: 1 addition & 9 deletions blockchain/infra/adapter/block_propose_command_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import (
type BlockCommitApi interface {
CreateProposedBlock(txList []*blockchain.DefaultTransaction) (blockchain.DefaultBlock, error)
CommitBlock(txList blockchain.DefaultBlock) error
CreateBlock(txList []*blockchain.DefaultTransaction) error
}

type BlockProposeCommandHandler struct {
Expand Down Expand Up @@ -64,21 +63,14 @@ func (h *BlockProposeCommandHandler) HandleProposeBlockCommand(command command.P
return struct{}{}, rpc.Error{}
} else if h.engineMode == "pbft" {

//create
err := h.blockApi.CreateBlock(defaultTxList)

err = h.consensusService.ConsentBlock(proposedBlock)
if err != nil {
return struct{}{}, rpc.Error{Message: err.Error()}
}

return struct{}{}, rpc.Error{}
}

err = h.consensusService.ConsentBlock(proposedBlock)
if err != nil {
return struct{}{}, rpc.Error{Message: err.Error()}
}

return struct{}{}, rpc.Error{}
}

Expand Down
51 changes: 45 additions & 6 deletions blockchain/infra/adapter/consensus_service.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,53 @@
package adapter

import "github.com/it-chain/engine/blockchain"
import (
"github.com/it-chain/engine/blockchain"
"github.com/it-chain/engine/common/logger"
"github.com/it-chain/engine/common/event"
"fmt"
"github.com/rs/xid"
)

type ConsensusService struct{}

func NewConsensusService() *ConsensusService {
return &ConsensusService{}
type ConsensusService struct{
eventService blockchain.EventService
}

func NewConsensusService(eventService blockchain.EventService) *ConsensusService {
return &ConsensusService{
eventService: eventService,
}
}

// TODO
func (s *ConsensusService) ConsentBlock(block blockchain.DefaultBlock) error {
return nil
logger.Info(nil, "[Blockchain] Create Block")

block.SetState(blockchain.Created)

CreateEvent, err := createBlockCreateEvent(block)

if err != nil {
return ErrCreateEvent
}

logger.Info(nil, fmt.Sprintf("[Blockchain] Proposed block has Created - seal: [%x], height: [%d]", block.Seal, block.Height))

return s.eventService.Publish("block.created", CreateEvent)
}

func createBlockCreateEvent(block blockchain.DefaultBlock) (event.BlockCreated, error) {

txList := blockchain.ConvBackFromTransactionList(block.TxList)

return event.BlockCreated{
BlockId: xid.New().String(),
Seal: block.GetSeal(),
PrevSeal: block.GetPrevSeal(),
Height: block.GetHeight(),
TxList: txList,
TxSeal: block.GetTxSeal(),
Timestamp: block.GetTimestamp(),
Creator: block.GetCreator(),
State: block.GetState(),
}, nil
}
1 change: 1 addition & 0 deletions blockchain/infra/adapter/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,4 @@ var ErrTxHasMissingProperties = errors.New("Tx has missing properties")
var ErrBlockIdNil = errors.New("Error command model ID is nil")
var ErrTxResultsLengthOfZero = errors.New("Error length of tx results is zero")
var ErrTxResultsFail = errors.New("Error not all tx results success")
var ErrCreateEvent = errors.New("Error in creating consent event")
6 changes: 2 additions & 4 deletions it-chain.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,7 @@ import (
blockchainApi "github.com/it-chain/engine/blockchain/api"
blockchainAdapter "github.com/it-chain/engine/blockchain/infra/adapter"
blockchainMem "github.com/it-chain/engine/blockchain/infra/mem"
"github.com/it-chain/engine/blockchain/test/mock"
"github.com/it-chain/engine/cmd/ivm"
"github.com/it-chain/engine/cmd/ivm"
"github.com/it-chain/engine/common"
"github.com/it-chain/engine/common/logger"
"github.com/it-chain/engine/common/rabbitmq/pubsub"
Expand Down Expand Up @@ -277,8 +276,7 @@ func initBlockchain(config *conf.Configuration, server rpc.Server) func() {
panic(err)
}

// TODO: Change with real consensus service
consensusService := mock.ConsensusService{}
consensusService := blockchainAdapter.NewConsensusService(eventService)

blockProposeHandler := blockchainAdapter.NewBlockProposeCommandHandler(blockApi, consensusService, config.Engine.Mode)
server.Register("block.propose", blockProposeHandler.HandleProposeBlockCommand)
Expand Down

0 comments on commit 00a7be7

Please sign in to comment.