Skip to content

Feature: add Marking (on-chain endorsements via OP_RETURN) to the wallet #2

Description

@melvincarvalho

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions