arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
Update L1 coordinator Txs
laisolizq laisolizq@gmail.com
Tue, 24 Nov 2020 12:11:35 +0100
commit

7ceaf4c32bf9c97e6bc16aad3e284ee696504b37

parent

486c70e9355152bc90fb5068117329dbff3a05b0

2 files changed, 10 insertions(+), 9 deletions(-)

jump to
M common/l1tx.go → common/l1tx.go

@@ -285,14 +285,18 @@

return tx, nil } +func signHash(data []byte) []byte { + msg := fmt.Sprintf("\x19Ethereum Signed Message:\n%d%s", len(data), data) + return crypto.Keccak256([]byte(msg)) +} + // L1CoordinatorTxFromBytes decodes a L1Tx from []byte func L1CoordinatorTxFromBytes(b []byte, chainID *big.Int, hermezAddress ethCommon.Address) (*L1Tx, error) { if len(b) != L1CoordinatorTxBytesLen { return nil, fmt.Errorf("Can not parse L1CoordinatorTx bytes, expected length %d, current: %d", 101, len(b)) } - bytesMessage1 := []byte("\x19Ethereum Signed Message:\n120") - bytesMessage2 := []byte("I authorize this babyjubjub key for hermez rollup account creation") + bytesMessage := []byte("I authorize this babyjubjub key for hermez rollup account creation") tx := &L1Tx{ UserOrigin: false,

@@ -320,18 +324,16 @@ // L1CoordinatorTX ETH

// Ethereum adds 27 to v v = b[0] - byte(27) //nolint:gomnd chainIDBytes := ethCommon.LeftPadBytes(chainID.Bytes(), 2) - hermezAddressBytes := ethCommon.LeftPadBytes(hermezAddress.Bytes(), 32) var data []byte - data = append(data, bytesMessage1...) - data = append(data, bytesMessage2...) + data = append(data, bytesMessage...) data = append(data, pkCompB...) data = append(data, chainIDBytes[:]...) - data = append(data, hermezAddressBytes...) + data = append(data, hermezAddress.Bytes()...) var signature []byte signature = append(signature, r[:]...) signature = append(signature, s[:]...) signature = append(signature, v) - hash := crypto.Keccak256(data) + hash := signHash(data) pubKeyBytes, err := crypto.Ecrecover(hash, signature) if err != nil { return nil, err
M common/l1tx_test.go → common/l1tx_test.go

@@ -138,7 +138,6 @@ }

func TestL1CoordinatorTxByteParsers(t *testing.T) { hermezAddress := ethCommon.HexToAddress("0xD6C850aeBFDC46D7F4c207e445cC0d6B0919BDBe") - hermezAddressBytes := ethCommon.LeftPadBytes(hermezAddress.Bytes(), 32) chainID := big.NewInt(1337) chainIDBytes := ethCommon.LeftPadBytes(chainID.Bytes(), 2)

@@ -170,7 +169,7 @@ data = append(data, bytesMessage1...)

data = append(data, bytesMessage2...) data = append(data, babyjubB[:]...) data = append(data, chainIDBytes...) - data = append(data, hermezAddressBytes...) + data = append(data, hermezAddress.Bytes()...) hash := crypto.Keccak256Hash(data) signature, err := crypto.Sign(hash.Bytes(), privateKey) require.Nil(t, err)