Struct CapitalDistributionCallApi

Source
pub struct CapitalDistributionCallApi<'api> { /* private fields */ }

Implementations§

Source§

impl<'api> CapitalDistributionCallApi<'api>

Source

pub fn distribute( &self, ca_id: CAId, portfolio: Option<PortfolioNumber>, currency: AssetId, per_share: u128, amount: u128, payment_at: u64, expires_at: Option<u64>, ) -> Result<WrappedCall>

Start and attach a capital distribution, to the CA identified by ca_id, with amount funds in currency withdrawn from portfolio belonging to origin’s DID.

The distribution will commence at payment_at and expire at expires_at, if provided, or if None, then there’s no expiry.

The funds will be locked in portfolio from when distribute is called. When there’s no expiry, some funds may be locked indefinitely in portfolio, due to claimants not withdrawing or no benefits being pushed to them. For indivisible currencies, unlocked amounts, of less than one whole unit, will not be transferable from portfolio. However, if we imagine that users Alice and Bob both are entitled to 1.5 units, and only receive 1 units each, then 0.5 + 0.5 = 1 units are left in portfolio, which is now transferrable.

§Arguments
  • origin is a signer that has permissions to act as an agent of ca_id.asset_id.
  • ca_id identifies the CA to start a capital distribution for.
  • portfolio specifies the portfolio number of the agent to distribute amount from.
  • currency to withdraw and distribute from the portfolio.
  • per_share amount of currency to withdraw and distribute. Specified as a per-million, i.e. 1 / 10^6th of one currency token.
  • amount of currency to withdraw and distribute at most.
  • payment_at specifies when benefits may first be pushed or claimed.
  • expires_at specifies, if provided, when remaining benefits are forfeit and may be reclaimed by origin.
§Errors
  • UnauthorizedAgent if origin is not agent-permissioned for asset_id.
  • ExpiryBeforePayment if expires_at.unwrap() <= payment_at.
  • NoSuchCA if ca_id does not identify an existing CA.
  • NoRecordDate if CA has no record date.
  • RecordDateAfterStart if CA’s record date > payment_at.
  • UnauthorizedCustodian if the caller is not the custodian of portfolio.
  • InsufficientPortfolioBalance if portfolio has less than amount of currency.
  • InsufficientBalance if the protocol fee couldn’t be charged.
  • CANotBenefit if the CA is not of kind PredictableBenefit/UnpredictableBenefit
  • DistributionAmountIsZero if the amount is zero.
  • DistributionPerShareIsZero if the per_share is zero.
§Permissions
  • Asset
  • Portfolio
Source

pub fn claim(&self, ca_id: CAId) -> Result<WrappedCall>

Claim a benefit of the capital distribution attached to ca_id.

Taxes are withheld as specified by the CA. Post-tax earnings are then transferred to the default portfolio of the origin’s DID.

All benefits are rounded by truncation, down to first integer below. Moreover, before post-tax earnings, in indivisible currencies are transferred, they are rounded down to a whole unit.

§Arguments
  • origin which must be a holder of the asset and eligible for the distribution.
  • ca_id identifies the CA to start a capital distribution for.
§Errors
  • HolderAlreadyPaid if origin’s DID has already received its benefit.
  • NoSuchDistribution if there’s no capital distribution for ca_id.
  • CannotClaimBeforeStart if now < payment_at.
  • CannotClaimAfterExpiry if now > expiry_at.unwrap().
  • NoSuchCA if ca_id does not identify an existing CA.
  • NotTargetedByCA if the CA does not target origin’s DID.
  • BalanceAmountProductOverflowed if ba = balance * amount would overflow.
  • BalanceAmountProductSupplyDivisionFailed if ba * supply would overflow.
  • Other errors can occur if the compliance manager rejects the transfer.
Source

pub fn push_benefit( &self, ca_id: CAId, holder: IdentityId, ) -> Result<WrappedCall>

Push benefit of an ongoing distribution to the given holder.

Taxes are withheld as specified by the CA. Post-tax earnings are then transferred to the default portfolio of the origin’s DID.

All benefits are rounded by truncation, down to first integer below. Moreover, before post-tax earnings, in indivisible currencies are transferred, they are rounded down to a whole unit.

§Arguments
  • origin is a signer that has permissions to act as an agent of ca_id.asset_id.
  • ca_id identifies the CA with a capital distributions to push benefits for.
  • holder to push benefits to.
§Errors
  • UnauthorizedAgent if origin is not agent-permissioned for asset_id.
  • NoSuchDistribution if there’s no capital distribution for ca_id.
  • CannotClaimBeforeStart if now < payment_at.
  • CannotClaimAfterExpiry if now > expiry_at.unwrap().
  • NoSuchCA if ca_id does not identify an existing CA.
  • NotTargetedByCA if the CA does not target holder.
  • BalanceAmountProductOverflowed if ba = balance * amount would overflow.
  • BalanceAmountProductSupplyDivisionFailed if ba * supply would overflow.
  • Other errors can occur if the compliance manager rejects the transfer.
Source

pub fn reclaim(&self, ca_id: CAId) -> Result<WrappedCall>

Assuming a distribution has expired, unlock the remaining amount in the distributor portfolio.

§Arguments
  • origin which must be the creator of the capital distribution tied to ca_id.
  • ca_id identifies the CA with a capital distribution to reclaim for.
§Errors
  • NoSuchDistribution if there’s no capital distribution for ca_id.
  • AlreadyReclaimed if this function has already been called successfully.
  • NotExpired if now < expiry.
Source

pub fn remove_distribution(&self, ca_id: CAId) -> Result<WrappedCall>

Removes a distribution that hasn’t started yet, unlocking the full amount in the distributor portfolio.

§Arguments
  • origin is a signer that has permissions to act as an agent of ca_id.asset_id.
  • ca_id identifies the CA with a not-yet-started capital distribution to remove.
§Errors
  • UnauthorizedAgent if origin is not agent-permissioned for asset_id.
  • NoSuchDistribution if there’s no capital distribution for ca_id.
  • DistributionStarted if payment_at <= now.

Trait Implementations§

Source§

impl<'api> Clone for CapitalDistributionCallApi<'api>

Source§

fn clone(&self) -> CapitalDistributionCallApi<'api>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'api> From<&'api Api> for CapitalDistributionCallApi<'api>

Source§

fn from(api: &'api Api) -> Self

Converts to this type from the input type.

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<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> CheckedConversion for T

Source§

fn checked_from<T>(t: T) -> Option<Self>
where Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
Source§

fn checked_into<T>(self) -> Option<T>
where Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

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<Src, Dest> IntoTuple<Dest> for Src
where Dest: FromTuple<Src>,

Source§

fn into_tuple(self) -> Dest

Source§

impl<T, Outer> IsWrappedBy<Outer> for T
where Outer: AsRef<T> + AsMut<T> + From<T>, T: From<Outer>,

Source§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

Source§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> SaturatedConversion for T

Source§

fn saturated_from<T>(t: T) -> Self
where Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
Source§

fn saturated_into<T>(self) -> T
where Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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<S, T> UncheckedInto<T> for S
where T: UncheckedFrom<S>,

Source§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
Source§

impl<T, S> UniqueSaturatedInto<T> for S
where T: Bounded, S: TryInto<T>,

Source§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
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
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> JsonSchemaMaybe for T

Source§

impl<T> MaybeSend for T
where T: Send,

Source§

impl<T> MaybeSendSync for T