diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index adc543222c..915f038a66 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -41,6 +41,10 @@ jobs: - run: cd ts && yarn - run: cd ts && yarn test - run: cd ts && yarn lint + - run: cd examples/tutorial && yarn + - run: cd examples/tutorial && yarn lint + - run: cd tests && yarn + - run: cd tests && yarn lint setup-anchor-cli: name: Setup Anchor cli diff --git a/examples/tutorial/basic-0/client.js b/examples/tutorial/basic-0/client.js index 59b6eabd30..ecdaddfc24 100644 --- a/examples/tutorial/basic-0/client.js +++ b/examples/tutorial/basic-0/client.js @@ -2,7 +2,7 @@ // It is not expected users directly test with this example. For a more // ergonomic example, see `tests/basic-0.js` in this workspace. -const anchor = require('@project-serum/anchor'); +const anchor = require("@project-serum/anchor"); // Configure the local cluster. anchor.setProvider(anchor.Provider.local()); @@ -10,10 +10,12 @@ anchor.setProvider(anchor.Provider.local()); async function main() { // #region main // Read the generated IDL. - const idl = JSON.parse(require('fs').readFileSync('./target/idl/basic_0.json', 'utf8')); + const idl = JSON.parse( + require("fs").readFileSync("./target/idl/basic_0.json", "utf8") + ); // Address of the deployed program. - const programId = new anchor.web3.PublicKey(''); + const programId = new anchor.web3.PublicKey(""); // Generate the program client from IDL. const program = new anchor.Program(idl, programId); @@ -23,5 +25,5 @@ async function main() { // #endregion main } -console.log('Running client.'); -main().then(() => console.log('Success')); +console.log("Running client."); +main().then(() => console.log("Success")); diff --git a/examples/tutorial/basic-2/tests/basic-2.js b/examples/tutorial/basic-2/tests/basic-2.js index b0cca45f66..eed5aa9ddb 100644 --- a/examples/tutorial/basic-2/tests/basic-2.js +++ b/examples/tutorial/basic-2/tests/basic-2.js @@ -1,20 +1,20 @@ -const assert = require('assert'); -const anchor = require('@project-serum/anchor'); +const assert = require("assert"); +const anchor = require("@project-serum/anchor"); const { SystemProgram } = anchor.web3; -describe('basic-2', () => { - const provider = anchor.Provider.local() +describe("basic-2", () => { + const provider = anchor.Provider.local(); // Configure the client to use the local cluster. - anchor.setProvider(provider) + anchor.setProvider(provider); // Counter for the tests. - const counter = anchor.web3.Keypair.generate() + const counter = anchor.web3.Keypair.generate(); // Program for the tests. - const program = anchor.workspace.Basic2 + const program = anchor.workspace.Basic2; - it('Creates a counter', async () => { + it("Creates a counter", async () => { await program.rpc.create(provider.wallet.publicKey, { accounts: { counter: counter.publicKey, @@ -22,25 +22,27 @@ describe('basic-2', () => { systemProgram: SystemProgram.programId, }, signers: [counter], - }) + }); - let counterAccount = await program.account.counter.fetch(counter.publicKey) + let counterAccount = await program.account.counter.fetch(counter.publicKey); - assert.ok(counterAccount.authority.equals(provider.wallet.publicKey)) - assert.ok(counterAccount.count.toNumber() === 0) - }) + assert.ok(counterAccount.authority.equals(provider.wallet.publicKey)); + assert.ok(counterAccount.count.toNumber() === 0); + }); - it('Updates a counter', async () => { + it("Updates a counter", async () => { await program.rpc.increment({ accounts: { counter: counter.publicKey, authority: provider.wallet.publicKey, }, - }) + }); - const counterAccount = await program.account.counter.fetch(counter.publicKey) + const counterAccount = await program.account.counter.fetch( + counter.publicKey + ); - assert.ok(counterAccount.authority.equals(provider.wallet.publicKey)) - assert.ok(counterAccount.count.toNumber() == 1) - }) -}) + assert.ok(counterAccount.authority.equals(provider.wallet.publicKey)); + assert.ok(counterAccount.count.toNumber() == 1); + }); +}); diff --git a/examples/tutorial/basic-3/tests/basic-3.js b/examples/tutorial/basic-3/tests/basic-3.js index 9b8605af13..fcebfe3151 100644 --- a/examples/tutorial/basic-3/tests/basic-3.js +++ b/examples/tutorial/basic-3/tests/basic-3.js @@ -25,10 +25,10 @@ describe("basic-3", () => { // Invoke the puppet master to perform a CPI to the puppet. await puppetMaster.rpc.pullStrings(new anchor.BN(111), { - accounts: { - puppet: newPuppetAccount.publicKey, - puppetProgram: puppet.programId, - }, + accounts: { + puppet: newPuppetAccount.publicKey, + puppetProgram: puppet.programId, + }, }); // Check the state updated. diff --git a/examples/tutorial/package.json b/examples/tutorial/package.json index 07317972c9..fb4bed1c6d 100644 --- a/examples/tutorial/package.json +++ b/examples/tutorial/package.json @@ -1,6 +1,10 @@ { "name": "anchor-examples", "private": true, + "scripts": { + "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", + "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" + }, "workspaces": [ "basic-0", "basic-1", @@ -12,6 +16,7 @@ "@project-serum/anchor": "^0.19.0" }, "devDependencies": { - "mocha": "^9.1.3" + "mocha": "^9.1.3", + "prettier": "^2.5.1" } } diff --git a/examples/tutorial/yarn.lock b/examples/tutorial/yarn.lock index f1a99ad0ff..e47e8a3522 100644 --- a/examples/tutorial/yarn.lock +++ b/examples/tutorial/yarn.lock @@ -30,17 +30,17 @@ "@ethersproject/logger" "^5.5.0" hash.js "1.1.7" -"@project-serum/anchor@^0.18.0": - version "0.18.0" - resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.18.0.tgz#867144282e59482230f797f73ee9f5634f846061" - integrity sha512-WTm+UB93MoxyCbjnHIibv/uUEoO/5gL4GEtE/aMioLF8Z4i0vCMPnvAN0xpk9VBu3t7ld2DcCE/L+6Z7dwU++w== +"@project-serum/anchor@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.19.0.tgz#79f1fbe7c3134860ccbfe458a0e09daf79644885" + integrity sha512-cs0LBmJOrL9eJ8MRNqitnzbpCT5QEzVdJmiIjfNV5YaGn1K9vISR7DtISj3Bdl3KBdLqii4CTw1mpHdi8iXUCg== dependencies: "@project-serum/borsh" "^0.2.2" "@solana/web3.js" "^1.17.0" base64-js "^1.5.1" bn.js "^5.1.2" bs58 "^4.0.1" - buffer-layout "^1.2.0" + buffer-layout "^1.2.2" camelcase "^5.3.1" crypto-hash "^1.3.0" eventemitter3 "^4.0.7" @@ -257,7 +257,7 @@ bs58@^4.0.0, bs58@^4.0.1: dependencies: base-x "^3.0.2" -buffer-layout@^1.2.0: +buffer-layout@^1.2.0, buffer-layout@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5" integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA== @@ -812,6 +812,11 @@ picomatch@^2.0.4, picomatch@^2.2.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== +prettier@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" + integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== + randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" diff --git a/tests/.prettierignore b/tests/.prettierignore new file mode 100644 index 0000000000..844b08089d --- /dev/null +++ b/tests/.prettierignore @@ -0,0 +1,2 @@ +**/target/types/*.ts +cfo/deps/ diff --git a/tests/bpf-upgradeable-state/migrations/deploy.ts b/tests/bpf-upgradeable-state/migrations/deploy.ts index 325cf3d0ec..5e3df0dc30 100644 --- a/tests/bpf-upgradeable-state/migrations/deploy.ts +++ b/tests/bpf-upgradeable-state/migrations/deploy.ts @@ -9,4 +9,4 @@ module.exports = async function (provider) { anchor.setProvider(provider); // Add your deploy script here. -} +}; diff --git a/tests/bpf-upgradeable-state/tests/bpf-upgradable-state.ts b/tests/bpf-upgradeable-state/tests/bpf-upgradable-state.ts index 21c2cbaf81..5ac8199055 100644 --- a/tests/bpf-upgradeable-state/tests/bpf-upgradable-state.ts +++ b/tests/bpf-upgradeable-state/tests/bpf-upgradable-state.ts @@ -1,22 +1,23 @@ -import * as anchor from '@project-serum/anchor'; -import { Program } from '@project-serum/anchor'; -import { findProgramAddressSync } from '@project-serum/anchor/dist/cjs/utils/pubkey'; -import { PublicKey } from '@solana/web3.js'; -import assert from 'assert'; -import { BpfUpgradeableState } from '../target/types/bpf_upgradeable_state'; +import * as anchor from "@project-serum/anchor"; +import { Program } from "@project-serum/anchor"; +import { findProgramAddressSync } from "@project-serum/anchor/dist/cjs/utils/pubkey"; +import { PublicKey } from "@solana/web3.js"; +import assert from "assert"; +import { BpfUpgradeableState } from "../target/types/bpf_upgradeable_state"; -describe('bpf_upgradeable_state', () => { +describe("bpf_upgradeable_state", () => { const provider = anchor.Provider.env(); // Configure the client to use the local cluster. anchor.setProvider(provider); - const program = anchor.workspace.BpfUpgradeableState as Program; + const program = anchor.workspace + .BpfUpgradeableState as Program; const programDataAddress = findProgramAddressSync( [program.programId.toBytes()], new anchor.web3.PublicKey("BPFLoaderUpgradeab1e11111111111111111111111") )[0]; - it('Reads ProgramData and sets field', async () => { + it("Reads ProgramData and sets field", async () => { const settings = anchor.web3.Keypair.generate(); const tx = await program.rpc.setAdminSettings(new anchor.BN(500), { accounts: { @@ -24,34 +25,46 @@ describe('bpf_upgradeable_state', () => { systemProgram: anchor.web3.SystemProgram.programId, programData: programDataAddress, program: program.programId, - settings: settings.publicKey + settings: settings.publicKey, }, - signers: [settings] + signers: [settings], }); - assert.equal((await program.account.settings.fetch(settings.publicKey)).adminData, 500); + assert.equal( + (await program.account.settings.fetch(settings.publicKey)).adminData, + 500 + ); }); - it('Reads ProgramData and sets field, uses program state', async () => { + it("Reads ProgramData and sets field, uses program state", async () => { const settings = anchor.web3.Keypair.generate(); - const tx = await program.rpc.setAdminSettingsUseProgramState(new anchor.BN(500), { - accounts: { - authority: program.provider.wallet.publicKey, - systemProgram: anchor.web3.SystemProgram.programId, - programData: programDataAddress, - program: program.programId, - settings: settings.publicKey - }, - signers: [settings] - }); - assert.equal((await program.account.settings.fetch(settings.publicKey)).adminData, 500); + const tx = await program.rpc.setAdminSettingsUseProgramState( + new anchor.BN(500), + { + accounts: { + authority: program.provider.wallet.publicKey, + systemProgram: anchor.web3.SystemProgram.programId, + programData: programDataAddress, + program: program.programId, + settings: settings.publicKey, + }, + signers: [settings], + } + ); + assert.equal( + (await program.account.settings.fetch(settings.publicKey)).adminData, + 500 + ); }); - it('Validates constraint on ProgramData', async () => { + it("Validates constraint on ProgramData", async () => { const settings = anchor.web3.Keypair.generate(); try { const authority = anchor.web3.Keypair.generate(); await provider.connection.confirmTransaction( - await provider.connection.requestAirdrop(authority.publicKey, 10000000000), + await provider.connection.requestAirdrop( + authority.publicKey, + 10000000000 + ), "confirmed" ); await program.rpc.setAdminSettings(new anchor.BN(500), { @@ -62,7 +75,7 @@ describe('bpf_upgradeable_state', () => { settings: settings.publicKey, program: program.programId, }, - signers: [settings, authority] + signers: [settings, authority], }); assert.ok(false); } catch (err) { @@ -71,7 +84,7 @@ describe('bpf_upgradeable_state', () => { } }); - it('Validates that account is ProgramData', async () => { + it("Validates that account is ProgramData", async () => { const settings = anchor.web3.Keypair.generate(); try { await program.rpc.setAdminSettings(new anchor.BN(500), { @@ -82,7 +95,7 @@ describe('bpf_upgradeable_state', () => { settings: settings.publicKey, program: program.programId, }, - signers: [settings] + signers: [settings], }); assert.ok(false); } catch (err) { @@ -91,7 +104,7 @@ describe('bpf_upgradeable_state', () => { } }); - it('Validates that account is owned by the upgradeable bpf loader', async () => { + it("Validates that account is owned by the upgradeable bpf loader", async () => { const settings = anchor.web3.Keypair.generate(); try { await program.rpc.setAdminSettings(new anchor.BN(500), { @@ -102,17 +115,22 @@ describe('bpf_upgradeable_state', () => { settings: settings.publicKey, program: program.programId, }, - signers: [settings] + signers: [settings], }); assert.ok(false); } catch (err) { assert.equal(err.code, 3007); - assert.equal(err.msg, "The given account is not owned by the executing program"); + assert.equal( + err.msg, + "The given account is not owned by the executing program" + ); } }); - it('Deserializes UpgradableLoaderState and validates that programData is the expected account', async () => { - const secondProgramAddress = new PublicKey("Fkv67TwmbakfZw2PoW57wYPbqNexAH6vuxpyT8vmrc3B"); + it("Deserializes UpgradableLoaderState and validates that programData is the expected account", async () => { + const secondProgramAddress = new PublicKey( + "Fkv67TwmbakfZw2PoW57wYPbqNexAH6vuxpyT8vmrc3B" + ); const secondProgramProgramDataAddress = findProgramAddressSync( [secondProgramAddress.toBytes()], new anchor.web3.PublicKey("BPFLoaderUpgradeab1e11111111111111111111111") @@ -128,7 +146,7 @@ describe('bpf_upgradeable_state', () => { settings: settings.publicKey, program: program.programId, }, - signers: [settings] + signers: [settings], }); assert.ok(false); } catch (err) { @@ -136,8 +154,10 @@ describe('bpf_upgradeable_state', () => { } }); - it('Deserializes Program and validates that programData is the expected account', async () => { - const secondProgramAddress = new PublicKey("Fkv67TwmbakfZw2PoW57wYPbqNexAH6vuxpyT8vmrc3B"); + it("Deserializes Program and validates that programData is the expected account", async () => { + const secondProgramAddress = new PublicKey( + "Fkv67TwmbakfZw2PoW57wYPbqNexAH6vuxpyT8vmrc3B" + ); const secondProgramProgramDataAddress = findProgramAddressSync( [secondProgramAddress.toBytes()], new anchor.web3.PublicKey("BPFLoaderUpgradeab1e11111111111111111111111") @@ -153,7 +173,7 @@ describe('bpf_upgradeable_state', () => { settings: settings.publicKey, program: program.programId, }, - signers: [settings] + signers: [settings], }); assert.ok(false); } catch (err) { diff --git a/tests/cashiers-check/migrations/deploy.js b/tests/cashiers-check/migrations/deploy.js index 7cca271913..5e3df0dc30 100644 --- a/tests/cashiers-check/migrations/deploy.js +++ b/tests/cashiers-check/migrations/deploy.js @@ -1,4 +1,3 @@ - // Migrations are an early feature. Currently, they're nothing more than this // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. @@ -10,4 +9,4 @@ module.exports = async function (provider) { anchor.setProvider(provider); // Add your deploy script here. -} +}; diff --git a/tests/cashiers-check/tests/cashiers-check.js b/tests/cashiers-check/tests/cashiers-check.js index 5eee8e2479..7cb86de153 100644 --- a/tests/cashiers-check/tests/cashiers-check.js +++ b/tests/cashiers-check/tests/cashiers-check.js @@ -3,8 +3,6 @@ const serumCmn = require("@project-serum/common"); const assert = require("assert"); const { TOKEN_PROGRAM_ID } = require("@solana/spl-token"); - - describe("cashiers-check", () => { // Configure the client to use the local cluster. anchor.setProvider(anchor.Provider.env()); diff --git a/tests/cfo/migrations/deploy.js b/tests/cfo/migrations/deploy.js index 7cca271913..5e3df0dc30 100644 --- a/tests/cfo/migrations/deploy.js +++ b/tests/cfo/migrations/deploy.js @@ -1,4 +1,3 @@ - // Migrations are an early feature. Currently, they're nothing more than this // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. @@ -10,4 +9,4 @@ module.exports = async function (provider) { anchor.setProvider(provider); // Add your deploy script here. -} +}; diff --git a/tests/cfo/tests/utils/index.js b/tests/cfo/tests/utils/index.js index 3e9e91521b..a8654e0637 100644 --- a/tests/cfo/tests/utils/index.js +++ b/tests/cfo/tests/utils/index.js @@ -206,43 +206,39 @@ async function setupMarket({ ); for (let k = 0; k < asks.length; k += 1) { let ask = asks[k]; - const { - transaction, - signers, - } = await MARKET_A_USDC.makePlaceOrderTransaction(provider.connection, { - owner: marketMaker.account, - payer: marketMaker.baseToken, - side: "sell", - price: ask[0], - size: ask[1], - orderType: "postOnly", - clientId: undefined, - openOrdersAddressKey: undefined, - openOrdersAccount: undefined, - feeDiscountPubkey: null, - selfTradeBehavior: "abortTransaction", - }); + const { transaction, signers } = + await MARKET_A_USDC.makePlaceOrderTransaction(provider.connection, { + owner: marketMaker.account, + payer: marketMaker.baseToken, + side: "sell", + price: ask[0], + size: ask[1], + orderType: "postOnly", + clientId: undefined, + openOrdersAddressKey: undefined, + openOrdersAccount: undefined, + feeDiscountPubkey: null, + selfTradeBehavior: "abortTransaction", + }); await provider.send(transaction, signers.concat(marketMaker.account)); } for (let k = 0; k < bids.length; k += 1) { let bid = bids[k]; - const { - transaction, - signers, - } = await MARKET_A_USDC.makePlaceOrderTransaction(provider.connection, { - owner: marketMaker.account, - payer: marketMaker.quoteToken, - side: "buy", - price: bid[0], - size: bid[1], - orderType: "postOnly", - clientId: undefined, - openOrdersAddressKey: undefined, - openOrdersAccount: undefined, - feeDiscountPubkey: null, - selfTradeBehavior: "abortTransaction", - }); + const { transaction, signers } = + await MARKET_A_USDC.makePlaceOrderTransaction(provider.connection, { + owner: marketMaker.account, + payer: marketMaker.quoteToken, + side: "buy", + price: bid[0], + size: bid[1], + orderType: "postOnly", + clientId: undefined, + openOrdersAddressKey: undefined, + openOrdersAccount: undefined, + feeDiscountPubkey: null, + selfTradeBehavior: "abortTransaction", + }); await provider.send(transaction, signers.concat(marketMaker.account)); } @@ -516,42 +512,38 @@ async function runTradeBot(market, provider, iterations = undefined) { } // Post ask. - const { - transaction: tx_ask, - signers: sigs_ask, - } = await marketClient.makePlaceOrderTransaction(provider.connection, { - owner: maker, - payer: baseToken, - side: "sell", - price, - size, - orderType: "postOnly", - clientId, - openOrdersAddressKey: undefined, - openOrdersAccount: undefined, - feeDiscountPubkey: null, - selfTradeBehavior: "abortTransaction", - }); + const { transaction: tx_ask, signers: sigs_ask } = + await marketClient.makePlaceOrderTransaction(provider.connection, { + owner: maker, + payer: baseToken, + side: "sell", + price, + size, + orderType: "postOnly", + clientId, + openOrdersAddressKey: undefined, + openOrdersAccount: undefined, + feeDiscountPubkey: null, + selfTradeBehavior: "abortTransaction", + }); let txSig = await provider.send(tx_ask, sigs_ask.concat(maker)); console.log("Ask", txSig); // Take. - const { - transaction: tx_bid, - signers: sigs_bid, - } = await marketClient.makePlaceOrderTransaction(provider.connection, { - owner: taker, - payer: quoteToken, - side: "buy", - price, - size, - orderType: "ioc", - clientId: undefined, - openOrdersAddressKey: undefined, - openOrdersAccount: undefined, - feeDiscountPubkey: null, - selfTradeBehavior: "abortTransaction", - }); + const { transaction: tx_bid, signers: sigs_bid } = + await marketClient.makePlaceOrderTransaction(provider.connection, { + owner: taker, + payer: quoteToken, + side: "buy", + price, + size, + orderType: "ioc", + clientId: undefined, + openOrdersAddressKey: undefined, + openOrdersAccount: undefined, + feeDiscountPubkey: null, + selfTradeBehavior: "abortTransaction", + }); txSig = await provider.send(tx_bid, sigs_bid.concat(taker)); console.log("Bid", txSig); diff --git a/tests/cfo/tests/utils/stake.js b/tests/cfo/tests/utils/stake.js index 35d6d8d22e..09054a13bd 100644 --- a/tests/cfo/tests/utils/stake.js +++ b/tests/cfo/tests/utils/stake.js @@ -32,13 +32,11 @@ const WHITELIST_SIZE = 10; async function setupStakePool(mint, god) { // Registry genesis. - const [ - _registrarSigner, - _nonce, - ] = await anchor.web3.PublicKey.findProgramAddress( - [registrar.publicKey.toBuffer()], - registry.programId - ); + const [_registrarSigner, _nonce] = + await anchor.web3.PublicKey.findProgramAddress( + [registrar.publicKey.toBuffer()], + registry.programId + ); registrarSigner = _registrarSigner; nonce = _nonce; poolMint = await serumCmn.createMint(provider, registrarSigner); @@ -96,13 +94,11 @@ async function setupStakePool(mint, god) { seed, registry.programId ); - const [ - _memberSigner, - nonce2, - ] = await anchor.web3.PublicKey.findProgramAddress( - [registrar.publicKey.toBuffer(), member.toBuffer()], - registry.programId - ); + const [_memberSigner, nonce2] = + await anchor.web3.PublicKey.findProgramAddress( + [registrar.publicKey.toBuffer(), member.toBuffer()], + registry.programId + ); memberSigner = _memberSigner; const [mainTx, _balances] = await utils.createBalanceSandbox( provider, @@ -133,9 +129,10 @@ async function setupStakePool(mint, god) { newAccountPubkey: member, basePubkey: registry.provider.wallet.publicKey, seed, - lamports: await registry.provider.connection.getMinimumBalanceForRentExemption( - registry.account.member.size - ), + lamports: + await registry.provider.connection.getMinimumBalanceForRentExemption( + registry.account.member.size + ), space: registry.account.member.size, programId: registry.programId, }), diff --git a/tests/chat/migrations/deploy.js b/tests/chat/migrations/deploy.js index 325cf3d0ec..5e3df0dc30 100644 --- a/tests/chat/migrations/deploy.js +++ b/tests/chat/migrations/deploy.js @@ -9,4 +9,4 @@ module.exports = async function (provider) { anchor.setProvider(provider); // Add your deploy script here. -} +}; diff --git a/tests/errors/tests/errors.js b/tests/errors/tests/errors.js index c79bb1c643..7d8dc22152 100644 --- a/tests/errors/tests/errors.js +++ b/tests/errors/tests/errors.js @@ -1,5 +1,5 @@ const assert = require("assert"); -const anchor = require('@project-serum/anchor'); +const anchor = require("@project-serum/anchor"); const { Account, Transaction, TransactionInstruction } = anchor.web3; describe("errors", () => { @@ -133,12 +133,15 @@ describe("errors", () => { try { const tx = await program.rpc.accountNotInitializedError({ accounts: { - notInitializedAccount: (new anchor.web3.Keypair()).publicKey + notInitializedAccount: new anchor.web3.Keypair().publicKey, }, }); - assert.fail("Unexpected success in creating a transaction that should have fail with `AccountNotInitialized` error"); + assert.fail( + "Unexpected success in creating a transaction that should have fail with `AccountNotInitialized` error" + ); } catch (err) { - const errMsg = "The program expected this account to be already initialized"; + const errMsg = + "The program expected this account to be already initialized"; assert.equal(err.toString(), errMsg); } }); diff --git a/tests/events/migrations/deploy.js b/tests/events/migrations/deploy.js index 325cf3d0ec..5e3df0dc30 100644 --- a/tests/events/migrations/deploy.js +++ b/tests/events/migrations/deploy.js @@ -9,4 +9,4 @@ module.exports = async function (provider) { anchor.setProvider(provider); // Add your deploy script here. -} +}; diff --git a/tests/ido-pool/migrations/deploy.js b/tests/ido-pool/migrations/deploy.js index 325cf3d0ec..5e3df0dc30 100644 --- a/tests/ido-pool/migrations/deploy.js +++ b/tests/ido-pool/migrations/deploy.js @@ -9,4 +9,4 @@ module.exports = async function (provider) { anchor.setProvider(provider); // Add your deploy script here. -} +}; diff --git a/tests/ido-pool/tests/ido-pool.js b/tests/ido-pool/tests/ido-pool.js index e5cf8e5356..b44a6a6652 100644 --- a/tests/ido-pool/tests/ido-pool.js +++ b/tests/ido-pool/tests/ido-pool.js @@ -53,7 +53,7 @@ describe("ido-pool", () => { idoAuthorityWatermelon, provider.wallet.publicKey, [], - watermelonIdoAmount.toString(), + watermelonIdoAmount.toString() ); idoAuthority_watermelon_account = await getTokenAccount( provider, @@ -62,7 +62,7 @@ describe("ido-pool", () => { assert.ok(idoAuthority_watermelon_account.amount.eq(watermelonIdoAmount)); }); - // These are all variables the client will need to create in order to + // These are all variables the client will need to create in order to // initialize the IDO pool let idoTimes; let idoName = "test_ido"; @@ -70,28 +70,32 @@ describe("ido-pool", () => { it("Initializes the IDO pool", async () => { let bumps = new PoolBumps(); - const [idoAccount, idoAccountBump] = await anchor.web3.PublicKey.findProgramAddress( - [Buffer.from(idoName)], - program.programId - ); + const [idoAccount, idoAccountBump] = + await anchor.web3.PublicKey.findProgramAddress( + [Buffer.from(idoName)], + program.programId + ); bumps.idoAccount = idoAccountBump; - const [redeemableMint, redeemableMintBump] = await anchor.web3.PublicKey.findProgramAddress( - [Buffer.from(idoName), Buffer.from("redeemable_mint")], - program.programId - ); + const [redeemableMint, redeemableMintBump] = + await anchor.web3.PublicKey.findProgramAddress( + [Buffer.from(idoName), Buffer.from("redeemable_mint")], + program.programId + ); bumps.redeemableMint = redeemableMintBump; - const [poolWatermelon, poolWatermelonBump] = await anchor.web3.PublicKey.findProgramAddress( - [Buffer.from(idoName), Buffer.from("pool_watermelon")], - program.programId - ); + const [poolWatermelon, poolWatermelonBump] = + await anchor.web3.PublicKey.findProgramAddress( + [Buffer.from(idoName), Buffer.from("pool_watermelon")], + program.programId + ); bumps.poolWatermelon = poolWatermelonBump; - const [poolUsdc, poolUsdcBump] = await anchor.web3.PublicKey.findProgramAddress( - [Buffer.from(idoName), Buffer.from("pool_usdc")], - program.programId - ); + const [poolUsdc, poolUsdcBump] = + await anchor.web3.PublicKey.findProgramAddress( + [Buffer.from(idoName), Buffer.from("pool_usdc")], + program.programId + ); bumps.poolUsdc = poolUsdcBump; idoTimes = new IdoTimes(); @@ -171,15 +175,17 @@ describe("ido-pool", () => { usdcMint, userUsdc, program.provider.wallet.publicKey, - program.provider.wallet.publicKey, - ) - let createUserUsdcTrns = new anchor.web3.Transaction().add(createUserUsdcInstr); + program.provider.wallet.publicKey + ); + let createUserUsdcTrns = new anchor.web3.Transaction().add( + createUserUsdcInstr + ); await provider.send(createUserUsdcTrns); await usdcMintAccount.mintTo( userUsdc, provider.wallet.publicKey, [], - firstDeposit.toString(), + firstDeposit.toString() ); // Check if we inited correctly @@ -187,9 +193,11 @@ describe("ido-pool", () => { assert.ok(userUsdcAccount.amount.eq(firstDeposit)); const [userRedeemable] = await anchor.web3.PublicKey.findProgramAddress( - [provider.wallet.publicKey.toBuffer(), - Buffer.from(idoName), - Buffer.from("user_redeemable")], + [ + provider.wallet.publicKey.toBuffer(), + Buffer.from(idoName), + Buffer.from("user_redeemable"), + ], program.programId ); @@ -216,9 +224,9 @@ describe("ido-pool", () => { systemProgram: anchor.web3.SystemProgram.programId, tokenProgram: TOKEN_PROGRAM_ID, rent: anchor.web3.SYSVAR_RENT_PUBKEY, - } - }) - ] + }, + }), + ], }); } catch (err) { console.log("This is the error message", err.toString()); @@ -254,14 +262,14 @@ describe("ido-pool", () => { transferSolInstr = anchor.web3.SystemProgram.transfer({ fromPubkey: provider.wallet.publicKey, lamports: 100_000_000_000, // 100 sol - toPubkey: secondUserKeypair.publicKey + toPubkey: secondUserKeypair.publicKey, }); secondUserUsdc = await Token.getAssociatedTokenAddress( ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, usdcMint, secondUserKeypair.publicKey - ) + ); createSecondUserUsdcInstr = Token.createAssociatedTokenAccountInstruction( ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, @@ -278,19 +286,22 @@ describe("ido-pool", () => { secondUserUsdc, provider.wallet.publicKey, [], - secondDeposit.toString(), - ) + secondDeposit.toString() + ); // Checking the transfer went through secondUserUsdcAccount = await getTokenAccount(provider, secondUserUsdc); assert.ok(secondUserUsdcAccount.amount.eq(secondDeposit)); - const [secondUserRedeemable] = await anchor.web3.PublicKey.findProgramAddress( - [secondUserKeypair.publicKey.toBuffer(), - Buffer.from(idoName), - Buffer.from("user_redeemable")], - program.programId - ); + const [secondUserRedeemable] = + await anchor.web3.PublicKey.findProgramAddress( + [ + secondUserKeypair.publicKey.toBuffer(), + Buffer.from(idoName), + Buffer.from("user_redeemable"), + ], + program.programId + ); await program.rpc.exchangeUsdcForRedeemable(secondDeposit, { accounts: { @@ -315,9 +326,9 @@ describe("ido-pool", () => { tokenProgram: TOKEN_PROGRAM_ID, rent: anchor.web3.SYSVAR_RENT_PUBKEY, }, - }) + }), ], - signers: [secondUserKeypair] + signers: [secondUserKeypair], }); secondUserRedeemableAccount = await getTokenAccount( @@ -329,7 +340,6 @@ describe("ido-pool", () => { totalPoolUsdc = firstDeposit.add(secondDeposit); poolUsdcAccount = await getTokenAccount(provider, poolUsdc); assert.ok(poolUsdcAccount.amount.eq(totalPoolUsdc)); - }); const firstWithdrawal = new anchor.BN(2_000_000); @@ -351,16 +361,20 @@ describe("ido-pool", () => { ); const [userRedeemable] = await anchor.web3.PublicKey.findProgramAddress( - [provider.wallet.publicKey.toBuffer(), - Buffer.from(idoName), - Buffer.from("user_redeemable")], + [ + provider.wallet.publicKey.toBuffer(), + Buffer.from(idoName), + Buffer.from("user_redeemable"), + ], program.programId ); const [escrowUsdc] = await anchor.web3.PublicKey.findProgramAddress( - [provider.wallet.publicKey.toBuffer(), - Buffer.from(idoName), - Buffer.from("escrow_usdc")], + [ + provider.wallet.publicKey.toBuffer(), + Buffer.from(idoName), + Buffer.from("escrow_usdc"), + ], program.programId ); @@ -385,10 +399,10 @@ describe("ido-pool", () => { usdcMint, systemProgram: anchor.web3.SystemProgram.programId, tokenProgram: TOKEN_PROGRAM_ID, - rent: anchor.web3.SYSVAR_RENT_PUBKEY - } - }) - ] + rent: anchor.web3.SYSVAR_RENT_PUBKEY, + }, + }), + ], }); totalPoolUsdc = totalPoolUsdc.sub(firstWithdrawal); @@ -420,9 +434,11 @@ describe("ido-pool", () => { ); const [userRedeemable] = await anchor.web3.PublicKey.findProgramAddress( - [provider.wallet.publicKey.toBuffer(), - Buffer.from(idoName), - Buffer.from("user_redeemable")], + [ + provider.wallet.publicKey.toBuffer(), + Buffer.from(idoName), + Buffer.from("user_redeemable"), + ], program.programId ); @@ -469,12 +485,15 @@ describe("ido-pool", () => { program.programId ); - const [secondUserRedeemable] = await anchor.web3.PublicKey.findProgramAddress( - [secondUserKeypair.publicKey.toBuffer(), - Buffer.from(idoName), - Buffer.from("user_redeemable")], - program.programId - ); + const [secondUserRedeemable] = + await anchor.web3.PublicKey.findProgramAddress( + [ + secondUserKeypair.publicKey.toBuffer(), + Buffer.from(idoName), + Buffer.from("user_redeemable"), + ], + program.programId + ); const [poolWatermelon] = await anchor.web3.PublicKey.findProgramAddress( [Buffer.from(idoName), Buffer.from("pool_watermelon")], @@ -509,7 +528,7 @@ describe("ido-pool", () => { const [idoAccount] = await anchor.web3.PublicKey.findProgramAddress( [Buffer.from(idoName)], program.programId - ) + ); const [poolUsdc] = await anchor.web3.PublicKey.findProgramAddress( [Buffer.from(idoName), Buffer.from("pool_usdc")], @@ -546,9 +565,11 @@ describe("ido-pool", () => { ); const [escrowUsdc] = await anchor.web3.PublicKey.findProgramAddress( - [provider.wallet.publicKey.toBuffer(), - Buffer.from(idoName), - Buffer.from("escrow_usdc")], + [ + provider.wallet.publicKey.toBuffer(), + Buffer.from(idoName), + Buffer.from("escrow_usdc"), + ], program.programId ); @@ -561,25 +582,24 @@ describe("ido-pool", () => { idoAccount, usdcMint, tokenProgram: TOKEN_PROGRAM_ID, - } + }, }); userUsdcAccount = await getTokenAccount(provider, userUsdc); assert.ok(userUsdcAccount.amount.eq(firstWithdrawal)); }); - function PoolBumps() { this.idoAccount; this.redeemableMint; this.poolWatermelon; this.poolUsdc; - }; + } function IdoTimes() { this.startIdo; this.endDeposts; this.endIdo; this.endEscrow; - }; + } }); diff --git a/tests/interface/tests/interface.js b/tests/interface/tests/interface.js index 1049bdaf9e..574cac9e51 100644 --- a/tests/interface/tests/interface.js +++ b/tests/interface/tests/interface.js @@ -1,4 +1,4 @@ -const anchor = require('@project-serum/anchor'); +const anchor = require("@project-serum/anchor"); const assert = require("assert"); describe("interface", () => { diff --git a/tests/lockup/migrations/deploy.js b/tests/lockup/migrations/deploy.js index 3a536129e7..c1ac6f1d3d 100644 --- a/tests/lockup/migrations/deploy.js +++ b/tests/lockup/migrations/deploy.js @@ -31,7 +31,7 @@ module.exports = async function (provider) { }); // Delete the default whitelist entries. - const defaultEntry = { programId: new anchor.web3.PublicKey.default }; + const defaultEntry = { programId: new anchor.web3.PublicKey.default() }; await lockup.state.rpc.whitelistDelete(defaultEntry, { accounts: { authority: provider.wallet.publicKey, @@ -143,13 +143,11 @@ async function registrarInit( const rewardQ = anchor.web3.Keypair.generate(); const withdrawalTimelock = new anchor.BN(_withdrawalTimelock); const stakeRate = new anchor.BN(_stakeRate); - const [ - registrarSigner, - nonce, - ] = await anchor.web3.PublicKey.findProgramAddress( - [registrar.publicKey.toBuffer()], - registry.programId - ); + const [registrarSigner, nonce] = + await anchor.web3.PublicKey.findProgramAddress( + [registrar.publicKey.toBuffer()], + registry.programId + ); const poolMint = await serumCmn.createMint( registry.provider, registrarSigner diff --git a/tests/lockup/tests/lockup.js b/tests/lockup/tests/lockup.js index b825af3c98..0ada915d91 100644 --- a/tests/lockup/tests/lockup.js +++ b/tests/lockup/tests/lockup.js @@ -4,7 +4,7 @@ const serumCmn = require("@project-serum/common"); const { TOKEN_PROGRAM_ID } = require("@solana/spl-token"); const utils = require("./utils"); -anchor.utils.features.set('anchor-deprecated-state'); +anchor.utils.features.set("anchor-deprecated-state"); describe("Lockup and Registry", () => { // Read the provider from the configured environmnet. @@ -147,13 +147,11 @@ describe("Lockup and Registry", () => { const depositAmount = new anchor.BN(100); const vault = anchor.web3.Keypair.generate(); - let [ - _vestingSigner, - nonce, - ] = await anchor.web3.PublicKey.findProgramAddress( - [vesting.publicKey.toBuffer()], - lockup.programId - ); + let [_vestingSigner, nonce] = + await anchor.web3.PublicKey.findProgramAddress( + [vesting.publicKey.toBuffer()], + lockup.programId + ); vestingSigner = _vestingSigner; await lockup.rpc.createVesting( @@ -272,13 +270,11 @@ describe("Lockup and Registry", () => { let poolMint = null; it("Creates registry genesis", async () => { - const [ - _registrarSigner, - _nonce, - ] = await anchor.web3.PublicKey.findProgramAddress( - [registrar.publicKey.toBuffer()], - registry.programId - ); + const [_registrarSigner, _nonce] = + await anchor.web3.PublicKey.findProgramAddress( + [registrar.publicKey.toBuffer()], + registry.programId + ); registrarSigner = _registrarSigner; nonce = _nonce; poolMint = await serumCmn.createMint(provider, registrarSigner); @@ -326,7 +322,9 @@ describe("Lockup and Registry", () => { } ); - registrarAccount = await registry.account.registrar.fetch(registrar.publicKey); + registrarAccount = await registry.account.registrar.fetch( + registrar.publicKey + ); assert.ok(registrarAccount.authority.equals(provider.wallet.publicKey)); assert.equal(registrarAccount.nonce, nonce); @@ -344,13 +342,11 @@ describe("Lockup and Registry", () => { let balancesLocked = null; it("Creates a member", async () => { - const [ - _memberSigner, - nonce, - ] = await anchor.web3.PublicKey.findProgramAddress( - [registrar.publicKey.toBuffer(), member.publicKey.toBuffer()], - registry.programId - ); + const [_memberSigner, nonce] = + await anchor.web3.PublicKey.findProgramAddress( + [registrar.publicKey.toBuffer(), member.publicKey.toBuffer()], + registry.programId + ); memberSigner = _memberSigner; const [mainTx, _balances] = await utils.createBalanceSandbox( @@ -474,13 +470,11 @@ describe("Lockup and Registry", () => { }; const rewardAmount = new anchor.BN(200); const expiry = new anchor.BN(Date.now() / 1000 + 5); - const [ - _vendorSigner, - nonce, - ] = await anchor.web3.PublicKey.findProgramAddress( - [registrar.publicKey.toBuffer(), unlockedVendor.publicKey.toBuffer()], - registry.programId - ); + const [_vendorSigner, nonce] = + await anchor.web3.PublicKey.findProgramAddress( + [registrar.publicKey.toBuffer(), unlockedVendor.publicKey.toBuffer()], + registry.programId + ); unlockedVendorSigner = _vendorSigner; await registry.rpc.dropReward( @@ -593,13 +587,11 @@ describe("Lockup and Registry", () => { }; lockedRewardAmount = new anchor.BN(200); const expiry = new anchor.BN(Date.now() / 1000 + 5); - const [ - _vendorSigner, - nonce, - ] = await anchor.web3.PublicKey.findProgramAddress( - [registrar.publicKey.toBuffer(), lockedVendor.publicKey.toBuffer()], - registry.programId - ); + const [_vendorSigner, nonce] = + await anchor.web3.PublicKey.findProgramAddress( + [registrar.publicKey.toBuffer(), lockedVendor.publicKey.toBuffer()], + registry.programId + ); lockedVendorSigner = _vendorSigner; await registry.rpc.dropReward( @@ -672,13 +664,11 @@ describe("Lockup and Registry", () => { it("Claims a locked reward", async () => { vendoredVesting = anchor.web3.Keypair.generate(); vendoredVestingVault = anchor.web3.Keypair.generate(); - let [ - _vendoredVestingSigner, - nonce, - ] = await anchor.web3.PublicKey.findProgramAddress( - [vendoredVesting.publicKey.toBuffer()], - lockup.programId - ); + let [_vendoredVestingSigner, nonce] = + await anchor.web3.PublicKey.findProgramAddress( + [vendoredVesting.publicKey.toBuffer()], + lockup.programId + ); vendoredVestingSigner = _vendoredVestingSigner; const remainingAccounts = lockup.instruction.createVesting .accounts({ diff --git a/tests/misc/migrations/deploy.js b/tests/misc/migrations/deploy.js index 7cca271913..5e3df0dc30 100644 --- a/tests/misc/migrations/deploy.js +++ b/tests/misc/migrations/deploy.js @@ -1,4 +1,3 @@ - // Migrations are an early feature. Currently, they're nothing more than this // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. @@ -10,4 +9,4 @@ module.exports = async function (provider) { anchor.setProvider(provider); // Add your deploy script here. -} +}; diff --git a/tests/misc/tests/misc.js b/tests/misc/tests/misc.js index 992a517cfc..eae67a48c6 100644 --- a/tests/misc/tests/misc.js +++ b/tests/misc/tests/misc.js @@ -736,11 +736,12 @@ describe("misc", () => { ]); // Call for multiple kinds of .all. const allAccounts = await program.account.dataWithFilter.all(); - const allAccountsFilteredByBuffer = await program.account.dataWithFilter.all( - program.provider.wallet.publicKey.toBuffer() - ); - const allAccountsFilteredByProgramFilters1 = await program.account.dataWithFilter.all( - [ + const allAccountsFilteredByBuffer = + await program.account.dataWithFilter.all( + program.provider.wallet.publicKey.toBuffer() + ); + const allAccountsFilteredByProgramFilters1 = + await program.account.dataWithFilter.all([ { memcmp: { offset: 8, @@ -748,10 +749,9 @@ describe("misc", () => { }, }, { memcmp: { offset: 40, bytes: filterable1.toBase58() } }, - ] - ); - const allAccountsFilteredByProgramFilters2 = await program.account.dataWithFilter.all( - [ + ]); + const allAccountsFilteredByProgramFilters2 = + await program.account.dataWithFilter.all([ { memcmp: { offset: 8, @@ -759,8 +759,7 @@ describe("misc", () => { }, }, { memcmp: { offset: 40, bytes: filterable2.toBase58() } }, - ] - ); + ]); // Without filters there should be 4 accounts. assert.equal(allAccounts.length, 4); // Filtering by main wallet there should be 3 accounts. @@ -861,14 +860,17 @@ describe("misc", () => { }); it("init_if_needed throws if account exists but is not owned by the expected program", async () => { - const newAcc = await anchor.web3.PublicKey.findProgramAddress([utf8.encode("hello")], program.programId); + const newAcc = await anchor.web3.PublicKey.findProgramAddress( + [utf8.encode("hello")], + program.programId + ); await program.rpc.testInitIfNeededChecksOwner({ accounts: { data: newAcc[0], systemProgram: anchor.web3.SystemProgram.programId, payer: program.provider.wallet.publicKey, - owner: program.programId - } + owner: program.programId, + }, }); try { @@ -877,7 +879,7 @@ describe("misc", () => { data: newAcc[0], systemProgram: anchor.web3.SystemProgram.programId, payer: program.provider.wallet.publicKey, - owner: anchor.web3.Keypair.generate().publicKey + owner: anchor.web3.Keypair.generate().publicKey, }, }); assert.ok(false); @@ -887,20 +889,26 @@ describe("misc", () => { }); it("init_if_needed throws if pda account exists but does not have the expected seeds", async () => { - const newAcc = await anchor.web3.PublicKey.findProgramAddress([utf8.encode("nothello")], program.programId); + const newAcc = await anchor.web3.PublicKey.findProgramAddress( + [utf8.encode("nothello")], + program.programId + ); await program.rpc.testInitIfNeededChecksSeeds("nothello", { accounts: { data: newAcc[0], systemProgram: anchor.web3.SystemProgram.programId, payer: program.provider.wallet.publicKey, - } + }, }); // this will throw if it is not a proper PDA // we need this so we know that the following tx failed // not because it couldn't create this pda // but because the two pdas were different - anchor.web3.PublicKey.createProgramAddress([utf8.encode("hello")], program.programId); + anchor.web3.PublicKey.createProgramAddress( + [utf8.encode("hello")], + program.programId + ); try { await program.rpc.testInitIfNeededChecksSeeds("hello", { @@ -908,7 +916,7 @@ describe("misc", () => { data: newAcc[0], systemProgram: anchor.web3.SystemProgram.programId, payer: program.provider.wallet.publicKey, - owner: anchor.web3.Keypair.generate().publicKey + owner: anchor.web3.Keypair.generate().publicKey, }, }); assert.ok(false); @@ -917,8 +925,6 @@ describe("misc", () => { } }); - - it("init_if_needed throws if account exists but is not the expected space", async () => { const newAcc = anchor.web3.Keypair.generate(); await program.rpc.initWithSpace(3, { @@ -959,7 +965,7 @@ describe("misc", () => { }); try { - await program.rpc.testInitMintIfNeeded(6,{ + await program.rpc.testInitMintIfNeeded(6, { accounts: { mint: mint.publicKey, payer: program.provider.wallet.publicKey, @@ -967,7 +973,7 @@ describe("misc", () => { tokenProgram: TOKEN_PROGRAM_ID, rent: anchor.web3.SYSVAR_RENT_PUBKEY, mintAuthority: anchor.web3.Keypair.generate().publicKey, - freezeAuthority: program.provider.wallet.publicKey + freezeAuthority: program.provider.wallet.publicKey, }, signers: [mint], }); @@ -991,7 +997,7 @@ describe("misc", () => { }); try { - await program.rpc.testInitMintIfNeeded(6,{ + await program.rpc.testInitMintIfNeeded(6, { accounts: { mint: mint.publicKey, payer: program.provider.wallet.publicKey, @@ -999,7 +1005,7 @@ describe("misc", () => { tokenProgram: TOKEN_PROGRAM_ID, rent: anchor.web3.SYSVAR_RENT_PUBKEY, mintAuthority: program.provider.wallet.publicKey, - freezeAuthority: anchor.web3.Keypair.generate().publicKey + freezeAuthority: anchor.web3.Keypair.generate().publicKey, }, signers: [mint], }); @@ -1023,7 +1029,7 @@ describe("misc", () => { }); try { - await program.rpc.testInitMintIfNeeded(9,{ + await program.rpc.testInitMintIfNeeded(9, { accounts: { mint: mint.publicKey, payer: program.provider.wallet.publicKey, @@ -1031,7 +1037,7 @@ describe("misc", () => { tokenProgram: TOKEN_PROGRAM_ID, rent: anchor.web3.SYSVAR_RENT_PUBKEY, mintAuthority: program.provider.wallet.publicKey, - freezeAuthority: program.provider.wallet.publicKey + freezeAuthority: program.provider.wallet.publicKey, }, signers: [mint], }); @@ -1185,14 +1191,14 @@ describe("misc", () => { systemProgram: anchor.web3.SystemProgram.programId, tokenProgram: TOKEN_PROGRAM_ID, associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID, - authority: anchor.web3.Keypair.generate().publicKey + authority: anchor.web3.Keypair.generate().publicKey, }, }); assert.ok(false); } catch (err) { assert.equal(err.code, 2015); } - }) + }); it("init_if_needed throws if associated token exists but has the wrong mint", async () => { const mint = anchor.web3.Keypair.generate(); @@ -1248,14 +1254,14 @@ describe("misc", () => { systemProgram: anchor.web3.SystemProgram.programId, tokenProgram: TOKEN_PROGRAM_ID, associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID, - authority: program.provider.wallet.publicKey + authority: program.provider.wallet.publicKey, }, }); assert.ok(false); } catch (err) { assert.equal(err.code, 2014); } - }) + }); it("Can use multidimensional array", async () => { const array2d = new Array(10).fill(new Array(10).fill(99)); diff --git a/tests/multisig/migrations/deploy.js b/tests/multisig/migrations/deploy.js index 7cca271913..5e3df0dc30 100644 --- a/tests/multisig/migrations/deploy.js +++ b/tests/multisig/migrations/deploy.js @@ -1,4 +1,3 @@ - // Migrations are an early feature. Currently, they're nothing more than this // single deploy script that's invoked from the CLI, injecting a provider // configured from the workspace's Anchor.toml. @@ -10,4 +9,4 @@ module.exports = async function (provider) { anchor.setProvider(provider); // Add your deploy script here. -} +}; diff --git a/tests/multisig/tests/multisig.js b/tests/multisig/tests/multisig.js index 90a7cb96e3..a5ee1b25b6 100644 --- a/tests/multisig/tests/multisig.js +++ b/tests/multisig/tests/multisig.js @@ -9,13 +9,11 @@ describe("multisig", () => { it("Tests the multisig program", async () => { const multisig = anchor.web3.Keypair.generate(); - const [ - multisigSigner, - nonce, - ] = await anchor.web3.PublicKey.findProgramAddress( - [multisig.publicKey.toBuffer()], - program.programId - ); + const [multisigSigner, nonce] = + await anchor.web3.PublicKey.findProgramAddress( + [multisig.publicKey.toBuffer()], + program.programId + ); const multisigSize = 200; // Big enough. const ownerA = anchor.web3.Keypair.generate(); @@ -39,7 +37,9 @@ describe("multisig", () => { signers: [multisig], }); - let multisigAccount = await program.account.multisig.fetch(multisig.publicKey); + let multisigAccount = await program.account.multisig.fetch( + multisig.publicKey + ); assert.equal(multisigAccount.nonce, nonce); assert.ok(multisigAccount.threshold.eq(new anchor.BN(2))); @@ -59,8 +59,8 @@ describe("multisig", () => { }, ]; const newOwners = [ownerA.publicKey, ownerB.publicKey, ownerD.publicKey]; - const data = program.coder.instruction.encode('set_owners', { - owners: newOwners, + const data = program.coder.instruction.encode("set_owners", { + owners: newOwners, }); const transaction = anchor.web3.Keypair.generate(); @@ -81,7 +81,9 @@ describe("multisig", () => { signers: [transaction, ownerA], }); - const txAccount = await program.account.transaction.fetch(transaction.publicKey); + const txAccount = await program.account.transaction.fetch( + transaction.publicKey + ); assert.ok(txAccount.programId.equals(pid)); assert.deepEqual(txAccount.accounts, accounts); diff --git a/tests/package.json b/tests/package.json index ca97a700bd..66000d27a0 100644 --- a/tests/package.json +++ b/tests/package.json @@ -1,6 +1,10 @@ { "name": "anchor-tests", "private": true, + "scripts": { + "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", + "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" + }, "workspaces": [ "cashiers-check", "cfo", @@ -35,6 +39,7 @@ "chai": "^4.3.4", "mocha": "^9.1.3", "ts-mocha": "^8.0.0", - "typescript": "^4.4.4" + "typescript": "^4.4.4", + "prettier": "^2.5.1" } } diff --git a/tests/pyth/tests/oracleUtils.ts b/tests/pyth/tests/oracleUtils.ts index 54944b34fa..746b409b1d 100644 --- a/tests/pyth/tests/oracleUtils.ts +++ b/tests/pyth/tests/oracleUtils.ts @@ -1,21 +1,22 @@ -import { Buffer } from 'buffer' -import { BN, Program, web3 } from '@project-serum/anchor' +import { Buffer } from "buffer"; +import { BN, Program, web3 } from "@project-serum/anchor"; -export const Magic = 0xa1b2c3d4 -export const Version1 = 1 -export const Version = Version1 -export const PriceStatus = ['Unknown', 'Trading', 'Halted', 'Auction'] -export const CorpAction = ['NoCorpAct'] -export const PriceType = ['Unknown', 'Price', 'TWAP', 'Volatility'] +export const Magic = 0xa1b2c3d4; +export const Version1 = 1; +export const Version = Version1; +export const PriceStatus = ["Unknown", "Trading", "Halted", "Auction"]; +export const CorpAction = ["NoCorpAct"]; +export const PriceType = ["Unknown", "Price", "TWAP", "Volatility"]; -const empty32Buffer = Buffer.alloc(32) -const PKorNull = (data: Buffer) => (data.equals(empty32Buffer) ? null : new web3.PublicKey(data)) +const empty32Buffer = Buffer.alloc(32); +const PKorNull = (data: Buffer) => + data.equals(empty32Buffer) ? null : new web3.PublicKey(data); interface ICreatePriceFeed { - oracleProgram: Program - initPrice: number - confidence?: BN - expo?: number + oracleProgram: Program; + initPrice: number; + confidence?: BN; + expo?: number; } export const createPriceFeed = async ({ oracleProgram, @@ -23,160 +24,200 @@ export const createPriceFeed = async ({ confidence, expo = -4, }: ICreatePriceFeed) => { - const conf = confidence || new BN((initPrice / 10) * 10 ** -expo) - const collateralTokenFeed = new web3.Account() - await oracleProgram.rpc.initialize(new BN(initPrice * 10 ** -expo), expo, conf, { - accounts: { price: collateralTokenFeed.publicKey }, - signers: [collateralTokenFeed], - instructions: [ - web3.SystemProgram.createAccount({ - fromPubkey: oracleProgram.provider.wallet.publicKey, - newAccountPubkey: collateralTokenFeed.publicKey, - space: 3312, - lamports: await oracleProgram.provider.connection.getMinimumBalanceForRentExemption(3312), - programId: oracleProgram.programId, - }), - ], - }) - return collateralTokenFeed.publicKey -} + const conf = confidence || new BN((initPrice / 10) * 10 ** -expo); + const collateralTokenFeed = new web3.Account(); + await oracleProgram.rpc.initialize( + new BN(initPrice * 10 ** -expo), + expo, + conf, + { + accounts: { price: collateralTokenFeed.publicKey }, + signers: [collateralTokenFeed], + instructions: [ + web3.SystemProgram.createAccount({ + fromPubkey: oracleProgram.provider.wallet.publicKey, + newAccountPubkey: collateralTokenFeed.publicKey, + space: 3312, + lamports: + await oracleProgram.provider.connection.getMinimumBalanceForRentExemption( + 3312 + ), + programId: oracleProgram.programId, + }), + ], + } + ); + return collateralTokenFeed.publicKey; +}; export const setFeedPrice = async ( oracleProgram: Program, newPrice: number, priceFeed: web3.PublicKey ) => { - const info = await oracleProgram.provider.connection.getAccountInfo(priceFeed) - const data = parsePriceData(info.data) + const info = await oracleProgram.provider.connection.getAccountInfo( + priceFeed + ); + const data = parsePriceData(info.data); await oracleProgram.rpc.setPrice(new BN(newPrice * 10 ** -data.exponent), { accounts: { price: priceFeed }, - }) -} -export const getFeedData = async (oracleProgram: Program, priceFeed: web3.PublicKey) => { - const info = await oracleProgram.provider.connection.getAccountInfo(priceFeed) - return parsePriceData(info.data) -} + }); +}; +export const getFeedData = async ( + oracleProgram: Program, + priceFeed: web3.PublicKey +) => { + const info = await oracleProgram.provider.connection.getAccountInfo( + priceFeed + ); + return parsePriceData(info.data); +}; // https://github.com/nodejs/node/blob/v14.17.0/lib/internal/errors.js#L758 -const ERR_BUFFER_OUT_OF_BOUNDS = () => new Error('Attempt to access memory outside buffer bounds') +const ERR_BUFFER_OUT_OF_BOUNDS = () => + new Error("Attempt to access memory outside buffer bounds"); // https://github.com/nodejs/node/blob/v14.17.0/lib/internal/errors.js#L968 const ERR_INVALID_ARG_TYPE = (name: string, expected: string, actual: any) => - new Error(`The "${name}" argument must be of type ${expected}. Received ${actual}`) + new Error( + `The "${name}" argument must be of type ${expected}. Received ${actual}` + ); // https://github.com/nodejs/node/blob/v14.17.0/lib/internal/errors.js#L1262 const ERR_OUT_OF_RANGE = (str: string, range: string, received: number) => - new Error(`The value of "${str} is out of range. It must be ${range}. Received ${received}`) + new Error( + `The value of "${str} is out of range. It must be ${range}. Received ${received}` + ); // https://github.com/nodejs/node/blob/v14.17.0/lib/internal/validators.js#L127-L130 function validateNumber(value: any, name: string) { - if (typeof value !== 'number') throw ERR_INVALID_ARG_TYPE(name, 'number', value) + if (typeof value !== "number") + throw ERR_INVALID_ARG_TYPE(name, "number", value); } // https://github.com/nodejs/node/blob/v14.17.0/lib/internal/buffer.js#L68-L80 function boundsError(value: number, length: number) { if (Math.floor(value) !== value) { - validateNumber(value, 'offset') - throw ERR_OUT_OF_RANGE('offset', 'an integer', value) + validateNumber(value, "offset"); + throw ERR_OUT_OF_RANGE("offset", "an integer", value); } - if (length < 0) throw ERR_BUFFER_OUT_OF_BOUNDS() + if (length < 0) throw ERR_BUFFER_OUT_OF_BOUNDS(); - throw ERR_OUT_OF_RANGE('offset', `>= 0 and <= ${length}`, value) + throw ERR_OUT_OF_RANGE("offset", `>= 0 and <= ${length}`, value); } export function readBigInt64LE(buffer: Buffer, offset = 0): bigint { - validateNumber(offset, 'offset') - const first = buffer[offset] - const last = buffer[offset + 7] - if (first === undefined || last === undefined) boundsError(offset, buffer.length - 8) + validateNumber(offset, "offset"); + const first = buffer[offset]; + const last = buffer[offset + 7]; + if (first === undefined || last === undefined) + boundsError(offset, buffer.length - 8); const val = - buffer[offset + 4] + buffer[offset + 5] * 2 ** 8 + buffer[offset + 6] * 2 ** 16 + (last << 24) // Overflow + buffer[offset + 4] + + buffer[offset + 5] * 2 ** 8 + + buffer[offset + 6] * 2 ** 16 + + (last << 24); // Overflow return ( (BigInt(val) << BigInt(32)) + BigInt( - first + buffer[++offset] * 2 ** 8 + buffer[++offset] * 2 ** 16 + buffer[++offset] * 2 ** 24 + first + + buffer[++offset] * 2 ** 8 + + buffer[++offset] * 2 ** 16 + + buffer[++offset] * 2 ** 24 ) - ) + ); } // https://github.com/nodejs/node/blob/v14.17.0/lib/internal/buffer.js#L89-L107 export function readBigUInt64LE(buffer: Buffer, offset = 0): bigint { - validateNumber(offset, 'offset') - const first = buffer[offset] - const last = buffer[offset + 7] - if (first === undefined || last === undefined) boundsError(offset, buffer.length - 8) + validateNumber(offset, "offset"); + const first = buffer[offset]; + const last = buffer[offset + 7]; + if (first === undefined || last === undefined) + boundsError(offset, buffer.length - 8); const lo = - first + buffer[++offset] * 2 ** 8 + buffer[++offset] * 2 ** 16 + buffer[++offset] * 2 ** 24 + first + + buffer[++offset] * 2 ** 8 + + buffer[++offset] * 2 ** 16 + + buffer[++offset] * 2 ** 24; const hi = - buffer[++offset] + buffer[++offset] * 2 ** 8 + buffer[++offset] * 2 ** 16 + last * 2 ** 24 + buffer[++offset] + + buffer[++offset] * 2 ** 8 + + buffer[++offset] * 2 ** 16 + + last * 2 ** 24; - return BigInt(lo) + (BigInt(hi) << BigInt(32)) // tslint:disable-line:no-bitwise + return BigInt(lo) + (BigInt(hi) << BigInt(32)); // tslint:disable-line:no-bitwise } export const parsePriceData = (data: Buffer) => { // Pyth magic number. - const magic = data.readUInt32LE(0) + const magic = data.readUInt32LE(0); // Program version. - const version = data.readUInt32LE(4) + const version = data.readUInt32LE(4); // Account type. - const type = data.readUInt32LE(8) + const type = data.readUInt32LE(8); // Price account size. - const size = data.readUInt32LE(12) + const size = data.readUInt32LE(12); // Price or calculation type. - const priceType = data.readUInt32LE(16) + const priceType = data.readUInt32LE(16); // Price exponent. - const exponent = data.readInt32LE(20) + const exponent = data.readInt32LE(20); // Number of component prices. - const numComponentPrices = data.readUInt32LE(24) + const numComponentPrices = data.readUInt32LE(24); // unused // const unused = accountInfo.data.readUInt32LE(28) // Currently accumulating price slot. - const currentSlot = readBigUInt64LE(data, 32) + const currentSlot = readBigUInt64LE(data, 32); // Valid on-chain slot of aggregate price. - const validSlot = readBigUInt64LE(data, 40) + const validSlot = readBigUInt64LE(data, 40); // Time-weighted average price. - const twapComponent = readBigInt64LE(data, 48) - const twap = Number(twapComponent) * 10 ** exponent + const twapComponent = readBigInt64LE(data, 48); + const twap = Number(twapComponent) * 10 ** exponent; // Annualized price volatility. - const avolComponent = readBigUInt64LE(data, 56) - const avol = Number(avolComponent) * 10 ** exponent + const avolComponent = readBigUInt64LE(data, 56); + const avol = Number(avolComponent) * 10 ** exponent; // Space for future derived values. - const drv0Component = readBigInt64LE(data, 64) - const drv0 = Number(drv0Component) * 10 ** exponent - const drv1Component = readBigInt64LE(data, 72) - const drv1 = Number(drv1Component) * 10 ** exponent - const drv2Component = readBigInt64LE(data, 80) - const drv2 = Number(drv2Component) * 10 ** exponent - const drv3Component = readBigInt64LE(data, 88) - const drv3 = Number(drv3Component) * 10 ** exponent - const drv4Component = readBigInt64LE(data, 96) - const drv4 = Number(drv4Component) * 10 ** exponent - const drv5Component = readBigInt64LE(data, 104) - const drv5 = Number(drv5Component) * 10 ** exponent + const drv0Component = readBigInt64LE(data, 64); + const drv0 = Number(drv0Component) * 10 ** exponent; + const drv1Component = readBigInt64LE(data, 72); + const drv1 = Number(drv1Component) * 10 ** exponent; + const drv2Component = readBigInt64LE(data, 80); + const drv2 = Number(drv2Component) * 10 ** exponent; + const drv3Component = readBigInt64LE(data, 88); + const drv3 = Number(drv3Component) * 10 ** exponent; + const drv4Component = readBigInt64LE(data, 96); + const drv4 = Number(drv4Component) * 10 ** exponent; + const drv5Component = readBigInt64LE(data, 104); + const drv5 = Number(drv5Component) * 10 ** exponent; // Product id / reference account. - const productAccountKey = new web3.PublicKey(data.slice(112, 144)) + const productAccountKey = new web3.PublicKey(data.slice(112, 144)); // Next price account in list. - const nextPriceAccountKey = PKorNull(data.slice(144, 176)) + const nextPriceAccountKey = PKorNull(data.slice(144, 176)); // Aggregate price updater. - const aggregatePriceUpdaterAccountKey = new web3.PublicKey(data.slice(176, 208)) - const aggregatePriceInfo = parsePriceInfo(data.slice(208, 240), exponent) + const aggregatePriceUpdaterAccountKey = new web3.PublicKey( + data.slice(176, 208) + ); + const aggregatePriceInfo = parsePriceInfo(data.slice(208, 240), exponent); // Price components - up to 32. - const priceComponents = [] - let offset = 240 - let shouldContinue = true + const priceComponents = []; + let offset = 240; + let shouldContinue = true; while (offset < data.length && shouldContinue) { - const publisher = PKorNull(data.slice(offset, offset + 32)) - offset += 32 + const publisher = PKorNull(data.slice(offset, offset + 32)); + offset += 32; if (publisher) { - const aggregate = parsePriceInfo(data.slice(offset, offset + 32), exponent) - offset += 32 - const latest = parsePriceInfo(data.slice(offset, offset + 32), exponent) - offset += 32 - priceComponents.push({ publisher, aggregate, latest }) + const aggregate = parsePriceInfo( + data.slice(offset, offset + 32), + exponent + ); + offset += 32; + const latest = parsePriceInfo(data.slice(offset, offset + 32), exponent); + offset += 32; + priceComponents.push({ publisher, aggregate, latest }); } else { - shouldContinue = false + shouldContinue = false; } } return { @@ -210,56 +251,56 @@ export const parsePriceData = (data: Buffer) => { aggregatePriceUpdaterAccountKey, ...aggregatePriceInfo, priceComponents, - } -} + }; +}; interface ProductAttributes { - [index: string]: string + [index: string]: string; } export const parseProductData = (data: Buffer) => { // Pyth magic number. - const magic = data.readUInt32LE(0) + const magic = data.readUInt32LE(0); // Program version. - const version = data.readUInt32LE(4) + const version = data.readUInt32LE(4); // Account type. - const type = data.readUInt32LE(8) + const type = data.readUInt32LE(8); // Price account size. - const size = data.readUInt32LE(12) + const size = data.readUInt32LE(12); // First price account in list. - const priceAccountBytes = data.slice(16, 48) - const priceAccountKey = new web3.PublicKey(priceAccountBytes) - const product: ProductAttributes = {} - let idx = 48 + const priceAccountBytes = data.slice(16, 48); + const priceAccountKey = new web3.PublicKey(priceAccountBytes); + const product: ProductAttributes = {}; + let idx = 48; while (idx < data.length) { - const keyLength = data[idx] - idx++ + const keyLength = data[idx]; + idx++; if (keyLength) { - const key = data.slice(idx, idx + keyLength).toString() - idx += keyLength - const valueLength = data[idx] - idx++ - const value = data.slice(idx, idx + valueLength).toString() - idx += valueLength - product[key] = value + const key = data.slice(idx, idx + keyLength).toString(); + idx += keyLength; + const valueLength = data[idx]; + idx++; + const value = data.slice(idx, idx + valueLength).toString(); + idx += valueLength; + product[key] = value; } } - return { magic, version, type, size, priceAccountKey, product } -} + return { magic, version, type, size, priceAccountKey, product }; +}; const parsePriceInfo = (data: Buffer, exponent: number) => { // Aggregate price. - const priceComponent = data.readBigUInt64LE(0) - const price = Number(priceComponent) * 10 ** exponent + const priceComponent = data.readBigUInt64LE(0); + const price = Number(priceComponent) * 10 ** exponent; // Aggregate confidence. - const confidenceComponent = data.readBigUInt64LE(8) - const confidence = Number(confidenceComponent) * 10 ** exponent + const confidenceComponent = data.readBigUInt64LE(8); + const confidence = Number(confidenceComponent) * 10 ** exponent; // Aggregate status. - const status = data.readUInt32LE(16) + const status = data.readUInt32LE(16); // Aggregate corporate action. - const corporateAction = data.readUInt32LE(20) + const corporateAction = data.readUInt32LE(20); // Aggregate publish slot. - const publishSlot = data.readBigUInt64LE(24) + const publishSlot = data.readBigUInt64LE(24); return { priceComponent, price, @@ -268,5 +309,5 @@ const parsePriceInfo = (data: Buffer, exponent: number) => { status, corporateAction, publishSlot, - } -} + }; +}; diff --git a/tests/pyth/tests/pyth.spec.ts b/tests/pyth/tests/pyth.spec.ts index 72320348ce..c55ebd3cf9 100644 --- a/tests/pyth/tests/pyth.spec.ts +++ b/tests/pyth/tests/pyth.spec.ts @@ -1,39 +1,39 @@ -import * as anchor from '@project-serum/anchor' -import { BN, Program, web3 } from '@project-serum/anchor' -import assert from 'assert' -import { createPriceFeed, setFeedPrice, getFeedData } from './oracleUtils' +import * as anchor from "@project-serum/anchor"; +import { BN, Program, web3 } from "@project-serum/anchor"; +import assert from "assert"; +import { createPriceFeed, setFeedPrice, getFeedData } from "./oracleUtils"; -describe('pyth-oracle', () => { - anchor.setProvider(anchor.Provider.env()) - const program = anchor.workspace.Pyth as Program +describe("pyth-oracle", () => { + anchor.setProvider(anchor.Provider.env()); + const program = anchor.workspace.Pyth as Program; - it('initialize', async () => { - const price = 50000 + it("initialize", async () => { + const price = 50000; const priceFeedAddress = await createPriceFeed({ oracleProgram: program, initPrice: price, expo: -6, - }) - const feedData = await getFeedData(program, priceFeedAddress) - assert.ok(feedData.price === price) - }) + }); + const feedData = await getFeedData(program, priceFeedAddress); + assert.ok(feedData.price === price); + }); - it('change feed price', async () => { - const price = 50000 - const expo = -7 + it("change feed price", async () => { + const price = 50000; + const expo = -7; const priceFeedAddress = await createPriceFeed({ oracleProgram: program, initPrice: price, expo: expo, - }) - const feedDataBefore = await getFeedData(program, priceFeedAddress) - assert.ok(feedDataBefore.price === price) - assert.ok(feedDataBefore.exponent === expo) + }); + const feedDataBefore = await getFeedData(program, priceFeedAddress); + assert.ok(feedDataBefore.price === price); + assert.ok(feedDataBefore.exponent === expo); - const newPrice = 55000 - await setFeedPrice(program, newPrice, priceFeedAddress) - const feedDataAfter = await getFeedData(program, priceFeedAddress) - assert.ok(feedDataAfter.price === newPrice) - assert.ok(feedDataAfter.exponent === expo) - }) -}) + const newPrice = 55000; + await setFeedPrice(program, newPrice, priceFeedAddress); + const feedDataAfter = await getFeedData(program, priceFeedAddress); + assert.ok(feedDataAfter.price === newPrice); + assert.ok(feedDataAfter.exponent === expo); + }); +}); diff --git a/tests/swap/migrations/deploy.js b/tests/swap/migrations/deploy.js index 325cf3d0ec..5e3df0dc30 100644 --- a/tests/swap/migrations/deploy.js +++ b/tests/swap/migrations/deploy.js @@ -9,4 +9,4 @@ module.exports = async function (provider) { anchor.setProvider(provider); // Add your deploy script here. -} +}; diff --git a/tests/swap/tests/utils/index.js b/tests/swap/tests/utils/index.js index ffca641ff3..c7241cae54 100644 --- a/tests/swap/tests/utils/index.js +++ b/tests/swap/tests/utils/index.js @@ -277,43 +277,39 @@ async function setupMarket({ ); for (let k = 0; k < asks.length; k += 1) { let ask = asks[k]; - const { - transaction, - signers, - } = await MARKET_A_USDC.makePlaceOrderTransaction(provider.connection, { - owner: marketMaker.account, - payer: marketMaker.baseToken, - side: "sell", - price: ask[0], - size: ask[1], - orderType: "postOnly", - clientId: undefined, - openOrdersAddressKey: undefined, - openOrdersAccount: undefined, - feeDiscountPubkey: null, - selfTradeBehavior: "abortTransaction", - }); + const { transaction, signers } = + await MARKET_A_USDC.makePlaceOrderTransaction(provider.connection, { + owner: marketMaker.account, + payer: marketMaker.baseToken, + side: "sell", + price: ask[0], + size: ask[1], + orderType: "postOnly", + clientId: undefined, + openOrdersAddressKey: undefined, + openOrdersAccount: undefined, + feeDiscountPubkey: null, + selfTradeBehavior: "abortTransaction", + }); await provider.send(transaction, signers.concat(marketMaker.account)); } for (let k = 0; k < bids.length; k += 1) { let bid = bids[k]; - const { - transaction, - signers, - } = await MARKET_A_USDC.makePlaceOrderTransaction(provider.connection, { - owner: marketMaker.account, - payer: marketMaker.quoteToken, - side: "buy", - price: bid[0], - size: bid[1], - orderType: "postOnly", - clientId: undefined, - openOrdersAddressKey: undefined, - openOrdersAccount: undefined, - feeDiscountPubkey: null, - selfTradeBehavior: "abortTransaction", - }); + const { transaction, signers } = + await MARKET_A_USDC.makePlaceOrderTransaction(provider.connection, { + owner: marketMaker.account, + payer: marketMaker.quoteToken, + side: "buy", + price: bid[0], + size: bid[1], + orderType: "postOnly", + clientId: undefined, + openOrdersAddressKey: undefined, + openOrdersAccount: undefined, + feeDiscountPubkey: null, + selfTradeBehavior: "abortTransaction", + }); await provider.send(transaction, signers.concat(marketMaker.account)); } diff --git a/tests/system-accounts/tests/system-accounts.js b/tests/system-accounts/tests/system-accounts.js index 9930ab70c2..9d5f062c39 100644 --- a/tests/system-accounts/tests/system-accounts.js +++ b/tests/system-accounts/tests/system-accounts.js @@ -1,33 +1,33 @@ -const anchor = require('@project-serum/anchor'); -const splToken = require('@solana/spl-token'); -const assert = require('assert'); +const anchor = require("@project-serum/anchor"); +const splToken = require("@solana/spl-token"); +const assert = require("assert"); -describe('system_accounts', () => { +describe("system_accounts", () => { anchor.setProvider(anchor.Provider.local()); const program = anchor.workspace.SystemAccounts; const authority = program.provider.wallet.payer; const wallet = anchor.web3.Keypair.generate(); - it('Is initialized!', async () => { + it("Is initialized!", async () => { const tx = await program.rpc.initialize({ accounts: { authority: authority.publicKey, - wallet: wallet.publicKey + wallet: wallet.publicKey, }, - signers: [authority] + signers: [authority], }); console.log("Your transaction signature", tx); }); - it('Emits an AccountNotSystemOwned error', async () => { + it("Emits an AccountNotSystemOwned error", async () => { const mint = await splToken.Token.createMint( program.provider.connection, authority, authority.publicKey, null, 9, - splToken.TOKEN_PROGRAM_ID, + splToken.TOKEN_PROGRAM_ID ); const tokenAccount = await mint.createAssociatedTokenAccount( @@ -38,20 +38,20 @@ describe('system_accounts', () => { tokenAccount, authority.publicKey, [], - 1 * anchor.web3.LAMPORTS_PER_SOL, + 1 * anchor.web3.LAMPORTS_PER_SOL ); try { await program.rpc.initialize({ accounts: { authority: authority.publicKey, - wallet: tokenAccount + wallet: tokenAccount, }, - signers: [authority] - }) + signers: [authority], + }); assert.ok(false); } catch (err) { - const errMsg = 'The given account is not owned by the system program'; + const errMsg = "The given account is not owned by the system program"; assert.equal(err.toString(), errMsg); assert.equal(err.msg, errMsg); assert.equal(err.code, 3011); diff --git a/tests/sysvars/tests/sysvars.js b/tests/sysvars/tests/sysvars.js index f396a472bc..a0c021fd24 100644 --- a/tests/sysvars/tests/sysvars.js +++ b/tests/sysvars/tests/sysvars.js @@ -1,11 +1,10 @@ -const anchor = require('@project-serum/anchor'); - -describe('sysvars', () => { +const anchor = require("@project-serum/anchor"); +describe("sysvars", () => { // Configure the client to use the local cluster. anchor.setProvider(anchor.Provider.local()); - it('Is initialized!', async () => { + it("Is initialized!", async () => { const program = anchor.workspace.Sysvars; const tx = await program.rpc.sysvars({ accounts: { diff --git a/tests/tictactoe/migrations/deploy.js b/tests/tictactoe/migrations/deploy.js index 325cf3d0ec..5e3df0dc30 100644 --- a/tests/tictactoe/migrations/deploy.js +++ b/tests/tictactoe/migrations/deploy.js @@ -9,4 +9,4 @@ module.exports = async function (provider) { anchor.setProvider(provider); // Add your deploy script here. -} +}; diff --git a/tests/tictactoe/tests/tictactoe.js b/tests/tictactoe/tests/tictactoe.js index 3429fbe82e..268886f2c8 100644 --- a/tests/tictactoe/tests/tictactoe.js +++ b/tests/tictactoe/tests/tictactoe.js @@ -1,14 +1,13 @@ -const anchor = require('@project-serum/anchor'); - -describe('tictactoe', () => { +const anchor = require("@project-serum/anchor"); +describe("tictactoe", () => { anchor.setProvider(anchor.Provider.env()); const program = anchor.workspace.Tictactoe; - let dashboard = anchor.web3.Keypair.generate() - let game = anchor.web3.Keypair.generate() - let player_o = anchor.web3.Keypair.generate() + let dashboard = anchor.web3.Keypair.generate(); + let game = anchor.web3.Keypair.generate(); + let player_o = anchor.web3.Keypair.generate(); - it('Initialize Dashboard', async () => { + it("Initialize Dashboard", async () => { const tx = await program.rpc.initializeDashboard({ accounts: { authority: program.provider.wallet.publicKey, @@ -16,13 +15,15 @@ describe('tictactoe', () => { rent: anchor.web3.SYSVAR_RENT_PUBKEY, }, signers: [dashboard], - instructions: [await program.account.dashboard.createInstruction(dashboard)] - }) + instructions: [ + await program.account.dashboard.createInstruction(dashboard), + ], + }); - console.log("transaction: ", tx) + console.log("transaction: ", tx); }); - it('Initialize Game', async () => { + it("Initialize Game", async () => { const tx = await program.rpc.initialize({ accounts: { playerX: program.provider.wallet.publicKey, @@ -31,127 +32,126 @@ describe('tictactoe', () => { rent: anchor.web3.SYSVAR_RENT_PUBKEY, }, signers: [game], - instructions: [await program.account.game.createInstruction(game)] - }) + instructions: [await program.account.game.createInstruction(game)], + }); - console.log("transaction: ", tx) + console.log("transaction: ", tx); }); - it('Player O joins', async () => { + it("Player O joins", async () => { const tx = await program.rpc.playerJoin({ accounts: { playerO: player_o.publicKey, game: game.publicKey, }, signers: [player_o], - }) + }); - console.log("transaction: ", tx) + console.log("transaction: ", tx); }); - it('Player x plays', async () => { + it("Player x plays", async () => { const tx = await program.rpc.playerMove(1, 0, { accounts: { player: program.provider.wallet.publicKey, game: game.publicKey, }, - }) - console.log("transaction: ", tx) + }); + console.log("transaction: ", tx); }); - it('Player o plays', async () => { + it("Player o plays", async () => { const tx = await program.rpc.playerMove(2, 1, { accounts: { player: player_o.publicKey, game: game.publicKey, }, - signers: [player_o] - }) - console.log("transaction: ", tx) + signers: [player_o], + }); + console.log("transaction: ", tx); }); - it('Player x plays', async () => { + it("Player x plays", async () => { const tx = await program.rpc.playerMove(1, 3, { accounts: { player: program.provider.wallet.publicKey, game: game.publicKey, }, - }) - console.log("transaction: ", tx) + }); + console.log("transaction: ", tx); }); - it('Player o plays', async () => { + it("Player o plays", async () => { const tx = await program.rpc.playerMove(2, 6, { accounts: { player: player_o.publicKey, game: game.publicKey, }, - signers: [player_o] - }) - console.log("transaction: ", tx) + signers: [player_o], + }); + console.log("transaction: ", tx); }); - it('Player x plays', async () => { + it("Player x plays", async () => { const tx = await program.rpc.playerMove(1, 2, { accounts: { player: program.provider.wallet.publicKey, game: game.publicKey, }, - }) - console.log("transaction: ", tx) + }); + console.log("transaction: ", tx); }); - it('Player o plays', async () => { + it("Player o plays", async () => { const tx = await program.rpc.playerMove(2, 4, { accounts: { player: player_o.publicKey, game: game.publicKey, }, - signers: [player_o] - }) - console.log("transaction: ", tx) + signers: [player_o], + }); + console.log("transaction: ", tx); }); - it('Player x plays', async () => { + it("Player x plays", async () => { const tx = await program.rpc.playerMove(1, 5, { accounts: { player: program.provider.wallet.publicKey, game: game.publicKey, }, - }) - console.log("transaction: ", tx) + }); + console.log("transaction: ", tx); }); - it('Player o plays', async () => { + it("Player o plays", async () => { const tx = await program.rpc.playerMove(2, 8, { accounts: { player: player_o.publicKey, game: game.publicKey, }, - signers: [player_o] - }) - console.log("transaction: ", tx) + signers: [player_o], + }); + console.log("transaction: ", tx); }); - it('Player x plays', async () => { + it("Player x plays", async () => { const tx = await program.rpc.playerMove(1, 7, { accounts: { player: program.provider.wallet.publicKey, game: game.publicKey, }, - }) - console.log("transaction: ", tx) + }); + console.log("transaction: ", tx); }); - it('Status', async () => { + it("Status", async () => { const tx = await program.rpc.status({ accounts: { dashboard: dashboard.publicKey, game: game.publicKey, }, - }) + }); - console.log("transaction: ", tx) + console.log("transaction: ", tx); }); - }); diff --git a/tests/typescript/migrations/deploy.ts b/tests/typescript/migrations/deploy.ts index 690db12fcd..53e1252d69 100644 --- a/tests/typescript/migrations/deploy.ts +++ b/tests/typescript/migrations/deploy.ts @@ -19,4 +19,4 @@ module.exports = async function (provider) { } await deployAsync("Typescript migration example complete."); -} +}; diff --git a/tests/typescript/tests/typescript.spec.ts b/tests/typescript/tests/typescript.spec.ts index 6a828ab220..eb93acba37 100644 --- a/tests/typescript/tests/typescript.spec.ts +++ b/tests/typescript/tests/typescript.spec.ts @@ -1,11 +1,10 @@ -import * as anchor from '@project-serum/anchor'; - -describe('typescript', () => { +import * as anchor from "@project-serum/anchor"; +describe("typescript", () => { // Configure the client to use the local cluster. anchor.setProvider(anchor.Provider.env()); - it('Is initialized!', async () => { + it("Is initialized!", async () => { // Add your test here. const program = anchor.workspace.Typescript; const tx = await program.rpc.initialize(); diff --git a/tests/yarn.lock b/tests/yarn.lock index 21e2d88880..06b70a7019 100644 --- a/tests/yarn.lock +++ b/tests/yarn.lock @@ -962,6 +962,11 @@ picomatch@^2.0.4, picomatch@^2.2.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== +prettier@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" + integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== + randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" diff --git a/tests/zero-copy/migrations/deploy.js b/tests/zero-copy/migrations/deploy.js index 325cf3d0ec..5e3df0dc30 100644 --- a/tests/zero-copy/migrations/deploy.js +++ b/tests/zero-copy/migrations/deploy.js @@ -9,4 +9,4 @@ module.exports = async function (provider) { anchor.setProvider(provider); // Add your deploy script here. -} +}; diff --git a/tests/zero-copy/tests/zero-copy.js b/tests/zero-copy/tests/zero-copy.js index fa86800c62..d113aa122a 100644 --- a/tests/zero-copy/tests/zero-copy.js +++ b/tests/zero-copy/tests/zero-copy.js @@ -1,17 +1,17 @@ -const anchor = require('@project-serum/anchor') -const PublicKey = anchor.web3.PublicKey -const BN = anchor.BN -const assert = require('assert') +const anchor = require("@project-serum/anchor"); +const PublicKey = anchor.web3.PublicKey; +const BN = anchor.BN; +const assert = require("assert"); -describe('zero-copy', () => { +describe("zero-copy", () => { // Configure the client to use the local cluster. - anchor.setProvider(anchor.Provider.env()) + anchor.setProvider(anchor.Provider.env()); - const program = anchor.workspace.ZeroCopy - const programCpi = anchor.workspace.ZeroCpi + const program = anchor.workspace.ZeroCopy; + const programCpi = anchor.workspace.ZeroCpi; - const foo = anchor.web3.Keypair.generate() - it('Is creates a zero copy account', async () => { + const foo = anchor.web3.Keypair.generate(); + it("Is creates a zero copy account", async () => { await program.rpc.createFoo({ accounts: { foo: foo.publicKey, @@ -20,70 +20,73 @@ describe('zero-copy', () => { }, instructions: [await program.account.foo.createInstruction(foo)], signers: [foo], - }) - const account = await program.account.foo.fetch(foo.publicKey) + }); + const account = await program.account.foo.fetch(foo.publicKey); assert.ok( JSON.stringify(account.authority.toBuffer()) === JSON.stringify(program.provider.wallet.publicKey.toBuffer()) - ) - assert.ok(account.data.toNumber() === 0) - assert.ok(account.secondData.toNumber() === 0) + ); + assert.ok(account.data.toNumber() === 0); + assert.ok(account.secondData.toNumber() === 0); assert.ok( JSON.stringify(account.secondAuthority) === JSON.stringify([...program.provider.wallet.publicKey.toBuffer()]) - ) - }) + ); + }); - it('Updates a zero copy account field', async () => { + it("Updates a zero copy account field", async () => { await program.rpc.updateFoo(new BN(1234), { accounts: { foo: foo.publicKey, authority: program.provider.wallet.publicKey, }, - }) + }); - const account = await program.account.foo.fetch(foo.publicKey) + const account = await program.account.foo.fetch(foo.publicKey); assert.ok( JSON.stringify(account.authority.toBuffer()) === JSON.stringify(program.provider.wallet.publicKey.toBuffer()) - ) - assert.ok(account.data.toNumber() === 1234) - assert.ok(account.secondData.toNumber() === 0) + ); + assert.ok(account.data.toNumber() === 1234); + assert.ok(account.secondData.toNumber() === 0); assert.ok( JSON.stringify(account.secondAuthority) === JSON.stringify([...program.provider.wallet.publicKey.toBuffer()]) - ) - }) + ); + }); - it('Updates a a second zero copy account field', async () => { + it("Updates a a second zero copy account field", async () => { await program.rpc.updateFooSecond(new BN(55), { accounts: { foo: foo.publicKey, secondAuthority: program.provider.wallet.publicKey, }, - }) + }); - const account = await program.account.foo.fetch(foo.publicKey) + const account = await program.account.foo.fetch(foo.publicKey); assert.ok( JSON.stringify(account.authority.toBuffer()) === JSON.stringify(program.provider.wallet.publicKey.toBuffer()) - ) - assert.ok(account.data.toNumber() === 1234) - assert.ok(account.secondData.toNumber() === 55) + ); + assert.ok(account.data.toNumber() === 1234); + assert.ok(account.secondData.toNumber() === 55); assert.ok( JSON.stringify(account.secondAuthority) === JSON.stringify([...program.provider.wallet.publicKey.toBuffer()]) - ) - }) + ); + }); - it('Creates an associated zero copy account', async () => { + it("Creates an associated zero copy account", async () => { await program.rpc.createBar({ accounts: { bar: ( await PublicKey.findProgramAddress( - [program.provider.wallet.publicKey.toBuffer(), foo.publicKey.toBuffer()], + [ + program.provider.wallet.publicKey.toBuffer(), + foo.publicKey.toBuffer(), + ], program.programId ) )[0], @@ -91,36 +94,42 @@ describe('zero-copy', () => { foo: foo.publicKey, systemProgram: anchor.web3.SystemProgram.programId, }, - }) + }); const bar = ( await PublicKey.findProgramAddress( - [program.provider.wallet.publicKey.toBuffer(), foo.publicKey.toBuffer()], + [ + program.provider.wallet.publicKey.toBuffer(), + foo.publicKey.toBuffer(), + ], program.programId ) - )[0] - const barAccount = await program.account.bar.fetch(bar) - assert.ok(barAccount.authority.equals(program.provider.wallet.publicKey)) - assert.ok(barAccount.data.toNumber() === 0) - }) + )[0]; + const barAccount = await program.account.bar.fetch(bar); + assert.ok(barAccount.authority.equals(program.provider.wallet.publicKey)); + assert.ok(barAccount.data.toNumber() === 0); + }); - it('Updates an associated zero copy account', async () => { + it("Updates an associated zero copy account", async () => { const bar = ( await PublicKey.findProgramAddress( - [program.provider.wallet.publicKey.toBuffer(), foo.publicKey.toBuffer()], + [ + program.provider.wallet.publicKey.toBuffer(), + foo.publicKey.toBuffer(), + ], program.programId ) - )[0] + )[0]; await program.rpc.updateBar(new BN(99), { accounts: { bar, authority: program.provider.wallet.publicKey, foo: foo.publicKey, }, - }) - const barAccount = await program.account.bar.fetch(bar) - assert.ok(barAccount.authority.equals(program.provider.wallet.publicKey)) - assert.ok(barAccount.data.toNumber() === 99) + }); + const barAccount = await program.account.bar.fetch(bar); + assert.ok(barAccount.authority.equals(program.provider.wallet.publicKey)); + assert.ok(barAccount.data.toNumber() === 99); // Check zero_copy CPI await programCpi.rpc.checkCpi(new BN(1337), { accounts: { @@ -129,52 +138,56 @@ describe('zero-copy', () => { foo: foo.publicKey, zeroCopyProgram: program.programId, }, - }) - const barAccountAfterCpi = await program.account.bar.fetch(bar) - assert.ok(barAccountAfterCpi.authority.equals(program.provider.wallet.publicKey)) - assert.ok(barAccountAfterCpi.data.toNumber() === 1337) - }) + }); + const barAccountAfterCpi = await program.account.bar.fetch(bar); + assert.ok( + barAccountAfterCpi.authority.equals(program.provider.wallet.publicKey) + ); + assert.ok(barAccountAfterCpi.data.toNumber() === 1337); + }); - const eventQ = anchor.web3.Keypair.generate() - const size = 1000000 + 8 // Account size in bytes. + const eventQ = anchor.web3.Keypair.generate(); + const size = 1000000 + 8; // Account size in bytes. - it('Creates a large event queue', async () => { + it("Creates a large event queue", async () => { await program.rpc.createLargeAccount({ accounts: { eventQ: eventQ.publicKey, rent: anchor.web3.SYSVAR_RENT_PUBKEY, }, - instructions: [await program.account.eventQ.createInstruction(eventQ, size)], + instructions: [ + await program.account.eventQ.createInstruction(eventQ, size), + ], signers: [eventQ], - }) - const account = await program.account.eventQ.fetch(eventQ.publicKey) - assert.ok(account.events.length === 25000) + }); + const account = await program.account.eventQ.fetch(eventQ.publicKey); + assert.ok(account.events.length === 25000); account.events.forEach((event) => { - assert.ok(event.from.equals(PublicKey.default)) - assert.ok(event.data.toNumber() === 0) - }) - }) + assert.ok(event.from.equals(PublicKey.default)); + assert.ok(event.data.toNumber() === 0); + }); + }); - it('Updates a large event queue', async () => { + it("Updates a large event queue", async () => { // Set index 0. await program.rpc.updateLargeAccount(0, new BN(48), { accounts: { eventQ: eventQ.publicKey, from: program.provider.wallet.publicKey, }, - }) + }); // Verify update. - let account = await program.account.eventQ.fetch(eventQ.publicKey) - assert.ok(account.events.length === 25000) + let account = await program.account.eventQ.fetch(eventQ.publicKey); + assert.ok(account.events.length === 25000); account.events.forEach((event, idx) => { if (idx === 0) { - assert.ok(event.from.equals(program.provider.wallet.publicKey)) - assert.ok(event.data.toNumber() === 48) + assert.ok(event.from.equals(program.provider.wallet.publicKey)); + assert.ok(event.data.toNumber() === 48); } else { - assert.ok(event.from.equals(PublicKey.default)) - assert.ok(event.data.toNumber() === 0) + assert.ok(event.from.equals(PublicKey.default)); + assert.ok(event.data.toNumber() === 0); } - }) + }); // Set index 11111. await program.rpc.updateLargeAccount(11111, new BN(1234), { @@ -182,22 +195,22 @@ describe('zero-copy', () => { eventQ: eventQ.publicKey, from: program.provider.wallet.publicKey, }, - }) + }); // Verify update. - account = await program.account.eventQ.fetch(eventQ.publicKey) - assert.ok(account.events.length === 25000) + account = await program.account.eventQ.fetch(eventQ.publicKey); + assert.ok(account.events.length === 25000); account.events.forEach((event, idx) => { if (idx === 0) { - assert.ok(event.from.equals(program.provider.wallet.publicKey)) - assert.ok(event.data.toNumber() === 48) + assert.ok(event.from.equals(program.provider.wallet.publicKey)); + assert.ok(event.data.toNumber() === 48); } else if (idx === 11111) { - assert.ok(event.from.equals(program.provider.wallet.publicKey)) - assert.ok(event.data.toNumber() === 1234) + assert.ok(event.from.equals(program.provider.wallet.publicKey)); + assert.ok(event.data.toNumber() === 1234); } else { - assert.ok(event.from.equals(PublicKey.default)) - assert.ok(event.data.toNumber() === 0) + assert.ok(event.from.equals(PublicKey.default)); + assert.ok(event.data.toNumber() === 0); } - }) + }); // Set last index. await program.rpc.updateLargeAccount(24999, new BN(99), { @@ -205,28 +218,28 @@ describe('zero-copy', () => { eventQ: eventQ.publicKey, from: program.provider.wallet.publicKey, }, - }) + }); // Verify update. - account = await program.account.eventQ.fetch(eventQ.publicKey) - assert.ok(account.events.length === 25000) + account = await program.account.eventQ.fetch(eventQ.publicKey); + assert.ok(account.events.length === 25000); account.events.forEach((event, idx) => { if (idx === 0) { - assert.ok(event.from.equals(program.provider.wallet.publicKey)) - assert.ok(event.data.toNumber() === 48) + assert.ok(event.from.equals(program.provider.wallet.publicKey)); + assert.ok(event.data.toNumber() === 48); } else if (idx === 11111) { - assert.ok(event.from.equals(program.provider.wallet.publicKey)) - assert.ok(event.data.toNumber() === 1234) + assert.ok(event.from.equals(program.provider.wallet.publicKey)); + assert.ok(event.data.toNumber() === 1234); } else if (idx === 24999) { - assert.ok(event.from.equals(program.provider.wallet.publicKey)) - assert.ok(event.data.toNumber() === 99) + assert.ok(event.from.equals(program.provider.wallet.publicKey)); + assert.ok(event.data.toNumber() === 99); } else { - assert.ok(event.from.equals(PublicKey.default)) - assert.ok(event.data.toNumber() === 0) + assert.ok(event.from.equals(PublicKey.default)); + assert.ok(event.data.toNumber() === 0); } - }) - }) + }); + }); - it('Errors when setting an out of bounds index', async () => { + it("Errors when setting an out of bounds index", async () => { // Fail to set non existing index. await assert.rejects( async () => { @@ -235,12 +248,12 @@ describe('zero-copy', () => { eventQ: eventQ.publicKey, from: program.provider.wallet.publicKey, }, - }) + }); }, (err) => { - console.log('err', err) - return true + console.log("err", err); + return true; } - ) - }) -}) + ); + }); +});