Bitcoin Data Representation & Provably Fair Mint
Most NAT’s and UNAT’s use the Block Number as the primary randomization seed. Because of this, if users are able to determine which traits are linked with which numeric patterns, they are able to quickly mint all the interesting & rare pieces, while neglecting the commons.
VESSELS extract several points of data from the selected Block to generate traits. BlockHash, BlockSize, Total Transactions, etc. But, critically, they ALSO utilize the InscriptionID and the Sat Number of the inscription transaction itself to determine traits. This means that it’s impossible to fully predict the traits a given VESSEL will have until the actual mint transaction confirms.
We use the "/r/blockinfo/<BLOCK NUMBER>" recursive endpoint to dynamically fetch the data from the minted block number, so all of the data retreival can be on-chain.
As a result, we’re able to release the actual UNAT rendering code before the mint occurs, as sniping is rendered impossible.
Below is a list of the BlockChain Data elements, and how they're utilized for trait generation.
BlockHash:
VESSELS use the ALEA Psuedo random-number-generator (PRNG) algorithm to create a convincingly random number generator, and uses the BlockHash of the selected Block as a seed.
We use this PRNG to generate seveal traits, including the path of the orbitals, color indexing vertex shader logic, and the shape of the vessel container.
Inscription ID:
VESSELS also use the ALEA PRNG with the Inscription ID from the inscription transaction itself to determine traits
This is used to determine the animation speed, Hand type & material, color inversion, and special add-on 3D models ("Special Accessories")
Block Number
Like previous DMT projects, VESSELS use the number of the selected for some traits. This is not relied on very heavily, and is ONLY used to determine 1 of the most rare traits, ANGEL & DEVIL
Any block number containing "17" was gicen the trait ANGEL & DEVIL. This overrides any of the randomization provided by Inscription ID. Examples include 417000, 400170, 400017, etc.
BlockSize
We utilize the "SIZE" value from the /r/blockinfo endpoint, which refers to the total size (in bytes) of the information processed by the block.
After analyzing the full range of possible BlockSizes within our valid blocks, we have split this range into 7 chunks, and use it to determine the Star Density. (Traits Star X & Star Y)
Transaction Count
Just like BlockSize, this is fetched from /r/blockinfo, and is split into 7 chunks.
This is used to determine the number of MOONS (Trait Moon Count), with a higher transaction count yielding a higher number.
Last updated