code.vegaprotocol.io/vega@v0.79.0/core/execution/common/expiring_orders_snapshot.go (about)

     1  // Copyright (C) 2023 Gobalsky Labs Limited
     2  //
     3  // This program is free software: you can redistribute it and/or modify
     4  // it under the terms of the GNU Affero General Public License as
     5  // published by the Free Software Foundation, either version 3 of the
     6  // License, or (at your option) any later version.
     7  //
     8  // This program is distributed in the hope that it will be useful,
     9  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    10  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    11  // GNU Affero General Public License for more details.
    12  //
    13  // You should have received a copy of the GNU Affero General Public License
    14  // along with this program.  If not, see <http://www.gnu.org/licenses/>.
    15  
    16  package common
    17  
    18  import (
    19  	"code.vegaprotocol.io/vega/core/types"
    20  
    21  	"github.com/google/btree"
    22  )
    23  
    24  func NewExpiringOrdersFromState(orders []*types.Order) *ExpiringOrders {
    25  	eo := &ExpiringOrders{
    26  		orders: btree.New(2),
    27  	}
    28  
    29  	for _, o := range orders {
    30  		eo.Insert(o.ID, o.ExpiresAt)
    31  	}
    32  
    33  	return eo
    34  }
    35  
    36  func (a ExpiringOrders) Changed() bool {
    37  	return true
    38  }
    39  
    40  func (a *ExpiringOrders) GetState() []*types.Order {
    41  	orders := make([]*types.Order, 0, a.orders.Len())
    42  	a.orders.Ascend(func(item btree.Item) bool {
    43  		oo := item.(*ordersAtTS)
    44  		for _, o := range oo.orders {
    45  			// We don't actually need the entire order to save/restore this state, just the ID and expiry
    46  			// we could consider changing the snapshot protos to reflect this.
    47  			orders = append(orders, &types.Order{
    48  				ID:        o,
    49  				ExpiresAt: oo.ts,
    50  			})
    51  		}
    52  		return true
    53  	})
    54  
    55  	return orders
    56  }