diff --git a/EIPS/eip-2135.md b/EIPS/eip-2135.md new file mode 100644 index 00000000..547a3ead --- /dev/null +++ b/EIPS/eip-2135.md @@ -0,0 +1,79 @@ +--- +eip: 2135 +title: Consumable Interface +author: Zainan Victor Zhou (@xinbenlv) +discussions-to: https://github.com/ethereum/EIPs/issues/2135 +status: Draft +type: Standards Track +category: ERC +created: 2019-06-23 +--- + +## Simple Summary +An interface marking certain digital assets being consumable. + +## Abstract +The interface identifies functions and events needed for creating a contract to be able to mark a digital asset as "consumable", and react to the request of "consumption". + +## Motivation +Being a digital assets sometimes means a consumable power. One most common seen examples would be a concert ticket. It will be "consumed" at the moment the ticket-holder uses the ticket to get access to enter a concert. + +By having a standard ERC interface, the Ethereum ecosystem can interoperate to provide services, clients, UI, and inter-contract functionalities on top of this very general use-case. + +## Specification +The standard will mainly contain the following interface. + +### The required interface + +```solidity +pragma solidity ^0.5.8; + +contract EIP2135 { + // The main consume function + function consume(uint256 assetId) public returns(bool success); + + // The interface to check whether an asset is consumable. + function isConsumable(uint256 assetId) public view returns (bool consumable); + + // The interface to check whether an asset is consumable. + event OnConsumption(uint256 indexed assetId); +} +``` + +## Rationale + +The function `consume` performs the consume action. Being an interface standard, +this EIP does not impose any assumption of + + - who has the power to perform such activity. + - under what condition such consumption can occur. + +It does, however, assume the asset can be identified in a `uint256` assetId as in th parameter. A design convention and compatibility consideration is put in place to follow the ERC-721 + +The event notifies subscribers whoever are interested to learn an asset is being consumed. The boolean function of `isConsumable` can be used to check whether an asset is still consumable. + +To keep it simple, this standard *intentionally* contains no functions or events related to creation of a consumable asset. This is because the creation of a consumable asset will need to make assumption of the nature of an actual use-case. If we see some common use-case of creation, we can have another follow up standard. + +We also left out metadata associated to the consumables from the standard. If necessary, related metadata can be created with a separate metadata extension interface like [`ERC721Metadata`](https://eips.ethereum.org/EIPS/eip-721) + +## Backwards Compatibility + +This interface is designed to be compatible with ERC-721. + +## Implementation + +A reference implementation accompany with tests of **ERC-721 based ticket** contract is built and you can found it [here](https://github.com/xinbenlv/eip-2135/blob/master/impl/contracts/Ticket721.sol). + +See [Github/xinbenlv/eip-2135/impl](https://github.com/xinbenlv/eip-2135/tree/master/impl) + +## Test Cases + +See [Github/xinbenlv/eip-2135/impl/test](https://github.com/xinbenlv/eip-2135/tree/master/impl/test) + +## Reference + +### Standards +- [ERC-721](https://eips.ethereum.org/EIPS/eip-721) + +## Copyright +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).