-
Notifications
You must be signed in to change notification settings - Fork 829
Add ERC: PermaLink Asset Bound Token #999
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 9 commits
f56c2ce
ae944ec
cfa2ca3
225862e
c69de8d
27f8263
e644601
877ddf5
1f45a33
ab48875
2c6cd8b
95be55c
e7a00f5
12aa9f6
0f40647
3ae9cc2
939e882
ca14f08
8bd19be
8eb59ca
9f4d4c4
3615a5e
79aa59f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,324 @@ | ||||||
| --- | ||||||
| eip: 7929 | ||||||
| title: PermaLink Asset Bound Token Standard | ||||||
| description: An interface for PermaLink Asset Bound Tokens, also known as a PermaLink-ABTs. | ||||||
NarcisCRO marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||
| author: Mihai Onila (@MihaiORO), Nick Zeman (@NickZCZ), Narcis Cotaie (@NarcisCRO) | ||||||
| discussions-to: https://ethereum-magicians.org/t/non-fungible-asset-bound-token/23175 | ||||||
| status: Draft | ||||||
| type: Standards Track | ||||||
| category: ERC | ||||||
| created: 2025-04-01 | ||||||
| requires: 721, 721Enumerable | ||||||
NarcisCRO marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||
| --- | ||||||
|
|
||||||
| ### Abstract | ||||||
|
|
||||||
| This standard introduces a subclass of tokens known as **PermaLink Asset Bound Tokens (PermaLink-ABTs)**. They are a specific implementation of the broader **Asset Bound Token (ABT)** concept. ABTs establish a novel ownership paradigm where **an asset can own another asset**, enabling composable, nested, and portfolio-like token structures that evolve together over time. | ||||||
|
|
||||||
| PermaLink-ABTs implement a permanent binding mechanism where a token in one smart contract is irreversibly linked to a token in another contract. These links mirror key state data such as `ownerOf`, `tokenId`, `totalSupply`, and `balanceOf` using the `assetBoundContract` interface. Traditional token transfer and approval functions are omitted to enforce immutability and structural cohesion between bound assets. | ||||||
|
|
||||||
| Instead of utilizing a `mint` function, PermaLink-ABTs employ a `reveal` mechanism that activates tokens from a predefined supply. This approach enables permissionless binding and significantly reduces gas costs. A single token can have multiple PermaLink-ABTs bound to it, acting as multiple subordinate assets, forming a unified, transferable unit that simplifies asset mobility across digital identities, NFTs, and real-world assets (RWAs). | ||||||
|
|
||||||
| By encouraging asset composability over competition, PermaLink-ABTs introduce a dynamic, future-proof model for on-chain asset evolution. | ||||||
|
|
||||||
|
|
||||||
| ## Motivation | ||||||
|
|
||||||
| Traditional ownership models on Ethereum are inherently limited. Only externally owned accounts (EOAs) or smart contracts can own blockchain assets. This creates rigidity, especially as the blockchain ecosystem expands to include digital identities, tokenized real-world assets (RWAs), and NFTs. Current smart contracts are static in nature, meaning once deployed, they cannot adapt to evolving systems, unforeseen use cases, or new integration layers. There is a need for a more flexible and modular ownership model that allows for dynamic interactions between assets. | ||||||
|
|
||||||
| This standard proposes **Asset Bound Tokens (ABTs)** as a solution to this challenge. ABTs allow one token to be permanently bound to another across contracts, creating a dynamic, flexible, and composable ownership model. By enabling tokens to move and evolve together, ABTs pave the way for new possibilities in the on-chain economy. The following use cases illustrate why ABTs are needed: | ||||||
|
|
||||||
| 1. **On-Chain Identity Systems** | ||||||
| Governments and institutions worldwide are piloting or implementing blockchain-based identity systems, digital passports, national IDs, and verifiable credentials such as with the ongoing European Blockchain Services Infrastructure (EBSI) initiatives. These systems often require credentials to be linked across multiple registries (e.g., healthcare, banking, voting). ABTs enable the binding of identity-linked tokens into a cohesive unit, so they move together instead of requiring manual coordination and transfers. This ensures that identity-linked assets remain interconnected and dynamic, making it easier to manage and update linked data as users interact with various systems. | ||||||
|
|
||||||
| 2. **Real-World Asset (RWA) Ownership Structures** | ||||||
| Tokenized businesses and assets (e.g., land, equipment, commodities) need flexible ownership models. These dynamic—businesses acquire, divest, and restructure their holdings and various assets. ABTs allow contracts to represent complex, evolving ownership hierarchies, where nested assets follow changes in their parent entity’s structure (e.g., a farming company acquiring new land or an IT firm merging with another and inheriting intellectual property). ABTs ensure businesses can efficiently manage and transfer assets on-chain without the constraints of rigid smart contracts. | ||||||
|
|
||||||
| 3. **Manufacturing and Supply Chain Management** | ||||||
| Supply chains involve multiple layers of assets: raw materials → parts → products → packaging → containers. Blockchain’s transparency is invaluable, but traditional methods of creating individual tokens or smart contracts for each stage are inefficient and costly. ABTs streamline this by linking tokens across the supply chain, allowing them to be aggregated when products are built up (e.g., shoes packed in boxes, boxes placed on pallets, pallets loaded into containers) and broken down as they move through different stages (e.g., containers unloaded, pallets split, boxes unpacked). This dynamic linking and unlinking reduce redundancy, maintain transparent immutable records, and ensure seamless tracking while minimizing gas costs. By enabling the efficient flow of assets throughout the supply chain, ABTs help reduce complexity and provide a cohesive, real-time view of the entire process. | ||||||
|
|
||||||
| 4. **NFT Ecosystem Optimization** | ||||||
| NFT projects often expand by launching secondary collections (e.g., additional editions, special releases). Without ABTs, this leads to fragmented value and user confusion as older and newer assets compete. ABTs allow new NFTs to be bound to originals, enhancing their value while maintaining a unified ecosystem. This strengthens liquidity and preserves market metrics, ensuring that the value of the original collection is retained and supported by the newer assets, thus benefiting both creators and collectors. | ||||||
|
|
||||||
| 5. **New Opportunities for Creators** | ||||||
| ABTs empower creators to build on top of existing assets permissionlessly without needing ownership of or permission from the original smart contract. This enables a new wave of creative expression, where artists can augment and enhance NFTs (e.g., adding new visuals, audio, or interactive layers) and collaborate on existing collections. Such contributions can generate new revenue streams through shared royalties, consignment, or collaborative upgrades. Owners benefit as well, since bound enhancements can increase the inherent value of their holdings, particularly in projects involving established creators or cross-collection collaborations. | ||||||
|
|
||||||
| In essence, ABTs introduce a framework where tokens are linked rather than owned. This allows for dynamic and evolving asset systems, where assets move together in harmony. If a binding token moves, all associated ABTs move with it, ensuring seamless updates and reducing the need for manual transfers. This innovation transforms traditional smart contracts from static repositories into living, evolving systems capable of adapting to changing use cases, technologies, and business models. | ||||||
|
|
||||||
| The **PermaLink-ABTs** implementation takes the ABT model further by enforcing a permanent binding between one token and another—whether it's another ABT, NFT or NFKBT. This permanent binding ensures that tokens can be transferred as a single unit, reducing complexity and gas fees. Instead of relying on traditional minting, PermaLink-ABTs use a `reveal` mechanism, activating tokens from a predefined supply. This reduces gas costs and encourages efficient linking of assets, enabling greater composability across multiple sectors. | ||||||
|
|
||||||
| PermaLink-ABTs consolidate asset value by allowing multiple subordinate tokens to be linked to a single binding token, providing enhanced composability and reducing fragmentation. By requiring only the binding token to be transferred, all associated assets move in sync, making it easier to manage portfolios and move groups of assets together. This approach fosters collaboration, value accrual, and compatibility across ecosystems, whether for digital identities, RWAs, NFTs, or other on-chain assets. | ||||||
|
|
||||||
|
|
||||||
| ## Specification | ||||||
|
|
||||||
| ### `IABT` (Token Interface) | ||||||
|
|
||||||
| **NOTES**: | ||||||
|
|
||||||
| - The following specifications use syntax from Solidity `0.8.27` (or above) | ||||||
| - Callers MUST handle `false` from `returns (bool success)`. Callers MUST NOT assume that `false` is never returned! | ||||||
|
||||||
|
|
||||||
| ```solidity | ||||||
| interface IABT { | ||||||
| event AssetBoundContractSet(address assetBoundContract); | ||||||
| event TokenRevealed(uint256 tokenId); | ||||||
|
|
||||||
| function ownerOf(uint256 tokenId) external view returns (address); | ||||||
| function tokenExists(uint256 tokenId) external view returns (bool); | ||||||
| function totalSupply() external view returns (uint256); | ||||||
| function balanceOf(address owner) external view returns (uint256); | ||||||
|
|
||||||
| function reveal(uint256[] calldata tokenIds) external payable; | ||||||
| } | ||||||
| ``` | ||||||
|
|
||||||
| ### **Interface events** | ||||||
NarcisCRO marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||
|
|
||||||
| #### `AssetBoundContractSet` event | ||||||
NarcisCRO marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||
|
|
||||||
| Emitted when the contract is deployed and bound to `assetBoundContract` | ||||||
|
|
||||||
| ```solidity | ||||||
| event AssetBoundContractSet(address assetBoundContract); | ||||||
| ``` | ||||||
|
|
||||||
| #### `TokenRevealed` event | ||||||
NarcisCRO marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||
|
|
||||||
| Emitted when the `tokenId` is revealed | ||||||
|
|
||||||
| ```solidity | ||||||
| event TokenRevealed(uint256 tokenId); | ||||||
| ``` | ||||||
|
|
||||||
| ### **Interface functions** | ||||||
NarcisCRO marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||
|
|
||||||
| The functions detailed below MUST be implemented. | ||||||
|
|
||||||
| #### `ownerOf` function | ||||||
NarcisCRO marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||
|
|
||||||
| Returns the owner of the NFT specified by the `tokenId`. Will read from the `assetBoundContract` the owner and return it. | ||||||
|
|
||||||
| ```solidity | ||||||
| function ownerOf(uint256 tokenId) external view returns (address); | ||||||
| ``` | ||||||
|
|
||||||
| #### `tokenExists` function | ||||||
|
||||||
| #### `tokenExists` function | |
| #### `tokenExists` |
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a very strict requirement. So the zero address is never allowed to own tokens? Would it make more sense to define this more vaguely in case something comes along in the future where the zero address is useful for some reason?
NarcisCRO marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
NarcisCRO marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
NarcisCRO marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It might make sense to define this in a separate interface. This approach has the benefit of being more compatible with ERC-165's supportsInterface introspection.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please update the file name too!