From 13aeb83fdb10032ef53baf20429aa89696d71457 Mon Sep 17 00:00:00 2001
From: Miguel Montes <miguel.montes@gmail.com>
Date: Mon, 12 Nov 2018 23:29:09 -0300
Subject: [PATCH] =?UTF-8?q?Reorganizaci=C3=B3n=20del=20c=C3=B3digo=20de=20?=
 =?UTF-8?q?bfa=5Fclient?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 bfa_client/src/clique/clique.go | 44 +++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)
 create mode 100644 bfa_client/src/clique/clique.go

diff --git a/bfa_client/src/clique/clique.go b/bfa_client/src/clique/clique.go
new file mode 100644
index 0000000..f4aa9c2
--- /dev/null
+++ b/bfa_client/src/clique/clique.go
@@ -0,0 +1,44 @@
+package clique
+
+import (
+	"github.com/ethereum/go-ethereum/common"
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/ethereum/go-ethereum/crypto/sha3"
+	"github.com/ethereum/go-ethereum/rlp"
+	"../util"
+)
+
+func sigHash(header *types.Header) (hash common.Hash) {
+	hasher := sha3.NewKeccak256()
+
+	rlp.Encode(hasher, []interface{}{
+		header.ParentHash,
+		header.UncleHash,
+		header.Coinbase,
+		header.Root,
+		header.TxHash,
+		header.ReceiptHash,
+		header.Bloom,
+		header.Difficulty,
+		header.Number,
+		header.GasLimit,
+		header.GasUsed,
+		header.Time,
+		header.Extra[:len(header.Extra)-65], // Yes, this will panic if extra is too short
+		header.MixDigest,
+		header.Nonce,
+	})
+	hasher.Sum(hash[:0])
+	return hash
+}
+
+func GetSigner(header *types.Header) (signer string, err error) {
+	signature := header.Extra[len(header.Extra)-65:]
+	hash := sigHash(header).Bytes()
+	pubkey, err := crypto.Ecrecover(hash, signature)
+	address := make([]byte, 20)
+	copy(address, crypto.Keccak256(pubkey[1:])[12:])
+	signer = util.ToHex(address)
+	return
+}
-- 
GitLab