# IPTs

### Why IPTs Exist

An IP-NFT represents a single, indivisible unit of intellectual property ownership. This is powerful for registration and transfer, but it creates a problem: how do you fund research that costs millions, involve dozens of contributors, or let a community participate in the upside of a scientific breakthrough — when the underlying asset is a single NFT held by one entity?

IP Tokens (IPTs) solve this by fractionalizing IP-NFT ownership into fungible ERC-20 tokens. When an IP-NFT is tokenized, the NFT is locked in the Tokenizer contract and a corresponding IPT is created. Each IPT represents a fractional stake in the underlying intellectual property — granting the holder governance rights over decisions affecting the IP, the ability to participate in fundraising rounds, and a claim on revenue generated by the Lab (such as licensing fees, data access payments, and milestone payouts).

The result is that scientific IP becomes a liquid, tradable, collectively governed asset — without sacrificing the legal enforceability provided by the IP-NFT's agreement structure.

### What Makes Up an IPT

An IPT is composed of three elements working together:

**The Token — ERC-20** Each IPT is a standard ERC-20 token deployed as a new contract when an IP-NFT is tokenized. It has a configurable symbol (up to 10 characters), an initial supply set at creation, and the ability to mint additional tokens up to a cap. Once the supply cap is set via the `cap()` function, it is irreversible — no more tokens can ever be minted for that IP-NFT. This provides token holders with supply certainty.

**The Membership Agreement** Before receiving IPTs, every participant must sign a Membership Agreement. This is a legal document generated as a PDF, stored on IPFS (via Filebase), and verified onchain through the Permissioner contract. The agreement defines the rights, obligations, and governance terms for token holders. Without signing, a wallet cannot receive or transfer IPTs — the Permissioner enforces this at the contract level for native IPTs.

**The Permissioner — Transfer Control** All IPT transfers are gated by a Permissioner contract that verifies legal compliance. The protocol supports multiple permissioning modes:

<table><thead><tr><th width="271.3984375">Permissioner Type</th><th>Behavior</th></tr></thead><tbody><tr><td>TermsAcceptedPermissioner</td><td>Recipient must have signed the Membership Agreement onchain before receiving tokens</td></tr><tr><td>BlindPermissioner</td><td>Permissionless transfers — no agreement required</td></tr><tr><td>ForbidAllPermissioner</td><td>All transfers blocked — tokens are non-transferable</td></tr></tbody></table>

The active Permissioner is set per IPT deployment and determines the compliance model for that token.

### Where IPTs Live

In the V3 architecture, tokenization happens inside Onchain Labs. When a Lab owner tokenizes an IP-NFT, the Lab's Token Bound Account deposits the IP-NFT into the Tokenizer contract and receives the initial IPT supply. The IPTs are then held in the Lab's treasury until distributed through fundraising, grants, or direct allocation.

This means the Lab becomes the central hub for all IPT operations: minting, distributing, governing, and tracking revenue. The ownership hierarchy is: wallet holds LabNFT → Lab TBA holds IPTs → IPT holders participate in governance → governance decisions affect the IP-NFT and Lab treasury.

### How Tokenization Works

#### Direct Tokenization

The primary path to creating IPTs. The Lab owner tokenizes an existing IP-NFT that is already held inside the Lab:

1. **Generate Membership Agreement** — The protocol generates a Membership Agreement PDF and stores it on IPFS via Filebase, returning a CID
2. **Sign Terms Onchain** — The Lab owner signs the agreement through the Permissioner contract, linking their wallet to the legal terms
3. **Call `tokenizeIpnft()`** — The Tokenizer contract locks the IP-NFT and deploys a new ERC-20 contract with the specified symbol and initial supply
4. **Receive IPT** — The initial supply is minted to the Lab's Token Bound Account (or a specified recipient address)

**Tokenization inputs:**

