From 914ea2892edb5b657435a42ebe115f91a797be2b Mon Sep 17 00:00:00 2001 From: Tuna Date: Sun, 13 Jan 2019 16:09:39 +0700 Subject: [PATCH] getSigners via EVM at API call --- contracts/utils.go | 2 +- internal/ethapi/api.go | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/contracts/utils.go b/contracts/utils.go index fed5a519c0..08472c121e 100644 --- a/contracts/utils.go +++ b/contracts/utils.go @@ -203,7 +203,7 @@ func GetSignersFromContract(state *state.StateDB, block *types.Block) ([]common. } // Get signers signed for blockNumber from blockSigner contract. -func GetSignersFromContract1(addrBlockSigner common.Address, client bind.ContractBackend, blockHash common.Hash) ([]common.Address, error) { +func GetSignersByExecutingEVM(addrBlockSigner common.Address, client bind.ContractBackend, blockHash common.Hash) ([]common.Address, error) { blockSigner, err := contract.NewBlockSigner(addrBlockSigner, client) if err != nil { log.Error("Fail get instance of blockSigner", "error", err) diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 287d26a81d..eae67ab31c 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -855,17 +855,19 @@ func (s *PublicBlockChainAPI) rpcOutputBlock(b *types.Block, inclTx bool, fullTx } fields["uncles"] = uncleHashes + // Get signers for block. + client, err := s.b.GetIPCClient() + if err != nil { + log.Error("Fail to connect IPC client for block status", "error", err) + } + var signers []common.Address var filterSigners []common.Address finality := int32(0) if b.Number().Int64() > 0 { engine := s.b.GetEngine() - blockNr := rpc.BlockNumber(b.Number().Int64()) - state, _, err := s.b.StateAndHeaderByNumber(ctx, blockNr) - if state == nil || err != nil { - return nil, err - } - signers, err = contracts.GetSignersFromContract(state, b) + addrBlockSigner := common.HexToAddress(common.BlockSigners) + signers, err = contracts.GetSignersByExecutingEVM(addrBlockSigner, client, b.Hash()) if err != nil { log.Error("Fail to get signers from block signer SC.", "error", err) }