
NFT ART CDMX
Bright Moments is proud to present NFT ART CDMX: a 7-day celebration of generative art in the heart of Mexico City from November 14 - 21.Nocturnal minting of 3,000+ on-chain generative artworks, a celebration of death and the afterlife, memento moriAn exhibition of contemporary Mexican NFT artDaytime educational programming focused on onboarding local and emerging artists into generative art via hands-on workshopsTalks and intimate sessions with artists and collectors shaping the future of ge...

Bright Moments Update
Dear Bright Moments CryptoCitizens, When we minted CryptoVenezian #999 in Venice last April, it marked the end of an extraordinary journey—spanning four continents, three years, and 30,000 works of art. In a world of bright shiny objects — where new tokens appear daily and too many companies linger without purpose — there was something deeply satisfying about completion. We did what we said we would do, and it was beautiful. A few weeks later, sitting alone in the Hollywood Hills, I was caugh...

Introducing the Onchain Ranked Auction
Bright Moments gives artists a platform for global reach. Today, we introduce a significant innovation: the onchain ranked auction.Problem and SolutionProblem Traditional Dutch auctions are rapid and stressful, often confined to an hour, and disproportionately favor bidders in certain time zones. This causes rushed decisions that hamper true price discovery. Direct listings, another commonly used mechanism, require a deep understanding of market dynamics and risk either triggering gas wars or...
NFT Art Gallery

NFT ART CDMX
Bright Moments is proud to present NFT ART CDMX: a 7-day celebration of generative art in the heart of Mexico City from November 14 - 21.Nocturnal minting of 3,000+ on-chain generative artworks, a celebration of death and the afterlife, memento moriAn exhibition of contemporary Mexican NFT artDaytime educational programming focused on onboarding local and emerging artists into generative art via hands-on workshopsTalks and intimate sessions with artists and collectors shaping the future of ge...

Bright Moments Update
Dear Bright Moments CryptoCitizens, When we minted CryptoVenezian #999 in Venice last April, it marked the end of an extraordinary journey—spanning four continents, three years, and 30,000 works of art. In a world of bright shiny objects — where new tokens appear daily and too many companies linger without purpose — there was something deeply satisfying about completion. We did what we said we would do, and it was beautiful. A few weeks later, sitting alone in the Hollywood Hills, I was caugh...

Introducing the Onchain Ranked Auction
Bright Moments gives artists a platform for global reach. Today, we introduce a significant innovation: the onchain ranked auction.Problem and SolutionProblem Traditional Dutch auctions are rapid and stressful, often confined to an hour, and disproportionately favor bidders in certain time zones. This causes rushed decisions that hamper true price discovery. Direct listings, another commonly used mechanism, require a deep understanding of market dynamics and risk either triggering gas wars or...
NFT Art Gallery

Subscribe to Bright Moments

Subscribe to Bright Moments
Share Dialog
Share Dialog
>900 subscribers
>900 subscribers
The Random Collector Selector (RCS) is a tool we’ve developed internally to help conduct fair and transparent giveaways for our community. We will use a modified version of our RCS to determine the order of the ten Mexico City Collection artists. This order will be announced during La Revelación, a live streamed event taking place across our galleries in Mexico City, Venice Beach, New York, Berlin, and London.
The core technology powering RCS is Chainlink’s Verifiable Random Function.
Chainlink VRF (Verifiable Random Function) is “a provably fair and verifiable random number generator (RNG) that enables smart contracts to access random values without compromising security or usability. For each request, Chainlink VRF generates one or more random values and cryptographic proof of how those values were determined. The proof is published and verified on-chain before any consuming applications can use it. This process ensures that results cannot be tampered with or manipulated by any single entity including oracle operators, miners, users, or smart contract developers.”
Before we get into a technical explanation, we’ll use an analogy to explain how it works:
Chainlink VRF is like a dice with a variable number of sides.
Every time it’s called, VRF returns a number corresponding to one of the sides on the dice.
For La Revelacion, we used a version of VRF that returns an integer between 0-9, like a ten-sided dice.

