# Class BSV::Transaction::BeefParty <a id="class-BSV-Transaction-BeefParty"></a>

**Inherits:** `BSV::Transaction::Beef`

Transaction::Beef subclass that tracks per-party knowledge of wtxids.

Used in multi-party BEEF exchange to avoid re-transmitting transaction data
and proofs that a counterparty already possesses. Each party is identified by
a caller-supplied string and associated with the set of wtxids it is known to
hold.

**@example Two-party exchange**
```ruby
party = BSV::Transaction::BeefParty.new(['alice', 'bob'])
party.merge_beef_from_party('alice', alice_beef)
trimmed = party.trimmed_beef_for_party('bob')  # plain Transaction::Beef
```

## Public Instance Methods
### `add_known_wtxids_for_party(party_id, wtxids)` <a id="method-i-add_known_wtxids_for_party"></a> <a id="add_known_wtxids_for_party-instance_method"></a>
Record additional wtxids as known to `party_id`.

Auto-creates the party if it is not yet known (TS parity). Also merges a
TXID-only entry into the underlying bundle for each wtxid.
- **@param** `party_id` [String] party identifier (auto-created if unknown)
- **@param** `wtxids` [Array<String>] 32-byte wire-order binary wtxids
- **@raise** [ArgumentError] if any element of +wtxids+ is not a valid wtxid

### `add_party(party_id)` <a id="method-i-add_party"></a> <a id="add_party-instance_method"></a>
Add a new unique party identifier.
- **@param** `party_id` [String]
- **@raise** [ArgumentError] if +party_id+ is already known

### `initialize(initial_parties = [])` <a id="method-i-initialize"></a> <a id="initialize-instance_method"></a>
Defaults to BEEF_V2 (BRC-96) because TXID-only entries — which are central to
BeefParty's purpose — are only valid in V2. Matches the TS SDK's +new Beef()+
default.
- **@param** `initial_parties` [Array<String>] optional initial party identifiers
- **@raise** [ArgumentError] if +initial_parties+ contains duplicates
- **@return** [BeefParty] a new instance of BeefParty

### `known_wtxids_for_party(party_id)` <a id="method-i-known_wtxids_for_party"></a> <a id="known_wtxids_for_party-instance_method"></a>
- **@param** `party_id` [String]
- **@raise** [ArgumentError] if +party_id+ is unknown
- **@return** [Array<String>] 32-byte wire-order binary wtxids known to +party_id+

### `merge_beef_from_party(party_id, beef_or_binary)` <a id="method-i-merge_beef_from_party"></a> <a id="merge_beef_from_party-instance_method"></a>
Merge a Transaction::Beef received from `party_id`.

Merges all transactions and BUMPs from `beef_or_binary` into `self`, then
records the valid wtxids of the merged bundle as known to `party_id`.
Auto-creates the party if not yet known.
- **@param** `party_id` [String] party identifier
- **@param** `beef_or_binary` [Transaction::Beef, String] a Transaction::Beef
instance or raw binary BEEF bytes

### `party?(party_id)` <a id="method-i-party-3F"></a> <a id="party?-instance_method"></a>
- **@param** `party_id` [String]
- **@return** [Boolean] true if +party_id+ has been added

### `trimmed_beef_for_party(party_id)` <a id="method-i-trimmed_beef_for_party"></a> <a id="trimmed_beef_for_party-instance_method"></a>
Return a new Transaction::Beef (not Transaction::BeefParty) with TXID-only
entries that are known to `party_id` removed.

RAW_TX and RAW_TX_AND_BUMP entries are always retained even when the party
knows the txid — those formats carry proof data. BUMP indices are renumbered
if any unreferenced bumps are dropped.

Does not mutate `self`.
- **@param** `party_id` [String]
- **@raise** [ArgumentError] if +party_id+ is unknown
- **@return** [Transaction::Beef] a new trimmed bundle (plain Beef, not BeefParty)
