Skip to content

Commit

Permalink
cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
abi87 committed May 9, 2024
1 parent 3aba33c commit 3fea872
Show file tree
Hide file tree
Showing 8 changed files with 111 additions and 93 deletions.
23 changes: 20 additions & 3 deletions vms/avm/environment_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import (
"github.com/ava-labs/avalanchego/vms/avm/config"
"github.com/ava-labs/avalanchego/vms/avm/fxs"
"github.com/ava-labs/avalanchego/vms/avm/txs"
"github.com/ava-labs/avalanchego/vms/avm/txs/builder"
"github.com/ava-labs/avalanchego/vms/components/avax"
"github.com/ava-labs/avalanchego/vms/nftfx"
"github.com/ava-labs/avalanchego/vms/secp256k1fx"
Expand Down Expand Up @@ -203,18 +204,34 @@ func setup(tb testing.TB, c *envConfig) *environment {
stopVertexID := ids.GenerateTestID()
issuer := make(chan common.Message, 1)

var (
serviceBackend = newServiceBackend(vm.ctx, &vm.Config, vm.state, vm.ctx.SharedMemory, vm.parser.Codec())
walletBackend = NewWalletServiceBackend(vm)
)

env := &environment{
genesisBytes: genesisBytes,
genesisTx: getCreateTxFromGenesisTest(tb, genesisBytes, assetName),
sharedMemory: m,
issuer: issuer,
vm: vm,
service: &Service{
vm: vm,
txBuilderBackend: newServiceBackend(vm.feeAssetID, vm.ctx, &vm.Config, vm.state, vm.ctx.SharedMemory, vm.parser.Codec()),
vm: vm,
b: builder.NewBuilder(
vm.ctx,
&vm.Config,
vm.feeAssetID,
serviceBackend,
),
},
walletService: &WalletService{
walletServiceBackend: NewWalletServiceBackend(vm),
walletServiceBackend: walletBackend,
b: builder.NewBuilder(
vm.ctx,
&vm.Config,
vm.feeAssetID,
walletBackend,
),
},
}

Expand Down
36 changes: 10 additions & 26 deletions vms/avm/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,8 @@ type FormattedAssetID struct {

// Service defines the base service for the asset vm
type Service struct {
vm *VM
txBuilderBackend *serviceBackend
vm *VM
b *builder.Builder
}

// GetBlock returns the requested block.
Expand Down Expand Up @@ -793,9 +793,7 @@ func (s *Service) buildCreateAssetTx(args *CreateAssetArgs) (*txs.Tx, ids.ShortI
initialStateOuts = append(initialStateOuts, minter)
}

s.txBuilderBackend.ResetAddresses(kc.Addresses())
return builder.BuildCreateAssetTx(
s.txBuilderBackend,
return s.b.BuildCreateAssetTx(
args.Name,
args.Symbol,
args.Denomination,
Expand Down Expand Up @@ -914,9 +912,7 @@ func (s *Service) buildCreateNFTAsset(args *CreateNFTAssetArgs) (*txs.Tx, ids.Sh
initialStateOuts = append(initialStateOuts, minter)
}

s.txBuilderBackend.ResetAddresses(kc.Addresses())
return builder.BuildCreateAssetTx(
s.txBuilderBackend,
return s.b.BuildCreateAssetTx(
args.Name,
args.Symbol,
0, // NFTs are non-fungible
Expand Down Expand Up @@ -1232,8 +1228,7 @@ func (s *Service) buildSendMultiple(args *SendMultipleArgs) (*txs.Tx, ids.ShortI
})
}

s.txBuilderBackend.ResetAddresses(kc.Addresses())
return builder.BuildBaseTx(s.txBuilderBackend, outs, memoBytes, kc, changeAddr)
return s.b.BuildBaseTx(outs, memoBytes, kc, changeAddr)
}

// MintArgs are arguments for passing into Mint requests
Expand Down Expand Up @@ -1312,12 +1307,6 @@ func (s *Service) buildMint(args *MintArgs) (*txs.Tx, ids.ShortID, error) {
return nil, ids.ShortEmpty, err
}

// Get all UTXOs/keys for the user
_, kc, err := s.vm.LoadUser(args.Username, args.Password, nil)
if err != nil {
return nil, ids.ShortEmpty, err
}

outputs := map[ids.ID]*secp256k1fx.TransferOutput{
assetID: {
Amt: uint64(args.Amount),
Expand All @@ -1328,8 +1317,7 @@ func (s *Service) buildMint(args *MintArgs) (*txs.Tx, ids.ShortID, error) {
},
}

s.txBuilderBackend.ResetAddresses(kc.Addresses())
tx, err := builder.MintFTs(s.txBuilderBackend, outputs, feeKc, changeAddr)
tx, err := s.b.MintFTs(outputs, feeKc, changeAddr)
if err != nil {
return nil, ids.ShortEmpty, err
}
Expand Down Expand Up @@ -1415,8 +1403,7 @@ func (s *Service) buildSendNFT(args *SendNFTArgs) (*txs.Tx, ids.ShortID, error)
return nil, ids.ShortEmpty, err
}

s.txBuilderBackend.ResetAddresses(kc.Addresses())
tx, err := builder.BuildOperation(s.txBuilderBackend, ops, kc, changeAddr)
tx, err := s.b.BuildOperation(ops, kc, changeAddr)
if err != nil {
return nil, ids.ShortEmpty, err
}
Expand Down Expand Up @@ -1502,9 +1489,7 @@ func (s *Service) buildMintNFT(args *MintNFTArgs) (*txs.Tx, ids.ShortID, error)
return nil, ids.ShortEmpty, err
}

s.txBuilderBackend.ResetAddresses(kc.Addresses())
tx, err := builder.MintNFT(
s.txBuilderBackend,
tx, err := s.b.MintNFT(
assetID,
payloadBytes,
[]*secp256k1fx.OutputOwners{{
Expand Down Expand Up @@ -1575,7 +1560,7 @@ func (s *Service) buildImport(args *ImportArgs) (*txs.Tx, error) {
return nil, err
}

return builder.BuildImportTx(s.txBuilderBackend, chainID, to, kc)
return s.b.BuildImportTx(chainID, to, kc)
}

// ExportArgs are arguments for passing into ExportAVA requests
Expand Down Expand Up @@ -1668,6 +1653,5 @@ func (s *Service) buildExport(args *ExportArgs) (*txs.Tx, ids.ShortID, error) {
return nil, ids.ShortEmpty, err
}

s.txBuilderBackend.ResetAddresses(kc.Addresses())
return builder.BuildExportTx(s.txBuilderBackend, chainID, to, assetID, uint64(args.Amount), kc, changeAddr)
return s.b.BuildExportTx(chainID, to, assetID, uint64(args.Amount), kc, changeAddr)
}
17 changes: 0 additions & 17 deletions vms/avm/service_backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,30 +17,18 @@ import (
"github.com/ava-labs/avalanchego/vms/avm/state"
"github.com/ava-labs/avalanchego/vms/avm/txs/builder"
"github.com/ava-labs/avalanchego/vms/components/avax"

walletbuilder "github.com/ava-labs/avalanchego/wallet/chain/x/builder"
)

var _ builder.TxBuilderBackend = (*serviceBackend)(nil)

func newServiceBackend(
feeAssetID ids.ID,
ctx *snow.Context,
cfg *config.Config,
state state.State,
sharedMemory atomic.SharedMemory,
codec codec.Manager,
) *serviceBackend {
backendCtx := &walletbuilder.Context{
NetworkID: ctx.NetworkID,
BlockchainID: ctx.XChainID,
AVAXAssetID: feeAssetID,
BaseTxFee: cfg.TxFee,
CreateAssetTxFee: cfg.CreateAssetTxFee,
}

return &serviceBackend{
ctx: backendCtx,
xchainID: ctx.XChainID,
cfg: cfg,
state: state,
Expand All @@ -50,7 +38,6 @@ func newServiceBackend(
}

type serviceBackend struct {
ctx *walletbuilder.Context
xchainID ids.ID
cfg *config.Config
addrs set.Set[ids.ShortID]
Expand All @@ -59,10 +46,6 @@ type serviceBackend struct {
codec codec.Manager
}

func (b *serviceBackend) Context() *walletbuilder.Context {
return b.ctx
}

func (b *serviceBackend) ResetAddresses(addrs set.Set[ids.ShortID]) {
b.addrs = addrs
}
Expand Down
25 changes: 25 additions & 0 deletions vms/avm/txs/builder/context.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
// See the file LICENSE for licensing terms.

package builder

import (
"github.com/ava-labs/avalanchego/ids"
"github.com/ava-labs/avalanchego/snow"
"github.com/ava-labs/avalanchego/vms/avm/config"
"github.com/ava-labs/avalanchego/wallet/chain/x/builder"
)

func newContext(
ctx *snow.Context,
cfg *config.Config,
feeAssetID ids.ID,
) *builder.Context {
return &builder.Context{
NetworkID: ctx.NetworkID,
BlockchainID: ctx.XChainID,
AVAXAssetID: feeAssetID,
BaseTxFee: cfg.TxFee,
CreateAssetTxFee: cfg.CreateAssetTxFee,
}
}
62 changes: 36 additions & 26 deletions vms/avm/txs/builder/tx_builders.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ import (
"fmt"

"github.com/ava-labs/avalanchego/ids"
"github.com/ava-labs/avalanchego/snow"
"github.com/ava-labs/avalanchego/utils/set"
"github.com/ava-labs/avalanchego/vms/avm/config"
"github.com/ava-labs/avalanchego/vms/avm/txs"
"github.com/ava-labs/avalanchego/vms/components/avax"
"github.com/ava-labs/avalanchego/vms/components/verify"
Expand All @@ -22,19 +24,34 @@ type TxBuilderBackend interface {
builder.Backend
signer.Backend

Context() *builder.Context
ResetAddresses(addrs set.Set[ids.ShortID])
}

func BuildCreateAssetTx(
type Builder struct {
backend TxBuilderBackend
ctx *builder.Context
}

func NewBuilder(
ctx *snow.Context,
cfg *config.Config,
feeAssetID ids.ID,
backend TxBuilderBackend,
) *Builder {
return &Builder{
backend: backend,
ctx: newContext(ctx, cfg, feeAssetID),
}
}

func (b *Builder) BuildCreateAssetTx(
name, symbol string,
denomination byte,
initialStates map[uint32][]verify.State,
kc *secp256k1fx.Keychain,
changeAddr ids.ShortID,
) (*txs.Tx, ids.ShortID, error) {
xBuilder, xSigner := builders(backend, kc)
xBuilder, xSigner := b.builders(kc)

utx, err := xBuilder.NewCreateAssetTx(
name,
Expand All @@ -55,14 +72,13 @@ func BuildCreateAssetTx(
return tx, changeAddr, nil
}

func BuildBaseTx(
backend TxBuilderBackend,
func (b *Builder) BuildBaseTx(
outs []*avax.TransferableOutput,
memo []byte,
kc *secp256k1fx.Keychain,
changeAddr ids.ShortID,
) (*txs.Tx, ids.ShortID, error) {
xBuilder, xSigner := builders(backend, kc)
xBuilder, xSigner := b.builders(kc)

utx, err := xBuilder.NewBaseTx(
outs,
Expand All @@ -80,15 +96,14 @@ func BuildBaseTx(
return tx, changeAddr, nil
}

func MintNFT(
backend TxBuilderBackend,
func (b *Builder) MintNFT(
assetID ids.ID,
payload []byte,
owners []*secp256k1fx.OutputOwners,
kc *secp256k1fx.Keychain,
changeAddr ids.ShortID,
) (*txs.Tx, error) {
xBuilder, xSigner := builders(backend, kc)
xBuilder, xSigner := b.builders(kc)

utx, err := xBuilder.NewOperationTxMintNFT(
assetID,
Expand All @@ -103,13 +118,12 @@ func MintNFT(
return signer.SignUnsigned(context.Background(), xSigner, utx)
}

func MintFTs(
backend TxBuilderBackend,
func (b *Builder) MintFTs(
outputs map[ids.ID]*secp256k1fx.TransferOutput,
kc *secp256k1fx.Keychain,
changeAddr ids.ShortID,
) (*txs.Tx, error) {
xBuilder, xSigner := builders(backend, kc)
xBuilder, xSigner := b.builders(kc)

utx, err := xBuilder.NewOperationTxMintFT(
outputs,
Expand All @@ -122,13 +136,12 @@ func MintFTs(
return signer.SignUnsigned(context.Background(), xSigner, utx)
}

func BuildOperation(
backend TxBuilderBackend,
func (b *Builder) BuildOperation(
ops []*txs.Operation,
kc *secp256k1fx.Keychain,
changeAddr ids.ShortID,
) (*txs.Tx, error) {
xBuilder, xSigner := builders(backend, kc)
xBuilder, xSigner := b.builders(kc)

utx, err := xBuilder.NewOperationTx(
ops,
Expand All @@ -141,13 +154,12 @@ func BuildOperation(
return signer.SignUnsigned(context.Background(), xSigner, utx)
}

func BuildImportTx(
backend TxBuilderBackend,
func (b *Builder) BuildImportTx(
sourceChain ids.ID,
to ids.ShortID,
kc *secp256k1fx.Keychain,
) (*txs.Tx, error) {
xBuilder, xSigner := builders(backend, kc)
xBuilder, xSigner := b.builders(kc)

outOwner := &secp256k1fx.OutputOwners{
Locktime: 0,
Expand All @@ -166,16 +178,15 @@ func BuildImportTx(
return signer.SignUnsigned(context.Background(), xSigner, utx)
}

func BuildExportTx(
backend TxBuilderBackend,
func (b *Builder) BuildExportTx(
destinationChain ids.ID,
to ids.ShortID,
exportedAssetID ids.ID,
exportedAmt uint64,
kc *secp256k1fx.Keychain,
changeAddr ids.ShortID,
) (*txs.Tx, ids.ShortID, error) {
xBuilder, xSigner := builders(backend, kc)
xBuilder, xSigner := b.builders(kc)

outputs := []*avax.TransferableOutput{{
Asset: avax.Asset{ID: exportedAssetID},
Expand Down Expand Up @@ -205,14 +216,13 @@ func BuildExportTx(
return tx, changeAddr, nil
}

func builders(backend TxBuilderBackend, kc *secp256k1fx.Keychain) (builder.Builder, signer.Signer) {
func (b *Builder) builders(kc *secp256k1fx.Keychain) (builder.Builder, signer.Signer) {
var (
addrs = kc.Addresses()
builder = builder.New(addrs, backend.Context(), backend)
signer = signer.New(kc, backend)
builder = builder.New(addrs, b.ctx, b.backend)
signer = signer.New(kc, b.backend)
)

backend.ResetAddresses(addrs)
b.backend.ResetAddresses(addrs)

return builder, signer
}
Expand Down
Loading

0 comments on commit 3fea872

Please sign in to comment.