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(executor): added MsgUpsertSequencer consensus message #1120

Closed
wants to merge 30 commits into from
Closed
Show file tree
Hide file tree
Changes from 27 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
ca7a5a4
temp commit
Sep 19, 2024
e382846
temp commit
Sep 23, 2024
c6639e7
add consensus messages to the block data
Sep 23, 2024
336e3ca
Execute block
Sep 23, 2024
9209ab6
previous proto gen
Sep 23, 2024
d08e81b
add consensus messages stream
Sep 24, 2024
45164f1
add some fixes
Sep 26, 2024
adb695c
goimports
Oct 4, 2024
f24ea2f
remove nil check
Oct 4, 2024
0fa4c8d
goimports
Oct 4, 2024
4b061ec
remove line from proto
Oct 4, 2024
038a2a3
remove proto comment
Oct 4, 2024
130d86c
Merge branch 'main' into feat/consensus-messages
keruch Oct 4, 2024
102fa8e
merge commit
keruch Oct 4, 2024
dc2cafe
feat(executor): added MsgUpsertSequencer consensus message
keruch Oct 4, 2024
9f507a4
feat(executor): MsgUpsertSequecner
keruch Oct 7, 2024
d55070b
tests fix 1
keruch Oct 7, 2024
ef2a708
tests fix 2
keruch Oct 7, 2024
f357f7d
Updated cometbft version.
omritoptix Oct 8, 2024
08965fc
Merge branch 'feat/consensus-messages' into kirill/1248-sequencer-rew…
keruch Oct 9, 2024
0f93728
Merge branch 'main' into kirill/1248-sequencer-reward-addr
keruch Oct 9, 2024
ae84159
linked tasks
keruch Oct 9, 2024
6b340dd
Merge branch 'main' into kirill/1248-sequencer-reward-addr
keruch Oct 14, 2024
ab8d8d2
feat(proto): added hub and rdk x/sequencer
keruch Oct 14, 2024
fae24da
feat(proto): added hub and rdk x/sequencer
keruch Oct 14, 2024
cffbeab
Merge branch 'kirill/1083-proto' into kirill/1248-sequencer-reward-addr
keruch Oct 14, 2024
05b4930
fix build
keruch Oct 15, 2024
0fea268
Merge branch 'main' into kirill/1248-sequencer-reward-addr
keruch Oct 15, 2024
e3fc776
threads
keruch Oct 16, 2024
3a7aebd
threads 1
keruch Oct 16, 2024
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 .mockery.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ packages:
github.com/dymensionxyz/dymint/settlement/dymension:
interfaces:
CosmosClient:
github.com/dymensionxyz/dymint/third_party/dymension/sequencer/types:
github.com/dymensionxyz/dymint/types/pb/dymensionxyz/dymension/sequencer:
interfaces:
QueryClient:
github.com/dymensionxyz/dymint/types/pb/dymensionxyz/dymension/rollapp:
Expand Down
13 changes: 6 additions & 7 deletions block/executor.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (

proto2 "github.com/gogo/protobuf/proto"
proto "github.com/gogo/protobuf/types"

abci "github.com/tendermint/tendermint/abci/types"
tmcrypto "github.com/tendermint/tendermint/crypto/encoding"
tmstate "github.com/tendermint/tendermint/proto/tendermint/state"
Expand Down Expand Up @@ -104,25 +103,25 @@ func (e *Executor) InitChain(genesis *tmtypes.GenesisDoc, valset []*tmtypes.Vali
})
}

