Skip to content

Commit

Permalink
feat(utils): add HashedL2ToL1Msg method
Browse files Browse the repository at this point in the history
  • Loading branch information
danijelTxFusion committed Jul 27, 2024
1 parent ad61807 commit 98e7825
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
16 changes: 16 additions & 0 deletions utils/bridge.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package utils

import (
"encoding/binary"
"fmt"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto"
"github.com/zksync-sdk/zksync2-go/contracts/erc20"
"github.com/zksync-sdk/zksync2-go/contracts/l2bridge"
"github.com/zksync-sdk/zksync2-go/types"
Expand Down Expand Up @@ -91,3 +93,17 @@ func Erc20BridgeCalldata(l1TokenAddress, l1Sender, l2Receiver common.Address, am
}
return l2BridgeAbi.Pack("finalizeDeposit", l1Sender, l2Receiver, l1TokenAddress, amount, bridgeData)
}

// HashedL2ToL1Msg returns a `keccak` encoded message with a given sender address and
// block number from the L1 messenger contract.
func HashedL2ToL1Msg(sender common.Address, msg []byte, txNumberInBlock uint16) common.Hash {
txNumberInBlockBytes := make([]byte, 2)
binary.BigEndian.PutUint16(txNumberInBlockBytes, txNumberInBlock)

encodedMsg := append([]byte{0, 1}, txNumberInBlockBytes...)
encodedMsg = append(encodedMsg, L1MessengerAddress.Bytes()...)
encodedMsg = append(encodedMsg, common.LeftPadBytes(sender.Bytes(), 32)...)
encodedMsg = append(encodedMsg, crypto.Keccak256(msg)...)

return crypto.Keccak256Hash(encodedMsg)
}
15 changes: 15 additions & 0 deletions utils/bridge_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package utils

import (
"github.com/ethereum/go-ethereum/common"
"github.com/stretchr/testify/assert"
"testing"
)

func TestHashedL2ToL1Msg(t *testing.T) {
sender := common.HexToAddress("0x36615Cf349d7F6344891B1e7CA7C72883F5dc049")
withdrawETHMessage := common.FromHex("0x6c0960f936615cf349d7f6344891b1e7ca7c72883f5dc04900000000000000000000000000000000000000000000000000000001a13b8600")
withdrawETHMessageHash := common.HexToHash("0x521bd25904766c83fe868d6a29cbffa011afd8a1754f6c9a52b053b693e42f18")
expected := HashedL2ToL1Msg(sender, withdrawETHMessage, 0)
assert.Equal(t, expected, withdrawETHMessageHash, "Hashes should be the same")
}

0 comments on commit 98e7825

Please sign in to comment.