fix: add getBlocksSince Connection method

This commit is contained in:
Tyera Eulberg
2019-11-11 14:08:00 -05:00
committed by Michael Vines
parent df886a7a40
commit 086eb6f8b8
3 changed files with 63 additions and 2 deletions

View File

@ -365,6 +365,11 @@ const GetTotalSupplyRpcResult = jsonRpcResult('number');
*/ */
const GetMinimumBalanceForRentExemptionRpcResult = jsonRpcResult('number'); const GetMinimumBalanceForRentExemptionRpcResult = jsonRpcResult('number');
/**
* Expected JSON RPC response for the "getBlocksSince" message
*/
const GetBlocksSinceRpcResult = jsonRpcResult(struct.list(['number']));
/** /**
* Expected JSON RPC response for the "getRecentBlockhash" message * Expected JSON RPC response for the "getRecentBlockhash" message
*/ */
@ -853,6 +858,19 @@ export class Connection {
return res.result; return res.result;
} }
/**
* Fetch a list of rooted blocks from the cluster
*/
async getBlocksSince(slot: number): Promise<Array<number>> {
const unsafeRes = await this._rpcRequest('getBlocksSince', [slot]);
const res = GetBlocksSinceRpcResult(unsafeRes);
if (res.error) {
throw new Error(res.error.message);
}
assert(typeof res.result !== 'undefined');
return res.result;
}
/** /**
* Request an allocation of lamports to the specified account * Request an allocation of lamports to the specified account
*/ */

View File

@ -445,7 +445,7 @@ export class Transaction {
const PUBKEY_LENGTH = 32; const PUBKEY_LENGTH = 32;
const SIGNATURE_LENGTH = 64; const SIGNATURE_LENGTH = 64;
function isCreditDebit( function isWritable(
i: number, i: number,
numRequiredSignatures: number, numRequiredSignatures: number,
numReadonlySignedAccounts: number, numReadonlySignedAccounts: number,
@ -530,7 +530,7 @@ export class Transaction {
isSigner: transaction.signatures.some( isSigner: transaction.signatures.some(
keyObj => keyObj.publicKey.toString() === pubkey.toString(), keyObj => keyObj.publicKey.toString() === pubkey.toString(),
), ),
isWritable: isCreditDebit( isWritable: isWritable(
j, j,
numRequiredSignatures, numRequiredSignatures,
numReadonlySignedAccounts, numReadonlySignedAccounts,

View File

@ -419,6 +419,49 @@ test('get minimum balance for rent exemption', async () => {
expect(count).toBeGreaterThanOrEqual(0); expect(count).toBeGreaterThanOrEqual(0);
}); });
test('get blocks since slot', async () => {
const connection = new Connection(url);
const expectedBlocks = [0, 1, 3, 4, 7, 8];
mockRpc.push([
url,
{
method: 'getBlocksSince',
params: [0],
},
{
error: null,
result: expectedBlocks,
},
]);
const blocks = await connection.getBlocksSince(0);
if (mockRpcEnabled) {
expect(blocks.length).toEqual(6);
} else {
// No idea how many blocks since slot 0 on a live cluster
expect(blocks.length).toBeGreaterThan(0);
}
const errorMessage = 'Slot 10000: SlotNotRooted';
mockRpc.push([
url,
{
method: 'getBlocksSince',
params: [10000],
},
{
error: {
message: errorMessage,
},
result: undefined,
},
]);
await expect(connection.getBlocksSince(10000)).rejects.toThrow(errorMessage);
});
test('get recent blockhash', async () => { test('get recent blockhash', async () => {
const connection = new Connection(url); const connection = new Connection(url);