|
|
|
@ -32,7 +32,6 @@ import ( |
|
|
|
|
"github.com/ethereum/go-ethereum/common" |
|
|
|
|
"github.com/ethereum/go-ethereum/common/hexutil" |
|
|
|
|
"github.com/ethereum/go-ethereum/common/math" |
|
|
|
|
"github.com/ethereum/go-ethereum/consensus/clique" |
|
|
|
|
"github.com/ethereum/go-ethereum/consensus/ethash" |
|
|
|
|
"github.com/ethereum/go-ethereum/consensus/misc" |
|
|
|
|
"github.com/ethereum/go-ethereum/core" |
|
|
|
@ -1875,45 +1874,6 @@ func (api *PublicDebugAPI) GetBlockRlp(ctx context.Context, number uint64) (hexu |
|
|
|
|
return rlp.EncodeToBytes(block) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// TestSignCliqueBlock fetches the given block number, and attempts to sign it as a clique header with the
|
|
|
|
|
// given address, returning the address of the recovered signature
|
|
|
|
|
//
|
|
|
|
|
// This is a temporary method to debug the externalsigner integration,
|
|
|
|
|
// TODO: Remove this method when the integration is mature
|
|
|
|
|
func (api *PublicDebugAPI) TestSignCliqueBlock(ctx context.Context, address common.Address, number uint64) (common.Address, error) { |
|
|
|
|
block, _ := api.b.BlockByNumber(ctx, rpc.BlockNumber(number)) |
|
|
|
|
if block == nil { |
|
|
|
|
return common.Address{}, fmt.Errorf("block #%d not found", number) |
|
|
|
|
} |
|
|
|
|
header := block.Header() |
|
|
|
|
header.Extra = make([]byte, 32+65) |
|
|
|
|
encoded := clique.CliqueRLP(header) |
|
|
|
|
|
|
|
|
|
// Look up the wallet containing the requested signer
|
|
|
|
|
account := accounts.Account{Address: address} |
|
|
|
|
wallet, err := api.b.AccountManager().Find(account) |
|
|
|
|
if err != nil { |
|
|
|
|
return common.Address{}, err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
signature, err := wallet.SignData(account, accounts.MimetypeClique, encoded) |
|
|
|
|
if err != nil { |
|
|
|
|
return common.Address{}, err |
|
|
|
|
} |
|
|
|
|
sealHash := clique.SealHash(header).Bytes() |
|
|
|
|
log.Info("test signing of clique block", |
|
|
|
|
"Sealhash", fmt.Sprintf("%x", sealHash), |
|
|
|
|
"signature", fmt.Sprintf("%x", signature)) |
|
|
|
|
pubkey, err := crypto.Ecrecover(sealHash, signature) |
|
|
|
|
if err != nil { |
|
|
|
|
return common.Address{}, err |
|
|
|
|
} |
|
|
|
|
var signer common.Address |
|
|
|
|
copy(signer[:], crypto.Keccak256(pubkey[1:])[12:]) |
|
|
|
|
|
|
|
|
|
return signer, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// PrintBlock retrieves a block and returns its pretty printed form.
|
|
|
|
|
func (api *PublicDebugAPI) PrintBlock(ctx context.Context, number uint64) (string, error) { |
|
|
|
|
block, _ := api.b.BlockByNumber(ctx, rpc.BlockNumber(number)) |
|
|
|
|