Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
fc55f6b
Initial merge
JonathanOppenheimer Aug 4, 2025
11396cf
Merge branch 'master' into uplift-evm-warp
JonathanOppenheimer Aug 5, 2025
f24ddbe
Merge branch 'master' into uplift-evm-warp
JonathanOppenheimer Aug 19, 2025
9df2485
Merge branch 'master' into uplift-evm-warp
JonathanOppenheimer Oct 28, 2025
f5de4e1
Clean up post validators to AvalancheGo
JonathanOppenheimer Oct 28, 2025
017a635
lint
JonathanOppenheimer Oct 28, 2025
dce47f5
change codec registration order
JonathanOppenheimer Oct 28, 2025
b3e50b3
Merge branch 'master' into uplift-evm-warp
JonathanOppenheimer Oct 30, 2025
b4c2061
Merge branch 'master' into uplift-evm-warp
JonathanOppenheimer Nov 4, 2025
0049456
Merge branch 'master' into uplift-evm-warp
JonathanOppenheimer Nov 5, 2025
c8a971b
unalias imports
JonathanOppenheimer Nov 5, 2025
d1f2a07
Refine comments
JonathanOppenheimer Nov 5, 2025
8b74474
Update vms/evm/warp/backend.go
JonathanOppenheimer Nov 5, 2025
7b7e10e
use payload
JonathanOppenheimer Nov 5, 2025
b12444e
Remove constructor
JonathanOppenheimer Nov 5, 2025
d9c117f
Update vms/evm/warp/verifier_backend_test.go
JonathanOppenheimer Nov 5, 2025
1f3ebd4
Simplify structs / rename items
JonathanOppenheimer Nov 5, 2025
44078f0
fold metrics in
JonathanOppenheimer Nov 5, 2025
1cb5f50
First pass refactor
JonathanOppenheimer Nov 5, 2025
5454474
constants first
JonathanOppenheimer Nov 5, 2025
4674da5
Refactor part 2: get rid of interface
JonathanOppenheimer Nov 5, 2025
e2b157a
Compartmentalize warp components
JonathanOppenheimer Nov 5, 2025
67ff47f
remove duplicated check
JonathanOppenheimer Nov 5, 2025
7b0c908
remove handler
JonathanOppenheimer Nov 6, 2025
d06652e
Export verifier and remove AddAndSign
JonathanOppenheimer Nov 6, 2025
7d5e9c0
Lint
JonathanOppenheimer Nov 6, 2025
1a618c8
Merge branch 'master' into uplift-evm-warp
JonathanOppenheimer Nov 6, 2025
71135c8
Josh service refactor
JonathanOppenheimer Nov 6, 2025
abafd3d
Initial Josh easy fixes
JonathanOppenheimer Nov 12, 2025
2a88f16
Remove use of payload and shared codec
JonathanOppenheimer Nov 12, 2025
295dd4f
Use warp signer directly
JonathanOppenheimer Nov 12, 2025
9d278c2
add back sign message function
JonathanOppenheimer Nov 12, 2025
6414f63
lint
JonathanOppenheimer Nov 12, 2025
f0ec0ce
Merge branch 'master' into uplift-evm-warp
JonathanOppenheimer Nov 12, 2025
0758cd3
Use acp118 adapter
JonathanOppenheimer Nov 12, 2025
e750ed4
Merge branch 'master' into uplift-evm-warp
JonathanOppenheimer Nov 16, 2025
35a0c0e
add codec test
JonathanOppenheimer Nov 16, 2025
dabcd5f
don't require t
JonathanOppenheimer Nov 16, 2025
f0809d8
Merge branch 'master' into uplift-evm-warp
JonathanOppenheimer Dec 17, 2025
6db3799
refactor: use evms/vm/warp
JonathanOppenheimer Dec 17, 2025
a13d9f5
chore: delete example
JonathanOppenheimer Dec 17, 2025
1936e9d
Merge branch 'master' into uplift-evm-warp
JonathanOppenheimer Dec 17, 2025
4378fac
chore: lint
JonathanOppenheimer Dec 17, 2025
38ccd9d
Merge branch 'master' into uplift-evm-warp
JonathanOppenheimer Dec 18, 2025
962b8f2
Merge remote-tracking branch 'origin/master' into uplift-evm-warp
JonathanOppenheimer Jan 5, 2026
9a95409
fix: first round pass at Josh's comments
JonathanOppenheimer Jan 5, 2026
99b310d
fix: Josh round 2 comments + organize tests
JonathanOppenheimer Jan 5, 2026
3f4e0e1
Merge remote-tracking branch 'origin/master' into uplift-evm-warp
JonathanOppenheimer Jan 5, 2026
ee060e3
refactor: remove no cache testing
JonathanOppenheimer Jan 5, 2026
19e89ab
test: remove duplicative test
JonathanOppenheimer Jan 5, 2026
ed438fc
fix: correct NewService argument calls
JonathanOppenheimer Jan 5, 2026
7ae577a
refactor: unexport codec
JonathanOppenheimer Jan 5, 2026
a1c447c
chore: update metric names
JonathanOppenheimer Jan 5, 2026
47cb95f
refactor: subnetIDStr to subnetID
JonathanOppenheimer Jan 5, 2026
1f7d078
chore: lint
JonathanOppenheimer Jan 5, 2026
c7ede48
Merge branch 'master' into uplift-evm-warp
JonathanOppenheimer Jan 5, 2026
03672f2
chore: lint
JonathanOppenheimer Jan 5, 2026
2fea545
fix: double initilization
JonathanOppenheimer Jan 5, 2026
1a62391
docs: improve function doc names
JonathanOppenheimer Jan 5, 2026
134abe1
refactor: rewrite tests
JonathanOppenheimer Jan 5, 2026
5213f1c
chore: lint
JonathanOppenheimer Jan 5, 2026
42ab82e
fix: warp service initialization
JonathanOppenheimer Jan 14, 2026
716541c
Merge remote-tracking branch 'origin' into uplift-evm-warp
JonathanOppenheimer Jan 14, 2026
dafd957
refactor: Josh suggestions
JonathanOppenheimer Jan 15, 2026
1296300
refactor: more Josh feedback
JonathanOppenheimer Jan 15, 2026
3ef91ea
Merge branch 'master' into uplift-evm-warp
JonathanOppenheimer Jan 15, 2026
6fa4ddc
chore: lint
JonathanOppenheimer Jan 15, 2026
bef2f7e
chore: fix license
JonathanOppenheimer Jan 15, 2026
2ba5fce
test: do not introspect on warp service
JonathanOppenheimer Jan 15, 2026
5a5c57c
Merge remote-tracking branch 'origin' into uplift-evm-warp
JonathanOppenheimer Jan 27, 2026
8e5d3ed
Merge branch 'master' into uplift-evm-warp
JonathanOppenheimer Jan 27, 2026
1530d65
fix: function call
JonathanOppenheimer Jan 27, 2026
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
75 changes: 45 additions & 30 deletions graft/coreth/plugin/evm/vm.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import (
_ "github.com/ava-labs/libevm/eth/tracers/js"
_ "github.com/ava-labs/libevm/eth/tracers/native"

"github.com/ava-labs/avalanchego/cache"
"github.com/ava-labs/avalanchego/cache/lru"
"github.com/ava-labs/avalanchego/cache/metercacher"
"github.com/ava-labs/avalanchego/codec"
Expand All @@ -61,7 +62,6 @@ import (
"github.com/ava-labs/avalanchego/graft/coreth/sync/client/stats"
"github.com/ava-labs/avalanchego/graft/coreth/sync/engine"
"github.com/ava-labs/avalanchego/graft/coreth/sync/handlers"
"github.com/ava-labs/avalanchego/graft/coreth/warp"
"github.com/ava-labs/avalanchego/graft/evm/constants"
"github.com/ava-labs/avalanchego/graft/evm/rpc"
"github.com/ava-labs/avalanchego/graft/evm/triedb/hashdb"
Expand All @@ -81,6 +81,7 @@ import (
"github.com/ava-labs/avalanchego/vms/evm/acp176"
"github.com/ava-labs/avalanchego/vms/evm/acp226"
"github.com/ava-labs/avalanchego/vms/evm/sync/customrawdb"
"github.com/ava-labs/avalanchego/vms/evm/warp"

corethlog "github.com/ava-labs/avalanchego/graft/coreth/plugin/evm/log"
warpcontract "github.com/ava-labs/avalanchego/graft/coreth/precompile/contracts/warp"
Expand All @@ -90,6 +91,7 @@ import (
commonEng "github.com/ava-labs/avalanchego/snow/engine/common"
avalancheUtils "github.com/ava-labs/avalanchego/utils"
avalanchegoprometheus "github.com/ava-labs/avalanchego/vms/evm/metrics/prometheus"
warpRPC "github.com/ava-labs/avalanchego/vms/evm/warp/rpc"
ethparams "github.com/ava-labs/libevm/params"
)

Expand All @@ -113,6 +115,7 @@ const (
ethMetricsPrefix = "eth"
sdkMetricsPrefix = "sdk"
chainStateMetricsPrefix = "chain_state"
warpMetricsPrefix = "warp"
)

// Define the API endpoints for the VM
Expand Down Expand Up @@ -245,9 +248,12 @@ type VM struct {
engine.Server
engine.Client

// Avalanche Warp Messaging backend
// Avalanche Warp Messaging components
// Used to serve BLS signatures of warp messages over RPC
warpBackend warp.Backend
warpMsgDB *warp.DB
warpVerifier *warp.Verifier
warpSignatureCache cache.Cacher[ids.ID, []byte]
warpService *warpRPC.Service

ethTxPushGossiper avalancheUtils.Atomic[*avalanchegossip.PushGossiper[*GossipEthTx]]

Expand Down Expand Up @@ -427,16 +433,12 @@ func (vm *VM) Initialize(
return fmt.Errorf("failed to create network: %w", err)
}

// Initialize warp backend
offchainWarpMessages := make([][]byte, len(vm.config.WarpOffChainMessages))
for i, hexMsg := range vm.config.WarpOffChainMessages {
offchainWarpMessages[i] = []byte(hexMsg)
}
warpSignatureCache := lru.NewCache[ids.ID, []byte](warpSignatureCacheSize)
meteredCache, err := metercacher.New("warp_signature_cache", vm.sdkMetrics, warpSignatureCache)
if err != nil {
return fmt.Errorf("failed to create warp signature cache: %w", err)
}
vm.warpSignatureCache = meteredCache

// clear warpdb on initialization if config enabled
if vm.config.PruneWarpDB {
Expand All @@ -445,26 +447,21 @@ func (vm *VM) Initialize(
}
}

vm.warpBackend, err = warp.NewBackend(
vm.ctx.NetworkID,
vm.ctx.ChainID,
vm.ctx.WarpSigner,
vm,
vm.warpDB,
meteredCache,
offchainWarpMessages,
)
if err != nil {
vm.warpMsgDB = warp.NewDB(vm.warpDB)
warpMetrics := prometheus.NewRegistry()
vm.warpVerifier = warp.NewVerifier(vm.warpMsgDB, vm, nil, warpMetrics)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This is a bug - it looks like this we're missing coverage on both p2p and the api.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Are you referring to the missing uptime tracker? Isn't that only for subnet-evm?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This is a behavior change because sharing the code between coreth <-> subnet-evm means that now coreth is handling the ValidatorUptime message - and with a nil uptime tracker this would panic the C-Chain if it handled one of these messages. I'll add a regression test for this.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

that makes sense - thanks for explaining

if err := vm.ctx.Metrics.Register(warpMetricsPrefix, warpMetrics); err != nil {
return err
}

if err := vm.initializeChain(lastAcceptedHash); err != nil {
return err
}

go vm.ctx.Log.RecoverAndPanic(vm.startContinuousProfiler)

// Add p2p warp message warpHandler
warpHandler := acp118.NewCachedHandler(meteredCache, vm.warpBackend, vm.ctx.WarpSigner)
warpHandler := warp.NewHandler(vm.warpSignatureCache, vm.warpVerifier, vm.ctx.WarpSigner)
if err = vm.P2PNetwork().AddHandler(p2p.SignatureRequestHandlerID, warpHandler); err != nil {
return err
}
Expand Down Expand Up @@ -958,25 +955,22 @@ func (vm *VM) getBlock(_ context.Context, id ids.ID) (snowman.Block, error) {
return wrapBlock(ethBlock, vm)
}

// GetAcceptedBlock attempts to retrieve block [blkID] from the VM. This method
// only returns accepted blocks.
func (vm *VM) GetAcceptedBlock(ctx context.Context, blkID ids.ID) (snowman.Block, error) {
// HasBlock returns nil if the block is accepted, or an error otherwise.
func (vm *VM) HasBlock(ctx context.Context, blkID ids.ID) error {
blk, err := vm.GetBlock(ctx, blkID)
if err != nil {
return nil, err
return err
}

height := blk.Height()
acceptedBlkID, err := vm.GetBlockIDAtHeight(ctx, height)
acceptedBlkID, err := vm.GetBlockIDAtHeight(ctx, blk.Height())
if err != nil {
return nil, err
return err
}

if acceptedBlkID != blkID {
// The provided block is not accepted.
return nil, database.ErrNotFound
return database.ErrNotFound
}
return blk, nil
return nil
}

// SetPreference sets what the current tail of the chain is
Expand Down Expand Up @@ -1045,7 +1039,28 @@ func (vm *VM) CreateHandlers(context.Context) (map[string]http.Handler, error) {
warpSDKClient := vm.P2PNetwork().NewClient(p2p.SignatureRequestHandlerID, vm.P2PValidators())
signatureAggregator := acp118.NewSignatureAggregator(vm.ctx.Log, warpSDKClient)

if err := handler.RegisterName("warp", warp.NewAPI(vm.ctx, vm.warpBackend, signatureAggregator)); err != nil {
offChainWarpMessages := make([][]byte, len(vm.config.WarpOffChainMessages))
for i, hexMsg := range vm.config.WarpOffChainMessages {
offChainWarpMessages[i] = []byte(hexMsg)
}

var err error
vm.warpService, err = warpRPC.NewService(
vm.ctx.NetworkID,
vm.ctx.ChainID,
vm.ctx.ValidatorState,
vm.warpMsgDB,
vm.ctx.WarpSigner,
vm.warpVerifier,
vm.warpSignatureCache,
signatureAggregator,
offChainWarpMessages,
)
if err != nil {
return nil, err
}

if err := handler.RegisterName("warp", vm.warpService); err != nil {
return nil, err
}
enabledAPIs = append(enabledAPIs, "warp")
Expand Down
66 changes: 36 additions & 30 deletions graft/coreth/plugin/evm/vm_warp_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@ import (

_ "embed"

"github.com/ava-labs/avalanchego/database"
"github.com/ava-labs/avalanchego/graft/coreth/eth/tracers"
"github.com/ava-labs/avalanchego/graft/coreth/params"
"github.com/ava-labs/avalanchego/graft/coreth/params/extras"
"github.com/ava-labs/avalanchego/graft/coreth/plugin/evm/customheader"
"github.com/ava-labs/avalanchego/graft/coreth/plugin/evm/upgrade/ap0"
"github.com/ava-labs/avalanchego/graft/coreth/plugin/evm/vmtest"
"github.com/ava-labs/avalanchego/graft/coreth/precompile/contract"
"github.com/ava-labs/avalanchego/graft/coreth/warp"
"github.com/ava-labs/avalanchego/graft/evm/utils"
"github.com/ava-labs/avalanchego/ids"
"github.com/ava-labs/avalanchego/network/p2p"
Expand All @@ -45,6 +45,7 @@ import (
"github.com/ava-labs/avalanchego/utils/set"
"github.com/ava-labs/avalanchego/vms/components/chain"
"github.com/ava-labs/avalanchego/vms/evm/predicate"
"github.com/ava-labs/avalanchego/vms/evm/warp"
"github.com/ava-labs/avalanchego/vms/platformvm/warp/payload"

warpcontract "github.com/ava-labs/avalanchego/graft/coreth/precompile/contracts/warp"
Expand Down Expand Up @@ -139,21 +140,18 @@ func testSendWarpMessage(t *testing.T, scheme string) {
unsignedMessage, err := warpcontract.UnpackSendWarpEventDataToMessage(logData)
require.NoError(err)

// Verify the signature cannot be fetched before the block is accepted
_, err = vm.warpBackend.GetMessageSignature(t.Context(), unsignedMessage)
require.ErrorIs(err, warp.ErrVerifyWarpMessage)
_, err = vm.warpBackend.GetBlockSignature(t.Context(), blk.ID())
require.ErrorIs(err, warp.ErrValidateBlock)
// Verify the message is not in the DB before the block is accepted
_, err = vm.warpMsgDB.Get(unsignedMessage.ID())
require.ErrorIs(err, database.ErrNotFound)

require.NoError(vm.SetPreference(t.Context(), blk.ID()))
require.NoError(blk.Accept(t.Context()))
vm.blockChain.DrainAcceptorQueue()

// Verify the message signature after accepting the block.
rawSignatureBytes, err := vm.warpBackend.GetMessageSignature(t.Context(), unsignedMessage)
require.NoError(err)
blsSignature, err := bls.SignatureFromBytes(rawSignatureBytes)
// Verify the message is now in the DB after accepting the block
storedMessage, err := vm.warpMsgDB.Get(unsignedMessage.ID())
require.NoError(err)
require.Equal(unsignedMessage.ID(), storedMessage.ID())

select {
case acceptedLogs := <-acceptedLogsChan:
Expand All @@ -163,22 +161,24 @@ func testSendWarpMessage(t *testing.T, scheme string) {
require.Fail("Failed to read accepted logs from subscription")
}

// Verify the produced message signature is valid
require.True(bls.Verify(vm.ctx.PublicKey, blsSignature, unsignedMessage.Bytes()))

// Verify the blockID will now be signed by the backend and produces a valid signature.
rawSignatureBytes, err = vm.warpBackend.GetBlockSignature(t.Context(), blk.ID())
// Verify we can sign the message and the signature is valid
signatureBytes, err := vm.ctx.WarpSigner.Sign(unsignedMessage)
require.NoError(err)
blsSignature, err = bls.SignatureFromBytes(rawSignatureBytes)
blsSignature, err := bls.SignatureFromBytes(signatureBytes)
require.NoError(err)
require.True(bls.Verify(vm.ctx.PublicKey, blsSignature, unsignedMessage.Bytes()))

// Verify we can sign a block hash payload
blockHashPayload, err := payload.NewHash(blk.ID())
require.NoError(err)
unsignedMessage, err = avalancheWarp.NewUnsignedMessage(vm.ctx.NetworkID, vm.ctx.ChainID, blockHashPayload.Bytes())
blockHashMessage, err := avalancheWarp.NewUnsignedMessage(vm.ctx.NetworkID, vm.ctx.ChainID, blockHashPayload.Bytes())
require.NoError(err)

// Verify the produced message signature is valid
require.True(bls.Verify(vm.ctx.PublicKey, blsSignature, unsignedMessage.Bytes()))
signatureBytes, err = vm.ctx.WarpSigner.Sign(blockHashMessage)
require.NoError(err)
blsSignature, err = bls.SignatureFromBytes(signatureBytes)
require.NoError(err)
require.True(bls.Verify(vm.ctx.PublicKey, blsSignature, blockHashMessage.Bytes()))
}

func TestValidateWarpMessage(t *testing.T) {
Expand Down Expand Up @@ -817,28 +817,33 @@ func testSignatureRequestsToVM(t *testing.T, scheme string) {
fork := upgradetest.Durango
vm := newDefaultTestVM()
tvm := vmtest.SetupTestVM(t, vm, vmtest.TestVMConfig{
Fork: &fork,
Scheme: scheme,
Fork: &fork,
Scheme: scheme,
ConfigJSON: `{"warp-api-enabled": true}`,
})
defer func() {
require.NoError(t, vm.Shutdown(t.Context()))
}()

// Initialize the warp service by creating handlers
_, err := vm.CreateHandlers(t.Context())
require.NoError(t, err)

// Setup known message
knownPayload, err := payload.NewAddressedCall([]byte{0, 0, 0}, []byte("test"))
require.NoError(t, err)
knownWarpMessage, err := avalancheWarp.NewUnsignedMessage(vm.ctx.NetworkID, vm.ctx.ChainID, knownPayload.Bytes())
require.NoError(t, err)

// Add the known message and get its signature to confirm
require.NoError(t, vm.warpBackend.AddMessage(knownWarpMessage))
knownMessageSignature, err := vm.warpBackend.GetMessageSignature(t.Context(), knownWarpMessage)
require.NoError(t, vm.warpMsgDB.Add(knownWarpMessage))
knownMessageSignature, err := vm.warpService.GetMessageSignature(t.Context(), knownWarpMessage.ID())
require.NoError(t, err)

// Setup known block
lastAcceptedID, err := vm.LastAccepted(t.Context())
require.NoError(t, err)
knownBlockSignature, err := vm.warpBackend.GetBlockSignature(t.Context(), lastAcceptedID)
knownBlockSignature, err := vm.warpService.GetBlockSignature(t.Context(), lastAcceptedID)
require.NoError(t, err)

type testCase struct {
Expand Down Expand Up @@ -941,10 +946,11 @@ func TestClearWarpDB(t *testing.T) {
for _, payload := range payloads {
unsignedMsg, err := avalancheWarp.NewUnsignedMessage(vm.ctx.NetworkID, vm.ctx.ChainID, payload)
require.NoError(t, err)
require.NoError(t, vm.warpBackend.AddMessage(unsignedMsg))
require.NoError(t, vm.warpMsgDB.Add(unsignedMsg))
// ensure that the message was added
_, err = vm.warpBackend.GetMessageSignature(t.Context(), unsignedMsg)
storedMsg, err := vm.warpMsgDB.Get(unsignedMsg.ID())
require.NoError(t, err)
require.Equal(t, unsignedMsg.ID(), storedMsg.ID())
messages = append(messages, unsignedMsg)
}

Expand All @@ -958,9 +964,9 @@ func TestClearWarpDB(t *testing.T) {

// check messages are still present
for _, message := range messages {
bytes, err := vm.warpBackend.GetMessageSignature(t.Context(), message)
storedMsg, err := vm.warpMsgDB.Get(message.ID())
require.NoError(t, err)
require.NotEmpty(t, bytes)
require.Equal(t, message.ID(), storedMsg.ID())
}

require.NoError(t, vm.Shutdown(t.Context()))
Expand All @@ -977,7 +983,7 @@ func TestClearWarpDB(t *testing.T) {

// ensure all messages have been deleted
for _, message := range messages {
_, err := vm.warpBackend.GetMessageSignature(t.Context(), message)
require.ErrorIs(t, err, &commonEng.AppError{Code: warp.ParseErrCode})
_, err := vm.warpMsgDB.Get(message.ID())
require.ErrorIs(t, err, database.ErrNotFound)
}
}
2 changes: 1 addition & 1 deletion graft/coreth/plugin/evm/wrapped_block.go
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ func (b *wrappedBlock) handlePrecompileAccept(rules extras.Rules) error {
}
acceptCtx := &precompileconfig.AcceptContext{
SnowCtx: b.vm.ctx,
Warp: b.vm.warpBackend,
Warp: b.vm.warpMsgDB,
Comment thread
JonathanOppenheimer marked this conversation as resolved.
}
for _, receipt := range receipts {
for logIdx, log := range receipt.Logs {
Expand Down
2 changes: 1 addition & 1 deletion graft/coreth/precompile/contracts/warp/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ func (*Config) Accept(acceptCtx *precompileconfig.AcceptContext, blockHash commo
"logData", common.Bytes2Hex(logData),
"warpMessageID", unsignedMessage.ID(),
)
if err := acceptCtx.Warp.AddMessage(unsignedMessage); err != nil {
if err := acceptCtx.Warp.Add(unsignedMessage); err != nil {
return fmt.Errorf("failed to add warp message during accept (TxHash: %s, LogIndex: %d): %w", txHash, logIndex, err)
}
return nil
Expand Down
8 changes: 2 additions & 6 deletions graft/coreth/precompile/precompileconfig/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
"github.com/ava-labs/avalanchego/snow"
"github.com/ava-labs/avalanchego/snow/engine/snowman/block"
"github.com/ava-labs/avalanchego/vms/evm/predicate"
"github.com/ava-labs/avalanchego/vms/platformvm/warp"
"github.com/ava-labs/avalanchego/vms/evm/warp"
)

// StatefulPrecompileConfig defines the interface for a stateful precompile to
Expand Down Expand Up @@ -53,14 +53,10 @@ type Predicater interface {
VerifyPredicate(predicateContext *PredicateContext, pred predicate.Predicate) error
}

type WarpMessageWriter interface {
AddMessage(unsignedMessage *warp.UnsignedMessage) error
}

// AcceptContext defines the context passed in to a precompileconfig's Accepter
type AcceptContext struct {
SnowCtx *snow.Context
Warp WarpMessageWriter
Warp *warp.DB
}

// Accepter is an optional interface for StatefulPrecompiledContracts to implement.
Expand Down
Loading