crates/sui-framework/docs/sui/pay.md
This module provides handy functionality for wallets and <code>sui::Coin</code> management.
keepsplitsplit_vecsplit_and_transferdivide_and_keepjoinjoin_vecjoin_vec_and_transfer<a name="@Constants_0"></a>
<a name="sui_pay_ENoCoins"></a>
For when empty vector is supplied into join function.
<pre><code><b>const</b> <a href="../sui/pay.md#sui_pay_ENoCoins">ENoCoins</a>: u64 = 0; </code></pre><a name="sui_pay_keep"></a>
keepTransfer <code>c</code> to the sender of the current transaction
<pre><code><b>public</b> <b>fun</b> <a href="../sui/pay.md#sui_pay_keep">keep</a><T>(c: <a href="../sui/coin.md#sui_coin_Coin">sui::coin::Coin</a><T>, ctx: &<a href="../sui/tx_context.md#sui_tx_context_TxContext">sui::tx_context::TxContext</a>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/pay.md#sui_pay_keep">keep</a><T>(c: Coin<T>, ctx: &TxContext) { <a href="../sui/transfer.md#sui_transfer_public_transfer">transfer::public_transfer</a>(c, ctx.sender()) } </code></pre> </details><a name="sui_pay_split"></a>
splitSplit <code><a href="../sui/coin.md#sui_coin">coin</a></code> to two coins, one with balance <code>split_amount</code>, and the remaining balance is left in <code><a href="../sui/coin.md#sui_coin">coin</a></code>.
<pre><code><b>public</b> <b>entry</b> <b>fun</b> <a href="../sui/pay.md#sui_pay_split">split</a><T>(<a href="../sui/coin.md#sui_coin">coin</a>: &<b>mut</b> <a href="../sui/coin.md#sui_coin_Coin">sui::coin::Coin</a><T>, split_amount: u64, ctx: &<b>mut</b> <a href="../sui/tx_context.md#sui_tx_context_TxContext">sui::tx_context::TxContext</a>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>entry</b> <b>fun</b> <a href="../sui/pay.md#sui_pay_split">split</a><T>(<a href="../sui/coin.md#sui_coin">coin</a>: &<b>mut</b> Coin<T>, split_amount: u64, ctx: &<b>mut</b> TxContext) { <a href="../sui/pay.md#sui_pay_keep">keep</a>(<a href="../sui/coin.md#sui_coin">coin</a>.<a href="../sui/pay.md#sui_pay_split">split</a>(split_amount, ctx), ctx) } </code></pre> </details><a name="sui_pay_split_vec"></a>
split_vecSplit coin <code>self</code> into multiple coins, each with balance specified in <code>split_amounts</code>. Remaining balance is left in <code>self</code>.
<pre><code><b>public</b> <b>entry</b> <b>fun</b> <a href="../sui/pay.md#sui_pay_split_vec">split_vec</a><T>(self: &<b>mut</b> <a href="../sui/coin.md#sui_coin_Coin">sui::coin::Coin</a><T>, split_amounts: vector<u64>, ctx: &<b>mut</b> <a href="../sui/tx_context.md#sui_tx_context_TxContext">sui::tx_context::TxContext</a>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>entry</b> <b>fun</b> <a href="../sui/pay.md#sui_pay_split_vec">split_vec</a><T>(self: &<b>mut</b> Coin<T>, split_amounts: vector<u64>, ctx: &<b>mut</b> TxContext) { split_amounts.do!(|amount| <a href="../sui/pay.md#sui_pay_split">split</a>(self, amount, ctx)); } </code></pre> </details><a name="sui_pay_split_and_transfer"></a>
split_and_transferSend <code>amount</code> units of <code>c</code> to <code>recipient</code> Aborts with <code><a href="../sui/balance.md#sui_balance_ENotEnough">sui::balance::ENotEnough</a></code> if <code>amount</code> is greater than the balance in <code>c</code>
<pre><code><b>public</b> <b>entry</b> <b>fun</b> <a href="../sui/pay.md#sui_pay_split_and_transfer">split_and_transfer</a><T>(c: &<b>mut</b> <a href="../sui/coin.md#sui_coin_Coin">sui::coin::Coin</a><T>, amount: u64, recipient: <b>address</b>, ctx: &<b>mut</b> <a href="../sui/tx_context.md#sui_tx_context_TxContext">sui::tx_context::TxContext</a>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>entry</b> <b>fun</b> <a href="../sui/pay.md#sui_pay_split_and_transfer">split_and_transfer</a><T>( c: &<b>mut</b> Coin<T>, amount: u64, recipient: <b>address</b>, ctx: &<b>mut</b> TxContext, ) { <a href="../sui/transfer.md#sui_transfer_public_transfer">transfer::public_transfer</a>(c.<a href="../sui/pay.md#sui_pay_split">split</a>(amount, ctx), recipient) } </code></pre> </details><a name="sui_pay_divide_and_keep"></a>
divide_and_keepDivide coin <code>self</code> into <code>n - 1</code> coins with equal balances. If the balance is not evenly divisible by <code>n</code>, the remainder is left in <code>self</code>.
<pre><code><b>public</b> <b>entry</b> <b>fun</b> <a href="../sui/pay.md#sui_pay_divide_and_keep">divide_and_keep</a><T>(self: &<b>mut</b> <a href="../sui/coin.md#sui_coin_Coin">sui::coin::Coin</a><T>, n: u64, ctx: &<b>mut</b> <a href="../sui/tx_context.md#sui_tx_context_TxContext">sui::tx_context::TxContext</a>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>entry</b> <b>fun</b> <a href="../sui/pay.md#sui_pay_divide_and_keep">divide_and_keep</a><T>(self: &<b>mut</b> Coin<T>, n: u64, ctx: &<b>mut</b> TxContext) { self.divide_into_n(n, ctx).destroy!(|<a href="../sui/coin.md#sui_coin">coin</a>| <a href="../sui/transfer.md#sui_transfer_public_transfer">transfer::public_transfer</a>(<a href="../sui/coin.md#sui_coin">coin</a>, ctx.sender())); } </code></pre> </details><a name="sui_pay_join"></a>
joinJoin <code><a href="../sui/coin.md#sui_coin">coin</a></code> into <code>self</code>. Re-exports <code><a href="../sui/coin.md#sui_coin_join">coin::join</a></code> function. Deprecated: you should call <code><a href="../sui/coin.md#sui_coin">coin</a>.<a href="../sui/pay.md#sui_pay_join">join</a>(other)</code> directly.
<pre><code><b>public</b> <b>entry</b> <b>fun</b> <a href="../sui/pay.md#sui_pay_join">join</a><T>(self: &<b>mut</b> <a href="../sui/coin.md#sui_coin_Coin">sui::coin::Coin</a><T>, <a href="../sui/coin.md#sui_coin">coin</a>: <a href="../sui/coin.md#sui_coin_Coin">sui::coin::Coin</a><T>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>entry</b> <b>fun</b> <a href="../sui/pay.md#sui_pay_join">join</a><T>(self: &<b>mut</b> Coin<T>, <a href="../sui/coin.md#sui_coin">coin</a>: Coin<T>) { self.<a href="../sui/pay.md#sui_pay_join">join</a>(<a href="../sui/coin.md#sui_coin">coin</a>) } </code></pre> </details><a name="sui_pay_join_vec"></a>
join_vecJoin everything in <code>coins</code> with <code>self</code>
<pre><code><b>public</b> <b>entry</b> <b>fun</b> <a href="../sui/pay.md#sui_pay_join_vec">join_vec</a><T>(self: &<b>mut</b> <a href="../sui/coin.md#sui_coin_Coin">sui::coin::Coin</a><T>, coins: vector<<a href="../sui/coin.md#sui_coin_Coin">sui::coin::Coin</a><T>>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>entry</b> <b>fun</b> <a href="../sui/pay.md#sui_pay_join_vec">join_vec</a><T>(self: &<b>mut</b> Coin<T>, coins: vector<Coin<T>>) { coins.destroy!(|<a href="../sui/coin.md#sui_coin">coin</a>| self.<a href="../sui/pay.md#sui_pay_join">join</a>(<a href="../sui/coin.md#sui_coin">coin</a>)); } </code></pre> </details><a name="sui_pay_join_vec_and_transfer"></a>
join_vec_and_transferJoin a vector of <code>Coin</code> into a single object and transfer it to <code>receiver</code>.
<pre><code><b>public</b> <b>entry</b> <b>fun</b> <a href="../sui/pay.md#sui_pay_join_vec_and_transfer">join_vec_and_transfer</a><T>(coins: vector<<a href="../sui/coin.md#sui_coin_Coin">sui::coin::Coin</a><T>>, receiver: <b>address</b>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>entry</b> <b>fun</b> <a href="../sui/pay.md#sui_pay_join_vec_and_transfer">join_vec_and_transfer</a><T>(<b>mut</b> coins: vector<Coin<T>>, receiver: <b>address</b>) { <b>assert</b>!(coins.length() > 0, <a href="../sui/pay.md#sui_pay_ENoCoins">ENoCoins</a>); <b>let</b> <b>mut</b> self = coins.pop_back(); <a href="../sui/pay.md#sui_pay_join_vec">join_vec</a>(&<b>mut</b> self, coins); <a href="../sui/transfer.md#sui_transfer_public_transfer">transfer::public_transfer</a>(self, receiver) } </code></pre> </details>