🐨
TBM Attribute Generation
NFT attribution generation methodology. Endless pawssibilities.
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 The Bear Market Token contract. 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:
- 1.Generate Attributes and Render Images
- 2.Compute Provenance Hash
- 3.Create NFT Contract
- 4.Commit to RN Retriever Address on Ethereum ---- Sale Completes ---
- 5.Retrieve Verifiable Random Number via Chainlink
- 6.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.
A SHA256 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.
This Attributes CSV file is then hashed with the same algorithm, the resulting file hash is called the Provenance Hash.
The Attributes CSV file will be publicly available after the sale has concluded.
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.

Screenshot from ViewBlock showing TBM contract.
Since there is no transition on the contract to modify this field, the
provenance_hash
on the contract can never be changed, by anyone, ever.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.
The address is recorded as a transaction 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.
RN Retriever Address Commitment Transaction Hash (Zilliqa):
645818a6077d418964721c231bce07e75dc3fd61e0e811cd92763165184ed5bb
RN Retrieve Address (Ethereum):
0xff86325df809d1b09aec381a3c3b9c3fb25305f0
After the sale is concluded, a verifiably random number is retrieved from a blockchain. Since this is not yet possible on the Zilliqa blockchain, ChainLink VRF on Ethereum will be used to retrieve the random number.
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:
$ openssl dgst -sha256 attributes.csv
SHA256(dist/legacy-attributes.csv)= 411755d1c5dad0e6dd0d6f2a23687b3ddff21054f3e82cce7631dda9273452bd
You will see the output
411755d1c5dad0e6dd0d6f2a23687b3ddff21054f3e82cce7631dda9273452bd
, which is the Provenance Hash. The current Provenance Hash is publicised as a contract parameter of The Bear Market Token contract. 
Original bear rendering with Body: None.
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:
.png?alt=media&token=b69af027-d223-4a6f-a558-2fa64340e149)
Updated bear rendering with Body: None.
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.
# Example from legacy CSV
6175,Brown,None,Normal,Smile,None,Yellow,0lWpyNHp4lINxRzhBotvMXMMahzf3RUDoDqVU3/ltBw=
# Example from updated CSV
6175,Brown,None,Normal,Smile,None,Yellow,i0vW7R06WHf5w6UilWDiQtuhPvBiO4ZY6oCvxbB/udU=
This actually proves that the bear attributes are tamper-proof, as changing some image renderings will result in a different file hash. 🐻❤️
Both CSV Files will be made available when the sale has concluded.
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

Screenshot from etherscan.io showing random number.
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 |
Last modified 1yr ago