ERC-3525: Semi-Fungible Token
ERC-3525 introduces tokens that have both an NFT-like unique tokenId and an ERC-20-like value quantity within each unit. Use cases: bonds (each tokenId is an issuance with units), structured products, ticketing (each tokenId is an event seat range), in-game stackable items.
Required Interface (Highlights)
function balanceOf(uint256 tokenId) external view returns (uint256);
function ownerOf(uint256 tokenId) external view returns (address);
function slotOf(uint256 tokenId) external view returns (uint256); // category bucket
function transferFrom(uint256 fromTokenId, uint256 toTokenId, uint256 value) external;
function transferFrom(uint256 fromTokenId, address to, uint256 value)
external returns (uint256 newTokenId);Neo Equivalent: Direct Port
No dedicated NEP, but the standard is straightforward to port. The Neo C# version below combines NEP-11 (token identity) with per-token value tracking — wallets that read NEP-11 still see the token list, while applications that care about value introspect via the SFT-specific methods.
Live on Neo TestNet
Both implementations deployed on Neo N3 TestNet.
| Implementation | TestNet Address | Contract Hash | Deploy Tx |
|---|---|---|---|
Solidity (neo-solc) | NdzbQnww1HMVDUgZtZzrfN5TvxFTBoBTW6 | 0xd0fd56dad510d54ca7877bab2c578d63b82a52c6 | 0x16953f75…22a2e |
Neo C# (nccs) | NVpt23PJU2ZbEHXmDkzEqCfoE9NQfEopNZ | 0xfcfde62a4764cbcd9b35615084e0075c4bddba6c | 0x9b8dc510…1cefba |
Verified: symbol, mint(slot=1, value=1000), balanceOfToken, slotOf, valueDecimals. Both implementations agree that token #1 has value 1000 in slot 1. docs/standards-mirror/deployments/erc-3525/.
