npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@kreation.tech/nft-editions

v1.0.3

Published

NFT Editions Contracts

Downloads

1

Readme

░█▄█░▄▀▄▒█▀▒▄▀▄░░░▒░░░░█▄░█▒█▀░▀█▀░░▒██▀░█▀▄░█░▀█▀░█░▄▀▄░█▄░█░▄▀▀ ▒█▒█░▀▄▀░█▀░█▀█▒░░▀▀▒░░█▒▀█░█▀░▒█▒▒░░█▄▄▒█▄▀░█░▒█▒░█░▀▄▀░█▒▀█▒▄██


Solidity smart contracts implementing ERC721 with multiple editions. We will call it Editionable Non Fungible Token or EdNFT: one EdNFT can produce (mint) a fixed set of NFTs (its editions).

Once minted, the editions behave very much like any other NFT implementing the ERC-721 specifications: they can be transferred, auctioned and burnt as their specific owner decide.

Standards

The EdNFTs comply with the following EIP standards:

Properties

Instances of this contract are what we call EdNFT and. can be obtained by using the create operation on the MintableEditionsFactory contract, with a substantial saving in gas.

Each EdNFT produced has the following characteristics:

  • name (IMMUTABLE) can be considered the title for the editions produced, used by OpenSea as name of the collection
  • symbol (IMMUTABLE) is the symbol associated with the editions
  • description (IMMUTABLE) can be used to describe the editions to the public, can contain markdown
  • contentUrl is used to associate some off-chain content (the EdNFT owner can update, direct references to IPFS content are possible)
  • thumbnailUrl (OPTIONAL) is used to associate a static off-chain content when the main content is an animation (the EdNFT owner can update, direct references to IPFS content are possible)
  • contentHash (IMMUTABLE) sha256 of the associated off-chain content, ensures content uniqueness within the chain
  • size (IMMUTABLE) determines how many editions of this EdNFT can be minted: if set to 0 then uint64.max() editions can be minted (about 18.5 quintillions)
  • price determines how much has to be transferred to the contract in order to purchase an edition: if set to 0 then editions cannot be purchased
  • royalties (IMMUTABLE) perpetual royalties to be paid to the EdNFT owner upon any reselling, in basis-points format (eq. 250 corresponding to 2.5%)
  • shares (IMMUTABLE) pairs of (shareholder, percentage) describing how the value collected by the sales of this contract will be splitted between the shareholders and the owner (percentages expressed in basis-points)
  • allowances pairs of (address, amount) describing who is entitle to mint and for how many editions: giving a non-zero allowance to the ZeroAddress permits to anyone minting as many editions as available

Almost all the properties are immutable, with the exclusion of the contentUrl, thumbnailUrl (allowing the EdNFT owner to move the off-chain content, if necessary), price (enbling or disabling sales) and allowances (providing others other than the artist to mint editions).

The EdNFT guarantees minting is automatically disabled when the last available edition is produced: an EdNFT can never generate more NFTs than size, or 18,446,744,073,709,551,614 if the MNFT was created as unbound (size = 0).

Capabilities

Roles

The following are the roles available on the contract:

  • the owner, also referenced as the artist, is the creator of the EdNFT, unless ownership is transferrred
  • the minters are those allowed for minting, in case the zero-address is added among the allowed minters anyone can be considered a minter
  • the buyer is anyone who mints a token through the purchase() operation
  • the shareholders are those receving shares of the contract balance upon withdrawal and it always include the owner/artist

At any time, any shareholder can request to withdraw() its part of the shares: the action can be repeated for partial payouts. At any time anyone can shake() EdNFT, releasing its balance toward the shareholders.

Owner

The contract is quite flexible and allows the editions owner to:

  • mint an NFT for himself
  • mint and transfer NFTs to a list of addresses (one NFT per address), allowing for partial giveaways (owner pays minting gas)
  • permit limited minting (from 1 up to 65,535 NFTs) to a list of third parties, allowing for rewarding (owner pays gas for permission granting, third party pays minting gas)
  • permit minting to anyone, allowing for unlimited public giveaways (third party pays minting gas)
  • establish a sale price, allowing for public sales (third party pays minting gas plus sale price)
  • transfer ownership to someone else along with the royalties on previous and future editions and any sale shares of the previous owner

Addresses

Contract addresses on each network, referenced by chainId, are published in (this repository)[https://raw.githubusercontent.com/agileware-org/nft-editions/main/addresses.json].

Example

Gas required: 652323

Description

A static image EdNFT (stored on IPFS) able to produce 100 editions, each one with 2.5% perpetual royalties on secondary sales.

Of any revenues this contract might collect, 15% of it will be given to the curator address, the remainder 85% will go to the EdNFT owner.

Properties

| field | value | |-------------:|:---------------------------------------------------------------------| | name | Roberto Lo Giacco | | symbol | RLG | | description | **Me**, _myself_ and I. A gentle reminder to take care of our inner child, avoiding to take ourselves too seriously, no matter the circumstances: we are just _'a blade of grass'_. See [my website](http://www.agileware.org) | | contentUrl | ipfs://QmYMj2yraaBch5AoBTEjvLFdoT3ULKs4i4Ev7vte72627d | | contentHash | 0x94DB57416B770A06B3B2123531E68D67E9D96872F453FA77BC413E9E53FC1BFC | | thumbnailUrl | empty | | size | 100 | | price | 0 | | royalties | 250 | | shares | [["0x8c4e43e88ba5cb9a15a9F7F74a4d58aD51024389",1500]] | | allowances | [["0x8c4e43e88ba5cb9a15a9F7F74a4d58aD51024389",15]] |

["Roberto Lo Giacco","RLG","**Me**, _myself_ and I. A gentle reminder to take care of our inner child, avoiding to take ourselves too seriously, no matter the circumstances: we are just _'a blade of grass'_. See [my website](http://www.agileware.org)","ipfs://QmYMj2yraaBch5AoBTEjvLFdoT3ULKs4i4Ev7vte72627d","0x94DB57416B770A06B3B2123531E68D67E9D96872F453FA77BC413E9E53FC1BFC"],"100","0","250",[["0x8c4e43e88ba5cb9a15a9F7F74a4d58aD51024389",1500]],[["0x8c4e43e88ba5cb9a15a9F7F74a4d58aD51024389",15]]

Address

Rinkeby: 0x3b09e54450C7dA5B7f0553d47a2Ec3Ec56Aa1056 OpenSea collection

Deploy

npm run deploy -- --network rinkeby --export networks/rinkeby.json
npm run verify -- --network rinkeby

or

npx hardhat deploy --network rinkeby --export networks/rinkeby.json
npx hardhat run scripts/verify.ts --network rinkeby