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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions