COZ has unveiled PROPS, a new initiative designed to enhance the Neo N3 contract developer experience and help bootstrap applications in the ecosystem. The initial Props launch features four utility contracts: Collection, Dice, Generator, and Puppet, with plans to add new on-chain tools for developers over time.
PROPS is the first major step towards on-chain developer infrastructure for N3. Over time and with community assistance, COZ envisions the evolution of a rich smart contract package ecosystem for Neo N3, similar to OpenZeppelin on Ethereum. Whenever common functionality for contracts is found, it can be implemented as a new package where it can be easily imported into new projects.
This brings numerous benefits. The implementation of any specific utility—like a tool for managing access control lists—need only be done once. Developers that need such functionality for their own contract methods with elevated permissions would no longer need to spend time reinventing the wheel, or risk introducing bugs and GAS inefficiencies when building their own applications.
On March 23, all Neo users voting for consensus nodes on N3 received an airdrop of one Puppet token, a general purpose NFT with attributes inspired by the SRD20 system, used in Dungeons and Dragons and many other games. An additional puppet was airdropped to COZ, AxLabs, Neo SPCC, and Neo News Today voters, with a total number of 4,861 puppets dropped.
Puppets were designed with the metaverse in mind, but with no initial use case. In part, the project was inspired by Loot, an Ethereum NFT project which similarly distributed NFTs with randomly generated fantasy equipment. Other projects sprung up over the following months to build on the new foundation, including simple Inventory screens, Character minters, and even games.
COZ harbors similar hopes for Puppets. Though the team is experimenting with its own plans for their usage, the launch coincides with the Polaris Launchpad, where teams could use the Puppet NFTs as a base to build their own projects and use cases. Puppet attributes come in varying types and rarities; COZ imposes no restriction on what an attribute represents. This means each project that makes use of Puppet NFTs can interpret the traits for itself.
The same is true for the Puppet image, rendered deterministically by COZ using the on-chain data generated at mint. The Puppet images by COZ are designed to showcase the attributes, but there is nothing that prevents another project, like a game, from interpreting these stats to generate completely original characters for each Puppet.
Puppets are minted in sets called epochs, and of the first set “Puppeteer”, 10,000 will be minted. 2,139 are reserved for community promotional activities and the remaining 3,000 have been set aside for sale to the public in the future.
The airdrop followed a day after an update to Dora which added NFT support, providing a way for users to view their new tokens.
Additionally, MercurialApps has provided a Puppets explorer which can be found here. The collection may also be browsed and traded on GhostMarket.
Under the surface, Puppets are a demonstration of how the PROPS utility contracts can be used to improve contract development. Developers can use PROPS as a framework to build their own projects, or explore how the Puppets contract makes use of the various utilities. For example, how attributes for the Puppets are randomly selected with varied probabilities at mint time using the Dice prop.
Any other contract that requires randomization can call the Dice contract in a similar way, removing the need for each to include its own logic that interprets an N3 block’s random number. Instead, they can just call the Dice contract to get a random number in a range, or the result of a dX-formatted dice roll (e.g. d6, d20).
Likewise, Puppets also make use of the Collection and Generator props, providing another reference for developers. Collection is used to store immutable data arrays with metadata. In the process, it can be used to reduce storage fee costs which could otherwise be prohibitive for small developer initiatives.
As the name implies, the Generator is used to generate objects and trigger probabilistic events. In Puppets, a Generator instance is used to procedurally create the traits for each NFT. Within this process, the Generator dynamically calls both the Collection and Dice props. The former call fetches and samples from a collection containing valid initial roll values, while the latter is called to randomize the hit dice value.
Developers could reuse the Puppet trait generator or devise their own use cases with this Prop. For example, generators can be created that emulate the opening of a loot box or booster pack, or to distribute resources across land and control the fog of war in blockchain-based games. Likewise, they can be used for fixed-probability events, like drawing from a deck of cards.
As smart contracts, the growing range of functionality found in PROPS can be accessed by any on-chain application. COZ has also created a TypeScript SDK for PROPS, making it easy for developers to interface with the contracts off-chain. In the future, the team is exploring new ways to handle contract package imports to maximize accessibility and ease-of-use.