crates/sui-framework/docs/deepbook/custodian_v2.md
AccountAccountCapCustodiancreate_child_account_capdelete_account_capaccount_owneraccount_balancenewwithdraw_assetincrease_user_available_balancedecrease_user_available_balanceincrease_user_locked_balancedecrease_user_locked_balancelock_balanceunlock_balanceaccount_available_balanceaccount_locked_balanceborrow_mut_account_balance<a name="deepbook_custodian_v2_Account"></a>
Account<a name="deepbook_custodian_v2_AccountCap"></a>
AccountCapCapability granting permission to access an entry in <code><a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_Custodian">Custodian</a>.account_balances</code>. Calling <code>mint_account_cap</code> creates an "admin account cap" such that id == owner with the permission to both access funds and create new <code><a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_AccountCap">AccountCap</a></code>s. Calling <code><a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_create_child_account_cap">create_child_account_cap</a></code> creates a "child account cap" such that id != owner that can access funds, but cannot create new <code><a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_AccountCap">AccountCap</a></code>s.
<pre><code><b>public</b> <b>struct</b> <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_AccountCap">AccountCap</a> <b>has</b> key, store </code></pre> <details> <summary>Fields</summary> <dl> <dt> <code>id: <a href="../sui/object.md#sui_object_UID">sui::object::UID</a></code> </dt> <dd> </dd> <dt> <code>owner: <b>address</b></code> </dt> <dd> The owner of this AccountCap. Note: this is derived from an object ID, not a user address </dd> </dl> </details><a name="deepbook_custodian_v2_Custodian"></a>
Custodian<a name="@Constants_0"></a>
<a name="deepbook_custodian_v2_EAdminAccountCapRequired"></a>
<pre><code><b>const</b> <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_EAdminAccountCapRequired">EAdminAccountCapRequired</a>: u64 = 2; </code></pre><a name="deepbook_custodian_v2_create_child_account_cap"></a>
create_child_account_capCreate a "child account cap" such that id != owner that can access funds, but cannot create new <code><a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_AccountCap">AccountCap</a></code>s.
<pre><code><b>public</b> <b>fun</b> <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_create_child_account_cap">create_child_account_cap</a>(admin_account_cap: &<a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_AccountCap">deepbook::custodian_v2::AccountCap</a>, ctx: &<b>mut</b> <a href="../sui/tx_context.md#sui_tx_context_TxContext">sui::tx_context::TxContext</a>): <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_AccountCap">deepbook::custodian_v2::AccountCap</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_create_child_account_cap">create_child_account_cap</a>(admin_account_cap: &<a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_AccountCap">AccountCap</a>, ctx: &<b>mut</b> TxContext): <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_AccountCap">AccountCap</a> { // Only the admin account cap can create <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_new">new</a> account caps <b>assert</b>!(object::uid_to_address(&admin_account_cap.id) == admin_account_cap.owner, <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_EAdminAccountCapRequired">EAdminAccountCapRequired</a>); <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_AccountCap">AccountCap</a> { id: object::new(ctx), owner: admin_account_cap.owner } } </code></pre> </details><a name="deepbook_custodian_v2_delete_account_cap"></a>
delete_account_capDestroy the given <code>account_cap</code> object
<pre><code><b>public</b> <b>fun</b> <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_delete_account_cap">delete_account_cap</a>(account_cap: <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_AccountCap">deepbook::custodian_v2::AccountCap</a>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_delete_account_cap">delete_account_cap</a>(account_cap: <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_AccountCap">AccountCap</a>) { <b>let</b> <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_AccountCap">AccountCap</a> { id, owner: _ } = account_cap; object::delete(id) } </code></pre> </details><a name="deepbook_custodian_v2_account_owner"></a>
account_ownerReturn the owner of an AccountCap
<pre><code><b>public</b> <b>fun</b> <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_account_owner">account_owner</a>(account_cap: &<a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_AccountCap">deepbook::custodian_v2::AccountCap</a>): <b>address</b> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_account_owner">account_owner</a>(account_cap: &<a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_AccountCap">AccountCap</a>): <b>address</b> { account_cap.owner } </code></pre> </details><a name="deepbook_custodian_v2_account_balance"></a>
account_balance<a name="deepbook_custodian_v2_new"></a>
new<a name="deepbook_custodian_v2_withdraw_asset"></a>
withdraw_asset<a name="deepbook_custodian_v2_increase_user_available_balance"></a>
increase_user_available_balance<a name="deepbook_custodian_v2_decrease_user_available_balance"></a>
decrease_user_available_balance<a name="deepbook_custodian_v2_increase_user_locked_balance"></a>
increase_user_locked_balance<a name="deepbook_custodian_v2_decrease_user_locked_balance"></a>
decrease_user_locked_balance<a name="deepbook_custodian_v2_lock_balance"></a>
lock_balanceMove <code>quantity</code> from the unlocked balance of <code>user</code> to the locked balance of <code>user</code>
<pre><code><b>public</b>(package) <b>fun</b> <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_lock_balance">lock_balance</a><T>(<a href="../deepbook/custodian.md#deepbook_custodian">custodian</a>: &<b>mut</b> <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_Custodian">deepbook::custodian_v2::Custodian</a><T>, account_cap: &<a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_AccountCap">deepbook::custodian_v2::AccountCap</a>, quantity: u64) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_lock_balance">lock_balance</a><T>( <a href="../deepbook/custodian.md#deepbook_custodian">custodian</a>: &<b>mut</b> <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_Custodian">Custodian</a><T>, account_cap: &<a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_AccountCap">AccountCap</a>, quantity: u64, ) { <b>let</b> to_lock = <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_decrease_user_available_balance">decrease_user_available_balance</a>(<a href="../deepbook/custodian.md#deepbook_custodian">custodian</a>, account_cap, quantity); <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_increase_user_locked_balance">increase_user_locked_balance</a>(<a href="../deepbook/custodian.md#deepbook_custodian">custodian</a>, account_cap, to_lock); } </code></pre> </details><a name="deepbook_custodian_v2_unlock_balance"></a>
unlock_balanceMove <code>quantity</code> from the locked balance of <code>user</code> to the unlocked balance of <code>user</code>
<pre><code><b>public</b>(package) <b>fun</b> <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_unlock_balance">unlock_balance</a><T>(<a href="../deepbook/custodian.md#deepbook_custodian">custodian</a>: &<b>mut</b> <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_Custodian">deepbook::custodian_v2::Custodian</a><T>, owner: <b>address</b>, quantity: u64) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(package) <b>fun</b> <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_unlock_balance">unlock_balance</a><T>( <a href="../deepbook/custodian.md#deepbook_custodian">custodian</a>: &<b>mut</b> <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_Custodian">Custodian</a><T>, owner: <b>address</b>, quantity: u64, ) { <b>let</b> locked_balance = <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_decrease_user_locked_balance">decrease_user_locked_balance</a><T>(<a href="../deepbook/custodian.md#deepbook_custodian">custodian</a>, owner, quantity); <a href="../deepbook/custodian_v2.md#deepbook_custodian_v2_increase_user_available_balance">increase_user_available_balance</a><T>(<a href="../deepbook/custodian.md#deepbook_custodian">custodian</a>, owner, locked_balance) } </code></pre> </details><a name="deepbook_custodian_v2_account_available_balance"></a>
account_available_balance<a name="deepbook_custodian_v2_account_locked_balance"></a>
account_locked_balance<a name="deepbook_custodian_v2_borrow_mut_account_balance"></a>
borrow_mut_account_balance