Expressing Ethereum's history through generative art
The Genesis Collection
The Ethereum network launched on July 30th, 2015. The Genesis Collection is the first curated collection from Transaction Mosaics and seeks to highlight 10 different historical moments in Ethereum's early history.
All of the pieces in this collection have been sold using the ZORA auction house.
Turning transaction hashes into unique NFTs
What are Transaction Mosaics?
Transaction Mosaics uses historically significant transactions to generate unique pieces of NFT art. The smart contract follows the ERC-721 standard and only one NFT can be minted for every transaction hash. The contract enforces that a specific transaction hash can only be minted once by internally recording which hashes have been used and checking against that record when the mint function is called.
What is a transaction hash?
A transaction hash is a unique identifier that is created whenever a transaction gets added to the blockchain. Every transaction hash is cryptographically generated, will never have a duplicate, and are 64 characters long (excluding the '0x' prefix). A hash's characters range from 0-9 and a-f.
How is each piece generated?
Every mosaic is an eight-by-eight grid of 64 squares. Since a transaction hash has 64 characters, each character in the hash gets its own square. Every square's color is assigned based on the value of each character in the transaction hash from 16 different colors.
For example, with transaction 0xa06...6bef, since the first character is an 'a', the code will make the first square in the grid green. Then the next square will be black since the second character is a '0'. After that, it will then make the third square red since the third character has a value of '6'. The code will continue running from left to right until all 64 squares are colored in.
Inspiration for some of the colors came from this video game color palette. You can also play around with the generation script yourself by pasting in a transaction hash here. The colors and generation script can be verified by viewing the mosaic_generation_script in the contractURI.
How does the contract guarantee a hash wont be used twice?
The smart contract has a mapping named hashUsed which stores hashes to a boolean mapping(bytes32 => bool). When the mint function is called, there is a require statement that checks this mapping to make sure that it hasn't been minted. After being successfully called, the mint function then sets the value to true thus preventing that hash from ever being used again. You can view the smart contract code here.
Our history is written with transactions