@lucoadam/zebec-wormhole-sdk
Version:
This sdk can be use to transfer assets across chains and to interact with the Zebec's xchain bridge smart contracts for passing message from EVM chain to solana specially to utilize the features of Zebec Streaming and Zebec Multisig Streaming protocol.
155 lines (154 loc) • 7.25 kB
TypeScript
import { ChainId } from "@certusone/wormhole-sdk";
import * as anchor from "@project-serum/anchor";
import { AnchorProvider, web3 } from "@project-serum/anchor";
import { PublicKey } from "@solana/web3.js";
import { CancelTokenStreamPayload, DirectTokenTransferPayload, InstantTokenTransferPayload, PauseTokenStreamPayload, TokenDepositPayload, TokenStreamPayload, TokenStreamUpdatePayload, TokenWithdrawPayload, TokenWithdrawStreamPayload } from "../parser";
/**
* Response type for zebec sol bridge client
*/
export declare type ClientResult = {
status: "success" | "error";
message: string;
data?: {
signatures: string[];
dataAccount?: string;
transactionAccount?: string;
};
};
export interface IZebecSolBridgeClient {
/**
* Intializes config account
* @param feePayer fee payer for config account
*/
initialize(feePayer: PublicKey): Promise<string>;
/**
* Registers xchain emitters to retreive vaa emitted.
* @param emitterAddress xchain emitter's hex address
* @param emitterChain chain id where xchain emitter is deployed
*/
registerEmitterAddress(emitterAddress: string, emitterChain: ChainId): Promise<string>;
/**
* Calls solana zebec bridge program to make cpi to zebec program for deposit token
* @param vaa Signed vaa array
* @param payload Payload for token deposit
*/
depositToken(vaa: Uint8Array, payload: TokenDepositPayload): Promise<ClientResult>;
/**
* Calls solana zebec bridge program to make cpi to zebec program for withdraw deposited token
* @param vaa Signed vaa array
* @param payload Payload for token deposit
*/
withdrawDeposit(vaa: Uint8Array, payload: TokenWithdrawPayload): Promise<ClientResult>;
/**
* Calls solana zebec bridge program to make cpi to zebec program for start token stream
* @param vaa Signed vaa array
* @param payload Payload for token deposit
*/
initializeStream(vaa: Uint8Array, payload: TokenStreamPayload): Promise<ClientResult>;
/**
* Calls solana zebec bridge program to make cpi to zebec program for withdraw streamed token
* @param vaa Signed vaa array
* @param payload Payload for token deposit
*/
withdrawStreamToken(vaa: Uint8Array, payload: TokenWithdrawStreamPayload): Promise<ClientResult>;
/**
* Calls solana zebec bridge program to make cpi to zebec program for update token stream
* @param vaa Signed vaa array
* @param payload Payload for token deposit
*/
updateStreamToken(vaa: Uint8Array, payload: TokenStreamUpdatePayload): Promise<ClientResult>;
/**
* Calls solana zebec bridge program to make cpi to zebec program for cancel token stream
* @param vaa Signed vaa array
* @param payload Payload for token deposit
*/
cancelStream(vaa: Uint8Array, payload: CancelTokenStreamPayload): Promise<ClientResult>;
/**
* Calls solana zebec bridge program to make cpi to zebec program for pause or resume token stream
* @param vaa Signed vaa array
* @param payload Payload for token deposit
*/
pauseResumeStream(vaa: Uint8Array, payload: PauseTokenStreamPayload): Promise<ClientResult>;
/**
* Transfers token from user's zebec vault to specified receiver.
* @param vaa Signed vaa array
* @param payload Payload for token transfer
*/
instantTokenTransfer(vaa: Uint8Array, payload: InstantTokenTransferPayload): Promise<ClientResult>;
}
export declare class ZebecSolBridgeClient implements IZebecSolBridgeClient {
private readonly _bridgeProgram;
private readonly _zebecProgram;
private readonly _provider;
private static readonly ZebecProgramId;
private readonly _transactions;
private readonly _zebecInstructions;
/**
* Bridge program id of zebec sol bridge client
*/
static readonly BridgeProgramId: PublicKey;
constructor(provider: AnchorProvider);
/**
* Gets solana address for xchain user accounts
* @param address xchain user address
* @param chainId source chain id of xchain user
* @deprecated
* This method is to going to be removed soon. Transfer funds from accounts
* created using this methods to other accounts.
* Use `getProxyUserKey` instead.
*/
static getXChainUserKey(address: Uint8Array, chainId: ChainId): PublicKey;
/**
* Gets proxy solana account for xchain user address
* @param address address of xchain user other than solana
* @param chainId chain id of xchain user
*/
static getProxyUserKey(address: string | Uint8Array, chainId: ChainId): PublicKey;
/**
* Gets emitter account address for given chain id
* @param chainId source chain id of emitter
* @returns
*/
static getEmitterAccountKey(chainId: ChainId): PublicKey;
/**
* Gets process vaa account key
* @param emitterChain source chain id of emitter chain
* @param emitterAddress emitter address
* @param sequence sequence of transaction being emitted
* @returns
*/
static getProcessVaaKey(emitterChain: ChainId, emitterAddress: string, sequence: number): Promise<web3.PublicKey>;
private static parseEmitterAddressHex;
/**
* Gets core bridge vaa account address
* @param timestamp timestamp in vaa
* @param nonce nonce in vaa
* @param emitterChain emitter chain id in vaa
* @param emitterAddress emitter address in vaa
* @param sequence sequence in vaa
* @param consistencyLevel consistency level in vaa
* @param payload payload in vaa
* @returns
*/
static getCoreBridgeVaaKey(timestamp: any, nonce: any, emitterChain: any, emitterAddress: any, sequence: any, consistencyLevel: any, payload: any): Promise<anchor.web3.PublicKey>;
/**
* Gets config account address
* @returns
*/
static getConfigAccountKey(programId?: PublicKey): PublicKey;
private getDataStoragePda;
private getTransactionCountKey;
private getCurrentCount;
private sendAndConfirm;
initialize(): Promise<string>;
registerEmitterAddress(emitterAddress: string, emitterChain: ChainId): Promise<string>;
depositToken(vaa: Uint8Array, payload: TokenDepositPayload): Promise<ClientResult>;
withdrawDeposit(vaa: Uint8Array, payload: TokenWithdrawPayload): Promise<ClientResult>;
initializeStream(vaa: Uint8Array, payload: TokenStreamPayload): Promise<ClientResult>;
withdrawStreamToken(vaa: Uint8Array, payload: TokenWithdrawStreamPayload): Promise<ClientResult>;
cancelStream(vaa: Uint8Array, payload: CancelTokenStreamPayload): Promise<ClientResult>;
pauseResumeStream(vaa: Uint8Array, payload: PauseTokenStreamPayload): Promise<ClientResult>;
updateStreamToken(vaa: Uint8Array, payload: TokenStreamUpdatePayload): Promise<ClientResult>;
instantTokenTransfer(vaa: Uint8Array, payload: InstantTokenTransferPayload): Promise<ClientResult>;
directTokenTransfer(vaa: Uint8Array, payload: DirectTokenTransferPayload): Promise<ClientResult>;
}