Struct polymesh_api::polymesh::api::capital_distribution::CallApi
source · [−]pub struct CallApi<'api> { /* private fields */ }
Implementations
sourceimpl<'api> CallApi<'api>
impl<'api> CallApi<'api>
sourcepub fn distribute(
&self,
ca_id: CAId,
portfolio: Option<PortfolioNumber>,
currency: Ticker,
per_share: u128,
amount: u128,
payment_at: u64,
expires_at: Option<u64>
) -> Result<WrappedCall<'api>>
pub fn distribute(
&self,
ca_id: CAId,
portfolio: Option<PortfolioNumber>,
currency: Ticker,
per_share: u128,
amount: u128,
payment_at: u64,
expires_at: Option<u64>
) -> Result<WrappedCall<'api>>
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 ofca_id.ticker
.ca_id
identifies the CA to start a capital distribution for.portfolio
specifies the portfolio number of the agent to distributeamount
from.currency
to withdraw and distribute from theportfolio
.per_share
amount ofcurrency
to withdraw and distribute. Specified as a per-million, i.e.1 / 10^6
th of onecurrency
token.amount
ofcurrency
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 byorigin
.
Errors
UnauthorizedAgent
iforigin
is not agent-permissioned forticker
.ExpiryBeforePayment
ifexpires_at.unwrap() <= payment_at
.NoSuchCA
ifca_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 ofportfolio
.InsufficientPortfolioBalance
ifportfolio
has less thanamount
ofcurrency
.InsufficientBalance
if the protocol fee couldn’t be charged.CANotBenefit
if the CA is not of kind PredictableBenefit/UnpredictableBenefitDistributionAmountIsZero
if theamount
is zero.DistributionPerShareIsZero
if theper_share
is zero.
Permissions
- Asset
- Portfolio
sourcepub fn claim(&self, ca_id: CAId) -> Result<WrappedCall<'api>>
pub fn claim(&self, ca_id: CAId) -> Result<WrappedCall<'api>>
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
iforigin
’s DID has already received its benefit.NoSuchDistribution
if there’s no capital distribution forca_id
.CannotClaimBeforeStart
ifnow < payment_at
.CannotClaimAfterExpiry
ifnow > expiry_at.unwrap()
.NoSuchCA
ifca_id
does not identify an existing CA.NotTargetedByCA
if the CA does not targetorigin
’s DID.BalanceAmountProductOverflowed
ifba = balance * amount
would overflow.BalanceAmountProductSupplyDivisionFailed
ifba * supply
would overflow.- Other errors can occur if the compliance manager rejects the transfer.
sourcepub fn push_benefit(
&self,
ca_id: CAId,
holder: IdentityId
) -> Result<WrappedCall<'api>>
pub fn push_benefit(
&self,
ca_id: CAId,
holder: IdentityId
) -> Result<WrappedCall<'api>>
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 ofca_id.ticker
.ca_id
identifies the CA with a capital distributions to push benefits for.holder
to push benefits to.
Errors
UnauthorizedAgent
iforigin
is not agent-permissioned forticker
.NoSuchDistribution
if there’s no capital distribution forca_id
.CannotClaimBeforeStart
ifnow < payment_at
.CannotClaimAfterExpiry
ifnow > expiry_at.unwrap()
.NoSuchCA
ifca_id
does not identify an existing CA.NotTargetedByCA
if the CA does not targetholder
.BalanceAmountProductOverflowed
ifba = balance * amount
would overflow.BalanceAmountProductSupplyDivisionFailed
ifba * supply
would overflow.- Other errors can occur if the compliance manager rejects the transfer.
sourcepub fn reclaim(&self, ca_id: CAId) -> Result<WrappedCall<'api>>
pub fn reclaim(&self, ca_id: CAId) -> Result<WrappedCall<'api>>
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 toca_id
.ca_id
identifies the CA with a capital distribution to reclaim for.
Errors
NoSuchDistribution
if there’s no capital distribution forca_id
.AlreadyReclaimed
if this function has already been called successfully.NotExpired
ifnow < expiry
.
sourcepub fn remove_distribution(&self, ca_id: CAId) -> Result<WrappedCall<'api>>
pub fn remove_distribution(&self, ca_id: CAId) -> Result<WrappedCall<'api>>
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 ofca_id.ticker
.ca_id
identifies the CA with a not-yet-started capital distribution to remove.
Errors
UnauthorizedAgent
iforigin
is not agent-permissioned forticker
.NoSuchDistribution
if there’s no capital distribution forca_id
.DistributionStarted
ifpayment_at <= now
.
Trait Implementations
Auto Trait Implementations
impl<'api> !RefUnwindSafe for CallApi<'api>
impl<'api> Send for CallApi<'api>
impl<'api> Sync for CallApi<'api>
impl<'api> Unpin for CallApi<'api>
impl<'api> !UnwindSafe for CallApi<'api>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
fn checked_from<T>(t: T) -> Option<Self> where
Self: TryFrom<T>,
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
fn checked_into<T>(self) -> Option<T> where
Self: TryInto<T>,
fn checked_into<T>(self) -> Option<T> where
Self: TryInto<T>,
Consume self to return Some
equivalent value of Option<T>
. Read more
impl<T> Downcast for T where
T: Any,
impl<T> Downcast for T where
T: Any,
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>ⓘNotable traits for Box<R, Global>impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>ⓘNotable traits for Box<R, Global>impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;
Convert Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
. Read more
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read more
fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert &mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s. Read more
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
sourcefn saturated_from<T>(t: T) -> Self where
Self: UniqueSaturatedFrom<T>,
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
sourcefn saturated_into<T>(self) -> T where
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> T where
Self: UniqueSaturatedInto<T>,
Consume self to return an equivalent value of T
. Read more
impl<S, T> UncheckedInto<T> for S where
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for S where
T: UncheckedFrom<S>,
fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
The counterpart to unchecked_from
.
sourceimpl<T, S> UniqueSaturatedInto<T> for S where
T: Bounded,
S: TryInto<T>,
impl<T, S> UniqueSaturatedInto<T> for S where
T: Bounded,
S: TryInto<T>,
sourcefn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
Consume self to return an equivalent value of T
.
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
fn vzip(self) -> V
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
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
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more