Skip to content

Commit 8085c05

Browse files
authored
feat(sdk)!: require source parameter for dataset namespace isolation (#647)
1 parent 1b44e3f commit 8085c05

36 files changed

Lines changed: 296 additions & 149 deletions

docs/src/content/docs/developer-guides/devnet.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { Synapse } from '@filoz/synapse-sdk'
2727
const synapse = await Synapse.create({
2828
privateKey: process.env.PRIVATE_KEY,
2929
rpcURL: process.env.RPC_URL,
30+
source: 'my-app',
3031
warmStorageAddress: process.env.WARM_STORAGE_ADDRESS,
3132
multicall3Address: process.env.MULTICALL3_ADDRESS,
3233
// Optional: override USDFC token address

docs/src/content/docs/developer-guides/migration-guide.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import { Synapse } from '@filoz/synapse-sdk'
3232

3333
const synapse = Synapse.create({
3434
account: privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`),
35+
source: 'my-app',
3536
chain: calibration, // optional
3637
transport: http() // optional
3738
})

docs/src/content/docs/developer-guides/payments/payment-operations.mdx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ Monitor your account balance to ensure you have sufficient funds for storage ope
2828
// @lib: esnext,dom
2929
import { Synapse } from "@filoz/synapse-sdk";
3030
import { privateKeyToAccount } from 'viem/accounts'
31-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') });
31+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' });
3232
// ---cut---
3333
const walletBalance = await synapse.payments.walletBalance();
3434
const accountInfo = await synapse.payments.accountInfo();
@@ -44,7 +44,7 @@ console.log("Spending rate:", accountInfo.lockupRate, "per epoch");
4444
// @lib: esnext,dom
4545
import { Synapse, parseUnits } from "@filoz/synapse-sdk";
4646
import { privateKeyToAccount } from 'viem/accounts'
47-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') });
47+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' });
4848
// ---cut---
4949
import { TOKENS } from "@filoz/synapse-sdk";
5050

@@ -62,7 +62,7 @@ If you cannot use permit-based deposits, you can use the traditional two-transac
6262
// @lib: esnext,dom
6363
import { Synapse, parseUnits } from "@filoz/synapse-sdk";
6464
import { privateKeyToAccount } from 'viem/accounts'
65-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') });
65+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' });
6666
// ---cut---
6767
const filecoinpay = synapse.chain.contracts.filecoinPay.address
6868
const amount = parseUnits("100");
@@ -86,7 +86,7 @@ This requires two transactions and higher gas costs. Use `depositWithPermit` ins
8686
// @lib: esnext,dom
8787
import { Synapse } from "@filoz/synapse-sdk";
8888
import { privateKeyToAccount } from 'viem/accounts'
89-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') });
89+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' });
9090
// ---cut---
9191
import { TIME_CONSTANTS } from "@filoz/synapse-sdk";
9292

@@ -106,7 +106,7 @@ if (daysRemaining < 7) console.warn("⚠️ Low balance!");
106106
import { Synapse } from "@filoz/synapse-sdk";
107107
import { privateKeyToAccount } from 'viem/accounts'
108108

109-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') });
109+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' });
110110
// ---cut---
111111
const info = await synapse.payments.accountInfo();
112112
await synapse.payments.withdraw({ amount: info.availableFunds });
@@ -131,7 +131,7 @@ Approving warmStorage for 1TiB of storage for 3 months.
131131
import { Synapse, calibration } from "@filoz/synapse-sdk";
132132
import { privateKeyToAccount } from 'viem/accounts'
133133

134-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') });
134+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' });
135135
const monthlyPricePerTiB = null as unknown as bigint;
136136
// ---cut---
137137
import { TIME_CONSTANTS } from "@filoz/synapse-sdk";
@@ -153,7 +153,7 @@ Revoking warmStorage's operator approvals.
153153
// @lib: esnext,dom
154154
import { Synapse, calibration } from "@filoz/synapse-sdk";
155155
import { privateKeyToAccount } from 'viem/accounts'
156-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') });
156+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' });
157157
// ---cut---
158158
await synapse.payments.revokeService();
159159
```
@@ -164,7 +164,7 @@ await synapse.payments.revokeService();
164164
// @lib: esnext,dom
165165
import { Synapse, calibration } from "@filoz/synapse-sdk";
166166
import { privateKeyToAccount } from 'viem/accounts'
167-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') });
167+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' });
168168
// ---cut---
169169
const approval = await synapse.payments.serviceApproval();
170170

docs/src/content/docs/developer-guides/payments/rails-settlement.mdx

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ Check rails where you're the payer:
7979
// @lib: esnext,dom
8080
import { Synapse } from "@filoz/synapse-sdk";
8181
import { privateKeyToAccount } from 'viem/accounts'
82-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') })
82+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' })
8383
// ---cut---
8484
const payerRails = await synapse.payments.getRailsAsPayer();
8585
console.log(`You have ${payerRails.length} outgoing payment rails`);
@@ -99,7 +99,7 @@ Check rails where you're receiving payments:
9999
// @lib: esnext,dom
100100
import { Synapse } from "@filoz/synapse-sdk";
101101
import { privateKeyToAccount } from 'viem/accounts'
102-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') });
102+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' });
103103
// ---cut---
104104
const payeeRails = await synapse.payments.getRailsAsPayee();
105105
console.log(`You have ${payeeRails.length} incoming payment rails`);
@@ -113,7 +113,7 @@ For detailed information about a specific rail:
113113
// @lib: esnext,dom
114114
import { Synapse } from "@filoz/synapse-sdk";
115115
import { privateKeyToAccount } from 'viem/accounts'
116-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') });
116+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' });
117117
const railId = null as unknown as bigint;
118118
// ---cut---
119119
const railInfo = await synapse.payments.getRail({ railId });
@@ -146,7 +146,7 @@ The simplest way to settle a rail is using `settleAuto()`, which automatically d
146146
// @lib: esnext,dom
147147
import { Synapse } from "@filoz/synapse-sdk";
148148
import { privateKeyToAccount } from 'viem/accounts'
149-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') });
149+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' });
150150
const railId = 1n;
151151
// ---cut---
152152
// Automatically handles both active and terminated rails
@@ -172,7 +172,7 @@ Settle up to the current epoch:
172172
// @lib: esnext,dom
173173
import { Synapse } from "@filoz/synapse-sdk";
174174
import { privateKeyToAccount } from 'viem/accounts'
175-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') });
175+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' });
176176
const railId = 1n;
177177
// ---cut---
178178
// Settle a specific rail (requires settlement fee)
@@ -193,7 +193,7 @@ Settle up to a specific past epoch (partial settlement):
193193
// @lib: esnext,dom
194194
import { Synapse } from "@filoz/synapse-sdk";
195195
import { privateKeyToAccount } from 'viem/accounts'
196-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') });
196+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' });
197197
const railId = 1n;
198198
// ---cut---
199199
const targetEpoch = 1000n; // Ensure it's not in the future
@@ -216,7 +216,7 @@ When a rail is terminated, use the specific method for terminated rails:
216216
// @lib: esnext,dom
217217
import { Synapse } from "@filoz/synapse-sdk";
218218
import { privateKeyToAccount } from 'viem/accounts'
219-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') });
219+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' });
220220
const railId = 1n;
221221
// ---cut---
222222
// Check if rail is terminated
@@ -240,7 +240,7 @@ if (railInfo.endEpoch > 0) {
240240
// @lib: esnext,dom
241241
import { Synapse, formatUnits } from "@filoz/synapse-sdk";
242242
import { privateKeyToAccount } from 'viem/accounts'
243-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') });
243+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' });
244244
const railId = 1n;
245245
// ---cut---
246246
// Preview settlement to current epoch
@@ -278,7 +278,7 @@ Service providers (payees) should settle regularly to receive accumulated earnin
278278
// @lib: esnext,dom
279279
import { Synapse, parseUnits, formatUnits } from "@filoz/synapse-sdk";
280280
import { privateKeyToAccount } from 'viem/accounts'
281-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') });
281+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' });
282282
// ---cut---
283283
// Example: Settle all incoming rails using settleAuto
284284
async function settleAllIncomingRails() {
@@ -317,7 +317,7 @@ Clients (payers) typically don't need to settle unless:
317317
// @lib: esnext,dom
318318
import { Synapse, parseUnits, formatUnits } from "@filoz/synapse-sdk";
319319
import { privateKeyToAccount } from 'viem/accounts'
320-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') });
320+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' });
321321
// ---cut---
322322
// Example: Settle before withdrawal
323323
async function prepareForWithdrawal() {
@@ -346,7 +346,7 @@ Common settlement errors and solutions:
346346
// @lib: esnext,dom
347347
import { Synapse } from "@filoz/synapse-sdk";
348348
import { privateKeyToAccount } from 'viem/accounts'
349-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') });
349+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' });
350350
const railId = 1n;
351351
// ---cut---
352352
try {

docs/src/content/docs/developer-guides/storage/storage-context.mdx

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ A Storage Context represents a connection to a specific storage provider and dat
5151
import { Synapse } from "@filoz/synapse-sdk"
5252
import { privateKeyToAccount } from "viem/accounts"
5353

54-
const synapse = Synapse.create({ account: privateKeyToAccount("0x...") })
54+
const synapse = Synapse.create({ account: privateKeyToAccount("0x..."), source: "my-app" })
5555

5656
// Single context — auto-selects provider
5757
await synapse.storage.createContext({
@@ -126,7 +126,7 @@ Upload data to a provider without committing on-chain:
126126
import { Synapse, type PieceCID } from "@filoz/synapse-sdk"
127127
import { privateKeyToAccount } from "viem/accounts"
128128

129-
const synapse = Synapse.create({ account: privateKeyToAccount("0x...") })
129+
const synapse = Synapse.create({ account: privateKeyToAccount("0x..."), source: "my-app" })
130130
const data = new TextEncoder().encode("Hello, Filecoin!")
131131
const abortController = new AbortController()
132132
const preCalculatedCid = null as unknown as PieceCID;
@@ -164,7 +164,7 @@ Request a secondary provider to fetch pieces from the primary:
164164
import { Synapse, type PieceCID } from "@filoz/synapse-sdk"
165165
import { privateKeyToAccount } from "viem/accounts"
166166

167-
const synapse = Synapse.create({ account: privateKeyToAccount("0x...") })
167+
const synapse = Synapse.create({ account: privateKeyToAccount("0x..."), source: "my-app" })
168168
const [primary, secondary] = await synapse.storage.createContexts({
169169
count: 2,
170170
metadata: { source: "my-app" },
@@ -207,7 +207,7 @@ Add pieces to an on-chain data set. Creates the data set and payment rail if one
207207
import { Synapse, type PieceCID } from "@filoz/synapse-sdk"
208208
import { privateKeyToAccount } from "viem/accounts"
209209
import type { Hex } from "viem";
210-
const synapse = Synapse.create({ account: privateKeyToAccount("0x...") })
210+
const synapse = Synapse.create({ account: privateKeyToAccount("0x..."), source: "my-app" })
211211
const contexts = await synapse.storage.createContexts({
212212
count: 2,
213213
metadata: { source: "my-app" },
@@ -260,7 +260,7 @@ Upload multiple files to 2 providers with full error handling:
260260
import { Synapse } from "@filoz/synapse-sdk"
261261
import { privateKeyToAccount } from "viem/accounts"
262262

263-
const synapse = Synapse.create({ account: privateKeyToAccount("0x..")})
263+
const synapse = Synapse.create({ account: privateKeyToAccount("0x..."), source: "my-app" })
264264

265265
const files = [
266266
new TextEncoder().encode("File 1 content..."),
@@ -348,7 +348,7 @@ You can also terminate a data set using `synapse.storage.terminateDataSet({ data
348348
import { Synapse } from "@filoz/synapse-sdk"
349349
import { privateKeyToAccount } from "viem/accounts"
350350

351-
const synapse = Synapse.create({ account: privateKeyToAccount("0x...") })
351+
const synapse = Synapse.create({ account: privateKeyToAccount("0x..."), source: "my-app" })
352352
const ctx = await synapse.storage.createContext({
353353
metadata: { source: "my-app" },
354354
})
@@ -374,7 +374,7 @@ This method submits an on-chain transaction to initiate the deletion process.
374374
import { Synapse } from "@filoz/synapse-sdk"
375375
import { privateKeyToAccount } from "viem/accounts"
376376

377-
const synapse = Synapse.create({ account: privateKeyToAccount("0x...") })
377+
const synapse = Synapse.create({ account: privateKeyToAccount("0x..."), source: "my-app" })
378378
const ctx = await synapse.storage.createContext({
379379
metadata: { source: "my-app" },
380380
})
@@ -408,7 +408,7 @@ Download pieces from any available provider using the StorageManager:
408408
import { Synapse, type PieceCID } from "@filoz/synapse-sdk"
409409
import { privateKeyToAccount } from "viem/accounts"
410410

411-
const synapse = Synapse.create({ account: privateKeyToAccount("0x...") })
411+
const synapse = Synapse.create({ account: privateKeyToAccount("0x..."), source: "my-app" })
412412
const pieceCid = null as unknown as PieceCID;
413413
// ---cut---
414414
// Download from any provider that has the piece
@@ -427,7 +427,7 @@ When using a StorageContext, downloads are automatically restricted to that spec
427427
import { Synapse, type PieceCID } from "@filoz/synapse-sdk"
428428
import { privateKeyToAccount } from "viem/accounts"
429429

430-
const synapse = Synapse.create({ account: privateKeyToAccount("0x...") })
430+
const synapse = Synapse.create({ account: privateKeyToAccount("0x..."), source: "my-app" })
431431
const ctx = await synapse.storage.createContext({
432432
metadata: { source: "my-app" },
433433
})
@@ -449,7 +449,7 @@ The `withCDN` option follows a clear inheritance hierarchy:
449449
import { Synapse, type PieceCID } from "@filoz/synapse-sdk"
450450
import { privateKeyToAccount } from "viem/accounts"
451451

452-
const synapse = Synapse.create({ account: privateKeyToAccount("0x...") })
452+
const synapse = Synapse.create({ account: privateKeyToAccount("0x..."), source: "my-app" })
453453
const ctx = await synapse.storage.createContext({ withCDN: false })
454454
const pieceCid = null as unknown as PieceCID;
455455
// ---cut---
@@ -471,7 +471,7 @@ For maximum control, use the core library functions without the SDK wrapper clas
471471
import { Synapse, type PieceCID } from "@filoz/synapse-sdk"
472472
import { privateKeyToAccount } from "viem/accounts"
473473

474-
const synapse = Synapse.create({ account: privateKeyToAccount("0x...") })
474+
const synapse = Synapse.create({ account: privateKeyToAccount("0x..."), source: "my-app" })
475475
const ctx = await synapse.storage.createContext({
476476
metadata: { source: "my-app" },
477477
})
@@ -517,7 +517,7 @@ The `endorsedIds` parameter controls which providers are eligible. When non-empt
517517
import { Synapse, type PieceCID, asChain } from "@filoz/synapse-sdk"
518518
import { privateKeyToAccount } from "viem/accounts"
519519

520-
const synapse = Synapse.create({ account: privateKeyToAccount("0x...") })
520+
const synapse = Synapse.create({ account: privateKeyToAccount("0x..."), source: "my-app" })
521521
const client = synapse.client;
522522
const chain = asChain(client.chain);
523523
const walletAddress = client.account.address;
@@ -570,7 +570,7 @@ import { privateKeyToAccount } from "viem/accounts"
570570

571571
import * as SP from "@filoz/synapse-core/sp"
572572

573-
const synapse = Synapse.create({ account: privateKeyToAccount("0x...") })
573+
const synapse = Synapse.create({ account: privateKeyToAccount("0x..."), source: "my-app" })
574574
const client = synapse.client;
575575
const walletAddress = client.account.address;
576576

docs/src/content/docs/developer-guides/storage/storage-costs.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ Allowances are **cumulative** - you must add your new storage requirements to an
165165
// @lib: esnext,dom
166166
import { Synapse, TOKENS, TIME_CONSTANTS, calibration } from "@filoz/synapse-sdk";
167167
import { privateKeyToAccount } from 'viem/accounts'
168-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') });
168+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' });
169169
const pricePerMonth = null as unknown as bigint;
170170
const pricePerEpoch = null as unknown as bigint;
171171
// ---cut---
@@ -214,7 +214,7 @@ Check balances, calculate deposit amount, and execute the appropriate transactio
214214
// @lib: esnext,dom
215215
import { Synapse, TIME_CONSTANTS, calibration, TOKENS } from "@filoz/synapse-sdk";
216216
import { privateKeyToAccount } from 'viem/accounts'
217-
const synapse = Synapse.create({ account: privateKeyToAccount('0x...') });
217+
const synapse = Synapse.create({ account: privateKeyToAccount('0x...'), source: 'my-app' });
218218
const totalCostNeeded = null as unknown as bigint;
219219
const rateAllowanceNeeded = null as unknown as bigint;
220220
const lockupAllowanceNeeded = null as unknown as bigint;

0 commit comments

Comments
 (0)