Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,13 @@
* [Cookbook: private investor allocations with PoD](privacy-on-avalanche/cookbook-private-investor-allocations.md)
* [Tutorial: private Adder on Avalanche Fuji](privacy-on-avalanche/tutorial-private-adder-fuji.md)
* [Tutorial: custom privacy logic with PoD](privacy-on-avalanche/tutorial-custom-logic.md)
* [COTI ERC-7984](coti-erc7984/README.md)
* [Precision and decimals](coti-erc7984/precision-and-decimals.md)
* [Host-chain deployment](coti-erc7984/host-chain-deployment.md)
* [Transaction economics](coti-erc7984/transaction-economics.md)
* [Transfer semantics](coti-erc7984/transfer-semantics.md)
* [Concurrency](coti-erc7984/concurrency.md)
* [Deployed contracts](coti-erc7984/deployed-contracts.md)

## Security

Expand Down
30 changes: 30 additions & 0 deletions coti-erc7984/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# COTI ERC-7984

**Confidential tokens on the chains you already use.**

Privacy on Demand brings encrypted balances and encrypted transfers to any EVM chain — no privacy-native L1, no specialised rollup, no migration. Live today on Avalanche Fuji and Ethereum Sepolia.

COTI's implementation of the [ERC-7984](https://eips.ethereum.org/EIPS/eip-7984) confidential-token interface is the PoD ERC-7984: a 1:1 collateralised confidential wrapper deployed on the host chain, with the encrypted computation performed on COTI behind the scenes. It exposes ERC-7984 metadata and emits `ConfidentialTransfer` events, so explorers and integrators treat it as a first-class confidential token.

This section compares that implementation against FHE-based implementations of the same standard, dimension by dimension.

## In this section

* [**Precision and decimals**](precision-and-decimals.md) — 256-bit values against the 64-bit ceiling, and why it decides whether a wrapper can mirror an 18-decimal asset.
* [**Host-chain deployment**](host-chain-deployment.md) — what the token requires of the chain it runs on, and what it requires of the user.
* [**Transaction economics**](transaction-economics.md) — encrypted-input size, on-chain footprint, and where the cryptographic work happens.
* [**Transfer semantics**](transfer-semantics.md) — encrypted allowances with standard `approve` / `transferFrom`, and failures that reveal nothing.
* [**Concurrency**](concurrency.md) — multiple in-flight requests per account, ordered by a monotonic nonce.
* [**Deployed contracts**](deployed-contracts.md) — the six pTokens live on Avalanche Fuji and Ethereum Sepolia, and how new ones are listed.

## Why teams choose COTI ERC-7984

| | |
| :--------------------------- | :------------------------------------------------------------------------ |
| **Wrap real assets** | 18-decimal confidential WETH and WAVAX — out of reach for 64-bit designs |
| **Keep your chain** | Runs on any EVM chain; no privacy L1, no migration |
| **Full precision** | 256-bit values, no supply ceiling |
| **Small on-chain footprint** | ~192-byte inputs, 2-slot balances |
| **Instant for users** | No client-side proof generation |
| **Private allowances** | Exact encrypted amounts, not public blanket authority |
| **Ship fast** | Factory-deployed portal + token pair per asset |
7 changes: 7 additions & 0 deletions coti-erc7984/concurrency.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Concurrency

## Concurrency that keeps up with users

Multiple transfers, mints, and burns from the same account can be in flight simultaneously. Each is tracked independently by request id, and a monotonic nonce guarantees results always apply in the correct order. **No queue, no serialisation, no waiting for one transfer to clear before starting the next.**

For how asynchronous private operations settle in general, see [Async private operations](../privacy-on-demand/async-private-operations.md).
25 changes: 25 additions & 0 deletions coti-erc7984/deployed-contracts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Deployed contracts

## Live on two public testnets

Six confidential tokens, deployed and operating.

**Avalanche Fuji**


| Token | Address | Decimals |
| :------- | :------------------------------------------- | :------: |
| `p.MTT` | `0x02f284a1968160E1d3e4bC2BA3261be49725E765` | 18 |
| `p.USDC` | `0x21576D8CCE47d044C5815bd59eca1F6DA94c65A5` | 6 |
| `p.AVAX` | `0x74d47cD68203066c97BA99787Fe1e0c68Ce42b04` | 18 |

**Ethereum Sepolia**


| Token | Address | Decimals |
| :------- | :------------------------------------------- | :------: |
| `p.MTT` | `0x0510F0b32828D5fB472dE5A5bE30b370c5D1a056` | 18 |
| `p.USDC` | `0xD7B3D49F85000489708B7db5B0f1a8693Fc707f3` | 6 |
| `p.ETH` | `0xd33A363459c6Ee0C4F8504E380E8D3Aa4F209116` | 18 |

Each pair is deployed by `PrivacyPortalFactory` as a minimal-proxy clone — **one portal and one pToken per asset**, so listing a new confidential token is a factory call, not an engineering project.
16 changes: 16 additions & 0 deletions coti-erc7984/host-chain-deployment.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Host-chain deployment

