feat: support commitment in getConfirmed methods
This commit is contained in:
parent
a99ee15a85
commit
30c95d38a5
|
@ -2596,8 +2596,12 @@ export class Connection {
|
||||||
* Fetch a list of Transactions and transaction statuses from the cluster
|
* Fetch a list of Transactions and transaction statuses from the cluster
|
||||||
* for a confirmed block
|
* for a confirmed block
|
||||||
*/
|
*/
|
||||||
async getConfirmedBlock(slot: number): Promise<ConfirmedBlock> {
|
async getConfirmedBlock(
|
||||||
const unsafeRes = await this._rpcRequest('getConfirmedBlock', [slot]);
|
slot: number,
|
||||||
|
commitment?: Finality,
|
||||||
|
): Promise<ConfirmedBlock> {
|
||||||
|
const args = this._buildArgsAtLeastConfirmed([slot], commitment);
|
||||||
|
const unsafeRes = await this._rpcRequest('getConfirmedBlock', args);
|
||||||
const res = create(unsafeRes, GetConfirmedBlockRpcResult);
|
const res = create(unsafeRes, GetConfirmedBlockRpcResult);
|
||||||
if ('error' in res) {
|
if ('error' in res) {
|
||||||
throw new Error('failed to get confirmed block: ' + res.error.message);
|
throw new Error('failed to get confirmed block: ' + res.error.message);
|
||||||
|
@ -2614,11 +2618,18 @@ export class Connection {
|
||||||
*/
|
*/
|
||||||
async getConfirmedBlockSignatures(
|
async getConfirmedBlockSignatures(
|
||||||
slot: number,
|
slot: number,
|
||||||
|
commitment?: Finality,
|
||||||
): Promise<ConfirmedBlockSignatures> {
|
): Promise<ConfirmedBlockSignatures> {
|
||||||
const unsafeRes = await this._rpcRequest('getConfirmedBlock', [
|
const args = this._buildArgsAtLeastConfirmed(
|
||||||
slot,
|
[slot],
|
||||||
{transactionDetails: 'signatures', rewards: false},
|
commitment,
|
||||||
]);
|
undefined,
|
||||||
|
{
|
||||||
|
transactionDetails: 'signatures',
|
||||||
|
rewards: false,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
const unsafeRes = await this._rpcRequest('getConfirmedBlock', args);
|
||||||
const res = create(unsafeRes, GetConfirmedBlockSignaturesRpcResult);
|
const res = create(unsafeRes, GetConfirmedBlockSignaturesRpcResult);
|
||||||
if ('error' in res) {
|
if ('error' in res) {
|
||||||
throw new Error('failed to get confirmed block: ' + res.error.message);
|
throw new Error('failed to get confirmed block: ' + res.error.message);
|
||||||
|
@ -2635,10 +2646,10 @@ export class Connection {
|
||||||
*/
|
*/
|
||||||
async getConfirmedTransaction(
|
async getConfirmedTransaction(
|
||||||
signature: TransactionSignature,
|
signature: TransactionSignature,
|
||||||
|
commitment?: Finality,
|
||||||
): Promise<ConfirmedTransaction | null> {
|
): Promise<ConfirmedTransaction | null> {
|
||||||
const unsafeRes = await this._rpcRequest('getConfirmedTransaction', [
|
const args = this._buildArgsAtLeastConfirmed([signature], commitment);
|
||||||
signature,
|
const unsafeRes = await this._rpcRequest('getConfirmedTransaction', args);
|
||||||
]);
|
|
||||||
const res = create(unsafeRes, GetConfirmedTransactionRpcResult);
|
const res = create(unsafeRes, GetConfirmedTransactionRpcResult);
|
||||||
if ('error' in res) {
|
if ('error' in res) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
|
@ -2653,11 +2664,14 @@ export class Connection {
|
||||||
*/
|
*/
|
||||||
async getParsedConfirmedTransaction(
|
async getParsedConfirmedTransaction(
|
||||||
signature: TransactionSignature,
|
signature: TransactionSignature,
|
||||||
|
commitment?: Finality,
|
||||||
): Promise<ParsedConfirmedTransaction | null> {
|
): Promise<ParsedConfirmedTransaction | null> {
|
||||||
const unsafeRes = await this._rpcRequest('getConfirmedTransaction', [
|
const args = this._buildArgsAtLeastConfirmed(
|
||||||
signature,
|
[signature],
|
||||||
|
commitment,
|
||||||
'jsonParsed',
|
'jsonParsed',
|
||||||
]);
|
);
|
||||||
|
const unsafeRes = await this._rpcRequest('getConfirmedTransaction', args);
|
||||||
const res = create(unsafeRes, GetParsedConfirmedTransactionRpcResult);
|
const res = create(unsafeRes, GetParsedConfirmedTransactionRpcResult);
|
||||||
if ('error' in res) {
|
if ('error' in res) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
|
@ -2672,11 +2686,17 @@ export class Connection {
|
||||||
*/
|
*/
|
||||||
async getParsedConfirmedTransactions(
|
async getParsedConfirmedTransactions(
|
||||||
signatures: TransactionSignature[],
|
signatures: TransactionSignature[],
|
||||||
|
commitment?: Finality,
|
||||||
): Promise<(ParsedConfirmedTransaction | null)[]> {
|
): Promise<(ParsedConfirmedTransaction | null)[]> {
|
||||||
const batch = signatures.map(signature => {
|
const batch = signatures.map(signature => {
|
||||||
|
const args = this._buildArgsAtLeastConfirmed(
|
||||||
|
[signature],
|
||||||
|
commitment,
|
||||||
|
'jsonParsed',
|
||||||
|
);
|
||||||
return {
|
return {
|
||||||
methodName: 'getConfirmedTransaction',
|
methodName: 'getConfirmedTransaction',
|
||||||
args: [signature, 'jsonParsed'],
|
args,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -2718,7 +2738,10 @@ export class Connection {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const block = await this.getConfirmedBlockSignatures(startSlot);
|
const block = await this.getConfirmedBlockSignatures(
|
||||||
|
startSlot,
|
||||||
|
'finalized',
|
||||||
|
);
|
||||||
if (block.signatures.length > 0) {
|
if (block.signatures.length > 0) {
|
||||||
options.until = block.signatures[
|
options.until = block.signatures[
|
||||||
block.signatures.length - 1
|
block.signatures.length - 1
|
||||||
|
@ -2774,10 +2797,17 @@ export class Connection {
|
||||||
async getConfirmedSignaturesForAddress2(
|
async getConfirmedSignaturesForAddress2(
|
||||||
address: PublicKey,
|
address: PublicKey,
|
||||||
options?: ConfirmedSignaturesForAddress2Options,
|
options?: ConfirmedSignaturesForAddress2Options,
|
||||||
|
commitment?: Finality,
|
||||||
): Promise<Array<ConfirmedSignatureInfo>> {
|
): Promise<Array<ConfirmedSignatureInfo>> {
|
||||||
|
const args = this._buildArgsAtLeastConfirmed(
|
||||||
|
[address.toBase58()],
|
||||||
|
commitment,
|
||||||
|
undefined,
|
||||||
|
options,
|
||||||
|
);
|
||||||
const unsafeRes = await this._rpcRequest(
|
const unsafeRes = await this._rpcRequest(
|
||||||
'getConfirmedSignaturesForAddress2',
|
'getConfirmedSignaturesForAddress2',
|
||||||
[address.toBase58(), options],
|
args,
|
||||||
);
|
);
|
||||||
const res = create(unsafeRes, GetConfirmedSignaturesForAddress2RpcResult);
|
const res = create(unsafeRes, GetConfirmedSignaturesForAddress2RpcResult);
|
||||||
if ('error' in res) {
|
if ('error' in res) {
|
||||||
|
@ -3485,6 +3515,26 @@ export class Connection {
|
||||||
return args;
|
return args;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
_buildArgsAtLeastConfirmed(
|
||||||
|
args: Array<any>,
|
||||||
|
override?: Finality,
|
||||||
|
encoding?: 'jsonParsed' | 'base64',
|
||||||
|
extra?: any,
|
||||||
|
): Array<any> {
|
||||||
|
const commitment = override || this._commitment;
|
||||||
|
if (commitment && !['confirmed', 'finalized'].includes(commitment)) {
|
||||||
|
throw new Error(
|
||||||
|
'Using Connection with default commitment: `' +
|
||||||
|
this._commitment +
|
||||||
|
'`, but method requires at least `confirmed`',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return this._buildArgs(args, override, encoding, extra);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1408,7 +1408,7 @@ describe('Connection', () => {
|
||||||
|
|
||||||
await mockRpcResponse({
|
await mockRpcResponse({
|
||||||
method: 'getConfirmedTransaction',
|
method: 'getConfirmedTransaction',
|
||||||
params: [confirmedTransaction, 'jsonParsed'],
|
params: [confirmedTransaction, {encoding: 'jsonParsed'}],
|
||||||
value: getMockData({
|
value: getMockData({
|
||||||
parsed: {},
|
parsed: {},
|
||||||
program: 'spl-token',
|
program: 'spl-token',
|
||||||
|
@ -1428,7 +1428,7 @@ describe('Connection', () => {
|
||||||
|
|
||||||
await mockRpcResponse({
|
await mockRpcResponse({
|
||||||
method: 'getConfirmedTransaction',
|
method: 'getConfirmedTransaction',
|
||||||
params: [confirmedTransaction, 'jsonParsed'],
|
params: [confirmedTransaction, {encoding: 'jsonParsed'}],
|
||||||
value: getMockData({
|
value: getMockData({
|
||||||
accounts: [
|
accounts: [
|
||||||
'EeJqWk5pczNjsqqY3jia9xfFNG1dD68te4s8gsdCuEk7',
|
'EeJqWk5pczNjsqqY3jia9xfFNG1dD68te4s8gsdCuEk7',
|
||||||
|
|
Loading…
Reference in New Issue