@smithii_io/mixoor 0.0.16 → 0.0.18
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/dist/src/index.js +24 -41
- package/dist/src/index.js.map +1 -1
- package/dist/src/index.mjs +24 -42
- package/dist/src/index.mjs.map +1 -1
- package/dist/test/_setup.js +35 -20
- package/dist/test/_setup.js.map +1 -1
- package/dist/test/{transfer.test.js → _transferSol.test.js} +19 -15
- package/dist/test/_transferSol.test.js.map +1 -0
- package/dist/test/transferSpl.test.js +111 -0
- package/dist/test/transferSpl.test.js.map +1 -0
- package/dist/types/src/generated/errors/mixoor.d.ts +3 -1
- package/dist/types/src/generated/errors/mixoor.d.ts.map +1 -1
- package/dist/types/src/generated/instructions/transfer.d.ts.map +1 -1
- package/dist/types/src/generated/instructions/withdraw.d.ts +11 -11
- package/dist/types/src/generated/instructions/withdraw.d.ts.map +1 -1
- package/dist/types/test/_setup.d.ts +12 -4
- package/dist/types/test/_setup.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/test/transfer.test.js.map +0 -1
|
@@ -27,10 +27,17 @@ export declare const getTokenBalance: (client: Client, tokenAccount: Address) =>
|
|
|
27
27
|
uiAmount: number | null;
|
|
28
28
|
uiAmountString: import("@solana/kit").StringifiedNumber;
|
|
29
29
|
}>>;
|
|
30
|
-
export declare const
|
|
30
|
+
export declare const createPoolForAuthority: (client: Client, mint: Address, assetType: AssetType) => Promise<{
|
|
31
31
|
authority: Address;
|
|
32
32
|
}>;
|
|
33
|
-
export declare const
|
|
33
|
+
export declare const depositForAuthority: (client: Client, ixArgs: {
|
|
34
|
+
amount: bigint;
|
|
35
|
+
merkleTree: MerkleTree;
|
|
36
|
+
mint: Address;
|
|
37
|
+
pool: Address;
|
|
38
|
+
depositorTokenAccount?: Address;
|
|
39
|
+
vaultTokenAccount?: Address;
|
|
40
|
+
}) => Promise<{
|
|
34
41
|
depositor: Address;
|
|
35
42
|
commitment: Uint8Array;
|
|
36
43
|
secret: Uint8Array;
|
|
@@ -42,12 +49,13 @@ export declare const transferForAuthority: (client: Client, ixArgs: {
|
|
|
42
49
|
nullifierHash: Uint8Array;
|
|
43
50
|
proofData: ProofData;
|
|
44
51
|
publicInputs: Uint8Array[];
|
|
52
|
+
vaultTokenAccount?: Address;
|
|
45
53
|
mint: Address;
|
|
46
|
-
|
|
54
|
+
pool: Address;
|
|
47
55
|
}) => Promise<{
|
|
48
56
|
relayer: Address;
|
|
49
57
|
}>;
|
|
50
|
-
export declare const updatePoolForRelayer: (client: Client, root: Uint8Array, assetType: AssetType) => Promise<{
|
|
58
|
+
export declare const updatePoolForRelayer: (client: Client, root: Uint8Array, assetType: AssetType, mint: Address) => Promise<{
|
|
51
59
|
relayer: Address;
|
|
52
60
|
}>;
|
|
53
61
|
//# sourceMappingURL=_setup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_setup.d.ts","sourceRoot":"","sources":["../../../test/_setup.ts"],"names":[],"mappings":"AACA,OAAO,EACL,OAAO,EAMP,UAAU,EAOV,aAAa,EAGb,GAAG,EACH,gBAAgB,EAKhB,YAAY,EACZ,yBAAyB,EACzB,kBAAkB,EAClB,8BAA8B,EAC9B,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAOrB,OAAO,EACL,SAAS,EAOT,UAAU,EACV,SAAS,EACV,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"_setup.d.ts","sourceRoot":"","sources":["../../../test/_setup.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../test/transfer.test.ts"],"names":["test","createDefaultSolanaClient","loadRelayerKeypair","MerkleTree","AssetType","findPoolAddress","WRAPPED_SOL_MINT_TOKEN_PROGRAM","createSolPoolForAuthority","findVaultAddress","LAMPORTS_PER_SOL","depositSolPoolForAuthority","generateNullifier","loadReceiverKeypair","getAddressEncoder","generateProof","getBalance","transferForAuthority"],"mappings":"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","file":"transfer.test.js","sourcesContent":["import { getAddressEncoder } from '@solana/kit';\nimport test from 'ava';\nimport {\n AssetType,\n findPoolAddress,\n findVaultAddress,\n generateNullifier,\n generateProof,\n MerkleTree,\n} from '../src';\nimport { LAMPORTS_PER_SOL, WRAPPED_SOL_MINT_TOKEN_PROGRAM } from './_constants';\nimport {\n createDefaultSolanaClient,\n createSolPoolForAuthority,\n depositSolPoolForAuthority,\n getBalance,\n loadReceiverKeypair,\n loadRelayerKeypair,\n transferForAuthority,\n} from './_setup';\n\ntest('it transfers authority deposited SOL', async (t) => {\n const client = createDefaultSolanaClient();\n const relayer = await loadRelayerKeypair();\n const merkleTree = new MerkleTree(20);\n await merkleTree.initialize();\n\n // _ since we are doing sol, we hardcode the assetType as such\n const SOL_ASSET_TYPE = AssetType.Sol;\n\n // find pool address\n const [pool] = await findPoolAddress({\n mint: WRAPPED_SOL_MINT_TOKEN_PROGRAM,\n assetType: SOL_ASSET_TYPE,\n });\n\n // create pool\n console.log('calling init pool');\n await createSolPoolForAuthority(client);\n\n // find vault address\n const [vault] = await findVaultAddress({ pool });\n\n // deposit\n console.log('calling deposit into pool');\n const depositAmount = BigInt(10) * LAMPORTS_PER_SOL;\n const { secret, nullifier } = await depositSolPoolForAuthority(\n client,\n depositAmount,\n SOL_ASSET_TYPE,\n merkleTree // Pass the merkle tree to handle root computation\n );\n\n // Tree already updated inside depositSolPoolForAuthority\n const localRoot = merkleTree.root();\n\n // Get merkle proof for the commitment (leaf index 0 since it's the first deposit)\n const leafIndex = 0;\n const { pathElements, pathIndices } = merkleTree.getProof(leafIndex);\n\n // Use LOCAL root (tree is off-chain now)\n const root = localRoot;\n\n // Generate nullifier hash\n const nullifierHash = await generateNullifier(nullifier, pool);\n\n // Get recipient address\n const recipient = await loadReceiverKeypair();\n const recipientBytes = getAddressEncoder().encode(recipient.address);\n\n // For now, use authority as relayer (can be changed later)\n const relayerBytes = getAddressEncoder().encode(relayer.address);\n\n // Generate zero-knowledge proof\n // In the new design:\n // - relayer_fee: what the relayer gets (user chooses)\n // - recipient_amount: what goes to recipient BEFORE protocol fee (proven by circuit)\n // - circuit proves: depositAmount >= relayer_fee + recipient_amount\n const relayerFee = 0; // No relayer fee for this test\n const recipientAmount = depositAmount; // Withdraw full deposit amount\n\n console.log('Generating ZK proof...');\n const { proofData, publicInputs } = await generateProof({\n secret,\n nullifier,\n amount: depositAmount, // Private input - what was deposited\n pathElements,\n pathIndices,\n recipient: Uint8Array.from(recipientBytes),\n relayer: Uint8Array.from(relayerBytes),\n fee: relayerFee, // Public input - must match instruction parameter\n refund: recipientAmount, // Public input - must match instruction parameter\n root: Uint8Array.from(root),\n poolAddress: pool,\n });\n console.log('ZK proof generated successfully');\n\n // Check vault balance before transfer\n const balanceBefore = await getBalance(client, vault);\n console.log('Vault balance before transfer:', balanceBefore);\n\n // Perform the transfer (withdrawal)\n console.log('calling transfer tx');\n await transferForAuthority(client, {\n relayerFee,\n recipientAmount,\n nullifierHash,\n publicInputs,\n proofData,\n assetType: SOL_ASSET_TYPE,\n mint: WRAPPED_SOL_MINT_TOKEN_PROGRAM,\n });\n\n // Check vault balance after transfer\n const balanceAfter = await getBalance(client, vault);\n console.log('Vault balance after transfer:', balanceAfter);\n\n // Calculate expected amounts\n // Protocol fee is 15bps of recipient_amount\n const protocolFee = (BigInt(recipientAmount) * 15n) / 10000n;\n const finalRecipientAmount = BigInt(recipientAmount) - protocolFee;\n const totalWithdrawn = BigInt(recipientAmount) + BigInt(relayerFee);\n\n console.log('Protocol fee:', protocolFee);\n console.log('Final recipient amount:', finalRecipientAmount);\n console.log('Total withdrawn from vault:', totalWithdrawn);\n\n // Verify vault balance decreased by the total withdrawn amount\n t.truthy(BigInt(balanceBefore) - BigInt(balanceAfter) >= totalWithdrawn);\n\n // Verify recipient received the funds (after protocol fee)\n const recipientBalance = await getBalance(client, recipient.address);\n console.log('Recipient balance:', recipientBalance);\n t.truthy(BigInt(recipientBalance) >= finalRecipientAmount);\n});\n"]}
|