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

# Custody

> Wallet-agnostic infrastructure integrating with any custody solution

Trusset is completely **wallet-agnostic**, meaning we integrate with any custody provider that generates valid blockchain addresses. Your existing custody arrangements work without modifications.

## Universal Compatibility

Support all custody models without vendor lock-in:

<CardGroup cols={2}>
  <Card title="Self-Custody" icon="key">
    Hardware wallets, software wallets, or browser extensions under your control
  </Card>

  <Card title="Institutional Custody" icon="building">
    Fireblocks, Copper, Coinbase Prime, or any licensed custodian
  </Card>

  <Card title="MPC Solutions" icon="share-nodes">
    Multi-party computation providers like Dfns, Zengo, or Qredo
  </Card>

  <Card title="Smart Contract Wallets" icon="microchip">
    Safe (formerly Gnosis Safe), Argent, or custom account abstraction implementations
  </Card>
</CardGroup>

## Network-Specific Integration

Custody requirements vary by blockchain - Ethereum wallets differ fundamentally from Solana wallets. Trusset handles these differences automatically:

* **Automatic Detection:** API calls, White Label apps, and the Issuer Platform detect the target network and integrate appropriate wallet providers.

* **Native Support:** Each blockchain's native wallet standards work out-of-the-box - MetaMask for EVM chains, Phantom for Solana, and so on.

* **Unified Interface:** Despite underlying differences, you interact with all networks through identical API endpoints and dashboard interfaces.

## Wallet Registration

On-chain writes are authorised against wallets you register on the instance. Registration proves you control the address through a signature challenge:

<Steps>
  <Step title="Request a nonce">
    Ask for a nonce for the address you want to register. The API returns a single-use message containing the instance ID, the address, the nonce, and a timestamp.
  </Step>

  <Step title="Sign the message">
    Sign that exact message with the wallet, through whichever custody provider holds it. Hardware wallet, MPC provider, institutional custodian, or browser extension all work.
  </Step>

  <Step title="Submit the signature">
    Submit the signature to complete registration. The API recovers the signing address and verifies it matches the address being registered.
  </Step>
</Steps>

Each instance holds up to 10 registered wallets. The first one registered becomes the primary wallet automatically, and you can promote a different wallet at any time. Removing the primary wallet promotes the oldest remaining wallet in its place.

Registration also grants the wallet the on-chain authority it needs to operate: a KYC provider role on the instance's identity registry, a deployer role on the equity factory, and a settlement role on the stock escrow contract. Removing a wallet revokes those same roles.

<Info>
  Market readiness checks resolve to the primary wallet, falling back to the oldest verified wallet when no primary is set. Oracle signer authorisation and liquidator role checks are evaluated against that address.
</Info>

## Signing Model

Trusset builds transactions. Your wallet signs them.

Every endpoint that touches a contract returns an unsigned payload: the target address and the encoded calldata. You sign it with your own key, in your own environment, and broadcast it. Trusset holds no private key, has no signer, and cannot move your assets.

Some operations need more than one transaction, an ERC-20 approval before a deposit, for example. Those endpoints return an ordered list of steps to broadcast in sequence.

Where the API needs to record what happened, you call the same endpoint a second time with the resulting transaction hash. Trusset reads the mined receipt directly from the chain and derives its state from what actually executed, not from what the request claimed.

## Custody Provider Examples

Common integrations across different custody models:

| Provider Type          | Examples                      | Integration Method        |
| ---------------------- | ----------------------------- | ------------------------- |
| Hardware Wallets       | Ledger, Trezor                | Direct browser connection |
| Browser Extensions     | MetaMask, Phantom, Rabby      | Web3 provider injection   |
| Institutional Custody  | Fireblocks, Copper, Anchorage | API-based signing         |
| MPC Providers          | Dfns, Zengo, Qredo            | SDK integration           |
| Smart Contract Wallets | Safe, Argent                  | Contract interaction      |

All providers work identically from Trusset's perspective - we only require valid addresses and transaction signatures.

<Warning>
  Never share your wallet private keys with Trusset or any third party. We only need your public address and the signatures you produce. No Trusset endpoint accepts a private key, and legitimate integrations never request direct key access.
</Warning>

<CardGroup cols={2}>
  <Card title="Instances" icon="layer-group" href="/protocol/infrastructure/instances">
    Instance-level wallet configuration
  </Card>

  <Card title="API Reference" icon="code" href="/endpoints/introduction">
    Endpoint reference and error codes
  </Card>
</CardGroup>
