Introducing PROPS

Tyler
Proof of Working
7 min readMar 24, 2022

--

In an effort to enhance the developer experience of the Neo N3 platform, we at COZ are very excited to reveal to you our brand new project: PROPS. This project is the first of many which will significantly improve the ease of use and scalability of both smart contracts and off-chain integrations within our ecosystem.

In many ways PROPS is an experiment. Some may consider it a hybrid of projects like Loot, with concepts of the Smart Economy vision baked deep into its core, and COZ’s own brand of developer-first tooling sprinkled on top.

PROPS has three primary goals:

  • To produce a smart contract package ecosystem which provides developers with the tools they need to deliver complex on-chain routines to their users out-of-the-box.
  • To provide a straight-forward framework/template for new projects to clone and build upon.
  • To deliver real-world contracts with off-chain integrations for developer reference.

The PROPS project is ambiguous in scope outside of those goals.

Upon launch, PROPS features four smart contracts: puppet, dice, collection, and generator. These contracts can be used in combination, or along with your own smart contracts to enable complex, transparent functionalities.

The following article will provide a brief introduction to these initial contracts that make up PROPS.

Puppets

Contract hash: 0x76a8f8a7a901b29a33013b469949f4b08db15756

The first piece of PROPS that regular users will likely become aware of is Puppets. You can think of Puppets as general purpose utility NFTs.

Every Puppet is unique, with an image entirely derived from its properties which are generated on-chain at time of mint.

While Puppet NFTs are designed with metaverse applications in-mind, we make no assertions which limit their utility in other product spaces. The contracts and their tokens are permissionless. Use them as you see fit.

In addition to the value of having a general use utility NFT in the ecosystem for developers to leverage, the Puppet contract provides multiple great examples of how the other PROPS contracts can be leveraged. Further, it is an excellent reference for new developers who are interested in NFT development.

Distribution

A total of 10,000 Puppets will be minted as part of the first “epoch,” known as Puppeteer. You may think of the Puppeteer epoch as similar to a base set in Pokemon or Magic The Gathering cards. Future epochs then may be compared to expansion sets, with different properties and attributes.

COZ has airdropped one Puppet NFT to every voting wallet on Neo N3, whether they are voting via NEO or bNEO. An additional Puppet was also airdropped to wallets voting for COZ, AxLabs, Neo SPCC, or Neo News Today. The total number of Puppets airdropped comes to 4,861.

Of the remaining Puppets, 2,139 will be reserved for community promotional initiatives and developers who wish to build applications using the NFTs. 3,000 Puppets will be made available to the general public for purchase at a future date. In the meantime, Puppets are available for trading on GhostMarket.

Attributes

Each Puppet is 100% randomly generated on-chain at the time of creation and comes with a range of attributes that vary in rarity. The attribute structure was heavily inspired by the SRD20 system due to its extensive usage and application across many roleplaying, MMO, and other game formats. These include:

  • Strength
  • Constitution
  • Dexterity
  • Intelligence
  • Wisdom
  • Charisma
  • Armor Class
  • Hit Die
  • Color
  • Personality
  • Archetype
  • Trade *
  • Title *
  • Origin *
  • Element *
  • Domain *
  • Prestige *

(Traits denoted with a * are rarer in appearance and do not appear on every Puppet)

While some projects claim to have NFTs that are interoperable between dApps, the reality is that most are designed with a specific application in mind. This leaves limited room for interpretation outside of its initial intended use.

Puppets have been designed so that developers are free to interpret and utilize their properties in whatever way they see fit. Some may choose to only use a subset of attributes, while others may use all of them.

For example, perhaps in one dApp your Puppet is a warrior, using all of its physical and mental attributes. Maybe its Color trait grants you access to certain liquidity pools on a DeFi protocol. Or, you might find that your Origin allows you to mint certain types of land within a metaverse.

The idea here is that a general use NFT should be truly portable across a wide variety of scenarios. The artwork associated with a Puppet serves only as a reference to its unique properties, which are stored as meta-data on the blockchain. That means Puppets can be used always and forever, and are not at risk of any one project closing down.

