Skip to content

Commit

Permalink
wip: fixing UTs
Browse files Browse the repository at this point in the history
  • Loading branch information
abi87 committed Jul 18, 2024
1 parent 4343efb commit 5b14c61
Show file tree
Hide file tree
Showing 15 changed files with 265 additions and 126 deletions.
19 changes: 13 additions & 6 deletions vms/avm/block/builder/builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import (

blkexecutor "github.com/ava-labs/avalanchego/vms/avm/block/executor"
txexecutor "github.com/ava-labs/avalanchego/vms/avm/txs/executor"
commonfee "github.com/ava-labs/avalanchego/vms/components/fee"
)

const trackChecksums = false
Expand Down Expand Up @@ -122,11 +123,12 @@ func TestBuilderBuildBlock(t *testing.T) {
preferredState := state.NewMockChain(ctrl)
preferredState.EXPECT().GetLastAccepted().Return(preferredID)
preferredState.EXPECT().GetTimestamp().Return(preferredTimestamp)
preferredState.EXPECT().GetCurrentGasCap().Return(commonfee.Gas(1_000_000), nil)

manager := blkexecutor.NewMockManager(ctrl)
manager.EXPECT().Preferred().Return(preferredID)
manager.EXPECT().GetStatelessBlock(preferredID).Return(preferredBlock, nil)
manager.EXPECT().GetState(preferredID).Return(preferredState, true)
manager.EXPECT().GetState(preferredID).Return(preferredState, true).Times(2)

unsignedTx := txs.NewMockUnsignedTx(ctrl)
unsignedTx.EXPECT().Visit(gomock.Any()).Return(errTest) // Fail semantic verification
Expand Down Expand Up @@ -169,11 +171,12 @@ func TestBuilderBuildBlock(t *testing.T) {
preferredState := state.NewMockChain(ctrl)
preferredState.EXPECT().GetLastAccepted().Return(preferredID)
preferredState.EXPECT().GetTimestamp().Return(preferredTimestamp)
preferredState.EXPECT().GetCurrentGasCap().Return(commonfee.Gas(1_000_000), nil)

manager := blkexecutor.NewMockManager(ctrl)
manager.EXPECT().Preferred().Return(preferredID)
manager.EXPECT().GetStatelessBlock(preferredID).Return(preferredBlock, nil)
manager.EXPECT().GetState(preferredID).Return(preferredState, true)
manager.EXPECT().GetState(preferredID).Return(preferredState, true).Times(2)

unsignedTx := txs.NewMockUnsignedTx(ctrl)
unsignedTx.EXPECT().Visit(gomock.Any()).Return(nil) // Pass semantic verification
Expand Down Expand Up @@ -217,11 +220,12 @@ func TestBuilderBuildBlock(t *testing.T) {
preferredState := state.NewMockChain(ctrl)
preferredState.EXPECT().GetLastAccepted().Return(preferredID)
preferredState.EXPECT().GetTimestamp().Return(preferredTimestamp)
preferredState.EXPECT().GetCurrentGasCap().Return(commonfee.Gas(1_000_000), nil)

manager := blkexecutor.NewMockManager(ctrl)
manager.EXPECT().Preferred().Return(preferredID)
manager.EXPECT().GetStatelessBlock(preferredID).Return(preferredBlock, nil)
manager.EXPECT().GetState(preferredID).Return(preferredState, true)
manager.EXPECT().GetState(preferredID).Return(preferredState, true).Times(2)
manager.EXPECT().VerifyUniqueInputs(preferredID, gomock.Any()).Return(errTest)

unsignedTx := txs.NewMockUnsignedTx(ctrl)
Expand Down Expand Up @@ -266,6 +270,7 @@ func TestBuilderBuildBlock(t *testing.T) {
preferredState := state.NewMockChain(ctrl)
preferredState.EXPECT().GetLastAccepted().Return(preferredID)
preferredState.EXPECT().GetTimestamp().Return(preferredTimestamp)
preferredState.EXPECT().GetCurrentGasCap().Return(commonfee.Gas(1_000_000), nil)

// tx1 and tx2 both consume [inputID].
// tx1 is added to the block first, so tx2 should be dropped.
Expand Down Expand Up @@ -302,7 +307,7 @@ func TestBuilderBuildBlock(t *testing.T) {
manager := blkexecutor.NewMockManager(ctrl)
manager.EXPECT().Preferred().Return(preferredID)
manager.EXPECT().GetStatelessBlock(preferredID).Return(preferredBlock, nil)
manager.EXPECT().GetState(preferredID).Return(preferredState, true)
manager.EXPECT().GetState(preferredID).Return(preferredState, true).Times(2)
manager.EXPECT().VerifyUniqueInputs(preferredID, gomock.Any()).Return(nil)
// Assert created block has one tx, tx1,
// and other fields are set correctly.
Expand Down Expand Up @@ -367,11 +372,12 @@ func TestBuilderBuildBlock(t *testing.T) {
preferredState := state.NewMockChain(ctrl)
preferredState.EXPECT().GetLastAccepted().Return(preferredID)
preferredState.EXPECT().GetTimestamp().Return(preferredTimestamp)
preferredState.EXPECT().GetCurrentGasCap().Return(commonfee.Gas(1_000_000), nil)

manager := blkexecutor.NewMockManager(ctrl)
manager.EXPECT().Preferred().Return(preferredID)
manager.EXPECT().GetStatelessBlock(preferredID).Return(preferredBlock, nil)
manager.EXPECT().GetState(preferredID).Return(preferredState, true)
manager.EXPECT().GetState(preferredID).Return(preferredState, true).Times(2)
manager.EXPECT().VerifyUniqueInputs(preferredID, gomock.Any()).Return(nil)
// Assert that the created block has the right timestamp
manager.EXPECT().NewBlock(gomock.Any()).DoAndReturn(
Expand Down Expand Up @@ -444,11 +450,12 @@ func TestBuilderBuildBlock(t *testing.T) {
preferredState := state.NewMockChain(ctrl)
preferredState.EXPECT().GetLastAccepted().Return(preferredID)
preferredState.EXPECT().GetTimestamp().Return(preferredTimestamp)
preferredState.EXPECT().GetCurrentGasCap().Return(commonfee.Gas(1_000_000), nil)

manager := blkexecutor.NewMockManager(ctrl)
manager.EXPECT().Preferred().Return(preferredID)
manager.EXPECT().GetStatelessBlock(preferredID).Return(preferredBlock, nil)
manager.EXPECT().GetState(preferredID).Return(preferredState, true)
manager.EXPECT().GetState(preferredID).Return(preferredState, true).Times(2)
manager.EXPECT().VerifyUniqueInputs(preferredID, gomock.Any()).Return(nil)
// Assert that the created block has the right timestamp
manager.EXPECT().NewBlock(gomock.Any()).DoAndReturn(
Expand Down
13 changes: 13 additions & 0 deletions vms/avm/block/executor/block.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ import (
"github.com/ava-labs/avalanchego/vms/avm/block"
"github.com/ava-labs/avalanchego/vms/avm/state"
"github.com/ava-labs/avalanchego/vms/avm/txs/executor"

commonfee "github.com/ava-labs/avalanchego/vms/components/fee"
)

const SyncBound = 10 * time.Second
Expand Down Expand Up @@ -134,6 +136,7 @@ func (b *Block) Verify(context.Context) error {
if err != nil {
return err
}
currGasCap := feeCalc.GetGasCap()

for _, tx := range txs {
// Verify that the tx is valid according to the current state of the
Expand Down Expand Up @@ -202,6 +205,16 @@ func (b *Block) Verify(context.Context) error {

// Now that the block has been executed, we can add the block data to the
// state diff.
if feeCalc.IsEActive() {
blkGas, err := feeCalc.GetBlockGas()
if err != nil {
return err
}

nextGasCap := commonfee.UpdateGasCap(currGasCap, blkGas)
stateDiff.SetCurrentGasCap(nextGasCap)
}

stateDiff.SetLastAccepted(blkID)
stateDiff.AddBlock(b.Block)

Expand Down
2 changes: 2 additions & 0 deletions vms/avm/block/executor/block_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -860,6 +860,7 @@ func TestBlockReject(t *testing.T) {
metrics: metrics.NewMockMetrics(ctrl),
backend: defaultTestBackend(true, nil),
state: mockState,
clk: &mockable.Clock{},
blkIDToState: map[ids.ID]*blockState{
blockID: {},
},
Expand Down Expand Up @@ -913,6 +914,7 @@ func TestBlockReject(t *testing.T) {
metrics: metrics.NewMockMetrics(ctrl),
backend: defaultTestBackend(true, nil),
state: mockState,
clk: &mockable.Clock{},
blkIDToState: map[ids.ID]*blockState{
blockID: {},
},
Expand Down
4 changes: 4 additions & 0 deletions vms/avm/block/executor/manager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (

"github.com/ava-labs/avalanchego/ids"
"github.com/ava-labs/avalanchego/utils/set"
"github.com/ava-labs/avalanchego/utils/timer/mockable"
"github.com/ava-labs/avalanchego/vms/avm/block"
"github.com/ava-labs/avalanchego/vms/avm/state"
"github.com/ava-labs/avalanchego/vms/avm/txs"
Expand Down Expand Up @@ -166,6 +167,7 @@ func TestManagerVerifyTx(t *testing.T) {
return &manager{
backend: defaultTestBackend(true, nil),
state: state,
clk: &mockable.Clock{},
lastAccepted: lastAcceptedID,
}
},
Expand Down Expand Up @@ -196,6 +198,7 @@ func TestManagerVerifyTx(t *testing.T) {
return &manager{
backend: defaultTestBackend(true, nil),
state: state,
clk: &mockable.Clock{},
lastAccepted: lastAcceptedID,
}
},
Expand Down Expand Up @@ -226,6 +229,7 @@ func TestManagerVerifyTx(t *testing.T) {
return &manager{
backend: defaultTestBackend(true, nil),
state: state,
clk: &mockable.Clock{},
lastAccepted: lastAcceptedID,
}
},
Expand Down
1 change: 1 addition & 0 deletions vms/avm/environment_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ func setup(tb testing.TB, c *envConfig) *environment {
vm.state,
vm.ctx.SharedMemory,
vm.parser.Codec(),
&vm.clock,
),
},
walletService: &WalletService{
Expand Down
8 changes: 8 additions & 0 deletions vms/avm/service_backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"github.com/ava-labs/avalanchego/ids"
"github.com/ava-labs/avalanchego/snow"
"github.com/ava-labs/avalanchego/utils/set"
"github.com/ava-labs/avalanchego/utils/timer/mockable"
"github.com/ava-labs/avalanchego/vms/avm/config"
"github.com/ava-labs/avalanchego/vms/avm/state"
"github.com/ava-labs/avalanchego/vms/components/avax"
Expand All @@ -28,6 +29,7 @@ func newServiceBackend(
state state.State,
sharedMemory atomic.SharedMemory,
codec codec.Manager,
clk *mockable.Clock,
) *serviceBackend {
backendCtx := &builder.Context{
NetworkID: ctx.NetworkID,
Expand All @@ -44,6 +46,7 @@ func newServiceBackend(
state: state,
sharedMemory: sharedMemory,
codec: codec,
clk: clk,
}
}

Expand All @@ -55,6 +58,7 @@ type serviceBackend struct {
state state.State
sharedMemory atomic.SharedMemory
codec codec.Manager
clk *mockable.Clock
}

func (b *serviceBackend) State() state.State {
Expand All @@ -69,6 +73,10 @@ func (b *serviceBackend) Codec() codec.Manager {
return b.codec
}

func (b *serviceBackend) Clock() *mockable.Clock {
return b.clk
}

func (b *serviceBackend) Context() *builder.Context {
return b.ctx
}
Expand Down
6 changes: 3 additions & 3 deletions vms/avm/service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -543,7 +543,7 @@ func TestServiceGetTxJSON_BaseTx(t *testing.T) {
"addresses": [
"X-testing1d6kkj0qh4wcmus3tk59npwt3rluc6en72ngurd"
],
"amount": 999990355,
"amount": 999997280,
"locktime": 0,
"threshold": 1
}
Expand Down Expand Up @@ -614,7 +614,7 @@ func TestServiceGetTxJSON_ExportTx(t *testing.T) {
"addresses": [
"X-testing1lnk637g0edwnqc2tn8tel39652fswa3xk4r65e"
],
"amount": 999990215,
"amount": 999997250,
"locktime": 0,
"threshold": 1
}
Expand Down Expand Up @@ -753,7 +753,7 @@ func TestServiceGetTxJSON_CreateAssetTx(t *testing.T) {
"addresses": [
"X-testing1lnk637g0edwnqc2tn8tel39652fswa3xk4r65e"
],
"amount": 999990715,
"amount": 999998150,
"locktime": 0,
"threshold": 1
}
Expand Down
11 changes: 9 additions & 2 deletions vms/avm/state/state.go
Original file line number Diff line number Diff line change
Expand Up @@ -416,9 +416,16 @@ func (s *state) GetTimestamp() time.Time {
}

func (s *state) GetCurrentGasCap() (commonfee.Gas, error) {
if s.currentGasCap == nil {
return commonfee.ZeroGas, nil
if s.currentGasCap != nil {
return *s.currentGasCap, nil
}

feesCfg, err := fee.GetDynamicConfig(true /*isEActive*/)
if err != nil {
return commonfee.ZeroGas, fmt.Errorf("failed retrieving dynamic fees config: %w", err)
}
s.currentGasCap = new(commonfee.Gas)
*s.currentGasCap = feesCfg.MaxGasPerSecond
return *s.currentGasCap, nil
}

Expand Down
17 changes: 15 additions & 2 deletions vms/avm/tx_builders.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/ava-labs/avalanchego/codec"
"github.com/ava-labs/avalanchego/ids"
"github.com/ava-labs/avalanchego/utils/set"
"github.com/ava-labs/avalanchego/utils/timer/mockable"
"github.com/ava-labs/avalanchego/vms/avm/config"
"github.com/ava-labs/avalanchego/vms/avm/state"
"github.com/ava-labs/avalanchego/vms/avm/txs"
Expand All @@ -30,6 +31,7 @@ type txBuilderBackend interface {
State() state.State
Config() *config.Config
Codec() codec.Manager
Clock() *mockable.Clock

Context() *walletbuilder.Context
ResetAddresses(addrs set.Set[ids.ShortID])
Expand Down Expand Up @@ -262,8 +264,19 @@ func builders(backend txBuilderBackend, kc *secp256k1fx.Keychain) (walletbuilder
}

func feeCalculator(backend txBuilderBackend) (fee.Calculator, error) {
chainTime := backend.State().GetTimestamp()
return state.PickBuildingFeeCalculator(backend.Config(), backend.Codec(), backend.State(), chainTime)
var (
chain = backend.State()
parentBlkTime = chain.GetTimestamp()
nextBlkTime = state.NextBlockTime(parentBlkTime, backend.Clock())
)

diff, err := state.NewDiffOn(chain)
if err != nil {
return nil, fmt.Errorf("failed building diff: %w", err)
}
diff.SetTimestamp(nextBlkTime)

return state.PickBuildingFeeCalculator(backend.Config(), backend.Codec(), chain, parentBlkTime)
}

func options(changeAddr ids.ShortID, memo []byte) []common.Option {
Expand Down
Loading

0 comments on commit 5b14c61

Please sign in to comment.