TBM Attribute Generation
NFT attribution generation methodology. Endless pawssibilities.
Last updated
Was this helpful?
NFT attribution generation methodology. Endless pawssibilities.
Last updated
Was this helpful?
Thank you for all your love and support thus far! Our team is absolutely thrilled as we enter our final hours of preparation to ensure all 9,800 bears are lookin' and smellin' good for public adoption! (200 bears are reserved for the team and drops)
We wanted to take this opportunity to also assure you that our minting process is designed to be fair and equal. In adhering to the values of fairness, the reveal of the bears will only be done when all the bears are sold out. Thus upon minting of a bear, you will see a placeholder image.
The section below outlines how we ensure fairness and complete randomisation. So don't worry about us saving the good stuff for ourselves, or swapping out your rare mint with a common one! It's not like us to do that (: Of course, you don't have to simply trust our word. Trust our work instead ๐ปโค๏ธ
Before the sale, we randomly generate the trait combinations of all 10,000 NFTs, and organise them into a CSV-formatted trait table. The SHA-256 hash of this CSV file is used to initialise . This hash on the contract cannot be changed by anyone, not even the contract owner, EVER. More technical details in the later sections.
Upon selling out, the minted bears will then be revealed. Right after the reveal, weโll publish the CSV file on IPFS. Anyone can then download the file and verify that the revealed CSV file matches with the hash previously published on the contract.
As the hash was already locked in prior, that would mean any changes to the file would result in a different hash. Yes, we're good but changing traits without changing the hash is humanly impossible. We know you're smart enough to catch any irregularities so go ahead and give it a check. ๐
Everyone has an equal chance at minting any type of bear!
The attributes and image generation outline:
Generate Attributes and Render Images
Compute Provenance Hash
Create NFT Contract
Commit to RN Retriever Address on Ethereum ---- Sale Completes ---
Retrieve Verifiable Random Number via Chainlink
Assign Token ID to Bear ID
10,000 NFT attribute sets are generated randomly. An algorithm is used to randomly pick trait values within constraints that make sense, layering images in the right order. Examples of constraints include making sure Polar Bears are not grouped with Zombie Eyes, as that would make a very strange-looking Polar Bear ๐พ
Based on the traits generated in the previous step, the image for each Bear is rendered.
This Attributes CSV file is then hashed with the same algorithm, the resulting file hash is called the Provenance Hash.
The Bear Market Token NFT contract is deployed with a Provenance Hash as an initialisation parameter along with other information. There is no transition available in the contract to modify this field and is therefore immutable.
The address used for retrieving a verifiable random number (next step) is determined before the sale. This ensures that the team cannot create multiple random numbers and cherry-pick a favourable one.
RN Retriever Address Commitment Transaction Hash (Zilliqa):
645818a6077d418964721c231bce07e75dc3fd61e0e811cd92763165184ed5bb
RN Retrieve Address (Ethereum):
0xff86325df809d1b09aec381a3c3b9c3fb25305f0
The first number picked from the RN Retriever Address committed above will be used, so retrieving multiple numbers and cherry-picking is not possible. The transaction hash will be posted here once this step is executed.
The random number will then be used to offset the Token ID, which is then assigned to the Bear ID (see above CSV) (overflow will be rotated back to the front). The reserved supply used for marketing and giveaway purposes will not be shifted.
Example: If you have a Token ID 1337, and random number 5123432 is picked, the NFT you receive will have Bear ID 9169.
Math:
1337 + (5123432 % 9800) = 9169
By using a verifiably random number โ retrieved after the sale โ to offset Token ID to Bear ID assignment, it is impossible for anyone, even members of the team, to unfairly obtain a more rare NFT from the collection.
The NFT attributes are set in stone, and cannot be modified. Since any change to the generated attributes will result in a change in the Attributes CSV, which translates to a file hash that is different from the Provenance Hash.
You can verify the Attributes CSV has not been altered by running the following command:
Our Bear Crafters found that bears with a plain shirt actually look way better without a shirt! So we decided to let the bears remove their shirts and roam shirt-free. See how carefree they are for yourself:
You guessed it! This means some bear pawtraits now have different hashes, and the CSV File would ultimately have a hash different from the Provenance Hash. Comparing the legacy CSV File and the updated CSV File, you will notice that all attributes are left unchanged. the only difference lies in the hash of the image file.
This actually proves that the bear attributes are tamper-proof, as changing some image renderings will result in a different file hash. ๐ปโค๏ธ
Sale has concluded and it is time for the grand reveal! The random number retrieval contract has been deployed and a verifiable random number was retrieved using this contract.
RN Retriever Contract (Ethereum):
0xffaa4cc8d630bfb483405e5ee550b25d1af604b7
RN Retrieval Transaction Hash (Ethereum):
0x4ba7512817f4c08ec9c029190086037485d659e3fd3ea53c5ddad36de0b7db94
Retrieved Random Number:
64147276475990748506760899694973421659372718799117962166213933420448497348718
Random Offset (RN modulo 9800):
64147276475990748506760899694973421659372718799117962166213933420448497348718 % 9800
= 1718
This means that if your Token ID is 1337, you will be getting Bear ID 3055.
Math:
1337 + 1718 = 3055
The full list of Token ID to Bear ID assignment is available in the Assignment CSV file below.
Click on the file names below to download the CSV file from IPFS.
File
Hash
e635290790ec431900b7bce251c6eb5ee53805e67aa4b1c39018ace0a12c2a9e
0712c56cfa78b23f50e276d81075f88f6fb812a6c4d0717bb6502d74055bdc37
411755d1c5dad0e6dd0d6f2a23687b3ddff21054f3e82cce7631dda9273452bd
A hash of the rendered image file is then added to an Attributes CSV with the attributes. Each row of the Attributes CSV represents a single Bear token.
The NFT contract has been deployed to address:
The address is recorded as a sent to the NFT contract from a Zilswap deployer address. It is marked as failed because it calls a non-existent function. The purpose of this transaction is simply to record the address as part of the transaction inputs, and therefore the failure or success of the transaction itself does not actually matter.
After the sale is concluded, a verifiably random number is retrieved from a blockchain. Since this is not yet possible on the Zilliqa blockchain, on Ethereum will be used to retrieve the random number.
You will see the output 411755d1c5dad0e6dd0d6f2a23687b3ddff21054f3e82cce7631dda9273452bd
, which is the Provenance Hash. The current Provenance Hash is publicised as a contract parameter of .