spacejam_service/vm/
transfer.rs

1//! Primitives for the transfer invocation
2
3use crate::{Gas, ServiceId, Vec};
4use serde::{Deserialize, Serialize};
5
6/// A deferred transfer item
7#[derive(Debug, PartialEq, Eq, Clone, Default, Serialize, Deserialize)]
8pub struct DeferredTransfer {
9    /// (s) The sender
10    pub sender: ServiceId,
11
12    /// (d) The destination
13    pub recipient: ServiceId,
14
15    /// (a) The amount
16    pub amount: u64,
17
18    /// (m) The memo
19    pub memo: Vec<u8>,
20
21    /// (g) The gas limit
22    pub gas_limit: Gas,
23}
24
25impl DeferredTransfer {
26    /// (R): Select transfers for a given destination service
27    pub fn select(transfers: &[DeferredTransfer], dest: ServiceId) -> Vec<DeferredTransfer> {
28        let mut transfers = transfers.to_vec();
29        transfers.sort_by_key(|t| t.sender);
30        transfers
31            .iter()
32            .filter(|t| t.recipient == dest)
33            .cloned()
34            .collect()
35    }
36}