> ## Documentation Index
> Fetch the complete documentation index at: https://docs.usecarry.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Deployments

> Live Carry package and object IDs on Sui testnet, and how to publish your own.

Carry's `carry::access` module is live on **Sui testnet**. The app reads these IDs from `deployments/testnet.json`, so the verifier works out of the box.

## Testnet (live)

<CardGroup cols={1}>
  <Card title="Package ID" icon="cube">
    `0xf7acc10ee3de95ed5bb4560e48d5bf4a4e24f7c4003b892b56632c7ff398b6f9`
  </Card>
</CardGroup>

| Object                     | ID                                                                   |
| -------------------------- | -------------------------------------------------------------------- |
| **Package**                | `0xf7acc10ee3de95ed5bb4560e48d5bf4a4e24f7c4003b892b56632c7ff398b6f9` |
| **AccessPolicy** (shared)  | `0x7bac6b5168a646d7ef06a05fcdebb1526a831bae91c42bb1fd295f976af2cd51` |
| **OwnerCap** (owned)       | `0xf274f5d02a19930445069f024b28de3cb5ed9ac49bbe7bbedeea54582db89777` |
| **Example Receipt** (demo) | `0x435148fde001b0ed2e935b4a72e686d5d7b64f54af74bd99af4bb8e9774ae215` |

<Card title="View the example proof" icon="shield-check" href="https://carrysui.vercel.app/verify/0x435148fde001b0ed2e935b4a72e686d5d7b64f54af74bd99af4bb8e9774ae215">
  Open the walletless verifier for the demo Receipt — all three checks green.
</Card>

## Configuration

The canonical IDs live in [`deployments/testnet.json`](https://github.com/Enoch208/carry/blob/main/deployments/testnet.json). The app reads them (with env overrides) in `apps/web/lib/sui.ts`:

```ts theme={null}
// apps/web/lib/sui.ts
export const PKG    = process.env.CARRY_PACKAGE_ID    || "0xf7acc10e…398b6f9"; // carry::access
export const POLICY = process.env.CARRY_ACCESS_POLICY || "0x7bac6b51…f2cd51"; // shared AccessPolicy
const RPC_URL = process.env.SUI_RPC_URL || "https://sui-testnet-rpc.publicnode.com";
const CLOCK   = "0x6"; // the shared Clock, fixed on every Sui network
```

<Note>
  On-chain reads (the verifier's `getObject` + `is_allowed` via `devInspect`) go through a public RPC — the `fullnode.testnet.sui.io` endpoint no longer serves raw JSON-RPC, so Carry points at `sui-testnet-rpc.publicnode.com` by default (override with `SUI_RPC_URL`).
</Note>

## Publish your own

<Steps>
  <Step title="Switch to testnet and fund gas">
    ```bash theme={null}
    sui client switch --env testnet
    sui client active-address
    sui client gas   # need ~0.2 SUI; faucet at https://faucet.sui.io
    ```
  </Step>

  <Step title="Publish">
    ```bash theme={null}
    cd contracts
    sui client publish --gas-budget 200000000 --json > publish.json
    ```

    Grab the new `packageId` from the published `objectChanges`.
  </Step>

  <Step title="Create your policy">
    `publish` doesn't call `create()`, so make your shared `AccessPolicy` + `OwnerCap`:

    ```bash theme={null}
    sui client call --package <packageId> --module access --function create --gas-budget 50000000
    ```
  </Step>

  <Step title="Update deployments/testnet.json">
    Set `packageId`, `accessPolicy`, `ownerCap`, and `owner` to the new values — the app picks them up automatically.
  </Step>
</Steps>

<Warning>
  The Carry contract changes (new `Receipt` object, new `anchor_receipt` signature) are **breaking**, so a fresh `publish` — not an in-place `upgrade` — is required.
</Warning>
