diff --git a/src/components/settings/ConfigurationTab.tsx b/src/components/settings/ConfigurationTab.tsx
index 8db1d8d..ee6cc12 100644
--- a/src/components/settings/ConfigurationTab.tsx
+++ b/src/components/settings/ConfigurationTab.tsx
@@ -233,15 +233,70 @@ export function ConfigurationTab() {
)}
- {/* Username */}
- {(config.translator?.user_identity || config.jdc?.user_identity) && (
-
-
{isSoloMode ? 'Bitcoin Address' : 'Pool Username'}
-
- {config.translator?.user_identity || config.jdc?.user_identity}
-
-
- )}
+ {/* Username / Identity */}
+ {(config.translator?.user_identity || config.jdc?.user_identity) && (() => {
+ const identity = config.translator?.user_identity || config.jdc?.user_identity || '';
+
+ if (isSoloMode && (identity.startsWith('sri/solo/') || identity.startsWith('sri/donate'))) {
+ let addr = '';
+ let worker = '';
+ let donation = '';
+
+ if (identity.startsWith('sri/solo/')) {
+ const rest = identity.slice('sri/solo/'.length);
+ const idx = rest.indexOf('/');
+ addr = idx === -1 ? rest : rest.slice(0, idx);
+ worker = idx === -1 ? '' : rest.slice(idx + 1);
+ donation = '0%';
+ } else if (identity === 'sri/donate') {
+ donation = '100%';
+ } else if (identity.startsWith('sri/donate/')) {
+ const rest = identity.slice('sri/donate/'.length);
+ const parts = rest.split('/');
+ const pct = parseInt(parts[0], 10);
+ if (!isNaN(pct) && String(pct) === parts[0] && parts.length >= 2) {
+ donation = `${pct}%`;
+ addr = parts[1];
+ worker = parts.slice(2).join('/');
+ } else {
+ donation = '100%';
+ worker = rest;
+ }
+ }
+
+ return (
+
Mining Identity
- {isSoloMode ? 'Configure your payout address' : 'Configure your pool credentials'}
+ {useSriConventions
+ ? 'Configure your solo mining payout'
+ : isSoloMode
+ ? 'Configure your mining identity'
+ : 'Configure your pool credentials'}
-
-
- {isSoloMode ? 'Bitcoin Address' : 'Pool Username'} *
- (required)
-
-
setUserIdentity(e.target.value)}
- placeholder={isSoloMode ? 'bc1q...' : 'username.worker1'}
- aria-required="true"
- autoComplete="off"
- className="w-full h-10 px-3 rounded-lg border border-input bg-background focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/15 outline-none transition-all font-mono text-sm"
- />
- {isSoloMode && getBitcoinAddressError(userIdentity, network) && (
-
{getBitcoinAddressError(userIdentity, network)}
- )}
-
- {isSoloMode
- ? 'Your Bitcoin address where you want to receive mining rewards'
- : 'Your pool account username (e.g., username.workername)'}
-
-
+ {useSriConventions ? (
+ <>
+ {needsAddress && (
+
+
+ Bitcoin Payout Address *
+ (required)
+
+
setPayoutAddress(e.target.value)}
+ placeholder="bc1q..."
+ aria-required="true"
+ autoComplete="off"
+ className="w-full h-10 px-3 rounded-lg border border-input bg-background focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/15 outline-none transition-all font-mono text-sm"
+ />
+ {getBitcoinAddressError(payoutAddress, network) && (
+
{getBitcoinAddressError(payoutAddress, network)}
+ )}
+
+ Your Bitcoin address where you want to receive mining rewards
+
+
+ )}
+
+
+
+ Worker Name (optional)
+
+
setWorkerName(e.target.value)}
+ placeholder="worker1"
+ autoComplete="off"
+ className="w-full h-10 px-3 rounded-lg border border-input bg-background focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/15 outline-none transition-all font-mono text-sm"
+ />
+
+ A name to identify this mining device
+
+
+
+
+
+ Donation to SRI Development (optional)
+
+
+
setDonationPercent(Number(e.target.value))}
+ aria-label={`Donation: ${donationPercent}%`}
+ aria-valuemin={0}
+ aria-valuemax={100}
+ aria-valuenow={donationPercent}
+ className="w-full accent-primary"
+ />
+
+ 0% 25% 50% 75% 100%
+
+
+
+ {donationPercent === 0
+ ? 'Full block reward goes to your payout address'
+ : donationPercent >= 100
+ ? 'Full block reward is donated to SRI development'
+ : `${donationPercent}% of the block reward goes to SRI development, ${100 - donationPercent}% to your address`}
+
+
+
+ {finalIdentity && (
+
+
+
+
User identity that will be sent to the pool:
+
{finalIdentity}
+
+
+ )}
+ >
+ ) : (
+
+
+ {isSoloMode ? 'Bitcoin Address' : 'Pool Username'} *
+ (required)
+
+
setUserIdentity(e.target.value)}
+ placeholder={isSoloMode ? 'bc1q...' : 'username.worker1'}
+ aria-required="true"
+ autoComplete="off"
+ className="w-full h-10 px-3 rounded-lg border border-input bg-background focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/15 outline-none transition-all font-mono text-sm"
+ />
+ {isSoloMode && getBitcoinAddressError(userIdentity, network) && (
+
{getBitcoinAddressError(userIdentity, network)}
+ )}
+
+ {isSoloMode
+ ? 'Your Bitcoin address where you want to receive mining rewards'
+ : 'Your pool account username (e.g., username.workername)'}
+
+
+ )}
{isJdMode && (
diff --git a/src/components/setup/steps/ReviewStart.tsx b/src/components/setup/steps/ReviewStart.tsx
index 75e097d..836ffcf 100644
--- a/src/components/setup/steps/ReviewStart.tsx
+++ b/src/components/setup/steps/ReviewStart.tsx
@@ -149,7 +149,49 @@ export function ReviewStart({ data, onComplete }: ReviewStartProps) {
-
{data.translator?.user_identity ?? data.jdc?.user_identity ?? '—'}
+ {(() => {
+ const identity = data.translator?.user_identity ?? data.jdc?.user_identity ?? '';
+ if (!identity) return
—
;
+
+ if (isSoloMode && (identity.startsWith('sri/solo/') || identity.startsWith('sri/donate'))) {
+ let addr = '';
+ let worker = '';
+ let donation = '';
+
+ if (identity.startsWith('sri/solo/')) {
+ const rest = identity.slice('sri/solo/'.length);
+ const idx = rest.indexOf('/');
+ addr = idx === -1 ? rest : rest.slice(0, idx);
+ worker = idx === -1 ? '' : rest.slice(idx + 1);
+ donation = '0%';
+ } else if (identity === 'sri/donate') {
+ donation = '100%';
+ } else if (identity.startsWith('sri/donate/')) {
+ const rest = identity.slice('sri/donate/'.length);
+ const parts = rest.split('/');
+ const pct = parseInt(parts[0], 10);
+ if (!isNaN(pct) && String(pct) === parts[0] && parts.length >= 2) {
+ donation = `${pct}%`;
+ addr = parts[1];
+ worker = parts.slice(2).join('/');
+ } else {
+ donation = '100%';
+ worker = rest;
+ }
+ }
+
+ return (
+ <>
+ {addr &&
Payout Address: {addr}
}
+ {worker &&
Worker: {worker}
}
+
Donation: {donation}
+
{identity}
+ >
+ );
+ }
+
+ return
{identity}
;
+ })()}
{isJdMode && data.jdc?.coinbase_reward_address && (
{data.jdc.coinbase_reward_address}
)}