Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: upgrade Cosmos SDK to v0.50.5 #362

Merged
merged 10 commits into from
Mar 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ build-linux: go.sum

test:
@echo "--> Testing..."
@go test -v ./...
@gotestsum ./...

install-linter:
@bash -c "source "scripts/golangci-lint.sh" && install_golangci_lint '$(GOLANGCILINT_VERSION)' '.'"
Expand Down
25 changes: 22 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,29 @@
![Logo!](assets/paloma.png)

# Pigeon
<div align="center">
<h1> Pigeon </h1>
<img alt="Paloma" src="https://github.com/palomachain/pigeon/blob/master/assets/paloma.png" />
</div>

> A Golang cross-chain message relayer system
> for Paloma validators to deliver messages to any blockchain.

<div align="center">
<a href="https://github.com/palomachain/pigeon/blob/master/LICENSE">
<img alt="License: Apache-2.0" src="https://img.shields.io/github/license/palomachain/pigeon.svg" />
</a>
<a href="https://pkg.go.dev/github.com/palomachain/pigeon">
<img src="https://pkg.go.dev/badge/github.com/palomachain/pigeon.svg" alt="Go Reference">
</a>
<a href="https://goreportcard.com/report/github.com/palomachain/pigeon">
<img alt="Go report card" src="https://goreportcard.com/badge/github.com/palomachain/pigeon" />
</a>
<a href="https://github.com/palomachain/pigeon/blob/master/.github/workflows/ci-test.yml">
<img alt="Code Coverage" src="https://github.com/palomachain/pigeon/actions/workflows/ci-test.yml/badge.svg?branch=master" />
</a>
<a href="https://github.com/palomachain/pigeon/blob/master/.github/workflows/release.yml">
<img alt="Code Coverage" src="https://github.com/palomachain/pigeon/actions/workflows/release.yml/badge.svg?branch=master" />
</a>
</div>

For Crosschain software engineers that want simultaneous control of multiple smart contracts, on any blockchain, Paloma is decentralized and consensus-driven message delivery, fast state awareness, low cost state computation, and powerful attestation system that enables scalable, crosschain, smart contract execution with any data source.

