fix: update NonceAccount to upstream changes

This commit is contained in:
Trent Nelson 2020-03-05 09:44:56 -07:00 committed by Michael Vines
parent 3b55087a86
commit 890e21c451
7 changed files with 43 additions and 18 deletions

8
web3.js/module.d.ts vendored
View File

@ -229,6 +229,13 @@ declare module '@solana/web3.js' {
): Promise<number>;
}
// === src/nonce-account.js ===
export class NonceAccount {
authorizedPubkey: PublicKey;
nonce: Blockhash;
feeCalculator: FeeCalculator;
}
// === src/validator-info.js ===
export const VALIDATOR_INFO_KEY: PublicKey;
export type Info = {
@ -536,7 +543,6 @@ declare module '@solana/web3.js' {
export class SystemProgram {
static programId: PublicKey;
static nonceSpace: number;
static createAccount(
from: PublicKey,

View File

@ -244,6 +244,13 @@ declare module '@solana/web3.js' {
): Promise<number>;
}
// === src/nonce-account.js ===
declare export class NonceAccount {
authorizedPubkey: PublicKey;
nonce: Blockhash;
feeCalculator: FeeCalculator;
}
// === src/stake-program.js ===
declare export type StakeAuthorizationType = {|
index: number,
@ -432,7 +439,6 @@ declare module '@solana/web3.js' {
declare export class SystemProgram {
static programId: PublicKey;
static nonceSpace: number;
static createAccount(params: CreateAccountParams): Transaction;
static transfer(params: TransferParams): Transaction;

View File

@ -1,4 +1,12 @@
// @flow
import * as BufferLayout from 'buffer-layout';
/**
* https://github.com/solana-labs/solana/blob/90bedd7e067b5b8f3ddbb45da00a4e9cabb22c62/sdk/src/fee_calculator.rs#L7-L11
*
* @private
*/
export const FeeCalculatorLayout = BufferLayout.nu64('lamportsPerSignature');
/**
* @typedef {Object} FeeCalculator

View File

@ -4,6 +4,8 @@ import * as BufferLayout from 'buffer-layout';
import type {Blockhash} from './blockhash';
import * as Layout from './layout';
import {PublicKey} from './publickey';
import type {FeeCalculator} from './fee-calculator';
import {FeeCalculatorLayout} from './fee-calculator';
/**
* See https://github.com/solana-labs/solana/blob/0ea2843ec9cdc517572b8e62c959f41b55cf4453/sdk/src/nonce_state.rs#L29-L32
@ -11,17 +13,22 @@ import {PublicKey} from './publickey';
* @private
*/
const NonceAccountLayout = BufferLayout.struct([
BufferLayout.u32('version'),
BufferLayout.u32('state'),
Layout.publicKey('authorizedPubkey'),
Layout.publicKey('nonce'),
BufferLayout.struct([FeeCalculatorLayout], 'feeCalculator'),
]);
export const NONCE_ACCOUNT_LENGTH = NonceAccountLayout.span;
/**
* NonceAccount class
*/
export class NonceAccount {
authorizedPubkey: PublicKey;
nonce: Blockhash;
feeCalculator: FeeCalculator;
/**
* Deserialize NonceAccount from the account data.

View File

@ -4,6 +4,7 @@ import * as BufferLayout from 'buffer-layout';
import {encodeData, decodeData} from './instruction';
import * as Layout from './layout';
import {NONCE_ACCOUNT_LENGTH} from './nonce-account';
import {PublicKey} from './publickey';
import {SYSVAR_RECENT_BLOCKHASHES_PUBKEY, SYSVAR_RENT_PUBKEY} from './sysvar';
import {Transaction, TransactionInstruction} from './transaction';
@ -437,13 +438,6 @@ export class SystemProgram {
);
}
/**
* Max space of a Nonce account
*/
static get nonceSpace(): number {
return 68;
}
/**
* Generate a Transaction that creates a new account
*/
@ -530,7 +524,7 @@ export class SystemProgram {
fromPubkey: params.fromPubkey,
newAccountPubkey: params.noncePubkey,
lamports: params.lamports,
space: this.nonceSpace,
space: NONCE_ACCOUNT_LENGTH,
programId: this.programId,
});

View File

@ -3,6 +3,7 @@
import bs58 from 'bs58';
import {Account, Connection, SystemProgram} from '../src';
import {NONCE_ACCOUNT_LENGTH} from '../src/nonce-account';
import {mockRpc, mockRpcEnabled} from './__mocks__/node-fetch';
import {mockGetRecentBlockhash} from './mockrpc/get-recent-blockhash';
import {url} from './url';
@ -21,7 +22,7 @@ test('create and query nonce account', async () => {
url,
{
method: 'getMinimumBalanceForRentExemption',
params: [68, {commitment: 'recent'}],
params: [NONCE_ACCOUNT_LENGTH, {commitment: 'recent'}],
},
{
error: null,
@ -30,7 +31,7 @@ test('create and query nonce account', async () => {
]);
const minimumAmount = await connection.getMinimumBalanceForRentExemption(
SystemProgram.nonceSpace,
NONCE_ACCOUNT_LENGTH,
'recent',
);
@ -94,11 +95,13 @@ test('create and query nonce account', async () => {
});
await connection.sendTransaction(transaction, from, nonceAccount);
const expectedData = Buffer.alloc(68);
expectedData.writeInt32LE(1, 0);
from.publicKey.toBuffer().copy(expectedData, 4);
const expectedData = Buffer.alloc(NONCE_ACCOUNT_LENGTH);
expectedData.writeInt32LE(0, 0); // Version, 4 bytes
expectedData.writeInt32LE(1, 4); // State, 4 bytes
from.publicKey.toBuffer().copy(expectedData, 8); // authorizedPubkey, 32 bytes
const mockNonce = new Account();
mockNonce.publicKey.toBuffer().copy(expectedData, 36);
mockNonce.publicKey.toBuffer().copy(expectedData, 40); // Hash, 32 bytes
expectedData.writeUInt16LE(5000, 72); // feeCalculator, 8 bytes
mockRpc.push([
url,

View File

@ -11,6 +11,7 @@ import {
sendAndConfirmRecentTransaction,
LAMPORTS_PER_SOL,
} from '../src';
import {NONCE_ACCOUNT_LENGTH} from '../src/nonce-account';
import {mockRpcEnabled} from './__mocks__/node-fetch';
import {sleep} from '../src/util/sleep';
import {url} from './url';
@ -95,7 +96,7 @@ test('createNonceAccount', () => {
fromPubkey: params.fromPubkey,
newAccountPubkey: params.noncePubkey,
lamports: params.lamports,
space: SystemProgram.nonceSpace,
space: NONCE_ACCOUNT_LENGTH,
programId: SystemProgram.programId,
};
expect(createParams).toEqual(
@ -203,7 +204,7 @@ test('live Nonce actions', async () => {
await connection.requestAirdrop(newAuthority.publicKey, LAMPORTS_PER_SOL);
const minimumAmount = await connection.getMinimumBalanceForRentExemption(
SystemProgram.nonceSpace,
NONCE_ACCOUNT_LENGTH,
'recent',
);