// CreateBlock reaps transactions from mempool and builds a block.
// CreateBlock reaps transactions from mempool and builds a block. Optionally, executes consensus messages that
// gets from the consensus messages stream or from the method args.
func (e *Executor) CreateBlock(
height uint64,
lastCommit *types.Commit,
lastHeaderHash, nextSeqHash [32]byte,
state *types.State,
maxBlockDataSizeBytes uint64,
consensusMsgs ...proto2.Message,
) *types.Block {
maxBlockDataSizeBytes = min(maxBlockDataSizeBytes, uint64(max(minBlockMaxBytes, state.ConsensusParams.Block.MaxBytes)))
mempoolTxs := e.mempool.ReapMaxBytesMaxGas(int64(maxBlockDataSizeBytes), state.ConsensusParams.Block.MaxGas)

var consensusAnyMessages []*proto.Any
if e.consensusMessagesStream != nil {
consensusMessages, err := e.consensusMessagesStream.GetConsensusMessages()
if err != nil {
e.logger.Error("Failed to get consensus messages", "error", err)
}

consensusAnyMessages = fromProtoMsgSliceToAnySlice(consensusMessages)
consensusMsgs = append(consensusMsgs, consensusMessages...)
}

block := &types.Block{
Expand All @@ -145,7 +144,7 @@ func (e *Executor) CreateBlock(
Txs: toDymintTxs(mempoolTxs),
IntermediateStateRoots: types.IntermediateStateRoots{RawRootsList: nil},
Evidence: types.EvidenceData{Evidence: nil},
ConsensusMessages: consensusAnyMessages,
ConsensusMessages: fromProtoMsgSliceToAnySlice(consensusMsgs...),
},
LastCommit: *lastCommit,
}
Expand Down Expand Up @@ -328,7 +327,7 @@ func fromProtoMsgToAny(msg proto2.Message) *proto.Any {
}
}

