A networked, generative art experience where real-world ERC-20 token prices shape each artwork over time.
by BASEMENT x ryley-o.eth
View on Art Blocks →
Pool Party is a fully on-chain generative art project released on Art Blocks. Each mint triggers a chain of smart contract interactions that purchase a randomly-selected ERC-20 token, then tracks its price over time through 12 automated check-ins. These real-world price movements directly influence the artwork's visual output — making every piece a living, evolving composition.
Every token goes through three distinct phases, from mint to maturity.
The collector decides how much ETH to spend. A random ERC-20 token is selected based on the token's hash. 80% of the payment is immediately swapped into that token via Uniswap V3.
10% goes to Art Blocks, 10% to the artists, and the remaining 80% purchases an ERC-20 token — all in a single atomic transaction.
Chainlink Automation triggers price check-ins over the token's lifetime. Each check-in records the current price, injected as a PostParam value that directly shapes the artwork's output.
As prices rise and fall in the real world, each artwork evolves. No two tokens will ever look the same because no two price histories are the same.
After all 12 check-ins are complete, the token owner can toggle the isWithdrawn PostParam to withdraw the ERC-20 tokens purchased at mint to their wallet.
A single transaction triggers an orchestrated sequence of smart contract interactions.
flowchart TD
A["π§ Collector
sends ETH"]:::cyan -->|"mints via Art Blocks"| B["Art Blocks
Sliding Scale Minter"]:::pink
B -->|"10%"| R1["Art Blocks
Revenue"]:::muted
B -->|"10%"| R2["Artist
Revenue"]:::muted
B -->|"80%"| C["StratHooks.sol
onTokenPMPConfigure
(PostParam Hook)"]:::yellow
C --> D["GuardedEthTokenSwapper
Chainlink oracle validates fair price"]:::purple
D -->|"Uniswap V3
atomic swap"| E["ERC-20 Tokens
held by StratHooks
until withdrawal"]:::orange
classDef cyan fill:#0d2d2b,stroke:#5ce0d8,color:#5ce0d8
classDef pink fill:#2d0d1e,stroke:#f06292,color:#f06292
classDef yellow fill:#2d2a0d,stroke:#ffd54f,color:#ffd54f
classDef purple fill:#1a0d2d,stroke:#7c4dff,color:#7c4dff
classDef orange fill:#2d1a0d,stroke:#ff7043,color:#ff7043
classDef muted fill:#1a1a1f,stroke:#6b6b7b,color:#6b6b7b
One of these tokens is randomly selected at mint based on the token's hash. Each uses a verified Chainlink TOKEN/ETH price feed and an optimal Uniswap V3 fee tier.
All tokens use 5% oracle validation tolerance. WBTC uses the ETH/BTC Chainlink feed for optimal precision.
Each token is assigned a random interval between its 12 price check-ins. Chainlink Automation nodes monitor the contract and execute check-ins automatically.
flowchart LR
M(("Mint")):::cyan -.->|"random
intervals"| C["C1 β C2 β ... β C12
12 Automated Check-ins"]:::yellow
C -->|"each price
recorded on-chain"| PS["On-Chain State
priceHistory array"]:::cyan
PS -->|"onTokenPMPRead
Augmentation"| PP["PostParam Values
injected on display"]:::purple
PP --> ART["π¨ Artwork
Responds & Evolves"]:::pink
classDef cyan fill:#0d2d2b,stroke:#5ce0d8,color:#5ce0d8
classDef pink fill:#2d0d1e,stroke:#f06292,color:#f06292
classDef yellow fill:#2d2a0d,stroke:#ffd54f,color:#ffd54f
classDef purple fill:#1a0d2d,stroke:#7c4dff,color:#7c4dff
Off-chain nodes call checkUpkeep() to determine when a price check-in is needed. When triggered, performUpkeep() executes on-chain with idempotency guarantees via round tracking.
When the artwork is read (displayed), onTokenPMPReadAugmentation injects all recorded price check-ins as parameters. The generative script uses these to shape its visual output.
Because each token has a different ERC-20, a different mint time, and different check-in intervals, no two price histories — and therefore no two artworks — will ever be the same.
Simulated price wave β illustrating how real-world price movements shape the art
Once all 12 price check-ins are complete, the artistic journey concludes and the collector can reclaim the underlying ERC-20 tokens.
flowchart TD
A["β
All 12 check-ins
complete"]:::yellow --> B["Token Owner
sets isWithdrawn = true
via PostParam configure"]:::cyan
B --> C["StratHooks Contract
transfers ERC-20 tokens"]:::purple
C --> D["π Collector's Wallet
tokens received"]:::pink
classDef cyan fill:#0d2d2b,stroke:#5ce0d8,color:#5ce0d8
classDef pink fill:#2d0d1e,stroke:#f06292,color:#f06292
classDef yellow fill:#2d2a0d,stroke:#ffd54f,color:#ffd54f
classDef purple fill:#1a0d2d,stroke:#7c4dff,color:#7c4dff
Pool Party's on-chain architecture orchestrates multiple smart contracts, oracles, and DEX protocols into a single cohesive system.
flowchart TD
subgraph AB ["ART BLOCKS ECOSYSTEM"]
direction LR
ABC["Art Blocks
Core Contract"]:::cyan --> SSM["Sliding Scale
Minter
(variable price)"]:::cyan
SSM --> SC["Studio Contract
(on-chain scripts)"]:::cyan
end
SC -->|"PostParam Hook"| SH
subgraph SH_BOX ["StratHooks.sol (UUPS Proxy)"]
SH["β’ onTokenPMPConfigure β mint logic
β’ onTokenPMPReadAugmentation
β’ checkUpkeep / performUpkeep
β’ Token metadata & price history
β’ Withdrawal logic"]:::pink
end
SH --> GETS["GuardedEthToken
Swapper.sol
βββββββββββββ
β’ ETH β ERC20 swap
β’ MEV protection
β’ Uniswap V3"]:::yellow
SH --> CLO["Chainlink
Oracles
βββββββββββββ
β’ TOKEN/ETH feeds
β’ Price validation
β’ 24hr staleness"]:::purple
SH --> CLA["Chainlink
Automation
βββββββββββββ
β’ checkUpkeep
β’ performUpkeep
β’ Round tracking"]:::orange
classDef cyan fill:#0d2d2b,stroke:#5ce0d8,color:#5ce0d8
classDef pink fill:#2d0d1e,stroke:#f06292,color:#f06292
classDef yellow fill:#2d2a0d,stroke:#ffd54f,color:#ffd54f
classDef purple fill:#1a0d2d,stroke:#7c4dff,color:#7c4dff
classDef orange fill:#2d1a0d,stroke:#ff7043,color:#ff7043
Pool Party is configured on the BASEMENT Art Blocks Studio contract. All script information — the generative code that produces each artwork — is stored fully on-chain, ensuring permanence and decentralization.
The GuardedEthTokenSwapper uses Chainlink oracle price feeds to validate that Uniswap swaps execute at fair market prices. This eliminates sandwich attacks without requiring special function input arguments — keeping it compatible with standard Art Blocks minting.
Chainlink Automation uses a round-based system with per-token tracking. Each upkeep encodes (tokenId, round) for guaranteed idempotency, preventing duplicate or stale executions.
Explore the open-source code and deployed contracts powering Pool Party.
PostParam hook contract β mint logic, price check-ins, Chainlink Automation, withdrawal. UUPS upgradeable.
MEV-protected ETHβERC20 swapper using Chainlink oracles and Uniswap V3. 14 supported tokens.
Smart contracts that power Art Blocks β includes the Studio contract and PostMintParameter (PMP) system.
0x9a3f4307b1d12aeA5E2633e6e10Fb3cf9Ac81F9a β UUPS proxy on Ethereum mainnet.
0x7FFc0E3F2aC6ba73ada2063D3Ad8c5aF554ED05f β deployed and verified on Ethereum mainnet.
0xaa00b2b2db36b8f8004a9aa96f0012005d92b300 β BASEMENT Art Blocks Studio contract.
View the collection, mint, and explore all Pool Party tokens on Art Blocks.
View the live generative output of token #0 in the Art Blocks generator.