diff --git a/pkg/state/appender.go b/pkg/state/appender.go index 095ef7a3b..eb1757fea 100644 --- a/pkg/state/appender.go +++ b/pkg/state/appender.go @@ -699,7 +699,10 @@ func (a *txAppender) appendBlock(params *appendBlockParams) error { if err = a.diffStor.saveTxDiff(minerAndRewardDiff); err != nil { return err } - // TODO validate before reset + err = a.diffApplier.validateBalancesChanges(minerAndRewardDiff.balancesChanges()) + if err != nil { + return errors.Wrap(err, "failed to validate miner reward changes") + } a.diffStor.reset() err = initialSnapshot.ApplyInitialSnapshot(a.txHandler.sa) diff --git a/pkg/state/snapshot_generator.go b/pkg/state/snapshot_generator.go index 1fca98527..ec0f55bf4 100644 --- a/pkg/state/snapshot_generator.go +++ b/pkg/state/snapshot_generator.go @@ -1089,22 +1089,26 @@ func (sg *snapshotGenerator) balanceDiffFromTxDiff(balanceChanges []balanceChang addrAssetBalanceDiff := make(addressAssetBalanceDiff) addrWavesBalanceDiff := make(addressWavesBalanceDiff) for _, balanceChange := range balanceChanges { - // TODO check this place if len(balanceChange.balanceDiffs) > 1 { return nil, nil, errors.Errorf("more than one balance diff for the same address in the same block") } - if len(balanceChange.key) > wavesBalanceKeySize { - err := sg.addAssetBalanceDiffFromTxDiff(balanceChange.balanceDiffs[0], balanceChange.key, - scheme, addrAssetBalanceDiff) - if err != nil { - return nil, nil, errors.Wrap(err, "failed to add asset balance from tx diff") - } - } else { + switch len(balanceChange.key) { + case wavesBalanceKeySize: err := sg.addWavesBalanceDiffFromTxDiff(balanceChange.balanceDiffs[0], balanceChange.key, scheme, addrWavesBalanceDiff) if err != nil { return nil, nil, errors.Wrap(err, "failed to add waves balance from tx diff") } + case assetBalanceKeySize: + err := sg.addAssetBalanceDiffFromTxDiff(balanceChange.balanceDiffs[0], balanceChange.key, + scheme, addrAssetBalanceDiff) + if err != nil { + return nil, nil, errors.Wrap(err, "failed to add asset balance from tx diff") + } + default: + return nil, nil, + errors.Errorf("wrong key size to calculate balance diff from tx diff, key size is %d", + len(balanceChange.key)) } } return addrWavesBalanceDiff, addrAssetBalanceDiff, nil