undedoloremque
Version:
Green Field JS SDK
165 lines (143 loc) • 5.14 kB
text/typescript
import {
QueryCrossChainPackageRequest,
QueryCrossChainPackageResponse,
QueryReceiveSequenceRequest,
QueryReceiveSequenceResponse,
QuerySendSequenceRequest,
QuerySendSequenceResponse,
} from '@bnb-chain/greenfield-cosmos-types/cosmos/crosschain/v1/query';
import { QueryInturnRelayerResponse } from '@bnb-chain/greenfield-cosmos-types/cosmos/oracle/v1/query';
import { MsgClaim } from '@bnb-chain/greenfield-cosmos-types/cosmos/oracle/v1/tx';
import { QueryParamsResponse } from '@bnb-chain/greenfield-cosmos-types/greenfield/bridge/query';
import { MsgTransferOut } from '@bnb-chain/greenfield-cosmos-types/greenfield/bridge/tx';
import {
MsgMirrorBucket,
MsgMirrorGroup,
MsgMirrorObject,
} from '@bnb-chain/greenfield-cosmos-types/greenfield/storage/tx';
import { container, delay, inject, injectable } from 'tsyringe';
import {
MsgClaimTypeUrl,
MsgMirrorBucketTypeUrl,
MsgMirrorGroupTypeUrl,
MsgMirrorObjectTypeUrl,
MsgTransferOutTypeUrl,
TxResponse,
} from '..';
import { RpcQueryClient } from '../clients/queryclient';
import { TxClient } from '../clients/txClient';
import { MsgClaimSDKTypeEIP712 } from '../messages/cosmos/oracle/MsgClaim';
import { MsgTransferOutSDKTypeEIP712 } from '../messages/greenfield/bridge/MsgTransferOut';
import { MsgMirrorBucketSDKTypeEIP712 } from '../messages/greenfield/storage/MsgMirrorBucket';
import { MsgMirrorGroupSDKTypeEIP712 } from '../messages/greenfield/storage/MsgMirrorGroup';
import { MsgMirrorObjectSDKTypeEIP712 } from '../messages/greenfield/storage/MsgMirrorObject';
export interface ICrossChain {
/**
* makes a transfer from Greenfield to BSC
*/
transferOut(msg: MsgTransferOut): Promise<TxResponse>;
/**
* cross-chain packages from BSC to Greenfield, used by relayers which run by validators
*/
claims(msg: MsgClaim): Promise<TxResponse>;
/**
* gets the next send sequence for a channel
*/
getChannelSendSequence(request: QuerySendSequenceRequest): Promise<QuerySendSequenceResponse>;
/**
* gets the next receive sequence for a channel
*/
getChannelReceiveSequence(
request: QueryReceiveSequenceRequest,
): Promise<QueryReceiveSequenceResponse>;
/**
* gets the in-turn relayer bls public key and its relay interval
*/
getInturnRelayer(): Promise<QueryInturnRelayerResponse>;
getCrosschainPackage(
request: QueryCrossChainPackageRequest,
): Promise<QueryCrossChainPackageResponse>;
/**
* mirrors the group to BSC as NFT
*/
mirrorGroup(msg: MsgMirrorGroup): Promise<TxResponse>;
/**
* mirrors the bucket to BSC as NFT
*/
mirrorBucket(msg: MsgMirrorBucket): Promise<TxResponse>;
/**
* mirrors the object to BSC as NFT
*/
mirrorObject(msg: MsgMirrorObject): Promise<TxResponse>;
getParams(): Promise<QueryParamsResponse>;
}
()
export class CrossChain implements ICrossChain {
constructor((delay(() => TxClient)) private txClient: TxClient) {}
private queryClient: RpcQueryClient = container.resolve(RpcQueryClient);
public async transferOut(msg: MsgTransferOut) {
return await this.txClient.tx(
MsgTransferOutTypeUrl,
msg.from,
MsgTransferOutSDKTypeEIP712,
MsgTransferOut.toSDK(msg),
MsgTransferOut.encode(msg).finish(),
);
}
public async claims(msg: MsgClaim) {
return await this.txClient.tx(
MsgClaimTypeUrl,
msg.fromAddress,
MsgClaimSDKTypeEIP712,
MsgClaim.toSDK(msg),
MsgClaim.encode(msg).finish(),
);
}
public async getChannelSendSequence(request: QuerySendSequenceRequest) {
const rpc = await this.queryClient.getCrosschainQueryClient();
return await rpc.SendSequence(request);
}
public async getChannelReceiveSequence(request: QueryReceiveSequenceRequest) {
const rpc = await this.queryClient.getCrosschainQueryClient();
return await rpc.ReceiveSequence(request);
}
public async getInturnRelayer() {
const rpc = await this.queryClient.getOracleQueryClient();
return await rpc.InturnRelayer();
}
public async getCrosschainPackage(request: QueryCrossChainPackageRequest) {
const rpc = await this.queryClient.getCrosschainQueryClient();
return await rpc.CrossChainPackage(request);
}
public async mirrorGroup(msg: MsgMirrorGroup) {
return await this.txClient.tx(
MsgMirrorGroupTypeUrl,
msg.operator,
MsgMirrorGroupSDKTypeEIP712,
MsgMirrorGroup.toSDK(msg),
MsgMirrorGroup.encode(msg).finish(),
);
}
public async mirrorBucket(msg: MsgMirrorBucket) {
return await this.txClient.tx(
MsgMirrorBucketTypeUrl,
msg.operator,
MsgMirrorBucketSDKTypeEIP712,
MsgMirrorBucket.toSDK(msg),
MsgMirrorBucket.encode(msg).finish(),
);
}
public async mirrorObject(msg: MsgMirrorObject) {
return await this.txClient.tx(
MsgMirrorObjectTypeUrl,
msg.operator,
MsgMirrorObjectSDKTypeEIP712,
MsgMirrorObject.toSDK(msg),
MsgMirrorObject.encode(msg).finish(),
);
}
async getParams() {
const rpc = await this.queryClient.getBridgeQueryClient();
return rpc.Params();
}
}