## Deploy anywhere there is an Inbox

Confidential tokens have historically meant moving to a privacy chain and asking your users to follow. PoD inverts that: the token lives on **your** chain, and the encrypted computation happens on COTI behind the scenes.

| | |
| :----------------------------- | :-------------------------------------------------------------- |
| **Chains supported** | Any EVM chain with a PoD Inbox deployed |
| **Live today** | Avalanche Fuji, Ethereum Sepolia |
| **Required of the host chain** | Nothing — no FHE precompiles, no custom opcodes, no forked EVM |
| **Required of the user** | A standard wallet |

Your liquidity, your users, and your existing integrations stay exactly where they are.

For the components behind the Inbox, see [Architecture and main components](../privacy-on-demand/architecture-and-components.md) in the Privacy on Demand section.
15 changes: 15 additions & 0 deletions coti-erc7984/precision-and-decimals.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Precision and decimals

## Wrap the assets that actually exist

PoD ERC-7984 is a 1:1 collateralised confidential wrapper. Lock WETH, get `p.ETH`. Lock USDC, get `p.USDC`. The private token mirrors the underlying exactly — same decimals, same supply, same value — and unwraps back on demand.

That "same decimals" part is where PoD stands alone.

**FHE-based confidential token standards store balances as 64-bit encrypted integers.** At 18 decimals, a 64-bit ceiling caps a token at roughly **18.4 whole units** before it overflows. A confidential 1:1 WETH wrapper is not difficult under that constraint — it is arithmetically impossible above ~18 ETH.

PoD carries **full 256-bit precision** end to end: 18 decimals, `uint256` range, no ceiling worth naming. Four of the six pTokens live today are 18-decimal, including `p.ETH` and `p.AVAX`.

> **If you want to wrap real liquidity confidentially, 256-bit is not a preference. It is the entry requirement.**

The [deployed contracts](deployed-contracts.md) page lists the decimals of each live pToken.
22 changes: 22 additions & 0 deletions coti-erc7984/transaction-economics.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Transaction economics

## Built for real transaction economics

Confidentiality usually arrives with a size problem. FHE-based tokens attach a zero-knowledge input proof to every encrypted value — commonly **16–20 KB per input** — and offload multi-kilobyte ciphertext blobs off-chain.

PoD's encrypted values are small enough to treat like ordinary transaction data.

| | **PoD ERC-7984** | **FHE-based confidential tokens** |
| :--------------- | :------------------- | :--------------------------------------- |
| Encrypted input | **~192 bytes** | ~16,000–20,000 bytes |
| On-chain balance | **2 storage slots** | Handle on-chain, multi-KB blob offloaded |
| Client-side work | **Encrypt and sign** | Generate a ZK proof, per transaction |
| Numeric range | **256-bit** | 64-bit |

**Roughly two orders of magnitude smaller on input.** Confidential transfers that fit comfortably inside normal block economics, on chains that were never designed for privacy.

## No proving in the browser

FHE inputs require the user's device to generate a zero-knowledge proof before a transaction can even be submitted — seconds of computation, and a frozen UI while it runs.

PoD asks the client to **encrypt and sign**. That is it. The wallet does what wallets already do, and the transaction goes out immediately. On mobile, on low-end hardware, and at scale, that difference compounds.
17 changes: 17 additions & 0 deletions coti-erc7984/transfer-semantics.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Transfer semantics

## Precise, confidential approvals

PoD keeps the allowance model developers already know — and encrypts it.

- **Exact amounts.** Approve 50 tokens, not blanket authority over the balance.
- **Encrypted on-chain.** The allowance value is a ciphertext, readable only by the owner and the spender.
- **Standard semantics.** `approve` / `transferFrom`, the shape every integrator already knows.

Blanket time-boxed operator models grant a spender full authority over a balance until expiry, and record that authority publicly. PoD grants a specific encrypted amount, and keeps the amount private.

## Failure that reveals nothing

When an encrypted transfer exceeds a balance, PoD resolves it inside the garbled circuit: the effective amount becomes zero and the request completes normally. **No revert, no error code, no observable difference** between a transfer that moved value and one that did not.

Insufficient balances stay as private as sufficient ones.
2 changes: 2 additions & 0 deletions coti-privacy-portal/developer-guide/privateerc20.sol.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ PrivateERC20 follows the ERC20 interface, but changes how data is stored and exp
| Supports plain uint256 operations | Yes | Yes |
| Supports encrypted operations | No | Yes (`itUint256`, `gtUint256` variants) |

For a comparison against the [ERC-7984](https://eips.ethereum.org/EIPS/eip-7984) confidential-token standard — and how COTI's Privacy on Demand `pERC20` compares with FHE-based implementations on encrypted-input size, numeric range, and allowance semantics — see [COTI ERC-7984](../../coti-erc7984/README.md).

### How it works

#### Balances
Expand Down