token-swap: Use solana-test-validator in JS tests (#1367)
* Update swap pool owner in docs * token-swap: Use solana-test-validator for JS tests * Revert one more change * Revert doc change * Add solana-test-validator to ci * Fix CI * Revert docs change * Move where to deploy programs in CI
This commit is contained in:
parent
747252466c
commit
d692ff1505
|
@ -177,7 +177,7 @@ jobs:
|
|||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: programs
|
||||
path: target/bpfel-unknown-unknown/release
|
||||
path: target/deploy
|
||||
- run: ./ci/js-test-token-swap.sh
|
||||
|
||||
js-test-token-lending:
|
||||
|
|
|
@ -28,7 +28,7 @@ cargo +"$rust_stable" run --manifest-path=utils/test-client/Cargo.toml
|
|||
# client_ristretto disabled because it requires RpcBanksService, which is no longer supported.
|
||||
#cargo +"$rust_stable" test --manifest-path=themis/client_ristretto/Cargo.toml -- --nocapture
|
||||
|
||||
SWAP_PROGRAM_OWNER_FEE_ADDRESS="SwaPpA9LAaLfeLi3a68M4DjnLqgtticKg6CnyNwgAC8" \
|
||||
SWAP_PROGRAM_OWNER_FEE_ADDRESS="HfoTxFR1Tm6kGmWgYWD6J7YHVy1UwqSULUGVLXkJqaKN" \
|
||||
cargo +"$rust_stable" build-bpf \
|
||||
--manifest-path=token-swap/program/Cargo.toml \
|
||||
--features production \
|
||||
|
|
|
@ -1,19 +1,16 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -ex
|
||||
cd "$(dirname "$0")"
|
||||
cd "$(dirname "$0")/.."
|
||||
source ./ci/solana-version.sh install
|
||||
|
||||
(cd ../token/js && npm install)
|
||||
(cd token/js && npm install)
|
||||
|
||||
cd ../token-swap/js
|
||||
cd token-swap/js
|
||||
npm install
|
||||
npm run lint
|
||||
npm run flow
|
||||
npx tsc module.d.ts
|
||||
npm run cluster:localnet
|
||||
npm run localnet:update
|
||||
npm run localnet:up
|
||||
npm run start
|
||||
(cd ../../target/bpfel-unknown-unknown/release && mv spl_token_swap_production.so spl_token_swap.so)
|
||||
SWAP_PROGRAM_OWNER_FEE_ADDRESS="SwaPpA9LAaLfeLi3a68M4DjnLqgtticKg6CnyNwgAC8" npm run start
|
||||
npm run localnet:down
|
||||
npm run start-with-test-validator
|
||||
(cd ../../target/deploy && mv spl_token_swap_production.so spl_token_swap.so)
|
||||
SWAP_PROGRAM_OWNER_FEE_ADDRESS="HfoTxFR1Tm6kGmWgYWD6J7YHVy1UwqSULUGVLXkJqaKN" npm run start-with-test-validator
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
*/
|
||||
|
||||
import {
|
||||
loadPrograms,
|
||||
createAccountAndSwapAtomic,
|
||||
createTokenSwap,
|
||||
swap,
|
||||
|
@ -17,8 +16,6 @@ import {
|
|||
|
||||
async function main() {
|
||||
// These test cases are designed to run sequentially and in the following order
|
||||
console.log('Run test: loadPrograms');
|
||||
await loadPrograms();
|
||||
console.log('Run test: createTokenSwap');
|
||||
await createTokenSwap();
|
||||
console.log('Run test: deposit all token types');
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
// @flow
|
||||
|
||||
import fs from 'mz/fs';
|
||||
import {
|
||||
Account,
|
||||
Connection,
|
||||
BpfLoader,
|
||||
PublicKey,
|
||||
SystemProgram,
|
||||
Transaction,
|
||||
BPF_LOADER_PROGRAM_ID,
|
||||
} from '@solana/web3.js';
|
||||
import {AccountLayout, Token} from '@solana/spl-token';
|
||||
import {AccountLayout, Token, TOKEN_PROGRAM_ID} from '@solana/spl-token';
|
||||
|
||||
import {TokenSwap, CurveType} from '../client/token-swap';
|
||||
import {
|
||||
TokenSwap,
|
||||
CurveType,
|
||||
TOKEN_SWAP_PROGRAM_ID,
|
||||
} from '../client/token-swap';
|
||||
import {sendAndConfirmTransaction} from '../client/util/send-and-confirm-transaction';
|
||||
import {Store} from '../client/util/store';
|
||||
import {newAccountWithLamports} from '../client/util/new-account-with-lamports';
|
||||
import {url} from '../url';
|
||||
import {sleep} from '../client/util/sleep';
|
||||
|
@ -94,80 +94,15 @@ async function getConnection(): Promise<Connection> {
|
|||
return connection;
|
||||
}
|
||||
|
||||
async function loadProgram(
|
||||
connection: Connection,
|
||||
path: string,
|
||||
): Promise<PublicKey> {
|
||||
const NUM_RETRIES = 500; /* allow some number of retries */
|
||||
const data = await fs.readFile(path);
|
||||
const {feeCalculator} = await connection.getRecentBlockhash();
|
||||
const balanceNeeded =
|
||||
feeCalculator.lamportsPerSignature *
|
||||
(BpfLoader.getMinNumSignatures(data.length) + NUM_RETRIES) +
|
||||
(await connection.getMinimumBalanceForRentExemption(data.length));
|
||||
|
||||
const from = await newAccountWithLamports(connection, balanceNeeded);
|
||||
const program_account = new Account();
|
||||
console.log('Loading program:', path);
|
||||
await BpfLoader.load(
|
||||
connection,
|
||||
from,
|
||||
program_account,
|
||||
data,
|
||||
BPF_LOADER_PROGRAM_ID,
|
||||
);
|
||||
return program_account.publicKey;
|
||||
}
|
||||
|
||||
async function GetPrograms(
|
||||
connection: Connection,
|
||||
): Promise<[PublicKey, PublicKey]> {
|
||||
const store = new Store();
|
||||
let tokenProgramId = null;
|
||||
let tokenSwapProgramId = null;
|
||||
try {
|
||||
const config = await store.load('config.json');
|
||||
console.log('Using pre-loaded Token and Token-swap programs');
|
||||
console.log(
|
||||
' Note: To reload programs remove client/util/store/config.json',
|
||||
);
|
||||
tokenProgramId = new PublicKey(config.tokenProgramId);
|
||||
tokenSwapProgramId = new PublicKey(config.tokenSwapProgramId);
|
||||
} catch (err) {
|
||||
tokenProgramId = await loadProgram(
|
||||
connection,
|
||||
'../../target/bpfel-unknown-unknown/release/spl_token.so',
|
||||
);
|
||||
tokenSwapProgramId = await loadProgram(
|
||||
connection,
|
||||
'../../target/bpfel-unknown-unknown/release/spl_token_swap.so',
|
||||
);
|
||||
await store.save('config.json', {
|
||||
tokenProgramId: tokenProgramId.toString(),
|
||||
tokenSwapProgramId: tokenSwapProgramId.toString(),
|
||||
});
|
||||
}
|
||||
return [tokenProgramId, tokenSwapProgramId];
|
||||
}
|
||||
|
||||
export async function loadPrograms(): Promise<void> {
|
||||
const connection = await getConnection();
|
||||
const [tokenProgramId, tokenSwapProgramId] = await GetPrograms(connection);
|
||||
|
||||
console.log('Token Program ID', tokenProgramId.toString());
|
||||
console.log('Token-swap Program ID', tokenSwapProgramId.toString());
|
||||
}
|
||||
|
||||
export async function createTokenSwap(): Promise<void> {
|
||||
const connection = await getConnection();
|
||||
const [tokenProgramId, tokenSwapProgramId] = await GetPrograms(connection);
|
||||
const payer = await newAccountWithLamports(connection, 1000000000);
|
||||
owner = await newAccountWithLamports(connection, 1000000000);
|
||||
const tokenSwapAccount = new Account();
|
||||
|
||||
[authority, nonce] = await PublicKey.findProgramAddress(
|
||||
[tokenSwapAccount.publicKey.toBuffer()],
|
||||
tokenSwapProgramId,
|
||||
TOKEN_SWAP_PROGRAM_ID,
|
||||
);
|
||||
|
||||
console.log('creating pool mint');
|
||||
|
@ -177,7 +112,7 @@ export async function createTokenSwap(): Promise<void> {
|
|||
authority,
|
||||
null,
|
||||
2,
|
||||
tokenProgramId,
|
||||
TOKEN_PROGRAM_ID,
|
||||
);
|
||||
|
||||
console.log('creating pool account');
|
||||
|
@ -192,7 +127,7 @@ export async function createTokenSwap(): Promise<void> {
|
|||
owner.publicKey,
|
||||
null,
|
||||
2,
|
||||
tokenProgramId,
|
||||
TOKEN_PROGRAM_ID,
|
||||
);
|
||||
|
||||
console.log('creating token A account');
|
||||
|
@ -207,7 +142,7 @@ export async function createTokenSwap(): Promise<void> {
|
|||
owner.publicKey,
|
||||
null,
|
||||
2,
|
||||
tokenProgramId,
|
||||
TOKEN_PROGRAM_ID,
|
||||
);
|
||||
|
||||
console.log('creating token B account');
|
||||
|
@ -229,8 +164,8 @@ export async function createTokenSwap(): Promise<void> {
|
|||
mintB.publicKey,
|
||||
feeAccount,
|
||||
tokenAccountPool,
|
||||
tokenSwapProgramId,
|
||||
tokenProgramId,
|
||||
TOKEN_SWAP_PROGRAM_ID,
|
||||
TOKEN_PROGRAM_ID,
|
||||
nonce,
|
||||
TRADING_FEE_NUMERATOR,
|
||||
TRADING_FEE_DENOMINATOR,
|
||||
|
@ -247,11 +182,11 @@ export async function createTokenSwap(): Promise<void> {
|
|||
const fetchedTokenSwap = await TokenSwap.loadTokenSwap(
|
||||
connection,
|
||||
tokenSwapAccount.publicKey,
|
||||
tokenSwapProgramId,
|
||||
TOKEN_SWAP_PROGRAM_ID,
|
||||
swapPayer,
|
||||
);
|
||||
|
||||
assert(fetchedTokenSwap.tokenProgramId.equals(tokenProgramId));
|
||||
assert(fetchedTokenSwap.tokenProgramId.equals(TOKEN_PROGRAM_ID));
|
||||
assert(fetchedTokenSwap.tokenAccountA.equals(tokenAccountA));
|
||||
assert(fetchedTokenSwap.tokenAccountB.equals(tokenAccountB));
|
||||
assert(fetchedTokenSwap.mintA.equals(mintA.publicKey));
|
||||
|
|
|
@ -19,6 +19,10 @@ import * as Layout from './layout';
|
|||
import {sendAndConfirmTransaction} from './util/send-and-confirm-transaction';
|
||||
import {loadAccount} from './util/account';
|
||||
|
||||
export const TOKEN_SWAP_PROGRAM_ID: PublicKey = new PublicKey(
|
||||
'SwaPpA9LAaLfeLi3a68M4DjnLqgtticKg6CnyNwgAC8',
|
||||
);
|
||||
|
||||
/**
|
||||
* Some amount of tokens
|
||||
*/
|
||||
|
|
|
@ -1,28 +0,0 @@
|
|||
/**
|
||||
* Simple file-based datastore
|
||||
*
|
||||
* @flow
|
||||
*/
|
||||
|
||||
import path from 'path';
|
||||
import fs from 'mz/fs';
|
||||
import mkdirp from 'mkdirp';
|
||||
|
||||
export class Store {
|
||||
static getDir(): string {
|
||||
return path.join(__dirname, 'store');
|
||||
}
|
||||
|
||||
async load(uri: string): Promise<Object> {
|
||||
const filename = path.join(Store.getDir(), uri);
|
||||
const data = await fs.readFile(filename, 'utf8');
|
||||
const config = JSON.parse(data);
|
||||
return config;
|
||||
}
|
||||
|
||||
async save(uri: string, config: Object): Promise<void> {
|
||||
await mkdirp(Store.getDir());
|
||||
const filename = path.join(Store.getDir(), uri);
|
||||
await fs.writeFile(filename, JSON.stringify(config), 'utf8');
|
||||
}
|
||||
}
|
|
@ -2997,6 +2997,21 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"@hapi/hoek": {
|
||||
"version": "9.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.1.1.tgz",
|
||||
"integrity": "sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw==",
|
||||
"dev": true
|
||||
},
|
||||
"@hapi/topo": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz",
|
||||
"integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@hapi/hoek": "^9.0.0"
|
||||
}
|
||||
},
|
||||
"@nicolo-ribaudo/chokidar-2": {
|
||||
"version": "2.1.8-no-fsevents",
|
||||
"resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz",
|
||||
|
@ -3270,6 +3285,27 @@
|
|||
"picomatch": "^2.2.2"
|
||||
}
|
||||
},
|
||||
"@sideway/address": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.1.tgz",
|
||||
"integrity": "sha512-+I5aaQr3m0OAmMr7RQ3fR9zx55sejEYR2BFJaxL+zT3VM2611X0SHvPWIbAUBZVTn/YzYKbV8gJ2oT/QELknfQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@hapi/hoek": "^9.0.0"
|
||||
}
|
||||
},
|
||||
"@sideway/formula": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz",
|
||||
"integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==",
|
||||
"dev": true
|
||||
},
|
||||
"@sideway/pinpoint": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
|
||||
"integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@sindresorhus/is": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.1.tgz",
|
||||
|
@ -3660,6 +3696,15 @@
|
|||
"integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=",
|
||||
"dev": true
|
||||
},
|
||||
"axios": {
|
||||
"version": "0.21.1",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
|
||||
"integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"follow-redirects": "^1.10.0"
|
||||
}
|
||||
},
|
||||
"babel-eslint": {
|
||||
"version": "10.1.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
|
||||
|
@ -4074,6 +4119,12 @@
|
|||
"integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=",
|
||||
"dev": true
|
||||
},
|
||||
"check-more-types": {
|
||||
"version": "2.24.0",
|
||||
"resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz",
|
||||
"integrity": "sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=",
|
||||
"dev": true
|
||||
},
|
||||
"cheerio": {
|
||||
"version": "0.22.0",
|
||||
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
|
||||
|
@ -4643,6 +4694,12 @@
|
|||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
|
||||
"integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="
|
||||
},
|
||||
"duplexer": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
|
||||
"integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
|
||||
"dev": true
|
||||
},
|
||||
"duplexer2": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
|
||||
|
@ -5199,6 +5256,21 @@
|
|||
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
|
||||
"dev": true
|
||||
},
|
||||
"event-stream": {
|
||||
"version": "3.3.4",
|
||||
"resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
|
||||
"integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"duplexer": "~0.1.1",
|
||||
"from": "~0",
|
||||
"map-stream": "~0.1.0",
|
||||
"pause-stream": "0.0.11",
|
||||
"split": "0.3",
|
||||
"stream-combiner": "~0.0.4",
|
||||
"through": "~2.3.1"
|
||||
}
|
||||
},
|
||||
"eventemitter3": {
|
||||
"version": "4.0.7",
|
||||
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
|
||||
|
@ -5692,6 +5764,12 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"follow-redirects": {
|
||||
"version": "1.13.3",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz",
|
||||
"integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==",
|
||||
"dev": true
|
||||
},
|
||||
"for-in": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
|
||||
|
@ -5709,6 +5787,12 @@
|
|||
"map-cache": "^0.2.2"
|
||||
}
|
||||
},
|
||||
"from": {
|
||||
"version": "0.1.7",
|
||||
"resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
|
||||
"integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
|
||||
"dev": true
|
||||
},
|
||||
"fs-extra": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz",
|
||||
|
@ -6069,6 +6153,12 @@
|
|||
"integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
|
||||
"dev": true
|
||||
},
|
||||
"human-signals": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
|
||||
"integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
|
||||
"dev": true
|
||||
},
|
||||
"ieee754": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
|
||||
|
@ -6387,6 +6477,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"joi": {
|
||||
"version": "17.4.0",
|
||||
"resolved": "https://registry.npmjs.org/joi/-/joi-17.4.0.tgz",
|
||||
"integrity": "sha512-F4WiW2xaV6wc1jxete70Rw4V/VuMd6IN+a5ilZsxG4uYtUXWu2kq9W5P2dz30e7Gmw8RCbY/u/uk+dMPma9tAg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@hapi/hoek": "^9.0.0",
|
||||
"@hapi/topo": "^5.0.0",
|
||||
"@sideway/address": "^4.1.0",
|
||||
"@sideway/formula": "^3.0.0",
|
||||
"@sideway/pinpoint": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"js-sha3": {
|
||||
"version": "0.8.0",
|
||||
"resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
|
||||
|
@ -6516,6 +6619,12 @@
|
|||
"graceful-fs": "^4.1.9"
|
||||
}
|
||||
},
|
||||
"lazy-ass": {
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
|
||||
"integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=",
|
||||
"dev": true
|
||||
},
|
||||
"levn": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
|
||||
|
@ -6708,6 +6817,12 @@
|
|||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"map-stream": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
|
||||
"integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=",
|
||||
"dev": true
|
||||
},
|
||||
"map-visit": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
|
||||
|
@ -6741,6 +6856,12 @@
|
|||
"integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==",
|
||||
"dev": true
|
||||
},
|
||||
"merge-stream": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
|
||||
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
|
||||
"dev": true
|
||||
},
|
||||
"merge2": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
|
||||
|
@ -6769,6 +6890,12 @@
|
|||
"to-regex": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"mimic-fn": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
|
||||
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
|
||||
"dev": true
|
||||
},
|
||||
"mimic-response": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
|
||||
|
@ -7189,6 +7316,15 @@
|
|||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"onetime": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
|
||||
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"mimic-fn": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"optionator": {
|
||||
"version": "0.9.1",
|
||||
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
|
||||
|
@ -7339,6 +7475,15 @@
|
|||
"pify": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"pause-stream": {
|
||||
"version": "0.0.11",
|
||||
"resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
|
||||
"integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"through": "~2.3"
|
||||
}
|
||||
},
|
||||
"picomatch": {
|
||||
"version": "2.2.2",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
|
||||
|
@ -7406,6 +7551,15 @@
|
|||
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
|
||||
"dev": true
|
||||
},
|
||||
"ps-tree": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz",
|
||||
"integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"event-stream": "=3.3.4"
|
||||
}
|
||||
},
|
||||
"pump": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
|
||||
|
@ -7517,8 +7671,7 @@
|
|||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -7809,6 +7962,15 @@
|
|||
"queue-microtask": "^1.2.2"
|
||||
}
|
||||
},
|
||||
"rxjs": {
|
||||
"version": "6.6.6",
|
||||
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.6.tgz",
|
||||
"integrity": "sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"tslib": "^1.9.0"
|
||||
}
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||
|
@ -8132,6 +8294,15 @@
|
|||
"integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
|
||||
"dev": true
|
||||
},
|
||||
"split": {
|
||||
"version": "0.3.3",
|
||||
"resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
|
||||
"integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"through": "2"
|
||||
}
|
||||
},
|
||||
"split-string": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
|
||||
|
@ -8148,6 +8319,133 @@
|
|||
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
|
||||
"dev": true
|
||||
},
|
||||
"start-server-and-test": {
|
||||
"version": "1.12.0",
|
||||
"resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.12.0.tgz",
|
||||
"integrity": "sha512-y3M/PLUPkPBsgKoengMIMQeceT8uOnOc4bkdor/RSCK9Ih/j8z4WthSCrAboXLjgtJJWOporAiEQsnYox+THXg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"bluebird": "3.7.2",
|
||||
"check-more-types": "2.24.0",
|
||||
"debug": "4.3.1",
|
||||
"execa": "3.4.0",
|
||||
"lazy-ass": "1.6.0",
|
||||
"ps-tree": "1.2.0",
|
||||
"wait-on": "5.2.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"bluebird": {
|
||||
"version": "3.7.2",
|
||||
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
|
||||
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
|
||||
"dev": true
|
||||
},
|
||||
"cross-spawn": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
|
||||
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"path-key": "^3.1.0",
|
||||
"shebang-command": "^2.0.0",
|
||||
"which": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"version": "4.3.1",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
|
||||
"integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ms": "2.1.2"
|
||||
}
|
||||
},
|
||||
"execa": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz",
|
||||
"integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"cross-spawn": "^7.0.0",
|
||||
"get-stream": "^5.0.0",
|
||||
"human-signals": "^1.1.1",
|
||||
"is-stream": "^2.0.0",
|
||||
"merge-stream": "^2.0.0",
|
||||
"npm-run-path": "^4.0.0",
|
||||
"onetime": "^5.1.0",
|
||||
"p-finally": "^2.0.0",
|
||||
"signal-exit": "^3.0.2",
|
||||
"strip-final-newline": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"get-stream": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
|
||||
"integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"pump": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"is-stream": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
|
||||
"integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
|
||||
"dev": true
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
||||
"dev": true
|
||||
},
|
||||
"npm-run-path": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
|
||||
"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"path-key": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"p-finally": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz",
|
||||
"integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==",
|
||||
"dev": true
|
||||
},
|
||||
"path-key": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
|
||||
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
|
||||
"dev": true
|
||||
},
|
||||
"shebang-command": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
||||
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"shebang-regex": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"shebang-regex": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
|
||||
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
|
||||
"dev": true
|
||||
},
|
||||
"which": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
||||
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"isexe": "^2.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"static-extend": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
|
||||
|
@ -8171,6 +8469,15 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"stream-combiner": {
|
||||
"version": "0.0.4",
|
||||
"resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
|
||||
"integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"duplexer": "~0.1.1"
|
||||
}
|
||||
},
|
||||
"string-width": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
|
||||
|
@ -8346,6 +8653,12 @@
|
|||
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
|
||||
"dev": true
|
||||
},
|
||||
"strip-final-newline": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
|
||||
"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
|
||||
"dev": true
|
||||
},
|
||||
"strip-json-comments": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
|
||||
|
@ -8503,6 +8816,12 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"tslib": {
|
||||
"version": "1.14.1",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
|
||||
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
|
||||
"dev": true
|
||||
},
|
||||
"tweetnacl": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
|
||||
|
@ -8733,6 +9052,27 @@
|
|||
"spdx-expression-parse": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"wait-on": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/wait-on/-/wait-on-5.2.1.tgz",
|
||||
"integrity": "sha512-H2F986kNWMU9hKlI9l/ppO6tN8ZSJd35yBljMLa1/vjzWP++Qh6aXyt77/u7ySJFZQqBtQxnvm/xgG48AObXcw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"axios": "^0.21.1",
|
||||
"joi": "^17.3.0",
|
||||
"lodash": "^4.17.20",
|
||||
"minimist": "^1.2.5",
|
||||
"rxjs": "^6.6.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"lodash": {
|
||||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"watch": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz",
|
||||
|
|
|
@ -22,24 +22,20 @@
|
|||
"/lib",
|
||||
"/module.flow.js"
|
||||
],
|
||||
"testnetDefaultChannel": "v1.3.17",
|
||||
"scripts": {
|
||||
"build": "rollup -c",
|
||||
"start": "babel-node --ignore node_modules cli/main.js",
|
||||
"start": "babel-node cli/main.js",
|
||||
"start-with-test-validator": "start-server-and-test 'solana-test-validator --bpf-program SwaPpA9LAaLfeLi3a68M4DjnLqgtticKg6CnyNwgAC8 ../../target/deploy/spl_token_swap.so --reset --quiet' http://localhost:8899/health start",
|
||||
"lint": "npm run pretty && eslint .",
|
||||
"lint:fix": "npm run pretty:fix && eslint . --fix",
|
||||
"flow": "flow",
|
||||
"flow:watch": "watch 'flow' . --wait=1 --ignoreDirectoryPattern=/doc/",
|
||||
"lint:watch": "watch 'npm run lint:fix' . --wait=1",
|
||||
"build:program": "rm -f client/util/store/config.json; cargo build-bpf --manifest-path ../program/Cargo.toml",
|
||||
"build:program": "cargo build-bpf --manifest-path ../program/Cargo.toml",
|
||||
"cluster:localnet": "rm -f .env",
|
||||
"cluster:devnet": "cp cluster-devnet.env .env",
|
||||
"cluster:testnet": "cp cluster-testnet.env .env",
|
||||
"cluster:mainnet-beta": "cp cluster-mainnet-beta.env .env",
|
||||
"localnet:update": "solana-localnet update",
|
||||
"localnet:up": "rm -f client/util/store/config.json; set -x; solana-localnet down; set -e; solana-localnet up",
|
||||
"localnet:down": "solana-localnet down",
|
||||
"localnet:logs": "solana-localnet logs -f",
|
||||
"pretty": "prettier --check '{,cli*/**/}*.[jt]s'",
|
||||
"pretty:fix": "prettier --write '{,cli*/**/}*.[jt]s'"
|
||||
},
|
||||
|
@ -73,6 +69,7 @@
|
|||
"prettier": "^2.1.2",
|
||||
"rollup": "^2.27.1",
|
||||
"rollup-plugin-copy": "^3.3.0",
|
||||
"start-server-and-test": "^1.11.6",
|
||||
"watch": "^1.0.2"
|
||||
},
|
||||
"engines": {
|
||||
|
|
Loading…
Reference in New Issue