Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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
8 changes: 4 additions & 4 deletions vms/saevm/hook/points.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ var _ hook.PointsG[*txpool.Tx] = (*Points)(nil)
type Points struct {
blockBuilder
db database.Database
warpBackend precompileconfig.WarpMessageWriter
warpStorage *warp.Storage
}

func NewPoints(
Expand All @@ -53,7 +53,7 @@ func NewPoints(
desiredDelayExcess *acp226.DelayExcess,
desiredTargetExcess *acp176.TargetExcess,
pool *txpool.Txs,
warpBackend precompileconfig.WarpMessageWriter,
warpStorage *warp.Storage,
) *Points {
return &Points{
blockBuilder{
Expand All @@ -66,7 +66,7 @@ func NewPoints(
chainConfig: chainConfig,
},
db,
warpBackend,
warpStorage,
}
}

Expand Down Expand Up @@ -171,7 +171,7 @@ func (p *Points) AfterExecutingBlock(statedb *state.StateDB, b *types.Block, rec
rules := p.chainConfig.Rules(b.Number(), corethparams.IsMergeTODO, b.Time())
acceptCtx := &precompileconfig.AcceptContext{
SnowCtx: p.ctx,
Warp: p.warpBackend,
Warp: p.warpStorage,
}
if err := warp.HandlePrecompileAccept(rules, acceptCtx, receipts); err != nil {
return fmt.Errorf("failed to handle precompile accept for block %s (%d): %w", b.Hash(), b.NumberU64(), err)
Expand Down
55 changes: 29 additions & 26 deletions vms/saevm/vm.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ import (
avadb "github.com/ava-labs/avalanchego/database"
corethparams "github.com/ava-labs/avalanchego/graft/coreth/params"
warpcontract "github.com/ava-labs/avalanchego/graft/coreth/precompile/contracts/warp"
warpbackend "github.com/ava-labs/avalanchego/vms/saevm/warp/backend"
avawarp "github.com/ava-labs/avalanchego/vms/platformvm/warp"
saewarp "github.com/ava-labs/avalanchego/vms/saevm/warp"
)

// SinceGenesis is a harness around an [sae.VM], providing an `Initialize`
Expand All @@ -61,7 +62,9 @@ type SinceGenesis struct {
db avadb.Database
mempool *txpool.Mempool
pushGossiper *gossip.PushGossiper[*tx.Tx]
warpBackend *warpbackend.Backend

// TODO(StephenButtolph): Remove. This is only used by the tests.
warpVerifier *saewarp.Verifier

// onClose are executed in reverse order during [SinceGenesis.Shutdown].
// If a resource depends on another resource, it MUST be added AFTER the
Expand Down Expand Up @@ -91,13 +94,24 @@ type Config struct {
// per second.
MinDelayTarget *uint64 `json:"min-delay-target,omitempty"`

// WarpOffChainMessages encodes off-chain messages (unrelated to any on-chain event ie. block or AddressedCall)
// that the node should be willing to sign.
// Note: only supports AddressedCall payloads as defined here:
// https://github.com/ava-labs/avalanchego/tree/7623ffd4be915a5185c9ed5e11fa9be15a6e1f00/vms/platformvm/warp/payload#addressedcall
// WarpOffChainMessages encodes off-chain messages (unrelated to any
// on-chain event ie. block or AddressedCall) that the node should be
// willing to sign.
WarpOffChainMessages []hexutil.Bytes `json:"warp-off-chain-messages"`
}

func (c Config) WarpMessages() ([]*avawarp.UnsignedMessage, error) {
msgs := make([]*avawarp.UnsignedMessage, len(c.WarpOffChainMessages))
for i, bytes := range c.WarpOffChainMessages {
msg, err := avawarp.ParseUnsignedMessage(bytes)
if err != nil {
return nil, fmt.Errorf("ailed to parse off-chain message at index %d: %w", i, err)
Comment thread
StephenButtolph marked this conversation as resolved.
Outdated
}
msgs[i] = msg
}
return msgs, nil
}

var ethDBPrefix = []byte("ethdb")

// Initialize initializes the VM.
Expand Down Expand Up @@ -168,23 +182,10 @@ func (vm *SinceGenesis) Initialize(
}
}

// Initialize warp backend
offchainWarpMessages := make([][]byte, len(userConfig.WarpOffChainMessages))
for i, hexMsg := range userConfig.WarpOffChainMessages {
offchainWarpMessages[i] = []byte(hexMsg)
}
warpBackend, warpSignatureCache, err := warpbackend.New(
snowCtx.NetworkID,
snowCtx.ChainID,
snowCtx.WarpSigner,
&blockClient{vm: vm},
avaDB,
offchainWarpMessages,
)
warpMessages, err := userConfig.WarpMessages()
if err != nil {
return fmt.Errorf("warp backend: %w", err)
return err
}
vm.warpBackend = warpBackend

var desiredDelayExcess *acp226.DelayExcess
if userConfig.MinDelayTarget != nil {
Expand All @@ -198,14 +199,15 @@ func (vm *SinceGenesis) Initialize(
}

txs := txpool.NewTxs()
warpStorage := saewarp.NewStorage(avaDB, warpMessages...)
hooks := hook.NewPoints(
snowCtx,
avaDB,
config,
desiredDelayExcess,
desiredTargetExcess,
txs,
vm.warpBackend,
warpStorage,
)
inner, err := sae.NewVM(ctx, hooks, vm.config, snowCtx, config, db, genesis.ToBlock(), appSender)
if err != nil {
Expand Down Expand Up @@ -270,7 +272,8 @@ func (vm *SinceGenesis) Initialize(
}

{ // ========== Warp Handler ==========
warpHandler := acp118.NewCachedHandler(warpSignatureCache, warpBackend, snowCtx.WarpSigner)
vm.warpVerifier = saewarp.NewVerifier(&blockClient{vm: inner}, warpStorage)
warpHandler := acp118.NewHandler(vm.warpVerifier, snowCtx.WarpSigner)
Comment thread
StephenButtolph marked this conversation as resolved.
Outdated
if err := inner.AddHandler(p2p.SignatureRequestHandlerID, warpHandler); err != nil {
return fmt.Errorf("network.AddHandler(warp): %w", err)
}
Expand Down Expand Up @@ -408,12 +411,12 @@ func (vm *SinceGenesis) Shutdown(ctx context.Context) error {
return vm.VM.Shutdown(ctx)
}

// blockClient adapts [SinceGenesis] to the [warpbackend.BlockClient] interface.
// blockClient adapts [sae.VM] to the [saewarp.BlockClient] interface.
type blockClient struct {
vm *SinceGenesis
vm *sae.VM
}

var _ warpbackend.BlockClient = (*blockClient)(nil)
var _ saewarp.BlockClient = (*blockClient)(nil)

func (c *blockClient) IsAccepted(ctx context.Context, blockID ids.ID) error {
b, err := c.vm.GetBlock(ctx, blockID)
Expand Down
12 changes: 6 additions & 6 deletions vms/saevm/vm_warp_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import (
"github.com/ava-labs/avalanchego/graft/coreth/plugin/evm"
"github.com/ava-labs/avalanchego/graft/coreth/plugin/evm/customheader"
"github.com/ava-labs/avalanchego/graft/coreth/plugin/evm/vmtest"
"github.com/ava-labs/avalanchego/graft/coreth/warp"
"github.com/ava-labs/avalanchego/ids"
"github.com/ava-labs/avalanchego/snow"
"github.com/ava-labs/avalanchego/snow/engine/enginetest"
Expand All @@ -42,6 +41,7 @@ import (
"github.com/ava-labs/avalanchego/utils/set"
"github.com/ava-labs/avalanchego/vms/evm/predicate"
"github.com/ava-labs/avalanchego/vms/platformvm/warp/payload"
"github.com/ava-labs/avalanchego/vms/saevm/warp"

warpcontract "github.com/ava-labs/avalanchego/graft/coreth/precompile/contracts/warp"
engcommon "github.com/ava-labs/avalanchego/snow/engine/common"
Expand Down Expand Up @@ -105,11 +105,11 @@ func TestSendWarpMessage(t *testing.T) {
expectedBlockUnsignedMessage, err := avalancheWarp.NewUnsignedMessage(env.snowCtx.NetworkID, env.snowCtx.ChainID, expectedBlockHashPayload.Bytes())
require.NoError(err)

addressedErr := env.vm.warpBackend.Verify(env.ctx, expectedUnsignedMessage, nil)
addressedErr := env.vm.warpVerifier.Verify(env.ctx, expectedUnsignedMessage, nil)
require.NotNil(addressedErr)
require.Equal(int32(warp.ParseErrCode), addressedErr.Code)
require.Equal(int32(warp.TypeErrCode), addressedErr.Code)

blockErr := env.vm.warpBackend.Verify(env.ctx, expectedBlockUnsignedMessage, nil)
blockErr := env.vm.warpVerifier.Verify(env.ctx, expectedBlockUnsignedMessage, nil)
require.NotNil(blockErr)
require.Equal(int32(warp.VerifyErrCode), blockErr.Code)

Expand All @@ -130,8 +130,8 @@ func TestSendWarpMessage(t *testing.T) {
unsignedMessage, err := warpcontract.UnpackSendWarpEventDataToMessage(logData)
require.NoError(err)

require.Nil(env.vm.warpBackend.Verify(env.ctx, unsignedMessage, nil))
require.Nil(env.vm.warpBackend.Verify(env.ctx, expectedBlockUnsignedMessage, nil))
require.Nil(env.vm.warpVerifier.Verify(env.ctx, unsignedMessage, nil))
require.Nil(env.vm.warpVerifier.Verify(env.ctx, expectedBlockUnsignedMessage, nil))
}

func TestPredicateVerification(t *testing.T) {
Expand Down
52 changes: 0 additions & 52 deletions vms/saevm/warp/backend/BUILD.bazel

This file was deleted.

Loading
Loading