# Class BSV::Wallet::BRC100 <a id="class-BSV-Wallet-BRC100"></a>

**Inherits:** `Object`
**Includes:** `BSV::Wallet::Interface::BRC100`

The 28 BRC-100 spec methods, composed over an Engine instance.

Lifecycle of this class:
*   #364, Phase 7 of #291 "Monolith to Manageable" — sliced out of Engine as a
    `module` included into Engine (mixin facade).
*   #400, Stage 1 of #396 "Manageable to Machined" — relocated to a sibling of
    Engine at <code>BSV::Wallet::BRC100</code>.
*   #402, Stage 2 — thinned to a uniform "validate → primitive → wrap" shape
    over Engine's <code>do_*</code> surface (still a mixin).
*   #405, Stage 3 (this) — promoted from `module` to `class` composed over an
    Engine instance via +initialize(engine)+. Engine no longer includes BRC100
    in its ancestry; +Engine#brc100+ returns a memoised wrapper. The `do_`
    prefix Stage 2 scaffolded onto Engine's primitives is dropped in commit 4
    of this stage.

Construction: +BSV::Wallet::BRC100.new(engine)+ — or, idiomatically, via the
+Engine#brc100+ memoised accessor.

Responsibility split per ADR-026:
*   Spec-shape validation (decision 6) lives here — the
    <code>validate_*</code> private methods at the bottom of the file. Engine
    primitives trust their input shape.
*   BRC-100 vocabulary translation (decision 5) lives here — each method takes
    wallet vocab from the Engine primitive and wraps in the BRC-100 hash shape
    the spec mandates.
*   <code>originator:</code> (decision 7) is accepted at this layer for
    BRC-100 spec compliance but never propagates into Engine.

Method-resolution: +include+s the SDK contract <code>Interface::BRC100</code>,
so any of the 28 method names a concrete instance doesn't override falls
through to the contract's `NotImplementedError` stub.

## Constants
### `BASKET_NAME_CHARSET_RE` <a id="constant-BASKET_NAME_CHARSET_RE"></a> <a id="BASKET_NAME_CHARSET_RE-constant"></a>
Not documented.

### `BASKET_NAME_MAX` <a id="constant-BASKET_NAME_MAX"></a> <a id="BASKET_NAME_MAX-constant"></a>
Not documented.