## Table of Contents
Expand Down
2 changes: 1 addition & 1 deletion chain/evm/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -496,7 +496,7 @@ func (c *Client) wrapArbitrumBlockByHash(ctx context.Context, blockHash common.H
Nonce: ethtypes.BlockNonce(b.Header().Nonce),
BaseFee: b.Header().BaseFee,
WithdrawalsHash: (*ethcommon.Hash)(b.Header().WithdrawalsHash),
ExcessDataGas: nil,
ExcessBlobGas: nil,
}
return ethtypes.NewBlockWithHeader(hdr), nil
}
Expand Down
30 changes: 2 additions & 28 deletions chain/evm/compass.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import (
"math/big"
"time"

"cosmossdk.io/math"
"github.com/VolumeFi/whoops"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/common"
Expand Down Expand Up @@ -62,8 +62,6 @@ type compass struct {
smartContractAddr common.Address
}

var lastTxHashLkup = make(map[string][]byte) // hack, remove after proper support for ERC20 ownership transfer

func newCompassClient(
smartContractAddrStr,
compassID,
Expand Down Expand Up @@ -479,26 +477,6 @@ func (t compass) processMessages(ctx context.Context, queueTypeName string, msgs
logger.Debug("processing")

switch action := msg.GetAction().(type) {
case *evmtypes.Message_TransferERC20Ownership:
logger := logger.WithFields(log.Fields{
"chain-reference-id": t.ChainReferenceID,
"msg-id": rawMsg.ID,
"msg-bytes-to-sign": rawMsg.BytesToSign,
"msg-msg": rawMsg.Msg,
"msg-nonce": rawMsg.Nonce,
"msg-public-access-data": rawMsg.PublicAccessData,
"message-type": "Message_TransferERC20Ownership",
"new-compass-address": string(action.TransferERC20Ownership.NewCompassAddress),
"last-tx-hash-lkup": lastTxHashLkup,
})
logger.Info("Processing erc20 transfer ownership message")
if err := t.paloma.SetPublicAccessData(ctx, queueTypeName, rawMsg.ID, lastTxHashLkup[t.ChainReferenceID]); err != nil {
logger.WithError(err).Error("Failed to process erc20 transfer ownership message")
gErr.Add(err)
return gErr
}
logger.Info("Processed erc20 transfer ownership message")
return nil
case *evmtypes.Message_SubmitLogicCall:
tx, processingErr = t.submitLogicCall(
ctx,
Expand Down Expand Up @@ -542,9 +520,6 @@ func (t compass) processMessages(ctx context.Context, queueTypeName string, msgs
action.UploadSmartContract,
rawMsg,
)
if tx != nil {
lastTxHashLkup[t.ChainReferenceID] = tx.Hash().Bytes()
}
default:
return ErrUnsupportedMessageType.Format(action)
}
Expand Down Expand Up @@ -790,7 +765,6 @@ func (t compass) provideTxProof(ctx context.Context, queueTypeName string, rawMs
"msg-id": rawMsg.ID,
"public-access-data": rawMsg.PublicAccessData,
}).Debug("providing proof")
lastTxHashLkup[t.ChainReferenceID] = rawMsg.PublicAccessData
txHash := common.BytesToHash(rawMsg.PublicAccessData)
tx, _, err := t.evm.TransactionByHash(ctx, txHash)
if err != nil {
Expand Down Expand Up @@ -824,7 +798,7 @@ func (t compass) submitSendToPalomaClaim(ctx context.Context, event chain.SendTo
EventNonce: event.EventNonce,
EthBlockHeight: event.EthBlockHeight,
TokenContract: event.TokenContract,
Amount: sdk.NewInt(int64(event.Amount)),
Amount: math.NewInt(int64(event.Amount)),
EthereumSender: event.EthereumSender,
PalomaReceiver: event.PalomaReceiver,
ChainReferenceId: t.ChainReferenceID,
Expand Down
2 changes: 1 addition & 1 deletion chain/evm/processor.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ func (p Processor) ExternalAccount() chain.ExternalAccount {
func (p Processor) IsRightChain(ctx context.Context) error {
block, err := p.evmClient.BlockByHash(ctx, p.blockHeightHash)
if err != nil {
return err
return fmt.Errorf("BlockByHash: %w", err)
}

if p.chainReferenceID == "kava-main" && p.blockHeight == 5690000 {
Expand Down
24 changes: 18 additions & 6 deletions chain/paloma/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,9 @@ func (c *Client) AddExternalChainInfo(ctx context.Context, chainInfos ...ChainIn
}

msg := &valset.MsgAddExternalChainInfoForValidator{
Creator: c.creator,
Metadata: valset.MsgMetadata{
Creator: c.creator,
},
}

msg.ChainInfos = slice.Map(
Expand All @@ -150,10 +152,12 @@ func (c *Client) AddMessageEvidence(ctx context.Context, queueTypeName string, m
return err
}
msg := &consensus.MsgAddEvidence{
Creator: c.creator,
Proof: anyProof,
MessageID: messageID,
QueueTypeName: queueTypeName,
Metadata: valset.MsgMetadata{
Creator: c.creator,
},
}

_, err = c.MessageSender.SendMsg(ctx, msg, "", c.sendingOpts...)
Expand All @@ -162,10 +166,12 @@ func (c *Client) AddMessageEvidence(ctx context.Context, queueTypeName string, m

func (c *Client) SetPublicAccessData(ctx context.Context, queueTypeName string, messageID uint64, data []byte) error {
msg := &consensus.MsgSetPublicAccessData{
Creator: c.creator,
Data: data,
MessageID: messageID,
QueueTypeName: queueTypeName,
Metadata: valset.MsgMetadata{
Creator: c.creator,
},
}

_, err := c.MessageSender.SendMsg(ctx, msg, "", c.sendingOpts...)
Expand All @@ -174,10 +180,12 @@ func (c *Client) SetPublicAccessData(ctx context.Context, queueTypeName string,

func (c *Client) SetErrorData(ctx context.Context, queueTypeName string, messageID uint64, data []byte) error {
msg := &consensus.MsgSetErrorData{
Creator: c.creator,
Data: data,
MessageID: messageID,
QueueTypeName: queueTypeName,
Metadata: valset.MsgMetadata{
Creator: c.creator,
},
}

_, err := c.MessageSender.SendMsg(ctx, msg, "", c.sendingOpts...)
Expand All @@ -186,8 +194,10 @@ func (c *Client) SetErrorData(ctx context.Context, queueTypeName string, message

func (c *Client) KeepValidatorAlive(ctx context.Context, appVersion string) error {
msg := &valset.MsgKeepAlive{
Creator: c.creator,
PigeonVersion: appVersion,
Metadata: valset.MsgMetadata{
Creator: c.creator,
},
}

_, err := c.MessageSender.SendMsg(ctx, msg, "", c.sendingOpts...)
Expand Down Expand Up @@ -254,8 +264,10 @@ func broadcastMessageSignatures(
}
}
msg := &consensus.MsgAddMessagesSignatures{
Creator: creator,
SignedMessages: signedMessages,
Metadata: valset.MsgMetadata{
Creator: creator,
},
}
_, err := ms.SendMsg(ctx, msg, "", opts...)
return err
Expand Down
9 changes: 7 additions & 2 deletions chain/paloma/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
consensus "github.com/palomachain/paloma/x/consensus/types"
consensusmocks "github.com/palomachain/paloma/x/consensus/types/mocks"
valset "github.com/palomachain/paloma/x/valset/types"
valsettypes "github.com/palomachain/paloma/x/valset/types"
valsetmocks "github.com/palomachain/paloma/x/valset/types/mocks"
"github.com/palomachain/pigeon/chain"
clientmocks "github.com/palomachain/pigeon/chain/paloma/mocks"
Expand Down Expand Up @@ -339,7 +340,9 @@ func TestKeepValidatorAlive(t *testing.T) {
msgSender := clientmocks.NewMessageSender(t)
msgSender.On("SendMsg",
mock.Anything, &valset.MsgKeepAlive{
Creator: creator,
Metadata: valsettypes.MsgMetadata{
Creator: creator,
},
PigeonVersion: "v1.3.0",
},
"",
Expand Down Expand Up @@ -407,7 +410,9 @@ func TestBroadcastingMessageSignatures(t *testing.T) {
setup: func() MessageSender {
msgSender := clientmocks.NewMessageSender(t)
expectedSignaturesMsg := &consensus.MsgAddMessagesSignatures{
Creator: creator,
Metadata: valsettypes.MsgMetadata{
Creator: creator,
},
SignedMessages: []*consensus.ConsensusMessageSignature{
{
Id: 123,
Expand Down
19 changes: 12 additions & 7 deletions chain/paloma/wrappers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (

sdk "github.com/cosmos/cosmos-sdk/types"
palomatypes "github.com/palomachain/paloma/x/paloma/types"
valsettypes "github.com/palomachain/paloma/x/valset/types"
"github.com/palomachain/pigeon/chain/paloma"
"github.com/palomachain/pigeon/util/ion"
"github.com/stretchr/testify/require"
Expand All @@ -33,7 +34,7 @@ func (m *mockMsgSender) SendMsg(ctx context.Context, msg sdk.Msg, memo string, o

m.calledMsg = msg

return &sdk.TxResponse{TxHash: string(msg.GetSigners()[0])}, m.error
return &sdk.TxResponse{TxHash: msg.String()}, m.error
}

type mockKeyRotator struct{}
Expand Down Expand Up @@ -87,9 +88,11 @@ func Test_PalomaMessageSender_SendMsg(t *testing.T) {
WithSignerProvider(func() string { return signer })

msg := &palomatypes.MsgAddStatusUpdate{
Creator: "foo",
Status: "bar",
Level: palomatypes.MsgAddStatusUpdate_LEVEL_INFO,
Status: "bar",
Level: palomatypes.MsgAddStatusUpdate_LEVEL_INFO,
Metadata: valsettypes.MsgMetadata{
Creator: "foo",
},
}

sender.expectedMsg = msg
Expand All @@ -110,9 +113,11 @@ func Test_PalomaMessageSender_SendMsg(t *testing.T) {
wg := &sync.WaitGroup{}

msg := &palomatypes.MsgAddStatusUpdate{
Creator: "foo",
Status: "bar",
Level: palomatypes.MsgAddStatusUpdate_LEVEL_INFO,
Status: "bar",
Level: palomatypes.MsgAddStatusUpdate_LEVEL_INFO,
Metadata: valsettypes.MsgMetadata{
Creator: "foo",
},
}
sender.expectedMsg = msg

Expand Down
8 changes: 3 additions & 5 deletions cmd/pigeon/cmd_init.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"fmt"
"os"

"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/crypto/hd"
"github.com/cosmos/cosmos-sdk/crypto/keyring"
"github.com/cosmos/cosmos-sdk/types"
Expand All @@ -20,10 +20,8 @@ var initCmd = &cobra.Command{
// if it does not, it creates one which it reads from the passed in config.
key := "signing-key"

legacyAmino := codec.NewLegacyAmino()
aminoCodec := codec.NewAminoCodec(legacyAmino)

kr, err := keyring.New("pigeon", args[0], args[1], os.Stdin, aminoCodec)
clientCtx := client.GetClientContextFromCmd(cmd)
kr, err := keyring.New("pigeon", args[0], args[1], os.Stdin, clientCtx.Codec)
if err != nil {
return err
}
Expand Down
Loading
Loading