ERC-4883: Composable SVG NFT Ethereum Improvement Proposals AllCoreNetworkingInterfaceERCMetaInformational ⚠️ Draft Standards Track: ERC ERC-4883: Composable SVG NFT Compose an SVG NFT by concatenating the SVG with the rendered SVG of another NFT. Authors Andrew B Coathup (@abcoathup), Alex (@AlexPartyPanda), Damian Martinelli (@damianmarti), blockdev (@0xbok), Austin Griffith (@austintgriffith) Created 2022-03-08 Discussion Link https://ethereum-magicians.org/t/eip-4883-composable-svg-nft/8765 Requires EIP-165, EIP-721 Table of Contents Abstract Motivation Specification Rationale Ordering of concatenation Alternatives to concatenation Sizing Render function name Backwards Compatibility Security Considerations Copyright Abstract Compose an SVG (Scalable Vector Graphics) NFT by concatenating the SVG with the SVG of another NFT rendered as a string for a specific token ID. Motivation Onchain SVG NFTs allow for NFTs to be entirely onchain by returning artwork as SVG in a data URI of the tokenUri function. Composability allows onchain SVG NFTs to be crafted. e.g. adding glasses & hat NFTs to a profile pic NFT or a fish NFT to a fish tank NFT. Specification The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. /// @title EIP-4883 Non-Fungible Token Standard interface IERC4883 is IERC165 { function renderTokenById(uint256 id) external view returns (string memory); } renderTokenById must return the SVG body for the specified token id and must either be an empty string or valid SVG element(s). Rationale SVG elements can be string concatenated to compose an SVG. Ordering of concatenation SVG uses a “painters model” of rendering. Scalable Vector Graphics (SVG) 1.1 (Second Edition), section: 3.3 Rendering Order Elements in an SVG document fragment have an implicit drawing order, with the first elements in the SVG document fragment getting “painted” first. Subsequent elements are painted on top of previously painted elements. The ordering of the SVG concatenation determines the drawing order rather than any concept of a z-index. This EIP only specifies the rendering of the rendered SVG NFT and does not require any specific ordering when composing. This allows the SVG NFT to use a rendered SVG NFT as a foreground or a background as required. Alternatives to concatenation SVG specifies a link tag. Linking could allow for complex SVGs to be composed but would require creating a URI format and then getting ecosystem adoption. As string concatenation of SVG’s is already supported, the simpler approach of concatenation is used. Sizing This EIP doesn’t specify any requirements on the size of the rendered SVG. Any scaling based on sizing can be performed by the SVG NFT as required. Render function name The render function is named renderTokenById as this function name was first used by Loogies and allows existing deployed NFTs to be compatible with this EIP. Backwards Compatibility This EIP has no backwards compatibility concerns Security Considerations SVG uses a “painters model” of rendering. A rendered SVG body could be added and completely obscure the existing SVG NFT artwork. SVG is XML and can contain malicious content, and while it won’t impact the contract, it could impact the use of the SVG. Copyright Copyright and related rights waived via CC0. Citation Please cite this document as: Andrew B Coathup (@abcoathup), Alex (@AlexPartyPanda), Damian Martinelli (@damianmarti), blockdev (@0xbok), Austin Griffith (@austintgriffith), "ERC-4883: Composable SVG NFT [DRAFT]," Ethereum Improvement Proposals, no. 4883, March 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-4883. Ethereum Improvement Proposals Ethereum Improvement Proposals ethereum/EIPs Ethereum Improvement Proposals (EIPs) describe standards for the Ethereum platform, including core protocol specifications, client APIs, and contract standards.