From 0a65b893e3b9e574b8214866bc63899a79f3d234 Mon Sep 17 00:00:00 2001 From: ananas-block Date: Fri, 17 Mar 2023 19:24:44 +0000 Subject: [PATCH 1/2] added relayer custom errors --- light-sdk-ts/package.json | 1 + light-sdk-ts/src/errors.ts | 9 +++ light-sdk-ts/src/relayer.ts | 25 +++++++ light-sdk-ts/tests/relayer.test.ts | 110 +++++++++++++++++++++++++++++ 4 files changed, 145 insertions(+) create mode 100644 light-sdk-ts/tests/relayer.test.ts diff --git a/light-sdk-ts/package.json b/light-sdk-ts/package.json index 75d4d6a50a..da38418b1e 100644 --- a/light-sdk-ts/package.json +++ b/light-sdk-ts/package.json @@ -10,6 +10,7 @@ "test-verifiers": "ts-mocha --resolveJsonModule ./tsconfig.json -t 100000000 tests/verifiers.test.ts --exit", "test-transaction": "ts-mocha --resolveJsonModule ./tsconfig.json -t 100000000 tests/transaction.test.ts --exit", "test-account": "ts-mocha --resolveJsonModule ./tsconfig.json -t 100000000 tests/account.test.ts --exit", + "test-relayer": "ts-mocha --resolveJsonModule ./tsconfig.json -t 100000000 tests/relayer.test.ts --exit", "build": "yarn tsc", "format": "prettier --write \"src/**/*.{ts,js}\"", "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", diff --git a/light-sdk-ts/src/errors.ts b/light-sdk-ts/src/errors.ts index 118140e30e..df5f9837dd 100644 --- a/light-sdk-ts/src/errors.ts +++ b/light-sdk-ts/src/errors.ts @@ -10,6 +10,13 @@ export enum UtxoErrorCode { ASSET_NOT_FOUND = "ASSET_NOT_FOUND", } +export enum RelayerErrorCode { + RELAYER_FEE_UNDEFINED = "RELAYER_FEE_UNDEFINED", + RELAYER_PUBKEY_UNDEFINED = "RELAYER_PUBKEY_UNDEFINED", + LOOK_UP_TABLE_UNDEFINED = "LOOK_UP_TABLE_UNDEFINED", + RELAYER_RECIPIENT_UNDEFINED = "RELAYER_RECIPIENT_UNDEFINED", +} + export enum AccountErrorCode { INVALID_SEED_SIZE = "INVALID_SEED_SIZE", SEED_UNDEFINED = "SEED_UNDEFINED", @@ -122,3 +129,5 @@ export class UtxoError extends MetaError {} export class VerifierError extends MetaError {} export class AccountError extends MetaError {} + +export class RelayerError extends MetaError {} diff --git a/light-sdk-ts/src/relayer.ts b/light-sdk-ts/src/relayer.ts index 15ed13933a..c88205645a 100644 --- a/light-sdk-ts/src/relayer.ts +++ b/light-sdk-ts/src/relayer.ts @@ -1,5 +1,6 @@ import { Keypair, PublicKey } from "@solana/web3.js"; import { BN } from "@coral-xyz/anchor"; +import { RelayerError, RelayerErrorCode } from "./errors"; export class Relayer { accounts: { @@ -22,6 +23,30 @@ export class Relayer { relayerRecipient?: PublicKey, relayerFee: BN = new BN(0), ) { + if (!relayerPubkey) { + throw new RelayerError( + RelayerErrorCode.RELAYER_PUBKEY_UNDEFINED, + "constructor", + ); + } + if (!lookUpTable) { + throw new RelayerError( + RelayerErrorCode.LOOK_UP_TABLE_UNDEFINED, + "constructor", + ); + } + if (relayerRecipient && relayerFee.toString() === "0") { + throw new RelayerError( + RelayerErrorCode.RELAYER_FEE_UNDEFINED, + "constructor", + ); + } + if (relayerFee.toString() !== "0" && !relayerRecipient) { + throw new RelayerError( + RelayerErrorCode.RELAYER_RECIPIENT_UNDEFINED, + "constructor", + ); + } if (relayerRecipient) { this.accounts = { relayerPubkey, diff --git a/light-sdk-ts/tests/relayer.test.ts b/light-sdk-ts/tests/relayer.test.ts new file mode 100644 index 0000000000..4062e55f02 --- /dev/null +++ b/light-sdk-ts/tests/relayer.test.ts @@ -0,0 +1,110 @@ +import { assert, expect } from "chai"; + +import { Keypair as SolanaKeypair } from "@solana/web3.js"; +import * as anchor from "@coral-xyz/anchor"; +import { it } from "mocha"; + +import { Relayer, RelayerError, RelayerErrorCode } from "../src"; + +process.env.ANCHOR_PROVIDER_URL = "http://127.0.0.1:8899"; +process.env.ANCHOR_WALLET = process.env.HOME + "/.config/solana/id.json"; +let mockKeypair = SolanaKeypair.generate(); +let mockKeypair1 = SolanaKeypair.generate(); +let relayerFee = new anchor.BN("123214"); +let relayerRecipient = SolanaKeypair.generate().publicKey; + +describe("Test Relayer Functional", () => { + it("Relayer Deposit", () => { + let relayer = new Relayer(mockKeypair.publicKey, mockKeypair1.publicKey); + assert.equal( + relayer.accounts.lookUpTable.toBase58(), + mockKeypair1.publicKey.toBase58(), + ); + assert.equal( + relayer.accounts.relayerPubkey.toBase58(), + mockKeypair.publicKey.toBase58(), + ); + assert.equal(relayer.relayerFee.toString(), "0"); + }); + + it("Relayer Transfer/Withdrawal", () => { + let relayer = new Relayer( + mockKeypair.publicKey, + mockKeypair1.publicKey, + relayerRecipient, + relayerFee, + ); + assert.equal( + relayer.accounts.lookUpTable.toBase58(), + mockKeypair1.publicKey.toBase58(), + ); + assert.equal( + relayer.accounts.relayerPubkey.toBase58(), + mockKeypair.publicKey.toBase58(), + ); + assert.equal(relayer.relayerFee.toString(), relayerFee.toString()); + assert.equal( + relayer.accounts.relayerRecipient.toBase58(), + relayerRecipient.toBase58(), + ); + }); +}); + +describe("Test Relayer Errors", () => { + it("RELAYER_PUBKEY_UNDEFINED", () => { + expect(() => { + // @ts-ignore + new Relayer(); + }) + .to.throw(RelayerError) + .includes({ + code: RelayerErrorCode.RELAYER_PUBKEY_UNDEFINED, + functionName: "constructor", + }); + }); + + it("LOOK_UP_TABLE_UNDEFINED", () => { + expect(() => { + // @ts-ignore + new Relayer(mockKeypair.publicKey); + }) + .to.throw(RelayerError) + .includes({ + code: RelayerErrorCode.LOOK_UP_TABLE_UNDEFINED, + functionName: "constructor", + }); + }); + + it("RELAYER_FEE_UNDEFINED", () => { + expect(() => { + // @ts-ignore + new Relayer( + mockKeypair.publicKey, + mockKeypair1.publicKey, + relayerRecipient, + ); + }) + .to.throw(RelayerError) + .includes({ + code: RelayerErrorCode.RELAYER_FEE_UNDEFINED, + functionName: "constructor", + }); + }); + + it("RELAYER_RECIPIENT_UNDEFINED", () => { + expect(() => { + // @ts-ignore + new Relayer( + mockKeypair.publicKey, + mockKeypair1.publicKey, + undefined, + relayerFee, + ); + }) + .to.throw(RelayerError) + .includes({ + code: RelayerErrorCode.RELAYER_RECIPIENT_UNDEFINED, + functionName: "constructor", + }); + }); +}); From e58430572f06d484cf1d1fd33628dfa29f488bc1 Mon Sep 17 00:00:00 2001 From: ananas-block Date: Fri, 17 Mar 2023 21:31:56 +0000 Subject: [PATCH 2/2] increased relayer fee in mock-verifier tests --- mock-app-verifier/tests/functional_test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mock-app-verifier/tests/functional_test.ts b/mock-app-verifier/tests/functional_test.ts index 38cb9e344f..c00079c651 100644 --- a/mock-app-verifier/tests/functional_test.ts +++ b/mock-app-verifier/tests/functional_test.ts @@ -134,7 +134,7 @@ describe("Mock verifier functional", () => { ADMIN_AUTH_KEYPAIR.publicKey, lightProvider.lookUpTable, relayerRecipient, - new BN(0), + new BN(100000), ); await provider.connection.confirmTransaction( await provider.connection.requestAirdrop(relayerRecipient, 10000000),