Skip to content

Commit

Permalink
spend cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
abi87 committed Feb 19, 2024
1 parent d372402 commit 8793145
Show file tree
Hide file tree
Showing 4 changed files with 224 additions and 165 deletions.
90 changes: 75 additions & 15 deletions vms/platformvm/txs/builder/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,11 @@ func (b *builder) NewImportTx(
switch {
case importedAVAX < b.cfg.TxFee: // imported amount goes toward paying tx fee
var baseSigners [][]*secp256k1.PrivateKey
ins, outs, _, baseSigners, err = b.Spend(b.state, keys, 0, b.cfg.TxFee-importedAVAX, changeAddr)
toBurn := map[ids.ID]uint64{
b.ctx.AVAXAssetID: b.cfg.TxFee - importedAVAX,
}
toStake := make(map[ids.ID]uint64)
ins, outs, _, baseSigners, err = b.Spend(b.state, keys, toBurn, toStake, changeAddr)
if err != nil {
return nil, fmt.Errorf("couldn't generate tx inputs/outputs: %w", err)
}
Expand Down Expand Up @@ -396,11 +400,15 @@ func (b *builder) NewExportTx(
changeAddr ids.ShortID,
memo []byte,
) (*txs.Tx, error) {
toBurn, err := math.Add64(amount, b.cfg.TxFee)
amtToBurn, err := math.Add64(amount, b.cfg.TxFee)
if err != nil {
return nil, fmt.Errorf("amount (%d) + tx fee(%d) overflows", amount, b.cfg.TxFee)
}
ins, outs, _, signers, err := b.Spend(b.state, keys, 0, toBurn, changeAddr)
toBurn := map[ids.ID]uint64{
b.ctx.AVAXAssetID: amtToBurn,
}
toStake := make(map[ids.ID]uint64)
ins, outs, _, signers, err := b.Spend(b.state, keys, toBurn, toStake, changeAddr)
if err != nil {
return nil, fmt.Errorf("couldn't generate tx inputs/outputs: %w", err)
}
Expand Down Expand Up @@ -446,7 +454,11 @@ func (b *builder) NewCreateChainTx(
) (*txs.Tx, error) {
timestamp := b.state.GetTimestamp()
createBlockchainTxFee := b.cfg.GetCreateBlockchainTxFee(timestamp)
ins, outs, _, signers, err := b.Spend(b.state, keys, 0, createBlockchainTxFee, changeAddr)
toBurn := map[ids.ID]uint64{
b.ctx.AVAXAssetID: createBlockchainTxFee,
}
toStake := make(map[ids.ID]uint64)
ins, outs, _, signers, err := b.Spend(b.state, keys, toBurn, toStake, changeAddr)
if err != nil {
return nil, fmt.Errorf("couldn't generate tx inputs/outputs: %w", err)
}
Expand Down Expand Up @@ -492,7 +504,11 @@ func (b *builder) NewCreateSubnetTx(
) (*txs.Tx, error) {
timestamp := b.state.GetTimestamp()
createSubnetTxFee := b.cfg.GetCreateSubnetTxFee(timestamp)
ins, outs, _, signers, err := b.Spend(b.state, keys, 0, createSubnetTxFee, changeAddr)
toBurn := map[ids.ID]uint64{
b.ctx.AVAXAssetID: createSubnetTxFee,
}
toStake := make(map[ids.ID]uint64)
ins, outs, _, signers, err := b.Spend(b.state, keys, toBurn, toStake, changeAddr)
if err != nil {
return nil, fmt.Errorf("couldn't generate tx inputs/outputs: %w", err)
}
Expand Down Expand Up @@ -540,7 +556,11 @@ func (b *builder) NewTransformSubnetTx(
changeAddr ids.ShortID,
memo []byte,
) (*txs.Tx, error) {
ins, outs, _, signers, err := b.Spend(b.state, keys, 0, b.cfg.TransformSubnetTxFee, changeAddr)
toBurn := map[ids.ID]uint64{
b.ctx.AVAXAssetID: b.cfg.TransformSubnetTxFee,
}
toStake := make(map[ids.ID]uint64)
ins, outs, _, signers, err := b.Spend(b.state, keys, toBurn, toStake, changeAddr)
if err != nil {
return nil, fmt.Errorf("couldn't generate tx inputs/outputs: %w", err)
}
Expand Down Expand Up @@ -596,7 +616,13 @@ func (b *builder) NewAddValidatorTx(
changeAddr ids.ShortID,
memo []byte,
) (*txs.Tx, error) {
ins, unstakedOuts, stakedOuts, signers, err := b.Spend(b.state, keys, stakeAmount, b.cfg.AddPrimaryNetworkValidatorFee, changeAddr)
toBurn := map[ids.ID]uint64{
b.ctx.AVAXAssetID: b.cfg.AddPrimaryNetworkValidatorFee,
}
toStake := map[ids.ID]uint64{
b.ctx.AVAXAssetID: stakeAmount,
}
ins, unstakedOuts, stakedOuts, signers, err := b.Spend(b.state, keys, toBurn, toStake, changeAddr)
if err != nil {
return nil, fmt.Errorf("couldn't generate tx inputs/outputs: %w", err)
}
Expand Down Expand Up @@ -642,7 +668,13 @@ func (b *builder) NewAddPermissionlessValidatorTx(
changeAddr ids.ShortID,
memo []byte,
) (*txs.Tx, error) {
ins, unstakedOuts, stakedOuts, signers, err := b.Spend(b.state, keys, stakeAmount, b.cfg.AddPrimaryNetworkValidatorFee, changeAddr)
toBurn := map[ids.ID]uint64{
b.ctx.AVAXAssetID: b.cfg.AddPrimaryNetworkValidatorFee,
}
toStake := map[ids.ID]uint64{
b.ctx.AVAXAssetID: stakeAmount,
}
ins, unstakedOuts, stakedOuts, signers, err := b.Spend(b.state, keys, toBurn, toStake, changeAddr)
if err != nil {
return nil, fmt.Errorf("couldn't generate tx inputs/outputs: %w", err)
}
Expand Down Expand Up @@ -693,7 +725,13 @@ func (b *builder) NewAddDelegatorTx(
changeAddr ids.ShortID,
memo []byte,
) (*txs.Tx, error) {
ins, unlockedOuts, lockedOuts, signers, err := b.Spend(b.state, keys, stakeAmount, b.cfg.AddPrimaryNetworkDelegatorFee, changeAddr)
toBurn := map[ids.ID]uint64{
b.ctx.AVAXAssetID: b.cfg.AddPrimaryNetworkDelegatorFee,
}
toStake := map[ids.ID]uint64{
b.ctx.AVAXAssetID: stakeAmount,
}
ins, unlockedOuts, lockedOuts, signers, err := b.Spend(b.state, keys, toBurn, toStake, changeAddr)
if err != nil {
return nil, fmt.Errorf("couldn't generate tx inputs/outputs: %w", err)
}
Expand Down Expand Up @@ -736,7 +774,13 @@ func (b *builder) NewAddPermissionlessDelegatorTx(
changeAddr ids.ShortID,
memo []byte,
) (*txs.Tx, error) {
ins, unlockedOuts, lockedOuts, signers, err := b.Spend(b.state, keys, stakeAmount, b.cfg.AddPrimaryNetworkDelegatorFee, changeAddr)
toBurn := map[ids.ID]uint64{
b.ctx.AVAXAssetID: b.cfg.AddPrimaryNetworkDelegatorFee,
}
toStake := map[ids.ID]uint64{
b.ctx.AVAXAssetID: stakeAmount,
}
ins, unlockedOuts, lockedOuts, signers, err := b.Spend(b.state, keys, toBurn, toStake, changeAddr)
if err != nil {
return nil, fmt.Errorf("couldn't generate tx inputs/outputs: %w", err)
}
Expand Down Expand Up @@ -780,7 +824,11 @@ func (b *builder) NewAddSubnetValidatorTx(
changeAddr ids.ShortID,
memo []byte,
) (*txs.Tx, error) {
ins, outs, _, signers, err := b.Spend(b.state, keys, 0, b.cfg.TxFee, changeAddr)
toBurn := map[ids.ID]uint64{
b.ctx.AVAXAssetID: b.cfg.TxFee,
}
toStake := make(map[ids.ID]uint64)
ins, outs, _, signers, err := b.Spend(b.state, keys, toBurn, toStake, changeAddr)
if err != nil {
return nil, fmt.Errorf("couldn't generate tx inputs/outputs: %w", err)
}
Expand Down Expand Up @@ -825,7 +873,11 @@ func (b *builder) NewRemoveSubnetValidatorTx(
changeAddr ids.ShortID,
memo []byte,
) (*txs.Tx, error) {
ins, outs, _, signers, err := b.Spend(b.state, keys, 0, b.cfg.TxFee, changeAddr)
toBurn := map[ids.ID]uint64{
b.ctx.AVAXAssetID: b.cfg.TxFee,
}
toStake := make(map[ids.ID]uint64)
ins, outs, _, signers, err := b.Spend(b.state, keys, toBurn, toStake, changeAddr)
if err != nil {
return nil, fmt.Errorf("couldn't generate tx inputs/outputs: %w", err)
}
Expand Down Expand Up @@ -864,7 +916,11 @@ func (b *builder) NewTransferSubnetOwnershipTx(
changeAddr ids.ShortID,
memo []byte,
) (*txs.Tx, error) {
ins, outs, _, signers, err := b.Spend(b.state, keys, 0, b.cfg.TxFee, changeAddr)
toBurn := map[ids.ID]uint64{
b.ctx.AVAXAssetID: b.cfg.TxFee,
}
toStake := make(map[ids.ID]uint64)
ins, outs, _, signers, err := b.Spend(b.state, keys, toBurn, toStake, changeAddr)
if err != nil {
return nil, fmt.Errorf("couldn't generate tx inputs/outputs: %w", err)
}
Expand Down Expand Up @@ -904,11 +960,15 @@ func (b *builder) NewBaseTx(
changeAddr ids.ShortID,
memo []byte,
) (*txs.Tx, error) {
toBurn, err := math.Add64(amount, b.cfg.TxFee)
amtToBurn, err := math.Add64(amount, b.cfg.TxFee)
if err != nil {
return nil, fmt.Errorf("amount (%d) + tx fee(%d) overflows", amount, b.cfg.TxFee)
}
ins, outs, _, signers, err := b.Spend(b.state, keys, 0, toBurn, changeAddr)
toBurn := map[ids.ID]uint64{
b.ctx.AVAXAssetID: amtToBurn,
}
toStake := make(map[ids.ID]uint64)
ins, outs, _, signers, err := b.Spend(b.state, keys, toBurn, toStake, changeAddr)
if err != nil {
return nil, fmt.Errorf("couldn't generate tx inputs/outputs: %w", err)
}
Expand Down
6 changes: 5 additions & 1 deletion vms/platformvm/txs/executor/create_chain_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,11 @@ func TestCreateChainTxAP3FeeChange(t *testing.T) {
env := newEnvironment(t, true /*=postBanff*/, false /*=postCortina*/, false /*=postDurango*/)
env.config.ApricotPhase3Time = ap3Time

ins, outs, _, signers, err := env.utxosHandler.Spend(env.state, preFundedKeys, 0, test.fee, ids.ShortEmpty)
toBurn := map[ids.ID]uint64{
env.ctx.AVAXAssetID: test.fee,
}
toStake := make(map[ids.ID]uint64)
ins, outs, _, signers, err := env.utxosHandler.Spend(env.state, preFundedKeys, toBurn, toStake, ids.ShortEmpty)
require.NoError(err)

subnetAuth, subnetSigners, err := env.utxosHandler.Authorize(env.state, testSubnet1.ID(), preFundedKeys)
Expand Down
30 changes: 17 additions & 13 deletions vms/platformvm/txs/executor/create_subnet_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,24 +26,24 @@ func TestCreateSubnetTxAP3FeeChange(t *testing.T) {
fee uint64
expectedErr error
}{
{
name: "pre-fork - correctly priced",
time: defaultGenesisTime,
fee: 0,
expectedErr: nil,
},
// {
// name: "pre-fork - correctly priced",
// time: defaultGenesisTime,
// fee: 0,
// expectedErr: nil,
// },
{
name: "post-fork - incorrectly priced",
time: ap3Time,
fee: 100*defaultTxFee - 1*units.NanoAvax,
expectedErr: utxo.ErrInsufficientUnlockedFunds,
},
{
name: "post-fork - correctly priced",
time: ap3Time,
fee: 100 * defaultTxFee,
expectedErr: nil,
},
// {
// name: "post-fork - correctly priced",
// time: ap3Time,
// fee: 100 * defaultTxFee,
// expectedErr: nil,
// },
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
Expand All @@ -54,7 +54,11 @@ func TestCreateSubnetTxAP3FeeChange(t *testing.T) {
env.ctx.Lock.Lock()
defer env.ctx.Lock.Unlock()

ins, outs, _, signers, err := env.utxosHandler.Spend(env.state, preFundedKeys, 0, test.fee, ids.ShortEmpty)
toBurn := map[ids.ID]uint64{
env.ctx.AVAXAssetID: test.fee,
}
toStake := make(map[ids.ID]uint64)
ins, outs, _, signers, err := env.utxosHandler.Spend(env.state, preFundedKeys, toBurn, toStake, ids.ShortEmpty)
require.NoError(err)

// Create the tx
Expand Down
Loading

0 comments on commit 8793145

Please sign in to comment.