Create unique 16x16 pixel art and immortalize it on the TRON blockchain. Your digital creativity meets decentralized permanence.
Connect your TronLink wallet to send TronMoji on-chain
TronMoji is an innovative protocol that revolutionizes digital art creation by embedding 16x16 pixel artwork directly into the TRON blockchain infrastructure. Unlike traditional NFTs, TronMoji data is inscribed permanently in transaction memo fields, creating truly immutable digital artifacts.
Each TronMoji exists as a self-contained hexadecimal data structure that can be reconstructed and displayed by any compatible viewer, making it a decentralized standard for blockchain-based pixel art.
Key Features: Zero external dependencies, permanent storage, minimal transaction cost (~1.1 TRX), and universal compatibility across TRON ecosystem applications.
0
: Transparent (background)1
: Pure Black (#000000)2
: Pure White (#FFFFFF)3-F
: HSL color wheel: hsl((hex_value - 3) × 27.6923°, 100%, 50%)
Interactive gallery: Click any example to load it into the editor for modification or inspiration:
Memo Field Data (Hex):
74726f6e6d6f6a693a001110000001110001fff110011fff100feeeff11ffeeef01feddeeffeeddef1fedddddeedddddeffeddddddddddddeffe2dddddddddddeffe2dddddddddddef1fe2dddddddddef101fe2dddddddef10001fe2dddddef1000001fe2dddef100000001fe2def10000000001feef1000000000001ff10000000000000110000000
Complete Transaction Data:
890174726f6e6d6f6a693a001110000001110001fff110011fff100feeeff11ffeeef01feddeeffeeddef1fedddddeedddddeffeddddddddddddeffe2dddddddddddeffe2dddddddddddef1fe2dddddddddef101fe2dddddddef10001fe2dddddef1000001fe2dddef100000001fe2def10000000001feef1000000000001ff10000000000000110000000
89
= Protocol buffer field encoding01
= Data length (137 bytes)74726f6e6d6f6a693a
= "tronmoji:" prefix// Parse TronMoji from transaction memo
function parseTronMoji(memoHex) {
const prefix = "tronmoji:";
const memoStr = Buffer.from(memoHex, 'hex').toString('utf8');
if (!memoStr.startsWith(prefix)) return null;
const pixelData = memoStr.slice(prefix.length);
if (pixelData.length !== 256) return null;
return pixelData;
}
// Render TronMoji to canvas
function renderTronMoji(pixelData, canvas) {
const ctx = canvas.getContext('2d');
const pixelSize = canvas.width / 16;
for (let i = 0; i < 256; i++) {
const colorIndex = parseInt(pixelData[i], 16);
const x = (i % 16) * pixelSize;
const y = Math.floor(i / 16) * pixelSize;
ctx.fillStyle = getColorFromIndex(colorIndex);
ctx.fillRect(x, y, pixelSize, pixelSize);
}
}