feat: update getSignatureStatus

This commit is contained in:
Justin Starry
2020-03-23 23:01:12 +08:00
committed by Michael Vines
parent ac8660b2e9
commit 1c31e527e2
7 changed files with 152 additions and 26 deletions

View File

@ -452,7 +452,15 @@ const GetVoteAccounts = jsonRpcResult(
* Expected JSON RPC response for the "getSignatureStatus" message
*/
const GetSignatureStatusRpcResult = jsonRpcResult(
struct.union(['null', SignatureStatusResult]),
struct.array([
struct.union([
'null',
struct({
slot: 'number',
status: SignatureStatusResult,
}),
]),
]),
);
/**
@ -660,6 +668,18 @@ export type TransactionError = {|
Err: Object,
|};
/**
* Signature status
*
* @typedef {Object} SignatureStatus
* @property {number} slot when the transaction was processed
* @property {SignatureStatus | TransactionError} status
*/
export type SignatureStatus = {
slot: number,
status: SignatureSuccess | TransactionError,
};
/**
* A connection to a fullnode JSON RPC endpoint
*/
@ -944,8 +964,20 @@ export class Connection {
async getSignatureStatus(
signature: TransactionSignature,
commitment: ?Commitment,
): Promise<SignatureSuccess | TransactionError | null> {
const args = this._argsWithCommitment([signature], commitment);
): Promise<SignatureStatus | null> {
const res = await this.getSignatureStatusBatch([signature], commitment);
assert(res.length === 1);
return res[0];
}
/**
* Fetch the current status of a signature
*/
async getSignatureStatusBatch(
signatures: Array<TransactionSignature>,
commitment: ?Commitment,
): Promise<Array<SignatureStatus | null>> {
const args = this._argsWithCommitment([signatures], commitment);
const unsafeRes = await this._rpcRequest('getSignatureStatus', args);
const res = GetSignatureStatusRpcResult(unsafeRes);
if (res.error) {