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

[components/avax] Remove AtomicUTXOManager interface #2884

Merged
merged 1 commit into from
Mar 29, 2024
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
14 changes: 12 additions & 2 deletions vms/avm/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,9 @@ func (s *Service) GetUTXOs(_ *http.Request, args *api.GetUTXOsArgs, reply *api.G
limit,
)
} else {
utxos, endAddr, endUTXOID, err = s.vm.GetAtomicUTXOs(
utxos, endAddr, endUTXOID, err = avax.GetAtomicUTXOs(
s.vm.ctx.SharedMemory,
s.vm.parser.Codec(),
sourceChain,
addrSet,
startAddr,
Expand Down Expand Up @@ -1782,7 +1784,15 @@ func (s *Service) buildImport(args *ImportArgs) (*txs.Tx, error) {
return nil, err
}

atomicUTXOs, _, _, err := s.vm.GetAtomicUTXOs(chainID, kc.Addrs, ids.ShortEmpty, ids.Empty, int(maxPageSize))
atomicUTXOs, _, _, err := avax.GetAtomicUTXOs(
s.vm.ctx.SharedMemory,
s.vm.parser.Codec(),
chainID,
kc.Addrs,
ids.ShortEmpty,
ids.Empty,
int(maxPageSize),
)
if err != nil {
return nil, fmt.Errorf("problem retrieving user's atomic UTXOs: %w", err)
}
Expand Down
2 changes: 0 additions & 2 deletions vms/avm/vm.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ type VM struct {
metrics metrics.Metrics

avax.AddressManager
avax.AtomicUTXOManager
ids.Aliaser
utxo.Spender

Expand Down Expand Up @@ -227,7 +226,6 @@ func (vm *VM) Initialize(
}

codec := vm.parser.Codec()
vm.AtomicUTXOManager = avax.NewAtomicUTXOManager(ctx.SharedMemory, codec)
vm.Spender = utxo.NewSpender(&vm.clock, codec)

state, err := state.New(
Expand Down
52 changes: 15 additions & 37 deletions vms/components/avax/atomic_utxos.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,41 +12,19 @@ import (
"github.com/ava-labs/avalanchego/utils/set"
)

var _ AtomicUTXOManager = (*atomicUTXOManager)(nil)

type AtomicUTXOManager interface {
// GetAtomicUTXOs returns exported UTXOs such that at least one of the
// addresses in [addrs] is referenced.
//
// Returns at most [limit] UTXOs.
//
// Returns:
// * The fetched UTXOs
// * The address associated with the last UTXO fetched
// * The ID of the last UTXO fetched
// * Any error that may have occurred upstream.
GetAtomicUTXOs(
chainID ids.ID,
addrs set.Set[ids.ShortID],
startAddr ids.ShortID,
startUTXOID ids.ID,
limit int,
) ([]*UTXO, ids.ShortID, ids.ID, error)
}

type atomicUTXOManager struct {
sm atomic.SharedMemory
codec codec.Manager
}

func NewAtomicUTXOManager(sm atomic.SharedMemory, codec codec.Manager) AtomicUTXOManager {
return &atomicUTXOManager{
sm: sm,
codec: codec,
}
}

func (a *atomicUTXOManager) GetAtomicUTXOs(
// GetAtomicUTXOs returns exported UTXOs such that at least one of the
// addresses in [addrs] is referenced.
//
// Returns at most [limit] UTXOs.
//
// Returns:
// * The fetched UTXOs
// * The address associated with the last UTXO fetched
// * The ID of the last UTXO fetched
// * Any error that may have occurred upstream.
func GetAtomicUTXOs(
sharedMemory atomic.SharedMemory,
codec codec.Manager,
chainID ids.ID,
addrs set.Set[ids.ShortID],
startAddr ids.ShortID,
Expand All @@ -61,7 +39,7 @@ func (a *atomicUTXOManager) GetAtomicUTXOs(
i++
}

allUTXOBytes, lastAddr, lastUTXO, err := a.sm.Indexed(
allUTXOBytes, lastAddr, lastUTXO, err := sharedMemory.Indexed(
chainID,
addrsList,
startAddr.Bytes(),
Expand All @@ -84,7 +62,7 @@ func (a *atomicUTXOManager) GetAtomicUTXOs(
utxos := make([]*UTXO, len(allUTXOBytes))
for i, utxoBytes := range allUTXOBytes {
utxo := &UTXO{}
if _, err := a.codec.Unmarshal(utxoBytes, utxo); err != nil {
if _, err := codec.Unmarshal(utxoBytes, utxo); err != nil {
return nil, ids.ShortID{}, ids.ID{}, fmt.Errorf("error parsing UTXO: %w", err)
}
utxos[i] = utxo
Expand Down
3 changes: 0 additions & 3 deletions vms/platformvm/block/builder/helpers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ import (
"github.com/ava-labs/avalanchego/utils/logging"
"github.com/ava-labs/avalanchego/utils/timer/mockable"
"github.com/ava-labs/avalanchego/utils/units"
"github.com/ava-labs/avalanchego/vms/components/avax"
"github.com/ava-labs/avalanchego/vms/platformvm/api"
"github.com/ava-labs/avalanchego/vms/platformvm/config"
"github.com/ava-labs/avalanchego/vms/platformvm/fx"
Expand Down Expand Up @@ -115,7 +114,6 @@ type environment struct {
msm *mutableSharedMemory
fx fx.Fx
state state.State
atomicUTXOs avax.AtomicUTXOManager
uptimes uptime.Manager
utxosVerifier utxo.Verifier
txBuilder *txstest.Builder
Expand Down Expand Up @@ -150,7 +148,6 @@ func newEnvironment(t *testing.T, f fork) *environment { //nolint:unparam
rewardsCalc := reward.NewCalculator(res.config.RewardConfig)
res.state = defaultState(t, res.config, res.ctx, res.baseDB, rewardsCalc)

res.atomicUTXOs = avax.NewAtomicUTXOManager(res.ctx.SharedMemory, txs.Codec)
res.uptimes = uptime.NewManager(res.state, res.clk)
res.utxosVerifier = utxo.NewVerifier(res.ctx, res.clk, res.fx)

Expand Down
3 changes: 0 additions & 3 deletions vms/platformvm/block/executor/helpers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ import (
"github.com/ava-labs/avalanchego/utils/logging"
"github.com/ava-labs/avalanchego/utils/timer/mockable"
"github.com/ava-labs/avalanchego/utils/units"
"github.com/ava-labs/avalanchego/vms/components/avax"
"github.com/ava-labs/avalanchego/vms/platformvm/api"
"github.com/ava-labs/avalanchego/vms/platformvm/config"
"github.com/ava-labs/avalanchego/vms/platformvm/fx"
Expand Down Expand Up @@ -127,7 +126,6 @@ type environment struct {
fx fx.Fx
state state.State
mockedState *state.MockState
atomicUTXOs avax.AtomicUTXOManager
uptimes uptime.Manager
utxosVerifier utxo.Verifier
txBuilder *txstest.Builder
Expand All @@ -153,7 +151,6 @@ func newEnvironment(t *testing.T, ctrl *gomock.Controller, f fork) *environment
res.fx = defaultFx(res.clk, res.ctx.Log, res.isBootstrapped.Get())

rewardsCalc := reward.NewCalculator(res.config.RewardConfig)
res.atomicUTXOs = avax.NewAtomicUTXOManager(res.ctx.SharedMemory, txs.Codec)

if ctrl == nil {
res.state = defaultState(res.config, res.ctx, res.baseDB, rewardsCalc)
Expand Down
5 changes: 3 additions & 2 deletions vms/platformvm/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,6 @@ type Service struct {
vm *VM
addrManager avax.AddressManager
stakerAttributesCache *cache.LRU[ids.ID, *stakerAttributes]
atomicUtxosManager avax.AtomicUTXOManager
}

// All attributes are optional and may not be filled for each stakerTx.
Expand Down Expand Up @@ -384,7 +383,9 @@ func (s *Service) GetUTXOs(_ *http.Request, args *api.GetUTXOsArgs, response *ap
limit,
)
} else {
utxos, endAddr, endUTXOID, err = s.atomicUtxosManager.GetAtomicUTXOs(
utxos, endAddr, endUTXOID, err = avax.GetAtomicUTXOs(
s.vm.ctx.SharedMemory,
txs.Codec,
sourceChain,
addrSet,
startAddr,
Expand Down
1 change: 0 additions & 1 deletion vms/platformvm/service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,6 @@ func defaultService(t *testing.T) (*Service, *mutableSharedMemory, *txstest.Buil
stakerAttributesCache: &cache.LRU[ids.ID, *stakerAttributes]{
Size: stakerAttributesCacheSize,
},
atomicUtxosManager: avax.NewAtomicUTXOManager(vm.ctx.SharedMemory, txs.Codec),
}, mutableSharedMemory, txBuilder
}

Expand Down
4 changes: 0 additions & 4 deletions vms/platformvm/txs/executor/helpers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ import (
"github.com/ava-labs/avalanchego/utils/logging"
"github.com/ava-labs/avalanchego/utils/timer/mockable"
"github.com/ava-labs/avalanchego/utils/units"
"github.com/ava-labs/avalanchego/vms/components/avax"
"github.com/ava-labs/avalanchego/vms/platformvm/api"
"github.com/ava-labs/avalanchego/vms/platformvm/config"
"github.com/ava-labs/avalanchego/vms/platformvm/fx"
Expand Down Expand Up @@ -102,7 +101,6 @@ type environment struct {
fx fx.Fx
state state.State
states map[ids.ID]state.Chain
atomicUTXOs avax.AtomicUTXOManager
uptimes uptime.Manager
utxosHandler utxo.Verifier
txBuilder *txstest.Builder
Expand Down Expand Up @@ -141,7 +139,6 @@ func newEnvironment(t *testing.T, f fork) *environment {
rewards := reward.NewCalculator(config.RewardConfig)
baseState := defaultState(config, ctx, baseDB, rewards)

atomicUTXOs := avax.NewAtomicUTXOManager(ctx.SharedMemory, txs.Codec)
uptimes := uptime.NewManager(baseState, clk)
utxosVerifier := utxo.NewVerifier(ctx, clk, fx)

Expand Down Expand Up @@ -172,7 +169,6 @@ func newEnvironment(t *testing.T, f fork) *environment {
fx: fx,
state: baseState,
states: make(map[ids.ID]state.Chain),
atomicUTXOs: atomicUTXOs,
uptimes: uptimes,
utxosHandler: utxosVerifier,
txBuilder: txBuilder,
Expand Down
11 changes: 9 additions & 2 deletions vms/platformvm/txs/txstest/backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,15 @@ func (b *Backend) UTXOs(_ context.Context, sourceChainID ids.ID) ([]*avax.UTXO,
return avax.GetAllUTXOs(b.state, b.addrs)
}

atomicUTXOManager := avax.NewAtomicUTXOManager(b.sharedMemory, txs.Codec)
utxos, _, _, err := atomicUTXOManager.GetAtomicUTXOs(sourceChainID, b.addrs, ids.ShortEmpty, ids.Empty, math.MaxInt)
utxos, _, _, err := avax.GetAtomicUTXOs(
b.sharedMemory,
txs.Codec,
sourceChainID,
b.addrs,
ids.ShortEmpty,
ids.Empty,
math.MaxInt,
)
return utxos, err
}

Expand Down
1 change: 0 additions & 1 deletion vms/platformvm/vm.go
Original file line number Diff line number Diff line change
Expand Up @@ -464,7 +464,6 @@ func (vm *VM) CreateHandlers(context.Context) (map[string]http.Handler, error) {
stakerAttributesCache: &cache.LRU[ids.ID, *stakerAttributes]{
Size: stakerAttributesCacheSize,
},
atomicUtxosManager: avax.NewAtomicUTXOManager(vm.ctx.SharedMemory, txs.Codec),
}
err := server.RegisterService(service, "platform")
return map[string]http.Handler{
Expand Down
Loading