PUSH4 Studio

PUSH4

An on-chain art system built on EVM function selectors. PUSH4 encodes Barnett Newman's Onement I into 375 function selectors, each storing color and position data directly in a smart contract's bytecode.

Overview

PUSH4 stores a 15×25 pixel image as 375 function selectors in a smart contract. Each selector is 4 bytes: the first 3 bytes encode RGB color, the last byte encodes column position.

When queried, the contract returns these selectors, and a renderer builds an SVG from them.

Click or hover on any pixel to inspect

Proxies

A proxy is a contract that sits between the viewer and PUSH4's renderer. It intercepts selector queries and can modify the returned values. This allows artists to create variations without changing the original data.

Proxies implement an execute function that receives the original selector, extracts RGB and column data, applies a transformation, and returns a new color data.

Original
Mona Lisa proxy transformation
Transformed
Viewer
Proxy
PUSH4 Renderer

The Orchestrator

The Orchestrator creates an endless exhibition of proxy artworks. It rotates through registered proxies based on block number, automatically cycling to a new transformation at regular intervals.

This enables a curated, ever-changing experience — an on-chain art gallery where each proxy represents a different artistic interpretation of the original work.

ALIVE
B
C
D
E
F
index = (block.number / interval) % proxies.length

Governance

The token owner controls how the artwork is rendered through two settings:

  • Mode — Switch between the original artwork (Carved) or a proxy transformation (Executed)
  • Proxy Address — Which proxy contract to use when in Executed mode

Setting the proxy to the Orchestrator enables automatic rotation through all registered artist interpretations.

Chonk proxy transformation
Transformed by a Chonks inspired proxy contract

Creating Proxies

Anyone can create and deploy a proxy. Use the studio tools to get started quickly, or write your own smart contract for full control.

For full control, implement an execute function that transforms selectors and deploy your own proxy contract.

View Protocol Documentation →