We hope to see applications integrating Puppets in varying ways to bring maximum utility to their owners and diversity to the ecosystem. By airdropping Puppets to every voting Neo wallet, they are now the most widely distributed NFT in the Neo ecosystem. This provides a strong incentive for developers to integrate Puppets into their dApps to capture new users.

For those who would like to explore minted Puppets, their attributes, and their rarities, community developer Mercurial Apps has built a handy explorer here.

Collection

Contract hash: 0xf05651bc505fd5c7d36593f6e8409932342f9085

The Collection prop is a really straightforward contract that allows developers to store arrays of immutable data for use in their projects, along with metadata that informs other developers of the content. There are three primary value propositions for this contract:

  1. This functionality is particularly useful in the scenario where storage fees price-out small developer initiatives where they would be responsible for pushing thousands of dollars worth of constants into their contract.
  2. In some cases, the dataset requires domain specific knowledge to produce, but may not require that knowledge to use.
  3. This contract is an excellent first contract for new developers to work with. It is simple in functionality, but introduces many important concepts in smart contract development.

As part of the initial project deployment, we have introduced an example of (1) by loading a number of collections containing colors, titles, personalities, and other interesting properties. These are used by the Generator contract (described below) to create the Puppet NFTs.

We have also implemented an example of (2) by storing the values of a discrete inverse cumulative density function which represents the result of a 4d6 (dropping the lowest) dice roll; a common endeavor when creating new character attributes in the SRD20 system.

When coupled with the Dice contract (also described below), we can randomly sample from this distribution in a decentralized manner, completely on-chain. This feature is used when a Puppet is minted to calculate the attributes. An analysis of the distribution across all attributes for every Puppet will align with the published distribution to a high degree of confidence.

Dice

Contract hash: 0x4380f2c1de98bb267d3ea821897ec571a04fe3e0

The Dice prop is a simple contract that wraps the RNG features of Neo N3. We extend the functionality by introducing a number of commonly used methods in numerical compute, such as randbetween(), to enhance interfacing. This contract is leveraged by Collection, Generator, and Puppet to produce branching code where the test invoke may have a different code path than the published invocation. The primary role of this prop is to allow developers to introduce provably random, decentralized events in their applications.

Generator

Contract hash: 0x0e312c70ce6ed18d5702c6c5794c493d9ef46dc9

The Generator prop provides developers with the ability to recursively generate procedural objects and trigger probabilistic events with a high degree of tunability. For our initial release, we’ve included a generator which is used by the Puppet NFT. On mint, the generator is called to procedurally generate the traits found on each Puppet. Each trait has its own levels of values with different probabilities. Some can only appear once for the entire life of the generator.

Generators have a few really interesting features that we’ll explore in future articles:

  1. Generators support instancing so developers can create them and others can use their features without impacting each other’s probability states.
  2. Generators are not deterministic. Test invocations take a different code path than the published invocation. System fees are deterministic.
  3. Generators can securely call themselves and other contracts via contract-call. This feature introduces the opportunity for probabilistic events like chests or item drops.
  4. Generators can include events with fixed occurrences. This allows the creation of generators which replicate probabilistic behaviors in a “pick” manner. A good example of this behavior is a deck of cards.

All of these features are exposed through our PROPS SDK. Developers are welcome to integrate them into their contracts via contract call, or create and interface with them via our TypeScript SDK.

What’s next?

We encourage developers to visit the PROPS documentation at props.coz.io and start envisioning ways to make use of the various smart contracts and Puppet NFTs. COZ will continue to improve this documentation and features over the coming weeks.

We would also point to Neo’s Polaris Launchpad as an opportunity for developers to win a share of $500,000 in prizes by building projects using props and Puppets. The NFT and Metaverse track is a particularly interesting fit for Puppets. Further, the final phase of the Polaris Launchpad features community-driven quadratic funding. By providing use cases for Puppets NFTs, its many holders may be incentivized to support your project.

Most importantly, have fun! COZ will continue to develop new PROPS contracts enabling more functions, along with new tools to make the development lifecycle even easier. We also plan to provide future incentives for developers who wish to build projects that integrate PROPS and Puppet NFTs.

In the meantime, you can also head over to the PROPS GitHub and Discord server to learn more about the project and get involved.

--

--