BitmapAds protocol · Beta V0.1

How to Publish Your Bitmap Advertisement on the Bitcoin Blockchain

Create a compact JSON inscription, transfer it to the BitmapAds advertisement address, and let the platform validate, cache, and render it on the map.

Current phase: open submission. Anyone may send a structurally valid advertisement inscription. Overlapping targets follow the advertisement display priority below. Direct bitmap targets may include Merlin Chain Address parcels, but lord cannot be the Merlin Chain Address. All rules on this page are Beta and may be updated in future published versions.

Publishing method

Publish a free web ad — no wallet or inscription.Select a parcel on the map and choose Post My Ad.. Drag over one available rectangle up to 21×21 (441 bitmaps), click Select Lands to Post, enter an image inscription number or up to 40 characters of text, preview it, then post. New placements are protected from another web ad for 7 days. Earlier placements retain their original recorded protection window. After protection ends, an ad remains visible until an eligible new request replaces all or part of it, a higher-priority ad supersedes it, or an existing lifecycle rule removes it.
Choose one target scope.Use lord for an address-wide target, or bitmap for up to ten individual bitmap numbers or one four-corner rectangle up to 12×12. In the rectangle form, L1 is top-left, L2 bottom-left, R1 top-right, and R2 bottom-right.
Choose one advertisement type.Use pic for an existing image inscription ID; the public form resolves an inscription number into that ID. Use text for a supported-language message of no more than 40 display characters. External image URLs are not accepted during Beta. Choose a supported raster image, such as PNG, JPEG, or WebP, or an animated image such as GIF that can be converted to a static frame. HTML, 3D/model, text, JSON, and video inscriptions are not picture advertisements.
Inscribe the JSON as text.Keep p exactly BitmapAds.com. Use one of the copyable examples below as the starting point.
Set the carrying UTXO value when required.If any target bitmap number is 840001 or higher, the UTXO carrying the inscription into the advertisement address must be exactly 10,000 satoshis for those high-range targets to update. Lower-numbered targets remain eligible even when the UTXO value differs.
Transfer the inscription to the advertisement address.After confirmation, BitmapAds validates the latest candidate. Invalid inscriptions never remove the previous valid advertisement.

Advertisement display priority

Every advertisement is moderated before it can be shown. The classes below are evaluated from lowest to highest priority:

default_adsoffline_adsins_adslord_ads

default_adsThe current map fallback is a plain Bitmap-orange parcel, without default artwork or placeholder text. Previously cached default images and tiles are retained but not displayed. The three legacy inscription campaigns remain ins_ads.
offline_adsFree web-published Beta ads. One request may select a rectangle up to 21×21 (441 cells) without connecting a wallet or creating an inscription. New placements are protected from another offline ad for 7 days; earlier placements retain their original recorded protection window. The ad remains active afterward; the earliest accepted eligible new offline request may then replace all or only its overlapping cells. If nobody replaces it, it continues indefinitely unless superseded or removed by an existing lifecycle rule.
ins_adsAny valid advertisement inscription. It overrides lower classes—including a protected offline ad—without waiting for the 24-hour period. Overlapping inscription ads use the highest inscription-UTXO satoshi value; equal values use the newest confirmed inscription.
lord_adsA valid inscription published by the confirmed current owner (owner = lord). It has the highest priority and can override every lower class.

Different limits: the free webpage selector allows one rectangle up to 21×21. The on-chain bitmap field still allows at most ten individual numbers or one four-corner rectangle up to 12×12.

Scanner activation

BitmapAds scans this address from Bitcoin block 965000, inclusive. New confirmed activity is checked approximately every 15 minutes and processed in block and transaction order.

Address-wide image advertisement

{
  "p": "BitmapAds.com",
  "lord": "bc1p...owneraddress",
  "pic": "95ca41ba9cd1f01cecf4622285e0e4cc2b58cdac6c2fc1e4a093e550612af917i0",
  "layout": "standard",
  "link": "https://example.com",
  "expiration": "1000000"
}

Individual bitmap text advertisement

{
  "p": "BitmapAds.com",
  "bitmap": "500500, 1688, 690069",
  "text": "This is an advertisement",
  "layout": "single",
  "link": "https://example.com"
}

Four-corner rectangle advertisement

{
  "p": "BitmapAds.com",
  "bitmap": "L1-485520,L2-494520,R1-485529,R2-494529",
  "pic": "95ca41ba9cd1f01cecf4622285e0e4cc2b58cdac6c2fc1e4a093e550612af917i0",
  "link": "https://example.com"
}

Advertisement rules

