Skip to content

Commit

Permalink
Removing deprecated Substrate message handling logic
Browse files Browse the repository at this point in the history
  • Loading branch information
mj52951 committed Jan 18, 2024
1 parent 76790a1 commit 67b0285
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 60 deletions.
4 changes: 2 additions & 2 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -246,8 +246,8 @@ func Run() error {
eventHandlers = append(eventHandlers, substrate_listener.NewRetryEventHandler(l, conn, depositHandler, *config.GeneralChainConfig.Id))
substrateListener := substrate_listener.NewSubstrateListener(conn, eventHandlers, config)

mh := substrateExecutor.NewSubstrateMessageHandler()
mh.RegisterMessageHandler(substrateExecutor.FungibleTransfer, substrateExecutor.FungibleTransferMessageHandler)
mh := coreMessage.NewMessageHandler()
mh.RegisterMessageHandler(substrateExecutor.FungibleTransfer, &substrateExecutor.SubstrateMessageHandler{})

sExecutor := substrateExecutor.NewExecutor(host, communication, coordinator, bridgePallet, keyshareStore, conn, exitLock)
substrateChain := coreSubstrate.NewSubstrateChain(substrateListener, mh, sExecutor, *config.GeneralChainConfig.Id, config.StartBlock)

Check failure on line 253 in app/app.go

View workflow job for this annotation

GitHub Actions / linter-check

cannot use substrateListener (variable of type *"github.com/ChainSafe/sygma-relayer/chains/substrate/listener".SubstrateListener) as type "github.com/sygmaprotocol/sygma-core/chains/substrate".EventListener in argument to coreSubstrate.NewSubstrateChain:

Check failure on line 253 in app/app.go

View workflow job for this annotation

GitHub Actions / linter-check

cannot use substrateListener (variable of type *"github.com/ChainSafe/sygma-relayer/chains/substrate/listener".SubstrateListener) as type "github.com/sygmaprotocol/sygma-core/chains/substrate".EventListener in argument to coreSubstrate.NewSubstrateChain:

Check failure on line 253 in app/app.go

View workflow job for this annotation

GitHub Actions / test (1.19.x, ubuntu-latest)

cannot use substrateListener (variable of type *"github.com/ChainSafe/sygma-relayer/chains/substrate/listener".SubstrateListener) as type "github.com/sygmaprotocol/sygma-core/chains/substrate".EventListener in argument to coreSubstrate.NewSubstrateChain:
Expand Down
54 changes: 6 additions & 48 deletions chains/substrate/executor/message-handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,15 @@ package executor

import (
"errors"
"fmt"
"math/big"

"github.com/ChainSafe/sygma-relayer/chains"
"github.com/ethereum/go-ethereum/common"
"github.com/sygmaprotocol/sygma-core/relayer/message"
"github.com/sygmaprotocol/sygma-core/relayer/proposal"

"github.com/rs/zerolog/log"
)

type Handlers map[message.MessageType]MessageHandlerFunc
type MessageHandlerFunc func(m *chains.TransferMessage) (*proposal.Proposal, error)

type SubstrateMessageHandler struct {
handlers Handlers
}

// NewSubstrateMessageHandler creates an instance of SubstrateMessageHandler that contains
// message handler functions for converting deposit message into a chain specific
// proposal
func NewSubstrateMessageHandler() *SubstrateMessageHandler {
return &SubstrateMessageHandler{
handlers: make(map[message.MessageType]MessageHandlerFunc),
}
}
type SubstrateMessageHandler struct{}

func (mh *SubstrateMessageHandler) HandleMessage(m *message.Message) (*proposal.Proposal, error) {
transferMessage := &chains.TransferMessage{
Expand All @@ -39,39 +22,14 @@ func (mh *SubstrateMessageHandler) HandleMessage(m *message.Message) (*proposal.
Data: m.Data.(chains.TransferMessageData),
Type: m.Type,
}
// Based on handler that was registered on BridgeContract
handleMessage, err := mh.matchTransferTypeHandlerFunc(transferMessage.Type)
if err != nil {
return nil, err
}
log.Info().Str("type", string(transferMessage.Type)).Uint8("src", transferMessage.Source).Uint8("dst", transferMessage.Destination).Uint64("nonce", transferMessage.Data.DepositNonce).Str("resourceID", fmt.Sprintf("%x", transferMessage.Data.ResourceId)).Msg("Handling new message")
prop, err := handleMessage(transferMessage)
if err != nil {
return nil, err
}
return prop, nil
}

func (mh *SubstrateMessageHandler) matchTransferTypeHandlerFunc(transferType message.MessageType) (MessageHandlerFunc, error) {
h, ok := mh.handlers[transferType]
if !ok {
return nil, fmt.Errorf("no corresponding message handler for this transfer type %s exists", transferType)
}
return h, nil
}

// RegisterEventHandler registers an message handler by associating a handler function to a specified transfer type
func (mh *SubstrateMessageHandler) RegisterMessageHandler(transferType message.MessageType, handler MessageHandlerFunc) {
if transferType == "" {
return
switch transferMessage.Type {
case FungibleTransfer:
return fungibleTransferMessageHandler(transferMessage)
}

log.Info().Msgf("Registered message handler for transfer type %s", transferType)

mh.handlers[transferType] = handler
return nil, errors.New("wrong message type passed while handling message")
}

func FungibleTransferMessageHandler(m *chains.TransferMessage) (*proposal.Proposal, error) {
func fungibleTransferMessageHandler(m *chains.TransferMessage) (*proposal.Proposal, error) {

if len(m.Data.Payload) != 2 {
return nil, errors.New("malformed payload. Len of payload should be 2")
Expand Down
24 changes: 14 additions & 10 deletions chains/substrate/executor/message-handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func (s *FungibleTransferHandlerTestSuite) TestFungibleTransferHandleMessage() {
recipientAddr := *(*[]types.U8)(unsafe.Pointer(&substrate.SubstratePK.PublicKey))
recipient := substrate.ConstructRecipientData(recipientAddr)

message := &chains.TransferMessage{
message := &message.Message{
Source: 1,
Destination: 2,
Data: chains.TransferMessageData{
Expand All @@ -61,14 +61,15 @@ func (s *FungibleTransferHandlerTestSuite) TestFungibleTransferHandleMessage() {
Type: "Transfer",
}

prop, err := executor.FungibleTransferMessageHandler(message)
mh := executor.SubstrateMessageHandler{}
prop, err := mh.HandleMessage(message)

s.Nil(err)
s.Equal(prop, expectedProp)
}

func (s *FungibleTransferHandlerTestSuite) TestFungibleTransferHandleMessageIncorrectDataLen() {
message := &chains.TransferMessage{
message := &message.Message{
Source: 1,
Destination: 0,
Data: chains.TransferMessageData{
Expand All @@ -82,15 +83,16 @@ func (s *FungibleTransferHandlerTestSuite) TestFungibleTransferHandleMessageInco
Type: executor.FungibleTransfer,
}

prop, err := executor.FungibleTransferMessageHandler(message)
mh := executor.SubstrateMessageHandler{}
prop, err := mh.HandleMessage(message)

s.Nil(prop)
s.NotNil(err)
s.EqualError(err, errIncorrectFungibleTransferPayloadLen.Error())
}

func (s *FungibleTransferHandlerTestSuite) TestFungibleTransferHandleMessageIncorrectAmount() {
message := &chains.TransferMessage{
message := &message.Message{
Source: 1,
Destination: 0,
Data: chains.TransferMessageData{
Expand All @@ -105,15 +107,16 @@ func (s *FungibleTransferHandlerTestSuite) TestFungibleTransferHandleMessageInco
Type: executor.FungibleTransfer,
}

prop, err := executor.FungibleTransferMessageHandler(message)
mh := executor.SubstrateMessageHandler{}
prop, err := mh.HandleMessage(message)

s.Nil(prop)
s.NotNil(err)
s.EqualError(err, errIncorrectAmount.Error())
}

func (s *FungibleTransferHandlerTestSuite) TestFungibleTransferHandleMessageIncorrectRecipient() {
message := &chains.TransferMessage{
message := &message.Message{
Source: 1,
Destination: 0,
Data: chains.TransferMessageData{
Expand All @@ -128,7 +131,8 @@ func (s *FungibleTransferHandlerTestSuite) TestFungibleTransferHandleMessageInco
Type: executor.FungibleTransfer,
}

prop, err := executor.FungibleTransferMessageHandler(message)
mh := executor.SubstrateMessageHandler{}
prop, err := mh.HandleMessage(message)

s.Nil(prop)
s.NotNil(err)
Expand Down Expand Up @@ -169,9 +173,9 @@ func (s *FungibleTransferHandlerTestSuite) TestSuccesfullyRegisterFungibleTransf
Type: "NonFungibleTransfer",
}

depositMessageHandler := executor.NewSubstrateMessageHandler()
depositMessageHandler := message.NewMessageHandler()
// Register FungibleTransferMessageHandler function
depositMessageHandler.RegisterMessageHandler(executor.FungibleTransfer, executor.FungibleTransferMessageHandler)
depositMessageHandler.RegisterMessageHandler(executor.FungibleTransfer, &executor.SubstrateMessageHandler{})
prop1, err1 := depositMessageHandler.HandleMessage(messageData)
s.Nil(err1)
s.NotNil(prop1)
Expand Down

0 comments on commit 67b0285

Please sign in to comment.