@zebec-network/solana-payroll-sdk 2.3.1 → 2.4.0

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.
@@ -120,13 +120,6 @@ export declare function createRequestUnlockInstruction(program: Program<ZebecPay
120
120
  companyId: number[];
121
121
  nonce: BN;
122
122
  }): Promise<TransactionInstruction>;
123
- export declare function createCancelUnlockInstruction(program: Program<ZebecPayrollIdl>, accounts: {
124
- company: PublicKey;
125
- companyDeposit: PublicKey;
126
- }, data: {
127
- companyId: number[];
128
- nonce: BN;
129
- }): Promise<TransactionInstruction>;
130
123
  export declare function createCompleteUnlockInstruction(program: Program<ZebecPayrollIdl>, accounts: {
131
124
  admin: PublicKey;
132
125
  feePayer: PublicKey;
@@ -136,6 +129,10 @@ export declare function createCompleteUnlockInstruction(program: Program<ZebecPa
136
129
  centralVaultTokenAta: PublicKey;
137
130
  companyTokenAta: PublicKey;
138
131
  depositMint: PublicKey;
132
+ centralVault: PublicKey;
133
+ centralVaultUsxAta: PublicKey;
134
+ usxMint: PublicKey;
135
+ companyUsxAta: PublicKey;
139
136
  }, data: {
140
137
  companyId: number[];
141
138
  nonce: BN;
@@ -143,10 +140,12 @@ export declare function createCompleteUnlockInstruction(program: Program<ZebecPa
143
140
  export declare function createDistributeRewardsInstruction(program: Program<ZebecPayrollIdl>, accounts: {
144
141
  admin: PublicKey;
145
142
  yieldConfig: PublicKey;
143
+ checkAccount: PublicKey;
146
144
  }, data: {
147
145
  distributions: {
148
146
  companyId: number[];
149
147
  nonce: BN;
150
148
  amount: BN;
151
149
  }[];
150
+ checkId: number[];
152
151
  }, remainingAccounts: AccountMeta[]): Promise<TransactionInstruction>;
@@ -156,15 +156,6 @@ export async function createRequestUnlockInstruction(program, accounts, data) {
156
156
  })
157
157
  .instruction();
158
158
  }
159
- export async function createCancelUnlockInstruction(program, accounts, data) {
160
- return program.methods
161
- .cancelUnlock(data.companyId, data.nonce)
162
- .accountsPartial({
163
- company: accounts.company,
164
- companyDeposit: accounts.companyDeposit,
165
- })
166
- .instruction();
167
- }
168
159
  export async function createCompleteUnlockInstruction(program, accounts, data) {
169
160
  return program.methods
170
161
  .completeUnlock(data.companyId, data.nonce)
@@ -177,15 +168,20 @@ export async function createCompleteUnlockInstruction(program, accounts, data) {
177
168
  centralVaultTokenAta: accounts.centralVaultTokenAta,
178
169
  companyTokenAta: accounts.companyTokenAta,
179
170
  depositMint: accounts.depositMint,
171
+ centralVault: accounts.centralVault,
172
+ centralVaultUsxAta: accounts.centralVaultUsxAta,
173
+ usxMint: accounts.usxMint,
174
+ companyUsxAta: accounts.companyUsxAta,
180
175
  })
181
176
  .instruction();
182
177
  }
183
178
  export async function createDistributeRewardsInstruction(program, accounts, data, remainingAccounts) {
184
179
  return program.methods
185
- .distributeRewards(data.distributions)
180
+ .distributeRewards(data.checkId, data.distributions)
186
181
  .accountsPartial({
187
182
  admin: accounts.admin,
188
183
  yieldConfig: accounts.yieldConfig,
184
+ checkAccount: accounts.checkAccount,
189
185
  })
190
186
  .remainingAccounts(remainingAccounts)
191
187
  .instruction();
package/dist/pda.d.ts CHANGED
@@ -5,3 +5,4 @@ export declare function derivePayrollVaultPda(metatadata: Address, payrollProgra
5
5
  export declare function deriveYieldConfigPda(configProgramId: Address): [PublicKey, number];
6
6
  export declare function deriveCompanyDepositPda(companyId: Buffer, nonce: bigint, payrollProgramId: Address): [PublicKey, number];
7
7
  export declare function deriveCompanyNoncePda(companyId: Buffer, payrollProgramId: Address): [PublicKey, number];
8
+ export declare function deriveCheckAccountPda(checkId: Buffer | Uint8Array, payrollProgramId: Address): [PublicKey, number];
package/dist/pda.js CHANGED
@@ -30,3 +30,6 @@ export function deriveCompanyDepositPda(companyId, nonce, payrollProgramId) {
30
30
  export function deriveCompanyNoncePda(companyId, payrollProgramId) {
31
31
  return PublicKey.findProgramAddressSync([companyId], translateAddress(payrollProgramId));
32
32
  }
33
+ export function deriveCheckAccountPda(checkId, payrollProgramId) {
34
+ return PublicKey.findProgramAddressSync([checkId], translateAddress(payrollProgramId));
35
+ }
@@ -3,7 +3,7 @@ import { type Commitment } from "@solana/web3.js";
3
3
  import { MultiTransactionPayload, TransactionPayload } from "@zebec-network/solana-common";
4
4
  import type { ZebecConfigs as ZebecConfigsIdl } from "@zebec-network/zebec_configs";
5
5
  import type { ZebecPayroll as ZebecPayrollIdl } from "@zebec-network/zebec_payroll";
6
- import type { CancelMultiplePayrollParams, CancelPayrollParams, CancelUnlockParams, ChangePayrollReceiverParams, CompanyDepositInfo, CompanyNonceInfo, CompleteUnlockParams, CreateMultiplePayrollParams, CreatePayrollParams, DistributeRewardsParams, PauseResumeMultiplePayrollParams, PauseResumePayrollParams, PayrollConfigInfo, PayrollMetadataInfo, RequestUnlockParams, SetMultipleTopupDelegateParams, SetTopupDelegateParams, TokenMetadata, TopupMultiplePayrollParams, TopupPayrollParams, WithdrawMultiplePayrollParams, WithdrawPayrollParams, YieldDepositParams } from "./types.js";
6
+ import type { CancelMultiplePayrollParams, CancelPayrollParams, ChangePayrollReceiverParams, CompanyDepositInfo, CompanyNonceInfo, CompleteUnlockParams, CreateMultiplePayrollParams, CreatePayrollParams, DistributeRewardsParams, PauseResumeMultiplePayrollParams, PauseResumePayrollParams, PayrollConfigInfo, PayrollMetadataInfo, RequestUnlockParams, SetMultipleTopupDelegateParams, SetTopupDelegateParams, TokenMetadata, TopupMultiplePayrollParams, TopupPayrollParams, WithdrawMultiplePayrollParams, WithdrawPayrollParams, YieldDepositParams } from "./types.js";
7
7
  export declare function getPayrollConfig(configProgram: Program<ZebecConfigsIdl>, configName: string): Promise<PayrollConfigInfo>;
8
8
  export declare function getWhitelistedTokens(configProgram: Program<ZebecConfigsIdl>, configName: string, commitment?: "processed" | "confirmed" | "finalized"): Promise<TokenMetadata[]>;
9
9
  export declare function getPayrollMetadataInfo(program: Program<ZebecPayrollIdl>, payrollMetadata: Address, commitment?: Commitment): Promise<PayrollMetadataInfo>;
@@ -23,7 +23,6 @@ export declare function topupMultiplePayroll(payrollProgram: Program<ZebecPayrol
23
23
  export declare function getCompanyNonceInfo(payrollProgram: Program<ZebecPayrollIdl>, companyIdBuffer: Buffer, commitment?: Commitment): Promise<CompanyNonceInfo | null>;
24
24
  export declare function yieldDeposit(payrollProgram: Program<ZebecPayrollIdl>, configsProgram: Program<ZebecConfigsIdl>, params: YieldDepositParams, commitment?: Commitment): Promise<TransactionPayload>;
25
25
  export declare function requestUnlock(payrollProgram: Program<ZebecPayrollIdl>, configsProgram: Program<ZebecConfigsIdl>, params: RequestUnlockParams): Promise<TransactionPayload>;
26
- export declare function cancelUnlock(payrollProgram: Program<ZebecPayrollIdl>, params: CancelUnlockParams): Promise<TransactionPayload>;
27
26
  export declare function completeUnlock(payrollProgram: Program<ZebecPayrollIdl>, configsProgram: Program<ZebecConfigsIdl>, params: CompleteUnlockParams, commitment?: Commitment): Promise<TransactionPayload>;
28
27
  export declare function distributeRewards(payrollProgram: Program<ZebecPayrollIdl>, configsProgram: Program<ZebecConfigsIdl>, params: DistributeRewardsParams): Promise<TransactionPayload>;
29
28
  export declare function getCompanyDeposit(payrollProgram: Program<ZebecPayrollIdl>, company: Address): Promise<CompanyDepositInfo | null>;
package/dist/services.js CHANGED
@@ -8,8 +8,8 @@ import { createAssociatedTokenAccountInstruction, getAssociatedTokenAddressSync,
8
8
  import { BigNumber } from "bignumber.js";
9
9
  import { BN } from "bn.js";
10
10
  import { PAYROLL_NAME_BUFFER_SIZE, USX_DECIMALS } from "./constants.js";
11
- import { createCancelPayrollInstruction, createCancelUnlockInstruction, createChangeRecipientInstruction, createCompleteUnlockInstruction, createCreatePayrollInstruction, createDistributeRewardsInstruction, createPauseResumePayrollInstruction, createRequestUnlockInstruction, createSetTopupDelegateInstruction, createTopupPayrollInstruction, createTransferFeesInstruction, createWithdrawPayrollInstruction, createYieldDepositInstruction, } from "./instructions.js";
12
- import { deriveCompanyDepositPda, deriveCompanyNoncePda, derivePayrollConfigPda, derivePayrollVaultPda, deriveYieldConfigPda, } from "./pda.js";
11
+ import { createCancelPayrollInstruction, createChangeRecipientInstruction, createCompleteUnlockInstruction, createCreatePayrollInstruction, createDistributeRewardsInstruction, createPauseResumePayrollInstruction, createRequestUnlockInstruction, createSetTopupDelegateInstruction, createTopupPayrollInstruction, createTransferFeesInstruction, createWithdrawPayrollInstruction, createYieldDepositInstruction, } from "./instructions.js";
12
+ import { deriveCheckAccountPda, deriveCompanyDepositPda, deriveCompanyNoncePda, derivePayrollConfigPda, derivePayrollVaultPda, deriveYieldConfigPda, } from "./pda.js";
13
13
  import { getFeeInfoForPayroll } from "./utils.js";
14
14
  export async function getPayrollConfig(configProgram, configName) {
15
15
  const [payrollConfigPda] = derivePayrollConfigPda(configName, configProgram.programId);
@@ -749,19 +749,6 @@ export async function requestUnlock(payrollProgram, configsProgram, params) {
749
749
  });
750
750
  return createTransactionPayload(payrollProgram, feePayer, [ix]);
751
751
  }
752
- export async function cancelUnlock(payrollProgram, params) {
753
- const company = translateAddress(params.company);
754
- const feePayer = translateAddress(params.feePayer);
755
- const [companyDeposit] = deriveCompanyDepositPda(Buffer.from(params.companyId), params.nonce, payrollProgram.programId);
756
- const ix = await createCancelUnlockInstruction(payrollProgram, {
757
- company,
758
- companyDeposit,
759
- }, {
760
- companyId: Array.from(params.companyId),
761
- nonce: new BN(params.nonce.toString()),
762
- });
763
- return createTransactionPayload(payrollProgram, feePayer, [ix]);
764
- }
765
752
  export async function completeUnlock(payrollProgram, configsProgram, params, commitment) {
766
753
  commitment = commitment ?? payrollProgram.provider.connection.commitment;
767
754
  const company = translateAddress(params.company);
@@ -771,35 +758,51 @@ export async function completeUnlock(payrollProgram, configsProgram, params, com
771
758
  if (!configData) {
772
759
  throw new Error("YieldConfigNotFound: Yield config is not initialized in Zebec Configs Program");
773
760
  }
774
- // central vault is also the admin
775
- const admin = configData.centralVault;
761
+ const admin = configData.admin;
762
+ const centralVault = configData.centralVault;
763
+ const usxMint = configData.usxMint;
764
+ if (params.companyVaultKeypair &&
765
+ !centralVault.equals(params.companyVaultKeypair.publicKey)) {
766
+ throw new Error("Given keypair is not of companyVault");
767
+ }
776
768
  const [companyDeposit] = deriveCompanyDepositPda(Buffer.from(params.companyId), params.nonce, payrollProgram.programId);
777
769
  const companyDepositData = await payrollProgram.account.companyDeposit.fetchNullable(companyDeposit, commitment);
778
770
  if (!companyDepositData) {
779
771
  throw new Error(`CompanyDepositNotFound: Company Deposit does not exists for nonce: ${params.nonce.toString()}n and companyId: [${Array.from(params.companyId).toString()}]`);
780
772
  }
781
773
  const depositMint = companyDepositData.depositMint;
782
- const centralVaultTokenAta = getAssociatedTokenAddressSync(depositMint, admin, true);
774
+ const centralVaultTokenAta = getAssociatedTokenAddressSync(depositMint, centralVault, true);
775
+ const centralVaultUsxAta = getAssociatedTokenAddressSync(usxMint, centralVault, true);
783
776
  const companyTokenAta = getAssociatedTokenAddressSync(depositMint, company, true);
777
+ const companyUsxAta = getAssociatedTokenAddressSync(usxMint, company, true);
784
778
  const ix = await createCompleteUnlockInstruction(payrollProgram, {
785
779
  admin,
786
780
  feePayer,
787
781
  company,
788
782
  companyDeposit,
789
783
  yieldConfig,
784
+ centralVault,
790
785
  centralVaultTokenAta,
786
+ centralVaultUsxAta,
791
787
  companyTokenAta,
788
+ companyUsxAta,
792
789
  depositMint,
790
+ usxMint,
793
791
  }, {
794
792
  companyId: Array.from(params.companyId),
795
793
  nonce: new BN(params.nonce.toString()),
796
794
  });
797
- return createTransactionPayload(payrollProgram, feePayer, [ix]);
795
+ const partialSigners = [];
796
+ if (params.companyVaultKeypair) {
797
+ partialSigners.push(params.companyVaultKeypair);
798
+ }
799
+ return createTransactionPayload(payrollProgram, feePayer, [ix], partialSigners);
798
800
  }
799
801
  export async function distributeRewards(payrollProgram, configsProgram, params) {
800
802
  const admin = translateAddress(params.admin);
801
803
  const feePayer = translateAddress(params.feePayer);
802
804
  const [yieldConfig] = deriveYieldConfigPda(configsProgram.programId);
805
+ const [checkAccount] = deriveCheckAccountPda(params.checkId, payrollProgram.programId);
803
806
  const distributions = params.distributions.map((d) => ({
804
807
  companyId: Array.from(d.companyId),
805
808
  nonce: new BN(d.nonce.toString()),
@@ -815,7 +818,11 @@ export async function distributeRewards(payrollProgram, configsProgram, params)
815
818
  const ix = await createDistributeRewardsInstruction(payrollProgram, {
816
819
  admin,
817
820
  yieldConfig,
818
- }, { distributions }, remainingAccounts);
821
+ checkAccount,
822
+ }, {
823
+ distributions,
824
+ checkId: Array.from(params.checkId),
825
+ }, remainingAccounts);
819
826
  return createTransactionPayload(payrollProgram, feePayer, [ix]);
820
827
  }
821
828
  export async function getCompanyDeposit(payrollProgram, company) {
package/dist/types.d.ts CHANGED
@@ -211,21 +211,18 @@ export type RequestUnlockParams = {
211
211
  companyId: Buffer | Uint8Array;
212
212
  nonce: bigint;
213
213
  };
214
- export type CancelUnlockParams = {
215
- feePayer: Address;
216
- company: Address;
217
- companyId: Buffer | Uint8Array;
218
- nonce: bigint;
219
- };
220
214
  export type CompleteUnlockParams = {
221
215
  feePayer: Address;
222
216
  company: Address;
223
217
  companyId: Buffer | Uint8Array;
224
218
  nonce: bigint;
219
+ companyVaultKeypair?: Keypair;
225
220
  };
226
221
  export type DistributeRewardsParams = {
227
222
  admin: Address;
228
223
  feePayer: Address;
224
+ /** Check id used to derive the check account that prevents duplicate distributions. */
225
+ checkId: Buffer | Uint8Array;
229
226
  distributions: {
230
227
  companyId: Buffer | Uint8Array;
231
228
  nonce: bigint;
package/package.json CHANGED
@@ -1,47 +1,47 @@
1
- {
2
- "author": "Zebec Network",
3
- "dependencies": {
4
- "@coral-xyz/anchor": "^0.31.1",
5
- "@metaplex-foundation/mpl-token-metadata": "^3.4.0",
6
- "@metaplex-foundation/umi": "^1.5.1",
7
- "@metaplex-foundation/umi-bundle-defaults": "^1.5.1",
8
- "@metaplex-foundation/umi-web3js-adapters": "^1.5.1",
9
- "@solana/spl-token": "^0.4.14",
10
- "@solana/web3.js": "^1.98.2",
11
- "@zebec-network/core-utils": "^1.3.0",
12
- "@zebec-network/solana-common": "^2.6.0",
13
- "@zebec-network/zebec_configs": "^1.2.2",
14
- "@zebec-network/zebec_payroll": "^1.4.5",
15
- "bignumber.js": "^11.1.1"
16
- },
17
- "devDependencies": {
18
- "@types/bn.js": "^5.2.0",
19
- "@types/mocha": "^10.0.10",
20
- "@types/node": "^25.6.0",
21
- "dotenv": "^17.4.2",
22
- "mocha": "^11.7.5",
23
- "rimraf": "^6.1.3",
24
- "ts-mocha": "^11.1.0",
25
- "ts-node": "^10.9.2",
26
- "typescript": "^6.0.3"
27
- },
28
- "files": [
29
- "dist"
30
- ],
31
- "license": "MIT",
32
- "main": "dist/index.js",
33
- "name": "@zebec-network/solana-payroll-sdk",
34
- "private": false,
35
- "scripts": {
36
- "build": "npm run clean && tsc",
37
- "clean": "rimraf ./dist",
38
- "format": "npx @biomejs/biome format --write",
39
- "prepare": "npm run build",
40
- "run:example": "node --loader ts-node/esm -- example/buildTransactionAndSendForSigning.ts",
41
- "test": "ts-mocha -p ./tsconfig.json -t 1000000000 test/**/*.test.ts",
42
- "test:single": "ts-mocha -p ./tsconfig.json -t 1000000000 --"
43
- },
44
- "type": "module",
45
- "types": "dist/index.d.ts",
46
- "version": "2.3.1"
1
+ {
2
+ "author": "Zebec Network",
3
+ "dependencies": {
4
+ "@coral-xyz/anchor": "^0.31.1",
5
+ "@metaplex-foundation/mpl-token-metadata": "^3.4.0",
6
+ "@metaplex-foundation/umi": "^1.5.1",
7
+ "@metaplex-foundation/umi-bundle-defaults": "^1.5.1",
8
+ "@metaplex-foundation/umi-web3js-adapters": "^1.5.1",
9
+ "@solana/spl-token": "^0.4.14",
10
+ "@solana/web3.js": "^1.98.2",
11
+ "@zebec-network/core-utils": "^1.3.1",
12
+ "@zebec-network/solana-common": "^2.6.0",
13
+ "@zebec-network/zebec_configs": "^1.2.3",
14
+ "@zebec-network/zebec_payroll": "^1.4.9",
15
+ "bignumber.js": "^11.1.1"
16
+ },
17
+ "devDependencies": {
18
+ "@types/bn.js": "^5.2.0",
19
+ "@types/mocha": "^10.0.10",
20
+ "@types/node": "^25.6.0",
21
+ "dotenv": "^17.4.2",
22
+ "mocha": "^11.7.5",
23
+ "rimraf": "^6.1.3",
24
+ "ts-mocha": "^11.1.0",
25
+ "ts-node": "^10.9.2",
26
+ "typescript": "^6.0.3"
27
+ },
28
+ "files": [
29
+ "dist"
30
+ ],
31
+ "license": "MIT",
32
+ "main": "dist/index.js",
33
+ "name": "@zebec-network/solana-payroll-sdk",
34
+ "private": false,
35
+ "scripts": {
36
+ "build": "npm run clean && tsc",
37
+ "clean": "rimraf ./dist",
38
+ "format": "npx @biomejs/biome format --write",
39
+ "prepare": "npm run build",
40
+ "run:example": "node --loader ts-node/esm -- example/buildTransactionAndSendForSigning.ts",
41
+ "test": "ts-mocha -p ./tsconfig.json -t 1000000000 test/**/*.test.ts",
42
+ "test:single": "ts-mocha -p ./tsconfig.json -t 1000000000 --"
43
+ },
44
+ "type": "module",
45
+ "types": "dist/index.d.ts",
46
+ "version": "2.4.0"
47
47
  }