From a0db370b909905ae80e39e942b12245687af4c42 Mon Sep 17 00:00:00 2001 From: Bart Tadych Date: Tue, 6 Sep 2022 20:05:36 +0200 Subject: [PATCH] solana address validation fix. (#655) * solana address validation fix. --- .changeset/silent-lizards-sing.md | 5 +++ packages/solUtils/package.json | 2 +- .../dataTypes/SolAddress/SolAddress.test.ts | 37 ++++++++++++------- .../src/dataTypes/SolAddress/SolAddress.ts | 9 +++-- yarn.lock | 8 ++-- 5 files changed, 40 insertions(+), 21 deletions(-) create mode 100644 .changeset/silent-lizards-sing.md diff --git a/.changeset/silent-lizards-sing.md b/.changeset/silent-lizards-sing.md new file mode 100644 index 0000000000..c8a4e1d585 --- /dev/null +++ b/.changeset/silent-lizards-sing.md @@ -0,0 +1,5 @@ +--- +'@moralisweb3/sol-utils': patch +--- + +The validator of a Solana address supports program addresses now. diff --git a/packages/solUtils/package.json b/packages/solUtils/package.json index 4edcedb9b0..c5b8b748e0 100644 --- a/packages/solUtils/package.json +++ b/packages/solUtils/package.json @@ -26,6 +26,6 @@ }, "dependencies": { "@moralisweb3/core": "^2.3.0", - "@solana/web3.js": "^1.55.0" + "@solana/web3.js": "^1.56.2" } } diff --git a/packages/solUtils/src/dataTypes/SolAddress/SolAddress.test.ts b/packages/solUtils/src/dataTypes/SolAddress/SolAddress.test.ts index 7b4ad291a6..813e18b128 100644 --- a/packages/solUtils/src/dataTypes/SolAddress/SolAddress.test.ts +++ b/packages/solUtils/src/dataTypes/SolAddress/SolAddress.test.ts @@ -1,21 +1,32 @@ import { SolAddress } from './SolAddress'; describe('SolAddress', () => { - const ADDRESS = '5xoBq7f7CDgZwqHrDBdRWM84ExRetg4gZq93dyJtoSwp'; - - it('creates an instance', () => { - const address = SolAddress.create(ADDRESS); - - expect(address.address).toEqual(ADDRESS); - expect(address.toJSON()).toEqual(ADDRESS); - expect(address.toString()).toEqual(ADDRESS); - expect(address.format()).toEqual(ADDRESS); - }); + const ADDRESS = '5xoBq7f7CDgZwqHrDBdRWM84ExRetg4gZq93dyJtoSwp'; // account + + const addresses = [ + ADDRESS, + 'JdbMBJNENmKowddNkM7gKKkRXGbjTCVU1hYtUZquLbE', // token account (not on the curve) + 'DS2tt4BX7YwCw7yrDNwbAdnYrxjeCPeGJbHmZEYC8RTb', // account + 'TLPv2tuSVvn3fSk8RgW3yPddkp5oFivzZV3rA9hQxtX', // program + '5JQ8Mhdp2wv3HWcfjq9Ts8kwzCAeBADFBDAgBznzRsE4', // program + 'AMM55ShdkoGRB5jVYPjWziwk8m5MpwyDgsMWHaMSQWH6', // program + '9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM', // account + '9QgXqrgdbVU8KcpfskqJpAXKzbaYQJecgMAruSWoXDkM', // stake account (not on the curve) + ]; + + for (const address of addresses) { + it(`creates an instance for ${address}`, () => { + const sol = SolAddress.create(address); + + expect(sol.address).toEqual(address); + expect(sol.toJSON()).toEqual(address); + expect(sol.toString()).toEqual(address); + expect(sol.format()).toEqual(address); + }); + } it('create() throws an error when a passed address is invalid', () => { - expect(() => SolAddress.create('5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5x5xwp')).toThrowError( - 'Invalid Solana address provided', - ); + expect(() => SolAddress.create('5x')).toThrowError('Invalid Solana address provided'); }); it('create() does not create a new instance when SolAddress passed', () => { diff --git a/packages/solUtils/src/dataTypes/SolAddress/SolAddress.ts b/packages/solUtils/src/dataTypes/SolAddress/SolAddress.ts index bc4b90fd69..289ba672d2 100644 --- a/packages/solUtils/src/dataTypes/SolAddress/SolAddress.ts +++ b/packages/solUtils/src/dataTypes/SolAddress/SolAddress.ts @@ -29,13 +29,16 @@ export class SolAddress implements MoralisData { } private static parse(address: string): string { - if (!PublicKey.isOnCurve(address)) { + try { + const publicKey = new PublicKey(address); + return publicKey.toBase58(); + } catch (e) { throw new MoralisCoreError({ code: CoreErrorCode.INVALID_ARGUMENT, - message: 'Invalid Solana address provided', + message: `Invalid Solana address provided: ${address}`, + cause: e, }); } - return address; } public constructor(public readonly address: string) {} diff --git a/yarn.lock b/yarn.lock index f62f160b3b..0cd219512d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2306,10 +2306,10 @@ dependencies: buffer "~6.0.3" -"@solana/web3.js@^1.55.0": - version "1.55.0" - resolved "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.55.0.tgz" - integrity sha512-hXEc5CtA/5tZMvwEy0Cv6iynBpWoSLk6ud2PmoiGfWrZXZqkrfgTPkgd4yBw+VNZJRBRMKVbs/P7kT1sBwZUrw== +"@solana/web3.js@^1.56.2": + version "1.56.2" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.56.2.tgz#5212e8b147ebc216ea5a7aa99d5b555ebe41f9bd" + integrity sha512-ByWfNA8H/1EB4g0749uhkQ0zZZAQealzRmmT3UMIv3xe0DeHwnrzQUavBtAlHNMrKqLHu8kd+XtPci6zreMjjA== dependencies: "@babel/runtime" "^7.12.5" "@noble/ed25519" "^1.7.0"