fix: update getConfirmedBlock json-rpc formatting
This commit is contained in:
parent
3265f3bfa0
commit
fc007b02ae
|
@ -437,15 +437,15 @@ const GetMinimumBalanceForRentExemptionRpcResult = jsonRpcResult('number');
|
|||
*/
|
||||
export const GetConfirmedBlockRpcResult = jsonRpcResult(
|
||||
struct({
|
||||
blockhash: struct.list(['number']),
|
||||
previousBlockhash: struct.list(['number']),
|
||||
blockhash: 'string',
|
||||
previousBlockhash: 'string',
|
||||
parentSlot: 'number',
|
||||
transactions: struct.list([
|
||||
struct.tuple([
|
||||
struct({
|
||||
signatures: struct.list([struct.list(['number'])]),
|
||||
signatures: struct.list(['string']),
|
||||
message: struct({
|
||||
accountKeys: struct.list([struct.list(['number'])]),
|
||||
accountKeys: struct.list(['string']),
|
||||
header: struct({
|
||||
numRequiredSignatures: 'number',
|
||||
numReadonlySignedAccounts: 'number',
|
||||
|
@ -455,17 +455,13 @@ export const GetConfirmedBlockRpcResult = jsonRpcResult(
|
|||
struct.union([
|
||||
struct.list(['number']),
|
||||
struct({
|
||||
accounts: struct.list([
|
||||
struct.union([struct.list(['number']), 'number']),
|
||||
]),
|
||||
data: struct.list([
|
||||
struct.union([struct.list(['number']), 'number']),
|
||||
]),
|
||||
accounts: struct.list(['number']),
|
||||
data: 'string',
|
||||
programIdIndex: 'number',
|
||||
}),
|
||||
]),
|
||||
]),
|
||||
recentBlockhash: struct.list(['number']),
|
||||
recentBlockhash: 'string',
|
||||
}),
|
||||
}),
|
||||
struct.union([
|
||||
|
|
|
@ -21,7 +21,7 @@ export type TransactionSignature = string;
|
|||
*
|
||||
* Signatures are 64 bytes in length
|
||||
*/
|
||||
const DEFAULT_SIGNATURE = Array(64).fill(0);
|
||||
const DEFAULT_SIGNATURE = Buffer.alloc(64).fill(0);
|
||||
|
||||
/**
|
||||
* Maximum over-the-wire size of a Transaction
|
||||
|
@ -489,7 +489,7 @@ export class Transaction {
|
|||
for (let i = 0; i < signatureCount; i++) {
|
||||
const signature = byteArray.slice(0, SIGNATURE_LENGTH);
|
||||
byteArray = byteArray.slice(SIGNATURE_LENGTH);
|
||||
signatures.push(signature);
|
||||
signatures.push(bs58.encode(Buffer.from(signature)));
|
||||
}
|
||||
|
||||
const numRequiredSignatures = byteArray.shift();
|
||||
|
@ -504,7 +504,7 @@ export class Transaction {
|
|||
for (let i = 0; i < accountCount; i++) {
|
||||
const account = byteArray.slice(0, PUBKEY_LENGTH);
|
||||
byteArray = byteArray.slice(PUBKEY_LENGTH);
|
||||
accounts.push(account);
|
||||
accounts.push(bs58.encode(Buffer.from(account)));
|
||||
}
|
||||
|
||||
const recentBlockhash = byteArray.slice(0, PUBKEY_LENGTH);
|
||||
|
@ -519,7 +519,8 @@ export class Transaction {
|
|||
instruction.accounts = byteArray.slice(0, accountCount);
|
||||
byteArray = byteArray.slice(accountCount);
|
||||
const dataLength = shortvec.decodeLength(byteArray);
|
||||
instruction.data = byteArray.slice(0, dataLength);
|
||||
const data = byteArray.slice(0, dataLength);
|
||||
instruction.data = bs58.encode(Buffer.from(data));
|
||||
byteArray = byteArray.slice(dataLength);
|
||||
instructions.push(instruction);
|
||||
}
|
||||
|
@ -539,13 +540,9 @@ export class Transaction {
|
|||
* Parse an RPC result into a Transaction object.
|
||||
*/
|
||||
static fromRpcResult(rpcResult: any): Transaction {
|
||||
const signatures = rpcResult.signatures.slice(1);
|
||||
const accounts = rpcResult.message.accountKeys.slice(1);
|
||||
const instructions = rpcResult.message.instructions.slice(1).map(ix => {
|
||||
ix.accounts.shift();
|
||||
ix.data.shift();
|
||||
return ix;
|
||||
});
|
||||
const signatures = rpcResult.signatures;
|
||||
const accounts = rpcResult.message.accountKeys;
|
||||
const instructions = rpcResult.message.instructions;
|
||||
const recentBlockhash = rpcResult.message.recentBlockhash;
|
||||
const numRequiredSignatures =
|
||||
rpcResult.message.header.numRequiredSignatures;
|
||||
|
@ -569,8 +566,8 @@ export class Transaction {
|
|||
* @private
|
||||
*/
|
||||
static _populate(
|
||||
signatures: Array<Array<number>>,
|
||||
accounts: Array<Array<number>>,
|
||||
signatures: Array<string>,
|
||||
accounts: Array<string>,
|
||||
instructions: Array<any>,
|
||||
recentBlockhash: Array<number>,
|
||||
numRequiredSignatures: number,
|
||||
|
@ -596,9 +593,9 @@ export class Transaction {
|
|||
for (let i = 0; i < signatures.length; i++) {
|
||||
const sigPubkeyPair = {
|
||||
signature:
|
||||
signatures[i].toString() == DEFAULT_SIGNATURE.toString()
|
||||
signatures[i] == bs58.encode(DEFAULT_SIGNATURE)
|
||||
? null
|
||||
: Buffer.from(signatures[i]),
|
||||
: bs58.decode(signatures[i]),
|
||||
publicKey: new PublicKey(accounts[i]),
|
||||
};
|
||||
transaction.signatures.push(sigPubkeyPair);
|
||||
|
@ -607,7 +604,7 @@ export class Transaction {
|
|||
let instructionData = {
|
||||
keys: [],
|
||||
programId: new PublicKey(accounts[instructions[i].programIndex]),
|
||||
data: Buffer.from(instructions[i].data),
|
||||
data: bs58.decode(instructions[i].data),
|
||||
};
|
||||
for (let j = 0; j < instructions[i].accounts.length; j++) {
|
||||
const pubkey = new PublicKey(accounts[instructions[i].accounts[j]]);
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
// @flow
|
||||
import bs58 from 'bs58';
|
||||
import nacl from 'tweetnacl';
|
||||
|
||||
import {Account} from '../src/account';
|
||||
|
@ -155,12 +156,11 @@ test('transaction from rpc result', () => {
|
|||
const rpcResult = {
|
||||
message: {
|
||||
accountKeys: [
|
||||
[5],
|
||||
new PublicKey(1).toBuffer(),
|
||||
new PublicKey(2).toBuffer(),
|
||||
new PublicKey(3).toBuffer(),
|
||||
new PublicKey(4).toBuffer(),
|
||||
new PublicKey(5).toBuffer(),
|
||||
new PublicKey(1).toString(),
|
||||
new PublicKey(2).toString(),
|
||||
new PublicKey(3).toString(),
|
||||
new PublicKey(4).toString(),
|
||||
new PublicKey(5).toString(),
|
||||
],
|
||||
header: {
|
||||
num_ReadonlySignedAccounts: 0,
|
||||
|
@ -168,16 +168,18 @@ test('transaction from rpc result', () => {
|
|||
numRequiredSignatures: 2,
|
||||
},
|
||||
instructions: [
|
||||
[1],
|
||||
{
|
||||
accounts: [[3], 1, 2, 3],
|
||||
data: [[1], 0],
|
||||
accounts: [1, 2, 3],
|
||||
data: bs58.encode(Buffer.alloc(5).fill(9)),
|
||||
programIdIndex: 4,
|
||||
},
|
||||
],
|
||||
recentBlockhash: rawBlockhash,
|
||||
},
|
||||
signatures: [[2], Array(64).fill(1), Array(64).fill(2)],
|
||||
signatures: [
|
||||
bs58.encode(Buffer.alloc(64).fill(1)),
|
||||
bs58.encode(Buffer.alloc(64).fill(2)),
|
||||
],
|
||||
};
|
||||
|
||||
const recentBlockhash = new PublicKey(rawBlockhash).toBase58();
|
||||
|
|
Loading…
Reference in New Issue