<table><thead><tr><th width="211.9140625">Parameter</th><th>Description</th></tr></thead><tbody><tr><td>symbol</td><td>Token symbol, 1–10 characters</td></tr><tr><td>supply</td><td>Initial token supply (minimum 1)</td></tr><tr><td>targetWalletAddress</td><td>Recipient of the initial supply (typically the Lab's TBA)</td></tr></tbody></table>

#### Bring Your Own Token (BYOT)

The Tokenizer also supports attaching an existing ERC-20 token to an IP-NFT rather than creating a new one. This is useful for projects that have already deployed a token on another network or through a different mechanism. The `attachIpt` function on the Tokenizer contract registers the existing token as the IPT for a given IP-NFT, enabling all the same protocol integrations (governance, fundraising, licensing revenue distribution) without requiring a new token deployment.

#### Minting Additional Tokens

After initial tokenization, the Lab owner can mint additional IPTs:

* **`issue(address to, uint256 amount)`** — Mint additional tokens to a specified address, typically for fundraising rounds or contributor allocation
* **`cap(uint256 amount)`** — Set the maximum supply cap (irreversible). Once called, no more tokens can be minted beyond this amount. This provides supply certainty to token holders and investors

#### Programmatic Tokenization

The protocol supports a backend service for programmatic tokenization, enabling automated or API-driven token creation. The flow is:

1. Generate agreement via `generateIptMembershipAgreement` (stores on Filebase, returns CID)
2. Get terms message from the `Permissioner` smart contract
3. Sign the message
4. Call `tokenizeIpnft` or `attachIpt` on the `Tokenizer` smart contract

This enables integrations, AI agents, and automated pipelines to tokenize IP-NFTs without manual UI interaction.

### What IPT Holders Get

#### Governance

IPT holders participate in governance over the underlying intellectual property. Governance is conducted via Snapshot voting, where token balance at a specific block determines voting power. Decisions that IPT holders can vote on include:

* Milestone approvals and research direction
* Licensing terms and conditions
* Treasury allocation and spending
* Whether to accept or reject collaboration proposals
* Clawback proceedings (recovering misused funds)

#### Revenue Sharing

When the Lab generates revenue — through IP licensing fees (via ERC-4907), dataset access payments, or milestone payouts — the funds flow into the Lab's treasury. IPT holders have a claim on this revenue, distributable proportional to their token holdings.

#### Data Access

IPT holders can be granted access to the Lab's data room. The IP-NFT's `canRead` function, combined with Molecule's Onchain-Verified Envelope Encryption (Lit Protocol retained for legacy files), enables token-gated access to premium research data, manuscripts, and experimental results.

### Technical Reference

#### IPT Token Functions

solidity

```solidity
// Mint new tokens (Lab owner only)
function issue(address to, uint256 amount) external

// Set maximum supply (irreversible)
function cap(uint256 amount) external

// Burn tokens
function burn(uint256 amount) external
```

#### Tokenizer Functions

solidity

```solidity
// Create IPT from IP-NFT
function tokenizeIpnft(
    uint256 ipnftId,
    uint256 tokenAmount,
    string calldata tokenSymbol,
    string calldata agreementCid,
    address tokenReceiver
) external returns (address ipt)

// Attach existing ERC-20 as IPT
function attachIpt(
    uint256 ipnftId,
    address token
) external

// Mint additional IPT
function issue(address ipt, uint256 amount, address receiver) external

// Get IPT address for an IP-NFT
function controllerOf(uint256 ipnftId) external view returns (address)
```

#### Events

<table><thead><tr><th width="232.109375">Event</th><th>Description</th></tr></thead><tbody><tr><td>TokensCreated</td><td>New IPT deployed from tokenization</td></tr><tr><td>Capped</td><td>IPT supply permanently capped</td></tr></tbody></table>

### Contract Addresses

**Ethereum Mainnet**

<table><thead><tr><th width="232.98046875">Contract</th><th>Address</th></tr></thead><tbody><tr><td>Tokenizer</td><td><code>0x58EB89C69CB389DBef0c130C6296ee271b82f436</code></td></tr><tr><td>Permissioner</td><td><code>0xC837E02982992B701A1B5e4E21fA01cEB0a628fA</code></td></tr></tbody></table>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.molecule.xyz/core-concepts/tokenized-ips/ipts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
