fix: add getBlocksSince Connection method
This commit is contained in:
committed by
Michael Vines
parent
df886a7a40
commit
086eb6f8b8
@ -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
|
||||||
*/
|
*/
|
||||||
|
@ -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,
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user