@bsv/sdk
Version:
BSV Blockchain Software Development Kit
105 lines • 5.39 kB
TypeScript
import { Transaction, BroadcastResponse, BroadcastFailure, Broadcaster } from '../transaction/index.js';
import LookupResolver from './LookupResolver.js';
/**
* Tagged BEEF
*
* @description
* Tagged BEEF ([Background Evaluation Extended Format](https://brc.dev/62)) structure. Comprises a transaction, its SPV information, and the overlay topics where its inclusion is requested.
*/
export interface TaggedBEEF {
beef: number[];
topics: string[];
offChainValues?: number[];
}
/**
* Instructs the Overlay Services Engine about which outputs to admit and which previous outputs to retain. Returned by a Topic Manager.
*/
export interface AdmittanceInstructions {
/**
* The indices of all admissible outputs into the managed topic from the provided transaction.
*/
outputsToAdmit: number[];
/**
* The indices of all inputs from the provided transaction which spend previously-admitted outputs that should be retained for historical record-keeping.
*/
coinsToRetain: number[];
/**
* The indices of all inputs from the provided transaction which reference previously-admitted outputs,
* which are now considered spent and have been removed from the managed topic.
*/
coinsRemoved?: number[];
}
/**
* Submitted Transaction Execution AcKnowledgment
*
* @description
* Comprises the topics where a transaction was submitted, and for each one, the output indices for the UTXOs newly admitted into the topics, and the coins retained.
* An object whose keys are topic names and whose values are topical admittance instructions denoting the state of the submitted transaction with respect to the associated topic.
*/
export type STEAK = Record<string, AdmittanceInstructions>;
/** Configuration options for the SHIP broadcaster. */
export interface SHIPBroadcasterConfig {
/**
* The network preset to use, unless other options override it.
* - mainnet: use mainnet resolver and HTTPS facilitator
* - testnet: use testnet resolver and HTTPS facilitator
* - local: directly send to localhost:8080 and a facilitator that permits plain HTTP
*/
networkPreset?: 'mainnet' | 'testnet' | 'local';
/** The facilitator used to make requests to Overlay Services hosts. */
facilitator?: OverlayBroadcastFacilitator;
/** The resolver used to locate suitable hosts with SHIP */
resolver?: LookupResolver;
/** Determines which topics (all, any, or a specific list) must be present within all STEAKs received from every host for the broadcast to be considered a success. By default, all hosts must acknowledge all topics. */
requireAcknowledgmentFromAllHostsForTopics?: 'all' | 'any' | string[];
/** Determines which topics (all, any, or a specific list) must be present within STEAK received from at least one host for the broadcast to be considered a success. */
requireAcknowledgmentFromAnyHostForTopics?: 'all' | 'any' | string[];
/** Determines a mapping whose keys are specific hosts and whose values are the topics (all, any, or a specific list) that must be present within the STEAK received by the given hosts, in order for the broadcast to be considered a success. */
requireAcknowledgmentFromSpecificHostsForTopics?: Record<string, 'all' | 'any' | string[]>;
}
/** Facilitates transaction broadcasts that return STEAK. */
export interface OverlayBroadcastFacilitator {
send: (url: string, taggedBEEF: TaggedBEEF) => Promise<STEAK>;
}
export declare class HTTPSOverlayBroadcastFacilitator implements OverlayBroadcastFacilitator {
httpClient: typeof fetch;
allowHTTP: boolean;
constructor(httpClient?: typeof fetch, allowHTTP?: boolean);
send(url: string, taggedBEEF: TaggedBEEF): Promise<STEAK>;
}
/**
* Broadcasts transactions to one or more overlay topics.
*/
export default class TopicBroadcaster implements Broadcaster {
private readonly topics;
private readonly facilitator;
private readonly resolver;
private readonly requireAcknowledgmentFromAllHostsForTopics;
private readonly requireAcknowledgmentFromAnyHostForTopics;
private readonly requireAcknowledgmentFromSpecificHostsForTopics;
private readonly networkPreset;
/**
* Constructs an instance of the SHIP broadcaster.
*
* @param {string[]} topics - The list of SHIP topic names where transactions are to be sent.
* @param {SHIPBroadcasterConfig} config - Configuration options for the SHIP broadcaster.
*/
constructor(topics: string[], config?: SHIPBroadcasterConfig);
/**
* Broadcasts a transaction to Overlay Services via SHIP.
*
* @param {Transaction} tx - The transaction to be sent.
* @returns {Promise<BroadcastResponse | BroadcastFailure>} A promise that resolves to either a success or failure response.
*/
broadcast(tx: Transaction): Promise<BroadcastResponse | BroadcastFailure>;
private checkAcknowledgmentFromAllHosts;
private checkAcknowledgmentFromAnyHost;
private checkAcknowledgmentFromSpecificHosts;
/**
* Finds which hosts are interested in transactions tagged with the given set of topics.
*
* @returns A mapping of URLs for hosts interested in this transaction. Keys are URLs, values are which of our topics the specific host cares about.
*/
private findInterestedHosts;
}
//# sourceMappingURL=SHIPBroadcaster.d.ts.map