@solana/web3.js 1.9.0 → 1.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/lib/index.browser.esm.js +41 -18
- package/lib/index.browser.esm.js.map +1 -1
- package/lib/index.cjs.js +41 -18
- package/lib/index.cjs.js.map +1 -1
- package/lib/index.d.ts +6 -4
- package/lib/index.esm.js +41 -18
- package/lib/index.esm.js.map +1 -1
- package/lib/index.iife.js +42 -25
- package/lib/index.iife.js.map +1 -1
- package/lib/index.iife.min.js +2 -2
- package/lib/index.iife.min.js.map +1 -1
- package/module.flow.js +12 -4
- package/package.json +30 -31
- package/src/connection.ts +6 -4
- package/src/message.ts +9 -12
- package/src/transaction.ts +2 -2
- package/src/util/guarded-array-utils.ts +37 -0
- package/src/validator-info.ts +5 -4
package/module.flow.js
CHANGED
|
@@ -1513,10 +1513,18 @@ declare module "@solana/web3.js" {
|
|
|
1513
1513
|
/**
|
|
1514
1514
|
* Configuration object for getParsedProgramAccounts
|
|
1515
1515
|
*/
|
|
1516
|
-
declare export type GetParsedProgramAccountsConfig =
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1516
|
+
declare export type GetParsedProgramAccountsConfig = {
|
|
1517
|
+
/**
|
|
1518
|
+
* Optional commitment level
|
|
1519
|
+
*/
|
|
1520
|
+
commitment?: Commitment,
|
|
1521
|
+
|
|
1522
|
+
/**
|
|
1523
|
+
* Optional array of filters to apply to accounts
|
|
1524
|
+
*/
|
|
1525
|
+
filters?: GetProgramAccountsFilter[],
|
|
1526
|
+
...
|
|
1527
|
+
};
|
|
1520
1528
|
|
|
1521
1529
|
/**
|
|
1522
1530
|
* Information describing an account
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solana/web3.js",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.2",
|
|
4
4
|
"description": "Solana Javascript API",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"api",
|
|
@@ -36,32 +36,6 @@
|
|
|
36
36
|
"/module.flow.js",
|
|
37
37
|
"/src"
|
|
38
38
|
],
|
|
39
|
-
"scripts": {
|
|
40
|
-
"build": "npm run clean; cross-env NODE_ENV=production rollup -c; npm run generate:dts; npm run generate:flow",
|
|
41
|
-
"build:browser-test": "rollup -c test/rollup.config.js",
|
|
42
|
-
"build:fixtures": "set -ex; ./test/fixtures/noop-program/build.sh",
|
|
43
|
-
"clean": "rimraf ./coverage ./lib",
|
|
44
|
-
"codecov": "set -ex; npm run test:cover; cat ./coverage/lcov.info | codecov",
|
|
45
|
-
"dev": "cross-env NODE_ENV=development rollup -c",
|
|
46
|
-
"doc": "set -ex; typedoc",
|
|
47
|
-
"doc:watch": "watch 'npm run doc' . --wait=1 --ignoreDirectoryPattern=/doc/",
|
|
48
|
-
"generate:dts": "./scripts/typegen.sh",
|
|
49
|
-
"generate:flow": "flowgen lib/index.d.ts -o module.flow.js",
|
|
50
|
-
"lint": "set -ex; npm run pretty; eslint . --ext .js,.ts",
|
|
51
|
-
"lint:fix": "npm run pretty:fix && eslint . --fix",
|
|
52
|
-
"lint:watch": "watch 'npm run lint:fix' . --wait=1 --ignoreDirectoryPattern=/doc/",
|
|
53
|
-
"ok": "run-s lint test doc",
|
|
54
|
-
"pretty": "prettier --check '{,{src,test}/**/}*.{j,t}s'",
|
|
55
|
-
"pretty:fix": "prettier --write '{,{src,test}/**/}*.{j,t}s'",
|
|
56
|
-
"re": "semantic-release --repository-url git@github.com:solana-labs/solana-web3.js.git",
|
|
57
|
-
"test": "mocha -r ts-node/register './test/**/*.test.ts'",
|
|
58
|
-
"test:cover": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\" }' nyc --reporter=lcov mocha -r ts-node/register './test/**/*.test.ts'",
|
|
59
|
-
"test:browser": "TEST_LIVE=1 npm run build:browser-test && mocha-headless-chrome -f http://localhost:8080/mocha.html --timeout 180000",
|
|
60
|
-
"test:browser-with-server": "start-server-and-test 'http-server -p 8080' 8080 test:browser",
|
|
61
|
-
"test:browser-with-test-validator": "start-server-and-test 'solana-test-validator --reset --quiet' http://localhost:8899/health test:browser-with-server",
|
|
62
|
-
"test:live": "TEST_LIVE=1 npm run test",
|
|
63
|
-
"test:live-with-test-validator": "start-server-and-test 'solana-test-validator --reset --quiet' http://localhost:8899/health test:live"
|
|
64
|
-
},
|
|
65
39
|
"dependencies": {
|
|
66
40
|
"@babel/runtime": "^7.12.5",
|
|
67
41
|
"bn.js": "^5.0.0",
|
|
@@ -91,7 +65,7 @@
|
|
|
91
65
|
"@rollup/plugin-commonjs": "^18.0.0",
|
|
92
66
|
"@rollup/plugin-json": "^4.1.0",
|
|
93
67
|
"@rollup/plugin-multi-entry": "^4.0.0",
|
|
94
|
-
"@rollup/plugin-node-resolve": "^
|
|
68
|
+
"@rollup/plugin-node-resolve": "^13.0.0",
|
|
95
69
|
"@rollup/plugin-replace": "^2.3.4",
|
|
96
70
|
"@solana/spl-token": "^0.1.2",
|
|
97
71
|
"@types/bn.js": "^5.1.0",
|
|
@@ -116,6 +90,7 @@
|
|
|
116
90
|
"eslint-plugin-mocha": "^8.0.0",
|
|
117
91
|
"eslint-plugin-prettier": "^3.0.0",
|
|
118
92
|
"esm": "^3.2.25",
|
|
93
|
+
"flow-bin": "^0.150.0",
|
|
119
94
|
"flowgen": "^1.13.0",
|
|
120
95
|
"http-server": "^0.12.3",
|
|
121
96
|
"mocha": "^8.2.1",
|
|
@@ -136,7 +111,31 @@
|
|
|
136
111
|
"ts-node": "^9.1.1",
|
|
137
112
|
"tslib": "^2.1.0",
|
|
138
113
|
"typedoc": "^0.20.31",
|
|
139
|
-
"typescript": "^4.1.5"
|
|
140
|
-
|
|
114
|
+
"typescript": "^4.1.5"
|
|
115
|
+
},
|
|
116
|
+
"scripts": {
|
|
117
|
+
"build": "npm run clean; cross-env NODE_ENV=production rollup -c; npm run type:gen; npm run flow:gen; npm run flow:check",
|
|
118
|
+
"build:browser-test": "rollup -c test/rollup.config.js",
|
|
119
|
+
"build:fixtures": "set -ex; ./test/fixtures/noop-program/build.sh",
|
|
120
|
+
"clean": "rimraf ./coverage ./lib",
|
|
121
|
+
"codecov": "set -ex; npm run test:cover; cat ./coverage/lcov.info | codecov",
|
|
122
|
+
"dev": "cross-env NODE_ENV=development rollup -c",
|
|
123
|
+
"doc": "set -ex; typedoc",
|
|
124
|
+
"flow:check": "flow check-contents < module.flow.js",
|
|
125
|
+
"flow:gen": "flowgen lib/index.d.ts -o module.flow.js",
|
|
126
|
+
"type:gen": "./scripts/typegen.sh",
|
|
127
|
+
"lint": "set -ex; npm run pretty; eslint . --ext .js,.ts",
|
|
128
|
+
"lint:fix": "npm run pretty:fix && eslint . --fix",
|
|
129
|
+
"ok": "run-s lint test doc",
|
|
130
|
+
"pretty": "prettier --check '{,{src,test}/**/}*.{j,t}s'",
|
|
131
|
+
"pretty:fix": "prettier --write '{,{src,test}/**/}*.{j,t}s'",
|
|
132
|
+
"re": "semantic-release --repository-url git@github.com:solana-labs/solana-web3.js.git",
|
|
133
|
+
"test": "mocha -r ts-node/register './test/**/*.test.ts'",
|
|
134
|
+
"test:cover": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\" }' nyc --reporter=lcov mocha -r ts-node/register './test/**/*.test.ts'",
|
|
135
|
+
"test:browser": "TEST_LIVE=1 npm run build:browser-test && mocha-headless-chrome -f http://localhost:8080/mocha.html --timeout 180000",
|
|
136
|
+
"test:browser-with-server": "start-server-and-test 'http-server -p 8080' 8080 test:browser",
|
|
137
|
+
"test:browser-with-test-validator": "start-server-and-test 'solana-test-validator --reset --quiet' http://localhost:8899/health test:browser-with-server",
|
|
138
|
+
"test:live": "TEST_LIVE=1 npm run test",
|
|
139
|
+
"test:live-with-test-validator": "start-server-and-test 'solana-test-validator --reset --quiet' http://localhost:8899/health test:live"
|
|
141
140
|
}
|
|
142
|
-
}
|
|
141
|
+
}
|
package/src/connection.ts
CHANGED
|
@@ -1594,10 +1594,12 @@ export type GetProgramAccountsConfig = {
|
|
|
1594
1594
|
/**
|
|
1595
1595
|
* Configuration object for getParsedProgramAccounts
|
|
1596
1596
|
*/
|
|
1597
|
-
export type GetParsedProgramAccountsConfig =
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1597
|
+
export type GetParsedProgramAccountsConfig = {
|
|
1598
|
+
/** Optional commitment level */
|
|
1599
|
+
commitment?: Commitment;
|
|
1600
|
+
/** Optional array of filters to apply to accounts */
|
|
1601
|
+
filters?: GetProgramAccountsFilter[];
|
|
1602
|
+
};
|
|
1601
1603
|
|
|
1602
1604
|
/**
|
|
1603
1605
|
* Information describing an account
|
package/src/message.ts
CHANGED
|
@@ -8,6 +8,7 @@ import * as Layout from './layout';
|
|
|
8
8
|
import {PACKET_DATA_SIZE} from './transaction';
|
|
9
9
|
import * as shortvec from './util/shortvec-encoding';
|
|
10
10
|
import {toBuffer} from './util/to-buffer';
|
|
11
|
+
import {guardedShift, guardedSplice} from './util/guarded-array-utils';
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* The message header, identifying signed and read-only account
|
|
@@ -178,32 +179,28 @@ export class Message {
|
|
|
178
179
|
// Slice up wire data
|
|
179
180
|
let byteArray = [...buffer];
|
|
180
181
|
|
|
181
|
-
const numRequiredSignatures = byteArray
|
|
182
|
-
const numReadonlySignedAccounts = byteArray
|
|
183
|
-
const numReadonlyUnsignedAccounts = byteArray
|
|
182
|
+
const numRequiredSignatures = guardedShift(byteArray);
|
|
183
|
+
const numReadonlySignedAccounts = guardedShift(byteArray);
|
|
184
|
+
const numReadonlyUnsignedAccounts = guardedShift(byteArray);
|
|
184
185
|
|
|
185
186
|
const accountCount = shortvec.decodeLength(byteArray);
|
|
186
187
|
let accountKeys = [];
|
|
187
188
|
for (let i = 0; i < accountCount; i++) {
|
|
188
|
-
const account = byteArray
|
|
189
|
-
byteArray = byteArray.slice(PUBKEY_LENGTH);
|
|
189
|
+
const account = guardedSplice(byteArray, 0, PUBKEY_LENGTH);
|
|
190
190
|
accountKeys.push(bs58.encode(Buffer.from(account)));
|
|
191
191
|
}
|
|
192
192
|
|
|
193
|
-
const recentBlockhash = byteArray
|
|
194
|
-
byteArray = byteArray.slice(PUBKEY_LENGTH);
|
|
193
|
+
const recentBlockhash = guardedSplice(byteArray, 0, PUBKEY_LENGTH);
|
|
195
194
|
|
|
196
195
|
const instructionCount = shortvec.decodeLength(byteArray);
|
|
197
196
|
let instructions: CompiledInstruction[] = [];
|
|
198
197
|
for (let i = 0; i < instructionCount; i++) {
|
|
199
|
-
const programIdIndex = byteArray
|
|
198
|
+
const programIdIndex = guardedShift(byteArray);
|
|
200
199
|
const accountCount = shortvec.decodeLength(byteArray);
|
|
201
|
-
const accounts = byteArray
|
|
202
|
-
byteArray = byteArray.slice(accountCount);
|
|
200
|
+
const accounts = guardedSplice(byteArray, 0, accountCount);
|
|
203
201
|
const dataLength = shortvec.decodeLength(byteArray);
|
|
204
|
-
const dataSlice = byteArray
|
|
202
|
+
const dataSlice = guardedSplice(byteArray, 0, dataLength);
|
|
205
203
|
const data = bs58.encode(Buffer.from(dataSlice));
|
|
206
|
-
byteArray = byteArray.slice(dataLength);
|
|
207
204
|
instructions.push({
|
|
208
205
|
programIdIndex,
|
|
209
206
|
accounts,
|
package/src/transaction.ts
CHANGED
|
@@ -10,6 +10,7 @@ import {Account} from './account';
|
|
|
10
10
|
import * as shortvec from './util/shortvec-encoding';
|
|
11
11
|
import type {Blockhash} from './blockhash';
|
|
12
12
|
import {toBuffer} from './util/to-buffer';
|
|
13
|
+
import {guardedSplice} from './util/guarded-array-utils';
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* Transaction signature as base-58 encoded string
|
|
@@ -655,8 +656,7 @@ export class Transaction {
|
|
|
655
656
|
const signatureCount = shortvec.decodeLength(byteArray);
|
|
656
657
|
let signatures = [];
|
|
657
658
|
for (let i = 0; i < signatureCount; i++) {
|
|
658
|
-
const signature = byteArray
|
|
659
|
-
byteArray = byteArray.slice(SIGNATURE_LENGTH);
|
|
659
|
+
const signature = guardedSplice(byteArray, 0, SIGNATURE_LENGTH);
|
|
660
660
|
signatures.push(bs58.encode(Buffer.from(signature)));
|
|
661
661
|
}
|
|
662
662
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const END_OF_BUFFER_ERROR_MESSAGE = 'Reached end of buffer unexpectedly';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Delegates to `Array#shift`, but throws if the array is zero-length.
|
|
5
|
+
*/
|
|
6
|
+
export function guardedShift<T>(byteArray: T[]): T {
|
|
7
|
+
if (byteArray.length === 0) {
|
|
8
|
+
throw new Error(END_OF_BUFFER_ERROR_MESSAGE);
|
|
9
|
+
}
|
|
10
|
+
return byteArray.shift() as T;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Delegates to `Array#splice`, but throws if the section being spliced out extends past the end of
|
|
15
|
+
* the array.
|
|
16
|
+
*/
|
|
17
|
+
export function guardedSplice<T>(
|
|
18
|
+
byteArray: T[],
|
|
19
|
+
...args:
|
|
20
|
+
| [start: number, deleteCount?: number]
|
|
21
|
+
| [start: number, deleteCount: number, ...items: T[]]
|
|
22
|
+
): T[] {
|
|
23
|
+
var _args$;
|
|
24
|
+
const [start] = args;
|
|
25
|
+
if (
|
|
26
|
+
args.length === 2 // Implies that `deleteCount` was supplied
|
|
27
|
+
? start +
|
|
28
|
+
((_args$ = args[1]) !== null && _args$ !== void 0 ? _args$ : 0) >
|
|
29
|
+
byteArray.length
|
|
30
|
+
: start >= byteArray.length
|
|
31
|
+
) {
|
|
32
|
+
throw new Error(END_OF_BUFFER_ERROR_MESSAGE);
|
|
33
|
+
}
|
|
34
|
+
return byteArray.splice(
|
|
35
|
+
...(args as Parameters<typeof Array.prototype.splice>),
|
|
36
|
+
);
|
|
37
|
+
}
|
package/src/validator-info.ts
CHANGED
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
import * as Layout from './layout';
|
|
10
10
|
import * as shortvec from './util/shortvec-encoding';
|
|
11
11
|
import {PublicKey} from './publickey';
|
|
12
|
+
import {guardedShift, guardedSplice} from './util/guarded-array-utils';
|
|
12
13
|
|
|
13
14
|
export const VALIDATOR_INFO_KEY = new PublicKey(
|
|
14
15
|
'Va1idator1nfo111111111111111111111111111111',
|
|
@@ -85,10 +86,10 @@ export class ValidatorInfo {
|
|
|
85
86
|
|
|
86
87
|
const configKeys: Array<ConfigKey> = [];
|
|
87
88
|
for (let i = 0; i < 2; i++) {
|
|
88
|
-
const publicKey = new PublicKey(
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
const publicKey = new PublicKey(
|
|
90
|
+
guardedSplice(byteArray, 0, PUBKEY_LENGTH),
|
|
91
|
+
);
|
|
92
|
+
const isSigner = guardedShift(byteArray) === 1;
|
|
92
93
|
configKeys.push({publicKey, isSigner});
|
|
93
94
|
}
|
|
94
95
|
|