Summary
Add a Mark feature to Electrum-Bitmark — create on-chain endorsements via OP_RETURN, matching the existing implementation in the explorer. A Mark endorses content (URL, address, document, Nostr profile/event, git commit, timestamp, URI) by committing a weighted amount of BTM alongside a structured OP_RETURN.
Why this is low-risk (mostly UI)
Electrum already builds, signs, and broadcasts transactions with OP_RETURN outputs. So this is primarily a new GUI tab/plugin + building the payload — no new script types, nothing consensus-sensitive, nothing SegWit-adjacent.
On-chain format — must match the reference exactly (so marks interoperate)
Canonical implementation: project-bitmark/bitmark-explorer -> web/panes/mark-pane.js (a self-contained client-side tx builder: legacy P2PKH + OP_RETURN + secp256k1 signing).
OP_RETURN payload = 37 bytes (generateMarkOpReturn, mark-pane.js):
4d 52 4b "MRK" magic
01 version 1
<type> TYPE_CODES[type] (url / address / nostr / git / document / timestamp / event / uri)
<32 bytes> sha256(reference)[:32]
Wrapped as OP_RETURN script: 6a 25 <37 bytes> (0x6a = OP_RETURN, 0x25 = 37-byte push).
Weights (committed value): Legendary 1.00 / Love it 0.10 / Nice 0.05 / Noted 0.01 BTM. For Address-type marks the weight is sent to the marked address; see mark-pane.js for the exact output construction.
Suggested implementation
- A "Mark" tab or plugin in the Qt GUI mirroring the explorer's panel: type selector, reference field, weight buttons, OP_RETURN preview, Create button.
- Build the 37-byte payload, add an
OP_RETURN output (value 0) plus the weight output, then hand off to Electrum's existing transaction flow.
- Port the exact byte format +
TYPE_CODES + output rules from mark-pane.js so wallet-created marks are byte-identical to explorer-created ones.
Effort
Rough proof-of-concept ~1 day; polished plugin/tab a few days. The crypto/tx layer is already in Electrum.
References
- Canonical impl:
project-bitmark/bitmark-explorer -> web/panes/mark-pane.js
- Also:
bitmark-api/wallet.js, docs/docs/ecosystem/api.md
- Target: this repo (Electrum-Bitmark wallet)
Summary
Add a Mark feature to Electrum-Bitmark — create on-chain endorsements via
OP_RETURN, matching the existing implementation in the explorer. A Mark endorses content (URL, address, document, Nostr profile/event, git commit, timestamp, URI) by committing a weighted amount of BTM alongside a structuredOP_RETURN.Why this is low-risk (mostly UI)
Electrum already builds, signs, and broadcasts transactions with
OP_RETURNoutputs. So this is primarily a new GUI tab/plugin + building the payload — no new script types, nothing consensus-sensitive, nothing SegWit-adjacent.On-chain format — must match the reference exactly (so marks interoperate)
Canonical implementation:
project-bitmark/bitmark-explorer->web/panes/mark-pane.js(a self-contained client-side tx builder: legacy P2PKH + OP_RETURN + secp256k1 signing).OP_RETURN payload = 37 bytes (
generateMarkOpReturn, mark-pane.js):Wrapped as OP_RETURN script:
6a 25 <37 bytes>(0x6a = OP_RETURN, 0x25 = 37-byte push).Weights (committed value): Legendary
1.00/ Love it0.10/ Nice0.05/ Noted0.01BTM. For Address-type marks the weight is sent to the marked address; seemark-pane.jsfor the exact output construction.Suggested implementation
OP_RETURNoutput (value 0) plus the weight output, then hand off to Electrum's existing transaction flow.TYPE_CODES+ output rules frommark-pane.jsso wallet-created marks are byte-identical to explorer-created ones.Effort
Rough proof-of-concept ~1 day; polished plugin/tab a few days. The crypto/tx layer is already in Electrum.
References
project-bitmark/bitmark-explorer->web/panes/mark-pane.jsbitmark-api/wallet.js,docs/docs/ecosystem/api.md