@atomiqlabs/base
Version:
Base classes and interfaces for atomiq protocol
59 lines (55 loc) • 2.1 kB
text/typescript
import {BtcStoredHeader} from "../types/BtcStoredHeader";
import {BtcBlock} from "../types/BtcBlock";
export type SynchronizationResponse<V extends BtcStoredHeader<any>, T, B extends BtcBlock> = {
/**
* Transactions required to synchronize the btc relay
*/
txs: T[],
/**
* Latest committed header after synchronization
*/
targetCommitedHeader: V,
/**
* Latest block header after synchronization
*/
latestBlockHeader: B,
/**
* Mapping of synchronized committed headers, based on blockheight
*/
computedHeaderMap: {[blockheight: number]: V},
/**
* Mapping of synchronized block headers, based on blockheight
*/
blockHeaderMap: {[blockheight: number]: B},
/**
* Tip committed header of the btc relay before synchronization
*/
btcRelayTipCommitedHeader: V,
/**
* Tip block header of the btc relay before synchronization
*/
btcRelayTipBlockHeader: B,
/**
* A fork ID that was used to re-org the chain to the current canonical chain
*/
startForkId?: number
};
/**
* An interface for a synchronizer of the BTC relay bitcoin light client contract, produces transactions
* necessary to synchronize the underlying relay contract to the current tip of the canonical chain,
* automatically handles forking if necessary
*
* @category Chains
*/
export interface RelaySynchronizer<V extends BtcStoredHeader<any>, T, B extends BtcBlock> {
/**
* Returns the transactions necessary to synchronize the BTC relay contract to the
* tip of the canonical chain. Also returns the various bitcoin blockheaders that
* are to-be-synced to the relay, such that they can be used to already pre-create
* transactions, which require the stored blockheaders
*
* @param signer Transactions signer's address
* @param feeRate Optional fee rate to use for the transactions
*/
syncToLatestTxs(signer: string, feeRate?: string): Promise<SynchronizationResponse<V, T, B>>;
}