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

OWLS × ETHEREUM

Studi observasional tentang 9.999 burung yang dihasilkan kode bermigrasi dari entropi acak menuju permanensi deterministik di Ethereum mainnet.

JELAJAHI KOLEKSI
01

Seni On-Chain Murni

299 baris kode Solidity. Tanpa dependensi. Setiap burung hantu hidup selamanya sebagai logika kontrak murni—tanpa server, tanpa IPFS, hanya seni deterministik yang muncul dari blockchain itu sendiri.

// 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

Entropi Hash Blok

Saat minting, kontrak membaca blockhash. Nilai 256-bit ini, dikombinasikan dengan ID token Anda melalui keccak256, menjadi seed yang tidak dapat diubah untuk burung hantu Anda.

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

Keajaiban Bit Shifting

Seed 256-bit didekomposisi melalui operasi modulo. Setiap trait mengekstrak bit tertentu: kepala dari bit 0-47, wajah dari 48-95, tubuh dari 96-143, kaki dari 144-191. Warna terjalin dengan bentuk.

// 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

Generasi SVG Real-time

Tidak ada gambar yang disimpan sebelumnya. Kontrak membangun SVG di memori menggunakan abi.encodePacked(). Font WOFF2 kustom di-encode base64 secara inline, memastikan rendering sempurna di mana saja.

// 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

Rekayasa Gas

Setiap baris dioptimalkan untuk efisiensi. Blok unchecked melewati pemeriksaan overflow di tempat yang aman. Batch minting menggunakan SSTORE tunggal untuk hingga 100 burung hantu. Hasil: penghematan gas 30%.

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

Kanvas Berkembang

Tiga versi deskriptor di-deploy on-chain. Tim dapat mengupgrade renderer visual—memungkinkan kompetisi masa depan, perbaikan artistik, atau kustomisasi komunitas. Seed burung hantu Anda tetap tidak berubah sementara ekspresinya dapat berevolusi.

Network:Ethereum Mainnet
Status:
Live

Siapa kami

Swiss memberi dunia jam tangan dan cokelat. Sekarang memberikan Anda koleksi 9.999 burung hantu ASCII, dihidupkan oleh dua orang dari Alpen yang terobsesi dengan Web3, seni ASCII, dan tentu saja, burung hantu. Sama-sama.

Ada pertanyaan?hey@goodbird.io

Ready to own a piece of history?