Each artist is assigned a number 0-9 based on the alphabetical position of their name in the list, distinct from the Mint Pass number.
0 = Anna Lucia 1 = Daniel Calderon-Arenas 2 = Iskra Velitchkova 3 = Marcel Soria-Rodriguez 4 = Monica Rizzolli 5 = P1xelfool 6 = Snowfro 7 = Stefano Contiero 8 = William Mapan 9 = Zach Lieberman
When the “dice” is rolled, the order that these numbers appear determines which artists are assigned to each Mint Pass ID. If there’s a duplicate number, we skip it and move to the next one.
For example, the roll: 7, 4, 3, 9, 8, 7, 6, 2, 0, 1, 5 would correspond to:
Artist #0 = Stefano Artist #1 = Monica Rizzolli Artist #2 = Marcelo Soria Rodriguez Artist #3 = Zach Lieberman Artist #4 = William Mapan Artist #5 = Snowfro Artist #6 = Iskra Velitchkova Artist #7 = Anna Lucia Artist #8 = Daniel Calderon-Arenas Artist #9 = P1xelfool
Our RCS is deployed on Polygon. We use Polygon to significantly reduce gas execution cost compared to Ethereum mainnet.
Two functions do most of the heavy lifting:
____VRF1RandomSeedArtistNames
____VRF2ExecuteArtistNameMapping
____VRF1RandomSeedArtistNames accepts no arguments and returns a random seed generated by Chainlink VRF. The output of this function can be accessed by using the read function _RandomResults.
Here’s an example output:
This output is then put through a series of transformations before ending up as our final “dice roll” sequence from the example above.
____VRF2ExecuteArtistNameMapping accepts one argument, Amount, which instructs the contract how many random numbers to generate. It is deterministic; the value entered for Amount will not change the final result, only how many transactions it takes to calculate the final artist mapping on-chain.

If you’d like to inspect the results of the artist mapping on-chain, you can do so by calling the ViewAllArtistNames read function. This function will return an array of human readable names that were generated from the random number in the steps above.
Having a provably random process is an important component of operating on-chain. Our goal with this post was to demystify how our Random Collector Selector works and provide an in-the-weeds explanation for other DAOs that are considering implementing something similar.
We hope you enjoy La Revelación. Hasta luego.
The Random Collector Selector (RCS) is a tool we’ve developed internally to help conduct fair and transparent giveaways for our community. We will use a modified version of our RCS to determine the order of the ten Mexico City Collection artists. This order will be announced during La Revelación, a live streamed event taking place across our galleries in Mexico City, Venice Beach, New York, Berlin, and London.
The core technology powering RCS is Chainlink’s Verifiable Random Function.
Chainlink VRF (Verifiable Random Function) is “a provably fair and verifiable random number generator (RNG) that enables smart contracts to access random values without compromising security or usability. For each request, Chainlink VRF generates one or more random values and cryptographic proof of how those values were determined. The proof is published and verified on-chain before any consuming applications can use it. This process ensures that results cannot be tampered with or manipulated by any single entity including oracle operators, miners, users, or smart contract developers.”
Before we get into a technical explanation, we’ll use an analogy to explain how it works:
Chainlink VRF is like a dice with a variable number of sides.
Every time it’s called, VRF returns a number corresponding to one of the sides on the dice.
For La Revelacion, we used a version of VRF that returns an integer between 0-9, like a ten-sided dice.

Each artist is assigned a number 0-9 based on the alphabetical position of their name in the list, distinct from the Mint Pass number.
0 = Anna Lucia 1 = Daniel Calderon-Arenas 2 = Iskra Velitchkova 3 = Marcel Soria-Rodriguez 4 = Monica Rizzolli 5 = P1xelfool 6 = Snowfro 7 = Stefano Contiero 8 = William Mapan 9 = Zach Lieberman
When the “dice” is rolled, the order that these numbers appear determines which artists are assigned to each Mint Pass ID. If there’s a duplicate number, we skip it and move to the next one.
For example, the roll: 7, 4, 3, 9, 8, 7, 6, 2, 0, 1, 5 would correspond to:
Artist #0 = Stefano Artist #1 = Monica Rizzolli Artist #2 = Marcelo Soria Rodriguez Artist #3 = Zach Lieberman Artist #4 = William Mapan Artist #5 = Snowfro Artist #6 = Iskra Velitchkova Artist #7 = Anna Lucia Artist #8 = Daniel Calderon-Arenas Artist #9 = P1xelfool
Our RCS is deployed on Polygon. We use Polygon to significantly reduce gas execution cost compared to Ethereum mainnet.
Two functions do most of the heavy lifting:
____VRF1RandomSeedArtistNames
____VRF2ExecuteArtistNameMapping
____VRF1RandomSeedArtistNames accepts no arguments and returns a random seed generated by Chainlink VRF. The output of this function can be accessed by using the read function _RandomResults.
Here’s an example output:
This output is then put through a series of transformations before ending up as our final “dice roll” sequence from the example above.
____VRF2ExecuteArtistNameMapping accepts one argument, Amount, which instructs the contract how many random numbers to generate. It is deterministic; the value entered for Amount will not change the final result, only how many transactions it takes to calculate the final artist mapping on-chain.

If you’d like to inspect the results of the artist mapping on-chain, you can do so by calling the ViewAllArtistNames read function. This function will return an array of human readable names that were generated from the random number in the steps above.
Having a provably random process is an important component of operating on-chain. Our goal with this post was to demystify how our Random Collector Selector works and provide an in-the-weeds explanation for other DAOs that are considering implementing something similar.
We hope you enjoy La Revelación. Hasta luego.
No activity yet