Replies: 10 comments 19 replies
-
Sounds like an interesting concept. Can you elaborate a bit on the specifics? How would the “child ordinals” work? |
Beta Was this translation helpful? Give feedback.
-
would be cool to understand the mechanics on how the child ordinal points to the specific NFT in the parent ordinal. |
Beta Was this translation helpful? Give feedback.
-
I like this. I would add that it might make sense for:
This way, you can have a hash list where the JPEG / SVG of each child ordinal has embedded content (ie a base64 encoded hash that refers to the ordinal hash of its parent). This would also allow any website to traverse backwards through all ordinals in a collection-- starting with the final json file. |
Beta Was this translation helpful? Give feedback.
-
I'm a bit of a newb with the mime types - could you describe in more detail the format and file extension of the child inscriptions? I.e. how do I prepare/format the child inscription file to:
Really interesting concepts, def want to get a handle on them. Thanks!! |
Beta Was this translation helpful? Give feedback.
-
For the Ordinals Protocol to be better adopted, we need to agree on some standards for a Collection. We talk about some of it in this Discussion, and also in #783. Currently there are three types of collections being created on Ordinals:
An agreed upon Standard that supports these Collections will help creators and collectors. |
Beta Was this translation helpful? Give feedback.
-
Nice but you need to convince the Ord team to include this and notify all current projects working on Ordinals Wallets to support this. |
Beta Was this translation helpful? Give feedback.
-
Hey guys great discussion that is going on here. I was playing around with the idea of creating what are essentially sprite sheets for jpeg related collections. Right now the conversation here seems to only really cover generative art that essentially gets made each time the page loads. This doesn't really cover art that has already been made into a jpeg or png file for example. But this only really works for small collections not really for 10k collections. I have already made the art for a 10k collection and used an image processor to make the parent sprite sheet image. Even when reducing the size of each image to 100x100 you are still left with a relatively large image. For example the parent image created ended up being 210mb. This would obviously not fit in 1 block and would also cost over $200k to inscribe. Im not sure what the solution here is for large 10k collections except to mint each one separately and then have one last json file that has all the inscription numbers address in the collection. Would like to hear peoples thought on this. If anyone is interest in our project you can take a look here https://www.sweetsnackclub.com Cheers :) |
Beta Was this translation helpful? Give feedback.
-
Great conversation here! I do like both perspectives shared, first Ordinals as a pure canvas, and the second, ERC like features that have a potential to unlock even more value to Ordinals and sequentially BTC. I'm happy there's a lot of big brains already working on these possibilities and do agree that adopting a standard may be a solution for easy frontend apps and adoption. I love the dynamics that new collections maybe be created based on these attribute. Exciting! |
Beta Was this translation helpful? Give feedback.
-
Is there any chance that you can inscribe every child like the example of the Inscription 20219??? It could be great to create a collection putting the like a generative Ordapp, inscribing every child individually as a part of one big collection |
Beta Was this translation helpful? Give feedback.
-
Background: Generative Inscriptions can be scalable on Bitcoin
Collections vs individual Ordinals
Currently, the Ordinals protocol only supports one single collection that includes every single Ordinal ever inscribed. There isn't a native concept of a collection of Ordinals that are a subset of all the Ordinals yet. Creating a Collection Ordinal will greatly improve scalability of Ordinals on Bitcoin, especially for generative collections. For folks familiar with Ethereum, the Collection Ordinal is like an ERC-721 contract for NFTs (I'll use the term NFT interchangeably) on Bitcoin.
Generative NFTs
Generative NFTs can create a rich set of NFTs at very small data sizes. These type of NFTs can be great for scalability of NFTs on Bitcoin. For example, OnChainMonkey launched 10k images with Ordinals using less than 20,000 bytes, so it cost only 2 bytes/image. This was done with a single Ordinal which I referred to as the Collection Ordinal above.
https://ordinals.com/inscription/fb162a46943e5d7d31d72ee2c8c850e66c1ca5d0d453068aa63883528285ed21i0
There are so many amazing generative artists who can create amazing work and very efficiently inscribe them on Bitcoin.
The next step of distributing (or airdropping) the work can be super efficient too. Let's say an artist creates a 1,000 piece generative art collection in a single (Collection) Ordinal. The next step is to distribute it to 1,000 bitcoin addreses. These can be done as a one-time operation to sequentially distribute the 1,000 child Ordinals to the new addresses. No addition image or art data is needed for the 1,000 child Ordinals, thus saving tons of storage space.
The order of the child ordinals determines their tokenID. The code for the generative art in the Collection Ordinal should respond to tokenID. For example, Ordinal 20219 has a tokenID field that can be used as follows to find the data/art for a given tokenID/child.
https://ordinals.com/content/fb162a46943e5d7d31d72ee2c8c850e66c1ca5d0d453068aa63883528285ed21i0?tokenID=3
This way, we have distributed a 1,000 generative NFT collection for a very small amount of cost. The bitcoin network would not even notice it. Many generative artists can distribute their work this way.
Proposed system to support generative NFT collections with ordinals:
Up to this point, ordinals have been inscribed individually. While this is a great step forward for Bitcoin and NFTs, it's somewhat inefficient when inscribing collections of one thousand or more Ordinals. To remedy this problem we suggest utilizing a hierarchical (two level) system of a parent (collection) ordinal and one or more child ordinals. To add clarity to the discussion we will refer to the pre-existing ordinal NFT system Individual Ordinals. The new system is called OrdinalCollection.
OrdinalCollection V1: Hierarchical Collection Individual Ordinals that share rendering code.
A parent ordinal is an ordinal made under the pre-existing scheme with text/html MIME type and embedded Javascript code. This javascript code looks at the query string parameters in the URL and renders different imagery (or SVG, or text) accordingly as part of the HTML page. An example parameter name is tokenID which could be a number between 1 and 10000 allowing for many different variations to be rendered based on the number using generative art implemented in Javascript.
A child ordinal represents a pointer to a parent ordinal along with a specific set of query parameters that drive the rendering. A typical query parameter included in a child ordinal could be tokenID. A child ordinal has text/uri-list MIME type and contains exactly one URL of the form:
https://ordinals.com/content/fb162a46943e5d7d31d72ee2c8c850e66c1ca5d0d453068aa63883528285ed21i0?tokenID=3
This URI refers to a parent ordinal to perform rendering using JS code shared among all child ordinals thus saving significant space and cost on the blockchain. The example above provides the tokenID parameter with value 3 to retrieve the generative art.
Security feature
Require child ordinal inscribers to be equal to the inscriber of the parent ordinal at the time of inscribing. Require parent ordinals to never be transferred (a transfer of the parent would make all future inscriptions invalid, thus locking the max supply). This allows for a secure permissioned system such that only the original author of a parent ordinal can inscribe children using it.
Strengths
Shares generative art rendering code across many children for significant storage savings. Fits into the pre-existing ord wallet framework without modification to the wallet code and only minor modification to the blockchain explorer to support rendering. Enables code sharing in the way most familiar to web developers using JS and query parameters.
Weaknesses
Still requires the overhead of one individual ordinal per child ordinal. For a 10000 size collection these costs may be substantial. No way to express a maximum collection size.
OrdinalCollection V2: Block Allocated Hierarchical Collection Ordinals
To improve the efficiency of inscribing large collections we may devise an ordinal block allocation system. This can be done in the context of the child ordinals by using more than one entry in the text/uri-list array. These represent a block of sats instead of a single sat as the Individual Ordinal scheme allows.
The first entry in the URI list can be the same as in the V1 case with the restriction that the URI must match the regular expression
=[0-9]+$
In other words, the URI must end with an = followed by an ASCII decimal number. This restriction allows for the possibility to increment the final query parameter sequentially.
The second entry in the URI list can be the maximum size of the collection. A typical value would be 10000.
The third and successive entries in the list can be taproot bitcoin addresses to whom the corresponding NFT is airdropped.
Consistency constraints
All child ordinals of a given parent ordinal must have the same maximum size value as the first child ordinal for the same parent ordinal. Any child ordinals whose maximum size value differs will be ignored and considered invalid.
Each starting URI must end with the number which is next in sequence contiguously. In other words, if the first child ordinal looks like:
https://ordinals.com/content/fb162a46943e5d7d31d72ee2c8c850e66c1ca5d0d453068aa63883528285ed21i0?tokenID=1
10000
bc1ql84f2292nvjzfq9r46lw2vxpcu8xdmdy7tec5a
bc1qc5vqa5mmyw5a3acanjqv44uh97nzx2lnkq7f2n
bc1q0ut7zke9ahdvrpqe8vhfh07gcazmcdk7k3dep4
Then the next child ordinal must begin with the two lines
https://ordinals.com/content/fb162a46943e5d7d31d72ee2c8c850e66c1ca5d0d453068aa63883528285ed21i0?tokenID=4
10000
All child ordinals must not list more addresses than implied by the collection size parameter that is specified in the first child ordinal and all successive airdrops. If more addresses are listed, then the child ordinal is invalid and ignored.
Strengths
Allows for inscribing a block of child ordinals and airdropping them for less cost than doing them individually. One transaction can create multiple child ordinals.
OrdinalCollection V3: Efficient Block Allocated Hierarchical Collection Ordinals
In the OrdinalCollection V2 protocol, we described a way to allocate satoshis sequentially in blocks using child ordinals with a given parent ordinal and starting offset and maximum collection size. We listed each receiver address in the text/uri-list list after the first two lines for clarity. In order to ensure the proper owners own each individual satoshi, it is necessary to also generate UTXO output transactions of value 1 satoshi in order. These UTXO output transactions will appear in the same order as the receiver addresses in the text/uri-list.
Therefore, we can drastically improve the efficiency of the V2 protocol by eliminating the addresses listed in the text/uri-list for children ordinals. We can keep the first two lines as before, but there is never any need to use a third line in children ordinals. Instead we can have the understanding that any 1 satoshi valued UTXO output in the transaction creates a child NFT and is considered to have received the corresponding sequential NFT from the parent ordinal generative collection.
References:
https://github.com/casey/ord/issues/1082 (Recursion)
https://github.com/casey/ord/issues/1545 (Generative Art Libraries)
https://github.com/casey/ord/issues/876 (Bundles)
https://github.com/casey/ord/issues/783 (Collections and Provenance)
Beta Was this translation helpful? Give feedback.
All reactions