From c705ac01f5985ada74f40417f8a583baceb5e1f4 Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Sat, 19 Oct 2019 11:36:06 -0700 Subject: [PATCH] fix: adapt tests to higher default transaction signature fee (#531) --- web3.js/module.flow.js | 6 +++++- web3.js/src/connection.js | 2 +- web3.js/src/index.js | 3 +++ web3.js/src/loader.js | 6 ++++-- web3.js/test/bpf-loader.test.js | 5 +++-- web3.js/test/connection.test.js | 21 +++++++++++---------- web3.js/test/transaction-payer.test.js | 8 ++++---- 7 files changed, 31 insertions(+), 20 deletions(-) diff --git a/web3.js/module.flow.js b/web3.js/module.flow.js index 48fef91095..92e80a68bb 100644 --- a/web3.js/module.flow.js +++ b/web3.js/module.flow.js @@ -228,7 +228,9 @@ declare module '@solana/web3.js' { constructor(opts?: TransactionCtorFields): Transaction; add( - ...items: Array + ...items: Array< + Transaction | TransactionInstruction | TransactionInstructionCtorFields, + > ): Transaction; sign(...signers: Array): void; signPartial(...partialSigners: Array): void; @@ -272,4 +274,6 @@ declare module '@solana/web3.js' { // === src/util/testnet.js === declare export function testnetChannelEndpoint(channel?: string): string; + + declare export var SOL_LAMPORTS: number; } diff --git a/web3.js/src/connection.js b/web3.js/src/connection.js index b9334c24f8..702c405201 100644 --- a/web3.js/src/connection.js +++ b/web3.js/src/connection.js @@ -701,7 +701,7 @@ export class Connection { ); const res = GetMinimumBalanceForRentExemptionRpcResult(unsafeRes); if (res.error) { - console.warn("Unable to fetch minimum balance for rent exemption"); + console.warn('Unable to fetch minimum balance for rent exemption'); return 0; } assert(typeof res.result !== 'undefined'); diff --git a/web3.js/src/index.js b/web3.js/src/index.js index 89a57c58cf..6cf85a1832 100644 --- a/web3.js/src/index.js +++ b/web3.js/src/index.js @@ -15,3 +15,6 @@ export { sendAndConfirmRawTransaction, } from './util/send-and-confirm-raw-transaction'; export {testnetChannelEndpoint} from './util/testnet'; + +// There are 2^34 lamports in one SOL +export const SOL_LAMPORTS = 17179869184; diff --git a/web3.js/src/loader.js b/web3.js/src/loader.js index df7b84dbf5..0c3e2ea477 100644 --- a/web3.js/src/loader.js +++ b/web3.js/src/loader.js @@ -45,7 +45,9 @@ export class Loader { data: Array, ): Promise { { - const balanceNeeded = await connection.getMinimumBalanceForRentExemption(data.length); + const balanceNeeded = await connection.getMinimumBalanceForRentExemption( + data.length, + ); const transaction = SystemProgram.createAccount( payer.publicKey, program.publicKey, @@ -126,7 +128,7 @@ export class Loader { const transaction = new Transaction().add({ keys: [ {pubkey: program.publicKey, isSigner: true, isDebitable: true}, - {pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isDebitable: false} + {pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isDebitable: false}, ], programId, data, diff --git a/web3.js/test/bpf-loader.test.js b/web3.js/test/bpf-loader.test.js index 3a0ba6e29e..c5e14bedb0 100644 --- a/web3.js/test/bpf-loader.test.js +++ b/web3.js/test/bpf-loader.test.js @@ -7,6 +7,7 @@ import { BpfLoader, Transaction, sendAndConfirmTransaction, + SOL_LAMPORTS, } from '../src'; import {mockRpcEnabled} from './__mocks__/node-fetch'; import {url} from './url'; @@ -24,7 +25,7 @@ test('load BPF C program', async () => { } const connection = new Connection(url); - const from = await newAccountWithLamports(connection, 1024); + const from = await newAccountWithLamports(connection, SOL_LAMPORTS); const data = await fs.readFile('test/fixtures/noop-c/noop.so'); const programId = await BpfLoader.load(connection, from, data); const transaction = new Transaction().add({ @@ -41,7 +42,7 @@ test('load BPF Rust program', async () => { } const connection = new Connection(url); - const from = await newAccountWithLamports(connection, 100000); + const from = await newAccountWithLamports(connection, SOL_LAMPORTS); const data = await fs.readFile( 'test/fixtures/noop-rust/solana_bpf_rust_noop.so', ); diff --git a/web3.js/test/connection.test.js b/web3.js/test/connection.test.js index 27d6d9af48..d3d7e9abc6 100644 --- a/web3.js/test/connection.test.js +++ b/web3.js/test/connection.test.js @@ -6,6 +6,7 @@ import { Loader, SystemProgram, sendAndConfirmTransaction, + SOL_LAMPORTS, } from '../src'; import {DEFAULT_TICKS_PER_SLOT, NUM_TICKS_PER_SECOND} from '../src/timing'; import {mockRpc, mockRpcEnabled} from './__mocks__/node-fetch'; @@ -54,8 +55,8 @@ test('get program accounts', async () => { const account0 = new Account(); const account1 = new Account(); const programId = new Account(); - await connection.requestAirdrop(account0.publicKey, 42); - await connection.requestAirdrop(account1.publicKey, 84); + await connection.requestAirdrop(account0.publicKey, SOL_LAMPORTS); + await connection.requestAirdrop(account1.publicKey, 0.5 * SOL_LAMPORTS); let transaction = SystemProgram.assign( account0.publicKey, @@ -79,9 +80,9 @@ test('get program accounts', async () => { account1.publicKey.toBase58(), ]).toEqual(expect.arrayContaining([element[0]])); if (element[0] == account0.publicKey) { - expect(element[1].lamports).toBe(42 - feeCalculator.lamportsPerSignature); + expect(element[1].lamports).toBe(SOL_LAMPORTS - feeCalculator.lamportsPerSignature); } else { - expect(element[1].lamports).toBe(84 - feeCalculator.lamportsPerSignature); + expect(element[1].lamports).toBe(0.5 * SOL_LAMPORTS- feeCalculator.lamportsPerSignature); } }); }); @@ -629,8 +630,8 @@ test('multi-instruction transaction', async () => { const accountTo = new Account(); const connection = new Connection(url); - await connection.requestAirdrop(accountFrom.publicKey, 100000); - expect(await connection.getBalance(accountFrom.publicKey)).toBe(100000); + await connection.requestAirdrop(accountFrom.publicKey, SOL_LAMPORTS); + expect(await connection.getBalance(accountFrom.publicKey)).toBe(SOL_LAMPORTS); await connection.requestAirdrop(accountTo.publicKey, 21); expect(await connection.getBalance(accountTo.publicKey)).toBe(21); @@ -663,11 +664,11 @@ test('multi-instruction transaction', async () => { Ok: null, }); - // accountFrom may have less than 100000 due to transaction fees + // accountFrom may have less than SOL_LAMPORTS due to transaction fees expect(await connection.getBalance(accountFrom.publicKey)).toBeGreaterThan(0); expect( await connection.getBalance(accountFrom.publicKey), - ).toBeLessThanOrEqual(100000); + ).toBeLessThanOrEqual(SOL_LAMPORTS); expect(await connection.getBalance(accountTo.publicKey)).toBe(21); }); @@ -689,7 +690,7 @@ test('account change notification', async () => { mockCallback, ); - await connection.requestAirdrop(owner.publicKey, 100000); + await connection.requestAirdrop(owner.publicKey, SOL_LAMPORTS); await Loader.load(connection, owner, programAccount, BpfLoader.programId, [ 1, 2, @@ -743,7 +744,7 @@ test('program account change notification', async () => { }, ); - await connection.requestAirdrop(owner.publicKey, 100000); + await connection.requestAirdrop(owner.publicKey, SOL_LAMPORTS); await Loader.load(connection, owner, programAccount, BpfLoader.programId, [ 1, 2, diff --git a/web3.js/test/transaction-payer.test.js b/web3.js/test/transaction-payer.test.js index a0a0882cc5..5b8e68e0f2 100644 --- a/web3.js/test/transaction-payer.test.js +++ b/web3.js/test/transaction-payer.test.js @@ -1,5 +1,5 @@ // @flow -import {Account, Connection, SystemProgram} from '../src'; +import {Account, Connection, SystemProgram, SOL_LAMPORTS} from '../src'; import {mockRpc, mockRpcEnabled} from './__mocks__/node-fetch'; import {mockGetRecentBlockhash} from './mockrpc/get-recent-blockhash'; import {url} from './url'; @@ -20,7 +20,7 @@ test('transaction-payer', async () => { url, { method: 'requestAirdrop', - params: [accountPayer.publicKey.toBase58(), 100], + params: [accountPayer.publicKey.toBase58(), SOL_LAMPORTS], }, { error: null, @@ -28,7 +28,7 @@ test('transaction-payer', async () => { '0WE5w4B7v59x6qjyC4FbG2FEKYKQfvsJwqSxNVmtMjT8TQ31hsZieDHcSgqzxiAoTL56n2w5TncjqEKjLhtF4Vk', }, ]); - await connection.requestAirdrop(accountPayer.publicKey, 100); + await connection.requestAirdrop(accountPayer.publicKey, SOL_LAMPORTS); mockRpc.push([ url, @@ -141,7 +141,7 @@ test('transaction-payer', async () => { // (exact amount less depends on the current cluster fees) const balance = await connection.getBalance(accountPayer.publicKey); expect(balance).toBeGreaterThan(0); - expect(balance).toBeLessThanOrEqual(100); + expect(balance).toBeLessThanOrEqual(SOL_LAMPORTS); // accountFrom should have exactly 2, since it didn't pay for the transaction mockRpc.push([