Skip to content

Commit 3a1d187

Browse files
authored
fix: tweak payments language, fix minor flow issues (#22)
1 parent b1b06dc commit 3a1d187

File tree

4 files changed

+58
-69
lines changed

4 files changed

+58
-69
lines changed

src/payments/auto.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ function createSpinner() {
3939

4040
if (isTTY) {
4141
// Use the real spinner for TTY
42-
return clackSpinner()
42+
return clackSpinner({ indicator: 'timer' })
4343
} else {
4444
// Non-TTY fallback - just print messages without spinners
4545
return {
@@ -252,7 +252,7 @@ export async function runAutoSetup(options: PaymentSetupOptions): Promise<void>
252252
// Display new permissions with capacity info
253253
const monthlyRate = allowances.ratePerEpoch * TIME_CONSTANTS.EPOCHS_PER_MONTH
254254
displayServicePermissions(
255-
'New WarmStorage Service Permissions:',
255+
'New WarmStorage Service Limits:',
256256
monthlyRate,
257257
allowances.lockupAmount,
258258
totalDeposit,
@@ -264,7 +264,7 @@ export async function runAutoSetup(options: PaymentSetupOptions): Promise<void>
264264
// Display current permissions with capacity info
265265
const monthlyRate = currentAllowances.rateAllowance * TIME_CONSTANTS.EPOCHS_PER_MONTH
266266
displayServicePermissions(
267-
'Current WarmStorage Service Permissions:',
267+
'Your Current WarmStorage Service Limits:',
268268
monthlyRate,
269269
currentAllowances.lockupAllowance,
270270
totalDeposit,

src/payments/interactive.ts

Lines changed: 14 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
checkUSDFCBalance,
1919
createProvider,
2020
depositUSDFC,
21+
displayCapacity,
2122
displayDepositWarning,
2223
displayServicePermissions,
2324
formatFIL,
@@ -80,7 +81,7 @@ export async function runInteractiveSetup(options: PaymentSetupOptions): Promise
8081
}
8182

8283
// Step 2: Initialize Synapse
83-
const s = spinner()
84+
const s = spinner({ indicator: 'timer' })
8485
s.start('Initializing connection...')
8586

8687
const rpcUrl = options.rpcUrl || RPC_URLS.calibration.websocket
@@ -206,7 +207,7 @@ export async function runInteractiveSetup(options: PaymentSetupOptions): Promise
206207
}
207208

208209
// Step 5: Set storage allowances
209-
console.log(`\n${pc.bold('WarmStorage Service Payment Limits:')}`)
210+
console.log(`\n${pc.bold('Your Current WarmStorage Service Limits:')}`)
210211

211212
// Show current allowances
212213
let currentAllowances = status.currentAllowances
@@ -223,17 +224,9 @@ export async function runInteractiveSetup(options: PaymentSetupOptions): Promise
223224
console.log(` Max payment: ${formatUSDFC(monthlyRate)} USDFC/month`)
224225
console.log(` Max reserve: ${formatUSDFC(currentAllowances.lockupAllowance)} USDFC (10-day lockup)`)
225226

226-
if (capacity.isDepositLimited) {
227-
console.log(
228-
` → Current capacity: ~${capacity.actualGB.toLocaleString()} GB/month ${pc.yellow('(deposit-limited)')}`
229-
)
230-
console.log(` → Potential: ~${capacity.potentialGB.toLocaleString()} GB/month`)
231-
} else {
232-
console.log(` → Estimated capacity: ~${capacity.actualGB.toLocaleString()} GB/month`)
233-
console.log(pc.gray(' (varies with CDN usage and data set fees)'))
234-
}
227+
displayCapacity(capacity)
235228
} else {
236-
console.log(pc.gray(' No WarmStorage service permissions set yet'))
229+
console.log(pc.gray(' No limits set yet'))
237230
}
238231

239232
// Ask about setting/updating storage limits
@@ -252,7 +245,7 @@ export async function runInteractiveSetup(options: PaymentSetupOptions): Promise
252245
console.log(`\n${pc.bold('Storage Pricing:')}`)
253246
console.log(` 1 GiB/month: ${formatUSDFC(pricePerGiBPerMonth)} USDFC`)
254247
console.log(` 1 TiB/month: ${formatUSDFC(pricePerTiBPerMonth)} USDFC`)
255-
console.log(pc.gray(' (WarmStorage service will reserve 10 days of costs as security)'))
248+
console.log(pc.gray(' (for each upload, WarmStorage service will reserve 10 days of costs as security)'))
256249

257250
const allowanceStr = await text({
258251
message: 'Enter storage allowance',
@@ -299,7 +292,7 @@ export async function runInteractiveSetup(options: PaymentSetupOptions): Promise
299292

300293
// Display the new permissions with capacity info
301294
displayServicePermissions(
302-
'New WarmStorage Service Permissions:',
295+
'New WarmStorage Service Limits:',
303296
monthlyRate,
304297
allowances.lockupAmount,
305298
totalDeposit,
@@ -420,14 +413,6 @@ export async function runInteractiveSetup(options: PaymentSetupOptions): Promise
420413
const finalStatus = await getPaymentStatus(synapse)
421414
s.stop(`${pc.green('✓')} Setup complete`)
422415

423-
// Calculate actual vs potential capacity using existing pricePerTiBPerEpoch
424-
const capacity = calculateActualCapacity(
425-
finalStatus.depositedAmount,
426-
finalStatus.currentAllowances.rateAllowance,
427-
finalStatus.currentAllowances.lockupAllowance,
428-
pricePerTiBPerEpoch
429-
)
430-
431416
// Final summary with three clear sections
432417
outro(pc.bold('━━━ Setup Complete ━━━'))
433418
console.log(`Network: ${pc.bold(network)}`)
@@ -444,21 +429,13 @@ export async function runInteractiveSetup(options: PaymentSetupOptions): Promise
444429

445430
// Section 3: WarmStorage service permissions
446431
const monthlyRate = finalStatus.currentAllowances.rateAllowance * TIME_CONSTANTS.EPOCHS_PER_MONTH
447-
console.log(`\n${pc.bold('WarmStorage Service Permissions')}`)
448-
console.log(` Max payment: ${formatUSDFC(monthlyRate)} USDFC/month`)
449-
console.log(` Max reserve: ${formatUSDFC(finalStatus.currentAllowances.lockupAllowance)} USDFC (10-day lockup)`)
450-
451-
if (capacity.isDepositLimited) {
452-
console.log(
453-
` → Current capacity: ~${capacity.actualGB.toLocaleString()} GB/month ${pc.yellow('(deposit-limited)')}`
454-
)
455-
console.log(
456-
` → Potential: ~${capacity.potentialGB.toLocaleString()} GB/month (deposit ${formatUSDFC(capacity.additionalDepositNeeded)} more)`
457-
)
458-
} else {
459-
console.log(` → Estimated capacity: ~${capacity.actualGB.toLocaleString()} GB/month`)
460-
console.log(pc.gray(' (varies with CDN usage and data set fees)'))
461-
}
432+
displayServicePermissions(
433+
'Your WarmStorage Service Limits',
434+
monthlyRate,
435+
finalStatus.currentAllowances.lockupAllowance,
436+
finalStatus.depositedAmount,
437+
pricePerTiBPerEpoch
438+
)
462439

463440
// Show deposit warning if needed
464441
displayDepositWarning(finalStatus.depositedAmount, finalStatus.currentAllowances.lockupUsed)

src/payments/setup.ts

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,9 @@ export async function calculateStorageAllowances(synapse: Synapse, tibPerMonth:
210210
const pricePerTiBPerEpoch = storageInfo.pricing.noCDN.perTiBPerEpoch
211211

212212
// Calculate rate allowance (price for desired storage per epoch)
213-
const ratePerEpoch = pricePerTiBPerEpoch * BigInt(Math.floor(tibPerMonth))
213+
// Handle fractional TiB by converting to milliTiB for precision
214+
const milliTiBPerMonth = Math.round(tibPerMonth * 1000)
215+
const ratePerEpoch = (pricePerTiBPerEpoch * BigInt(milliTiBPerMonth)) / 1000n
214216

215217
// Lockup is always 10 days worth of payments for WarmStorage
216218
const lockupAmount = ratePerEpoch * TIME_CONSTANTS.EPOCHS_PER_DAY * BigInt(DEFAULT_LOCKUP_DAYS)
@@ -469,27 +471,16 @@ export function displayPaymentSummary(
469471
// Section 3: WarmStorage service permissions
470472
if (rateAllowance > 0n) {
471473
const monthlyRate = rateAllowance * TIME_CONSTANTS.EPOCHS_PER_MONTH
472-
console.log(`\n${pc.bold('WarmStorage Service Permissions')}`)
474+
console.log(`\n${pc.bold('Your WarmStorage Service Limits')}`)
473475
console.log(` Max payment: ${formatUSDFC(monthlyRate)} USDFC/month`)
474476
console.log(` Max reserve: ${formatUSDFC(lockupAllowance)} USDFC (10-day lockup)`)
475477

476-
// Calculate actual vs potential capacity
478+
// Calculate and display capacity
477479
const capacity = calculateActualCapacity(depositedAmount, rateAllowance, lockupAllowance, pricePerTiBPerEpoch)
478-
479-
if (capacity.isDepositLimited) {
480-
console.log(
481-
` → Current capacity: ~${capacity.actualGB.toLocaleString()} GB/month ${pc.yellow('(deposit-limited)')}`
482-
)
483-
console.log(
484-
` → Potential: ~${capacity.potentialGB.toLocaleString()} GB/month (deposit ${formatUSDFC(capacity.additionalDepositNeeded)} more)`
485-
)
486-
} else {
487-
console.log(` → Estimated capacity: ~${capacity.actualGB.toLocaleString()} GB/month`)
488-
console.log(pc.gray(' (varies with CDN usage and data set fees)'))
489-
}
480+
displayCapacity(capacity)
490481
} else {
491-
console.log(`\n${pc.bold('WarmStorage Service Permissions')}`)
492-
console.log(pc.gray(' No permissions set'))
482+
console.log(`\n${pc.bold('Your WarmStorage Service Limits')}`)
483+
console.log(pc.gray(' No limits set'))
493484
}
494485
}
495486

@@ -522,6 +513,25 @@ export function displayDepositWarning(depositedAmount: bigint, lockupUsed: bigin
522513
}
523514
}
524515

516+
/**
517+
* Display capacity information based on deposit and limits
518+
*
519+
* @param capacity - Calculated capacity information
520+
*/
521+
export function displayCapacity(capacity: ReturnType<typeof calculateActualCapacity>): void {
522+
if (capacity.isDepositLimited) {
523+
console.log(
524+
` → Current capacity: ~${capacity.actualGB.toLocaleString()} GB/month ${pc.yellow('(deposit-limited)')}`
525+
)
526+
console.log(
527+
` → Potential: ~${capacity.potentialGB.toLocaleString()} GB/month (deposit ${formatUSDFC(capacity.additionalDepositNeeded)} more)`
528+
)
529+
} else {
530+
console.log(` → Estimated capacity: ~${capacity.actualGB.toLocaleString()} GB/month`)
531+
console.log(pc.gray(' (excludes data set creation fee and optional CDN add-on rates)'))
532+
}
533+
}
534+
525535
/**
526536
* Display WarmStorage service permissions with capacity information
527537
*
@@ -546,17 +556,7 @@ export function displayServicePermissions(
546556
console.log(` Max payment: ${formatUSDFC(monthlyRate)} USDFC/month`)
547557
console.log(` Max reserve: ${formatUSDFC(lockupAmount)} USDFC (10-day lockup)`)
548558

549-
if (capacity.isDepositLimited) {
550-
console.log(
551-
` → Current capacity: ~${capacity.actualGB.toLocaleString()} GB/month ${pc.yellow('(deposit-limited)')}`
552-
)
553-
console.log(
554-
` → Potential: ~${capacity.potentialGB.toLocaleString()} GB/month (deposit ${formatUSDFC(capacity.additionalDepositNeeded)} more)`
555-
)
556-
} else {
557-
console.log(` → Estimated capacity: ~${capacity.actualGB.toLocaleString()} GB/month`)
558-
console.log(pc.gray(' (varies with CDN usage and data set fees)'))
559-
}
559+
displayCapacity(capacity)
560560
}
561561

562562
/**

src/test/unit/payments-setup.test.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,19 @@ describe('Payment Setup Tests', () => {
210210
const allowances = await calculateStorageAllowances(mockSynapse, 0.5)
211211

212212
expect(allowances.tibPerMonth).toBe(0.5)
213-
expect(allowances.ratePerEpoch).toBe(0n) // Floor of 0.5 is 0
213+
// 0.5 TiB = 500 milliTiB, so (0.0000565 * 500) / 1000 = 0.00002825
214+
expect(allowances.ratePerEpoch).toBe(ethers.parseUnits('0.00002825', 18))
215+
})
216+
217+
it('should calculate allowances for 1.5 TiB correctly', async () => {
218+
const allowances = await calculateStorageAllowances(mockSynapse, 1.5)
219+
220+
expect(allowances.tibPerMonth).toBe(1.5)
221+
// 1.5 TiB = 1500 milliTiB, so (0.0000565 * 1500) / 1000 = 0.00008475
222+
expect(allowances.ratePerEpoch).toBe(ethers.parseUnits('0.00008475', 18))
223+
expect(allowances.lockupAmount).toBe(
224+
ethers.parseUnits('0.00008475', 18) * 2880n * 10n // rate * epochs/day * 10 days
225+
)
214226
})
215227
})
216228

0 commit comments

Comments
 (0)