diff --git a/web3.js/src/connection.js b/web3.js/src/connection.js index 50ad05466d..79af59a09b 100644 --- a/web3.js/src/connection.js +++ b/web3.js/src/connection.js @@ -713,7 +713,7 @@ const GetTokenAccountsByOwner = jsonRpcResultAndContext( executable: 'boolean', owner: 'string', lamports: 'number', - data: 'string', + data: ['string', struct.literal('binary64')], rentEpoch: 'number?', }), }), @@ -795,7 +795,7 @@ const ParsedAccountInfoResult = struct.object({ owner: 'string', lamports: 'number', data: struct.union([ - 'string', + ['string', struct.literal('binary64')], struct.pick({ program: 'string', parsed: 'any', @@ -1631,15 +1631,18 @@ export class Connection { return { context, - value: value.map(result => ({ - pubkey: new PublicKey(result.pubkey), - account: { - executable: result.account.executable, - owner: new PublicKey(result.account.owner), - lamports: result.account.lamports, - data: Buffer.from(result.account.data, 'base64'), - }, - })), + value: value.map(result => { + assert(result.account.data[1] === 'binary64'); + return { + pubkey: new PublicKey(result.pubkey), + account: { + executable: result.account.executable, + owner: new PublicKey(result.account.owner), + lamports: result.account.lamports, + data: Buffer.from(result.account.data[0], 'base64'), + }, + }; + }), }; } @@ -1769,11 +1772,12 @@ export class Connection { let value = null; if (res.result.value) { const {executable, owner, lamports, data} = res.result.value; + assert(data[1] === 'binary64'); value = { executable, owner: new PublicKey(owner), lamports, - data: Buffer.from(data, 'base64'), + data: Buffer.from(data[0], 'base64'), }; } @@ -1817,7 +1821,8 @@ export class Connection { let data = resultData; if (!data.program) { - data = Buffer.from(data, 'base64'); + assert(data[1] === 'binary64'); + data = Buffer.from(data[0], 'base64'); } value = { @@ -1881,13 +1886,14 @@ export class Connection { assert(typeof result !== 'undefined'); return result.map(result => { + assert(result.account.data[1] === 'binary64'); return { pubkey: new PublicKey(result.pubkey), account: { executable: result.account.executable, owner: new PublicKey(result.account.owner), lamports: result.account.lamports, - data: Buffer.from(result.account.data, 'base64'), + data: Buffer.from(result.account.data[0], 'base64'), }, }; }); @@ -1931,7 +1937,8 @@ export class Connection { let data = resultData; if (!data.program) { - data = Buffer.from(data, 'base64'); + assert(data[1] === 'binary64'); + data = Buffer.from(data[0], 'base64'); } return { @@ -2899,6 +2906,7 @@ export class Connection { const {result} = res; const {value, context} = result; + assert(value.account.data[1] === 'binary64'); sub.callback( { accountId: value.pubkey, @@ -2906,7 +2914,7 @@ export class Connection { executable: value.account.executable, owner: new PublicKey(value.account.owner), lamports: value.account.lamports, - data: Buffer.from(value.account.data, 'base64'), + data: Buffer.from(value.account.data[0], 'base64'), }, }, context, diff --git a/web3.js/test/connection.test.js b/web3.js/test/connection.test.js index 57f9ad2e1f..a4f424302c 100644 --- a/web3.js/test/connection.test.js +++ b/web3.js/test/connection.test.js @@ -263,7 +263,7 @@ test('get program accounts', async () => { result: [ { account: { - data: '', + data: ['', 'binary64'], executable: false, lamports: LAMPORTS_PER_SOL - feeCalculator.lamportsPerSignature, owner: programId.publicKey.toBase58(), @@ -273,7 +273,7 @@ test('get program accounts', async () => { }, { account: { - data: '', + data: ['', 'binary64'], executable: false, lamports: 0.5 * LAMPORTS_PER_SOL - feeCalculator.lamportsPerSignature, @@ -1693,7 +1693,7 @@ test('request airdrop', async () => { value: { owner: '11111111111111111111111111111111', lamports: minimumAmount + 42, - data: '', + data: ['', 'binary64'], executable: false, }, }, @@ -1727,7 +1727,7 @@ test('request airdrop', async () => { value: { owner: '11111111111111111111111111111111', lamports: minimumAmount + 42, - data: '', + data: ['', 'binary64'], executable: false, }, }, diff --git a/web3.js/test/nonce.test.js b/web3.js/test/nonce.test.js index 737f7f378d..a43efc36a5 100644 --- a/web3.js/test/nonce.test.js +++ b/web3.js/test/nonce.test.js @@ -14,7 +14,7 @@ if (!mockRpcEnabled) { jest.setTimeout(30000); } -const expectedData = (authorizedPubkey: PublicKey): string => { +const expectedData = (authorizedPubkey: PublicKey): [string, string] => { const expectedData = Buffer.alloc(NONCE_ACCOUNT_LENGTH); expectedData.writeInt32LE(0, 0); // Version, 4 bytes expectedData.writeInt32LE(1, 4); // State, 4 bytes @@ -22,7 +22,7 @@ const expectedData = (authorizedPubkey: PublicKey): string => { const mockNonce = new Account(); mockNonce.publicKey.toBuffer().copy(expectedData, 40); // Hash, 32 bytes expectedData.writeUInt16LE(5000, 72); // feeCalculator, 8 bytes - return expectedData.toString('base64'); + return [expectedData.toString('base64'), 'binary64']; }; test('create and query nonce account', async () => { @@ -119,7 +119,10 @@ test('create and query nonce account', async () => { url, { method: 'getAccountInfo', - params: [nonceAccount.publicKey.toBase58(), {commitment: 'recent'}], + params: [ + nonceAccount.publicKey.toBase58(), + {encoding: 'binary64', commitment: 'recent'}, + ], }, { error: null, @@ -243,7 +246,10 @@ test('create and query nonce account with seed', async () => { url, { method: 'getAccountInfo', - params: [noncePubkey.toBase58(), {commitment: 'recent'}], + params: [ + noncePubkey.toBase58(), + {encoding: 'binary64', commitment: 'recent'}, + ], }, { error: null,