@0xbow/privacy-pools-core-sdk 0.1.5
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/README.md +73 -0
- package/dist/esm/ccip-nJye9Itm.js +166 -0
- package/dist/esm/ccip-nJye9Itm.js.map +1 -0
- package/dist/esm/index-DAWUECi8.js +84043 -0
- package/dist/esm/index-DAWUECi8.js.map +1 -0
- package/dist/esm/index.mjs +4 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/index.d.mts +666 -0
- package/dist/node/artifacts/commitment.vkey +114 -0
- package/dist/node/artifacts/commitment.wasm +0 -0
- package/dist/node/artifacts/commitment.zkey +0 -0
- package/dist/node/artifacts/merkleTree.vkey +269 -0
- package/dist/node/artifacts/merkleTree.wasm +0 -0
- package/dist/node/artifacts/merkleTree.zkey +0 -0
- package/dist/node/artifacts/withdraw.vkey +129 -0
- package/dist/node/artifacts/withdraw.wasm +0 -0
- package/dist/node/artifacts/withdraw.zkey +0 -0
- package/dist/node/ccip-lPhPeJab.js +183 -0
- package/dist/node/ccip-lPhPeJab.js.map +1 -0
- package/dist/node/index-BiU5Ef8Z.js +90625 -0
- package/dist/node/index-BiU5Ef8Z.js.map +1 -0
- package/dist/node/index.mjs +21 -0
- package/dist/node/index.mjs.map +1 -0
- package/dist/types/abi/ERC20.d.ts +38 -0
- package/dist/types/abi/IEntrypoint.d.ts +794 -0
- package/dist/types/abi/IPrivacyPool.d.ts +51 -0
- package/dist/types/ccip-BZzz1Y5w.js +182 -0
- package/dist/types/circuits/circuits.impl.d.ts +108 -0
- package/dist/types/circuits/circuits.interface.d.ts +127 -0
- package/dist/types/circuits/index.d.ts +2 -0
- package/dist/types/constants.d.ts +2 -0
- package/dist/types/core/bruteForce.service.d.ts +61 -0
- package/dist/types/core/commitment.service.d.ts +30 -0
- package/dist/types/core/contracts.service.d.ts +106 -0
- package/dist/types/core/sdk.d.ts +44 -0
- package/dist/types/core/withdrawal.service.d.ts +32 -0
- package/dist/types/crypto.d.ts +45 -0
- package/dist/types/dirname.helper.d.ts +2 -0
- package/dist/types/errors/base.error.d.ts +52 -0
- package/dist/types/exceptions/circuitInitialization.exception.d.ts +3 -0
- package/dist/types/exceptions/fetchArtifacts.exception.d.ts +3 -0
- package/dist/types/exceptions/index.d.ts +4 -0
- package/dist/types/exceptions/invalidRpcUrl.exception.d.ts +3 -0
- package/dist/types/exceptions/privacyPool.exception.d.ts +13 -0
- package/dist/types/external.d.ts +7 -0
- package/dist/types/filename.helper.d.ts +2 -0
- package/dist/types/index-D-_1h8-n.js +90638 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.js +20 -0
- package/dist/types/interfaces/blockchainProvider.interface.d.ts +12 -0
- package/dist/types/interfaces/circuits.interface.d.ts +30 -0
- package/dist/types/interfaces/contracts.interface.d.ts +28 -0
- package/dist/types/interfaces/index.d.ts +1 -0
- package/dist/types/internal.d.ts +6 -0
- package/dist/types/providers/blockchainProvider.d.ts +8 -0
- package/dist/types/providers/index.d.ts +1 -0
- package/dist/types/types/commitment.d.ts +48 -0
- package/dist/types/types/index.d.ts +2 -0
- package/dist/types/types/withdrawal.d.ts +30 -0
- package/package.json +81 -0
- package/src/abi/ERC20.ts +222 -0
- package/src/abi/IEntrypoint.ts +627 -0
- package/src/abi/IPrivacyPool.ts +386 -0
- package/src/circuits/circuits.impl.ts +213 -0
- package/src/circuits/circuits.interface.ts +162 -0
- package/src/circuits/index.ts +2 -0
- package/src/constants.ts +3 -0
- package/src/core/bruteForce.service.ts +120 -0
- package/src/core/commitment.service.ts +84 -0
- package/src/core/contracts.service.ts +407 -0
- package/src/core/sdk.ts +91 -0
- package/src/core/withdrawal.service.ts +110 -0
- package/src/crypto.ts +156 -0
- package/src/dirname.helper.ts +4 -0
- package/src/errors/base.error.ts +120 -0
- package/src/exceptions/circuitInitialization.exception.ts +6 -0
- package/src/exceptions/fetchArtifacts.exception.ts +7 -0
- package/src/exceptions/index.ts +4 -0
- package/src/exceptions/invalidRpcUrl.exception.ts +6 -0
- package/src/exceptions/privacyPool.exception.ts +19 -0
- package/src/external.ts +13 -0
- package/src/filename.helper.ts +4 -0
- package/src/index.ts +18 -0
- package/src/interfaces/blockchainProvider.interface.ts +13 -0
- package/src/interfaces/circuits.interface.ts +34 -0
- package/src/interfaces/contracts.interface.ts +58 -0
- package/src/interfaces/index.ts +1 -0
- package/src/internal.ts +6 -0
- package/src/providers/blockchainProvider.ts +26 -0
- package/src/providers/index.ts +1 -0
- package/src/types/commitment.ts +50 -0
- package/src/types/index.ts +2 -0
- package/src/types/withdrawal.ts +33 -0
package/README.md
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Privacy Pool Core SDK
|
|
2
|
+
|
|
3
|
+
A TypeScript SDK for interacting with the Privacy Pool protocol. This SDK provides a comprehensive set of tools and utilities for integrating with Privacy Pool, enabling deposits, withdrawals, and other core functionality.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
npm install @0xbow/privacy-pool-core-sdk
|
|
10
|
+
# or
|
|
11
|
+
yarn add @0xbow/privacy-pool-core-sdk
|
|
12
|
+
# or
|
|
13
|
+
pnpm add @0xbow/privacy-pool-core-sdk
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Setup
|
|
17
|
+
|
|
18
|
+
1. Install dependencies by running `pnpm install`
|
|
19
|
+
2. Build the SDK by running `pnpm build`
|
|
20
|
+
|
|
21
|
+
## Available Scripts
|
|
22
|
+
|
|
23
|
+
| Script | Description |
|
|
24
|
+
| ------------- | ------------------------------------------------------- |
|
|
25
|
+
| `build` | Build the SDK using Rollup |
|
|
26
|
+
| `build:bundle`| Build the SDK and set up circuits |
|
|
27
|
+
| `check-types` | Check for TypeScript type issues |
|
|
28
|
+
| `clean` | Remove build artifacts |
|
|
29
|
+
| `lint` | Run ESLint to check code quality |
|
|
30
|
+
| `lint:fix` | Fix linting issues automatically |
|
|
31
|
+
| `format` | Check code formatting using Prettier |
|
|
32
|
+
| `format:fix` | Fix formatting issues automatically |
|
|
33
|
+
| `test` | Run tests using Vitest |
|
|
34
|
+
| `test:cov` | Generate test coverage report |
|
|
35
|
+
|
|
36
|
+
## Usage
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
import { PrivacyPoolSDK } from '@0xbow/privacy-pool-core-sdk';
|
|
40
|
+
|
|
41
|
+
// Initialize the SDK
|
|
42
|
+
const sdk = new PrivacyPoolSDK({
|
|
43
|
+
// Configuration options
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// Example: Create a deposit
|
|
47
|
+
const deposit = await sdk.deposit({
|
|
48
|
+
// Deposit parameters
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Example: Create a withdrawal
|
|
52
|
+
const withdrawal = await sdk.withdraw({
|
|
53
|
+
// Withdrawal parameters
|
|
54
|
+
});
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
For detailed usage examples and API documentation, please refer to our [documentation](https://github.com/defi-wonderland/privacy-pool-core/tree/main/docs).
|
|
58
|
+
|
|
59
|
+
## Features
|
|
60
|
+
|
|
61
|
+
- Deposit and withdrawal functionality
|
|
62
|
+
- Zero-knowledge proof generation
|
|
63
|
+
- Commitment management
|
|
64
|
+
- Contract interactions
|
|
65
|
+
- Type-safe API
|
|
66
|
+
|
|
67
|
+
## Contributing
|
|
68
|
+
|
|
69
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
70
|
+
|
|
71
|
+
## License
|
|
72
|
+
|
|
73
|
+
Apache-2.0 License - see the [LICENSE](LICENSE) file for details.
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { B as BaseError, g as getUrl, s as stringify, d as decodeErrorResult, i as isAddressEqual, c as call, a as concat, e as encodeAbiParameters, H as HttpRequestError, b as isHex } from './index-DAWUECi8.js';
|
|
2
|
+
import 'buffer';
|
|
3
|
+
import 'assert';
|
|
4
|
+
|
|
5
|
+
class OffchainLookupError extends BaseError {
|
|
6
|
+
constructor({ callbackSelector, cause, data, extraData, sender, urls, }) {
|
|
7
|
+
super(cause.shortMessage ||
|
|
8
|
+
'An error occurred while fetching for an offchain result.', {
|
|
9
|
+
cause,
|
|
10
|
+
metaMessages: [
|
|
11
|
+
...(cause.metaMessages || []),
|
|
12
|
+
cause.metaMessages?.length ? '' : [],
|
|
13
|
+
'Offchain Gateway Call:',
|
|
14
|
+
urls && [
|
|
15
|
+
' Gateway URL(s):',
|
|
16
|
+
...urls.map((url) => ` ${getUrl(url)}`),
|
|
17
|
+
],
|
|
18
|
+
` Sender: ${sender}`,
|
|
19
|
+
` Data: ${data}`,
|
|
20
|
+
` Callback selector: ${callbackSelector}`,
|
|
21
|
+
` Extra data: ${extraData}`,
|
|
22
|
+
].flat(),
|
|
23
|
+
name: 'OffchainLookupError',
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
class OffchainLookupResponseMalformedError extends BaseError {
|
|
28
|
+
constructor({ result, url }) {
|
|
29
|
+
super('Offchain gateway response is malformed. Response data must be a hex value.', {
|
|
30
|
+
metaMessages: [
|
|
31
|
+
`Gateway URL: ${getUrl(url)}`,
|
|
32
|
+
`Response: ${stringify(result)}`,
|
|
33
|
+
],
|
|
34
|
+
name: 'OffchainLookupResponseMalformedError',
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
class OffchainLookupSenderMismatchError extends BaseError {
|
|
39
|
+
constructor({ sender, to }) {
|
|
40
|
+
super('Reverted sender address does not match target contract address (`to`).', {
|
|
41
|
+
metaMessages: [
|
|
42
|
+
`Contract address: ${to}`,
|
|
43
|
+
`OffchainLookup sender address: ${sender}`,
|
|
44
|
+
],
|
|
45
|
+
name: 'OffchainLookupSenderMismatchError',
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const offchainLookupSignature = '0x556f1830';
|
|
51
|
+
const offchainLookupAbiItem = {
|
|
52
|
+
name: 'OffchainLookup',
|
|
53
|
+
type: 'error',
|
|
54
|
+
inputs: [
|
|
55
|
+
{
|
|
56
|
+
name: 'sender',
|
|
57
|
+
type: 'address',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'urls',
|
|
61
|
+
type: 'string[]',
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: 'callData',
|
|
65
|
+
type: 'bytes',
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: 'callbackFunction',
|
|
69
|
+
type: 'bytes4',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: 'extraData',
|
|
73
|
+
type: 'bytes',
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
};
|
|
77
|
+
async function offchainLookup(client, { blockNumber, blockTag, data, to, }) {
|
|
78
|
+
const { args } = decodeErrorResult({
|
|
79
|
+
data,
|
|
80
|
+
abi: [offchainLookupAbiItem],
|
|
81
|
+
});
|
|
82
|
+
const [sender, urls, callData, callbackSelector, extraData] = args;
|
|
83
|
+
const { ccipRead } = client;
|
|
84
|
+
const ccipRequest_ = ccipRead && typeof ccipRead?.request === 'function'
|
|
85
|
+
? ccipRead.request
|
|
86
|
+
: ccipRequest;
|
|
87
|
+
try {
|
|
88
|
+
if (!isAddressEqual(to, sender))
|
|
89
|
+
throw new OffchainLookupSenderMismatchError({ sender, to });
|
|
90
|
+
const result = await ccipRequest_({ data: callData, sender, urls });
|
|
91
|
+
const { data: data_ } = await call(client, {
|
|
92
|
+
blockNumber,
|
|
93
|
+
blockTag,
|
|
94
|
+
data: concat([
|
|
95
|
+
callbackSelector,
|
|
96
|
+
encodeAbiParameters([{ type: 'bytes' }, { type: 'bytes' }], [result, extraData]),
|
|
97
|
+
]),
|
|
98
|
+
to,
|
|
99
|
+
});
|
|
100
|
+
return data_;
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
throw new OffchainLookupError({
|
|
104
|
+
callbackSelector,
|
|
105
|
+
cause: err,
|
|
106
|
+
data,
|
|
107
|
+
extraData,
|
|
108
|
+
sender,
|
|
109
|
+
urls,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async function ccipRequest({ data, sender, urls, }) {
|
|
114
|
+
let error = new Error('An unknown error occurred.');
|
|
115
|
+
for (let i = 0; i < urls.length; i++) {
|
|
116
|
+
const url = urls[i];
|
|
117
|
+
const method = url.includes('{data}') ? 'GET' : 'POST';
|
|
118
|
+
const body = method === 'POST' ? { data, sender } : undefined;
|
|
119
|
+
const headers = method === 'POST' ? { 'Content-Type': 'application/json' } : {};
|
|
120
|
+
try {
|
|
121
|
+
const response = await fetch(url.replace('{sender}', sender).replace('{data}', data), {
|
|
122
|
+
body: JSON.stringify(body),
|
|
123
|
+
headers,
|
|
124
|
+
method,
|
|
125
|
+
});
|
|
126
|
+
let result;
|
|
127
|
+
if (response.headers.get('Content-Type')?.startsWith('application/json')) {
|
|
128
|
+
result = (await response.json()).data;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
result = (await response.text());
|
|
132
|
+
}
|
|
133
|
+
if (!response.ok) {
|
|
134
|
+
error = new HttpRequestError({
|
|
135
|
+
body,
|
|
136
|
+
details: result?.error
|
|
137
|
+
? stringify(result.error)
|
|
138
|
+
: response.statusText,
|
|
139
|
+
headers: response.headers,
|
|
140
|
+
status: response.status,
|
|
141
|
+
url,
|
|
142
|
+
});
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
if (!isHex(result)) {
|
|
146
|
+
error = new OffchainLookupResponseMalformedError({
|
|
147
|
+
result,
|
|
148
|
+
url,
|
|
149
|
+
});
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
error = new HttpRequestError({
|
|
156
|
+
body,
|
|
157
|
+
details: err.message,
|
|
158
|
+
url,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
throw error;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export { ccipRequest, offchainLookup, offchainLookupAbiItem, offchainLookupSignature };
|
|
166
|
+
//# sourceMappingURL=ccip-nJye9Itm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ccip-nJye9Itm.js","sources":["../../node_modules/.pnpm/viem@2.22.14_typescript@5.7.3/node_modules/viem/_esm/errors/ccip.js","../../node_modules/.pnpm/viem@2.22.14_typescript@5.7.3/node_modules/viem/_esm/utils/ccip.js"],"sourcesContent":["import { stringify } from '../utils/stringify.js';\nimport { BaseError } from './base.js';\nimport { getUrl } from './utils.js';\nexport class OffchainLookupError extends BaseError {\n constructor({ callbackSelector, cause, data, extraData, sender, urls, }) {\n super(cause.shortMessage ||\n 'An error occurred while fetching for an offchain result.', {\n cause,\n metaMessages: [\n ...(cause.metaMessages || []),\n cause.metaMessages?.length ? '' : [],\n 'Offchain Gateway Call:',\n urls && [\n ' Gateway URL(s):',\n ...urls.map((url) => ` ${getUrl(url)}`),\n ],\n ` Sender: ${sender}`,\n ` Data: ${data}`,\n ` Callback selector: ${callbackSelector}`,\n ` Extra data: ${extraData}`,\n ].flat(),\n name: 'OffchainLookupError',\n });\n }\n}\nexport class OffchainLookupResponseMalformedError extends BaseError {\n constructor({ result, url }) {\n super('Offchain gateway response is malformed. Response data must be a hex value.', {\n metaMessages: [\n `Gateway URL: ${getUrl(url)}`,\n `Response: ${stringify(result)}`,\n ],\n name: 'OffchainLookupResponseMalformedError',\n });\n }\n}\nexport class OffchainLookupSenderMismatchError extends BaseError {\n constructor({ sender, to }) {\n super('Reverted sender address does not match target contract address (`to`).', {\n metaMessages: [\n `Contract address: ${to}`,\n `OffchainLookup sender address: ${sender}`,\n ],\n name: 'OffchainLookupSenderMismatchError',\n });\n }\n}\n//# sourceMappingURL=ccip.js.map","import { call } from '../actions/public/call.js';\nimport { OffchainLookupError, OffchainLookupResponseMalformedError, OffchainLookupSenderMismatchError, } from '../errors/ccip.js';\nimport { HttpRequestError, } from '../errors/request.js';\nimport { decodeErrorResult } from './abi/decodeErrorResult.js';\nimport { encodeAbiParameters } from './abi/encodeAbiParameters.js';\nimport { isAddressEqual } from './address/isAddressEqual.js';\nimport { concat } from './data/concat.js';\nimport { isHex } from './data/isHex.js';\nimport { stringify } from './stringify.js';\nexport const offchainLookupSignature = '0x556f1830';\nexport const offchainLookupAbiItem = {\n name: 'OffchainLookup',\n type: 'error',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'urls',\n type: 'string[]',\n },\n {\n name: 'callData',\n type: 'bytes',\n },\n {\n name: 'callbackFunction',\n type: 'bytes4',\n },\n {\n name: 'extraData',\n type: 'bytes',\n },\n ],\n};\nexport async function offchainLookup(client, { blockNumber, blockTag, data, to, }) {\n const { args } = decodeErrorResult({\n data,\n abi: [offchainLookupAbiItem],\n });\n const [sender, urls, callData, callbackSelector, extraData] = args;\n const { ccipRead } = client;\n const ccipRequest_ = ccipRead && typeof ccipRead?.request === 'function'\n ? ccipRead.request\n : ccipRequest;\n try {\n if (!isAddressEqual(to, sender))\n throw new OffchainLookupSenderMismatchError({ sender, to });\n const result = await ccipRequest_({ data: callData, sender, urls });\n const { data: data_ } = await call(client, {\n blockNumber,\n blockTag,\n data: concat([\n callbackSelector,\n encodeAbiParameters([{ type: 'bytes' }, { type: 'bytes' }], [result, extraData]),\n ]),\n to,\n });\n return data_;\n }\n catch (err) {\n throw new OffchainLookupError({\n callbackSelector,\n cause: err,\n data,\n extraData,\n sender,\n urls,\n });\n }\n}\nexport async function ccipRequest({ data, sender, urls, }) {\n let error = new Error('An unknown error occurred.');\n for (let i = 0; i < urls.length; i++) {\n const url = urls[i];\n const method = url.includes('{data}') ? 'GET' : 'POST';\n const body = method === 'POST' ? { data, sender } : undefined;\n const headers = method === 'POST' ? { 'Content-Type': 'application/json' } : {};\n try {\n const response = await fetch(url.replace('{sender}', sender).replace('{data}', data), {\n body: JSON.stringify(body),\n headers,\n method,\n });\n let result;\n if (response.headers.get('Content-Type')?.startsWith('application/json')) {\n result = (await response.json()).data;\n }\n else {\n result = (await response.text());\n }\n if (!response.ok) {\n error = new HttpRequestError({\n body,\n details: result?.error\n ? stringify(result.error)\n : response.statusText,\n headers: response.headers,\n status: response.status,\n url,\n });\n continue;\n }\n if (!isHex(result)) {\n error = new OffchainLookupResponseMalformedError({\n result,\n url,\n });\n continue;\n }\n return result;\n }\n catch (err) {\n error = new HttpRequestError({\n body,\n details: err.message,\n url,\n });\n }\n }\n throw error;\n}\n//# sourceMappingURL=ccip.js.map"],"names":[],"mappings":"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","x_google_ignoreList":[0,1]}
|