---(o,O){\:/}==

OWLS × ETHEREUM

Un estudio observacional de 9.999 aves generadas por código migrando su camino desde la entropía aleatoria hasta la permanencia determinista en la red principal de Ethereum.

EXPLORAR COLECCIÓN
01

Arte Puro en Cadena

299 líneas de código Solidity. Cero dependencias. Cada búho vive para siempre como lógica de contrato pura—sin servidores, sin IPFS, solo arte determinista que emerge de la propia blockchain.

// tokenURI from Owls.sol
function tokenURI(uint256 tokenId) public view returns (string memory) {
require(_exists(tokenId), "Owl does not exist.");
uint256 seed = seeds[tokenId];
return descriptor.tokenURI(tokenId, seed);
}
02

Entropía de Hash de Bloque

En el momento del minteo, el contrato lee blockhash. Este valor de 256 bits, combinado con tu ID de token a través de keccak256, se convierte en la semilla inmutable para tu búho.

// random() from Owls.sol
function random(uint256 tokenId) private view returns (uint256) {
return uint256(
keccak256(abi.encodePacked(blockhash(block.number - 1), tokenId))
);
}
03

Magia de Desplazamiento de Bits

La semilla de 256 bits se descompone mediante operaciones de módulo. Cada rasgo extrae bits específicos: cabeza de bits 0-47, cara de 48-95, cuerpo de 96-143, pies de 144-191. Los colores se entrelazan con las formas.

// generateSeed() from Owls.sol
function generateSeed(uint256 tokenId) private view returns (uint256) {
uint256 r = random(tokenId);
uint256 headSeed = 100 * (r % 7 + 10) + ((r >> 48) % 20 + 10);
uint256 faceSeed = 100 * ((r >> 96) % 6 + 10) + ((r >> 96) % 20 + 10);
...
}
04

Generación SVG en Tiempo Real

Sin imágenes pre-almacenadas. El contrato construye SVG en memoria usando abi.encodePacked(). Una fuente WOFF2 personalizada se codifica en base64 en línea, asegurando un renderizado perfecto en cualquier lugar.

// tokenURI from OwlDescriptorV3.sol
function tokenURI(...) {
// Extract traits from seed
Trait memory head = getHead(seed / 1000000000000);
Trait memory face = getFace((seed / 100000000) % 10000);
Trait memory body = getBody((seed / 10000) % 10000);
Trait memory feet = getFeet(seed % 10000);
...
// Assemble SVG from traits
string memory rawSvg = string(
abi.encodePacked(
'<text x="160" y="130">',
head.content, face.content, body.content, feet.content,
'</text>'
));
}
05

Ingeniería de Gas

Cada línea optimizada para eficiencia. Los bloques unchecked omiten las verificaciones de desbordamiento donde es seguro. El minteo por lotes usa un único SSTORE para hasta 100 búhos. Resultado: 30% de ahorro de gas.

MINT GAS
~65K
CONTRACT SIZE
24KB
ON-CHAIN %
100%
TOTAL SUPPLY
9,999
06

Lienzo Evolutivo

Tres versiones de descriptor desplegadas en cadena. El equipo puede actualizar el renderizador visual—permitiendo futuras competencias, mejoras artísticas o personalizaciones de la comunidad. La semilla de tu búho permanece inmutable mientras su expresión puede evolucionar.

Network:Ethereum Mainnet
Status:
Live

Quiénes somos

Suiza le dio al mundo relojes y chocolate. Ahora te regala una colección de 9.999 búhos ASCII, creados por dos tipos de los Alpes obsesionados con Web3, arte ASCII y, por supuesto, búhos. De nada.

¿Preguntas?hey@goodbird.io

Ready to own a piece of history?