Skip to content
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
33 changes: 16 additions & 17 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ replace github.com/btcsuite/btcd => github.com/btcsuite/btcd v0.22.0-beta
exclude github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2

require (
cosmossdk.io/api v0.7.6
cosmossdk.io/api v0.9.2
cosmossdk.io/collections v0.4.0
cosmossdk.io/core v0.11.0
cosmossdk.io/depinject v1.2.1
Expand All @@ -27,17 +27,17 @@ require (
github.com/libp2p/go-libp2p-pubsub v0.14.0
github.com/multiformats/go-multiaddr v0.15.0
github.com/prometheus/client_golang v1.22.0
github.com/rollkit/rollkit v0.14.2-0.20250603093058-6a441b7b3018
github.com/rollkit/rollkit/core v0.0.0-20250529164851-d4b4a1e88558
github.com/rollkit/rollkit/da v0.0.0-20250526094218-4a5686055970
github.com/rollkit/rollkit/sequencers/single v0.0.0-20250526094218-4a5686055970
github.com/rollkit/rollkit v0.14.2-0.20250609100102-37f58596c74c
github.com/rollkit/rollkit/core v0.0.0-20250609100102-37f58596c74c
github.com/rollkit/rollkit/da v0.0.0-20250609100102-37f58596c74c
github.com/rollkit/rollkit/sequencers/single v0.0.0-20250609100102-37f58596c74c
github.com/rs/cors v1.11.1
github.com/spf13/cobra v1.9.1
github.com/stretchr/testify v1.10.0
golang.org/x/net v0.40.0
golang.org/x/sync v0.14.0
golang.org/x/net v0.41.0
golang.org/x/sync v0.15.0
google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2
google.golang.org/grpc v1.72.2
google.golang.org/grpc v1.73.0
)

require (
Expand All @@ -57,14 +57,14 @@ require (
connectrpc.com/connect v1.18.1 // indirect
connectrpc.com/grpcreflect v1.3.0 // indirect
connectrpc.com/otelconnect v0.7.2 // indirect
cosmossdk.io/store v1.1.1 // indirect
cosmossdk.io/store v1.1.2 // indirect
cosmossdk.io/x/tx v0.13.7 // indirect
filippo.io/edwards25519 v1.0.0 // indirect
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect
github.com/99designs/keyring v1.2.1 // indirect
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect
github.com/DataDog/datadog-go v3.2.0+incompatible // indirect
github.com/DataDog/zstd v1.5.5 // indirect
github.com/DataDog/zstd v1.5.6 // indirect
github.com/Microsoft/go-winio v0.6.2 // indirect
github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
github.com/benbjohnson/clock v1.3.5 // indirect
Expand Down Expand Up @@ -157,10 +157,10 @@ require (
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-hclog v1.5.0 // indirect
github.com/hashicorp/go-hclog v1.6.3 // indirect
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/go-plugin v1.5.2 // indirect
github.com/hashicorp/go-plugin v1.6.3 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
Expand All @@ -175,7 +175,7 @@ require (
github.com/ipfs/go-cid v0.5.0 // indirect
github.com/ipfs/go-ds-badger4 v0.1.8 // indirect
github.com/ipfs/go-log v1.0.5 // indirect
github.com/ipfs/go-log/v2 v2.5.1 // indirect
github.com/ipfs/go-log/v2 v2.6.0 // indirect
github.com/ipld/go-ipld-prime v0.21.0 // indirect
github.com/jackpal/go-nat-pmp v1.0.2 // indirect
github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect
Expand Down Expand Up @@ -211,7 +211,6 @@ require (
github.com/minio/highwayhash v1.0.3 // indirect
github.com/minio/sha256-simd v1.0.1 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/moby/docker-image-spec v1.3.1 // indirect
github.com/moby/go-archive v0.1.0 // indirect
Expand Down Expand Up @@ -326,12 +325,12 @@ require (
go.uber.org/zap v1.27.0 // indirect
go.uber.org/zap/exp v0.3.0 // indirect
golang.org/x/arch v0.15.0 // indirect
golang.org/x/crypto v0.38.0 // indirect
golang.org/x/crypto v0.39.0 // indirect
golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 // indirect
golang.org/x/mod v0.24.0 // indirect
golang.org/x/mod v0.25.0 // indirect
golang.org/x/sys v0.33.0 // indirect
golang.org/x/term v0.32.0 // indirect
golang.org/x/text v0.25.0 // indirect
golang.org/x/text v0.26.0 // indirect
golang.org/x/tools v0.33.0 // indirect
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
gonum.org/v1/gonum v0.15.1 // indirect
Expand Down
69 changes: 32 additions & 37 deletions go.sum

Large diffs are not rendered by default.

48 changes: 38 additions & 10 deletions pkg/adapter/adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,15 @@ import (
host "github.com/libp2p/go-libp2p/core/host"
ma "github.com/multiformats/go-multiaddr"

"github.com/rollkit/rollkit/block"
"github.com/rollkit/rollkit/core/execution"
rollnode "github.com/rollkit/rollkit/node"
rollkitp2p "github.com/rollkit/rollkit/pkg/p2p"
"github.com/rollkit/rollkit/pkg/signer"
rstore "github.com/rollkit/rollkit/pkg/store"
"github.com/rollkit/rollkit/types"
rolltypes "github.com/rollkit/rollkit/types"

"github.com/rollkit/go-execution-abci/pkg/cometcompat"
"github.com/rollkit/go-execution-abci/pkg/p2p"
)

Expand Down Expand Up @@ -59,6 +62,8 @@ type Adapter struct {
RollkitStore rstore.Store
Mempool mempool.Mempool
MempoolIDs *mempoolIDs
// Signer is only used to be passed down to RPC via environment.
Signer signer.Signer

P2PClient P2PClientInfo
TxGossiper *p2p.Gossiper
Expand All @@ -82,6 +87,7 @@ func NewABCIExecutor(
cfg *config.Config,
appGenesis *genutiltypes.AppGenesis,
metrics *Metrics,
signer signer.Signer,
) *Adapter {
if metrics == nil {
metrics = NopMetrics()
Expand All @@ -104,6 +110,7 @@ func NewABCIExecutor(
p2pMetrics: p2pMetrics,
AppGenesis: appGenesis,
MempoolIDs: newMempoolIDs(),
Signer: signer,
Metrics: metrics,
}

Expand Down Expand Up @@ -283,7 +290,6 @@ func (a *Adapter) ExecuteTxs(
blockHeight uint64,
timestamp time.Time,
prevStateRoot []byte,
metadata map[string]interface{},
) ([]byte, uint64, error) {
execStart := time.Now()
defer func() {
Expand All @@ -292,18 +298,40 @@ func (a *Adapter) ExecuteTxs(
a.Logger.Info("Executing block", "height", blockHeight, "num_txs", len(txs), "timestamp", timestamp)
a.Metrics.TxsExecutedPerBlock.Observe(float64(len(txs)))

var headerHash types.Hash
if h, ok := metadata[types.HeaderHashKey]; ok {
headerHash = h.(types.Hash)
} else {
a.Logger.Info("header hash not found in metadata, running genesis block")
}

s, err := a.Store.LoadState(ctx)
if err != nil {
return nil, 0, fmt.Errorf("failed to load state: %w", err)
}

header, ok := ctx.Value(block.HeaderContextKey).(rolltypes.SignedHeader)
if !ok {
return nil, 0, fmt.Errorf("rollkit header not found in context")
}

signerPubKey, err := a.Signer.GetPublic()
if err != nil {
return nil, 0, fmt.Errorf("failed to get signer public key: %w", err)
}

if err := header.SetCustomVerifier(func(header *rolltypes.Header) ([]byte, error) {
return cometcompat.SignaturePayloadProvider(signerPubKey, header)
}); err != nil {
return nil, 0, fmt.Errorf("failed to set custom verifier: %w", err)
}

if err := header.ValidateBasic(); err != nil {
return nil, 0, fmt.Errorf("header validation failed: %w", err)
}

headerHash, err := cometcompat.CommitHasher(
&header.Signature,
&header.Header,
s.Validators.Proposer.Address,
)
if err != nil {
return nil, 0, fmt.Errorf("failed to compute header hash: %w", err)
}

var proposedLastCommit abci.CommitInfo
if blockHeight > 1 {
header, data, err := a.RollkitStore.GetBlockData(ctx, blockHeight-1)
Expand Down Expand Up @@ -451,7 +479,7 @@ func (a *Adapter) ExecuteTxs(
cmtTxs[i] = txs[i]
}

var commit = &cmttypes.Commit{
commit := &cmttypes.Commit{
Height: int64(blockHeight),
Round: 0,
Signatures: []cmttypes.CommitSig{
Expand Down
7 changes: 5 additions & 2 deletions pkg/adapter/adapter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/rollkit/rollkit/block"
"github.com/rollkit/rollkit/types"
)

Expand Down Expand Up @@ -77,7 +78,7 @@ func TestExecuteFiresEvents(t *testing.T) {
myMockApp := mockApp(myExecResult, spec.mockMutator)

originStore := ds.NewMapDatastore()
adapter := NewABCIExecutor(myMockApp, originStore, nil, nil, log.NewTestLogger(t), nil, nil, NopMetrics())
adapter := NewABCIExecutor(myMockApp, originStore, nil, nil, log.NewTestLogger(t), nil, nil, NopMetrics(), nil)
adapter.EventBus = eventBus
adapter.MempoolIDs = newMempoolIDs()
adapter.Mempool = &mempool.NopMempool{}
Expand All @@ -87,7 +88,8 @@ func TestExecuteFiresEvents(t *testing.T) {
require.NoError(t, adapter.Store.SaveState(ctx, stateFixture()))

// when
_, _, err := adapter.ExecuteTxs(ctx, spec.txs, 1, timestamp, bytes.Repeat([]byte{1}, 32), nil)
ctx = context.WithValue(ctx, block.HeaderContextKey, headerFixture().Header)
_, _, err := adapter.ExecuteTxs(ctx, spec.txs, 1, timestamp, bytes.Repeat([]byte{1}, 32))
if spec.expErr {
require.Error(t, err)
blockMx.RLock()
Expand Down Expand Up @@ -199,6 +201,7 @@ func (m *MockABCIApp) ProcessProposal(r *abci.RequestProcessProposal) (*abci.Res
}
return m.ProcessProposalFn(r)
}

func (m *MockABCIApp) FinalizeBlock(r *abci.RequestFinalizeBlock) (*abci.ResponseFinalizeBlock, error) {
if m.FinalizeBlockFn == nil {
panic("not expected to be called")
Expand Down
16 changes: 16 additions & 0 deletions pkg/cometcompat/commit_hasher.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package cometcompat

import (
"github.com/rollkit/rollkit/types"
)

func CommitHasher(
signature *types.Signature,
header *types.Header,
proposerAddress []byte,
) (types.Hash, error) {
abciCommit := GetABCICommit(header.Height(), header.Hash(), proposerAddress, header.Time(), *signature)
abciCommit.Signatures[0].ValidatorAddress = proposerAddress
abciCommit.Signatures[0].Timestamp = header.Time()
return types.Hash(abciCommit.Hash()), nil
}
16 changes: 16 additions & 0 deletions pkg/cometcompat/header_hasher.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package cometcompat

import (
"github.com/libp2p/go-libp2p/core/crypto"

rollkittypes "github.com/rollkit/rollkit/types"
)

func HeaderHasher(proposerKey crypto.PubKey, header *rollkittypes.Header) (rollkittypes.Hash, error) {
abciHeader, err := ToABCIHeader(proposerKey, header)
if err != nil {
return nil, err
}

return rollkittypes.Hash(abciHeader.Hash()), nil
}
33 changes: 33 additions & 0 deletions pkg/cometcompat/signer.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package cometcompat

import (
cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
cmtypes "github.com/cometbft/cometbft/types"
"github.com/libp2p/go-libp2p/core/crypto"

"github.com/rollkit/rollkit/types"
)

func SignaturePayloadProvider(proposerKey crypto.PubKey, header *types.Header) ([]byte, error) {
abciHeaderForSigning, err := ToABCIHeader(proposerKey, header)
if err != nil {
return nil, err
}

vote := cmtproto.Vote{
Type: cmtproto.PrecommitType,
Height: int64(header.Height()), //nolint:gosec
Round: 0,
BlockID: cmtproto.BlockID{
Hash: abciHeaderForSigning.Hash(),
PartSetHeader: cmtproto.PartSetHeader{},
},
Timestamp: header.Time(),
ValidatorAddress: header.ProposerAddress,
ValidatorIndex: 0,
}
chainID := header.ChainID()
consensusVoteBytes := cmtypes.VoteSignBytes(chainID, &vote)

return consensusVoteBytes, nil
}
Loading
Loading