From a4be27641a547f10b02cd9834bc5d9fcf15707d4 Mon Sep 17 00:00:00 2001 From: venkatesh mankena Date: Fri, 20 Sep 2019 14:39:09 +0530 Subject: [PATCH 1/4] udpated bor.go to fetch firstEndBlock --- consensus/bor/bor.go | 47 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/consensus/bor/bor.go b/consensus/bor/bor.go index db645d54d3..d301d0fa9b 100644 --- a/consensus/bor/bor.go +++ b/consensus/bor/bor.go @@ -32,7 +32,7 @@ import ( "golang.org/x/crypto/sha3" ) -const validatorsetABI = `[{"constant":true,"inputs":[],"name":"getInitialValidators","outputs":[{"name":"","type":"address[]"},{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getValidators","outputs":[{"name":"","type":"address[]"},{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"}]` +const validatorsetABI = `[{"constant":true,"inputs":[{"name":"span","type":"uint256"}],"name":"getSpan","outputs":[{"name":"number","type":"uint256"},{"name":"startBlock","type":"uint256"},{"name":"endBlock","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"span","type":"uint256"},{"name":"signer","type":"address"}],"name":"isProducer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"vote","type":"bytes"},{"name":"sigs","type":"bytes"},{"name":"txBytes","type":"bytes"},{"name":"proof","type":"bytes"}],"name":"commitSpan","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"span","type":"uint256"},{"name":"signer","type":"address"}],"name":"isValidator","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"left","type":"bytes32"},{"name":"right","type":"bytes32"}],"name":"innerNode","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"span","type":"uint256"}],"name":"getValidatorsTotalStakeBySpan","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"rootHash","type":"bytes32"},{"name":"leaf","type":"bytes32"},{"name":"proof","type":"bytes"}],"name":"checkMembership","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"CHAIN","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"span","type":"uint256"},{"name":"signer","type":"address"}],"name":"getValidatorBySigner","outputs":[{"components":[{"name":"id","type":"uint256"},{"name":"power","type":"uint256"},{"name":"signer","type":"address"}],"name":"result","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentSpanNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"d","type":"bytes32"}],"name":"leafNode","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"getNextSpan","outputs":[{"name":"number","type":"uint256"},{"name":"startBlock","type":"uint256"},{"name":"endBlock","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getInitialValidators","outputs":[{"name":"","type":"address[]"},{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FIRST_END_BLOCK","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"producers","outputs":[{"name":"id","type":"uint256"},{"name":"power","type":"uint256"},{"name":"signer","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"span","type":"uint256"},{"name":"dataHash","type":"bytes32"},{"name":"sigs","type":"bytes"}],"name":"getStakePower","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ROUND_TYPE","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"span","type":"uint256"}],"name":"getProducersTotalStakeBySpan","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"BOR_ID","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentSpan","outputs":[{"name":"number","type":"uint256"},{"name":"startBlock","type":"uint256"},{"name":"endBlock","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"sprint","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getValidators","outputs":[{"name":"","type":"address[]"},{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"spanNumbers","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"vote","type":"bytes"},{"name":"sigs","type":"bytes"},{"name":"txBytes","type":"bytes"},{"name":"proof","type":"bytes"}],"name":"validateValidatorSet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"VOTE_TYPE","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"validators","outputs":[{"name":"id","type":"uint256"},{"name":"power","type":"uint256"},{"name":"signer","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentSprint","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"spans","outputs":[{"name":"number","type":"uint256"},{"name":"startBlock","type":"uint256"},{"name":"endBlock","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"indexed":true,"name":"startBlock","type":"uint256"},{"indexed":true,"name":"endBlock","type":"uint256"}],"name":"NewSpan","type":"event"}]` const ( voteSnapshotInterval = 1024 // Number of blocks after which to save the vote snapshot to the database @@ -776,14 +776,53 @@ func (c *Bor) GetCurrentValidators(number uint64) ([]*Validator, error) { func GetValidators(number uint64, sprint uint64, validatorContract string, ethAPI *ethapi.PublicBlockChainAPI) ([]*Validator, error) { blockNr := rpc.BlockNumber(number) + // validator set ABI + validatorSetABI, _ := abi.JSON(strings.NewReader(validatorsetABI)) + + // First End block + getFirstEndBlock := func() (firstEndBlock uint64, err error) { + data, err := validatorSetABI.Pack("FIRST_END_BLOCK") + if err != nil { + fmt.Println("Unable to pack tx for getValidator", "error", err) + return firstEndBlock, err + } + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() // cancel when we are finished consuming integers + + // call + msgData := (hexutil.Bytes)(data) + toAddress := common.HexToAddress(validatorContract) + gas := (hexutil.Uint64)(uint64(math.MaxUint64 / 2)) + result, err := ethAPI.Call(ctx, ethapi.CallArgs{ + Gas: &gas, + To: &toAddress, + Data: &msgData, + }, blockNr) + if err != nil { + fmt.Println("err", err) + return firstEndBlock, err + } + + if err := validatorSetABI.Unpack(&firstEndBlock, "FIRST_END_BLOCK", result); err != nil { + fmt.Println("err", err) + return firstEndBlock, err + } + return firstEndBlock, nil + + } + + firstEndBlock, err := getFirstEndBlock() + if err != nil { + panic(err) + } + // method method := "getValidators" - if number < sprint { + if number < uint64(firstEndBlock) { method = "getInitialValidators" } - // validator set ABI - validatorSetABI, _ := abi.JSON(strings.NewReader(validatorsetABI)) data, err := validatorSetABI.Pack(method) if err != nil { fmt.Println("Unable to pack tx for getValidator", "error", err) From ad215df33b16afddb84769f224b31bd79b829062 Mon Sep 17 00:00:00 2001 From: venkatesh mankena Date: Fri, 20 Sep 2019 17:33:59 +0530 Subject: [PATCH 2/4] fix first_end_block --- consensus/bor/bor.go | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/consensus/bor/bor.go b/consensus/bor/bor.go index d301d0fa9b..5e85c3eebb 100644 --- a/consensus/bor/bor.go +++ b/consensus/bor/bor.go @@ -780,11 +780,11 @@ func GetValidators(number uint64, sprint uint64, validatorContract string, ethAP validatorSetABI, _ := abi.JSON(strings.NewReader(validatorsetABI)) // First End block - getFirstEndBlock := func() (firstEndBlock uint64, err error) { + getFirstEndBlock := func() (uint64, error) { data, err := validatorSetABI.Pack("FIRST_END_BLOCK") if err != nil { fmt.Println("Unable to pack tx for getValidator", "error", err) - return firstEndBlock, err + return 0, err } ctx, cancel := context.WithCancel(context.Background()) @@ -801,14 +801,19 @@ func GetValidators(number uint64, sprint uint64, validatorContract string, ethAP }, blockNr) if err != nil { fmt.Println("err", err) - return firstEndBlock, err + return 0, err } - if err := validatorSetABI.Unpack(&firstEndBlock, "FIRST_END_BLOCK", result); err != nil { + var ( + ret0 = new(uint64) + ) + out := ret0 + + if err := validatorSetABI.Unpack(&out, "FIRST_END_BLOCK", result); err != nil { fmt.Println("err", err) - return firstEndBlock, err + return 0, err } - return firstEndBlock, nil + return *ret0, nil } @@ -817,12 +822,16 @@ func GetValidators(number uint64, sprint uint64, validatorContract string, ethAP panic(err) } + fmt.Println("firstEndBlock", firstEndBlock) + // method method := "getValidators" - if number < uint64(firstEndBlock) { + if number < firstEndBlock { method = "getInitialValidators" } + fmt.Println("method", method) + data, err := validatorSetABI.Pack(method) if err != nil { fmt.Println("Unable to pack tx for getValidator", "error", err) From ee77e5bd0f7c41c80b7714f6bb41e5924795f447 Mon Sep 17 00:00:00 2001 From: venkatesh mankena Date: Fri, 20 Sep 2019 17:51:21 +0530 Subject: [PATCH 3/4] removing unwanted logs --- consensus/bor/bor.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/consensus/bor/bor.go b/consensus/bor/bor.go index 5e85c3eebb..21bea13ecf 100644 --- a/consensus/bor/bor.go +++ b/consensus/bor/bor.go @@ -783,7 +783,6 @@ func GetValidators(number uint64, sprint uint64, validatorContract string, ethAP getFirstEndBlock := func() (uint64, error) { data, err := validatorSetABI.Pack("FIRST_END_BLOCK") if err != nil { - fmt.Println("Unable to pack tx for getValidator", "error", err) return 0, err } @@ -800,7 +799,6 @@ func GetValidators(number uint64, sprint uint64, validatorContract string, ethAP Data: &msgData, }, blockNr) if err != nil { - fmt.Println("err", err) return 0, err } @@ -810,7 +808,6 @@ func GetValidators(number uint64, sprint uint64, validatorContract string, ethAP out := ret0 if err := validatorSetABI.Unpack(&out, "FIRST_END_BLOCK", result); err != nil { - fmt.Println("err", err) return 0, err } return *ret0, nil @@ -822,16 +819,12 @@ func GetValidators(number uint64, sprint uint64, validatorContract string, ethAP panic(err) } - fmt.Println("firstEndBlock", firstEndBlock) - // method method := "getValidators" if number < firstEndBlock { method = "getInitialValidators" } - fmt.Println("method", method) - data, err := validatorSetABI.Pack(method) if err != nil { fmt.Println("Unable to pack tx for getValidator", "error", err) @@ -851,7 +844,6 @@ func GetValidators(number uint64, sprint uint64, validatorContract string, ethAP Data: &msgData, }, blockNr) if err != nil { - fmt.Println("err", err) return nil, err } From 0edf50b540f08f78881e68ffdb4f9795fafc2f2a Mon Sep 17 00:00:00 2001 From: venkatesh mankena Date: Fri, 20 Sep 2019 17:54:01 +0530 Subject: [PATCH 4/4] initial span size condition change --- consensus/bor/bor.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/consensus/bor/bor.go b/consensus/bor/bor.go index 21bea13ecf..800de192a7 100644 --- a/consensus/bor/bor.go +++ b/consensus/bor/bor.go @@ -821,7 +821,7 @@ func GetValidators(number uint64, sprint uint64, validatorContract string, ethAP // method method := "getValidators" - if number < firstEndBlock { + if number <= firstEndBlock { method = "getInitialValidators" }