Skip to content

Commit

Permalink
Merge pull request #132 from dipdup-io/CLS-88-add-support-of-ibc-tran…
Browse files Browse the repository at this point in the history
…sfer-messages
  • Loading branch information
vvuwei committed Oct 13, 2023
2 parents c52fb5b + 6c0d196 commit 17cf185
Show file tree
Hide file tree
Showing 10 changed files with 156 additions and 8 deletions.
12 changes: 8 additions & 4 deletions cmd/api/docs/docs.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 8 additions & 4 deletions cmd/api/docs/swagger.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions cmd/api/docs/swagger.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions internal/storage/types/msg_address_type.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ package types
voter,
proposer,
authority,
sender,
receiver,
)
*/
//go:generate go-enum --marshal --sql --values
Expand Down
8 changes: 8 additions & 0 deletions internal/storage/types/msg_address_type_enum.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions internal/storage/types/msg_type.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ package types
MsgVote,
MsgVoteWeighted,
MsgDeposit,
IBCTransfer,
)
*/
//go:generate go-enum --marshal --sql --values --noprefix
Expand Down
4 changes: 4 additions & 0 deletions internal/storage/types/msg_type_enum.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

23 changes: 23 additions & 0 deletions pkg/indexer/decode/handle/ibc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// SPDX-FileCopyrightText: 2023 PK Lab AG <contact@pklab.io>
// SPDX-License-Identifier: MIT

package handle

import (
ibcTypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types"
"github.com/dipdup-io/celestia-indexer/internal/storage"
storageTypes "github.com/dipdup-io/celestia-indexer/internal/storage/types"
"github.com/dipdup-io/celestia-indexer/pkg/types"
)

// IBCTransfer defines a msg to transfer fungible tokens (i.e., Coins) between
// ICS20 enabled chains. See ICS Spec here:
// https://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer#data-structures
func IBCTransfer(level types.Level, m *ibcTypes.MsgTransfer) (storageTypes.MsgType, []storage.AddressWithType, error) {
msgType := storageTypes.IBCTransfer
addresses, err := createAddresses(addressesData{
{t: storageTypes.MsgAddressTypeSender, address: m.Sender},
{t: storageTypes.MsgAddressTypeReceiver, address: m.Receiver},
}, level)
return msgType, addresses, err
}
91 changes: 91 additions & 0 deletions pkg/indexer/decode/handle/test/ibc_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
// SPDX-FileCopyrightText: 2023 PK Lab AG <contact@pklab.io>
// SPDX-License-Identifier: MIT

package handle

import (
"github.com/cosmos/cosmos-sdk/types"
ibcTypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types"
ibcCoreClientTypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types"
"github.com/dipdup-io/celestia-indexer/internal/storage"
storageTypes "github.com/dipdup-io/celestia-indexer/internal/storage/types"
testsuite "github.com/dipdup-io/celestia-indexer/internal/test_suite"
"github.com/dipdup-io/celestia-indexer/pkg/indexer/decode"
"github.com/fatih/structs"
"github.com/shopspring/decimal"
"github.com/stretchr/testify/assert"
"testing"
)

// MsgTransfer

func createIBCMsgTransfer() types.Msg {
m := ibcTypes.MsgTransfer{
SourcePort: "",
SourceChannel: "",
Token: types.Coin{},
Sender: "celestia1j33593mn9urzydakw06jdun8f37shlucmhr8p6",
Receiver: "celestia1vsvx8n7f8dh5udesqqhgrjutyun7zqrgehdq2l",
TimeoutHeight: ibcCoreClientTypes.Height{},
TimeoutTimestamp: 0,
Memo: "",
}

return &m
}

func TestDecodeMsg_SuccessOnIBCMsgTransfer(t *testing.T) {
msgSend := createIBCMsgTransfer()
blob, now := testsuite.EmptyBlock()
position := 0

dm, err := decode.Message(msgSend, blob.Height, blob.Block.Time, position, storageTypes.StatusSuccess)

addressesExpected := []storage.AddressWithType{
{
Type: storageTypes.MsgAddressTypeSender,
Address: storage.Address{
Id: 0,
Height: blob.Height,
LastHeight: blob.Height,
Address: "celestia1j33593mn9urzydakw06jdun8f37shlucmhr8p6",
Hash: []byte{0x94, 0x63, 0x42, 0xc7, 0x73, 0x2f, 0x6, 0x22, 0x37, 0xb6, 0x73, 0xf5, 0x26, 0xf2, 0x67, 0x4c, 0x7d, 0xb, 0xff, 0x98},
Balance: storage.Balance{
Id: 0,
Total: decimal.Zero,
},
},
},
{
Type: storageTypes.MsgAddressTypeReceiver,
Address: storage.Address{
Id: 0,
Height: blob.Height,
LastHeight: blob.Height,
Address: "celestia1vsvx8n7f8dh5udesqqhgrjutyun7zqrgehdq2l",
Hash: []byte{0x64, 0x18, 0x63, 0xcf, 0xc9, 0x3b, 0x6f, 0x4e, 0x37, 0x30, 0x0, 0x2e, 0x81, 0xcb, 0x8b, 0x27, 0x27, 0xe1, 0x0, 0x68},
Balance: storage.Balance{
Id: 0,
Total: decimal.Zero,
},
},
},
}

msgExpected := storage.Message{
Id: 0,
Height: blob.Height,
Time: now,
Position: 0,
Type: storageTypes.IBCTransfer,
TxId: 0,
Data: structs.Map(msgSend),
Namespace: nil,
Addresses: addressesExpected,
}

assert.NoError(t, err)
assert.Equal(t, int64(0), dm.BlobsSize)
assert.Equal(t, msgExpected, dm.Msg)
assert.Equal(t, addressesExpected, dm.Addresses)
}
5 changes: 5 additions & 0 deletions pkg/indexer/decode/message.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ package decode

import (
"github.com/cosmos/cosmos-sdk/x/authz"
ibcTypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types"
"github.com/dipdup-io/celestia-indexer/pkg/indexer/decode/handle"
"time"

Expand Down Expand Up @@ -133,6 +134,10 @@ func Message(
case *cosmosGovTypesV1Beta1.MsgDeposit:
d.Msg.Type, d.Msg.Addresses, err = handle.MsgDeposit(height, typedMsg.Depositor)

// ibc module
case *ibcTypes.MsgTransfer:
d.Msg.Type, d.Msg.Addresses, err = handle.IBCTransfer(height, typedMsg)

default:
log.Err(errors.New("unknown message type")).Msgf("got type %T", msg)
d.Msg.Type = storageTypes.MsgUnknown
Expand Down

0 comments on commit 17cf185

Please sign in to comment.