Generate my advertisement JSON Publish a free web ad
FieldRequirementRule
pRequiredMust be exactly BitmapAds.com.
lordOne of two required scopesThe wallet that owns bitmaps. Use exactly one of lord or bitmap.
bitmapOne of two required scopesEither up to ten unique numbers from 0–999999, or exactly four rectangle corners such as L1-505506,L2-515506,R1-505516,R2-515516. L1 is top-left, L2 bottom-left, R1 top-right, and R2 bottom-right. Spaces around commas are ignored.
picOne of two required content fieldsAn existing image inscription ID (for example, 95ca41ba9cd1f01cecf4622285e0e4cc2b58cdac6c2fc1e4a093e550612af917i0). Use exactly one of pic or text. External image URLs are not accepted. The resolved content must be a supported raster image, such as PNG, JPEG, or WebP, or an animated image such as GIF that can be made static. HTML and 3D/model content are not accepted as pictures. Safe static raster images smaller than 3 KB and no larger than 256 pixels per side may keep their original cached bytes; other supported images are converted into lightweight static thumbnails.
textOne of two required content fieldsUp to 40 normalized display characters in the supported languages. Emoji and decorative or obfuscated Unicode are rejected.
layoutOptionalFor pictures: standard, single, or a positive x*y. Complete requested rectangles are used first; leftovers use the standard square-first slicing rule. Text always uses one centered message across the selected scope, regardless of the stored layout value.
linkOptionalHTTPS page opened from the advertisement.
expirationOptionalBitcoin block height. The ad remains active through that block and ends at the next block.
UTXO valueConditional chain metadataNot a JSON field. Exactly 10,000 satoshis is required to update each target bitmap numbered 840001–999999. A different value does not prevent eligible targets numbered 0–840000 from updating.

Restricted-language reminder

Do not publish unlawful, abusive, discriminatory, sexually exploitative, violent, fraudulent, or otherwise prohibited advertising. BitmapAds normalizes text and applies a political-focused list of sensitive slogans and personal names before display. Ordinary single characters such as 傻, 日, 比, and 妈 are not blanket-blocked. The same current policy applies to new and existing text advertisements. Matched sensitive spans are left blank; the original on-chain inscription remains unchanged. Automated lists can produce false positives and do not guarantee legal compliance.

10,000-satoshi rule for 840001+

If any target bitmap number is 840001 or higher, the confirmed UTXO carrying the advertisement inscription when it reaches ads_add must equal exactly 10,000 satoshis for that high-range target to update. For a bitmap list or lord address containing both lower- and higher-numbered bitmaps, a different UTXO value still allows eligible targets numbered 0–840000 to update; targets numbered 840001–999999 keep their previous display. Do not add the value as a JSON field.

Four-corner rectangle targets

A bitmap target may define one square or rectangle by its four corners: L1 top-left, L2 bottom-left, R1 top-right, and R2 bottom-right. The rectangle may be no larger than 12×12, including 12×1 strips and 1×12 vertical strips.

The inscription is invalid if it includes any target outside the four corners, repeats or omits a corner, does not form an axis-aligned rectangle, exceeds 12 cells on either side, or implies a rectangle outside the 1000×1000 BitmapAds map.

This is the on-chain inscription limit. The separate free webpage publishing path may select one rectangle up to 21×21 (441 cells), and does not create inscription JSON.

Large-block image slicing

For a connected large advertisement region, BitmapAds slices the region into square-first display blocks before rendering the image. It cuts the largest complete square first. If several same-size squares are possible, the next block is chosen from bottom to top and then from right to left, creating the visual order A, B, C, D, and so on.

After slicing, the same cached advertisement thumbnail is drawn once inside each block. Tall rectangles, wide strips, and mixed rectangles therefore show repeated square thumbnails instead of one stretched or distorted image across the whole region.

One message per text advertisement

Updated 2026-09-05. New and existing text advertisements display one complete message, centered and fitted across the selected region. A rectangle, horizontal strip, vertical strip, or single parcel is one text box. Text is not repeated per square or parcel, even when the inscription contains single or a custom layout.

For irregular or disconnected selections, only the originally selected parcels remain part of the advertisement. One copy is fitted inside the largest complete rectangular area within those parcels; gaps and unselected parcels are never added. Higher-priority advertisements still mask covered cells without moving or re-cutting the older message. Picture slicing remains unchanged.

Layered overlap rendering

Advertisements are drawn in confirmed chain order from older to newer. If a newer ad covers part of an older ad, the older ad keeps its original large-block geometry underneath, and the newer ad is simply drawn above the overlapping bitmap cells. This keeps a 12×12 or 6×6 image block visually stable while still making the latest valid ad the top visible ad for each clicked bitmap.

Replacement and termination

A newer valid advertisement affecting the same target replaces the previous one. Expiration or ownership transfer terminates the affected ad. Invalid inscriptions do not change the last valid ad.

Display fallback

The 1000 × 1000 map now uses a Bitmap-orange base and displays images or text only from published advertisements. When no eligible advertisement remains, the parcel returns to orange. Cached owner images, curated default images, and old map tiles are preserved but no longer loaded by the homepage. Parcel numbers appear after three standard zoom-in steps from the initial view and remain hidden under advertisements; click information and same-owner highlighting remain available.

Accepted images and non-image results

Updated 2026-09-05. New picture requests must resolve to supported raster image content. PNG, JPEG, and WebP are typical examples; GIF and other supported animated raster images are shown as one cached static frame. HTML, interactive 3D/model files, plain text, JSON, and video are not accepted. BitmapAds does not execute their scripts or look for substitute parent/cover images.

If the resolved content is not an image, the form displays: This inscription is not an image. Please choose an image inscription. Image lookup, download, or conversion failures have separate messages, because a temporary error does not prove that the content is a non-image. Previously published advertisements and their existing cached static previews remain intact. No failed request replaces a valid advertisement.

Future owner verification

After the website's Beta testing ends and BitmapAds enters formal operation, the platform may explicitly switch from open submission to owner-verified authorization. That future change will not alter the inscription JSON schema.

Copied