ERC-3475: Abstract Storage Bonds
ERC-3475 is the foundational standard for on-chain bond instruments: multi-class (different bond series), multi-nonce (different issuance batches per class), with arbitrary metadata per (class, nonce) pair. Each bond instance encodes redemption terms, principal, interest, and arbitrary issuer metadata. Used as the backing for tokenised debt products, structured notes, and the credit half of the RWA stack.
The two-dimensional indexing — (classId, nonceId) — lets a single contract issue multiple bond series, each with multiple maturity batches, without deploying a new contract per issuance.
Required Interface (abridged)
interface IERC3475 {
struct Values {
uint256 uintValue;
string stringValue;
address addressValue;
bool boolValue;
}
struct Metadata {
string title;
string _type; // "uint256" | "string" | "address" | "bool"
string description;
}
struct Transaction {
uint256 classId;
uint256 nonceId;
uint256 amount;
}
event Issue(address indexed to, address indexed operator, Transaction[] transactions);
event Redeem(address indexed from, address indexed operator, Transaction[] transactions);
event Transfer(address indexed operator, address indexed from, address indexed to, Transaction[] transactions);
function issue(address to, Transaction[] calldata transactions) external;
function redeem(address from, Transaction[] calldata transactions) external;
function transferFrom(address from, address to, Transaction[] calldata transactions) external;
function balanceOf(address account, uint256 classId, uint256 nonceId) external view returns (uint256);
function totalSupply(uint256 classId, uint256 nonceId) external view returns (uint256);
function classMetadata(uint256 metadataId) external view returns (Metadata memory);
function nonceMetadata(uint256 classId, uint256 metadataId) external view returns (Metadata memory);
function classValues(uint256 classId, uint256 metadataId) external view returns (Values memory);
function nonceValues(uint256 classId, uint256 nonceId, uint256 metadataId) external view returns (Values memory);
}The metadata is descriptive (issued in classMetadata/nonceMetadata) and the values are the actual data per class / nonce. Off-chain tools use metadata to render bonds with the issuer's chosen field names ("Coupon Rate", "Maturity Date", "Issuer Country", etc.).
Neo Equivalent: Neo C# Port
Neo doesn't have a native NEP for multi-class bonds; the port is a straightforward storage-prefix design. Each (classId, nonceId) is a namespaced storage prefix; balances, supply, and value rows live under sub-prefixes.
| ERC-3475 Component | Neo Equivalent | Notes |
|---|---|---|
Transaction[] batch ops (issue/redeem/transfer) | Same shape, but with NEP-style witness checks at the entry point | Witness covers the operator |
balanceOf(account, classId, nonceId) | BalanceOf(account, classId, nonceId) view | Direct port |
classMetadata / nonceMetadata | Neo C# Map<int, Metadata> per class / per (class, nonce) | Descriptive metadata stored once |
classValues / nonceValues | Map<int, object> storing the actual bond data | Sealed at issuance for nonceValues; mutable by issuer for classValues |
| Approval / operator path | Witness-scope-based authorization (sender or approved operator) | Native Neo affordance |
Issue / Redeem / Transfer events | Named NEP-style notifications |
Composition
- ERC-7092 — financial bonds (broader, simpler shape). Mirror together: ERC-3475 for the storage primitive, ERC-7092 for the business-facing surface.
- ERC-3643 — T-REX regulated token. Bonds for regulated investors gate
Transferon T-REX-style identity + compliance checks. - ERC-7540 + ERC-7944 — async vault. Bond redemption may use the async-vault request/cancel pattern when liquidity is delayed.
Migration Notes
For Solidity bond protocols porting to Neo, the abstract two-dimensional indexing maps cleanly to Neo's storage prefixes; the metadata system is verbose but mostly inert (issued at deploy/config time and rarely mutated). The interesting work is in the issuer / compliance integration which is application-specific.
