fix: add getBlock Connection method
This commit is contained in:
parent
3382548a79
commit
890f6f4d9d
|
@ -4,7 +4,7 @@ declare module 'superstruct' {
|
|||
union(schema: any): any;
|
||||
list(schema: any): any;
|
||||
literal(schema: any): any;
|
||||
|
||||
tuple(schema: any): any;
|
||||
};
|
||||
|
||||
declare module.exports: {
|
||||
|
|
|
@ -390,6 +390,18 @@ const GetMinimumBalanceForRentExemptionRpcResult = jsonRpcResult('number');
|
|||
*/
|
||||
const GetBlocksSinceRpcResult = jsonRpcResult(struct.list(['number']));
|
||||
|
||||
/**
|
||||
* Expected JSON RPC response for the "getBlock" message
|
||||
*/
|
||||
const GetBlockRpcResult = jsonRpcResult(
|
||||
struct.list([
|
||||
struct.tuple([
|
||||
struct.list(['number']),
|
||||
struct.union([struct({Ok: 'null'}), struct({Err: 'object'})]),
|
||||
]),
|
||||
]),
|
||||
);
|
||||
|
||||
/**
|
||||
* Expected JSON RPC response for the "getRecentBlockhash" message
|
||||
*/
|
||||
|
@ -904,6 +916,25 @@ export class Connection {
|
|||
return res.result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch a list of Transactions and transaction statuses from the cluster
|
||||
*/
|
||||
async getBlock(
|
||||
slot: number,
|
||||
): Promise<
|
||||
Array<[Transaction, SignatureSuccess] | [Transaction, TransactionError]>,
|
||||
> {
|
||||
const unsafeRes = await this._rpcRequest('getBlock', [slot]);
|
||||
const result = GetBlockRpcResult(unsafeRes);
|
||||
if (result.error) {
|
||||
throw new Error(result.error.message);
|
||||
}
|
||||
assert(typeof result.result !== 'undefined');
|
||||
return result.result.map(result => {
|
||||
return [Transaction.from(result[0]), result[1]];
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Request an allocation of lamports to the specified account
|
||||
*/
|
||||
|
|
|
@ -462,6 +462,21 @@ test('get blocks since slot', async () => {
|
|||
await expect(connection.getBlocksSince(10000)).rejects.toThrow(errorMessage);
|
||||
});
|
||||
|
||||
test('get block', async () => {
|
||||
if (mockRpcEnabled) {
|
||||
console.log('non-live test skipped');
|
||||
return;
|
||||
}
|
||||
const connection = new Connection(url);
|
||||
|
||||
// These test cases need to be updated when upstream solana RPC api is fleshed out
|
||||
const zeroTransactions = await connection.getBlock(0);
|
||||
expect(zeroTransactions.length).toBe(0);
|
||||
|
||||
const oneTransaction = await connection.getBlock(1);
|
||||
expect(oneTransaction.length).toBe(1);
|
||||
});
|
||||
|
||||
test('get recent blockhash', async () => {
|
||||
const connection = new Connection(url);
|
||||
|
||||
|
|
Loading…
Reference in New Issue