From 361ec683613d0046914f8bc4f934e4a5bf1421f7 Mon Sep 17 00:00:00 2001 From: Marius C Date: Tue, 14 Jan 2025 17:51:38 +0200 Subject: [PATCH 1/3] FEAT: Simple version bridge bitmap + epoch --- server/bridgeServer_test.go | 2 ++ server/txSender/dataFormatter.go | 16 +++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/server/bridgeServer_test.go b/server/bridgeServer_test.go index 140a724..37e83ae 100644 --- a/server/bridgeServer_test.go +++ b/server/bridgeServer_test.go @@ -5,7 +5,9 @@ import ( "testing" "github.com/multiversx/mx-chain-core-go/data/sovereign" + "github.com/multiversx/mx-chain-sovereign-bridge-go/testscommon" + "github.com/stretchr/testify/require" ) diff --git a/server/txSender/dataFormatter.go b/server/txSender/dataFormatter.go index faa3dd0..9976882 100644 --- a/server/txSender/dataFormatter.go +++ b/server/txSender/dataFormatter.go @@ -7,6 +7,8 @@ import ( "github.com/multiversx/mx-chain-core-go/core" "github.com/multiversx/mx-chain-core-go/core/check" "github.com/multiversx/mx-chain-core-go/data/sovereign" + "github.com/multiversx/mx-chain-core-go/data/typeConverters" + "github.com/multiversx/mx-chain-core-go/data/typeConverters/uint64ByteSlice" "github.com/multiversx/mx-chain-core-go/hashing" ) @@ -16,7 +18,8 @@ const ( ) type dataFormatter struct { - hasher hashing.Hasher + hasher hashing.Hasher + uIntConverter typeConverters.Uint64ByteSliceConverter } // NewDataFormatter creates a sovereign bridge tx data formatter @@ -26,7 +29,8 @@ func NewDataFormatter(hasher hashing.Hasher) (*dataFormatter, error) { } return &dataFormatter{ - hasher: hasher, + hasher: hasher, + uIntConverter: uint64ByteSlice.NewBigEndianConverter(), }, nil } @@ -65,9 +69,15 @@ func (df *dataFormatter) createRegisterBridgeOperationsData(bridgeData *sovereig return nil } + // TODO: Here, create a new uint32 converter or just use binary.Uin32 std library + registerBridgeOpData := []byte(registerBridgeOpsPrefix + "@" + hex.EncodeToString(bridgeData.AggregatedSignature) + - "@" + hex.EncodeToString(bridgeData.Hash)) + "@" + hex.EncodeToString(bridgeData.Hash) + + "@" + hex.EncodeToString(bridgeData.PubKeysBitmap) + + "@" + hex.EncodeToString(df.uIntConverter.ToByteSlice(uint64(bridgeData.Epoch)))) + + log.Error("register data", "msg", string(registerBridgeOpData)) return append(registerBridgeOpData, hashesHexEncodedArgs...) } From 44bbab08337f7194a60bab6f6a338b0e23f525e7 Mon Sep 17 00:00:00 2001 From: Marius C Date: Wed, 15 Jan 2025 17:34:23 +0200 Subject: [PATCH 2/3] FEAT: Create bridge data operations correct format --- go.mod | 4 ++-- go.sum | 4 ++-- server/txSender/dataFormatter.go | 11 ++++++----- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 3736e3b..85609d6 100644 --- a/go.mod +++ b/go.mod @@ -6,12 +6,13 @@ require ( github.com/gin-gonic/gin v1.9.1 github.com/gorilla/websocket v1.5.0 github.com/joho/godotenv v1.5.1 - github.com/multiversx/mx-chain-core-go v1.2.23-0.20241007113300-50ac1ae23824 + github.com/multiversx/mx-chain-core-go v1.2.24-0.20250113143225-72ba2e508401 github.com/multiversx/mx-chain-crypto-go v1.2.11 github.com/multiversx/mx-chain-go v1.7.12 github.com/multiversx/mx-chain-logger-go v1.0.14 github.com/multiversx/mx-sdk-go v1.4.4-0.20241105143052-f5830f5b9079 github.com/stretchr/testify v1.8.4 + github.com/tyler-smith/go-bip39 v1.1.0 github.com/urfave/cli v1.22.14 google.golang.org/grpc v1.60.1 ) @@ -56,7 +57,6 @@ require ( github.com/tklauser/go-sysconf v0.3.4 // indirect github.com/tklauser/numcpus v0.2.1 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect - github.com/tyler-smith/go-bip39 v1.1.0 // indirect github.com/ugorji/go/codec v1.2.11 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect golang.org/x/arch v0.3.0 // indirect diff --git a/go.sum b/go.sum index 00a3f98..60108ce 100644 --- a/go.sum +++ b/go.sum @@ -123,8 +123,8 @@ github.com/multiversx/concurrent-map v0.1.4 h1:hdnbM8VE4b0KYJaGY5yJS2aNIW9TFFsUY github.com/multiversx/concurrent-map v0.1.4/go.mod h1:8cWFRJDOrWHOTNSqgYCUvwT7c7eFQ4U2vKMOp4A/9+o= github.com/multiversx/mx-chain-communication-go v1.0.14 h1:YhAUDjBBpc5h5W0A7LHLXUMIMeCgwgGvkqfAPbFqsno= github.com/multiversx/mx-chain-communication-go v1.0.14/go.mod h1:qYCqgk0h+YpcTA84jHIpCBy6UShRwmXzHSCcdfwNrkw= -github.com/multiversx/mx-chain-core-go v1.2.23-0.20241007113300-50ac1ae23824 h1:OHYcWOeTNwSaTMRAfusu6/1zoTWGEtHKPBig4dbRAwM= -github.com/multiversx/mx-chain-core-go v1.2.23-0.20241007113300-50ac1ae23824/go.mod h1:P/YBoFnt25XUaCQ7Q/SD15vhnc9yV5JDhHxyFO9P8Z0= +github.com/multiversx/mx-chain-core-go v1.2.24-0.20250113143225-72ba2e508401 h1:jMSqlYlzHwbbjYerMGNZtZsm4eZshH3uXW9N8iNbHD0= +github.com/multiversx/mx-chain-core-go v1.2.24-0.20250113143225-72ba2e508401/go.mod h1:P/YBoFnt25XUaCQ7Q/SD15vhnc9yV5JDhHxyFO9P8Z0= github.com/multiversx/mx-chain-crypto-go v1.2.11 h1:MNPJoiTJA5/tedYrI0N22OorbsKDESWG0SF8MCJwcJI= github.com/multiversx/mx-chain-crypto-go v1.2.11/go.mod h1:pcZutPdfLiAFytzCU3LxU3s8cXkvpNqquyitFSfoF3o= github.com/multiversx/mx-chain-go v1.7.12 h1:cQ3g5sFZEcQmIRwi/wt+K/3d5nIwCMQRC1ZnJDRuRY4= diff --git a/server/txSender/dataFormatter.go b/server/txSender/dataFormatter.go index 9976882..99a5019 100644 --- a/server/txSender/dataFormatter.go +++ b/server/txSender/dataFormatter.go @@ -73,13 +73,14 @@ func (df *dataFormatter) createRegisterBridgeOperationsData(bridgeData *sovereig registerBridgeOpData := []byte(registerBridgeOpsPrefix + "@" + hex.EncodeToString(bridgeData.AggregatedSignature) + - "@" + hex.EncodeToString(bridgeData.Hash) + - "@" + hex.EncodeToString(bridgeData.PubKeysBitmap) + - "@" + hex.EncodeToString(df.uIntConverter.ToByteSlice(uint64(bridgeData.Epoch)))) + "@" + hex.EncodeToString(bridgeData.Hash)) + registerBridgeOpData = append(registerBridgeOpData, hashesHexEncodedArgs...) - log.Error("register data", "msg", string(registerBridgeOpData)) + bridgeDataArgs := []byte( + "@" + hex.EncodeToString(bridgeData.PubKeysBitmap) + + "@" + hex.EncodeToString(df.uIntConverter.ToByteSlice(uint64(bridgeData.Epoch)))) - return append(registerBridgeOpData, hashesHexEncodedArgs...) + return append(registerBridgeOpData, bridgeDataArgs...) } func createBridgeOperationsData(hashOfHashes []byte, outGoingOperations []*sovereign.OutGoingOperation) [][]byte { From 53f8aa7cffc441fb0254b1050c44fbc5348a8f4a Mon Sep 17 00:00:00 2001 From: Marius C Date: Wed, 15 Jan 2025 17:52:14 +0200 Subject: [PATCH 3/3] FIX: Bitmap + epoch bridge data tests --- server/txSender/dataFormatter.go | 19 ++++++++++--------- server/txSender/dataFormatter_test.go | 18 +++++++++++++++--- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/server/txSender/dataFormatter.go b/server/txSender/dataFormatter.go index 99a5019..3d0c939 100644 --- a/server/txSender/dataFormatter.go +++ b/server/txSender/dataFormatter.go @@ -2,13 +2,12 @@ package txSender import ( "bytes" + "encoding/binary" "encoding/hex" "github.com/multiversx/mx-chain-core-go/core" "github.com/multiversx/mx-chain-core-go/core/check" "github.com/multiversx/mx-chain-core-go/data/sovereign" - "github.com/multiversx/mx-chain-core-go/data/typeConverters" - "github.com/multiversx/mx-chain-core-go/data/typeConverters/uint64ByteSlice" "github.com/multiversx/mx-chain-core-go/hashing" ) @@ -18,8 +17,7 @@ const ( ) type dataFormatter struct { - hasher hashing.Hasher - uIntConverter typeConverters.Uint64ByteSliceConverter + hasher hashing.Hasher } // NewDataFormatter creates a sovereign bridge tx data formatter @@ -29,8 +27,7 @@ func NewDataFormatter(hasher hashing.Hasher) (*dataFormatter, error) { } return &dataFormatter{ - hasher: hasher, - uIntConverter: uint64ByteSlice.NewBigEndianConverter(), + hasher: hasher, }, nil } @@ -69,8 +66,6 @@ func (df *dataFormatter) createRegisterBridgeOperationsData(bridgeData *sovereig return nil } - // TODO: Here, create a new uint32 converter or just use binary.Uin32 std library - registerBridgeOpData := []byte(registerBridgeOpsPrefix + "@" + hex.EncodeToString(bridgeData.AggregatedSignature) + "@" + hex.EncodeToString(bridgeData.Hash)) @@ -78,11 +73,17 @@ func (df *dataFormatter) createRegisterBridgeOperationsData(bridgeData *sovereig bridgeDataArgs := []byte( "@" + hex.EncodeToString(bridgeData.PubKeysBitmap) + - "@" + hex.EncodeToString(df.uIntConverter.ToByteSlice(uint64(bridgeData.Epoch)))) + "@" + hex.EncodeToString(uint32ToBytes(bridgeData.Epoch))) return append(registerBridgeOpData, bridgeDataArgs...) } +func uint32ToBytes(value uint32) []byte { + buff := make([]byte, 4) + binary.BigEndian.PutUint32(buff, value) + return buff +} + func createBridgeOperationsData(hashOfHashes []byte, outGoingOperations []*sovereign.OutGoingOperation) [][]byte { executeBridgeOpsTxData := make([][]byte, 0) for _, operation := range outGoingOperations { diff --git a/server/txSender/dataFormatter_test.go b/server/txSender/dataFormatter_test.go index 99ae987..1015737 100644 --- a/server/txSender/dataFormatter_test.go +++ b/server/txSender/dataFormatter_test.go @@ -6,8 +6,9 @@ import ( "github.com/multiversx/mx-chain-core-go/core" "github.com/multiversx/mx-chain-core-go/data/sovereign" - "github.com/multiversx/mx-chain-sovereign-bridge-go/testscommon" "github.com/stretchr/testify/require" + + "github.com/multiversx/mx-chain-sovereign-bridge-go/testscommon" ) func TestNewDataFormatter(t *testing.T) { @@ -57,6 +58,9 @@ func TestDataFormatter_CreateTxsData(t *testing.T) { bridgeDataOp2 := []byte("bridgeDataOp2") bridgeDataOp3 := []byte("bridgeDataOp3") + pubKeysBitmap1 := []byte("pubKeysBitmap1") + pubKeysBitmap2 := []byte("pubKeysBitmap2") + bridgeOps := &sovereign.BridgeOperations{ Data: []*sovereign.BridgeOutGoingData{ { @@ -73,6 +77,8 @@ func TestDataFormatter_CreateTxsData(t *testing.T) { }, AggregatedSignature: aggregatedSig1, LeaderSignature: leaderSig1, + PubKeysBitmap: pubKeysBitmap1, + Epoch: 1, }, { Hash: bridgeDataHash2, @@ -84,6 +90,8 @@ func TestDataFormatter_CreateTxsData(t *testing.T) { }, AggregatedSignature: aggregatedSig2, LeaderSignature: leaderSig2, + PubKeysBitmap: pubKeysBitmap2, + Epoch: 2, }, }, } @@ -116,7 +124,9 @@ func TestDataFormatter_CreateTxsData(t *testing.T) { "@" + hex.EncodeToString(aggregatedSig1) + "@" + hex.EncodeToString(bridgeDataHash1) + "@" + hex.EncodeToString(opHash1) + - "@" + hex.EncodeToString(opHash2)) + "@" + hex.EncodeToString(opHash2) + + "@" + hex.EncodeToString(pubKeysBitmap1) + + "@" + "00000001") execOp1 := []byte(executeBridgeOpsPrefix + "@" + hex.EncodeToString(bridgeDataHash1) + "@" + hex.EncodeToString(bridgeDataOp1)) @@ -128,7 +138,9 @@ func TestDataFormatter_CreateTxsData(t *testing.T) { registerBridgeOpsPrefix + "@" + hex.EncodeToString(aggregatedSig2) + "@" + hex.EncodeToString(bridgeDataHash2) + - "@" + hex.EncodeToString(opHash3)) + "@" + hex.EncodeToString(opHash3) + + "@" + hex.EncodeToString(pubKeysBitmap2) + + "@" + "00000002") execOp3 := []byte(executeBridgeOpsPrefix + "@" + hex.EncodeToString(bridgeDataHash2) + "@" + hex.EncodeToString(bridgeDataOp3))