func fromProtoMsgSliceToAnySlice(msgs []proto2.Message) []*proto.Any {
func fromProtoMsgSliceToAnySlice(msgs ...proto2.Message) []*proto.Any {
result := make([]*proto.Any, len(msgs))
for i, msg := range msgs {
result[i] = fromProtoMsgToAny(msg)
Expand Down
2 changes: 1 addition & 1 deletion block/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ func NewManager(
mempool,
proxyApp,
eventBus,
nil, // TODO add ConsensusMessagesStream
nil, // TODO add ConsensusMessagesStream: https://github.com/dymensionxyz/dymint/issues/1125
logger,
)
if err != nil {
Expand Down
97 changes: 81 additions & 16 deletions block/produce.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,22 @@ import (
"fmt"
"time"

codectypes "github.com/cosmos/cosmos-sdk/codec/types"
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
"github.com/dymensionxyz/gerr-cosmos/gerrc"

"github.com/dymensionxyz/dymint/node/events"
"github.com/dymensionxyz/dymint/store"
uevent "github.com/dymensionxyz/dymint/utils/event"

"github.com/gogo/protobuf/proto"
tmed25519 "github.com/tendermint/tendermint/crypto/ed25519"
cmtproto "github.com/tendermint/tendermint/proto/tendermint/types"
tmtypes "github.com/tendermint/tendermint/types"
tmtime "github.com/tendermint/tendermint/types/time"

sequencertypes "github.com/dymensionxyz/dymint/types/pb/rollapp/sequencers/types"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
sequencertypes "github.com/dymensionxyz/dymint/types/pb/rollapp/sequencers/types"
rdktypes "github.com/dymensionxyz/dymint/types/pb/rollapp/sequencers/types"


"github.com/dymensionxyz/dymint/node/events"
"github.com/dymensionxyz/dymint/store"
"github.com/dymensionxyz/dymint/types"
uevent "github.com/dymensionxyz/dymint/utils/event"
protoutils "github.com/dymensionxyz/dymint/utils/proto"
)

// ProduceBlockLoop is calling publishBlock in a loop as long as we're synced.
Expand Down Expand Up @@ -96,18 +100,26 @@ func (m *Manager) ProduceBlockLoop(ctx context.Context, bytesProducedC chan int)
}
}

// nextProposerInfo holds information about the next proposer.
type nextProposerInfo struct {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this nextProposerInfo struct is uneeded, and changes alot of APIs just to be used in consensusMsgsOnCreateBlock.
nextProposerAddr can be queried using m.State.Sequencers.GetByHash (similar to SetByHash)

// nextProposerHash is a tendermint-compatible hash of the sequencer.
nextProposerHash [32]byte
// nextProposerAddr is a sequencer's settlement address.
nextProposerAddr string
}

// ProduceApplyGossipLastBlock produces and applies a block with the given nextProposerHash.
func (m *Manager) ProduceApplyGossipLastBlock(ctx context.Context, nextProposerHash [32]byte) (err error) {
_, _, err = m.produceApplyGossip(ctx, true, &nextProposerHash)
func (m *Manager) ProduceApplyGossipLastBlock(ctx context.Context, nextProposerInfo nextProposerInfo) (err error) {
_, _, err = m.produceApplyGossip(ctx, true, &nextProposerInfo)
return err
}

func (m *Manager) ProduceApplyGossipBlock(ctx context.Context, allowEmpty bool) (block *types.Block, commit *types.Commit, err error) {
return m.produceApplyGossip(ctx, allowEmpty, nil)
}

func (m *Manager) produceApplyGossip(ctx context.Context, allowEmpty bool, nextProposerHash *[32]byte) (block *types.Block, commit *types.Commit, err error) {
block, commit, err = m.produceBlock(allowEmpty, nextProposerHash)
func (m *Manager) produceApplyGossip(ctx context.Context, allowEmpty bool, nextProposerInfo *nextProposerInfo) (block *types.Block, commit *types.Commit, err error) {
block, commit, err = m.produceBlock(allowEmpty, nextProposerInfo)
if err != nil {
return nil, nil, fmt.Errorf("produce block: %w", err)
}
Expand All @@ -123,7 +135,7 @@ func (m *Manager) produceApplyGossip(ctx context.Context, allowEmpty bool, nextP
return block, commit, nil
}

func (m *Manager) produceBlock(allowEmpty bool, nextProposerHash *[32]byte) (*types.Block, *types.Commit, error) {
func (m *Manager) produceBlock(allowEmpty bool, nextProposerInfo *nextProposerInfo) (*types.Block, *types.Commit, error) {
newHeight := m.State.NextHeight()
lastHeaderHash, lastCommit, err := m.GetPreviousBlockHashes(newHeight)
if err != nil {
Expand All @@ -148,14 +160,28 @@ func (m *Manager) produceBlock(allowEmpty bool, nextProposerHash *[32]byte) (*ty
return nil, nil, fmt.Errorf("load block: height: %d: %w: %w", newHeight, err, ErrNonRecoverable)
}

maxBlockDataSize := uint64(float64(m.Conf.BatchSubmitBytes) * types.MaxBlockSizeAdjustment)
proposerHashForBlock := [32]byte(m.State.Sequencers.ProposerHash())
// if nextProposerHash is set, we create a last block
if nextProposerHash != nil {
var (
maxBlockDataSize = uint64(float64(m.Conf.BatchSubmitBytes) * types.MaxBlockSizeAdjustment)
Dismissed Show dismissed Hide dismissed
proposerHashForBlock = [32]byte(m.State.Sequencers.ProposerHash())
nextProposerAddr = m.State.Sequencers.Proposer.SettlementAddress
lastProposerBlock = false // Indicates that the block is the last for the current seq. True during the rotation.
)
// if nextProposerInfo is set, we create a last block
if nextProposerInfo != nil {
maxBlockDataSize = 0
proposerHashForBlock = *nextProposerHash
proposerHashForBlock = nextProposerInfo.nextProposerHash
nextProposerAddr = nextProposerInfo.nextProposerAddr
lastProposerBlock = true
}
// TODO: Ideally, there should be only one point for adding consensus messages. Given that they come from
// ConsensusMessagesStream, this should send them there instead of having to ways of sending consensusMessages.
// There is no implementation of the stream as of now. Unify the approach of adding consensus messages when
// the stream is implemented! https://github.com/dymensionxyz/dymint/issues/1125
consensusMsgs, err := m.consensusMsgsOnCreateBlock(nextProposerAddr, lastProposerBlock)
if err != nil {
return nil, nil, fmt.Errorf("create consensus msgs for create block: last proposer block: %v, height: %d, next proposer addr: %s: %w: %w", lastProposerBlock, newHeight, nextProposerAddr, err, ErrNonRecoverable)
}
block = m.Executor.CreateBlock(newHeight, lastCommit, lastHeaderHash, proposerHashForBlock, m.State, maxBlockDataSize)
block = m.Executor.CreateBlock(newHeight, lastCommit, lastHeaderHash, proposerHashForBlock, m.State, maxBlockDataSize, consensusMsgs...)
keruch marked this conversation as resolved.
Show resolved Hide resolved
if !allowEmpty && len(block.Data.Txs) == 0 {
return nil, nil, fmt.Errorf("%w: %w", types.ErrEmptyBlock, ErrRecoverable)
}
Expand All @@ -171,6 +197,45 @@ func (m *Manager) produceBlock(allowEmpty bool, nextProposerHash *[32]byte) (*ty
return block, commit, nil
}

// consensusMsgsOnCreateBlock forms a list of consensus messages that need execution on rollapp's BeginBlock.
// Currently, we need to create a sequencer in the rollapp if it doesn't exist in the following cases:
// - On the very first block after the genesis or
// - On the last block of the current sequencer (eg, during the rotation).
func (m *Manager) consensusMsgsOnCreateBlock(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i suggest to move to separate file, to have all consesnsMsg related logic

nextProposerSettlementAddr string,
lastSeqBlock bool, // Indicates that the block is the last for the current seq. True during the rotation.
) ([]proto.Message, error) {
if !m.State.IsGenesis() && !lastSeqBlock {
return nil, nil
}

nextSeq := m.State.Sequencers.GetByAddress(nextProposerSettlementAddr)
// Sanity check. Must never happen in practice. The sequencer's existence is verified beforehand in Manager.CompleteRotation.
if nextSeq == nil {
return nil, fmt.Errorf("no sequencer found for address while creating a new block: %s", nextProposerSettlementAddr)
}

// Get proposer's consensus public key and convert it to proto.Any
val, err := nextSeq.TMValidator()
if err != nil {
return nil, fmt.Errorf("convert next squencer to tendermint validator: %w", err)
}
pubKey, err := cryptocodec.FromTmPubKeyInterface(val.PubKey)
if err != nil {
return nil, fmt.Errorf("convert tendermint pubkey to cosmos: %w", err)
}
anyPK, err := codectypes.NewAnyWithValue(pubKey)
if err != nil {
return nil, fmt.Errorf("convert cosmos pubkey to any: %w", err)
}

return []proto.Message{&sequencertypes.ConsensusMsgUpsertSequencer{
Operator: nextProposerSettlementAddr,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we're passing "dym1...." to the RDK, which needs to be converted to the rollapp's native prefix.
Maybe we should pass the []byte of the address, not the bech32 representation

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i had bytes here initially but i thought it wasn't convenient, so i added a method in sdk-utils to convert an arbitrary-prefixed bech32 string to AccAddress and reused it everywhere in rdk

func FromBech32[T sdk.AccAddress | sdk.ValAddress](addr string) (T, error)

dymensionxyz/sdk-utils#11

ConsPubKey: protoutils.CosmosToGogo(anyPK),
RewardAddr: nextProposerSettlementAddr,
}}, nil
}

// create commit for block
func (m *Manager) createCommit(block *types.Block) (*types.Commit, error) {
abciHeaderPb := types.ToABCIHeaderPB(&block.Header)
Expand Down
11 changes: 7 additions & 4 deletions block/sequencers.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,10 @@ func (m *Manager) CompleteRotation(ctx context.Context, nextSeqAddr string) erro
copy(nextSeqHash[:], seq.Hash())
}

err := m.CreateAndPostLastBatch(ctx, nextSeqHash)
err := m.CreateAndPostLastBatch(ctx, nextProposerInfo{
nextProposerHash: nextSeqHash,
nextProposerAddr: nextSeqAddr,
})
if err != nil {
return fmt.Errorf("create and post last batch: %w", err)
}
Expand All @@ -131,18 +134,18 @@ func (m *Manager) CompleteRotation(ctx context.Context, nextSeqAddr string) erro

// CreateAndPostLastBatch creates and posts the last batch to the hub
// this called after manager shuts down the block producer and submitter
func (m *Manager) CreateAndPostLastBatch(ctx context.Context, nextSeqHash [32]byte) error {
func (m *Manager) CreateAndPostLastBatch(ctx context.Context, nextProposerInfo nextProposerInfo) error {
h := m.State.Height()
block, err := m.Store.LoadBlock(h)
if err != nil {
return fmt.Errorf("load block: height: %d: %w", h, err)
}

// check if the last block already produced with nextProposerHash set
if bytes.Equal(block.Header.NextSequencersHash[:], nextSeqHash[:]) {
if bytes.Equal(block.Header.NextSequencersHash[:], nextProposerInfo.nextProposerHash[:]) {
m.logger.Debug("Last block already produced and applied.")
} else {
err := m.ProduceApplyGossipLastBlock(ctx, nextSeqHash)
err := m.ProduceApplyGossipLastBlock(ctx, nextProposerInfo)
if err != nil {
return fmt.Errorf("produce apply gossip last block: %w", err)
}
Expand Down
1 change: 0 additions & 1 deletion buf.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ version: v1beta1
build:
roots:
- proto
- third_party/proto
lint:
use:
- DEFAULT
Expand Down
11 changes: 5 additions & 6 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,14 @@ require (
cloud.google.com/go/storage v1.38.0 // indirect
github.com/celestiaorg/go-square v1.0.1 // indirect
github.com/celestiaorg/go-square/merkle v0.0.0-20240429192549-dea967e1533b // indirect
github.com/cosmos/ibc-go/v6 v6.2.1 // indirect
github.com/cskr/pubsub v1.0.2 // indirect
github.com/dgraph-io/badger/v3 v3.2103.3 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/hashicorp/go-getter v1.7.5 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/ipfs/go-block-format v0.2.0 // indirect
github.com/tklauser/go-sysconf v0.3.11 // indirect
github.com/tklauser/numcpus v0.6.0 // indirect
google.golang.org/api v0.169.0 // indirect
)

Expand Down Expand Up @@ -120,7 +121,7 @@ require (
go.uber.org/fx v1.20.1 // indirect
golang.org/x/exp v0.0.0-20240213143201-ec583247a57a
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237
google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect
sigs.k8s.io/yaml v1.4.0 // indirect
Expand Down Expand Up @@ -257,7 +258,7 @@ require (

require (
cosmossdk.io/math v1.3.0 // indirect
github.com/DataDog/zstd v1.5.2 // indirect
github.com/DataDog/zstd v1.5.5 // indirect
github.com/Jorropo/jsync v1.0.1 // indirect
github.com/blang/semver/v4 v4.0.0 // indirect
github.com/btcsuite/btcd/btcutil v1.1.3 // indirect
Expand All @@ -267,10 +268,9 @@ require (
github.com/cockroachdb/pebble v1.1.0 // indirect
github.com/cockroachdb/redact v1.1.5 // indirect
github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect
github.com/cosmos/ibc-go/v6 v6.2.1 // indirect
github.com/danwt/gerr v1.0.0 // indirect
github.com/evmos/evmos/v12 v12.1.6 // indirect
github.com/getsentry/sentry-go v0.18.0 // indirect
github.com/getsentry/sentry-go v0.23.0 // indirect
github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f // indirect
github.com/holiman/uint256 v1.2.2 // indirect
github.com/ipfs/bbloom v0.0.4 // indirect
Expand All @@ -297,7 +297,6 @@ require (

replace (
github.com/centrifuge/go-substrate-rpc-client/v4 => github.com/availproject/go-substrate-rpc-client/v4 v4.0.12-avail-1.4.0-rc1-5e286e3
github.com/dymensionxyz/dymension-rdk => github.com/dymensionxyz/dymension-rdk v1.6.1-0.20240827102903-08636e7ab3f8
github.com/evmos/evmos/v12 => github.com/dymensionxyz/evmos/v12 v12.1.6-dymension-v0.3
github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.2-alpha.regen.4
github.com/gorilla/rpc => github.com/dymensionxyz/rpc v1.3.1
Expand Down
12 changes: 6 additions & 6 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -212,8 +212,8 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym
github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM=
github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4=
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8=
github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw=
github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ=
github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw=
github.com/Jorropo/jsync v1.0.1 h1:6HgRolFZnsdfzRUj+ImB9og1JYOxQoReSywkHOGSaUU=
github.com/Jorropo/jsync v1.0.1/go.mod h1:jCOZj3vrBCri3bSU3ErUYvevKlnbssrXeCivybS5ABQ=
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
Expand Down Expand Up @@ -509,8 +509,8 @@ github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI=
github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww=
github.com/getsentry/sentry-go v0.18.0 h1:MtBW5H9QgdcJabtZcuJG80BMOwaBpkRDZkxRkNC1sN0=
github.com/getsentry/sentry-go v0.18.0/go.mod h1:Kgon4Mby+FJ7ZWHFUAZgVaIa8sxHtnRJRLTXZr51aKQ=
github.com/getsentry/sentry-go v0.23.0 h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE=
github.com/getsentry/sentry-go v0.23.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
Expand Down Expand Up @@ -1200,8 +1200,8 @@ github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhso
github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg=
github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM=
github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI=
github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw=
github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk=
github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms=
github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4=
github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q=
Expand Down

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

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

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

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

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

2 changes: 1 addition & 1 deletion mocks/github.com/dymensionxyz/dymint/store/mock_Store.go

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

Loading
Loading