Struct PositionManager

Source
pub struct PositionManager {
    pub open_positions: RwLock<HashMap<Pubkey, Arc<Mutex<Position>>>>,
    pub wallet_configs: HashMap<Pubkey, PositionConfig>,
    pub tx_monitor_receiver: Receiver<SwapTx>,
    pub market_update_receiver: Receiver<MarketUpdate>,
    pub new_pool_receiver: Receiver<Arc<RwLock<dyn PoolTrait>>>,
    pub wallet: Arc<Keypair>,
    pub central_context: Arc<CentralContext>,
    pub execution_context: Arc<ExecutionContext>,
}
Expand description

Central coordinator for managing copy trading positions and monitoring wallet activity. Monitors swap transactions, market updates, and new pool creations, automatically opening and closing positions based on tracked wallet behavior. It maintains active positions and wallet configurations for copy trading.

Fields§

§open_positions: RwLock<HashMap<Pubkey, Arc<Mutex<Position>>>>§wallet_configs: HashMap<Pubkey, PositionConfig>§tx_monitor_receiver: Receiver<SwapTx>§market_update_receiver: Receiver<MarketUpdate>§new_pool_receiver: Receiver<Arc<RwLock<dyn PoolTrait>>>§wallet: Arc<Keypair>§central_context: Arc<CentralContext>§execution_context: Arc<ExecutionContext>

Implementations§

Source§

impl PositionManager

Source

pub async fn market_update_loop(position_manager: Arc<PositionManager>)

Monitor market price updates and trigger stop-loss checks for open positions. Receives market updates from broadcast channel and forwards them to open positions for stop-loss processing.

Source§

impl PositionManager

Source

pub async fn new_pool_loop(position_manager: Arc<PositionManager>)

Monitor new pool creations and handle Pumpfun bonding curve migrations. When a Pumpfun bonding curve completes and migrates to a Pumpswap pool, updates the position’s pool reference and lookup key to the new pool address.

Source§

impl PositionManager

Source

pub fn start(position_manager: &Arc<PositionManager>)

Start all async monitoring loops for the position manager. Spawns three separate async tasks: market update loop, transaction monitor loop, and new pool loop to handle different event streams concurrently.

Source§

impl PositionManager

Source

pub async fn tx_monitor_loop(position_manager: Arc<PositionManager>)

Monitor swap transactions and manage position lifecycle based on wallet activity. Processes swap transactions from broadcast channel, handling two cases: Our own wallet’s swaps: Confirms buy/sell transactions for existing positions and tracked wallets’ swaps: Opens new positions when they buy tokens

Source§

impl PositionManager

Source

pub fn new( tx_monitor_receiver: Receiver<SwapTx>, market_update_receiver: Receiver<MarketUpdate>, new_pool_receiver: Receiver<Arc<RwLock<dyn PoolTrait>>>, wallet: Arc<Keypair>, central_context: Arc<CentralContext>, execution_context: Arc<ExecutionContext>, ) -> Self

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more