### `BASKET_NAME_MIN` <a id="constant-BASKET_NAME_MIN"></a> <a id="BASKET_NAME_MIN-constant"></a>
Basket-name validation constants (HLR #428).

BRC-100 §"Rules for Basket Names" carries an internal inconsistency: the prose
says 400, but the TS type `BasketStringUnder300Characters` used on every
basket-bearing field says 300. We adopt 300 — the TS type is what conformant
callers validate their inputs against. See
<code>docs/reference/brc100-conformance.md</code> "Basket length limit — note
a spec inconsistency" for the recorded reasoning; an upstream tracker against
<code>bitcoin-sv/BRCs</code> surfaces our position.

Charset is byte-level ASCII to reject Unicode lookalikes (e.g. Cyrillic +а+
U+0430 sneaking into +'аdmin foo'+) on the charset rule rather than letting
them slip through the reserved-name rule.

## Attributes
### `engine` [R] <a id="attribute-i-engine"></a> <a id="engine-instance_method"></a>
Returns the value of attribute engine.

## Public Instance Methods
### `abort_action(reference:, originator: = nil)` <a id="method-i-abort_action"></a> <a id="abort_action-instance_method"></a>
Not documented.

### `acquire_certificate(type:, certifier:, acquisition_protocol:, fields:, serial_number: = nil, revocation_outpoint: = nil, signature: = nil, certifier_url: = nil, keyring_revealer: = nil, keyring_for_subject: = nil, privileged: = false, privileged_reason: = nil, originator: = nil)` <a id="method-i-acquire_certificate"></a> <a id="acquire_certificate-instance_method"></a>
--- Identity and Certificate Management (codes 17-22) ---

### `authenticated?(originator: = nil)` <a id="method-i-authenticated-3F"></a> <a id="authenticated?-instance_method"></a>
--- Authentication (codes 23-24) ---
- **@return** [Boolean]

### `create_action(description:, input_beef: = nil, inputs: = nil, outputs: = nil, lock_time: = nil, version: = nil, labels: = nil, sign_and_process: = true, accept_delayed_broadcast: = true, trust_self: = nil, return_txid_only: = false, no_send: = false, change_count: = nil, randomize_outputs: = true, originator: = nil)` <a id="method-i-create_action"></a> <a id="create_action-instance_method"></a>
Create a BRC-100 action (Phases 1, 2, optionally 3, optionally 4).

Composes the funding primitives:
    1. Phase 1a creates an empty action row (inputs: []) — the
       initial-and-top-up locks share one retried path off this seam.
    2. Phase 1b acquires inputs via Engine::FundingStrategy:
       - inputs: nil  → selects to cover sum(outputs); fixpoint loop
         tops up on shortfall (#213 bounded retry on contention).
       - inputs: [...] → locked as-is once; shortfall raises
         InsufficientFundsError immediately (no top-up).
       TxBuilder#build_change is invoked through a one-way build
       seam and returns the finished {wtxid, raw_tx, vout_mapping,
       change_outputs, tx} on convergence.
       Pool depletion or contention-retry exhaustion ⇒
       InsufficientFundsError; the empty action row is aborted.
    3. Phase 3 / 4 follow the broadcast intent (send path versus
       internal path); see docs/concepts/action-lifecycle.md.

Deferred signing (sign_and_process: false, caller-supplied inputs only) skips
the funding loop entirely and returns a signable handle.

Per-output `spendable_intent` translation (HLR #467 /
<code>docs/reference/intent-and-outcomes.md</code>,
<code>docs/reference/core-vs-conformance.md</code>): Engine requires every
output spec to state <code>:spendable_intent</code> explicitly; this
conformance wrapper bridges from the BRC-100 vocabulary by accepting an
optional <code>:spendable</code> flag per output (the spec's Int8
representation, `false` / `true` / absent) and defaulting absent entries to
+'spendable'+. The BRC-100 spec assumes self-owned outputs under
`createAction` — the default reflects that assumption. Callers that need to
declare an outbound output (recipient-owned, never joins the wallet UTXO set)
set +spendable: false+ and the wrapper translates to +spendable_intent:
'none'+. The default is at the conformance layer only; the engine surface
itself still demands explicit intent so no inference re-enters the data path.
- **@return** [Hash] either { txid:, tx: } (signed),
{ signable_transaction: { tx:, reference: } } (deferred), or
{ txid:, tx:, no_send_change: } (internal path with no_send: true).

### `create_hmac(data:, protocol_id:, key_id:, privileged: = false, privileged_reason: = nil, counterparty: = nil, seek_permission: = true, originator: = nil)` <a id="method-i-create_hmac"></a> <a id="create_hmac-instance_method"></a>
Not documented.

### `create_signature(protocol_id:, key_id:, data: = nil, hash_to_directly_sign: = nil, privileged: = false, privileged_reason: = nil, counterparty: = nil, seek_permission: = true, originator: = nil)` <a id="method-i-create_signature"></a> <a id="create_signature-instance_method"></a>
Not documented.

### `decrypt(ciphertext:, protocol_id:, key_id:, privileged: = false, privileged_reason: = nil, counterparty: = nil, seek_permission: = true, originator: = nil)` <a id="method-i-decrypt"></a> <a id="decrypt-instance_method"></a>
Not documented.

### `discover_by_attributes(attributes:, limit: = 10, offset: = 0, seek_permission: = true, originator: = nil)` <a id="method-i-discover_by_attributes"></a> <a id="discover_by_attributes-instance_method"></a>
Not documented.

### `discover_by_identity_key(identity_key:, limit: = 10, offset: = 0, seek_permission: = true, originator: = nil)` <a id="method-i-discover_by_identity_key"></a> <a id="discover_by_identity_key-instance_method"></a>
Not documented.

### `encrypt(plaintext:, protocol_id:, key_id:, privileged: = false, privileged_reason: = nil, counterparty: = nil, seek_permission: = true, originator: = nil)` <a id="method-i-encrypt"></a> <a id="encrypt-instance_method"></a>
--- Cryptography Operations (codes 11-16) ---

### `get_header_for_height(height:, originator: = nil)` <a id="method-i-get_header_for_height"></a> <a id="get_header_for_height-instance_method"></a>
Not documented.

### `get_height(originator: = nil)` <a id="method-i-get_height"></a> <a id="get_height-instance_method"></a>
--- Blockchain and Network Data (codes 25-28) ---

### `get_network(originator: = nil)` <a id="method-i-get_network"></a> <a id="get_network-instance_method"></a>
Not documented.

### `get_public_key(identity_key: = false, protocol_id: = nil, key_id: = nil, privileged: = false, privileged_reason: = nil, counterparty: = nil, for_self: = false, seek_permission: = true, originator: = nil)` <a id="method-i-get_public_key"></a> <a id="get_public_key-instance_method"></a>
--- Public Key Management (codes 8-10) ---

### `get_version(originator: = nil)` <a id="method-i-get_version"></a> <a id="get_version-instance_method"></a>
Not documented.

### `initialize(engine)` <a id="method-i-initialize"></a> <a id="initialize-instance_method"></a>
- **@return** [BRC100] a new instance of BRC100

### `internalize_action(tx:, outputs:, description:, labels: = nil, trust_self: = nil, known_txids: = nil, seek_permission: = true, originator: = nil)` <a id="method-i-internalize_action"></a> <a id="internalize_action-instance_method"></a>
Not documented.

### `list_actions(labels:, label_query_mode: = :any, include_labels: = false, include_inputs: = false, include_input_source_locking_scripts: = false, include_input_unlocking_scripts: = false, include_outputs: = false, include_output_locking_scripts: = false, limit: = 10, offset: = 0, seek_permission: = true, originator: = nil)` <a id="method-i-list_actions"></a> <a id="list_actions-instance_method"></a>
Not documented.

### `list_certificates(certifiers:, types:, limit: = 10, offset: = 0, privileged: = false, privileged_reason: = nil, originator: = nil)` <a id="method-i-list_certificates"></a> <a id="list_certificates-instance_method"></a>
Not documented.

### `list_outputs(basket:, tags: = nil, tag_query_mode: = :any, include: = nil, include_custom_instructions: = false, include_tags: = false, include_labels: = false, limit: = 10, offset: = 0, seek_permission: = true, originator: = nil)` <a id="method-i-list_outputs"></a> <a id="list_outputs-instance_method"></a>
Not documented.

### `prove_certificate(certificate:, fields_to_reveal:, verifier:, privileged: = false, privileged_reason: = nil, originator: = nil)` <a id="method-i-prove_certificate"></a> <a id="prove_certificate-instance_method"></a>
Not documented.

### `relinquish_certificate(type:, serial_number:, certifier:, originator: = nil)` <a id="method-i-relinquish_certificate"></a> <a id="relinquish_certificate-instance_method"></a>
Not documented.

### `relinquish_output(basket:, output:, originator: = nil)` <a id="method-i-relinquish_output"></a> <a id="relinquish_output-instance_method"></a>
Not documented.

### `reveal_counterparty_key_linkage(counterparty:, verifier:, privileged: = false, privileged_reason: = nil, originator: = nil)` <a id="method-i-reveal_counterparty_key_linkage"></a> <a id="reveal_counterparty_key_linkage-instance_method"></a>
Not documented.

### `reveal_specific_key_linkage(counterparty:, verifier:, protocol_id:, key_id:, privileged: = false, privileged_reason: = nil, originator: = nil)` <a id="method-i-reveal_specific_key_linkage"></a> <a id="reveal_specific_key_linkage-instance_method"></a>
Not documented.

### `sign_action(spends:, reference:, accept_delayed_broadcast: = true, return_txid_only: = false, no_send: = false, originator: = nil)` <a id="method-i-sign_action"></a> <a id="sign_action-instance_method"></a>
Not documented.

### `verify_hmac(data:, hmac:, protocol_id:, key_id:, privileged: = false, privileged_reason: = nil, counterparty: = nil, seek_permission: = true, originator: = nil)` <a id="method-i-verify_hmac"></a> <a id="verify_hmac-instance_method"></a>
- **@raise** [BSV::Wallet::InvalidHmacError]

### `verify_signature(signature:, protocol_id:, key_id:, data: = nil, hash_to_directly_verify: = nil, privileged: = false, privileged_reason: = nil, counterparty: = nil, for_self: = false, seek_permission: = true, originator: = nil)` <a id="method-i-verify_signature"></a> <a id="verify_signature-instance_method"></a>
- **@raise** [BSV::Wallet::InvalidSignatureError]

### `wait_for_authentication(originator: = nil)` <a id="method-i-wait_for_authentication"></a> <a id="wait_for_authentication-instance_method"></a>
Not documented.
