# Party Objects

*[Documentation index](/llms.txt) · [Full index](/llms-full.txt)*

A party object is a consensus-address-owned object: a single address owns it, but consensus sequences and versions it. APIs expose this ownership with a `ConsensusAddressOwner` owner variant. Like shared objects, party objects use consensus sequencing. Unlike shared objects, they retain single-address ownership and can be transferred to and from other ownership types and wrapped.

Party objects are transferred using the [`sui::transfer::party_transfer`](/references/framework/sui_sui/transfer#sui_transfer_party_transfer) or [`sui::transfer::public_party_transfer`](/references/framework/sui_sui/transfer#sui_transfer_public_party_transfer) function. It is accessible to the `Party` to which it is transferred.

:::info

Party objects currently support only single-address ownership. The `sui::party::Party` type already models permissions for multiple members, but the public ownership mode is restricted to `party::single_owner`.

:::

## Create party objects

Use these [`transfer` module](https://github.com/MystenLabs/sui/blob/main/crates/sui-framework/packages/sui-framework/sources/transfer.move) functions to create party objects:

```
public fun party_transfer<T: key>(obj: T, party: sui::party::Party)
public fun public_party_transfer<T: key + store>(obj: T, party: sui::party::Party)
```

- Use the [`sui::transfer::party_transfer`](/references/framework/sui_sui/transfer#sui_transfer_party_transfer) function if you are defining a [custom transfer policy](/develop/objects/transfers/custom-rules) for the object.

- Use the [`sui::transfer::public_party_transfer`](/references/framework/sui_sui/transfer#sui_transfer_public_party_transfer) function if the object has the `store` capability.

A party object's ownership can change over its lifetime, either by adding it as a [dynamic object field](/develop/objects/dynamic-fields), transferring it to a different address or ownership type, or making it [immutable](/develop/objects/object-ownership/immutable). However, after you create an object and set its ownership, it cannot be [shared](/develop/objects/object-ownership/shared).

<CodeWalkthrough source="examples/move/basics/sources/object_basics.move" language="move">
  <Step lines="28-34" title="Create a party object">
    The `create_party` function creates a new `Object` and transfers it using `public_party_transfer` with a `party::single_owner` party. This makes the object a party object owned by `recipient`, versioned by consensus but owned by a single address.
  </Step>
  <Step lines="40-43" title="Transfer a party object">
    To transfer a party object owned by an account address, use `public_party_transfer` with a new `party::single_owner`. The `party_transfer_single_owner` function transfers an existing party object to a new recipient while keeping it as a party object.
  </Step>
</CodeWalkthrough>

## When to use party objects

Use party objects when you want an object to remain owned by one address but be versioned by [consensus](/develop/sui-architecture/consensus), such as for operational convenience. If you only use an object with other party or [shared](/develop/objects/object-ownership/shared) objects, converting it to a party object has no additional performance cost.

Party objects can be used by multiple inflight [transactions](/develop/transactions/txn-overview) at the same time. This contrasts with [address-owned](/develop/objects/object-ownership/address-owned) objects, which only allow a single inflight transaction. Many applications can benefit from the ability to pipeline multiple transactions on the same party object.

:::info

`Coin`s can be party objects, including `Coin<SUI>`. However, you cannot use a party object `Coin<SUI>` for gas payment. To use a party object `Coin<SUI>` for gas, you must first transfer it back to address-owned.

:::
