Struct polymesh_api::polymesh::api::capital_distribution::CallApi
source · pub struct CallApi<'api> { /* private fields */ }Implementations§
source§impl<'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
originis a signer that has permissions to act as an agent ofca_id.ticker.ca_ididentifies the CA to start a capital distribution for.portfoliospecifies the portfolio number of the agent to distributeamountfrom.currencyto withdraw and distribute from theportfolio.per_shareamount ofcurrencyto withdraw and distribute. Specified as a per-million, i.e.1 / 10^6th of onecurrencytoken.amountofcurrencyto withdraw and distribute at most.payment_atspecifies when benefits may first be pushed or claimed.expires_atspecifies, if provided, when remaining benefits are forfeit and may be reclaimed byorigin.
Errors
UnauthorizedAgentiforiginis not agent-permissioned forticker.ExpiryBeforePaymentifexpires_at.unwrap() <= payment_at.NoSuchCAifca_iddoes not identify an existing CA.NoRecordDateif CA has no record date.RecordDateAfterStartif CA’s record date > payment_at.UnauthorizedCustodianif the caller is not the custodian ofportfolio.InsufficientPortfolioBalanceifportfoliohas less thanamountofcurrency.InsufficientBalanceif the protocol fee couldn’t be charged.CANotBenefitif the CA is not of kind PredictableBenefit/UnpredictableBenefitDistributionAmountIsZeroif theamountis zero.DistributionPerShareIsZeroif theper_shareis 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
originwhich must be a holder of the asset and eligible for the distribution.ca_ididentifies the CA to start a capital distribution for.
Errors
HolderAlreadyPaidiforigin’s DID has already received its benefit.NoSuchDistributionif there’s no capital distribution forca_id.CannotClaimBeforeStartifnow < payment_at.CannotClaimAfterExpiryifnow > expiry_at.unwrap().NoSuchCAifca_iddoes not identify an existing CA.NotTargetedByCAif the CA does not targetorigin’s DID.BalanceAmountProductOverflowedifba = balance * amountwould overflow.BalanceAmountProductSupplyDivisionFailedifba * supplywould 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
originis a signer that has permissions to act as an agent ofca_id.ticker.ca_ididentifies the CA with a capital distributions to push benefits for.holderto push benefits to.
Errors
UnauthorizedAgentiforiginis not agent-permissioned forticker.NoSuchDistributionif there’s no capital distribution forca_id.CannotClaimBeforeStartifnow < payment_at.CannotClaimAfterExpiryifnow > expiry_at.unwrap().NoSuchCAifca_iddoes not identify an existing CA.NotTargetedByCAif the CA does not targetholder.BalanceAmountProductOverflowedifba = balance * amountwould overflow.BalanceAmountProductSupplyDivisionFailedifba * supplywould 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
originwhich must be the creator of the capital distribution tied toca_id.ca_ididentifies the CA with a capital distribution to reclaim for.
Errors
NoSuchDistributionif there’s no capital distribution forca_id.AlreadyReclaimedif this function has already been called successfully.NotExpiredifnow < 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
originis a signer that has permissions to act as an agent ofca_id.ticker.ca_ididentifies the CA with a not-yet-started capital distribution to remove.
Errors
UnauthorizedAgentiforiginis not agent-permissioned forticker.NoSuchDistributionif there’s no capital distribution forca_id.DistributionStartedifpayment_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§
§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>,
§fn checked_into<T>(self) -> Option<T>where
Self: TryInto<T>,
fn checked_into<T>(self) -> Option<T>where
Self: TryInto<T>,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
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>
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)
&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)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s. Read moresource§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
source§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
source§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
T. Read more§impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
unchecked_from.source§impl<T, S> UniqueSaturatedInto<T> for Swhere
T: Bounded,
S: TryInto<T>,
impl<T, S> UniqueSaturatedInto<T> for Swhere
T: Bounded,
S: TryInto<T>,
source§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T.