-
Notifications
You must be signed in to change notification settings - Fork 29
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* init decoder * initial decoder * initial decoder * decoding transaction Teleporter events * cleaning up comments * add documentation * update licensing * refactor event filtering into teleportermessenger package * add abi bindings event * update logging * cleanup docs * log tele/warp message id * update go work sum * extra pre run func and nits * fix typo * restructure cli directory * fix linting for go * add event unit test * add unit tests for event and packing * initial root and event tests * getting event test to working state * basic unit test and ci update * update test step name * remove extra logs * update workflow name
- Loading branch information
minghinmatthewlam
authored
Dec 5, 2023
1 parent
bf805e5
commit 93e3077
Showing
21 changed files
with
857 additions
and
39 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
101 changes: 101 additions & 0 deletions
101
abi-bindings/go/Teleporter/TeleporterMessenger/event.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
// (c) 2023, Ava Labs, Inc. All rights reserved. | ||
// See the file LICENSE for licensing terms. | ||
|
||
package teleportermessenger | ||
|
||
import ( | ||
"fmt" | ||
"strings" | ||
|
||
"github.com/ethereum/go-ethereum/common" | ||
) | ||
|
||
// Event is a Teleporter log event | ||
type Event uint8 | ||
|
||
const ( | ||
Unknown Event = iota | ||
SendCrossChainMessage | ||
ReceiveCrossChainMessage | ||
AddFeeAmount | ||
MessageExecutionFailed | ||
MessageExecuted | ||
RelayerRewardsRedeemed | ||
|
||
sendCrossChainMessageStr = "SendCrossChainMessage" | ||
receiveCrossChainMessageStr = "ReceiveCrossChainMessage" | ||
addFeeAmountStr = "AddFeeAmount" | ||
messageExecutionFailedStr = "MessageExecutionFailed" | ||
messageExecutedStr = "MessageExecuted" | ||
relayerRewardsRedeemedStr = "RelayerRewardsRedeemed" | ||
unknownStr = "Unknown" | ||
) | ||
|
||
// String returns the string representation of an Event | ||
func (e Event) String() string { | ||
switch e { | ||
case SendCrossChainMessage: | ||
return sendCrossChainMessageStr | ||
case ReceiveCrossChainMessage: | ||
return receiveCrossChainMessageStr | ||
case AddFeeAmount: | ||
return addFeeAmountStr | ||
case MessageExecutionFailed: | ||
return messageExecutionFailedStr | ||
case MessageExecuted: | ||
return messageExecutedStr | ||
case RelayerRewardsRedeemed: | ||
return relayerRewardsRedeemedStr | ||
default: | ||
return unknownStr | ||
} | ||
} | ||
|
||
// ToEvent converts a string to an Event | ||
func ToEvent(e string) (Event, error) { | ||
switch strings.ToLower(e) { | ||
case strings.ToLower(sendCrossChainMessageStr): | ||
return SendCrossChainMessage, nil | ||
case strings.ToLower(receiveCrossChainMessageStr): | ||
return ReceiveCrossChainMessage, nil | ||
case strings.ToLower(addFeeAmountStr): | ||
return AddFeeAmount, nil | ||
case strings.ToLower(messageExecutionFailedStr): | ||
return MessageExecutionFailed, nil | ||
case strings.ToLower(messageExecutedStr): | ||
return MessageExecuted, nil | ||
case strings.ToLower(relayerRewardsRedeemedStr): | ||
return RelayerRewardsRedeemed, nil | ||
default: | ||
return Unknown, fmt.Errorf("unknown event %s", e) | ||
} | ||
} | ||
|
||
// FilterTeleporterEvents parses the topics and data of a Teleporter log into the corresponding Teleporter event | ||
func FilterTeleporterEvents(topics []common.Hash, data []byte, event string) (interface{}, error) { | ||
e, err := ToEvent(event) | ||
if err != nil { | ||
return nil, err | ||
} | ||
var out interface{} | ||
switch e { | ||
case SendCrossChainMessage: | ||
out = new(TeleporterMessengerSendCrossChainMessage) | ||
case ReceiveCrossChainMessage: | ||
out = new(TeleporterMessengerReceiveCrossChainMessage) | ||
case AddFeeAmount: | ||
out = new(TeleporterMessengerAddFeeAmount) | ||
case MessageExecutionFailed: | ||
out = new(TeleporterMessengerMessageExecutionFailed) | ||
case MessageExecuted: | ||
out = new(TeleporterMessengerMessageExecuted) | ||
case RelayerRewardsRedeemed: | ||
out = new(TeleporterMessengerRelayerRewardsRedeemed) | ||
default: | ||
return nil, fmt.Errorf("unknown event %s", e.String()) | ||
} | ||
if err := UnpackEvent(out, e.String(), topics, data); err != nil { | ||
return nil, err | ||
} | ||
return out, nil | ||
} |
143 changes: 143 additions & 0 deletions
143
abi-bindings/go/Teleporter/TeleporterMessenger/event_test.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,143 @@ | ||
// Copyright (C) 2023, Ava Labs, Inc. All rights reserved. | ||
// See the file LICENSE for licensing terms. | ||
|
||
package teleportermessenger | ||
|
||
import ( | ||
"math/big" | ||
"testing" | ||
|
||
"github.com/ethereum/go-ethereum/common" | ||
"github.com/stretchr/testify/require" | ||
) | ||
|
||
func TestEventString(t *testing.T) { | ||
var ( | ||
tests = []struct { | ||
event Event | ||
str string | ||
}{ | ||
{Unknown, unknownStr}, | ||
{SendCrossChainMessage, sendCrossChainMessageStr}, | ||
{ReceiveCrossChainMessage, receiveCrossChainMessageStr}, | ||
{AddFeeAmount, addFeeAmountStr}, | ||
{MessageExecutionFailed, messageExecutionFailedStr}, | ||
{MessageExecuted, messageExecutedStr}, | ||
{RelayerRewardsRedeemed, relayerRewardsRedeemedStr}, | ||
} | ||
) | ||
|
||
for _, test := range tests { | ||
t.Run(test.event.String(), func(t *testing.T) { | ||
require.Equal(t, test.event.String(), test.str) | ||
}) | ||
} | ||
} | ||
|
||
func TestToEvent(t *testing.T) { | ||
var ( | ||
tests = []struct { | ||
str string | ||
event Event | ||
isError bool | ||
}{ | ||
{unknownStr, Unknown, true}, | ||
{sendCrossChainMessageStr, SendCrossChainMessage, false}, | ||
{receiveCrossChainMessageStr, ReceiveCrossChainMessage, false}, | ||
{addFeeAmountStr, AddFeeAmount, false}, | ||
{messageExecutionFailedStr, MessageExecutionFailed, false}, | ||
{messageExecutedStr, MessageExecuted, false}, | ||
{relayerRewardsRedeemedStr, RelayerRewardsRedeemed, false}, | ||
} | ||
) | ||
|
||
for _, test := range tests { | ||
t.Run(test.str, func(t *testing.T) { | ||
event, err := ToEvent(test.str) | ||
if test.isError { | ||
require.Error(t, err) | ||
} else { | ||
require.NoError(t, err) | ||
} | ||
require.Equal(t, test.event, event) | ||
}) | ||
} | ||
} | ||
|
||
func TestFilterTeleporterEvents(t *testing.T) { | ||
mockBlockchainID := [32]byte{1, 2, 3, 4} | ||
messageID := big.NewInt(1) | ||
message := createTestTeleporterMessage(messageID.Int64()) | ||
feeInfo := TeleporterFeeInfo{ | ||
FeeTokenAddress: common.HexToAddress("0x0123456789abcdef0123456789abcdef01234567"), | ||
Amount: big.NewInt(1), | ||
} | ||
deliverer := common.HexToAddress("0x0123456789abcdef0123456789abcdef01234567") | ||
|
||
teleporterABI, err := TeleporterMessengerMetaData.GetAbi() | ||
require.NoError(t, err) | ||
|
||
var ( | ||
tests = []struct { | ||
event Event | ||
args []interface{} | ||
expected interface{} | ||
}{ | ||
{ | ||
event: SendCrossChainMessage, | ||
args: []interface{}{ | ||
mockBlockchainID, | ||
messageID, | ||
message, | ||
feeInfo, | ||
}, | ||
expected: &TeleporterMessengerSendCrossChainMessage{ | ||
DestinationBlockchainID: mockBlockchainID, | ||
MessageID: messageID, | ||
Message: message, | ||
FeeInfo: feeInfo, | ||
}, | ||
}, | ||
{ | ||
event: ReceiveCrossChainMessage, | ||
args: []interface{}{ | ||
mockBlockchainID, | ||
messageID, | ||
deliverer, | ||
deliverer, | ||
message, | ||
}, | ||
expected: &TeleporterMessengerReceiveCrossChainMessage{ | ||
OriginBlockchainID: mockBlockchainID, | ||
MessageID: messageID, | ||
Deliverer: deliverer, | ||
RewardRedeemer: deliverer, | ||
Message: message, | ||
}, | ||
}, | ||
{ | ||
event: MessageExecuted, | ||
args: []interface{}{ | ||
mockBlockchainID, | ||
messageID, | ||
}, | ||
expected: &TeleporterMessengerMessageExecuted{ | ||
OriginBlockchainID: mockBlockchainID, | ||
MessageID: messageID, | ||
}, | ||
}, | ||
} | ||
) | ||
|
||
for _, test := range tests { | ||
t.Run(test.event.String(), func(t *testing.T) { | ||
topics, data, err := teleporterABI.PackEvent(test.event.String(), test.args...) | ||
require.NoError(t, err) | ||
|
||
out, err := FilterTeleporterEvents(topics, data, test.event.String()) | ||
require.NoError(t, err) | ||
|
||
require.Equal(t, test.expected, out) | ||
}) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.