@veilo/sdk-core 0.4.0 → 0.6.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.
- package/LICENSE +15 -0
- package/README.md +449 -1243
- package/accounts.d.ts +2 -0
- package/accounts.js +3 -0
- package/cloak.d.ts +2 -0
- package/cloak.js +3 -0
- package/config.d.ts +2 -2
- package/config.js +2 -3
- package/dist/cjs/accounts/admin.d.ts +84 -0
- package/dist/cjs/accounts/admin.js +208 -0
- package/dist/cjs/accounts/errors.d.ts +6 -0
- package/dist/cjs/accounts/errors.js +98 -0
- package/dist/cjs/accounts/index.d.ts +4 -0
- package/dist/cjs/accounts/index.js +20 -0
- package/dist/cjs/accounts/pdas.d.ts +23 -0
- package/dist/cjs/accounts/pdas.js +44 -0
- package/dist/cjs/accounts/queries.d.ts +41 -0
- package/dist/cjs/accounts/queries.js +95 -0
- package/dist/cjs/client.d.ts +2 -407
- package/dist/cjs/client.js +6 -938
- package/dist/cjs/cloak/client.d.ts +28 -0
- package/dist/cjs/cloak/client.js +68 -0
- package/dist/cjs/cloak/errors.d.ts +13 -0
- package/dist/cjs/cloak/errors.js +25 -0
- package/dist/cjs/cloak/helpers.d.ts +6 -0
- package/dist/cjs/cloak/helpers.js +35 -0
- package/dist/cjs/cloak/index.d.ts +6 -0
- package/dist/cjs/cloak/index.js +24 -0
- package/dist/cjs/cloak/polling.d.ts +7 -0
- package/dist/cjs/cloak/polling.js +66 -0
- package/dist/cjs/cloak/transport.d.ts +15 -0
- package/dist/cjs/cloak/transport.js +119 -0
- package/dist/cjs/cloak/types.d.ts +188 -0
- package/dist/cjs/cloak/types.js +5 -0
- package/dist/cjs/cloak.d.ts +1 -0
- package/dist/cjs/cloak.js +18 -0
- package/dist/cjs/compactNote.d.ts +21 -0
- package/dist/cjs/compactNote.js +31 -7
- package/dist/cjs/events/index.d.ts +6 -0
- package/dist/cjs/events/index.js +22 -0
- package/dist/cjs/events/parsing.d.ts +25 -0
- package/dist/cjs/events/parsing.js +158 -0
- package/dist/cjs/events/position.d.ts +26 -0
- package/dist/cjs/events/position.js +53 -0
- package/dist/cjs/events/recovery.d.ts +87 -0
- package/dist/cjs/events/recovery.js +281 -0
- package/dist/cjs/events/scanning.d.ts +35 -0
- package/dist/cjs/events/scanning.js +98 -0
- package/dist/cjs/events/tree.d.ts +27 -0
- package/dist/cjs/events/tree.js +63 -0
- package/dist/cjs/events/types.d.ts +39 -0
- package/dist/cjs/events.d.ts +1 -77
- package/dist/cjs/events.js +6 -154
- package/dist/cjs/identity/encoding.d.ts +9 -0
- package/dist/cjs/identity/encoding.js +85 -0
- package/dist/cjs/identity/index.d.ts +4 -0
- package/dist/cjs/identity/index.js +20 -0
- package/dist/cjs/identity/noteKey.d.ts +33 -0
- package/dist/cjs/identity/noteKey.js +97 -0
- package/dist/cjs/identity/spending.d.ts +18 -0
- package/dist/cjs/identity/spending.js +46 -0
- package/dist/cjs/identity/viewKey.d.ts +38 -0
- package/dist/cjs/identity/viewKey.js +105 -0
- package/dist/cjs/idl/index.d.ts +18 -0
- package/dist/cjs/idl/index.js +24 -0
- package/dist/cjs/idl/privacy_pool.json +9907 -9907
- package/dist/cjs/idl/privacy_pool_legacy.js +3307 -0
- package/dist/cjs/idl/privacy_pool_legacy.json +2302 -0
- package/dist/cjs/idl/privacy_pool_legacy2.d.ts +5 -0
- package/dist/cjs/idl/privacy_pool_legacy2.js +3397 -0
- package/dist/cjs/idl/privacy_pool_legacy2.json +2376 -0
- package/dist/cjs/index.d.ts +9 -3
- package/dist/cjs/index.js +15 -2
- package/dist/cjs/notes/amount.d.ts +2 -0
- package/dist/cjs/notes/amount.js +21 -0
- package/dist/cjs/notes/encryption.d.ts +41 -0
- package/dist/cjs/notes/encryption.js +75 -0
- package/dist/cjs/notes/index.d.ts +8 -0
- package/dist/cjs/notes/index.js +24 -0
- package/dist/cjs/notes/mailbox.d.ts +70 -0
- package/dist/cjs/notes/mailbox.js +164 -0
- package/dist/cjs/notes/model.d.ts +91 -0
- package/dist/cjs/notes/model.js +109 -0
- package/dist/cjs/notes/nullifier.d.ts +27 -0
- package/dist/cjs/notes/nullifier.js +45 -0
- package/dist/cjs/notes/recovery.d.ts +20 -0
- package/dist/cjs/notes/recovery.js +48 -0
- package/dist/cjs/notes/selection.d.ts +77 -0
- package/dist/cjs/notes/selection.js +193 -0
- package/dist/cjs/notes/spent.d.ts +60 -0
- package/dist/cjs/notes/spent.js +101 -0
- package/dist/cjs/perps/constants.d.ts +16 -0
- package/dist/cjs/perps/constants.js +52 -0
- package/dist/cjs/perps/index.d.ts +5 -0
- package/dist/cjs/perps/index.js +21 -0
- package/dist/cjs/perps/keys.d.ts +16 -0
- package/dist/cjs/perps/keys.js +43 -0
- package/dist/cjs/perps/pdas.d.ts +29 -0
- package/dist/cjs/perps/pdas.js +55 -0
- package/dist/cjs/perps/relayer.d.ts +9 -0
- package/dist/cjs/perps/relayer.js +35 -0
- package/dist/cjs/perps/types.d.ts +126 -0
- package/dist/cjs/perps/types.js +2 -0
- package/dist/cjs/positions/index.d.ts +4 -0
- package/dist/cjs/positions/index.js +20 -0
- package/dist/cjs/positions/keys.d.ts +29 -0
- package/dist/cjs/positions/keys.js +71 -0
- package/dist/cjs/positions/pdas.d.ts +15 -0
- package/dist/cjs/positions/pdas.js +54 -0
- package/dist/cjs/positions/relayer.d.ts +4 -0
- package/dist/cjs/positions/relayer.js +15 -0
- package/dist/cjs/positions/types.d.ts +97 -0
- package/dist/cjs/positions/types.js +2 -0
- package/dist/cjs/predictions/client.d.ts +41 -0
- package/dist/cjs/predictions/client.js +147 -0
- package/dist/cjs/predictions/index.d.ts +5 -0
- package/dist/cjs/predictions/index.js +21 -0
- package/dist/cjs/predictions/keys.d.ts +14 -0
- package/dist/cjs/predictions/keys.js +40 -0
- package/dist/cjs/predictions/pdas.d.ts +6 -0
- package/dist/cjs/predictions/pdas.js +13 -0
- package/dist/cjs/predictions/relayer.d.ts +3 -0
- package/dist/cjs/predictions/relayer.js +11 -0
- package/dist/cjs/predictions/types.d.ts +178 -0
- package/dist/cjs/predictions/types.js +2 -0
- package/dist/cjs/program.d.ts +2 -0
- package/dist/cjs/program.js +8 -7
- package/dist/cjs/proof.d.ts +1 -183
- package/dist/cjs/proof.js +16 -290
- package/dist/cjs/proofs/encoding.d.ts +17 -0
- package/dist/cjs/proofs/encoding.js +72 -0
- package/dist/cjs/proofs/formatting.d.ts +6 -0
- package/dist/cjs/proofs/formatting.js +34 -0
- package/dist/cjs/proofs/index.d.ts +5 -0
- package/dist/cjs/proofs/index.js +21 -0
- package/dist/cjs/proofs/swap.d.ts +87 -0
- package/dist/cjs/proofs/swap.js +144 -0
- package/dist/cjs/proofs/transaction.d.ts +28 -0
- package/dist/cjs/proofs/transaction.js +110 -0
- package/dist/cjs/proofs/types.d.ts +70 -0
- package/dist/cjs/proofs/types.js +2 -0
- package/dist/cjs/prover.d.ts +30 -4
- package/dist/cjs/prover.js +118 -49
- package/dist/cjs/relayer/api.d.ts +31 -0
- package/dist/cjs/relayer/api.js +86 -0
- package/dist/cjs/relayer/client.d.ts +73 -0
- package/dist/cjs/relayer/client.js +206 -0
- package/dist/cjs/relayer/crypto.d.ts +5 -0
- package/dist/cjs/relayer/crypto.js +26 -0
- package/dist/cjs/relayer/encoding.d.ts +2 -0
- package/dist/cjs/relayer/encoding.js +23 -0
- package/dist/cjs/relayer/errors.d.ts +7 -0
- package/dist/cjs/relayer/errors.js +17 -0
- package/dist/cjs/relayer/index.d.ts +6 -0
- package/dist/cjs/relayer/index.js +19 -0
- package/dist/cjs/relayer/internal-config.d.ts +36 -0
- package/dist/cjs/relayer/internal-config.js +9 -0
- package/dist/cjs/relayer/internal.d.ts +6 -0
- package/dist/cjs/relayer/internal.js +14 -0
- package/dist/cjs/relayer/transport.d.ts +19 -0
- package/dist/cjs/relayer/transport.js +68 -0
- package/dist/{src/relayer.d.ts → cjs/relayer/types.d.ts} +53 -96
- package/dist/cjs/relayer/types.js +5 -0
- package/dist/cjs/relayer.d.ts +1 -318
- package/dist/cjs/relayer.js +15 -254
- package/dist/cjs/shield/alt.js +8 -8
- package/dist/cjs/shield/errors.js +2 -2
- package/dist/cjs/shield/finalize.js +2 -2
- package/dist/cjs/shield/ix.d.ts +1 -1
- package/dist/cjs/shield/owner.js +9 -11
- package/dist/cjs/shield/ports.js +3 -3
- package/dist/cjs/shield/preflight.js +3 -3
- package/dist/cjs/shield/shield.js +20 -19
- package/dist/cjs/shield/types.d.ts +1 -1
- package/dist/cjs/transactions/deposit.d.ts +94 -0
- package/dist/cjs/transactions/deposit.js +234 -0
- package/dist/cjs/transactions/index.d.ts +7 -0
- package/dist/cjs/transactions/index.js +26 -0
- package/dist/cjs/transactions/swap.d.ts +71 -0
- package/dist/cjs/transactions/swap.js +184 -0
- package/dist/cjs/transactions/transact.d.ts +34 -0
- package/dist/cjs/transactions/transact.js +146 -0
- package/dist/cjs/transactions/transfer.d.ts +51 -0
- package/dist/cjs/transactions/transfer.js +106 -0
- package/dist/cjs/transactions/withdraw.d.ts +52 -0
- package/dist/cjs/transactions/withdraw.js +104 -0
- package/dist/cjs/utxo.d.ts +1 -235
- package/dist/cjs/utxo.js +15 -404
- package/dist/esm/accounts/admin.d.ts +84 -0
- package/dist/esm/accounts/admin.js +165 -0
- package/dist/esm/accounts/errors.d.ts +6 -0
- package/dist/esm/accounts/errors.js +95 -0
- package/dist/esm/accounts/index.d.ts +4 -0
- package/dist/esm/accounts/index.js +4 -0
- package/dist/esm/accounts/pdas.d.ts +23 -0
- package/dist/esm/accounts/pdas.js +38 -0
- package/dist/esm/accounts/queries.d.ts +41 -0
- package/dist/esm/accounts/queries.js +88 -0
- package/dist/esm/client.d.ts +2 -407
- package/dist/esm/client.js +3 -891
- package/dist/esm/cloak/client.d.ts +28 -0
- package/dist/esm/cloak/client.js +64 -0
- package/dist/esm/cloak/errors.d.ts +13 -0
- package/dist/esm/cloak/errors.js +21 -0
- package/dist/esm/cloak/helpers.d.ts +6 -0
- package/dist/esm/cloak/helpers.js +31 -0
- package/dist/esm/cloak/index.d.ts +6 -0
- package/dist/esm/cloak/index.js +6 -0
- package/dist/esm/cloak/polling.d.ts +7 -0
- package/dist/esm/cloak/polling.js +63 -0
- package/dist/esm/cloak/transport.d.ts +15 -0
- package/dist/esm/cloak/transport.js +115 -0
- package/dist/esm/cloak/types.d.ts +188 -0
- package/dist/esm/cloak/types.js +4 -0
- package/dist/esm/cloak.d.ts +1 -0
- package/dist/esm/cloak.js +2 -0
- package/dist/esm/compactNote.d.ts +21 -0
- package/dist/esm/compactNote.js +24 -1
- package/dist/esm/events/index.d.ts +6 -0
- package/dist/esm/events/index.js +6 -0
- package/dist/esm/events/parsing.d.ts +25 -0
- package/dist/esm/events/parsing.js +120 -0
- package/dist/esm/events/position.d.ts +26 -0
- package/dist/esm/events/position.js +48 -0
- package/dist/esm/events/recovery.d.ts +87 -0
- package/dist/esm/events/recovery.js +237 -0
- package/dist/esm/events/scanning.d.ts +35 -0
- package/dist/esm/events/scanning.js +92 -0
- package/dist/esm/events/tree.d.ts +27 -0
- package/dist/esm/events/tree.js +58 -0
- package/dist/esm/events/types.d.ts +39 -0
- package/dist/esm/events/types.js +1 -0
- package/dist/esm/events.d.ts +1 -77
- package/dist/esm/events.js +3 -129
- package/dist/esm/identity/encoding.d.ts +9 -0
- package/dist/esm/identity/encoding.js +75 -0
- package/dist/esm/identity/index.d.ts +4 -0
- package/dist/esm/identity/index.js +4 -0
- package/dist/esm/identity/noteKey.d.ts +33 -0
- package/dist/esm/identity/noteKey.js +91 -0
- package/dist/esm/identity/spending.d.ts +18 -0
- package/dist/esm/identity/spending.js +35 -0
- package/dist/esm/identity/viewKey.d.ts +38 -0
- package/dist/esm/identity/viewKey.js +96 -0
- package/dist/esm/idl/index.d.ts +18 -0
- package/dist/esm/idl/index.js +18 -0
- package/dist/esm/idl/privacy_pool.json +9907 -9907
- package/dist/esm/idl/privacy_pool_legacy.d.ts +5 -0
- package/dist/esm/idl/privacy_pool_legacy.js +3305 -0
- package/dist/esm/idl/privacy_pool_legacy.json +2302 -0
- package/dist/esm/idl/privacy_pool_legacy2.d.ts +5 -0
- package/dist/esm/idl/privacy_pool_legacy2.js +3395 -0
- package/dist/esm/idl/privacy_pool_legacy2.json +2376 -0
- package/dist/esm/index.d.ts +9 -3
- package/dist/esm/index.js +10 -3
- package/dist/esm/notes/amount.d.ts +2 -0
- package/dist/esm/notes/amount.js +18 -0
- package/dist/esm/notes/encryption.d.ts +41 -0
- package/dist/esm/notes/encryption.js +67 -0
- package/dist/esm/notes/index.d.ts +8 -0
- package/dist/esm/notes/index.js +8 -0
- package/dist/esm/notes/mailbox.d.ts +70 -0
- package/dist/esm/notes/mailbox.js +154 -0
- package/dist/esm/notes/model.d.ts +91 -0
- package/dist/esm/notes/model.js +99 -0
- package/dist/esm/notes/nullifier.d.ts +27 -0
- package/dist/esm/notes/nullifier.js +40 -0
- package/dist/esm/notes/recovery.d.ts +20 -0
- package/dist/esm/notes/recovery.js +45 -0
- package/dist/esm/notes/selection.d.ts +77 -0
- package/dist/esm/notes/selection.js +188 -0
- package/dist/esm/notes/spent.d.ts +60 -0
- package/dist/esm/notes/spent.js +96 -0
- package/dist/esm/perps/constants.d.ts +16 -0
- package/dist/esm/perps/constants.js +48 -0
- package/dist/esm/perps/index.d.ts +5 -0
- package/dist/esm/perps/index.js +5 -0
- package/dist/esm/perps/keys.d.ts +16 -0
- package/dist/esm/perps/keys.js +35 -0
- package/dist/esm/perps/pdas.d.ts +29 -0
- package/dist/esm/perps/pdas.js +47 -0
- package/dist/esm/perps/relayer.d.ts +9 -0
- package/dist/esm/perps/relayer.js +25 -0
- package/dist/esm/perps/types.d.ts +126 -0
- package/dist/esm/perps/types.js +1 -0
- package/dist/esm/positions/index.d.ts +4 -0
- package/dist/esm/positions/index.js +4 -0
- package/dist/esm/positions/keys.d.ts +29 -0
- package/dist/esm/positions/keys.js +65 -0
- package/dist/esm/positions/pdas.d.ts +15 -0
- package/dist/esm/positions/pdas.js +44 -0
- package/dist/esm/positions/relayer.d.ts +4 -0
- package/dist/esm/positions/relayer.js +10 -0
- package/dist/esm/positions/types.d.ts +97 -0
- package/dist/esm/positions/types.js +1 -0
- package/dist/esm/predictions/client.d.ts +41 -0
- package/dist/esm/predictions/client.js +141 -0
- package/dist/esm/predictions/index.d.ts +5 -0
- package/dist/esm/predictions/index.js +5 -0
- package/dist/esm/predictions/keys.d.ts +14 -0
- package/dist/esm/predictions/keys.js +33 -0
- package/dist/esm/predictions/pdas.d.ts +6 -0
- package/dist/esm/predictions/pdas.js +10 -0
- package/dist/esm/predictions/relayer.d.ts +3 -0
- package/dist/esm/predictions/relayer.js +7 -0
- package/dist/esm/predictions/types.d.ts +178 -0
- package/dist/esm/predictions/types.js +1 -0
- package/dist/esm/program.d.ts +2 -0
- package/dist/esm/program.js +4 -3
- package/dist/esm/proof.d.ts +1 -183
- package/dist/esm/proof.js +2 -281
- package/dist/esm/proofs/encoding.d.ts +17 -0
- package/dist/esm/proofs/encoding.js +68 -0
- package/dist/esm/proofs/formatting.d.ts +6 -0
- package/dist/esm/proofs/formatting.js +31 -0
- package/dist/esm/proofs/index.d.ts +5 -0
- package/dist/esm/proofs/index.js +5 -0
- package/dist/esm/proofs/swap.d.ts +87 -0
- package/dist/esm/proofs/swap.js +138 -0
- package/dist/esm/proofs/transaction.d.ts +28 -0
- package/dist/esm/proofs/transaction.js +105 -0
- package/dist/esm/proofs/types.d.ts +70 -0
- package/dist/esm/proofs/types.js +1 -0
- package/dist/esm/prover.d.ts +30 -4
- package/dist/esm/prover.js +115 -15
- package/dist/esm/relayer/api.d.ts +31 -0
- package/dist/esm/relayer/api.js +55 -0
- package/dist/esm/relayer/client.d.ts +73 -0
- package/dist/esm/relayer/client.js +199 -0
- package/dist/esm/relayer/crypto.d.ts +5 -0
- package/dist/esm/relayer/crypto.js +20 -0
- package/dist/esm/relayer/encoding.d.ts +2 -0
- package/dist/esm/relayer/encoding.js +19 -0
- package/dist/esm/relayer/errors.d.ts +7 -0
- package/dist/esm/relayer/errors.js +13 -0
- package/dist/esm/relayer/index.d.ts +6 -0
- package/dist/esm/relayer/index.js +3 -0
- package/dist/esm/relayer/internal-config.d.ts +36 -0
- package/dist/esm/relayer/internal-config.js +6 -0
- package/dist/esm/relayer/internal.d.ts +6 -0
- package/dist/esm/relayer/internal.js +10 -0
- package/dist/esm/relayer/transport.d.ts +19 -0
- package/dist/esm/relayer/transport.js +64 -0
- package/dist/esm/relayer/types.d.ts +275 -0
- package/dist/esm/relayer/types.js +4 -0
- package/dist/esm/relayer.d.ts +1 -318
- package/dist/esm/relayer.js +2 -249
- package/dist/esm/shield/alt.js +1 -1
- package/dist/esm/shield/errors.js +1 -1
- package/dist/esm/shield/finalize.js +1 -1
- package/dist/esm/shield/ix.d.ts +1 -1
- package/dist/esm/shield/owner.js +3 -5
- package/dist/esm/shield/ports.js +1 -1
- package/dist/esm/shield/preflight.js +1 -1
- package/dist/esm/shield/shield.js +4 -3
- package/dist/esm/shield/types.d.ts +1 -1
- package/dist/esm/transactions/deposit.d.ts +94 -0
- package/dist/esm/transactions/deposit.js +198 -0
- package/dist/esm/transactions/index.d.ts +7 -0
- package/dist/esm/transactions/index.js +7 -0
- package/dist/esm/transactions/swap.d.ts +71 -0
- package/dist/esm/transactions/swap.js +144 -0
- package/dist/esm/transactions/transact.d.ts +34 -0
- package/dist/esm/transactions/transact.js +110 -0
- package/dist/esm/transactions/transfer.d.ts +51 -0
- package/dist/esm/transactions/transfer.js +103 -0
- package/dist/esm/transactions/withdraw.d.ts +52 -0
- package/dist/esm/transactions/withdraw.js +101 -0
- package/dist/esm/utxo.d.ts +1 -235
- package/dist/esm/utxo.js +2 -382
- package/identity.d.ts +2 -0
- package/identity.js +3 -0
- package/idl.d.ts +2 -0
- package/idl.js +3 -0
- package/notes.d.ts +2 -0
- package/notes.js +3 -0
- package/package.json +131 -11
- package/perps.d.ts +2 -0
- package/perps.js +3 -0
- package/poseidon.d.ts +2 -2
- package/poseidon.js +2 -3
- package/positions.d.ts +2 -0
- package/positions.js +3 -0
- package/predictions.d.ts +2 -0
- package/predictions.js +3 -0
- package/proof.d.ts +2 -2
- package/proof.js +2 -3
- package/prover.d.ts +2 -2
- package/prover.js +2 -3
- package/relayer.d.ts +2 -0
- package/relayer.js +3 -0
- package/shield.d.ts +2 -2
- package/shield.js +2 -3
- package/transactions.d.ts +2 -0
- package/transactions.js +3 -0
- package/SHIELD_INTEGRATION.md +0 -143
- package/dist/src/client.d.ts +0 -407
- package/dist/src/client.js +0 -951
- package/dist/src/compactNote.d.ts +0 -107
- package/dist/src/compactNote.js +0 -167
- package/dist/src/config.d.ts +0 -82
- package/dist/src/config.js +0 -57
- package/dist/src/events.d.ts +0 -77
- package/dist/src/events.js +0 -167
- package/dist/src/idl/privacy_pool.js +0 -15218
- package/dist/src/index.d.ts +0 -16
- package/dist/src/index.js +0 -67
- package/dist/src/merkle.d.ts +0 -77
- package/dist/src/merkle.js +0 -156
- package/dist/src/poseidon.d.ts +0 -29
- package/dist/src/poseidon.js +0 -100
- package/dist/src/program.d.ts +0 -37
- package/dist/src/program.js +0 -61
- package/dist/src/proof.d.ts +0 -183
- package/dist/src/proof.js +0 -292
- package/dist/src/prover.d.ts +0 -54
- package/dist/src/prover.js +0 -112
- package/dist/src/random.d.ts +0 -16
- package/dist/src/random.js +0 -28
- package/dist/src/relayer.js +0 -257
- package/dist/src/retry.d.ts +0 -32
- package/dist/src/retry.js +0 -75
- package/dist/src/shield/alt.d.ts +0 -87
- package/dist/src/shield/alt.js +0 -194
- package/dist/src/shield/computeBudget.d.ts +0 -61
- package/dist/src/shield/computeBudget.js +0 -64
- package/dist/src/shield/errors.d.ts +0 -58
- package/dist/src/shield/errors.js +0 -121
- package/dist/src/shield/finalize.d.ts +0 -45
- package/dist/src/shield/finalize.js +0 -119
- package/dist/src/shield/index.d.ts +0 -35
- package/dist/src/shield/index.js +0 -68
- package/dist/src/shield/ix.d.ts +0 -54
- package/dist/src/shield/ix.js +0 -119
- package/dist/src/shield/owner.d.ts +0 -36
- package/dist/src/shield/owner.js +0 -126
- package/dist/src/shield/ports.d.ts +0 -43
- package/dist/src/shield/ports.js +0 -153
- package/dist/src/shield/preflight.d.ts +0 -30
- package/dist/src/shield/preflight.js +0 -154
- package/dist/src/shield/shield.d.ts +0 -68
- package/dist/src/shield/shield.js +0 -499
- package/dist/src/shield/types.d.ts +0 -202
- package/dist/src/utxo.d.ts +0 -235
- package/dist/src/utxo.js +0 -407
- package/dist/tests/compact-note.test.d.ts +0 -1
- package/dist/tests/compact-note.test.js +0 -173
- package/dist/tests/config.test.d.ts +0 -1
- package/dist/tests/config.test.js +0 -102
- package/dist/tests/edge-cases.test.d.ts +0 -1
- package/dist/tests/edge-cases.test.js +0 -220
- package/dist/tests/encryption.test.d.ts +0 -1
- package/dist/tests/encryption.test.js +0 -215
- package/dist/tests/events.test.d.ts +0 -1
- package/dist/tests/events.test.js +0 -78
- package/dist/tests/multi-tree.test.d.ts +0 -1
- package/dist/tests/multi-tree.test.js +0 -405
- package/dist/tests/pda.test.d.ts +0 -1
- package/dist/tests/pda.test.js +0 -229
- package/dist/tests/poseidon-builder-parity.test.d.ts +0 -1
- package/dist/tests/poseidon-builder-parity.test.js +0 -72
- package/dist/tests/poseidon.test.d.ts +0 -1
- package/dist/tests/poseidon.test.js +0 -142
- package/dist/tests/proof.test.d.ts +0 -1
- package/dist/tests/proof.test.js +0 -296
- package/dist/tests/relayer.test.d.ts +0 -1
- package/dist/tests/relayer.test.js +0 -271
- package/dist/tests/sdk.integration.test.d.ts +0 -1
- package/dist/tests/sdk.integration.test.js +0 -330
- package/dist/tests/shield-owner.test.d.ts +0 -1
- package/dist/tests/shield-owner.test.js +0 -89
- package/dist/tests/shield-preflight.test.d.ts +0 -1
- package/dist/tests/shield-preflight.test.js +0 -87
- package/dist/tests/shield-realproof.test.d.ts +0 -1
- package/dist/tests/shield-realproof.test.js +0 -272
- package/dist/tests/shield.test.d.ts +0 -1
- package/dist/tests/shield.test.js +0 -403
- package/dist/tests/utxo.test.d.ts +0 -1
- package/dist/tests/utxo.test.js +0 -140
- /package/dist/{src/shield → cjs/events}/types.js +0 -0
- /package/dist/{src/idl/privacy_pool.d.ts → cjs/idl/privacy_pool_legacy.d.ts} +0 -0
|
@@ -44,6 +44,21 @@ export type CompactNoteCipher = {
|
|
|
44
44
|
/** 1-byte scan filter. */
|
|
45
45
|
viewTag: number;
|
|
46
46
|
};
|
|
47
|
+
/** The optional pair of compact note ciphers carried by `transact` instructions. */
|
|
48
|
+
export type NoteCiphers = {
|
|
49
|
+
note0EphemeralKey: Uint8Array;
|
|
50
|
+
note0Encrypted: Uint8Array;
|
|
51
|
+
note0ViewTag: number;
|
|
52
|
+
note1EphemeralKey: Uint8Array;
|
|
53
|
+
note1Encrypted: Uint8Array;
|
|
54
|
+
note1ViewTag: number;
|
|
55
|
+
};
|
|
56
|
+
/** Plaintext note material needed to create one compact on-chain cipher. */
|
|
57
|
+
export type NoteCipherInput = {
|
|
58
|
+
recipientWalletPubkey: Uint8Array;
|
|
59
|
+
blinding: Uint8Array;
|
|
60
|
+
amount: bigint;
|
|
61
|
+
};
|
|
47
62
|
/**
|
|
48
63
|
* Test-only determinism hook. NOT part of the public contract — it exists so
|
|
49
64
|
* golden vectors can pin exact bytes against the sibling implementations, which
|
|
@@ -105,3 +120,9 @@ export declare function matchesViewTag(walletSecretKey: Uint8Array, ephemeralPub
|
|
|
105
120
|
export declare function toX25519Private(walletSecretKey: Uint8Array): Uint8Array;
|
|
106
121
|
/** The all-zero cipher the program treats as "no note here". */
|
|
107
122
|
export declare function emptyNoteCipher(): CompactNoteCipher;
|
|
123
|
+
/**
|
|
124
|
+
* Build the two-note payload accepted by `transact` and `transact_swap`.
|
|
125
|
+
* A missing side is encoded with the program's all-zero sentinel. If both
|
|
126
|
+
* sides are missing, `null` is returned so Anchor encodes `Option::None`.
|
|
127
|
+
*/
|
|
128
|
+
export declare function createNoteCiphers(note0: NoteCipherInput | null, note1: NoteCipherInput | null): NoteCiphers | null;
|
package/dist/cjs/compactNote.js
CHANGED
|
@@ -9,8 +9,9 @@ exports.decryptCompactNoteCipher = decryptCompactNoteCipher;
|
|
|
9
9
|
exports.matchesViewTag = matchesViewTag;
|
|
10
10
|
exports.toX25519Private = toX25519Private;
|
|
11
11
|
exports.emptyNoteCipher = emptyNoteCipher;
|
|
12
|
+
exports.createNoteCiphers = createNoteCiphers;
|
|
12
13
|
const tweetnacl_1 = __importDefault(require("tweetnacl"));
|
|
13
|
-
const
|
|
14
|
+
const mailbox_js_1 = require("./notes/mailbox.js");
|
|
14
15
|
const random_js_1 = require("./random.js");
|
|
15
16
|
/**
|
|
16
17
|
* Compact note ciphers — the 80-byte payload carried inside the on-chain
|
|
@@ -82,7 +83,7 @@ function createCompactNoteCipher(recipientWalletPubkey, blinding, amount,
|
|
|
82
83
|
const ephemeralSeed = __det?.ephemeralSeed ?? (0, random_js_1.randomBytes)(32);
|
|
83
84
|
const ephemeralPublicKey = tweetnacl_1.default.sign.keyPair.fromSeed(ephemeralSeed).publicKey;
|
|
84
85
|
const sharedSecret = deriveSharedSecret(ephemeralSeed, recipientWalletPubkey);
|
|
85
|
-
const key = (0,
|
|
86
|
+
const key = (0, mailbox_js_1.kdfSHA512_256)(sharedSecret);
|
|
86
87
|
const plaintext = new Uint8Array(COMPACT_PLAINTEXT_LENGTH);
|
|
87
88
|
plaintext.set(blinding.slice(0, 32), 0);
|
|
88
89
|
let amt = amount;
|
|
@@ -114,9 +115,9 @@ function decryptCompactNoteCipher(walletSecretKey, ephemeralPublicKey, compactBl
|
|
|
114
115
|
return null;
|
|
115
116
|
const sharedSecret = precomputed?.sharedSecret ??
|
|
116
117
|
(precomputed?.x25519Private
|
|
117
|
-
? tweetnacl_1.default.scalarMult(precomputed.x25519Private, (0,
|
|
118
|
+
? tweetnacl_1.default.scalarMult(precomputed.x25519Private, (0, mailbox_js_1.ed25519PublicKeyToX25519)(ephemeralPublicKey))
|
|
118
119
|
: deriveSharedSecret(walletSecretKey, ephemeralPublicKey));
|
|
119
|
-
const key = (0,
|
|
120
|
+
const key = (0, mailbox_js_1.kdfSHA512_256)(sharedSecret);
|
|
120
121
|
const nonce = compactBlob.slice(0, NONCE_LENGTH);
|
|
121
122
|
const encrypted = compactBlob.slice(NONCE_LENGTH);
|
|
122
123
|
const plaintext = tweetnacl_1.default.secretbox.open(encrypted, nonce, key);
|
|
@@ -138,7 +139,7 @@ function decryptCompactNoteCipher(walletSecretKey, ephemeralPublicKey, compactBl
|
|
|
138
139
|
*/
|
|
139
140
|
function matchesViewTag(walletSecretKey, ephemeralPublicKey, viewTag, precomputed) {
|
|
140
141
|
const sharedSecret = precomputed?.x25519Private
|
|
141
|
-
? tweetnacl_1.default.scalarMult(precomputed.x25519Private, (0,
|
|
142
|
+
? tweetnacl_1.default.scalarMult(precomputed.x25519Private, (0, mailbox_js_1.ed25519PublicKeyToX25519)(ephemeralPublicKey))
|
|
142
143
|
: deriveSharedSecret(walletSecretKey, ephemeralPublicKey);
|
|
143
144
|
return { matches: tweetnacl_1.default.hash(sharedSecret)[0] === viewTag, sharedSecret };
|
|
144
145
|
}
|
|
@@ -147,7 +148,7 @@ function matchesViewTag(walletSecretKey, ephemeralPublicKey, viewTag, precompute
|
|
|
147
148
|
* across a scan loop.
|
|
148
149
|
*/
|
|
149
150
|
function toX25519Private(walletSecretKey) {
|
|
150
|
-
return (0,
|
|
151
|
+
return (0, mailbox_js_1.ed25519SeedToX25519Private)(seedOf(walletSecretKey));
|
|
151
152
|
}
|
|
152
153
|
/** The all-zero cipher the program treats as "no note here". */
|
|
153
154
|
function emptyNoteCipher() {
|
|
@@ -157,11 +158,34 @@ function emptyNoteCipher() {
|
|
|
157
158
|
viewTag: 0,
|
|
158
159
|
};
|
|
159
160
|
}
|
|
161
|
+
/**
|
|
162
|
+
* Build the two-note payload accepted by `transact` and `transact_swap`.
|
|
163
|
+
* A missing side is encoded with the program's all-zero sentinel. If both
|
|
164
|
+
* sides are missing, `null` is returned so Anchor encodes `Option::None`.
|
|
165
|
+
*/
|
|
166
|
+
function createNoteCiphers(note0, note1) {
|
|
167
|
+
if (!note0 && !note1)
|
|
168
|
+
return null;
|
|
169
|
+
const cipher0 = note0
|
|
170
|
+
? createCompactNoteCipher(note0.recipientWalletPubkey, note0.blinding, note0.amount)
|
|
171
|
+
: emptyNoteCipher();
|
|
172
|
+
const cipher1 = note1
|
|
173
|
+
? createCompactNoteCipher(note1.recipientWalletPubkey, note1.blinding, note1.amount)
|
|
174
|
+
: emptyNoteCipher();
|
|
175
|
+
return {
|
|
176
|
+
note0EphemeralKey: cipher0.ephemeralPublicKey,
|
|
177
|
+
note0Encrypted: cipher0.compactBlob,
|
|
178
|
+
note0ViewTag: cipher0.viewTag,
|
|
179
|
+
note1EphemeralKey: cipher1.ephemeralPublicKey,
|
|
180
|
+
note1Encrypted: cipher1.compactBlob,
|
|
181
|
+
note1ViewTag: cipher1.viewTag,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
160
184
|
// -- internal -----------------------------------------------------------------
|
|
161
185
|
/** Accept either a 32-byte Ed25519 seed or a 64-byte secret key, as the siblings do. */
|
|
162
186
|
function seedOf(secretKey) {
|
|
163
187
|
return secretKey.length === 64 ? secretKey.slice(0, 32) : secretKey;
|
|
164
188
|
}
|
|
165
189
|
function deriveSharedSecret(mySecretKey, theirEd25519PublicKey) {
|
|
166
|
-
return tweetnacl_1.default.scalarMult((0,
|
|
190
|
+
return tweetnacl_1.default.scalarMult((0, mailbox_js_1.ed25519SeedToX25519Private)(seedOf(mySecretKey)), (0, mailbox_js_1.ed25519PublicKeyToX25519)(theirEd25519PublicKey));
|
|
167
191
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./types.js"), exports);
|
|
18
|
+
__exportStar(require("./parsing.js"), exports);
|
|
19
|
+
__exportStar(require("./position.js"), exports);
|
|
20
|
+
__exportStar(require("./recovery.js"), exports);
|
|
21
|
+
__exportStar(require("./scanning.js"), exports);
|
|
22
|
+
__exportStar(require("./tree.js"), exports);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { PublicKey } from "@solana/web3.js";
|
|
2
|
+
import { type VersionedPrivacyPoolIdl } from "../idl/index.js";
|
|
3
|
+
import type { CommitmentEvent, NullifierSpentEvent, ParsedVeiloEvent } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Decode logs using the current, legacy, and legacy-2 IDLs.
|
|
6
|
+
*
|
|
7
|
+
* IDLs are evaluated in the relayer's current/legacy/legacy-2 order. Anchor's
|
|
8
|
+
* Borsh decoder accepts trailing bytes, however, so every successful parse is
|
|
9
|
+
* considered and the richest result wins. That preserves the compact fields
|
|
10
|
+
* in legacy-2 events instead of misclassifying them as the shorter legacy form.
|
|
11
|
+
* Ties retain the relayer's order.
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseVeiloEventsWithFallback(logMessages: readonly string[] | null | undefined, programId: PublicKey, idls?: readonly VersionedPrivacyPoolIdl[]): ParsedVeiloEvent[];
|
|
14
|
+
export declare function parseCommitmentEventsFromLogs(params: {
|
|
15
|
+
logMessages: readonly string[] | null | undefined;
|
|
16
|
+
programId: PublicKey;
|
|
17
|
+
txSignature: string;
|
|
18
|
+
slot: number;
|
|
19
|
+
}): CommitmentEvent[];
|
|
20
|
+
export declare function parseNullifierEventsFromLogs(params: {
|
|
21
|
+
logMessages: readonly string[] | null | undefined;
|
|
22
|
+
programId: PublicKey;
|
|
23
|
+
txSignature: string;
|
|
24
|
+
slot: number;
|
|
25
|
+
}): NullifierSpentEvent[];
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.parseVeiloEventsWithFallback = parseVeiloEventsWithFallback;
|
|
37
|
+
exports.parseCommitmentEventsFromLogs = parseCommitmentEventsFromLogs;
|
|
38
|
+
exports.parseNullifierEventsFromLogs = parseNullifierEventsFromLogs;
|
|
39
|
+
const anchor = __importStar(require("@coral-xyz/anchor"));
|
|
40
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
41
|
+
const index_js_1 = require("../idl/index.js");
|
|
42
|
+
/**
|
|
43
|
+
* Decode logs using the current, legacy, and legacy-2 IDLs.
|
|
44
|
+
*
|
|
45
|
+
* IDLs are evaluated in the relayer's current/legacy/legacy-2 order. Anchor's
|
|
46
|
+
* Borsh decoder accepts trailing bytes, however, so every successful parse is
|
|
47
|
+
* considered and the richest result wins. That preserves the compact fields
|
|
48
|
+
* in legacy-2 events instead of misclassifying them as the shorter legacy form.
|
|
49
|
+
* Ties retain the relayer's order.
|
|
50
|
+
*/
|
|
51
|
+
function parseVeiloEventsWithFallback(logMessages, programId, idls = index_js_1.PRIVACY_POOL_IDLS) {
|
|
52
|
+
if (!logMessages?.length)
|
|
53
|
+
return [];
|
|
54
|
+
let best = [];
|
|
55
|
+
let bestScore = -1;
|
|
56
|
+
for (const candidate of idls) {
|
|
57
|
+
try {
|
|
58
|
+
const parser = new anchor.EventParser(programId, new anchor.BorshCoder(candidate.idl));
|
|
59
|
+
const parsed = Array.from(parser.parseLogs([...logMessages])).map((event) => ({
|
|
60
|
+
name: event.name,
|
|
61
|
+
data: event.data,
|
|
62
|
+
idlVersion: candidate.version,
|
|
63
|
+
}));
|
|
64
|
+
const score = parsed.reduce((total, event) => total + decodedFieldCount(event.data), 0);
|
|
65
|
+
if (score > bestScore) {
|
|
66
|
+
best = parsed;
|
|
67
|
+
bestScore = score;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// The discriminator is shared while historical payload lengths differ.
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return best;
|
|
75
|
+
}
|
|
76
|
+
function parseCommitmentEventsFromLogs(params) {
|
|
77
|
+
const { logMessages, programId, txSignature, slot } = params;
|
|
78
|
+
const out = [];
|
|
79
|
+
for (const event of parseVeiloEventsWithFallback(logMessages, programId)) {
|
|
80
|
+
if (event.name.toLowerCase() !== "commitmentevent")
|
|
81
|
+
continue;
|
|
82
|
+
const data = event.data;
|
|
83
|
+
const mintAddress = toPublicKey(field(data, "mintAddress", "mint_address"));
|
|
84
|
+
const ephemeralPublicKey = optionalBytes(field(data, "ephemeralPublicKey", "ephemeral_public_key"));
|
|
85
|
+
const encryptedBlob = optionalBytes(field(data, "encryptedBlob", "encrypted_blob"));
|
|
86
|
+
const rawViewTag = field(data, "viewTag", "view_tag");
|
|
87
|
+
out.push({
|
|
88
|
+
commitment: toBytes(field(data, "commitment"), 32, "commitment"),
|
|
89
|
+
leafIndex: toSafeNumber(field(data, "leafIndex", "leaf_index"), "leafIndex"),
|
|
90
|
+
newRoot: toBytes(field(data, "newRoot", "new_root"), 32, "newRoot"),
|
|
91
|
+
timestamp: toSafeNumber(field(data, "timestamp"), "timestamp"),
|
|
92
|
+
mintAddress,
|
|
93
|
+
treeId: toSafeNumber(field(data, "treeId", "tree_id"), "treeId"),
|
|
94
|
+
txSignature,
|
|
95
|
+
slot,
|
|
96
|
+
...(ephemeralPublicKey ? { ephemeralPublicKey } : {}),
|
|
97
|
+
...(encryptedBlob ? { encryptedBlob } : {}),
|
|
98
|
+
...(rawViewTag !== undefined
|
|
99
|
+
? { viewTag: toSafeNumber(rawViewTag, "viewTag") }
|
|
100
|
+
: {}),
|
|
101
|
+
source: "emitted",
|
|
102
|
+
idlVersion: event.idlVersion,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
return out;
|
|
106
|
+
}
|
|
107
|
+
function parseNullifierEventsFromLogs(params) {
|
|
108
|
+
const { logMessages, programId, txSignature, slot } = params;
|
|
109
|
+
const out = [];
|
|
110
|
+
for (const event of parseVeiloEventsWithFallback(logMessages, programId)) {
|
|
111
|
+
if (event.name.toLowerCase() !== "nullifierspent")
|
|
112
|
+
continue;
|
|
113
|
+
const data = event.data;
|
|
114
|
+
out.push({
|
|
115
|
+
nullifier: toBytes(field(data, "nullifier"), 32, "nullifier"),
|
|
116
|
+
timestamp: toSafeNumber(field(data, "timestamp"), "timestamp"),
|
|
117
|
+
mintAddress: toPublicKey(field(data, "mintAddress", "mint_address")),
|
|
118
|
+
treeId: toSafeNumber(field(data, "treeId", "tree_id"), "treeId"),
|
|
119
|
+
txSignature,
|
|
120
|
+
slot,
|
|
121
|
+
idlVersion: event.idlVersion,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
return out;
|
|
125
|
+
}
|
|
126
|
+
function field(data, camel, snake) {
|
|
127
|
+
return data[camel] ?? (snake ? data[snake] : undefined);
|
|
128
|
+
}
|
|
129
|
+
function optionalBytes(value) {
|
|
130
|
+
return value === undefined || value === null
|
|
131
|
+
? undefined
|
|
132
|
+
: new Uint8Array(value);
|
|
133
|
+
}
|
|
134
|
+
function decodedFieldCount(value) {
|
|
135
|
+
return value && typeof value === "object" ? Object.keys(value).length : 0;
|
|
136
|
+
}
|
|
137
|
+
function toBytes(value, length, label) {
|
|
138
|
+
const bytes = new Uint8Array(value);
|
|
139
|
+
if (bytes.length !== length) {
|
|
140
|
+
throw new Error(`${label} must be ${length} bytes, got ${bytes.length}`);
|
|
141
|
+
}
|
|
142
|
+
return bytes;
|
|
143
|
+
}
|
|
144
|
+
function toPublicKey(value) {
|
|
145
|
+
if (value instanceof web3_js_1.PublicKey)
|
|
146
|
+
return value;
|
|
147
|
+
return new web3_js_1.PublicKey(value);
|
|
148
|
+
}
|
|
149
|
+
function toSafeNumber(value, label) {
|
|
150
|
+
if (value === undefined || value === null) {
|
|
151
|
+
throw new Error(`Missing ${label} in decoded event`);
|
|
152
|
+
}
|
|
153
|
+
const numeric = typeof value === "number" ? value : Number(value);
|
|
154
|
+
if (!Number.isSafeInteger(numeric)) {
|
|
155
|
+
throw new Error(`${label} is outside JavaScript's safe integer range`);
|
|
156
|
+
}
|
|
157
|
+
return numeric;
|
|
158
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Idl, Program } from "@coral-xyz/anchor";
|
|
2
|
+
import { PublicKey } from "@solana/web3.js";
|
|
3
|
+
import type { CommitmentEvent } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Privacy-pool mints copied from the relayer's global position-tree classifier.
|
|
6
|
+
* Position commitments use non-pool destination mints at the same tree ID.
|
|
7
|
+
*/
|
|
8
|
+
export declare const POSITION_TREE_POOL_MINTS: readonly PublicKey[];
|
|
9
|
+
export declare function isGlobalPositionCommitment(event: CommitmentEvent): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Rebuild the one global position tree shared across every position mint.
|
|
12
|
+
* This mirrors the relayer: scan all mints for the position tree ID, then drop
|
|
13
|
+
* normal privacy-pool mint events before sorting by the global leaf index.
|
|
14
|
+
*/
|
|
15
|
+
export declare function buildGlobalPositionTreeFromEvents<T extends Idl>(params: {
|
|
16
|
+
program: Program<T>;
|
|
17
|
+
positionTreeId?: number;
|
|
18
|
+
depth?: number;
|
|
19
|
+
additionalEvents?: readonly CommitmentEvent[];
|
|
20
|
+
includeProtectedEvents?: boolean;
|
|
21
|
+
strictLeafIndices?: boolean;
|
|
22
|
+
}): Promise<{
|
|
23
|
+
tree: import("../merkle.js").MerkleTree;
|
|
24
|
+
events: CommitmentEvent[];
|
|
25
|
+
latestSignature: string;
|
|
26
|
+
}>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POSITION_TREE_POOL_MINTS = void 0;
|
|
4
|
+
exports.isGlobalPositionCommitment = isGlobalPositionCommitment;
|
|
5
|
+
exports.buildGlobalPositionTreeFromEvents = buildGlobalPositionTreeFromEvents;
|
|
6
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
7
|
+
const recovery_js_1 = require("./recovery.js");
|
|
8
|
+
const scanning_js_1 = require("./scanning.js");
|
|
9
|
+
const tree_js_1 = require("./tree.js");
|
|
10
|
+
/**
|
|
11
|
+
* Privacy-pool mints copied from the relayer's global position-tree classifier.
|
|
12
|
+
* Position commitments use non-pool destination mints at the same tree ID.
|
|
13
|
+
*/
|
|
14
|
+
exports.POSITION_TREE_POOL_MINTS = [
|
|
15
|
+
web3_js_1.PublicKey.default,
|
|
16
|
+
new web3_js_1.PublicKey("So11111111111111111111111111111111111111112"),
|
|
17
|
+
new web3_js_1.PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),
|
|
18
|
+
new web3_js_1.PublicKey("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),
|
|
19
|
+
new web3_js_1.PublicKey("USD1ttGY1N17NEEHLmELoaybftRBUSErhqYiQzvEmuB"),
|
|
20
|
+
new web3_js_1.PublicKey("JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN"),
|
|
21
|
+
new web3_js_1.PublicKey("ARXwZkNAtzPfdcoqQiduJn8EPv9fKiDfGn2KyggyDrFs"),
|
|
22
|
+
];
|
|
23
|
+
const POOL_MINTS = new Set(exports.POSITION_TREE_POOL_MINTS.map((mint) => mint.toBase58()));
|
|
24
|
+
function isGlobalPositionCommitment(event) {
|
|
25
|
+
return !POOL_MINTS.has(event.mintAddress.toBase58());
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Rebuild the one global position tree shared across every position mint.
|
|
29
|
+
* This mirrors the relayer: scan all mints for the position tree ID, then drop
|
|
30
|
+
* normal privacy-pool mint events before sorting by the global leaf index.
|
|
31
|
+
*/
|
|
32
|
+
async function buildGlobalPositionTreeFromEvents(params) {
|
|
33
|
+
const { program, positionTreeId = 0, depth = 22, additionalEvents = [], includeProtectedEvents = true, strictLeafIndices = true, } = params;
|
|
34
|
+
const emitted = await (0, scanning_js_1.scanAllCommitmentEvents)({ program });
|
|
35
|
+
const protectedEvents = includeProtectedEvents
|
|
36
|
+
? (0, recovery_js_1.getAllProtectedCommitmentEvents)()
|
|
37
|
+
: [];
|
|
38
|
+
const events = (0, tree_js_1.dedupeCommitmentEvents)([
|
|
39
|
+
...emitted,
|
|
40
|
+
...additionalEvents,
|
|
41
|
+
...protectedEvents,
|
|
42
|
+
])
|
|
43
|
+
.filter((event) => event.treeId === positionTreeId && isGlobalPositionCommitment(event))
|
|
44
|
+
.sort((a, b) => a.leafIndex - b.leafIndex);
|
|
45
|
+
return {
|
|
46
|
+
tree: (0, tree_js_1.reconstructTreeFromCommitmentEvents)(events, {
|
|
47
|
+
depth,
|
|
48
|
+
strictLeafIndices,
|
|
49
|
+
}),
|
|
50
|
+
events,
|
|
51
|
+
latestSignature: events[events.length - 1]?.txSignature,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { Connection } from "@solana/web3.js";
|
|
2
|
+
import { PublicKey } from "@solana/web3.js";
|
|
3
|
+
import { MerkleTree } from "../merkle.js";
|
|
4
|
+
import type { CommitmentEvent } from "./types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Historical leaves repaired manually in the relayer.
|
|
7
|
+
*
|
|
8
|
+
* The deployed `open_position` instruction appended these commitments without
|
|
9
|
+
* emitting CommitmentEvent. They must be retained when rebuilding history.
|
|
10
|
+
* Values are copied byte-for-byte from relayer-server/src/db/service.ts.
|
|
11
|
+
*/
|
|
12
|
+
export declare const PROTECTED_COMMITMENT_EVENTS: readonly [{
|
|
13
|
+
readonly leafIndex: 3738;
|
|
14
|
+
readonly commitmentHex: "0c7850c9360e041ceeba27297e0fd49fa6a224a651c2fff8c56b22c70a319a94";
|
|
15
|
+
}, {
|
|
16
|
+
readonly leafIndex: 4;
|
|
17
|
+
readonly commitmentHex: "15e182d12e044ef2a469ccda88d903304a4e3e69f72765a29e4e6df9c206b0bf";
|
|
18
|
+
readonly mintAddressHex: "e272b88fb18eaf1994acb885bdba76820c567c3467300f0cd320a0c15ebf9d2f";
|
|
19
|
+
readonly onChainTreeId: 0;
|
|
20
|
+
}];
|
|
21
|
+
/** @deprecated Use PROTECTED_COMMITMENT_EVENTS. */
|
|
22
|
+
export declare const PROTECTED_COMMITMENT_EVENT: {
|
|
23
|
+
readonly leafIndex: 3738;
|
|
24
|
+
readonly commitmentHex: "0c7850c9360e041ceeba27297e0fd49fa6a224a651c2fff8c56b22c70a319a94";
|
|
25
|
+
};
|
|
26
|
+
/** Return protected records as normal SDK events for a particular tree. */
|
|
27
|
+
export declare function getProtectedCommitmentEvents(params: {
|
|
28
|
+
mintAddress: PublicKey;
|
|
29
|
+
treeId?: number;
|
|
30
|
+
}): CommitmentEvent[];
|
|
31
|
+
/** Return every protected leaf, including the global position-tree repair. */
|
|
32
|
+
export declare function getAllProtectedCommitmentEvents(): CommitmentEvent[];
|
|
33
|
+
/**
|
|
34
|
+
* Add the protected historical leaves without duplicating records already read
|
|
35
|
+
* from an indexer. A conflicting commitment at a protected index is rejected.
|
|
36
|
+
*/
|
|
37
|
+
export declare function mergeProtectedCommitmentEvents(events: readonly CommitmentEvent[], params: {
|
|
38
|
+
mintAddress: PublicKey;
|
|
39
|
+
treeId?: number;
|
|
40
|
+
}): CommitmentEvent[];
|
|
41
|
+
/**
|
|
42
|
+
* Insert expected commitments and prefer authoritative emitted metadata when it
|
|
43
|
+
* exists. Missing events are computed from the local tree exactly like the
|
|
44
|
+
* relayer's `insertAndPersistCommitments` fallback.
|
|
45
|
+
*
|
|
46
|
+
* This function mutates `tree`.
|
|
47
|
+
*/
|
|
48
|
+
export declare function resolveCommitmentEvents(params: {
|
|
49
|
+
commitments: readonly Uint8Array[];
|
|
50
|
+
tree: MerkleTree;
|
|
51
|
+
logMessages?: readonly string[] | null;
|
|
52
|
+
programId: PublicKey;
|
|
53
|
+
mintAddress: PublicKey;
|
|
54
|
+
treeId: number;
|
|
55
|
+
txSignature: string;
|
|
56
|
+
slot: number;
|
|
57
|
+
timestamp?: number;
|
|
58
|
+
requireAllInLogs?: boolean;
|
|
59
|
+
}): CommitmentEvent[];
|
|
60
|
+
export type EventlessOpenPositionCommitments = {
|
|
61
|
+
sourceMint: PublicKey;
|
|
62
|
+
sourceTreeId: number;
|
|
63
|
+
sourceCommitment: Uint8Array;
|
|
64
|
+
positionMint: PublicKey;
|
|
65
|
+
positionTreeId: number;
|
|
66
|
+
positionCommitment: Uint8Array;
|
|
67
|
+
positionPdaKey: Uint8Array;
|
|
68
|
+
};
|
|
69
|
+
/** Decode the two commitments hidden in a current `open_position` instruction. */
|
|
70
|
+
export declare function decodeEventlessOpenPositionCommitments(instructionData: Uint8Array): EventlessOpenPositionCommitments | null;
|
|
71
|
+
export declare function getPositionPda(programId: PublicKey, positionPdaKey: Uint8Array): PublicKey;
|
|
72
|
+
/** Read PositionPDA.leaf_index at the same byte offset used by the relayer. */
|
|
73
|
+
export declare function readPositionLeafIndex(accountData: Uint8Array): number;
|
|
74
|
+
/**
|
|
75
|
+
* Recover the two events omitted by the deployed `open_position` instruction.
|
|
76
|
+
* The source tree must already contain every earlier source-mint commitment.
|
|
77
|
+
* This function inserts the source commitment into that tree.
|
|
78
|
+
*/
|
|
79
|
+
export declare function recoverEventlessOpenPositionEvents(params: {
|
|
80
|
+
instructionData: Uint8Array;
|
|
81
|
+
sourceTree: MerkleTree;
|
|
82
|
+
connection: Pick<Connection, "getAccountInfo">;
|
|
83
|
+
programId: PublicKey;
|
|
84
|
+
txSignature: string;
|
|
85
|
+
slot: number;
|
|
86
|
+
timestamp?: number;
|
|
87
|
+
}): Promise<CommitmentEvent[]>;
|