@fased/fased 0.1.62 → 0.1.64
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/CHANGELOG.md +32 -0
- package/README.md +38 -30
- package/config/dependency-ownership.json +1 -1
- package/config/signer-policies/README.md +49 -0
- package/config/signer-policies/agent.json.template +32 -0
- package/config/signer-policies/mining.json.template +69 -0
- package/config/signer-policies/network.json.template +5 -0
- package/config/signer-policies/vault.json.template +70 -0
- package/config/signer-protocol-v2.json +76 -0
- package/config/typescript-noemit-baseline.json +680 -0
- package/dist/agents/auth-profiles/store.js +267 -31
- package/dist/agents/bash-tools.exec.js +10 -4
- package/dist/agents/current-model-catalog.js +3 -3
- package/dist/agents/memory-search.js +7 -1
- package/dist/agents/model-catalog-access.js +1 -2
- package/dist/agents/model-catalog-snapshot.js +1 -1
- package/dist/agents/model-catalog-source.js +1 -1
- package/dist/agents/model-metadata.js +1 -1
- package/dist/agents/model-selection.js +2 -28
- package/dist/agents/models-config.providers.js +6 -6
- package/dist/agents/pi-embedded-runner/compact.js +15 -7
- package/dist/agents/pi-embedded-runner/model.js +1 -1
- package/dist/agents/pi-embedded-runner/run/attempt.js +24 -13
- package/dist/agents/pi-embedded-runner/run.js +2 -0
- package/dist/agents/pi-embedded-runner/tool-split.js +40 -2
- package/dist/agents/pi-tool-definition-adapter.js +16 -1
- package/dist/agents/pi-tools.js +2 -1
- package/dist/agents/sandbox/config.js +1 -1
- package/dist/agents/sandbox/context.js +27 -2
- package/dist/agents/skills/env-overrides.js +38 -28
- package/dist/agents/skills/trust.js +93 -0
- package/dist/agents/skills/workspace.js +128 -0
- package/dist/agents/skills-clawhub.js +36 -11
- package/dist/agents/skills-marketplace-scan.js +49 -0
- package/dist/agents/tools/marketplace-offer-draft-tool.js +1 -1
- package/dist/agents/tools/mining-tool.js +1 -1
- package/dist/agents/tools/session-status-tool.js +1 -1
- package/dist/agents/tools/wallet-action-tool.js +172 -36
- package/dist/agents/tools/wallet-skill-policy.js +65 -23
- package/dist/agents/tools/wallet-tool.js +7 -11
- package/dist/auto-reply/reply/directive-handling.fast-lane.js +2 -1
- package/dist/auto-reply/reply/directive-handling.impl.js +2 -1
- package/dist/auto-reply/reply/directive-handling.model.js +2 -1
- package/dist/auto-reply/reply/directive-handling.persist.js +2 -2
- package/dist/auto-reply/reply/get-reply-directives-apply.js +2 -0
- package/dist/auto-reply/reply/get-reply-inline-actions.js +25 -1
- package/dist/auto-reply/reply/model-selection.js +7 -4
- package/dist/auto-reply/reply/session-reset-model.js +4 -4
- package/dist/brand.js +1 -1
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/channel-web.js +2 -2
- package/dist/cli/gateway-cli/run.js +8 -0
- package/dist/cli/program/command-registry.js +1 -1
- package/dist/cli/program/register.onboard.js +2 -3
- package/dist/cli/program/register.wallet.js +16 -123
- package/dist/cli/providers-cli.js +1 -1
- package/dist/cli/sat-cli.js +129 -2
- package/dist/cli/update-cli/update-command.js +260 -11
- package/dist/commands/auth-choice.apply.api-providers.js +3 -3
- package/dist/commands/doctor-config-flow.js +1 -1
- package/dist/commands/doctor-legacy-config.js +2 -13
- package/dist/commands/model-picker.js +6 -6
- package/dist/commands/models/auth.js +1 -1
- package/dist/commands/onboard-auth.config-gateways.js +1 -1
- package/dist/commands/onboard-auth.credentials.js +32 -8
- package/dist/commands/onboard-non-interactive/local/wallet-config.js +28 -27
- package/dist/commands/onboard-non-interactive/local.js +5 -1
- package/dist/commands/wallet.js +568 -1911
- package/dist/config/config.js +2 -2
- package/dist/config/io.js +64 -2
- package/dist/config/schema.help.js +8 -7
- package/dist/config/schema.labels.js +5 -4
- package/dist/config/zod-schema.agent-runtime.js +1 -0
- package/dist/config/zod-schema.js +5 -0
- package/dist/control-ui/assets/{app-DLil9VO1.js → app-bR-fO5ty.js} +1511 -1555
- package/dist/control-ui/assets/{config-CU5Zi8Dh.js → config-LeImukCW.js} +10 -10
- package/dist/control-ui/assets/{federation-D10Q4eP_.js → federation-DgA9e-Pn.js} +364 -422
- package/dist/control-ui/assets/{index-DdE_NIXo.js → index-ckCxHwjy.js} +3 -3
- package/dist/control-ui/assets/{mining-BdhMn18r.js → mining-BgHFh0ei.js} +134 -114
- package/dist/control-ui/assets/mining-commit-DFpB_4JN.js +2 -0
- package/dist/control-ui/assets/{open-external-url-DwSiwMPl.js → open-external-url-ulF1B-sA.js} +3 -3
- package/dist/control-ui/assets/{providers-QMn4w2_f.js → providers-CIx9fxc6.js} +2 -2
- package/dist/control-ui/assets/{wallet-C2g294QT.js → wallet-DvStR_AT.js} +259 -377
- package/dist/control-ui/index.html +1 -1
- package/dist/control-ui/version.json +1 -1
- package/dist/daemon/systemd-system.js +56 -50
- package/dist/extensions/sat-mining/src/protocol-contract.js +43 -3
- package/dist/extensions/sat-mining/src/rpc-read.js +235 -67
- package/dist/extensions/sat-mining/src/sat-bond-layout.js +5 -2
- package/dist/extensions/sat-mining/src/signer-codec-manifest.js +406 -0
- package/dist/extensions/sat-mining/src/solana-submit.js +1038 -397
- package/dist/extensions/sat-mining/src/submission-ledger.js +349 -0
- package/dist/federation/auto-connect.js +98 -8
- package/dist/federation/marketplace-capability-adapter.js +33 -7
- package/dist/federation/marketplace-delivery-outbox.js +196 -0
- package/dist/federation/marketplace-delivery.js +351 -215
- package/dist/federation/marketplace-direct-payment.js +272 -141
- package/dist/federation/marketplace-escrow.js +607 -249
- package/dist/federation/marketplace-settlement-ledger.js +352 -0
- package/dist/federation/offers.js +9 -7
- package/dist/federation/peer-auth-v2.js +529 -0
- package/dist/gateway/a2a-http.js +425 -96
- package/dist/gateway/a2a-settlement.js +259 -153
- package/dist/gateway/a2a-task-store.js +524 -0
- package/dist/gateway/auth.js +38 -2
- package/dist/gateway/config-reload.js +46 -33
- package/dist/gateway/durable-capacity.js +31 -0
- package/dist/gateway/federation-http.js +540 -135
- package/dist/gateway/federation-marketplace-run-store.js +397 -0
- package/dist/gateway/federation-marketplace.js +535 -230
- package/dist/gateway/mutating-admin-rpc-rate-limit.js +5 -0
- package/dist/gateway/security-path.js +1 -1
- package/dist/gateway/server-http.js +1084 -1205
- package/dist/gateway/server-methods/models.js +1 -1
- package/dist/gateway/server-methods/secrets.js +40 -0
- package/dist/gateway/server-methods.js +1 -2
- package/dist/gateway/server-reload-handlers.js +196 -66
- package/dist/gateway/server-runtime-config.js +1 -1
- package/dist/gateway/server-secrets-runtime.js +288 -0
- package/dist/gateway/server.impl.js +73 -42
- package/dist/gateway/sessions-patch.js +3 -5
- package/dist/index.js +4 -2
- package/dist/infra/fasedhub.js +64 -1
- package/dist/infra/local-source-paired-update.js +538 -0
- package/dist/infra/restart.js +41 -10
- package/dist/infra/update-runner.js +96 -0
- package/dist/light-update-status.js +11 -11
- package/dist/memory/backend-config.js +2 -1
- package/dist/memory/session-files.js +16 -2
- package/dist/plugin-sdk/{accounts-DxblobYM.js → accounts-Brn3-uWN.js} +1 -1
- package/dist/plugin-sdk/{actions-D4UNimWa.js → actions-DRu135h0.js} +2 -2
- package/dist/plugin-sdk/{active-listener-CFuy106s.js → active-listener-B_NMtgPL.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-Bwi2Oq03.js → audio-preflight-BYxAt775.js} +27 -27
- package/dist/plugin-sdk/{audit-Cs0K7LBp.js → audit-C5d2z5U1.js} +1 -1
- package/dist/plugin-sdk/{channel-access-D5aHoTY8.js → channel-access-CcFRdRPO.js} +1 -1
- package/dist/plugin-sdk/{channel-access-configure-Dvch9mMQ.js → channel-access-configure-DaI5wevh.js} +1 -1
- package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
- package/dist/plugin-sdk/channel-plugin-common.js +4 -4
- package/dist/plugin-sdk/{chunk-B0FUGc5A.js → chunk-CyoyqpbG.js} +1 -1
- package/dist/plugin-sdk/{chunk-items-DzT4L4Ty.js → chunk-items-DIRHG2gJ.js} +1 -1
- package/dist/plugin-sdk/command-status.d.ts +2 -2
- package/dist/plugin-sdk/command-status.js +27 -27
- package/dist/plugin-sdk/{commands-registry-DmDRhRAU.js → commands-registry-BfqdEWdF.js} +2 -2
- package/dist/plugin-sdk/{common-CfUOowOp.js → common-HCcXU-NR.js} +1 -1
- package/dist/plugin-sdk/{config-mxULv0fQ.js → config-DlWVeLFB.js} +7113 -6877
- package/dist/plugin-sdk/{config-schema-BrkmtFxB.js → config-schema-BOT7kHb6.js} +6779 -3696
- package/dist/plugin-sdk/device-pair.d.ts +1 -1
- package/dist/plugin-sdk/discord.d.ts +6 -6
- package/dist/plugin-sdk/discord.js +19 -19
- package/dist/plugin-sdk/file-lock.js +35 -4
- package/dist/plugin-sdk/{filesystem-manager-ZoHU8oA7.js → filesystem-manager-DoI8IBNF.js} +1 -1
- package/dist/plugin-sdk/{group-mentions-BHRff6j8.d.ts → group-mentions-q3hUTCt7.d.ts} +1 -1
- package/dist/plugin-sdk/{handle-action-DbVCF9HZ.js → handle-action-hvwapMKg.js} +13 -13
- package/dist/plugin-sdk/{helpers-BXbdgs5H.js → helpers-DMBU4oTo.js} +1 -1
- package/dist/plugin-sdk/{image-ops-D7jPxaph.js → image-ops-DQi0n_Tt.js} +1 -1
- package/dist/plugin-sdk/index.d.ts +21 -39
- package/dist/plugin-sdk/index.js +29 -29
- package/dist/plugin-sdk/{login-BRxww6nv.js → login-Ca583Okc.js} +3 -3
- package/dist/plugin-sdk/{login-qr-DJXsk9XH.js → login-qr-CGciBSNP.js} +3 -3
- package/dist/plugin-sdk/{manager-Y2S_5IlI.js → manager-BegWxNYX.js} +4 -4
- package/dist/plugin-sdk/{markdown-tables-DHLFQqaF.js → markdown-tables-DCOXEUfZ.js} +1 -1
- package/dist/plugin-sdk/{media-Czo4carg.js → media-CAdQF5TG.js} +47 -47
- package/dist/plugin-sdk/{memory-search-DTjIMw8J.js → memory-search-CrFPOeTH.js} +4 -1
- package/dist/plugin-sdk/{monitor-M_ta2lMc.js → monitor-BCFDaqJ-.js} +31 -31
- package/dist/plugin-sdk/{monitor-wYVncM9w.js → monitor-BgbjRiPM.js} +32 -32
- package/dist/plugin-sdk/{openresponses-http-B2GmeSt4.js → openresponses-http-DFf87SMM.js} +27 -27
- package/dist/plugin-sdk/{optional-runtime-dependency-DdMbxS24.js → optional-runtime-dependency-0dznm3ZO.js} +1 -1
- package/dist/plugin-sdk/{outbound-Db8mRN6P.js → outbound-BgVDdHxx.js} +6 -6
- package/dist/plugin-sdk/{outbound-attachment-BqFjcypb.js → outbound-attachment-QqTnIhZL.js} +2 -2
- package/dist/plugin-sdk/{pairing-message-B3bHYGaw.d.ts → pairing-message-CS-9BHug.d.ts} +2 -2
- package/dist/plugin-sdk/{pairing-message-B3GC_7CD.js → pairing-message-D0CoLHRJ.js} +1 -1
- package/dist/plugin-sdk/{pairing-store-CQikgIbw.js → pairing-store-BChahgI2.js} +2 -2
- package/dist/plugin-sdk/{pi-model-discovery-CY3m5zJP.js → pi-model-discovery-BX_JLcEJ.js} +1 -1
- package/dist/plugin-sdk/{pi-model-discovery-runtime-DSh1T2pn.js → pi-model-discovery-runtime-DxTMz_XF.js} +2 -2
- package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
- package/dist/plugin-sdk/{pw-ai-AFUqn-tQ.js → pw-ai-natjh3rm.js} +3 -3
- package/dist/plugin-sdk/{qmd-manager-DSyx77KY.js → qmd-manager-CgRaTxUq.js} +1 -1
- package/dist/plugin-sdk/{query-expansion-CAI2kKLQ.js → query-expansion-BG3FgzF7.js} +14 -3
- package/dist/plugin-sdk/{replies-Fzh9PhXl.js → replies-ChYo5ZQM.js} +2 -2
- package/dist/plugin-sdk/{resolve-outbound-target-KpF3co6T.js → resolve-outbound-target-D-KGgHJZ.js} +1 -1
- package/dist/plugin-sdk/{resolve-route-CDl74O19.js → resolve-route-C8tvQm8Z.js} +1 -1
- package/dist/plugin-sdk/{retry-policy-D4uiqUOG.js → retry-policy-C6SjKjQA.js} +1 -1
- package/dist/plugin-sdk/{runtime-Bb6KRnCC.js → runtime-2B9_WKoI.js} +8 -3
- package/dist/plugin-sdk/{runtime-dependency-DLDmB94f.js → runtime-dependency-DczkvPxn.js} +2 -2
- package/dist/plugin-sdk/sat-runtime.d.ts +549 -309
- package/dist/plugin-sdk/sat-runtime.js +29 -29
- package/dist/plugin-sdk/{send-C4k4JuJN.js → send-B6KkGKZD.js} +6 -6
- package/dist/plugin-sdk/{send-D-uDKGIq.js → send-CFzGKJXo.js} +6 -6
- package/dist/plugin-sdk/{send-Du8ykP1k.js → send-DCO441U7.js} +8 -8
- package/dist/plugin-sdk/{send-5nFktR1n.js → send-gDoGA-7e.js} +5 -5
- package/dist/plugin-sdk/{send-Bfzf11VY.js → send-q9HXrSwK.js} +7 -7
- package/dist/plugin-sdk/{session-CS-Td9EM.js → session-DHD4ZKyG.js} +2 -2
- package/dist/plugin-sdk/{skill-commands-CFAlXWHk.js → skill-commands-FKEPLS7T.js} +201 -26
- package/dist/plugin-sdk/{slack-CxE1mfzj.js → slack-BUTt8cxK.js} +39 -39
- package/dist/plugin-sdk/{slack-actions-BcMkNv1Z.js → slack-actions-DhbMcp8M.js} +11 -11
- package/dist/plugin-sdk/slack.d.ts +6 -6
- package/dist/plugin-sdk/slack.js +9 -9
- package/dist/plugin-sdk/{sticker-cache-CGzGWu00.js → sticker-cache-D0wHVqjt.js} +3 -3
- package/dist/plugin-sdk/{tables-bFXyRpkx.js → tables-B3jr0Pvq.js} +1 -1
- package/dist/plugin-sdk/{targets-DH7a9lKB.js → targets-CtSbTxYX.js} +1 -1
- package/dist/plugin-sdk/{telegram-actions-DaEcYQ8r.js → telegram-actions-CC_qN4v0.js} +30 -30
- package/dist/plugin-sdk/telegram.d.ts +6 -6
- package/dist/plugin-sdk/telegram.js +8 -8
- package/dist/plugin-sdk/{thread-bindings.lifecycle-CgOvvdw8.js → thread-bindings.lifecycle-QbkNl-m6.js} +3 -3
- package/dist/plugin-sdk/{thread-bindings.state-CQpk44Hq.js → thread-bindings.state-D9hg_M1c.js} +2 -2
- package/dist/plugin-sdk/tmp-fased-dir-xOTGlzBE.d.ts +486 -0
- package/dist/plugin-sdk/{types-vcJrC_uv.d.ts → types-C3avNytw.d.ts} +3 -4
- package/dist/plugin-sdk/{types-DyhXnYUr.d.ts → types-D0kDG8l0.d.ts} +3 -2
- package/dist/plugin-sdk/{types-DFAW-n1J.d.ts → types-DWfbSAaM.d.ts} +2 -2
- package/dist/plugin-sdk/{types.plugin-_fbu40Re.d.ts → types.plugin-BcSBq42x.d.ts} +8 -3
- package/dist/plugin-sdk/{web-CInY-lCv.js → web-BXsJ1vqe.js} +32 -32
- package/dist/plugin-sdk/{whatsapp-actions-BtSc2CBv.js → whatsapp-actions-Bj_rOncr.js} +13 -13
- package/dist/plugin-sdk/{whatsapp-heartbeat-Bg9TuYzl.js → whatsapp-heartbeat-B1WHkJIg.js} +2 -2
- package/dist/plugin-sdk/whatsapp.d.ts +13 -13
- package/dist/plugin-sdk/whatsapp.js +12 -12
- package/dist/plugin-sdk/{wsl-C4DGFkOd.js → wsl-J-HscWxS.js} +3 -3
- package/dist/plugin-sdk/{zod-schema.providers-core-BEbNizPe.d.ts → zod-schema.providers-core-CIzCjXH9.d.ts} +61 -61
- package/dist/providers/refresh.js +1 -1
- package/dist/providers/registry.js +1 -1
- package/dist/secrets/apply.js +1 -1
- package/dist/secrets/runtime.js +1 -1
- package/dist/wallet/external-submission-ledger.js +376 -0
- package/dist/wallet/legacy-embedded-keystore.js +40 -0
- package/dist/wallet/local-socket-signer-archive.js +30 -0
- package/dist/wallet/local-socket-signer-lifecycle.js +97 -0
- package/dist/wallet/local-socket-signer-policy.js +166 -0
- package/dist/wallet/local-socket-signer-protocol.js +561 -118
- package/dist/wallet/native-signer-wallet-id.js +25 -0
- package/dist/wallet/providers/alchemy-adapter.js +3 -0
- package/dist/wallet/providers/local-socket-signer-adapter.js +380 -105
- package/dist/wallet/providers/turnkey-adapter.js +292 -34
- package/dist/wallet/providers/wallet-standard-adapter.js +100 -0
- package/dist/wallet/signer-network-admin.js +184 -0
- package/dist/wallet/signer-protocol-v2.generated.js +90 -0
- package/dist/wallet/solana-bond-signing.js +157 -69
- package/dist/wallet/solana-reviewed-transaction.js +375 -0
- package/dist/wallet/solana-swap.js +520 -64
- package/dist/wallet/solana-transaction-inspection.js +106 -4
- package/dist/wallet/solana-trigger.js +658 -320
- package/dist/wallet/turnkey-reviewed-state.js +370 -0
- package/dist/wallet/wallet-approval-auth.js +17 -28
- package/dist/wallet/wallet-atomic-state.js +53 -0
- package/dist/wallet/wallet-canary.js +0 -1
- package/dist/wallet/wallet-inbound-events.js +16 -11
- package/dist/wallet/wallet-policy-simulation.js +1 -1
- package/dist/wallet/wallet-policy.js +90 -36
- package/dist/wallet/wallet-provider-capabilities.js +28 -4
- package/dist/wallet/wallet-provider-registry.js +57 -44
- package/dist/wallet/wallet-provider-resolver.js +62 -63
- package/dist/wallet/wallet-runtime-config.js +28 -41
- package/dist/wallet/wallet-secrets-store.js +22 -0
- package/dist/wallet/wallet-send-approvals.js +1891 -589
- package/dist/wallet/wallet-send-execution-ledger.js +292 -0
- package/dist/wallet/wallet-settlement-links.js +14 -13
- package/dist/wallet/wallet-standard-review.js +353 -0
- package/dist/wallet/wallet-status.js +0 -9
- package/dist/wallet/wallet-task-ledger.js +16 -2
- package/dist/web/auto-reply/heartbeat-runner.js +1 -1
- package/dist/web/auto-reply/monitor.js +2 -2
- package/dist/wizard/host-security-capability.js +14 -23
- package/dist/wizard/onboarding.finalize.js +63 -184
- package/dist/wizard/onboarding.host-security.js +117 -1367
- package/dist/wizard/onboarding.js +172 -217
- package/dist/wizard/onboarding.wallet.js +232 -785
- package/extensions/acpx/package.json +1 -1
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/fased-federation/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +12 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +2 -2
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +12 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +12 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/sat-mining/index.ts +498 -153
- package/extensions/sat-mining/package.json +1 -1
- package/extensions/sat-mining/signer-codec-schema.v1.json +374 -0
- package/extensions/sat-mining/src/audit-store.ts +50 -5
- package/extensions/sat-mining/src/claim-service.ts +85 -14
- package/extensions/sat-mining/src/config.ts +9 -0
- package/extensions/sat-mining/src/cycle-progress.ts +16 -8
- package/extensions/sat-mining/src/epoch-service.ts +9 -5
- package/extensions/sat-mining/src/gateway-runner.ts +21 -1
- package/extensions/sat-mining/src/protocol-contract.ts +45 -1
- package/extensions/sat-mining/src/recovery-service.ts +312 -0
- package/extensions/sat-mining/src/round-watcher.ts +391 -81
- package/extensions/sat-mining/src/rpc-read.ts +330 -89
- package/extensions/sat-mining/src/runtime.ts +14 -0
- package/extensions/sat-mining/src/sat-bond-layout.ts +6 -0
- package/extensions/sat-mining/src/signer-codec-manifest.ts +429 -0
- package/extensions/sat-mining/src/solana-submit.ts +1199 -428
- package/extensions/sat-mining/src/submission-ledger.ts +433 -0
- package/extensions/signal/package.json +1 -1
- package/extensions/synology-chat/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +12 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +12 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +12 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +12 -0
- package/extensions/zalouser/package.json +1 -1
- package/install.sh +4955 -0
- package/package.json +23 -5
- package/scripts/fased-host-updater.mjs +1421 -0
- package/scripts/fased-host-updaterctl.mjs +186 -0
- package/scripts/fased-managed-service.sh +36 -0
- package/scripts/fased-managed-updater.mjs +3065 -156
- package/scripts/fased-signer-enroll-hosting.sh +275 -0
- package/scripts/fased-signer-network-hosting.sh +143 -0
- package/scripts/fased-signer-owner-policy.mjs +1430 -0
- package/scripts/fased-signer-policy-hosting.sh +50 -0
- package/scripts/fased-signer-policy-local.sh +26 -0
- package/scripts/hosted-release-manifest.mjs +185 -0
- package/scripts/install-fased-signerd.sh +183 -108
- package/scripts/install-managed-runtime.mjs +212 -10
- package/scripts/managed-runtime-layout.mjs +75 -3
- package/scripts/migrate-hosted-signer-v2.mjs +58 -0
- package/scripts/start-managed.sh +169 -360
- package/dist/control-ui/assets/mining-commit-R-6nu87p.js +0 -2
- package/dist/plugin-sdk/tmp-fased-dir-CS6zsYEE.d.ts +0 -77
- package/dist/wallet/local-socket-signer-broker.js +0 -224
- package/dist/wallet/local-socket-signer-custody.js +0 -42
- package/dist/wallet/providers/embedded-keystore-adapter.js +0 -402
- package/dist/wallet/providers/privy-adapter.js +0 -80
- package/dist/wallet/wallet-custody.js +0 -1836
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as a,w as o}from"./mining-commit-
|
|
1
|
+
import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as a,w as o}from"./mining-commit-DFpB_4JN.js";import{n as s}from"./task-ledger-source-route-C-yTp0QU.js";var c=9n,l=11n;function u(t){return e`
|
|
2
2
|
<span class="mining-help" role="img" tabindex="0" aria-label=${t} data-tooltip=${t}>
|
|
3
3
|
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
4
4
|
<circle cx="12" cy="12" r="10" />
|
|
@@ -6,8 +6,8 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
6
6
|
<path d="M12 17h.01" />
|
|
7
7
|
</svg>
|
|
8
8
|
</span>
|
|
9
|
-
`}function d(e){return e?e.signerCapability===`background-ready`?{title:`Background-ready wallet`,detail:`This wallet is suitable for unattended SAT mining.`}:{title:`Interactive wallet`,detail:e.signerCapabilityReason??`This wallet may need operator approval for mining actions.`}:{title:`No wallet selected`,detail:`Create or import the dedicated Mining wallet in onboarding or with fased wallet setup --chain solana, then refresh.`}}function f(e){let t=String(e.attachedWalletId??``).trim(),n=String(e.status?.walletId??``).trim(),r=String(e.profile?.walletId??``).trim(),i=String(e.readiness?.selectedWalletId??``).trim(),a=e.wallets.find(e=>e.walletId===t),o=e.wallets.find(e=>e.walletId===n),s=e.wallets.find(e=>e.walletId===r),c=e.wallets.find(e=>e.walletId===i),l=a??o??s??c,u=!!n&&(!!e.status?.enabledWanted||!!e.status?.running||R(e.status?.currentCapitalFundedLamports)||(e.status?.recentActions?.length??0)>0||String(e.status?.validatorAuthority??``).trim().length>0),d=t||(n&&(u||n===r&&o)?n:``);return d?n&&n!==d?{attachedWallet:a,runtimeWallet:o,profileWallet:s,displayWallet:l,title:`Mining wallet state still settling`,detail:`Wallet registry and runtime status disagree. Refresh after the next SAT tick to confirm the singleton @wallet:mining history is live.`}:r&&r!==d?{attachedWallet:a,runtimeWallet:o,profileWallet:s,displayWallet:l,title:`Mining form differs from singleton wallet`,detail:`The mining form is still showing settings from another wallet. Save or refresh the profile if you want the form to match @wallet:mining.`}:{attachedWallet:a,runtimeWallet:o,profileWallet:s,displayWallet:l,title:`Singleton mining wallet`,detail:`SAT history, capital, and restart recovery follow @wallet:mining.`}:{attachedWallet:a,runtimeWallet:o,profileWallet:s,displayWallet:l,title:`Configure`,detail:``}}function p(e){let t=String(e.defaultWalletId??``).trim(),n=String(e.attachedWalletId||e.profile?.walletId||e.status?.walletId||e.readiness?.selectedWalletId||``).trim();return!t||!n||t!==n?null:{title:`Agent and Mining wallets must stay separate`,detail:`This singleton mining wallet is also the primary Agent wallet. Use Wallet to clear the Agent default, then select a dedicated Agent wallet before wallet work.`}}function m(e){return(e?.strategyExecution&&i(e.strategyMode)===e.strategyExecution?e.strategyExecution:i(e?.strategyMode))===`auto`?{title:`Auto strategy`,detail:`Auto strategy uses the Fased model/runtime stack to propose the cycle allocation and falls back to deterministic execution if the strategy step fails.`}:{title:`Deterministic strategy`,detail:`Deterministic strategy uses locked 25-bucket allocation arrays for the selected risk profile and does not require model inference.`}}function h(e){if(!e.length)return null;let t=e.reduce((e,t)=>({committedLamports:e.committedLamports+BigInt(t.committedLamports??`0`),totalSatEarnedRaw:e.totalSatEarnedRaw+BigInt(t.totalSatEarnedRaw??`0`),totalRebateLamports:e.totalRebateLamports+BigInt(t.totalRebateLamports??`0`),txFeeLamports:e.txFeeLamports+BigInt(t.txFeeLamports??`0`),netLiveCostLamports:e.netLiveCostLamports+BigInt(t.netLiveCostLamports??`0`),validParticipationCount:e.validParticipationCount+ +!!t.validParticipation}),{committedLamports:0n,totalSatEarnedRaw:0n,totalRebateLamports:0n,txFeeLamports:0n,netLiveCostLamports:0n,validParticipationCount:0}),n=BigInt(e.length);return{sampleCount:e.length,averageCommitLamports:(t.committedLamports/n).toString(),averageSatRaw:(t.totalSatEarnedRaw/n).toString(),averageRebateLamports:(t.totalRebateLamports/n).toString(),averageFeeLamports:(t.txFeeLamports/n).toString(),averageNetLiveCostLamports:(t.netLiveCostLamports/n).toString(),validRatePct:`${Math.round(t.validParticipationCount/e.length*100)}%`}}function g(e){let t=e.status?.lastStrategyDecision??null;return e.strategyExecution===`auto`?t?t.source===`skill`?{title:t.fallbackUsed?`Auto path with deterministic fallback`:`Auto path with model route`,detail:t.fallbackUsed?`The runtime attempted the model-guided path but fell back to deterministic execution for this cycle.`:`The runtime used the model-guided strategy path for this cycle.`,pathLabel:t.modelId?`Model route · ${t.modelId}`:`Model route`,fallbackLabel:t.fallbackUsed?`Fallback used`:`No fallback`}:{title:`Auto planner with deterministic strategy`,detail:`Auto sizing/planning is active, but the strategy engine resolved to the deterministic path for the latest cycle.`,pathLabel:`Deterministic strategy path`,fallbackLabel:`Planner only`}:{title:`Auto path waiting`,detail:`Auto mode is enabled. A live planner/strategy decision will appear once a cycle is evaluated.`,pathLabel:`No strategy decision yet`,fallbackLabel:`Pending`}:{title:`Deterministic path`,detail:`This run is using the locked deterministic allocation generator. No model step is required for cycle placement.`,pathLabel:`Deterministic engine`,fallbackLabel:`Not applicable`}}function _(e){let t=o(e?.riskMode??`balanced`);switch(e?.strategyPreset&&r(e.strategyPreset)===(e?.riskMode??`balanced`)?e.strategyPreset:t){case`spread`:return{title:`Spread profile`,detail:`Wider center-weighted coverage for steadier participation and lower concentration risk.`};case`conviction`:return{title:`Conviction profile`,detail:`Tighter concentration around strongest buckets for more variance and more upside if the read is right.`};case`top_k`:return{title:`Top-K Sparse profile`,detail:`High-conviction compiler that puts most weight into a few ranked buckets. Higher variance, stronger upside when the read is right.`};case`ranked`:return{title:`Ranked profile`,detail:`Compiler ranks buckets and converts the ranking into weighted exposure with a tail for safety.`};case`adaptive`:return{title:`Adaptive profile`,detail:`Compiler blends stable coverage with cycle-ranked opportunity so auto can improve without abandoning fallback safety.`};case`crowd_aware`:return{title:`Crowd-aware profile`,detail:`Compiler avoids over-concentrating in obvious buckets and keeps broader tail exposure when the cycle is crowded.`};case`safe_fallback`:return{title:`Safe fallback profile`,detail:`Balanced deterministic allocation for recovery, low confidence, or unstable recent results.`};case`swarm`:return{title:`Swarm profile`,detail:`Coordination-friendly clustered coverage that keeps the miner flexible without fully flattening conviction.`};default:return{title:`Balanced profile`,detail:`Moderate concentration with practical skill upside and less volatility than aggressive mode.`}}}function v(e){let t=BigInt(String(e?.currentCapitalLockedLamports??`0`)),n=Number(e?.currentCapitalPendingCycleCount??0);if(e?.drainOnly&&(t>0n||n>0))return`Clearing`;if(!e?.running)return t>0n||n>0?`Clearing`:`Stopped`;switch(e.nextAction){case`participation`:return`Round open`;case`mining-crank`:return`Settling round`;case`finalize-epoch`:return`Finalizing epoch`;case`claim`:return`Claiming rewards`;case`recover`:return`Blocked`;default:return`Watching for round`}}function y(e){return e?.role===`admin`}function b(e,t){let n=String(t??``).trim();if(!n)return null;let r=e===`devnet`?`devnet`:e===`local`?`custom`:`mainnet-beta`;return r===`custom`?null:r===`mainnet-beta`?`https://solscan.io/tx/${encodeURIComponent(n)}`:`https://solscan.io/tx/${encodeURIComponent(n)}?cluster=${r}`}function x(e,t){let n=String(t??``).trim();if(!n)return null;let r=e===`devnet`?`devnet`:e===`local`?`custom`:`mainnet-beta`;return r===`custom`?null:r===`mainnet-beta`?`https://solscan.io/account/${encodeURIComponent(n)}`:`https://solscan.io/account/${encodeURIComponent(n)}?cluster=${r}`}function S(e,t){return b(e,t)}function C(e){let t=String(e??``).trim();if(!t)return null;let n=new Date(t);return Number.isNaN(n.getTime())?t:n.toLocaleString()}function w(e){let{status:t,readiness:n}=e;if(t?.blocked)return{title:`Blocked`,detail:t.blockedReason||`Mining is blocked right now.`};let r=n?.checks.find(e=>e.key===`fundingReady`),i=n?.checks.find(e=>e.key===`cycleEntryReady`),a=n?.checks.find(e=>e.key===`minerInitialized`),o=BigInt(String(n?.stake?.rewardOwed??`0`)),s=BigInt(String(n?.stake?.slashPenaltyOwed??`0`)),c=BigInt(String(t?.currentCapitalLockedLamports??`0`)),l=BigInt(String(t?.currentCapitalFreeLamports??`0`)),u=Number(t?.currentCapitalPendingCycleCount??0),d=Number(t?.currentCapitalFirstPendingCycleId??0),f=Number(t?.currentCapitalLastPendingCycleId??0),p=String(r?.detail??``).trim().toLowerCase();if(r&&!r.ok)return p.includes(`probe unavailable`)?{title:`Wallet balance unavailable`,detail:`RPC could not confirm miner-wallet SOL right now. Retry in a few seconds.`}:{title:`Need SOL`,detail:`Fund the miner wallet with SOL before mining.`};if(a&&!a.ok){let e=String(a.detail??``).trim().toLowerCase();return e.includes(`owner mismatch`)||e.includes(`invalid owner`)?{title:`Capital account invalid`,detail:`This wallet's SAT miner capital account has the wrong owner on this machine. Repair the wallet-scoped capital account before funding or changing commit.`}:{title:`Need capital`,detail:`Fund Mining capital to create the miner account and deposit SOL.`}}return i&&!i.ok?c>0n&&l<250000000n?{title:`Capital locked`,detail:`Most miner capital is still locked in pending cycles, so free capital is below the 0.25 SOL entry minimum.${u>0&&d>0&&f>=d?d===f?` Pending cycle: ${d}.`:` Pending cycles: ${d}-${f}.`:``}`}:{title:`Need free capital`,detail:`Deposit at least 0.25 SOL of free miner capital to enter the next cycle.`}:s>0n?{title:`Slash penalty owed`,detail:o>0n?`Outstanding slash penalties must be settled before rewards can be claimed.`:`Outstanding slash penalties must be settled before mining proceeds cleanly.`}:t?.claimableSatRaw?{title:`Claimable SAT`,detail:`Rewards are available to claim.`}:t?.lastClaimTxHash?{title:`Claim already settled`,detail:`The latest reward claim already executed. Current claimable SAT is 0 until a later cycle earns more.`}:{title:`Mining active`,detail:`No SAT claim is available yet.`}}function ee(e){switch(e?.recommendedAction){case`resolve-dispute`:return{title:`Dismissed dispute path`,detail:`Resolve the active dispute first. If the dispute is dismissed, claims should unblock without corrected-root republish.`};case`republish-roots`:return{title:`Upheld dispute path`,detail:`This epoch needs corrected-root republish after the dispute outcome. Claims stay blocked until the replacement roots are submitted.`};case`retry-claim`:return{title:`Retry claim path`,detail:`Recovery conditions are satisfied. Retry the claim using the selected epoch and payout settings.`};case`wait`:return{title:`Wait path`,detail:`No admin action is recommended right now. Monitor epoch state and worker/runtime status for the next change.`};default:return{title:`No epoch recovery action required`,detail:`No dispute or epoch-admin recovery workflow is active. Capital-lock backlog, if any, is surfaced in the main mining status.`}}}function te(e,t){let n=String(e??``).trim();if(!n)return`0 ${t}`;try{let e=t===`SOL`?c:l,r=BigInt(n),i=r/10n**e,a=(r%10n**e).toString().padStart(Number(e),`0`).replace(/0+$/,``);return a?`${i}.${a} ${t}`:`${i} ${t}`}catch{return`${n} ${t}`}}function T(e){return e.replace(/\.0+$/,``).replace(/(\.\d*?)0+$/,`$1`)}function E(e,t){let n=String(e??``).trim();if(!n)return`0`;try{let e=t===`SOL`?c:l,r=Number(n)/10**Number(e);if(!Number.isFinite(r))return`0`;let i=Math.abs(r);return T(t===`SAT`?i>=1e3?r.toFixed(1):i>=1?r.toFixed(2):r.toFixed(3):i>=1||i>=.01?r.toFixed(3):r.toFixed(5))}catch{return n}}function D(e,t){let n=String(e??``).trim();if(!n)return`0`;try{let e=BigInt(n);return`${e>0n?`+`:e<0n?`-`:``}${E((e<0n?-e:e).toString(),t)}`}catch{return n}}function ne(e,t){let n=String(e??``).trim();return n?D(n,t):`—`}function re(e,t){let n=String(e??``).trim();return n?E(n,t):`—`}function O(e){try{return BigInt(String(e??`0`))}catch{return 0n}}function ie(e){return O(e.readiness?.balances.solBalanceLamports??e.selectedWallet?.solBalanceLamports??e.status?.currentSolBalanceLamports??`0`)}function k(e){switch(String(e??``).trim()){case`settleCyclePage`:case`finalizeCycleSettlement`:case`scoreCyclePage`:case`distributeCyclePage`:return!0;default:return!1}}function A(e){switch(String(e??``).trim()){case`settleCyclePage`:case`finalizeCycleSettlement`:case`scoreCyclePage`:case`distributeCyclePage`:return!0;default:return!1}}function j(e,t){if(!A(e))return!1;let n=String(t??``).trim().toLowerCase();return n.includes(`invalid progress`)||n.includes(`already closed`)||n.includes(`cycle already closed on-chain`)||n.includes(`invalid account data`)&&(n.includes(`settle invalid progress`)||n.includes(`score invalid progress`)||n.includes(`distribute invalid progress`))}function ae(e,t){let n=String(e??``).trim();if(!n)return`0 ${t}`;try{let e=BigInt(n);return`${e>0n?`+`:e<0n?`-`:``}${te((e<0n?-e:e).toString(),t)}`}catch{return`${n} ${t}`}}function oe(e){return``}function M(e){let t=[{label:`Commit`,value:`${E(e.committedLamports,`SOL`)} SOL`},{label:`Earned`,value:`${E(e.totalSatEarnedRaw,`SAT`)} SAT`},{label:`Rebate`,value:`${E(e.totalRebateLamports,`SOL`)} SOL`}],n=se(e.strategyPreset);n&&t.push({label:`Strategy`,value:n});let r=ce(e.strategyExecution);r&&t.push({label:`Execution`,value:r});let i=typeof e.committedMinerCount==`number`&&Number.isFinite(e.committedMinerCount)?e.committedMinerCount:typeof e.participantCount==`number`&&Number.isFinite(e.participantCount)?e.participantCount:null;return typeof i==`number`&&i>0&&t.push({label:`Pool`,value:`${i} miner${i===1?``:`s`}`}),t}function N(e){let{outcome:t,actions:n}=e,r=n.filter(e=>e.status===`success`&&A(e.action)).length,i=n.filter(e=>e.status===`failure`&&j(e.action,e.message)).length,a=[];if((r>0||i>0)&&(a.push({label:`Keeper won`,value:String(r)}),i>0&&a.push({label:`Keeper lost`,value:String(i)})),!t)return a;let o=(O(t.netLiveCostLamports)-O(t.txFeeLamports)+O(t.totalRebateLamports)+O(t.keeperBountyLamports)).toString();return a.push({label:`Erosion`,value:`${E(t.erosionLamports??o,`SOL`)} SOL`}),a.push({label:`Miner rebate`,value:`${E(t.totalRebateLamports,`SOL`)} SOL`}),t.keeperBountyLamports!=null&&a.push({label:`Keeper bounty`,value:`${E(t.keeperBountyLamports,`SOL`)} SOL`}),t.submitFeeLamports!=null&&a.push({label:`Submit fee`,value:`${E(t.submitFeeLamports,`SOL`)} SOL`}),t.keeperFeeLamports!=null&&a.push({label:`Keeper fees`,value:`${E(t.keeperFeeLamports,`SOL`)} SOL`}),t.claimFeeLamports!=null&&a.push({label:`Claim fee`,value:`${E(t.claimFeeLamports,`SOL`)} SOL`}),O(t.otherFeeLamports)>0n&&a.push({label:`Other tx`,value:`${E(t.otherFeeLamports,`SOL`)} SOL`}),a.push({label:`Net SOL`,value:`${D(t.netLiveCostLamports,`SOL`)} SOL`}),a}function se(e){switch(e){case`spread`:return`Spread`;case`balanced`:return`Balanced`;case`conviction`:return`Conviction`;case`swarm`:return`Swarm`;case`top_k`:return`Top-K`;case`ranked`:return`Ranked`;case`adaptive`:return`Adaptive`;case`crowd_aware`:return`Crowd-aware`;case`safe_fallback`:return`Safe fallback`;default:return null}}function P(e){return se(e.strategyPreset)||(e.riskMode?se(o(e.riskMode))??`Unrecorded`:`Unrecorded`)}function ce(e){return e===`auto`?`Auto`:e===`deterministic`?`Deterministic`:null}function F(e,t=1000000n,n=1){let r=String(e??``).trim();if(!r)return`—`;try{let e=BigInt(r),i=Number(e)/Number(t)*100;return Number.isFinite(i)?`${T(i.toFixed(n))}%`:`—`}catch{return`—`}}function I(e){return String(e??``).trim().length>0}function le(e,t=1000000n,n=1){return`${e<0n?`-`:e>0n?`+`:``}${F((e<0n?-e:e).toString(),t,n)}`}function L(e){let t=Number.isInteger(e)?String(e):T(e.toFixed(1));return`${t} miner${t===`1`?``:`s`}`}function ue(e){let t=e?.liveCycleReport??null;return!t||typeof t.cycleId!=`number`?null:{cycleId:t.cycleId,committedLabel:te(t.committedLamports,`SOL`),unlockRatioLabel:F(t.unlockRatioFp),issuedMinerSatLabel:he({value:t.issuedMinerSatRaw,cycleStatus:t.cycleStatus,counterpartValue:t.unissuedMinerSatRaw,compact:!1}),earnedSatLabel:te(t.totalSatEarnedRaw,`SAT`),netSolCostLabel:ae(t.netLiveCostLamports,`SOL`)}}function de(e){if(e==null)return null;let t=typeof e==`number`?Math.floor(e):Number.parseInt(String(e),10);return Number.isFinite(t)&&t>=0?t:null}function R(e){if(!e)return!1;try{return BigInt(e)>0n}catch{return!1}}function fe(e){let t=O(e.committedLamports);if(t<=0n)return null;let n=O(String(e.requestedCommitLamports??`0`)),r=O(String(e.activeCommitLamports??`0`)),i=n>0n?n:r,a=O(String(e.minimumCommitLamports??`0`)),o=a>0n?a/2n:125000000n,s=O(e.previousCommittedLamports),c=O(String(e.capitalLockedLamports??`0`)),l=typeof e.pendingCycleCount==`number`&&Number.isFinite(e.pendingCycleCount)?e.pendingCycleCount:0,u=O(String(e.walletReserveShortfallLamports??`0`));return s>0n&&t>s+o&&c<=0n&&l<=0?{label:`Commit restored: capital unlocked`,title:`The latest submitted commit increased after pending/locked miner capital cleared back into free capital.`,tone:`success`}:i>0n&&t+o<i?c>0n||l>0?{label:`Commit reduced: locked capital clearing`,title:`The runtime submitted a smaller safe commit because previous-cycle capital is still locked until settlement and claim complete.`,tone:`warning`}:u>0n?{label:`Commit reduced: fee reserve`,title:`The runtime submitted a smaller safe commit because signer fee reserve was below target.`,tone:`warning`}:{label:`Commit reduced: free capital`,title:`The runtime submitted a smaller safe commit because currently free miner capital was below the saved target.`,tone:`warning`}:null}function pe(e){return e?.statusFresh===!1||e?.degraded===!0}function z(e){return e.readinessValue!=null&&(e.degraded||e.statusValue==null||e.statusValue===`0`)&&R(e.readinessValue)?e.readinessValue:e.statusValue??e.readinessValue??e.fallback??`0`}function me(e){return e.degraded&&e.readinessValue?e.readinessValue:e.statusValue??e.readinessValue??null}function he(e){if((e.cycleStatus??null)!==2){let t=R(e.value),n=R(e.counterpartValue);if(!t&&!n)return`—`}return e.value==null?`—`:e.compact?E(e.value,`SAT`):te(e.value,`SAT`)}function ge(e,t){let n=e?.liveCycleReport??null,r=typeof e?.currentCycleId==`number`?e.currentCycleId:typeof n?.cycleId==`number`?n.cycleId:null,i=n?.committedLamports??`0`,a=R(i),o=de(n?.validMinerCount),s=n?.totalCommittedLamports??(a?i:null);return[{label:`Current cycle`,value:typeof r==`number`?String(r):`—`},{label:`Miners now`,value:o==null?`—`:`${o}`},{label:`SOL in cycle`,value:s==null?`—`:E(s,`SOL`)},{label:`Your commit`,value:a?E(i,`SOL`):`—`},{label:`Last payout (SAT)`,value:re(t?.satRaw??null,`SAT`)},{label:`Last net cost (SOL)`,value:ne(t?.netLamports??null,`SOL`)}]}function _e(e){let t=typeof e?.latestSettledCycleId==`number`?e.latestSettledCycleId:null,n=e?.settledHistory??[];if(t!=null){let e=n.find(e=>e.cycleId===t);if(e)return{cycleId:t,satRaw:e.totalSatEarnedRaw??null,netLamports:e.netLiveCostLamports??null}}let r=n[0]??null;return{cycleId:typeof r?.cycleId==`number`?r.cycleId:null,satRaw:r?.totalSatEarnedRaw??null,netLamports:r?.netLiveCostLamports??null}}function ve(e){if(!e.length)return`—`;let t=[...e].filter(Number.isFinite).toSorted((e,t)=>e-t),n=t[0],r=t[t.length-1];return n===r?String(n):`${n}-${r}`}function ye(e){let t=typeof e?.missingCycleStartId==`number`?e.missingCycleStartId:null,n=typeof e?.missingCycleEndId==`number`?e.missingCycleEndId:null,r=typeof e?.missingCycleCount==`number`&&Number.isFinite(e.missingCycleCount)?e.missingCycleCount:0;if(r<=0||t==null||n==null||n<t)return null;let i=[typeof e?.latestSettledCycleId==`number`?e.latestSettledCycleId:null,typeof e?.latestSubmittedCycleId==`number`?e.latestSubmittedCycleId:null,(e?.pendingCycleIds??[]).reduce((e,t)=>typeof t==`number`&&Number.isFinite(t)&&(e==null||t>e)?t:e,null)].filter(e=>typeof e==`number`&&Number.isFinite(e)).reduce((e,t)=>e==null||t>e?t:e,null);return i!=null&&i>n?null:{startCycleId:t,endCycleId:n,count:r}}function be(e){let t=typeof e?.currentCycleId==`number`?e.currentCycleId:typeof e?.liveCycleReport?.cycleId==`number`?e.liveCycleReport.cycleId:null,n=typeof e?.latestSettledCycleId==`number`?e.latestSettledCycleId:null,r=typeof e?.latestSubmittedCycleId==`number`?e.latestSubmittedCycleId:null,i=typeof e?.exactPendingCycleId==`number`?e.exactPendingCycleId:null,a=String(e?.exactPendingStage??``).trim(),o=(e?.pendingCycleIds??[]).filter(e=>typeof e==`number`&&Number.isFinite(e)),s=ye(e),c=[];if(n!=null&&n!==t&&c.push(`Settled ${n}`),r!=null&&r!==t&&r!==n&&c.push(`Submitted ${r}`),o.length>0&&(i==null?c.push(`Pending ${ve(o)}`):c.push(`Pending ${i}${a?` (${a})`:``}`)),s){let t=e?.enabledWanted&&e.running&&!e.drainOnly?`Missed`:`Skipped`;c.push(`${t} ${s.startCycleId===s.endCycleId?s.startCycleId:`${s.startCycleId}-${s.endCycleId}`}`)}return c.length>0?c.join(` · `):null}function xe(e){if(!e?.enabledWanted||!e.running||!e.workers)return null;let t=new Date(e.snapshotAt??e.updatedAt??``).getTime();if(!Number.isFinite(t))return null;let n=[],r={roundWatcher:2e4,epoch:3e4,claim:4e4,recovery:5e4};for(let i of[`roundWatcher`,`epoch`,`claim`,`recovery`]){let a=e.workers[i];if(!a?.enabled)continue;let o=new Date(String(a.nextScheduledAt??``)).getTime(),s=new Date(String(a.lastRunAt??``)).getTime(),c=Number.isFinite(o)?t-o:Number.isFinite(s)?t-s:0;if(a.running||c<=r[i])continue;let l=[String(a.lastDetail??a.waitingReason??``).trim(),typeof a.lastSelectedCycleId==`number`?`cycle ${a.lastSelectedCycleId}${a.lastSelectedStage?` ${a.lastSelectedStage}`:``}`:``,(a.rpcTimeoutCount??0)>0?`${a.rpcTimeoutCount??0} timeout${a.rpcTimeoutCount===1?``:`s`}`:``].filter(Boolean).join(` · `);n.push(l?`${i} (${l})`:i)}return n.length>0?`Worker stale: ${n.join(` · `)}`:null}function Se(e){if(!e?.enabledWanted||!e.running)return null;let t=e.chainTime;if(!t||t.freshness===`fresh`||t.freshness===`stale`&&t.source!==`local-display`&&!t.lastError&&t.consecutiveFailures===0)return null;let n=t.source===`local-display`?`using local display time only`:t.lastError?t.lastError:`${t.consecutiveFailures} consecutive chain-time read failures`;return`Chain time ${t.freshness}: ${n}`}function Ce(e){let t=we(e.plannerWindow),n=e.rangeStart&&e.rangeEnd?`${e.rangeStart} to ${e.rangeEnd}`:null;return e.latestPoint?{summary:`${e.sampled?`Showing ${e.visibleCycleCount} sampled points from ${e.matchingCycleCount} completed cycles`:`Showing ${e.visibleCycleCount} completed cycles`} mined by this wallet in the ${t}${n?` · data present ${n}`:``}. Latest visible cycle ${e.latestPoint.cycleId} earned ${e.latestPoint.satLabel} SAT with ${e.latestPoint.netLabel} SOL net.`,windowLabel:t,dataRangeLabel:n}:{summary:`No completed cycles mined by this wallet were recorded in the ${t} yet.${e.currentCycleSubmitted&&typeof e.currentCycleId==`number`?` Current cycle ${e.currentCycleId} is already submitted and waiting for settlement, so it will not show here yet.`:``}`,windowLabel:t,dataRangeLabel:n}}function we(e){return e===`1h`?`last hour`:e===`24h`?`last 24 hours`:e===`30d`?`last 30 days`:e===`1y`?`last year`:`all recorded time`}function Te(e){return e===`1h`?3600*1e3:e===`24h`?1440*60*1e3:e===`30d`?720*60*60*1e3:e===`1y`?365*24*60*60*1e3:null}function Ee(e,t){if(e.length<=t)return e;let n=[],r=new Set;for(let i=0;i<t;i+=1){let a=Math.round(i*(e.length-1)/Math.max(1,t-1));r.has(a)||(r.add(a),n.push(e[a]))}return n}function De(e,t,n){if(!Number.isFinite(e)||!Number.isFinite(t)||!Number.isFinite(n)||t===n)return 50;let r=(e-t)/(n-t);return 100-Math.max(0,Math.min(100,r*100))}function Oe(e,t){let n=Array.isArray(e)?e.filter(e=>typeof e.cycleId==`number`):[];if(!n.length)return[];let r=n.slice().toSorted((e,t)=>Date.parse(String(e.recordedAt??``))-Date.parse(String(t.recordedAt??``))),i=typeof t?.maxPoints==`number`&&Number.isFinite(t.maxPoints)?Math.max(2,t.maxPoints):null,a=i==null?r:Ee(r,i),o=a.map(e=>Number(e.totalSatEarnedRaw??`0`)/10**Number(l)),s=a.map(e=>Number(e.netLiveCostLamports??`0`)/10**Number(c)),u=Math.min(...o),d=Math.max(...o),f=Math.min(...s),p=Math.max(...s);return a.map((e,t)=>{let n=o[t]??0,r=s[t]??0,i=ce(e.strategyExecution),c=P(e),l=typeof e.committedMinerCount!=`number`||!Number.isFinite(e.committedMinerCount)?null:`Pool: ${e.committedMinerCount} miner${e.committedMinerCount===1?``:`s`}`,m=(O(e.netLiveCostLamports)-O(e.txFeeLamports)+O(e.totalRebateLamports)+O(e.keeperBountyLamports)).toString();return{cycleId:e.cycleId,cycleLabel:String(e.cycleId).slice(-4),timeLabel:Ie(e.recordedAt),commitLabel:E(e.committedLamports,`SOL`),satLabel:E(e.totalSatEarnedRaw,`SAT`),netLabel:D(e.netLiveCostLamports,`SOL`),erosionLabel:E(e.erosionLamports??m,`SOL`),rebateLabel:E(e.totalRebateLamports,`SOL`),keeperBountyLabel:e.keeperBountyLamports==null?null:E(e.keeperBountyLamports,`SOL`),submitFeeLabel:e.submitFeeLamports==null?null:E(e.submitFeeLamports,`SOL`),keeperFeeLabel:e.keeperFeeLamports==null?null:E(e.keeperFeeLamports,`SOL`),claimFeeLabel:e.claimFeeLamports==null?null:E(e.claimFeeLamports,`SOL`),otherFeeLabel:O(e.otherFeeLamports)>0n?E(e.otherFeeLamports,`SOL`):null,strategyLabel:c,satValue:n,netValue:r,satY:De(n,u,d),netY:De(r,f,p),x:a.length===1?50:t/(a.length-1)*100,executionLabel:i??`—`,poolLabel:l}})}function ke(e,t){let n=Array.isArray(e)?e.filter(e=>typeof e.cycleId==`number`):[];if(!n.length)return null;let r=new Map,i=0n,a=0n,o=0n,s=0n,u=0,d=0,f=0n,p=0,m=0,h=0,g=0;for(let e of n){let t=P(e),n=r.get(t)??{strategyLabel:t,cycleCount:0,satRaw:0n,rebateLamports:0n,detRebateLamports:0n,perfRebateLamports:0n,detRebateSamples:0,perfRebateSamples:0,netLamports:0n,scoreDeltaFp:0n,skillScoreFp:0n,scoreSamples:0,crowdingRatioFp:0n,crowdingSamples:0,poolCount:0,poolSamples:0,autoCount:0,deterministicCount:0,taskCount:0,fallbackCount:0};n.cycleCount+=1;let c=O(e.totalSatEarnedRaw),l=O(e.totalRebateLamports),_=I(e.deterministicRebateLamports)||I(e.claimableDetRebateLamports)||I(e.claimedDetRebateLamports),v=I(e.performanceRebateLamports)||I(e.claimablePerfRebateLamports)||I(e.claimedPerfRebateLamports),y=I(e.deterministicRebateLamports)?O(e.deterministicRebateLamports):O(e.claimableDetRebateLamports)+O(e.claimedDetRebateLamports),b=I(e.performanceRebateLamports)?O(e.performanceRebateLamports):O(e.claimablePerfRebateLamports)+O(e.claimedPerfRebateLamports),x=O(e.netLiveCostLamports);n.satRaw+=c,n.rebateLamports+=l,_&&(n.detRebateLamports+=y,n.detRebateSamples+=1,o+=y,u+=1),v&&(n.perfRebateLamports+=b,n.perfRebateSamples+=1,s+=b,d+=1),n.netLamports+=x,i+=c,a+=l,f+=x,I(e.placementReturnFp)&&I(e.benchmarkReturnFp)&&(n.scoreDeltaFp+=O(e.placementReturnFp)-O(e.benchmarkReturnFp),n.skillScoreFp+=O(e.skillScoreFp),n.scoreSamples+=1),I(e.crowdingRatioFp)&&(n.crowdingRatioFp+=O(e.crowdingRatioFp),n.crowdingSamples+=1);let S=typeof e.committedMinerCount==`number`&&Number.isFinite(e.committedMinerCount)?e.committedMinerCount:typeof e.participantCount==`number`&&Number.isFinite(e.participantCount)?e.participantCount:null;S!=null&&(n.poolCount+=S,n.poolSamples+=1),e.strategyExecution===`auto`?(n.autoCount+=1,p+=1):(n.deterministicCount+=1,m+=1),(e.strategySource===`skill`||e.modelId)&&(n.taskCount+=1,h+=1),e.strategyFallbackUsed&&(n.fallbackCount+=1,g+=1),r.set(t,n)}let _=n.length,v=Array.from(r.values()).toSorted((e,t)=>t.cycleCount===e.cycleCount?Number(t.satRaw-e.satRaw):t.cycleCount-e.cycleCount).slice(0,Math.max(1,t?.maxRows??6)).map(e=>{let t=e.satRaw/BigInt(Math.max(1,e.cycleCount)),n=e.rebateLamports/BigInt(Math.max(1,e.cycleCount)),r=e.detRebateSamples>0?e.detRebateLamports/BigInt(e.detRebateSamples):0n,i=e.perfRebateSamples>0?e.perfRebateLamports/BigInt(e.perfRebateSamples):0n,a=e.netLamports/BigInt(Math.max(1,e.cycleCount)),o=e.scoreSamples>0?e.scoreDeltaFp/BigInt(e.scoreSamples):0n,s=e.scoreSamples>0?e.skillScoreFp/BigInt(e.scoreSamples):0n,u=e.crowdingSamples>0?e.crowdingRatioFp/BigInt(e.crowdingSamples):0n,d=e.poolSamples>0?e.poolCount/e.poolSamples:null,f=e.detRebateSamples>0||e.perfRebateSamples>0||e.scoreSamples>0||e.crowdingSamples>0||e.poolSamples>0,p=[`${e.strategyLabel}: ${e.cycleCount} cycle${e.cycleCount===1?``:`s`}`,`Avg SAT: ${E(t.toString(),`SAT`)} SAT`,`Avg rebate: ${E(n.toString(),`SOL`)} SOL`,`Avg deterministic rebate: ${e.detRebateSamples>0?`${E(r.toString(),`SOL`)} SOL`:`not recorded`}`,`Avg performance rebate: ${e.perfRebateSamples>0?`${E(i.toString(),`SOL`)} SOL`:`not recorded`}`,`Avg net: ${D(a.toString(),`SOL`)} SOL`,`Score edge: ${e.scoreSamples>0?le(o):`not recorded`}`,`Skill score: ${e.scoreSamples>0?F(s.toString()):`not recorded`}`,`Crowding: ${e.crowdingSamples>0?F(u.toString()):`not recorded`}`,`Pool: ${d==null?`not recorded`:`${L(d)} avg`}`,`Auto: ${e.autoCount}`,`Deterministic: ${e.deterministicCount}`,`Task/skill: ${e.taskCount}`,`Fallback: ${e.fallbackCount}`],m=e.detRebateSamples>0?E(r.toString(),`SOL`):`—`,h=e.perfRebateSamples>0?E(i.toString(),`SOL`):`—`,g=e.scoreSamples>0?le(o):`—`,v=e.scoreSamples>0?F(s.toString()):`—`,y=e.crowdingSamples>0?F(u.toString()):`—`,b=d==null?`—`:L(d),x=[...e.detRebateSamples>0&&r>0n?[`Det ${m}`]:[],...e.perfRebateSamples>0&&i>0n?[`Perf ${h}`]:[],...e.scoreSamples>0&&o!==0n?[`Edge ${g}`]:[],...e.scoreSamples>0&&s>0n?[`Skill ${v}`]:[],...e.crowdingSamples>0&&u>0n?[`Crowd ${y}`]:[],...d==null?[]:[`Pool ${b}`]],S=[...e.autoCount>0?[`Auto ${e.autoCount}`]:[],...e.deterministicCount>0?[`Det ${e.deterministicCount}`]:[],...e.taskCount>0?[`Task ${e.taskCount}`]:[],...e.fallbackCount>0?[`Fallback ${e.fallbackCount}`]:[]];return{strategyLabel:e.strategyLabel,cycleCount:e.cycleCount,sharePct:Math.round(e.cycleCount/Math.max(1,_)*100),avgSatValue:Number(t)/10**Number(l),avgRebateValue:Number(n)/10**Number(c),avgNetValue:Number(a)/10**Number(c),avgSkillEdgeValue:e.scoreSamples>0?Number(o):-1/0,avgSatLabel:E(t.toString(),`SAT`),avgRebateLabel:E(n.toString(),`SOL`),avgDetRebateLabel:m,avgPerfRebateLabel:h,avgNetLabel:D(a.toString(),`SOL`),avgSkillEdgeLabel:g,avgSkillLabel:v,avgCrowdingLabel:y,avgPoolLabel:b,hasCompetitionMetrics:f,competitionMetrics:x,executionMetrics:S,autoCount:e.autoCount,deterministicCount:e.deterministicCount,taskCount:e.taskCount,fallbackCount:e.fallbackCount,title:p.join(`
|
|
10
|
-
`)}}),y=e=>v.reduce((t,n)=>!t||e(n)>e(t)?n:t,null),b=v[0]??null,x=y(e=>e.avgSatValue),S=y(e=>e.avgRebateValue),C=y(e=>e.avgNetValue),w=v.filter(e=>Number.isFinite(e.avgSkillEdgeValue)).reduce((e,t)=>!e||t.avgSkillEdgeValue>e.avgSkillEdgeValue?t:e,null);return{summary:{totalCycles:_,totalSatLabel:E(i.toString(),`SAT`),totalRebateLabel:E(a.toString(),`SOL`),totalDetRebateLabel:u>0?E(o.toString(),`SOL`):`—`,totalPerfRebateLabel:d>0?E(s.toString(),`SOL`):`—`,rebateSplitRecorded:u>0||d>0,totalNetLabel:D(f.toString(),`SOL`),mostUsedLabel:b?.strategyLabel??`—`,mostUsedDetail:b?`${b.cycleCount} cycles · ${b.sharePct}%`:`No data`,bestSatLabel:x?.strategyLabel??`—`,bestSatDetail:x?`${x.avgSatLabel} SAT avg`:`No data`,bestRebateLabel:S?.strategyLabel??`—`,bestRebateDetail:S?`${S.avgRebateLabel} SOL avg`:`No data`,bestNetLabel:C?.strategyLabel??`—`,bestNetDetail:C?`${C.avgNetLabel} SOL avg`:`No data`,bestSkillLabel:w?.strategyLabel??`—`,bestSkillDetail:w&&w.hasCompetitionMetrics?`${w.avgSkillEdgeLabel} edge · ${w.avgSkillLabel} skill`:`No score data`,executionDetail:`Auto ${p} · Deterministic ${m}`,sourceDetail:`Task/skill ${h} · Fallback ${g}`},rows:v}}function
|
|
9
|
+
`}function d(e){return e?e.signerCapability===`background-ready`?{title:`Background-ready wallet`,detail:`This wallet is suitable for unattended SAT mining.`}:{title:`Interactive wallet`,detail:e.signerCapabilityReason??`This wallet may need operator approval for mining actions.`}:{title:`No wallet selected`,detail:`Create or import the dedicated Mining wallet in onboarding or with fased wallet setup --chain solana, then refresh.`}}function f(e){let t=String(e.attachedWalletId??``).trim(),n=String(e.status?.walletId??``).trim(),r=String(e.profile?.walletId??``).trim(),i=String(e.readiness?.selectedWalletId??``).trim(),a=e.wallets.find(e=>e.walletId===t),o=e.wallets.find(e=>e.walletId===n),s=e.wallets.find(e=>e.walletId===r),c=e.wallets.find(e=>e.walletId===i),l=a??o??s??c,u=!!n&&(!!e.status?.enabledWanted||!!e.status?.running||R(e.status?.currentCapitalFundedLamports)||(e.status?.recentActions?.length??0)>0||String(e.status?.validatorAuthority??``).trim().length>0),d=t||(n&&(u||n===r&&o)?n:``);return d?n&&n!==d?{attachedWallet:a,runtimeWallet:o,profileWallet:s,displayWallet:l,title:`Mining wallet state still settling`,detail:`Wallet registry and runtime status disagree. Refresh after the next SAT tick to confirm the singleton @wallet:mining history is live.`}:r&&r!==d?{attachedWallet:a,runtimeWallet:o,profileWallet:s,displayWallet:l,title:`Mining form differs from singleton wallet`,detail:`The mining form is still showing settings from another wallet. Save or refresh the profile if you want the form to match @wallet:mining.`}:{attachedWallet:a,runtimeWallet:o,profileWallet:s,displayWallet:l,title:`Singleton mining wallet`,detail:`SAT history, capital, and restart recovery follow @wallet:mining.`}:{attachedWallet:a,runtimeWallet:o,profileWallet:s,displayWallet:l,title:`Configure`,detail:``}}function p(e){let t=String(e.defaultWalletId??``).trim(),n=String(e.attachedWalletId||e.profile?.walletId||e.status?.walletId||e.readiness?.selectedWalletId||``).trim();return!t||!n||t!==n?null:{title:`Agent and Mining wallets must stay separate`,detail:`This singleton mining wallet is also the primary Agent wallet. Use Wallet to clear the Agent default, then select a dedicated Agent wallet before wallet work.`}}function m(e){return(e?.strategyExecution&&i(e.strategyMode)===e.strategyExecution?e.strategyExecution:i(e?.strategyMode))===`auto`?{title:`Auto strategy`,detail:`Auto strategy uses the Fased model/runtime stack to propose the cycle allocation and falls back to deterministic execution if the strategy step fails.`}:{title:`Deterministic strategy`,detail:`Deterministic strategy uses locked 25-bucket allocation arrays for the selected risk profile and does not require model inference.`}}function h(e){if(!e.length)return null;let t=e.reduce((e,t)=>({committedLamports:e.committedLamports+BigInt(t.committedLamports??`0`),totalSatEarnedRaw:e.totalSatEarnedRaw+BigInt(t.totalSatEarnedRaw??`0`),totalRebateLamports:e.totalRebateLamports+BigInt(t.totalRebateLamports??`0`),txFeeLamports:e.txFeeLamports+BigInt(t.txFeeLamports??`0`),netLiveCostLamports:e.netLiveCostLamports+BigInt(t.netLiveCostLamports??`0`),validParticipationCount:e.validParticipationCount+ +!!t.validParticipation}),{committedLamports:0n,totalSatEarnedRaw:0n,totalRebateLamports:0n,txFeeLamports:0n,netLiveCostLamports:0n,validParticipationCount:0}),n=BigInt(e.length);return{sampleCount:e.length,averageCommitLamports:(t.committedLamports/n).toString(),averageSatRaw:(t.totalSatEarnedRaw/n).toString(),averageRebateLamports:(t.totalRebateLamports/n).toString(),averageFeeLamports:(t.txFeeLamports/n).toString(),averageNetLiveCostLamports:(t.netLiveCostLamports/n).toString(),validRatePct:`${Math.round(t.validParticipationCount/e.length*100)}%`}}function g(e){let t=e.status?.lastStrategyDecision??null;return e.strategyExecution===`auto`?t?t.source===`skill`?{title:t.fallbackUsed?`Auto path with deterministic fallback`:`Auto path with model route`,detail:t.fallbackUsed?`The runtime attempted the model-guided path but fell back to deterministic execution for this cycle.`:`The runtime used the model-guided strategy path for this cycle.`,pathLabel:t.modelId?`Model route · ${t.modelId}`:`Model route`,fallbackLabel:t.fallbackUsed?`Fallback used`:`No fallback`}:{title:`Auto planner with deterministic strategy`,detail:`Auto sizing/planning is active, but the strategy engine resolved to the deterministic path for the latest cycle.`,pathLabel:`Deterministic strategy path`,fallbackLabel:`Planner only`}:{title:`Auto path waiting`,detail:`Auto mode is enabled. A live planner/strategy decision will appear once a cycle is evaluated.`,pathLabel:`No strategy decision yet`,fallbackLabel:`Pending`}:{title:`Deterministic path`,detail:`This run is using the locked deterministic allocation generator. No model step is required for cycle placement.`,pathLabel:`Deterministic engine`,fallbackLabel:`Not applicable`}}function _(e){let t=o(e?.riskMode??`balanced`);switch(e?.strategyPreset&&r(e.strategyPreset)===(e?.riskMode??`balanced`)?e.strategyPreset:t){case`spread`:return{title:`Spread profile`,detail:`Wider center-weighted coverage for steadier participation and lower concentration risk.`};case`conviction`:return{title:`Conviction profile`,detail:`Tighter concentration around strongest buckets for more variance and more upside if the read is right.`};case`top_k`:return{title:`Top-K Sparse profile`,detail:`High-conviction compiler that puts most weight into a few ranked buckets. Higher variance, stronger upside when the read is right.`};case`ranked`:return{title:`Ranked profile`,detail:`Compiler ranks buckets and converts the ranking into weighted exposure with a tail for safety.`};case`adaptive`:return{title:`Adaptive profile`,detail:`Compiler blends stable coverage with cycle-ranked opportunity so auto can improve without abandoning fallback safety.`};case`crowd_aware`:return{title:`Crowd-aware profile`,detail:`Compiler avoids over-concentrating in obvious buckets and keeps broader tail exposure when the cycle is crowded.`};case`safe_fallback`:return{title:`Safe fallback profile`,detail:`Balanced deterministic allocation for recovery, low confidence, or unstable recent results.`};case`swarm`:return{title:`Swarm profile`,detail:`Coordination-friendly clustered coverage that keeps the miner flexible without fully flattening conviction.`};default:return{title:`Balanced profile`,detail:`Moderate concentration with practical skill upside and less volatility than aggressive mode.`}}}function v(e){let t=BigInt(String(e?.currentCapitalLockedLamports??`0`)),n=Number(e?.currentCapitalPendingCycleCount??0);if(e?.drainOnly&&(t>0n||n>0))return`Clearing`;if(!e?.running)return t>0n||n>0?`Clearing`:`Stopped`;switch(e.nextAction){case`participation`:return`Round open`;case`mining-crank`:return`Settling round`;case`finalize-epoch`:return`Finalizing epoch`;case`claim`:return`Claiming rewards`;case`recover`:return`Blocked`;default:return`Watching for round`}}function y(e){return e?.role===`admin`}function b(e,t){let n=String(t??``).trim();if(!n)return null;let r=e===`devnet`?`devnet`:e===`local`?`custom`:`mainnet-beta`;return r===`custom`?null:r===`mainnet-beta`?`https://solscan.io/tx/${encodeURIComponent(n)}`:`https://solscan.io/tx/${encodeURIComponent(n)}?cluster=${r}`}function x(e,t){let n=String(t??``).trim();if(!n)return null;let r=e===`devnet`?`devnet`:e===`local`?`custom`:`mainnet-beta`;return r===`custom`?null:r===`mainnet-beta`?`https://solscan.io/account/${encodeURIComponent(n)}`:`https://solscan.io/account/${encodeURIComponent(n)}?cluster=${r}`}function S(e,t){return b(e,t)}function C(e){let t=String(e??``).trim();if(!t)return null;let n=new Date(t);return Number.isNaN(n.getTime())?t:n.toLocaleString()}function w(e){let{status:t,readiness:n}=e;if(t?.blocked)return{title:`Blocked`,detail:t.blockedReason||`Mining is blocked right now.`};let r=n?.checks.find(e=>e.key===`fundingReady`),i=n?.checks.find(e=>e.key===`cycleEntryReady`),a=n?.checks.find(e=>e.key===`minerInitialized`),o=BigInt(String(n?.stake?.rewardOwed??`0`)),s=BigInt(String(n?.stake?.slashPenaltyOwed??`0`)),c=BigInt(String(t?.currentCapitalLockedLamports??`0`)),l=BigInt(String(t?.currentCapitalFreeLamports??`0`)),u=Number(t?.currentCapitalPendingCycleCount??0),d=Number(t?.currentCapitalFirstPendingCycleId??0),f=Number(t?.currentCapitalLastPendingCycleId??0),p=String(r?.detail??``).trim().toLowerCase();if(r&&!r.ok)return p.includes(`probe unavailable`)?{title:`Wallet balance unavailable`,detail:`RPC could not confirm miner-wallet SOL right now. Retry in a few seconds.`}:{title:`Need SOL`,detail:`Fund the miner wallet with SOL before mining.`};if(a&&!a.ok){let e=String(a.detail??``).trim().toLowerCase();return e.includes(`owner mismatch`)||e.includes(`invalid owner`)?{title:`Capital account invalid`,detail:`This wallet's SAT miner capital account has the wrong owner on this machine. Repair the wallet-scoped capital account before funding or changing commit.`}:{title:`Need capital`,detail:`Fund Mining capital to create the miner account and deposit SOL.`}}return i&&!i.ok?c>0n&&l<250000000n?{title:`Capital locked`,detail:`Most miner capital is still locked in pending cycles, so free capital is below the 0.25 SOL entry minimum.${u>0&&d>0&&f>=d?d===f?` Pending cycle: ${d}.`:` Pending cycles: ${d}-${f}.`:``}`}:{title:`Need free capital`,detail:`Deposit at least 0.25 SOL of free miner capital to enter the next cycle.`}:s>0n?{title:`Slash penalty owed`,detail:o>0n?`Outstanding slash penalties must be settled before rewards can be claimed.`:`Outstanding slash penalties must be settled before mining proceeds cleanly.`}:t?.claimableSatRaw?{title:`Claimable SAT`,detail:`Rewards are available to claim.`}:t?.lastClaimTxHash?{title:`Claim already settled`,detail:`The latest reward claim already executed. Current claimable SAT is 0 until a later cycle earns more.`}:{title:`Mining active`,detail:`No SAT claim is available yet.`}}function ee(e){switch(e?.recommendedAction){case`resolve-dispute`:return{title:`Dismissed dispute path`,detail:`Resolve the active dispute first. If the dispute is dismissed, claims should unblock without corrected-root republish.`};case`republish-roots`:return{title:`Upheld dispute path`,detail:`This epoch needs corrected-root republish after the dispute outcome. Claims stay blocked until the replacement roots are submitted.`};case`retry-claim`:return{title:`Retry claim path`,detail:`Recovery conditions are satisfied. Retry the claim using the selected epoch and payout settings.`};case`wait`:return{title:`Wait path`,detail:`No admin action is recommended right now. Monitor epoch state and worker/runtime status for the next change.`};default:return{title:`No epoch recovery action required`,detail:`No dispute or epoch-admin recovery workflow is active. Capital-lock backlog, if any, is surfaced in the main mining status.`}}}function te(e,t){let n=String(e??``).trim();if(!n)return`0 ${t}`;try{let e=t===`SOL`?c:l,r=BigInt(n),i=r/10n**e,a=(r%10n**e).toString().padStart(Number(e),`0`).replace(/0+$/,``);return a?`${i}.${a} ${t}`:`${i} ${t}`}catch{return`${n} ${t}`}}function T(e){return e.replace(/\.0+$/,``).replace(/(\.\d*?)0+$/,`$1`)}function E(e,t){let n=String(e??``).trim();if(!n)return`0`;try{let e=t===`SOL`?c:l,r=Number(n)/10**Number(e);if(!Number.isFinite(r))return`0`;let i=Math.abs(r);return T(t===`SAT`?i>=1e3?r.toFixed(1):i>=1?r.toFixed(2):r.toFixed(3):i>=1||i>=.01?r.toFixed(3):r.toFixed(5))}catch{return n}}function D(e,t){let n=String(e??``).trim();if(!n)return`0`;try{let e=BigInt(n);return`${e>0n?`+`:e<0n?`-`:``}${E((e<0n?-e:e).toString(),t)}`}catch{return n}}function ne(e,t){let n=String(e??``).trim();return n?D(n,t):`—`}function re(e,t){let n=String(e??``).trim();return n?E(n,t):`—`}function O(e){try{return BigInt(String(e??`0`))}catch{return 0n}}function ie(e){return O(e.readiness?.balances.solBalanceLamports??e.selectedWallet?.solBalanceLamports??e.status?.currentSolBalanceLamports??`0`)}function k(e){switch(String(e??``).trim()){case`settleCyclePage`:case`finalizeCycleSettlement`:case`scoreCyclePage`:case`distributeCyclePage`:return!0;default:return!1}}function A(e){switch(String(e??``).trim()){case`settleCyclePage`:case`finalizeCycleSettlement`:case`scoreCyclePage`:case`distributeCyclePage`:return!0;default:return!1}}function j(e,t){if(!A(e))return!1;let n=String(t??``).trim().toLowerCase();return n.includes(`invalid progress`)||n.includes(`already closed`)||n.includes(`cycle already closed on-chain`)||n.includes(`invalid account data`)&&(n.includes(`settle invalid progress`)||n.includes(`score invalid progress`)||n.includes(`distribute invalid progress`))}function ae(e,t){let n=String(e??``).trim();if(!n)return`0 ${t}`;try{let e=BigInt(n);return`${e>0n?`+`:e<0n?`-`:``}${te((e<0n?-e:e).toString(),t)}`}catch{return`${n} ${t}`}}function oe(e){return``}function M(e){let t=[{label:`Commit`,value:`${E(e.committedLamports,`SOL`)} SOL`},{label:`Earned`,value:`${E(e.totalSatEarnedRaw,`SAT`)} SAT`},{label:`Rebate`,value:`${E(e.totalRebateLamports,`SOL`)} SOL`}],n=se(e.strategyPreset);n&&t.push({label:`Strategy`,value:n});let r=ce(e.strategyExecution);r&&t.push({label:`Execution`,value:r});let i=typeof e.committedMinerCount==`number`&&Number.isFinite(e.committedMinerCount)?e.committedMinerCount:typeof e.participantCount==`number`&&Number.isFinite(e.participantCount)?e.participantCount:null;return typeof i==`number`&&i>0&&t.push({label:`Pool`,value:`${i} miner${i===1?``:`s`}`}),t}function N(e){let{outcome:t,actions:n}=e,r=n.filter(e=>e.status===`success`&&A(e.action)).length,i=n.filter(e=>e.status===`failure`&&j(e.action,e.message)).length,a=[];if((r>0||i>0)&&(a.push({label:`Keeper won`,value:String(r)}),i>0&&a.push({label:`Keeper lost`,value:String(i)})),!t)return a;let o=(O(t.netLiveCostLamports)-O(t.txFeeLamports)+O(t.totalRebateLamports)+O(t.keeperBountyLamports)).toString();return a.push({label:`Erosion`,value:`${E(t.erosionLamports??o,`SOL`)} SOL`}),a.push({label:`Miner rebate`,value:`${E(t.totalRebateLamports,`SOL`)} SOL`}),t.keeperBountyLamports!=null&&a.push({label:`Keeper bounty`,value:`${E(t.keeperBountyLamports,`SOL`)} SOL`}),t.submitFeeLamports!=null&&a.push({label:`Submit fee`,value:`${E(t.submitFeeLamports,`SOL`)} SOL`}),t.keeperFeeLamports!=null&&a.push({label:`Keeper fees`,value:`${E(t.keeperFeeLamports,`SOL`)} SOL`}),t.claimFeeLamports!=null&&a.push({label:`Claim fee`,value:`${E(t.claimFeeLamports,`SOL`)} SOL`}),O(t.otherFeeLamports)>0n&&a.push({label:`Other tx`,value:`${E(t.otherFeeLamports,`SOL`)} SOL`}),a.push({label:`Net SOL`,value:`${D(t.netLiveCostLamports,`SOL`)} SOL`}),a}function se(e){switch(e){case`spread`:return`Spread`;case`balanced`:return`Balanced`;case`conviction`:return`Conviction`;case`swarm`:return`Swarm`;case`top_k`:return`Top-K`;case`ranked`:return`Ranked`;case`adaptive`:return`Adaptive`;case`crowd_aware`:return`Crowd-aware`;case`safe_fallback`:return`Safe fallback`;default:return null}}function P(e){return se(e.strategyPreset)||(e.riskMode?se(o(e.riskMode))??`Unrecorded`:`Unrecorded`)}function ce(e){return e===`auto`?`Auto`:e===`deterministic`?`Deterministic`:null}function F(e,t=1000000n,n=1){let r=String(e??``).trim();if(!r)return`—`;try{let e=BigInt(r),i=Number(e)/Number(t)*100;return Number.isFinite(i)?`${T(i.toFixed(n))}%`:`—`}catch{return`—`}}function I(e){return String(e??``).trim().length>0}function le(e,t=1000000n,n=1){return`${e<0n?`-`:e>0n?`+`:``}${F((e<0n?-e:e).toString(),t,n)}`}function L(e){let t=Number.isInteger(e)?String(e):T(e.toFixed(1));return`${t} miner${t===`1`?``:`s`}`}function ue(e){let t=e?.liveCycleReport??null;return!t||typeof t.cycleId!=`number`?null:{cycleId:t.cycleId,committedLabel:te(t.committedLamports,`SOL`),unlockRatioLabel:F(t.unlockRatioFp),issuedMinerSatLabel:me({value:t.issuedMinerSatRaw,cycleStatus:t.cycleStatus,counterpartValue:t.unissuedMinerSatRaw,compact:!1}),earnedSatLabel:te(t.totalSatEarnedRaw,`SAT`),netSolCostLabel:ae(t.netLiveCostLamports,`SOL`)}}function de(e){if(e==null)return null;let t=typeof e==`number`?Math.floor(e):Number.parseInt(String(e),10);return Number.isFinite(t)&&t>=0?t:null}function R(e){if(!e)return!1;try{return BigInt(e)>0n}catch{return!1}}function z(e){let t=O(e.committedLamports);if(t<=0n)return null;let n=O(String(e.requestedCommitLamports??`0`)),r=O(String(e.activeCommitLamports??`0`)),i=n>0n?n:r,a=O(String(e.minimumCommitLamports??`0`)),o=a>0n?a/2n:125000000n,s=O(e.previousCommittedLamports),c=O(String(e.capitalLockedLamports??`0`)),l=typeof e.pendingCycleCount==`number`&&Number.isFinite(e.pendingCycleCount)?e.pendingCycleCount:0,u=O(String(e.walletReserveShortfallLamports??`0`));return s>0n&&t>s+o&&c<=0n&&l<=0?{label:`Commit restored: capital unlocked`,title:`The latest submitted commit increased after pending/locked miner capital cleared back into free capital.`,tone:`success`}:i>0n&&t+o<i?c>0n||l>0?{label:`Commit reduced: locked capital clearing`,title:`The runtime submitted a smaller safe commit because previous-cycle capital is still locked until settlement and claim complete.`,tone:`warning`}:u>0n?{label:`Commit reduced: fee reserve`,title:`The runtime submitted a smaller safe commit because signer fee reserve was below target.`,tone:`warning`}:{label:`Commit reduced: free capital`,title:`The runtime submitted a smaller safe commit because currently free miner capital was below the saved target.`,tone:`warning`}:null}function fe(e){return e?.statusFresh===!1||e?.degraded===!0}function B(e){return e.readinessValue!=null&&(e.degraded||e.statusValue==null||e.statusValue===`0`)&&R(e.readinessValue)?e.readinessValue:e.statusValue??e.readinessValue??e.fallback??`0`}function pe(e){return e.degraded&&e.readinessValue?e.readinessValue:e.statusValue??e.readinessValue??null}function me(e){if((e.cycleStatus??null)!==2){let t=R(e.value),n=R(e.counterpartValue);if(!t&&!n)return`—`}return e.value==null?`—`:e.compact?E(e.value,`SAT`):te(e.value,`SAT`)}function he(e,t){let n=e?.liveCycleReport??null,r=typeof e?.currentCycleId==`number`?e.currentCycleId:typeof n?.cycleId==`number`?n.cycleId:null,i=n?.committedLamports??`0`,a=R(i),o=de(n?.validMinerCount),s=n?.totalCommittedLamports??(a?i:null);return[{label:`Current cycle`,value:typeof r==`number`?String(r):`—`},{label:`Miners now`,value:o==null?`—`:`${o}`},{label:`SOL in cycle`,value:s==null?`—`:E(s,`SOL`)},{label:`Your commit`,value:a?E(i,`SOL`):`—`},{label:`Last payout (SAT)`,value:re(t?.satRaw??null,`SAT`)},{label:`Last net cost (SOL)`,value:ne(t?.netLamports??null,`SOL`)}]}function ge(e){let t=typeof e?.latestSettledCycleId==`number`?e.latestSettledCycleId:null,n=e?.settledHistory??[];if(t!=null){let e=n.find(e=>e.cycleId===t);if(e)return{cycleId:t,satRaw:e.totalSatEarnedRaw??null,netLamports:e.netLiveCostLamports??null}}let r=n[0]??null;return{cycleId:typeof r?.cycleId==`number`?r.cycleId:null,satRaw:r?.totalSatEarnedRaw??null,netLamports:r?.netLiveCostLamports??null}}function _e(e){if(!e.length)return`—`;let t=[...e].filter(Number.isFinite).toSorted((e,t)=>e-t),n=t[0],r=t[t.length-1];return n===r?String(n):`${n}-${r}`}function ve(e){let t=typeof e?.missingCycleStartId==`number`?e.missingCycleStartId:null,n=typeof e?.missingCycleEndId==`number`?e.missingCycleEndId:null,r=typeof e?.missingCycleCount==`number`&&Number.isFinite(e.missingCycleCount)?e.missingCycleCount:0;if(r<=0||t==null||n==null||n<t)return null;let i=[typeof e?.latestSettledCycleId==`number`?e.latestSettledCycleId:null,typeof e?.latestSubmittedCycleId==`number`?e.latestSubmittedCycleId:null,(e?.pendingCycleIds??[]).reduce((e,t)=>typeof t==`number`&&Number.isFinite(t)&&(e==null||t>e)?t:e,null)].filter(e=>typeof e==`number`&&Number.isFinite(e)).reduce((e,t)=>e==null||t>e?t:e,null);return i!=null&&i>n?null:{startCycleId:t,endCycleId:n,count:r}}function ye(e){let t=typeof e?.currentCycleId==`number`?e.currentCycleId:typeof e?.liveCycleReport?.cycleId==`number`?e.liveCycleReport.cycleId:null,n=typeof e?.latestSettledCycleId==`number`?e.latestSettledCycleId:null,r=typeof e?.latestSubmittedCycleId==`number`?e.latestSubmittedCycleId:null,i=typeof e?.exactPendingCycleId==`number`?e.exactPendingCycleId:null,a=String(e?.exactPendingStage??``).trim(),o=(e?.pendingCycleIds??[]).filter(e=>typeof e==`number`&&Number.isFinite(e)),s=ve(e),c=[];if(n!=null&&n!==t&&c.push(`Settled ${n}`),r!=null&&r!==t&&r!==n&&c.push(`Submitted ${r}`),o.length>0&&(i==null?c.push(`Pending ${_e(o)}`):c.push(`Pending ${i}${a?` (${a})`:``}`)),s){let t=e?.enabledWanted&&e.running&&!e.drainOnly?`Missed`:`Skipped`;c.push(`${t} ${s.startCycleId===s.endCycleId?s.startCycleId:`${s.startCycleId}-${s.endCycleId}`}`)}return c.length>0?c.join(` · `):null}function be(e){if(!e?.enabledWanted||!e.running||!e.workers)return null;let t=new Date(e.snapshotAt??e.updatedAt??``).getTime();if(!Number.isFinite(t))return null;let n=[],r={roundWatcher:2e4,epoch:3e4,claim:4e4,recovery:5e4};for(let i of[`roundWatcher`,`epoch`,`claim`,`recovery`]){let a=e.workers[i];if(!a?.enabled)continue;let o=new Date(String(a.nextScheduledAt??``)).getTime(),s=new Date(String(a.lastRunAt??``)).getTime(),c=Number.isFinite(o)?t-o:Number.isFinite(s)?t-s:0;if(a.running||c<=r[i])continue;let l=[String(a.lastDetail??a.waitingReason??``).trim(),typeof a.lastSelectedCycleId==`number`?`cycle ${a.lastSelectedCycleId}${a.lastSelectedStage?` ${a.lastSelectedStage}`:``}`:``,(a.rpcTimeoutCount??0)>0?`${a.rpcTimeoutCount??0} timeout${a.rpcTimeoutCount===1?``:`s`}`:``].filter(Boolean).join(` · `);n.push(l?`${i} (${l})`:i)}return n.length>0?`Worker stale: ${n.join(` · `)}`:null}function xe(e){if(!e?.enabledWanted||!e.running)return null;let t=e.chainTime;if(!t||t.freshness===`fresh`||t.freshness===`stale`&&t.source!==`local-display`&&!t.lastError&&t.consecutiveFailures===0)return null;let n=t.source===`local-display`?`using local display time only`:t.lastError?t.lastError:`${t.consecutiveFailures} consecutive chain-time read failures`;return`Chain time ${t.freshness}: ${n}`}function Se(e){let t=Ce(e.plannerWindow),n=e.rangeStart&&e.rangeEnd?`${e.rangeStart} to ${e.rangeEnd}`:null;return e.latestPoint?{summary:`${e.sampled?`Showing ${e.visibleCycleCount} sampled points from ${e.matchingCycleCount} completed cycles`:`Showing ${e.visibleCycleCount} completed cycles`} mined by this wallet in the ${t}${n?` · data present ${n}`:``}. Latest visible cycle ${e.latestPoint.cycleId} earned ${e.latestPoint.satLabel} SAT with ${e.latestPoint.netLabel} SOL net.`,windowLabel:t,dataRangeLabel:n}:{summary:`No completed cycles mined by this wallet were recorded in the ${t} yet.${e.currentCycleSubmitted&&typeof e.currentCycleId==`number`?` Current cycle ${e.currentCycleId} is already submitted and waiting for settlement, so it will not show here yet.`:``}`,windowLabel:t,dataRangeLabel:n}}function Ce(e){return e===`1h`?`last hour`:e===`24h`?`last 24 hours`:e===`30d`?`last 30 days`:e===`1y`?`last year`:`all recorded time`}function we(e){return e===`1h`?3600*1e3:e===`24h`?1440*60*1e3:e===`30d`?720*60*60*1e3:e===`1y`?365*24*60*60*1e3:null}function Te(e,t){if(e.length<=t)return e;let n=[],r=new Set;for(let i=0;i<t;i+=1){let a=Math.round(i*(e.length-1)/Math.max(1,t-1));r.has(a)||(r.add(a),n.push(e[a]))}return n}function Ee(e,t,n){if(!Number.isFinite(e)||!Number.isFinite(t)||!Number.isFinite(n)||t===n)return 50;let r=(e-t)/(n-t);return 100-Math.max(0,Math.min(100,r*100))}function De(e,t){let n=Array.isArray(e)?e.filter(e=>typeof e.cycleId==`number`):[];if(!n.length)return[];let r=n.slice().toSorted((e,t)=>Date.parse(String(e.recordedAt??``))-Date.parse(String(t.recordedAt??``))),i=typeof t?.maxPoints==`number`&&Number.isFinite(t.maxPoints)?Math.max(2,t.maxPoints):null,a=i==null?r:Te(r,i),o=a.map(e=>Number(e.totalSatEarnedRaw??`0`)/10**Number(l)),s=a.map(e=>Number(e.netLiveCostLamports??`0`)/10**Number(c)),u=Math.min(...o),d=Math.max(...o),f=Math.min(...s),p=Math.max(...s);return a.map((e,t)=>{let n=o[t]??0,r=s[t]??0,i=ce(e.strategyExecution),c=P(e),l=typeof e.committedMinerCount!=`number`||!Number.isFinite(e.committedMinerCount)?null:`Pool: ${e.committedMinerCount} miner${e.committedMinerCount===1?``:`s`}`,m=(O(e.netLiveCostLamports)-O(e.txFeeLamports)+O(e.totalRebateLamports)+O(e.keeperBountyLamports)).toString();return{cycleId:e.cycleId,cycleLabel:String(e.cycleId).slice(-4),timeLabel:Fe(e.recordedAt),commitLabel:E(e.committedLamports,`SOL`),satLabel:E(e.totalSatEarnedRaw,`SAT`),netLabel:D(e.netLiveCostLamports,`SOL`),erosionLabel:E(e.erosionLamports??m,`SOL`),rebateLabel:E(e.totalRebateLamports,`SOL`),keeperBountyLabel:e.keeperBountyLamports==null?null:E(e.keeperBountyLamports,`SOL`),submitFeeLabel:e.submitFeeLamports==null?null:E(e.submitFeeLamports,`SOL`),keeperFeeLabel:e.keeperFeeLamports==null?null:E(e.keeperFeeLamports,`SOL`),claimFeeLabel:e.claimFeeLamports==null?null:E(e.claimFeeLamports,`SOL`),otherFeeLabel:O(e.otherFeeLamports)>0n?E(e.otherFeeLamports,`SOL`):null,strategyLabel:c,satValue:n,netValue:r,satY:Ee(n,u,d),netY:Ee(r,f,p),x:a.length===1?50:t/(a.length-1)*100,executionLabel:i??`—`,poolLabel:l}})}function Oe(e,t){let n=Array.isArray(e)?e.filter(e=>typeof e.cycleId==`number`):[];if(!n.length)return null;let r=new Map,i=0n,a=0n,o=0n,s=0n,u=0,d=0,f=0n,p=0,m=0,h=0,g=0;for(let e of n){let t=P(e),n=r.get(t)??{strategyLabel:t,cycleCount:0,satRaw:0n,rebateLamports:0n,detRebateLamports:0n,perfRebateLamports:0n,detRebateSamples:0,perfRebateSamples:0,netLamports:0n,scoreDeltaFp:0n,skillScoreFp:0n,scoreSamples:0,crowdingRatioFp:0n,crowdingSamples:0,poolCount:0,poolSamples:0,autoCount:0,deterministicCount:0,taskCount:0,fallbackCount:0};n.cycleCount+=1;let c=O(e.totalSatEarnedRaw),l=O(e.totalRebateLamports),_=I(e.deterministicRebateLamports)||I(e.claimableDetRebateLamports)||I(e.claimedDetRebateLamports),v=I(e.performanceRebateLamports)||I(e.claimablePerfRebateLamports)||I(e.claimedPerfRebateLamports),y=I(e.deterministicRebateLamports)?O(e.deterministicRebateLamports):O(e.claimableDetRebateLamports)+O(e.claimedDetRebateLamports),b=I(e.performanceRebateLamports)?O(e.performanceRebateLamports):O(e.claimablePerfRebateLamports)+O(e.claimedPerfRebateLamports),x=O(e.netLiveCostLamports);n.satRaw+=c,n.rebateLamports+=l,_&&(n.detRebateLamports+=y,n.detRebateSamples+=1,o+=y,u+=1),v&&(n.perfRebateLamports+=b,n.perfRebateSamples+=1,s+=b,d+=1),n.netLamports+=x,i+=c,a+=l,f+=x,I(e.placementReturnFp)&&I(e.benchmarkReturnFp)&&(n.scoreDeltaFp+=O(e.placementReturnFp)-O(e.benchmarkReturnFp),n.skillScoreFp+=O(e.skillScoreFp),n.scoreSamples+=1),I(e.crowdingRatioFp)&&(n.crowdingRatioFp+=O(e.crowdingRatioFp),n.crowdingSamples+=1);let S=typeof e.committedMinerCount==`number`&&Number.isFinite(e.committedMinerCount)?e.committedMinerCount:typeof e.participantCount==`number`&&Number.isFinite(e.participantCount)?e.participantCount:null;S!=null&&(n.poolCount+=S,n.poolSamples+=1),e.strategyExecution===`auto`?(n.autoCount+=1,p+=1):(n.deterministicCount+=1,m+=1),(e.strategySource===`skill`||e.modelId)&&(n.taskCount+=1,h+=1),e.strategyFallbackUsed&&(n.fallbackCount+=1,g+=1),r.set(t,n)}let _=n.length,v=Array.from(r.values()).toSorted((e,t)=>t.cycleCount===e.cycleCount?Number(t.satRaw-e.satRaw):t.cycleCount-e.cycleCount).slice(0,Math.max(1,t?.maxRows??6)).map(e=>{let t=e.satRaw/BigInt(Math.max(1,e.cycleCount)),n=e.rebateLamports/BigInt(Math.max(1,e.cycleCount)),r=e.detRebateSamples>0?e.detRebateLamports/BigInt(e.detRebateSamples):0n,i=e.perfRebateSamples>0?e.perfRebateLamports/BigInt(e.perfRebateSamples):0n,a=e.netLamports/BigInt(Math.max(1,e.cycleCount)),o=e.scoreSamples>0?e.scoreDeltaFp/BigInt(e.scoreSamples):0n,s=e.scoreSamples>0?e.skillScoreFp/BigInt(e.scoreSamples):0n,u=e.crowdingSamples>0?e.crowdingRatioFp/BigInt(e.crowdingSamples):0n,d=e.poolSamples>0?e.poolCount/e.poolSamples:null,f=e.detRebateSamples>0||e.perfRebateSamples>0||e.scoreSamples>0||e.crowdingSamples>0||e.poolSamples>0,p=[`${e.strategyLabel}: ${e.cycleCount} cycle${e.cycleCount===1?``:`s`}`,`Avg SAT: ${E(t.toString(),`SAT`)} SAT`,`Avg rebate: ${E(n.toString(),`SOL`)} SOL`,`Avg deterministic rebate: ${e.detRebateSamples>0?`${E(r.toString(),`SOL`)} SOL`:`not recorded`}`,`Avg performance rebate: ${e.perfRebateSamples>0?`${E(i.toString(),`SOL`)} SOL`:`not recorded`}`,`Avg net: ${D(a.toString(),`SOL`)} SOL`,`Score edge: ${e.scoreSamples>0?le(o):`not recorded`}`,`Skill score: ${e.scoreSamples>0?F(s.toString()):`not recorded`}`,`Crowding: ${e.crowdingSamples>0?F(u.toString()):`not recorded`}`,`Pool: ${d==null?`not recorded`:`${L(d)} avg`}`,`Auto: ${e.autoCount}`,`Deterministic: ${e.deterministicCount}`,`Task/skill: ${e.taskCount}`,`Fallback: ${e.fallbackCount}`],m=e.detRebateSamples>0?E(r.toString(),`SOL`):`—`,h=e.perfRebateSamples>0?E(i.toString(),`SOL`):`—`,g=e.scoreSamples>0?le(o):`—`,v=e.scoreSamples>0?F(s.toString()):`—`,y=e.crowdingSamples>0?F(u.toString()):`—`,b=d==null?`—`:L(d),x=[...e.detRebateSamples>0&&r>0n?[`Det ${m}`]:[],...e.perfRebateSamples>0&&i>0n?[`Perf ${h}`]:[],...e.scoreSamples>0&&o!==0n?[`Edge ${g}`]:[],...e.scoreSamples>0&&s>0n?[`Skill ${v}`]:[],...e.crowdingSamples>0&&u>0n?[`Crowd ${y}`]:[],...d==null?[]:[`Pool ${b}`]],S=[...e.autoCount>0?[`Auto ${e.autoCount}`]:[],...e.deterministicCount>0?[`Det ${e.deterministicCount}`]:[],...e.taskCount>0?[`Task ${e.taskCount}`]:[],...e.fallbackCount>0?[`Fallback ${e.fallbackCount}`]:[]];return{strategyLabel:e.strategyLabel,cycleCount:e.cycleCount,sharePct:Math.round(e.cycleCount/Math.max(1,_)*100),avgSatValue:Number(t)/10**Number(l),avgRebateValue:Number(n)/10**Number(c),avgNetValue:Number(a)/10**Number(c),avgSkillEdgeValue:e.scoreSamples>0?Number(o):-1/0,avgSatLabel:E(t.toString(),`SAT`),avgRebateLabel:E(n.toString(),`SOL`),avgDetRebateLabel:m,avgPerfRebateLabel:h,avgNetLabel:D(a.toString(),`SOL`),avgSkillEdgeLabel:g,avgSkillLabel:v,avgCrowdingLabel:y,avgPoolLabel:b,hasCompetitionMetrics:f,competitionMetrics:x,executionMetrics:S,autoCount:e.autoCount,deterministicCount:e.deterministicCount,taskCount:e.taskCount,fallbackCount:e.fallbackCount,title:p.join(`
|
|
10
|
+
`)}}),y=e=>v.reduce((t,n)=>!t||e(n)>e(t)?n:t,null),b=v[0]??null,x=y(e=>e.avgSatValue),S=y(e=>e.avgRebateValue),C=y(e=>e.avgNetValue),w=v.filter(e=>Number.isFinite(e.avgSkillEdgeValue)).reduce((e,t)=>!e||t.avgSkillEdgeValue>e.avgSkillEdgeValue?t:e,null);return{summary:{totalCycles:_,totalSatLabel:E(i.toString(),`SAT`),totalRebateLabel:E(a.toString(),`SOL`),totalDetRebateLabel:u>0?E(o.toString(),`SOL`):`—`,totalPerfRebateLabel:d>0?E(s.toString(),`SOL`):`—`,rebateSplitRecorded:u>0||d>0,totalNetLabel:D(f.toString(),`SOL`),mostUsedLabel:b?.strategyLabel??`—`,mostUsedDetail:b?`${b.cycleCount} cycles · ${b.sharePct}%`:`No data`,bestSatLabel:x?.strategyLabel??`—`,bestSatDetail:x?`${x.avgSatLabel} SAT avg`:`No data`,bestRebateLabel:S?.strategyLabel??`—`,bestRebateDetail:S?`${S.avgRebateLabel} SOL avg`:`No data`,bestNetLabel:C?.strategyLabel??`—`,bestNetDetail:C?`${C.avgNetLabel} SOL avg`:`No data`,bestSkillLabel:w?.strategyLabel??`—`,bestSkillDetail:w&&w.hasCompetitionMetrics?`${w.avgSkillEdgeLabel} edge · ${w.avgSkillLabel} skill`:`No score data`,executionDetail:`Auto ${p} · Deterministic ${m}`,sourceDetail:`Task/skill ${h} · Fallback ${g}`},rows:v}}function ke(e,t){let n=Array.isArray(e)?e.filter(e=>typeof e.cycleId==`number`):[];if(!n.length)return[];let r=Math.max(1,t?.maxPoints??8),i=n.slice(0,r).toReversed(),a=i.reduce((e,t)=>{try{let n=BigInt(t.committedLamports??`0`);return n>e?n:e}catch{return e}},0n),o=a>0n?a:1n;return i.map(e=>{let t=0n;try{t=BigInt(e.committedLamports??`0`)}catch{t=0n}let n=Number(t*100n/o),r=Math.max(18,Math.min(100,n||0)),i=e.strategyExecution===`auto`?e.strategyFallbackUsed?`fallback`:`auto`:`deterministic`;return{cycleId:e.cycleId,cycleLabel:String(e.cycleId).slice(-4),timeLabel:Fe(e.recordedAt),commitLabel:E(e.committedLamports,`SOL`),satLabel:E(e.totalSatEarnedRaw,`SAT`),netLabel:D(e.netLiveCostLamports,`SOL`),executionLabel:i===`auto`?`Auto`:i===`fallback`?`Auto -> deterministic`:`Deterministic`,rationaleLabel:e.plannerRationale?.trim()||e.strategyRationale?.trim()||`No rationale recorded`,barHeightPct:r,tone:i}})}function Ae(e,t,n){return e<t?t:e>n?n:e}function je(...e){return e.reduce((e,t)=>t>e?t:e,e[0]??0n)}function Me(e){let t=String(e??``).trim();if(!t)return`0.25`;try{let e=BigInt(t),n=e/1000000000n,r=(e%1000000000n).toString().padStart(9,`0`).replace(/0+$/,``).slice(0,4);return r?`${n}.${r}`:`${n}`}catch{return`0.25`}}function Ne(e){let t=String(e??``).trim();if(!t)return`0`;try{let e=BigInt(t),n=e/1000000000n,r=(e%1000000000n).toString().padStart(9,`0`).replace(/0+$/,``);return r?`${n}.${r}`:`${n}`}catch{return`0`}}function Pe(e){let t=String(e??``).trim();if(!t||!/^\d+(\.\d{0,9})?$/.test(t))return`250000000`;let[n,r=``]=t.split(`.`);return(BigInt(n||`0`)*1000000000n+BigInt((r+`000000000`).slice(0,9)||`0`)).toString()}function Fe(e){let t=String(e??``).trim();if(!t)return`—`;let n=new Date(t);return Number.isNaN(n.getTime())?t:n.toLocaleString([],{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}function Ie(e){let t=String(e??``).trim();if(!t)return`—`;let n=new Date(t);return Number.isNaN(n.getTime())?t:n.toLocaleString([],{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}function V(e){switch(String(e??``).trim()){case`claim`:case`claimCycleRewards`:case`claimCycleRewardsBatch`:case`closeResolvedCycleAccounts`:case`closeResolvedMinerCycleState`:return!0;default:return!1}}function Le(e){switch(String(e??``).trim()){case`initMinerCapital`:case`depositMinerCapital`:case`withdrawMinerCapital`:case`setActiveCommit`:return!0;default:return!1}}function Re(e){let t=String(e??``).trim();return Le(t)||t===`bootstrapRegistryReserve`?`wallet`:t===`startMining`||t===`stopMining`?`runtime`:`cycle`}function ze(e){let t=String(e??``).trim().toLowerCase();return t&&(t.includes(`capital`)||t.includes(`commit`)||t.includes(`withdraw`)||t.includes(`fund`)||t.includes(`wallet`)||t.includes(`reserve`)||t.includes(`fee`)||t.includes(`need sol`))?`wallet`:`runtime`}function Be(e){switch(e){case`wallet`:return`No recent wallet-side mining actions yet.`;case`cycle`:return`No recent cycle activity yet.`;default:return`No recent actions yet.`}}function Ve(e){return e.category===`wallet`?n.arrowUpDown:e.category===`cycle`?n.barChart:e.tone===`danger`?n.bug:e.tone===`success`?n.check:n.terminal}function H(r,i){let a=String(r??``).trim();return a?e`<a
|
|
11
11
|
class="mining-inline-link mining-inline-link--card"
|
|
12
12
|
href=${a}
|
|
13
13
|
target="_blank"
|
|
@@ -16,10 +16,10 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
16
16
|
aria-label=${i}
|
|
17
17
|
>
|
|
18
18
|
${n.externalLink}
|
|
19
|
-
</a>`:t}function
|
|
19
|
+
</a>`:t}function He(n){return e`<div class="mining-activity-card__step">
|
|
20
20
|
<div class="mining-activity-card__step-head">
|
|
21
21
|
<span class="mining-activity-card__step-label">${n.label}</span>
|
|
22
|
-
${
|
|
22
|
+
${H(n.href,`Open ${n.label}`)}
|
|
23
23
|
</div>
|
|
24
24
|
${n.detail?e`<div class="mining-activity-card__step-detail">${n.detail}</div>`:t}
|
|
25
25
|
</div>`}function Ue(r){let i=r.tone??`neutral`,a=r.summary.trim().length>0,o=r.steps??[],c=r.facts??[],l=r.proofFacts??[],u=String(r.detail??``).trim(),d=o.length,f=c.length+l.length+d+ +(u.length>0)>0,p=e`
|
|
@@ -30,11 +30,11 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
30
30
|
<div class="mining-activity-card__main">
|
|
31
31
|
<div class="mining-activity-card__topline">
|
|
32
32
|
<strong>${r.title}</strong>
|
|
33
|
-
<span>${
|
|
33
|
+
<span>${Ie(r.at)}</span>
|
|
34
34
|
</div>
|
|
35
35
|
${a?e`<div class="mining-activity-card__summary">${r.summary}</div>`:t}
|
|
36
36
|
</div>
|
|
37
|
-
${
|
|
37
|
+
${H(r.href,`Open ${r.title}`)}
|
|
38
38
|
${f?e`<span class="mining-activity-card__details-icon" aria-hidden="true">
|
|
39
39
|
${n.chevronRight}
|
|
40
40
|
</span>`:t}
|
|
@@ -54,7 +54,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
54
54
|
</div>`)}
|
|
55
55
|
</div>`:t}
|
|
56
56
|
${d>0?e`<div class="mining-activity-card__steps">
|
|
57
|
-
${o.map(e=>
|
|
57
|
+
${o.map(e=>He(e))}
|
|
58
58
|
</div>`:t}
|
|
59
59
|
</div>`:t;return f?e`<details
|
|
60
60
|
id=${s(`mining-activity`,r.key)}
|
|
@@ -69,10 +69,10 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
69
69
|
data-tone=${i}
|
|
70
70
|
>
|
|
71
71
|
${p}
|
|
72
|
-
</div>`}function We(e){return Ge(null,e)}function Ge(e,t){let n=String(t??``).trim();return n?j(e,n)?`Keeper step already completed elsewhere.`:n.includes(`rate limited`)?`RPC rate limited. Retry in a few seconds.`:n.includes(`Attempt to debit an account but found no record of a prior credit`)||n.includes(`AccountNotFound`)?`need SOL + miner setup`:(B(e)||n.includes(`sat_miner_capital`))&&(n.includes(`InvalidAccountOwner`)||n.includes(`Invalid account owner`)||n.includes(`invalid owner`))?`SAT miner capital account is invalid on this machine.`:Re(e)&&(n.includes(`InvalidAccountOwner`)||n.includes(`Invalid account owner`)||n.includes(`invalid owner`))?`Cycle already claimed and closed.`:n.replace(/\s+/g,` `):``}function Ke(e,t){let n=String(t??``).trim();return Re(e)&&(n.includes(`InvalidAccountOwner`)||n.includes(`Invalid account owner`)||n.includes(`invalid owner`)||n.includes(`already claimed and closed`))}function U(e){let t=String(e??``).trim();return t?t.includes(`invalid progress cycle=`)||t.includes(`settle invalid progress`)||t.includes(`score invalid progress`)||t.includes(`distribute invalid progress`)?`Shared step already completed elsewhere.`:t.includes(`rate limited`)?`RPC rate limited. Retry in a few seconds.`:t.includes(`Attempt to debit an account but found no record of a prior credit`)||t.includes(`AccountNotFound`)?`Wallet needs SOL and miner setup.`:t.includes(`sat_miner_capital`)&&(t.includes(`InvalidAccountOwner`)||t.includes(`Invalid account owner`)||t.includes(`invalid owner`))?`SAT miner capital account is invalid on this machine.`:t.includes(`sat_settle_cycle.rs:154`)&&(t.includes(`InvalidAccountOwner`)||t.includes(`Invalid account owner`)||t.includes(`invalid owner`))?`Cycle already closed on-chain.`:(t.includes(`claimCycleRewards`)||t.includes(`claimCycleRewardsBatch`)||t.includes(`closeResolvedCycleAccounts`)||t.includes(`closeResolvedMinerCycleState`)||t.includes(`already claimed and closed`))&&(t.includes(`InvalidAccountOwner`)||t.includes(`Invalid account owner`)||t.includes(`invalid owner`))?`Cycle was already claimed and closed.`:t.replace(/\s+/g,` `):``}function W(e){switch(String(e??``).trim()){case`openCycle`:return`Cycle opened`;case`initMinerCapital`:return`Capital initialized`;case`depositMinerCapital`:return`Fund submitted`;case`withdrawMinerCapital`:return`Withdraw submitted`;case`setActiveCommit`:return`Commit applied`;case`bootstrapRegistryReserve`:return`Cycle buffer topped up`;case`skipCycle`:return`Cycle skipped`;case`submitCycle`:return`Commit submitted`;case`submitParticipation`:return`Participation submitted`;case`settleCyclePage`:return`Settlement page processed`;case`finalizeCycleSettlement`:return`Settlement finalized`;case`scoreCyclePage`:return`Score page processed`;case`distributeCyclePage`:return`Distribution page processed`;case`miningCrank`:return`Round settled`;case`finalizeEpoch`:return`Epoch finalized`;case`claim`:case`claimCycleRewards`:case`claimCycleRewardsBatch`:return`Rewards claimed`;case`closeResolvedCycleAccounts`:case`closeResolvedMinerCycleState`:case`closeResolvedCycleArtifacts`:return`Cycle cleanup completed`;case`startMining`:return`Mining started`;case`stopMining`:return`Mining stopped`;default:return String(e??`—`).trim()||`—`}}function qe(e){let t=!!e.status?.enabledWanted,n=e.readiness?.checks.find(e=>e.key===`walletSelected`)?.ok,r=e.readiness?.checks.find(e=>e.key===`rpcReady`)?.ok,i=e.readiness?.checks.find(e=>e.key===`fundingReady`)?.ok,a=e.readiness?.checks.find(e=>e.key===`minerInitialized`)?.ok,o=String(e.readiness?.checks.find(e=>e.key===`minerInitialized`)?.detail??``).trim().toLowerCase(),s=e.readiness?.checks.find(e=>e.key===`cycleEntryReady`)?.ok,c=String(e.status?.workers?.roundWatcher?.waitingReason??``).trim(),l=BigInt(String(e.status?.currentCapitalLockedLamports??`0`)),u=Number(e.status?.currentCapitalPendingCycleCount??0),d=l>0n||u>0,f=e.status?.currentCycleId,p=e.status?.recentActions?.find(e=>e.status===`success`&&e.action===`submitCycle`&&typeof f==`number`&&e.cycleId===f);if(e.pendingAction===`starting`||e.actionBusy&&!e.status?.running)return{label:`Starting`,tone:`warn`,detail:`Starting miner workers.`};if(e.pendingAction===`stopping`)return{label:`Stopping`,tone:`warn`,detail:`Stopping miner workers.`};if(!t)return d?{label:`Clearing`,tone:`warn`,detail:`New cycle submits are stopped. Claim and recovery keep clearing locked capital.`}:n?r?i?a?s?e.readiness?.ok?{label:`Ready`,tone:`success`,detail:`Start mining.`}:{label:`Stopped`,tone:`neutral`,detail:e.readiness?.checks.find(e=>!e.ok)?.label??`Wallet is not mining right now.`}:BigInt(String(e.status?.currentCapitalFreeLamports??`0`))>0n&&l===0n&&u===0?{label:`Stopped`,tone:`warn`,detail:`Withdraw remaining dust or deposit to Mining.`}:{label:`Stopped`,tone:`neutral`,detail:`Deposit to Mining.`}:{label:`Stopped`,tone:`neutral`,detail:o.includes(`owner mismatch`)||o.includes(`invalid owner`)?`Repair mining capital.`:`Fund Mining.`}:{label:`Stopped`,tone:`neutral`,detail:`Deposit to Wallet.`}:{label:`Stopped`,tone:`neutral`,detail:`Set RPC.`}:{label:`Stopped`,tone:`neutral`,detail:`Configure`};let m=e.status?.currentCapitalLockedLamports!=null||e.status?.currentCapitalPendingCycleCount!=null;if(e.status?.drainOnly&&(!m||BigInt(String(e.status?.currentCapitalLockedLamports??`0`))>0n||Number(e.status?.currentCapitalPendingCycleCount??0)>0)){let t=e.status;return{label:`Clearing`,tone:t?.blocked?`danger`:`warn`,detail:U(t?.nextActionDetail)||`Releasing locked capital. New cycle submits are stopped.`}}if(e.status?.drainOnly){let t=BigInt(String(e.status.currentCapitalFreeLamports??`0`));return BigInt(String(e.status.currentCapitalFundedLamports??`0`))<=0n&&t<=0n?{label:`Stopped`,tone:`neutral`,detail:`No miner capital is funded. Wallet SOL is already outside mining capital.`}:{label:`Ready`,tone:`success`,detail:`Cycle capital is free. Start mining or withdraw.`}}return e.status?.blocked?{label:`Blocked`,tone:`danger`,detail:U(e.status.blockedReason)||`Mining needs attention.`}:p?{label:`Submitted`,tone:`success`,detail:`Submitted for cycle ${p.cycleId}. Waiting for settlement.`}:c.includes(`skipped`)?{label:`Skipped`,tone:`warn`,detail:c}:e.status?.nextAction===`mining-crank`||e.status?.workers?.epoch?.running?{label:`Settling`,tone:`success`,detail:e.status.nextActionDetail?.trim()||`Settling the prior cycle.`}:e.status?.nextAction===`claim`||e.status?.workers?.claim?.running?{label:`Claiming`,tone:`success`,detail:e.status.nextActionDetail?.trim()||`Claiming rewards.`}:{label:`Enabled`,tone:`success`,detail:e.status?.nextActionDetail?.trim()||`Miner is enabled and waiting.`}}function Je(e){let t=e.minerEnabled&&!e.drainOnly,n=e.actionBusy||t||e.startPrerequisitesBlocked;return{startBlocked:n,stopBlocked:e.actionBusy||!t,startLabel:e.pendingAction===`starting`?`Starting...`:e.drainOnly?`Resume`:`Start`,startTitle:e.drainOnly&&!n?`Resume new cycle submits. Claim and recovery keep clearing old cycles.`:e.startBlockedReason,stopLabel:`Stop`,stopTitle:e.drainOnly?`Already clearing. Use Resume to submit new cycles again.`:`Stop future submits. Already-submitted cycles still settle, distribute, and claim.`}}function Ye(e){return e?e.state===`synced`?{label:`Mainnet synced`,tone:`success`,detail:e.message}:e.state===`available`?{label:`Manifest ready`,tone:`warn`,detail:e.message}:e.state===`not_live`?{label:`Not live`,tone:`neutral`,detail:e.message}:{label:`Sync failed`,tone:`danger`,detail:e.error||e.message||`SAT mainnet manifest verification failed.`}:{label:`Manifest`,tone:`neutral`,detail:`Check official SAT mainnet manifest.`}}function Xe(e){let t=[{key:`wallet`,label:`Wallet`,detail:`Attach a dedicated mining wallet.`,ready:e.walletReady},{key:`fee`,label:`Fee SOL`,detail:`Keep wallet SOL available for fees, rent, submit, settlement, claim, and cleanup.`,ready:e.feeReady},{key:`capital`,label:`Capital`,detail:`Deposit SOL into miner capital. This is separate from wallet fee SOL.`,ready:e.capitalReady},{key:`commit`,label:`Active commit`,detail:`Use Update to put the active commit on-chain before starting.`,ready:e.activeCommitReady},{key:`start`,label:e.clearing?`Clearing`:`Start`,detail:e.clearing?`New submits are stopped while claim and recovery clear older cycle capital.`:`Start mining after wallet, fee SOL, capital, and active commit are ready.`,ready:e.started}],n=!1;return t.map(({ready:t,...r})=>t?{...r,state:`done`}:r.key===`start`&&e.clearing?{...r,state:`warn`}:n?{...r,state:`pending`}:(n=!0,{...r,state:`current`}))}function Ze(e){let t=e.recentActions??[],n=String(e.waitingReason??``).trim(),r=e.currentCycleId??null,i=typeof r==`number`&&t.some(e=>e.status===`success`&&e.action===`submitCycle`&&e.cycleId===r),a=e.minerEnabled&&n.includes(`skipped`)&&!i?{action:`skipCycle`,cycleId:r,txHash:null,status:`success`,message:n,at:e.skipTimestamp??new Date().toISOString()}:null;return[...a?[a]:[],...t]}function Qe(e){switch(String(e??``).trim()){case`initMinerCapital`:case`depositMinerCapital`:case`withdrawMinerCapital`:case`setActiveCommit`:case`submitCycle`:case`claim`:case`claimCycleRewardsBatch`:case`startMining`:case`stopMining`:case`skipCycle`:return!0;default:return!1}}function $e(e){return(e??[]).filter(e=>Qe(e.action))}function et(e,t){return t===`all`?e:e.filter(e=>e.category===t)}var tt=12;function nt(e,t){let n=[typeof e?.currentCycleId==`number`?e.currentCycleId:null,typeof e?.latestSettledCycleId==`number`?e.latestSettledCycleId:null,typeof e?.latestSubmittedCycleId==`number`?e.latestSubmittedCycleId:null,...(e?.pendingCycleIds??[]).filter(e=>typeof e==`number`&&Number.isFinite(e))??[],...[...t].filter(e=>Number.isFinite(e))].filter(e=>typeof e==`number`&&Number.isFinite(e));return n.length>0?Math.max(...n):null}function rt(e){let{status:t,cycleId:n,anchorCycleId:r,cycleResolved:i,actions:a}=e,o=new Set((t?.pendingCycleIds??[]).filter(e=>typeof e==`number`&&Number.isFinite(e)));return n===t?.currentCycleId||n===t?.latestSubmittedCycleId||n===t?.latestSettledCycleId||n===t?.exactPendingCycleId||o.has(n)||a.some(e=>e.status===`failure`)||!i||r==null?!0:n>=r-tt}function it(e){let t=[],n=e=>{let n=new Date(e.at).getTime();t.push({...e,atMs:Number.isFinite(n)?n:0})},r=e.status?.updatedAt??new Date().toISOString(),i=Math.max(0,...(e.recentActions??[]).filter(e=>e.status===`success`).map(e=>{let t=new Date(e.at).getTime();return Number.isFinite(t)?t:0})),a=Math.max(0,...[e.status?.workers?.roundWatcher?.lastFailureAt,e.status?.workers?.epoch?.lastFailureAt,e.status?.workers?.claim?.lastFailureAt,e.status?.workers?.recovery?.lastFailureAt].map(e=>{let t=new Date(String(e??``)).getTime();return Number.isFinite(t)?t:0}));if(e.error&&n({key:`error:${e.error}`,at:r,title:`Error`,summary:U(e.error),category:`runtime`,tone:`danger`}),e.message){let t=We(e.message);n({key:`message:${e.message}`,at:r,title:`Update`,summary:t,category:ze(t),tone:`success`})}e.status?.running===!1&&e.status?.bootstrapState===`waiting`&&e.status.bootstrapReason&&n({key:`bootstrap:${e.status.bootstrapReason}`,at:e.status.bootstrapCheckedAt??r,title:`Startup`,summary:e.status.bootstrapReason,category:`runtime`,tone:`info`});for(let t of e.notifications??[]){let e=We(t.message);n({key:`notification:${t.id}`,at:t.createdAt,title:t.level===`error`?`Error`:t.level===`warning`?`Warning`:t.level===`success`?`Update`:`Notice`,summary:e,category:ze(e),tone:t.level===`error`?`danger`:t.level===`success`?`success`:(t.level,`info`)})}if(e.status?.lastFailure&&!e.error&&!(i>0&&i>=a)){let t=U(e.status.lastFailure);t===`Cycle already closed on-chain.`||t===`Shared step already completed elsewhere.`||n({key:`failure:${e.status.lastFailure}`,at:e.status.workers?.roundWatcher?.lastFailureAt??e.status.workers?.epoch?.lastFailureAt??e.status.workers?.claim?.lastFailureAt??e.status.workers?.recovery?.lastFailureAt??r,title:`Runtime`,summary:t,category:`runtime`,tone:`danger`})}let o=ye(e.status),s=o?`Missed local cycles ${o.startCycleId===o.endCycleId?o.startCycleId:`${o.startCycleId}-${o.endCycleId}`}.`:null;s&&n({key:`gap:${o?.startCycleId}:${o?.endCycleId}`,at:r,title:`Gap`,summary:s,category:`runtime`,tone:`danger`});let c=xe(e.status);c&&n({key:`worker-stale:${c}`,at:r,title:`Runtime`,summary:c,category:`runtime`,tone:`danger`});let l=Se(e.status);l&&n({key:`chain-time:${l}`,at:r,title:`Runtime`,summary:l,category:`runtime`,tone:`danger`}),e.recoveryBlocked&&n({key:`recovery:${e.recoveryTitle}:${e.recoveryDetail}`,at:r,title:e.recoveryTitle,summary:e.recoveryDetail,category:`runtime`,tone:`danger`}),e.showBlockingNote&&n({key:`claimability:${e.claimabilityTitle}:${e.claimabilityDetail}`,at:r,title:e.claimabilityTitle,summary:e.claimabilityDetail,category:`runtime`,tone:`danger`}),e.signerRentShortfall&&e.signerRentShortfallMessage&&n({key:`wallet-sol:${e.signerRentShortfallMessage}`,at:r,title:`Need SOL`,summary:e.signerRentShortfallMessage,category:`wallet`,tone:`info`});let u=new Map;for(let t of e.settledHistory??[])u.set(t.cycleId,t);let d=new Map;for(let t of e.recentActions??[]){if(typeof t.cycleId==`number`){let e=d.get(t.cycleId)??[];e.push(t),d.set(t.cycleId,e);continue}let r=W(t.action);n({key:`action:${t.action}:${t.status}:${t.at}:${t.txHash??``}`,at:t.at,title:r,summary:r,category:V(t.action),detail:t.message?Ge(t.action,t.message):void 0,href:S(e.status?.network??e.profile?.network,t.txHash),tone:t.status===`failure`?`danger`:`info`})}let f=new Set([...u.keys(),...d.keys()]),p=nt(e.status,f),m=e.recentOnly!==!1;for(let t of f){let i=u.get(t)??null,a=(d.get(t)??[]).slice().toSorted((e,t)=>new Date(e.at).getTime()-new Date(t.at).getTime()),o=i!=null||a.some(e=>e.status===`success`&&(e.action===`claimCycleRewards`||e.action===`claimCycleRewardsBatch`||e.action===`closeResolvedCycleAccounts`)),s=a.filter(e=>!(o&&e.status===`failure`&&(Ke(e.action,e.message)||k(e.action)&&!j(e.action,e.message)))),c=s[s.length-1]??null;if(m&&!rt({status:e.status,cycleId:t,anchorCycleId:p,cycleResolved:o,actions:s}))continue;let l=s.map(n=>{let r=W(n.action),i=n.message?Ge(n.action,n.message):void 0,a=n.status===`success`&&A(n.action)?i?`Keeper step won. ${i}`:`Keeper step won.`:n.status===`failure`&&j(n.action,n.message)?`Keeper step already completed elsewhere.`:i;return{key:`step:${t}:${n.action}:${n.at}:${n.txHash??``}`,label:r,detail:a,href:S(e.status?.network??e.profile?.network,n.txHash)}}),f=s.some(e=>e.status===`failure`&&!j(e.action,e.message));n({key:`cycle:${t}:${i?.recordedAt??c?.at??r}`,at:c?.at??i?.recordedAt??r,title:`Cycle ${t}`,summary:i?oe(i):c?.action===`submitCycle`&&c.status===`success`?`Commit submitted. Waiting for settlement.`:W(c?.action),facts:i?M(i):void 0,proofFacts:N({outcome:i,actions:s}),category:`cycle`,detail:void 0,steps:l.length?l:void 0,tone:f?`danger`:i?`success`:`info`})}return t.toSorted((e,t)=>t.atMs-e.atMs)}function at(e){let t=String(e??``).trim();return!t||t.length<10?t||`—`:`${t.slice(0,4)}…${t.slice(-4)}`}function ot(e){let t=String(e??``).trim();!t||typeof navigator>`u`||!navigator.clipboard||navigator.clipboard.writeText(t).catch(()=>{})}function st(e,t,n){if(typeof document>`u`)return;let r=document.getElementById(e);if(!r)return;let i=r.dataset.revealed===`true`;r.textContent=i?t:n,r.dataset.revealed=i?`false`:`true`}function ct(e){if(typeof document>`u`)return;let t=document.getElementById(e);if(t){if(typeof t.showModal==`function`){t.showModal();return}t.setAttribute(`open`,`true`)}}function lt(e){if(typeof document>`u`)return;let t=document.getElementById(e);if(t){if(typeof t.close==`function`){t.close();return}t.removeAttribute(`open`)}}function G(t,n){return e`<div class="mining-share-proof__row">
|
|
72
|
+
</div>`}function We(e){return Ge(null,e)}function Ge(e,t){let n=String(t??``).trim();return n?j(e,n)?`Keeper step already completed elsewhere.`:n.includes(`rate limited`)?`RPC rate limited. Retry in a few seconds.`:n.includes(`Attempt to debit an account but found no record of a prior credit`)||n.includes(`AccountNotFound`)?`need SOL + miner setup`:(Le(e)||n.includes(`sat_miner_capital`))&&(n.includes(`InvalidAccountOwner`)||n.includes(`Invalid account owner`)||n.includes(`invalid owner`))?`SAT miner capital account is invalid on this machine.`:V(e)&&(n.includes(`InvalidAccountOwner`)||n.includes(`Invalid account owner`)||n.includes(`invalid owner`))?`Cycle already claimed and closed.`:n.replace(/\s+/g,` `):``}function U(e,t){let n=String(t??``).trim();return V(e)&&(n.includes(`InvalidAccountOwner`)||n.includes(`Invalid account owner`)||n.includes(`invalid owner`)||n.includes(`already claimed and closed`))}function W(e){let t=String(e??``).trim();return t?t.includes(`invalid progress cycle=`)||t.includes(`settle invalid progress`)||t.includes(`score invalid progress`)||t.includes(`distribute invalid progress`)?`Shared step already completed elsewhere.`:t.includes(`rate limited`)?`RPC rate limited. Retry in a few seconds.`:t.includes(`Attempt to debit an account but found no record of a prior credit`)||t.includes(`AccountNotFound`)?`Wallet needs SOL and miner setup.`:t.includes(`sat_miner_capital`)&&(t.includes(`InvalidAccountOwner`)||t.includes(`Invalid account owner`)||t.includes(`invalid owner`))?`SAT miner capital account is invalid on this machine.`:t.includes(`sat_settle_cycle.rs:154`)&&(t.includes(`InvalidAccountOwner`)||t.includes(`Invalid account owner`)||t.includes(`invalid owner`))?`Cycle already closed on-chain.`:(t.includes(`claimCycleRewards`)||t.includes(`claimCycleRewardsBatch`)||t.includes(`closeResolvedCycleAccounts`)||t.includes(`closeResolvedMinerCycleState`)||t.includes(`already claimed and closed`))&&(t.includes(`InvalidAccountOwner`)||t.includes(`Invalid account owner`)||t.includes(`invalid owner`))?`Cycle was already claimed and closed.`:t.replace(/\s+/g,` `):``}function Ke(e){switch(String(e??``).trim()){case`openCycle`:return`Cycle opened`;case`initMinerCapital`:return`Capital initialized`;case`depositMinerCapital`:return`Fund submitted`;case`withdrawMinerCapital`:return`Withdraw submitted`;case`setActiveCommit`:return`Commit applied`;case`bootstrapRegistryReserve`:return`Cycle buffer topped up`;case`skipCycle`:return`Cycle skipped`;case`submitCycle`:return`Commit submitted`;case`submitParticipation`:return`Participation submitted`;case`settleCyclePage`:return`Settlement page processed`;case`finalizeCycleSettlement`:return`Settlement finalized`;case`scoreCyclePage`:return`Score page processed`;case`distributeCyclePage`:return`Distribution page processed`;case`miningCrank`:return`Round settled`;case`finalizeEpoch`:return`Epoch finalized`;case`claim`:case`claimCycleRewards`:case`claimCycleRewardsBatch`:return`Rewards claimed`;case`closeResolvedCycleAccounts`:case`closeResolvedMinerCycleState`:case`closeResolvedCycleArtifacts`:return`Cycle cleanup completed`;case`startMining`:return`Mining started`;case`stopMining`:return`Mining stopped`;default:return String(e??`—`).trim()||`—`}}function qe(e){let t=!!e.status?.enabledWanted,n=e.readiness?.checks.find(e=>e.key===`walletSelected`)?.ok,r=e.readiness?.checks.find(e=>e.key===`rpcReady`)?.ok,i=e.readiness?.checks.find(e=>e.key===`fundingReady`)?.ok,a=e.readiness?.checks.find(e=>e.key===`minerInitialized`)?.ok,o=String(e.readiness?.checks.find(e=>e.key===`minerInitialized`)?.detail??``).trim().toLowerCase(),s=e.readiness?.checks.find(e=>e.key===`cycleEntryReady`)?.ok,c=String(e.status?.workers?.roundWatcher?.waitingReason??``).trim(),l=BigInt(String(e.status?.currentCapitalLockedLamports??`0`)),u=Number(e.status?.currentCapitalPendingCycleCount??0),d=l>0n||u>0,f=e.status?.currentCycleId,p=e.status?.recentActions?.find(e=>e.status===`success`&&e.action===`submitCycle`&&typeof f==`number`&&e.cycleId===f);if(e.pendingAction===`starting`||e.actionBusy&&!e.status?.running)return{label:`Starting`,tone:`warn`,detail:`Starting miner workers.`};if(e.pendingAction===`stopping`)return{label:`Stopping`,tone:`warn`,detail:`Stopping miner workers.`};if(!t)return d?{label:`Clearing`,tone:`warn`,detail:`New cycle submits are stopped. Claim and recovery keep clearing locked capital.`}:n?r?i?a?s?e.readiness?.ok?{label:`Ready`,tone:`success`,detail:`Start mining.`}:{label:`Stopped`,tone:`neutral`,detail:e.readiness?.checks.find(e=>!e.ok)?.label??`Wallet is not mining right now.`}:BigInt(String(e.status?.currentCapitalFreeLamports??`0`))>0n&&l===0n&&u===0?{label:`Stopped`,tone:`warn`,detail:`Withdraw remaining dust or deposit to Mining.`}:{label:`Stopped`,tone:`neutral`,detail:`Deposit to Mining.`}:{label:`Stopped`,tone:`neutral`,detail:o.includes(`owner mismatch`)||o.includes(`invalid owner`)?`Repair mining capital.`:`Fund Mining.`}:{label:`Stopped`,tone:`neutral`,detail:`Deposit to Wallet.`}:{label:`Stopped`,tone:`neutral`,detail:`Set RPC.`}:{label:`Stopped`,tone:`neutral`,detail:`Configure`};let m=e.status?.currentCapitalLockedLamports!=null||e.status?.currentCapitalPendingCycleCount!=null;if(e.status?.drainOnly&&(!m||BigInt(String(e.status?.currentCapitalLockedLamports??`0`))>0n||Number(e.status?.currentCapitalPendingCycleCount??0)>0)){let t=e.status;return{label:`Clearing`,tone:t?.blocked?`danger`:`warn`,detail:W(t?.nextActionDetail)||`Releasing locked capital. New cycle submits are stopped.`}}if(e.status?.drainOnly){let t=BigInt(String(e.status.currentCapitalFreeLamports??`0`));return BigInt(String(e.status.currentCapitalFundedLamports??`0`))<=0n&&t<=0n?{label:`Stopped`,tone:`neutral`,detail:`No miner capital is funded. Wallet SOL is already outside mining capital.`}:{label:`Ready`,tone:`success`,detail:`Cycle capital is free. Start mining or withdraw.`}}return e.status?.blocked?{label:`Blocked`,tone:`danger`,detail:W(e.status.blockedReason)||`Mining needs attention.`}:p?{label:`Submitted`,tone:`success`,detail:`Submitted for cycle ${p.cycleId}. Waiting for settlement.`}:c.includes(`skipped`)?{label:`Skipped`,tone:`warn`,detail:c}:e.status?.nextAction===`mining-crank`||e.status?.workers?.epoch?.running?{label:`Settling`,tone:`success`,detail:e.status.nextActionDetail?.trim()||`Settling the prior cycle.`}:e.status?.nextAction===`claim`||e.status?.workers?.claim?.running?{label:`Claiming`,tone:`success`,detail:e.status.nextActionDetail?.trim()||`Claiming rewards.`}:{label:`Enabled`,tone:`success`,detail:e.status?.nextActionDetail?.trim()||`Miner is enabled and waiting.`}}function Je(e){let t=e.minerEnabled&&!e.drainOnly,n=e.actionBusy||t||e.startPrerequisitesBlocked;return{startBlocked:n,stopBlocked:e.actionBusy||!t,startLabel:e.pendingAction===`starting`?`Starting...`:e.drainOnly?`Resume`:`Start`,startTitle:e.drainOnly&&!n?`Resume new cycle submits. Claim and recovery keep clearing old cycles.`:e.startBlockedReason,stopLabel:`Stop`,stopTitle:e.drainOnly?`Already clearing. Use Resume to submit new cycles again.`:`Stop future submits. Already-submitted cycles still settle, distribute, and claim.`}}function Ye(e){return e?e.state===`synced`?{label:`Mainnet synced`,tone:`success`,detail:e.message}:e.state===`available`?{label:`Manifest ready`,tone:`warn`,detail:e.message}:e.state===`not_live`?{label:`Not live`,tone:`neutral`,detail:e.message}:{label:`Sync failed`,tone:`danger`,detail:e.error||e.message||`SAT mainnet manifest verification failed.`}:{label:`Manifest`,tone:`neutral`,detail:`Check official SAT mainnet manifest.`}}function Xe(e){let t=[{key:`wallet`,label:`Wallet`,detail:`Attach a dedicated mining wallet.`,ready:e.walletReady},{key:`fee`,label:`Fee SOL`,detail:`Keep wallet SOL available for fees, rent, submit, settlement, claim, and cleanup.`,ready:e.feeReady},{key:`capital`,label:`Capital`,detail:`Deposit SOL into miner capital. This is separate from wallet fee SOL.`,ready:e.capitalReady},{key:`commit`,label:`Active commit`,detail:`Use Update to put the active commit on-chain before starting.`,ready:e.activeCommitReady},{key:`start`,label:e.clearing?`Clearing`:`Start`,detail:e.clearing?`New submits are stopped while claim and recovery clear older cycle capital.`:`Start mining after wallet, fee SOL, capital, and active commit are ready.`,ready:e.started}],n=!1;return t.map(({ready:t,...r})=>t?{...r,state:`done`}:r.key===`start`&&e.clearing?{...r,state:`warn`}:n?{...r,state:`pending`}:(n=!0,{...r,state:`current`}))}function Ze(e){let t=e.recentActions??[],n=String(e.waitingReason??``).trim(),r=e.currentCycleId??null,i=typeof r==`number`&&t.some(e=>e.status===`success`&&e.action===`submitCycle`&&e.cycleId===r),a=e.minerEnabled&&n.includes(`skipped`)&&!i?{action:`skipCycle`,cycleId:r,txHash:null,status:`success`,message:n,at:e.skipTimestamp??new Date().toISOString()}:null;return[...a?[a]:[],...t]}function Qe(e){switch(String(e??``).trim()){case`initMinerCapital`:case`depositMinerCapital`:case`withdrawMinerCapital`:case`setActiveCommit`:case`submitCycle`:case`claim`:case`claimCycleRewardsBatch`:case`startMining`:case`stopMining`:case`skipCycle`:return!0;default:return!1}}function $e(e){return(e??[]).filter(e=>Qe(e.action))}function et(e,t){return t===`all`?e:e.filter(e=>e.category===t)}var tt=12;function G(e,t){let n=[typeof e?.currentCycleId==`number`?e.currentCycleId:null,typeof e?.latestSettledCycleId==`number`?e.latestSettledCycleId:null,typeof e?.latestSubmittedCycleId==`number`?e.latestSubmittedCycleId:null,...(e?.pendingCycleIds??[]).filter(e=>typeof e==`number`&&Number.isFinite(e))??[],...[...t].filter(e=>Number.isFinite(e))].filter(e=>typeof e==`number`&&Number.isFinite(e));return n.length>0?Math.max(...n):null}function nt(e){let{status:t,cycleId:n,anchorCycleId:r,cycleResolved:i,actions:a}=e,o=new Set((t?.pendingCycleIds??[]).filter(e=>typeof e==`number`&&Number.isFinite(e)));return n===t?.currentCycleId||n===t?.latestSubmittedCycleId||n===t?.latestSettledCycleId||n===t?.exactPendingCycleId||o.has(n)||a.some(e=>e.status===`failure`)||!i||r==null?!0:n>=r-tt}function rt(e){let t=[],n=e=>{let n=new Date(e.at).getTime();t.push({...e,atMs:Number.isFinite(n)?n:0})},r=e.status?.updatedAt??new Date().toISOString(),i=Math.max(0,...(e.recentActions??[]).filter(e=>e.status===`success`).map(e=>{let t=new Date(e.at).getTime();return Number.isFinite(t)?t:0})),a=Math.max(0,...[e.status?.workers?.roundWatcher?.lastFailureAt,e.status?.workers?.epoch?.lastFailureAt,e.status?.workers?.claim?.lastFailureAt,e.status?.workers?.recovery?.lastFailureAt].map(e=>{let t=new Date(String(e??``)).getTime();return Number.isFinite(t)?t:0}));if(e.error&&n({key:`error:${e.error}`,at:r,title:`Error`,summary:W(e.error),category:`runtime`,tone:`danger`}),e.message){let t=We(e.message);n({key:`message:${e.message}`,at:r,title:`Update`,summary:t,category:ze(t),tone:`success`})}e.status?.running===!1&&e.status?.bootstrapState===`waiting`&&e.status.bootstrapReason&&n({key:`bootstrap:${e.status.bootstrapReason}`,at:e.status.bootstrapCheckedAt??r,title:`Startup`,summary:e.status.bootstrapReason,category:`runtime`,tone:`info`});for(let t of e.notifications??[]){let e=We(t.message);n({key:`notification:${t.id}`,at:t.createdAt,title:t.level===`error`?`Error`:t.level===`warning`?`Warning`:t.level===`success`?`Update`:`Notice`,summary:e,category:ze(e),tone:t.level===`error`?`danger`:t.level===`success`?`success`:(t.level,`info`)})}if(e.status?.lastFailure&&!e.error&&!(i>0&&i>=a)){let t=W(e.status.lastFailure);t===`Cycle already closed on-chain.`||t===`Shared step already completed elsewhere.`||n({key:`failure:${e.status.lastFailure}`,at:e.status.workers?.roundWatcher?.lastFailureAt??e.status.workers?.epoch?.lastFailureAt??e.status.workers?.claim?.lastFailureAt??e.status.workers?.recovery?.lastFailureAt??r,title:`Runtime`,summary:t,category:`runtime`,tone:`danger`})}let o=ve(e.status),s=o?`Missed local cycles ${o.startCycleId===o.endCycleId?o.startCycleId:`${o.startCycleId}-${o.endCycleId}`}.`:null;s&&n({key:`gap:${o?.startCycleId}:${o?.endCycleId}`,at:r,title:`Gap`,summary:s,category:`runtime`,tone:`danger`});let c=be(e.status);c&&n({key:`worker-stale:${c}`,at:r,title:`Runtime`,summary:c,category:`runtime`,tone:`danger`});let l=xe(e.status);l&&n({key:`chain-time:${l}`,at:r,title:`Runtime`,summary:l,category:`runtime`,tone:`danger`}),e.recoveryBlocked&&n({key:`recovery:${e.recoveryTitle}:${e.recoveryDetail}`,at:r,title:e.recoveryTitle,summary:e.recoveryDetail,category:`runtime`,tone:`danger`}),e.showBlockingNote&&n({key:`claimability:${e.claimabilityTitle}:${e.claimabilityDetail}`,at:r,title:e.claimabilityTitle,summary:e.claimabilityDetail,category:`runtime`,tone:`danger`}),e.signerRentShortfall&&e.signerRentShortfallMessage&&n({key:`wallet-sol:${e.signerRentShortfallMessage}`,at:r,title:`Need SOL`,summary:e.signerRentShortfallMessage,category:`wallet`,tone:`info`});let u=new Map;for(let t of e.settledHistory??[])u.set(t.cycleId,t);let d=new Map;for(let t of e.recentActions??[]){if(typeof t.cycleId==`number`){let e=d.get(t.cycleId)??[];e.push(t),d.set(t.cycleId,e);continue}let r=Ke(t.action);n({key:`action:${t.action}:${t.status}:${t.at}:${t.txHash??``}`,at:t.at,title:r,summary:r,category:Re(t.action),detail:t.message?Ge(t.action,t.message):void 0,href:S(e.status?.network??e.profile?.network,t.txHash),tone:t.status===`failure`?`danger`:`info`})}let f=new Set([...u.keys(),...d.keys()]),p=G(e.status,f),m=e.recentOnly!==!1;for(let t of f){let i=u.get(t)??null,a=(d.get(t)??[]).slice().toSorted((e,t)=>new Date(e.at).getTime()-new Date(t.at).getTime()),o=i!=null||a.some(e=>e.status===`success`&&(e.action===`claimCycleRewards`||e.action===`claimCycleRewardsBatch`||e.action===`closeResolvedCycleAccounts`)),s=a.filter(e=>!(o&&e.status===`failure`&&(U(e.action,e.message)||k(e.action)&&!j(e.action,e.message)))),c=s[s.length-1]??null;if(m&&!nt({status:e.status,cycleId:t,anchorCycleId:p,cycleResolved:o,actions:s}))continue;let l=s.map(n=>{let r=Ke(n.action),i=n.message?Ge(n.action,n.message):void 0,a=n.status===`success`&&A(n.action)?i?`Keeper step won. ${i}`:`Keeper step won.`:n.status===`failure`&&j(n.action,n.message)?`Keeper step already completed elsewhere.`:i;return{key:`step:${t}:${n.action}:${n.at}:${n.txHash??``}`,label:r,detail:a,href:S(e.status?.network??e.profile?.network,n.txHash)}}),f=s.some(e=>e.status===`failure`&&!j(e.action,e.message));n({key:`cycle:${t}:${i?.recordedAt??c?.at??r}`,at:c?.at??i?.recordedAt??r,title:`Cycle ${t}`,summary:i?oe(i):c?.action===`submitCycle`&&c.status===`success`?`Commit submitted. Waiting for settlement.`:Ke(c?.action),facts:i?M(i):void 0,proofFacts:N({outcome:i,actions:s}),category:`cycle`,detail:void 0,steps:l.length?l:void 0,tone:f?`danger`:i?`success`:`info`})}return t.toSorted((e,t)=>t.atMs-e.atMs)}function it(e){let t=String(e??``).trim();return!t||t.length<10?t||`—`:`${t.slice(0,4)}…${t.slice(-4)}`}function at(e){let t=String(e??``).trim();!t||typeof navigator>`u`||!navigator.clipboard||navigator.clipboard.writeText(t).catch(()=>{})}function ot(e,t,n){if(typeof document>`u`)return;let r=document.getElementById(e);if(!r)return;let i=r.dataset.revealed===`true`;r.textContent=i?t:n,r.dataset.revealed=i?`false`:`true`}function st(e){if(typeof document>`u`)return;let t=document.getElementById(e);if(t){if(typeof t.showModal==`function`){t.showModal();return}t.setAttribute(`open`,`true`)}}function ct(e){if(typeof document>`u`)return;let t=document.getElementById(e);if(t){if(typeof t.close==`function`){t.close();return}t.removeAttribute(`open`)}}function K(t,n){return e`<div class="mining-share-proof__row">
|
|
73
73
|
<span>${t}</span>
|
|
74
74
|
<strong>${n}</strong>
|
|
75
|
-
</div>`}function
|
|
75
|
+
</div>`}function lt(n,r){let i=n.length?n:[];return i.length?e`
|
|
76
76
|
<div class="mining-share-proof__chart">
|
|
77
77
|
<div class="mining-share-proof__chart-head">
|
|
78
78
|
<div>
|
|
@@ -92,7 +92,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
92
92
|
<span>${r.cycles} cycles</span>
|
|
93
93
|
</div>
|
|
94
94
|
</div>
|
|
95
|
-
`:t}function
|
|
95
|
+
`:t}function ut(e,t){if(!Array.isArray(e)||!e.length)return null;let n=Date.now(),r=0,i=0n,a=0n,o=0n,s=0n,c=new Map;for(let l of e){let e=new Date(l.recordedAt??``).getTime();if(!Number.isFinite(e)||n-e>t)continue;r+=1,i+=O(l.totalSatEarnedRaw),a+=O(l.committedLamports),o+=O(l.totalRebateLamports),s+=O(l.netLiveCostLamports);let u=P(l)??`Unknown`;c.set(u,(c.get(u)??0)+1)}if(!r)return null;let l=Array.from(c.entries()).toSorted((e,t)=>t[1]-e[1])[0]??null,u=a/BigInt(Math.max(1,r));return{cycles:r,satLabel:E(i.toString(),`SAT`),rebateLabel:E(o.toString(),`SOL`),netLabel:D(s.toString(),`SOL`),avgCapitalLabel:E(u.toString(),`SOL`),mostUsedStrategyLabel:l?`${l[0]} · ${l[1]} cycles`:`—`}}function dt(r){let s=r.profile,c=r.status,l=f({wallets:r.wallets,attachedWalletId:r.attachedWalletId,profile:s,readiness:r.readiness,status:c}),d=l.displayWallet,m=d?.address??String(c?.validatorAuthority??r.readiness?.selectedAddress??``).trim()??``,h=`mining-wallet-address`,g=c?.recentActions??[],_=c?.settledHistory??[],v=r.history?.outcomes??_,y=qe({status:c,readiness:r.readiness,actionBusy:r.actionBusy,pendingAction:r.pendingAction}),b=Ye(r.mainnetSync),S=fe(c),C=ie({status:c,readiness:r.readiness,selectedWallet:d}),te=B({statusValue:c?.currentSatBalanceRaw,readinessValue:r.readiness?.balances.satBalanceRaw,degraded:S}),T=pe({statusValue:c?.currentCapitalAddress,readinessValue:r.readiness?.balances.minerCapitalAddress,degraded:S}),D=x(c?.network??s?.network,T),O=BigInt(B({statusValue:c?.currentCapitalFundedLamports,readinessValue:r.readiness?.balances.minerCapitalFundedLamports,degraded:S})),k=BigInt(B({statusValue:c?.currentCapitalLockedLamports,readinessValue:r.readiness?.balances.minerCapitalLockedLamports,degraded:S})),A=BigInt(B({statusValue:c?.currentCapitalFreeLamports,readinessValue:r.readiness?.balances.minerCapitalFreeLamports,degraded:S})),j=BigInt(B({statusValue:c?.activeCommitLamports,readinessValue:r.readiness?.balances.minerCapitalActiveCommitLamports,degraded:S,fallback:s?.funding.commitLamports??`250000000`})),ae=BigInt(c?.signerSpendableLamports??`0`),oe=BigInt(c?.nextSubmitCycleSignerLamports??`0`),M=a({walletLamports:C,capitalFundedLamports:O,capitalFreeLamports:A,capitalLockedLamports:k,pendingCycleCount:c?.currentCapitalPendingCycleCount,signerReserveLamports:c?.signerReserveLamports,signerFeeBufferLamports:c?.signerFeeBufferLamports}),N=M.minimumCommitLamports,P=BigInt(s?.funding.commitLamports??`250000000`),F=je(N,O>0n?O:M.safeMaxCommitLamports,P),I=Ae(P,N,F),le=s?.strategyPreset??c?.strategyPreset??o(s?.riskMode??c?.riskMode??`balanced`),L=s?.strategyExecution??c?.strategyExecution??i(s?.strategyMode??c?.strategyMode),ue=s?.cycleCadence??c?.cycleCadence??1,z=c?.runway?.estimatedDays??null,me=z==null?`Runway unavailable`:z<1?`~${Math.max(0,z*24).toFixed(1)} hours`:`~${z<10?z.toFixed(1):Math.floor(z)} days`,he=L===`auto`,_e=he?`Target max`:`Target`,ve=O>0n,ye=he?`Target max`:`Target`,be=O>=N,xe=O>0n&&O<N&&k===0n&&Number(c?.currentCapitalPendingCycleCount??0)===0,Ce=P>=N&&M.safeMaxCommitLamports>=N,Te=P>=N&&P>M.safeMaxCommitLamports,Ee=E(M.minimumCapitalForMinimumCommitLamports.toString(),`SOL`),ke=M.safeMaxCommitLamports>=N?`${E(M.safeMaxCommitLamports.toString(),`SOL`)} SOL`:`<0.25 SOL`,Fe=P>=N&&M.safeMaxCommitLamports>=N&&P>M.safeMaxCommitLamports,Ie=Number(c?.currentCapitalPendingCycleCount??0),V=Number(c?.claimBacklog?.total??0),Le=Number(c?.claimBacklog?.ready??0),Re=Number(c?.claimBacklog?.failed??0),ze=Number(c?.claimBatchCycles??5),Ve=V>0?`${V} pending claim ${V===1?`cycle`:`cycles`} · ${Le} ready · ${Re} failed retry · batch ${ze}`:`No durable claim backlog. Auto-claim batch cap is ${ze}.`,H=`Your desired commit when capital is free.`,He=M.safeMaxCommitLamports>=N?`Maximum commit usable now.`:`Need ${Ee} SOL free.`,We=ve?`Commit currently stored on-chain.`:`Saved commit preference. No miner capital is funded, so this is not stuck or withdrawable SOL.`,Ge=ve?`${ke} usable now · ${E(k.toString(),`SOL`)} SOL locked${Fe?` · target kept for later`:``}`:`No miner capital funded · ${E(j.toString(),`SOL`)} SOL stored preference`,U=p({defaultWalletId:r.defaultWalletId,attachedWalletId:r.attachedWalletId,profile:s,readiness:r.readiness,status:c}),W=r.readiness?.checks.find(e=>e.key===`walletSelected`)?.ok,Ke=r.readiness?.checks.find(e=>e.key===`rpcReady`)?.ok,Qe=r.readiness?.checks.find(e=>e.key===`fundingReady`)?.ok,tt=xe?`Withdraw ${E(A.toString(),`SOL`)} SOL or deposit enough to reach the 0.25 SOL miner-capital eligibility minimum.`:`Deposit to Mining.`,G=r.actionBusy,nt=oe>0n&&ae<oe,dt=G||A<=0n,ft=A>0n?`Withdraw free miner capital back to the mining wallet.`:`No free miner capital is available to withdraw. Wallet SOL is already in the wallet.`,pt=ge(c),mt=!!c?.drainOnly&&k===0n&&Ie===0,q=!!c?.enabledWanted&&!mt,ht=!!c?.drainOnly&&!mt,gt=String(c?.workers?.roundWatcher?.waitingReason??``).trim(),_t=Ze({minerEnabled:q,currentCycleId:c?.currentCycleId,waitingReason:gt,skipTimestamp:c?.workers?.roundWatcher?.lastRunAt??c?.updatedAt??new Date().toISOString(),recentActions:g}).slice(0,5),vt=[{value:`spread`,label:`Spread`,detail:`Smoother coverage and lower concentration risk.`},{value:`balanced`,label:`Balanced`,detail:`Moderate concentration with practical upside.`},{value:`conviction`,label:`Conviction`,detail:`Tighter concentration for higher variance.`},{value:`swarm`,label:`Swarm`,detail:`Flexible clustered coverage for active mining.`},{value:`top_k`,label:`Top-K`,detail:`Sparse high-conviction allocation into the strongest ranked buckets.`},{value:`ranked`,label:`Ranked`,detail:`Rank buckets, then convert rank into weighted exposure with a tail.`},{value:`adaptive`,label:`Adaptive`,detail:`Blend stable coverage with cycle-ranked opportunity and fallback safety.`},{value:`crowd_aware`,label:`Crowd-aware`,detail:`Reduce obvious crowding exposure with wider tail coverage.`},{value:`safe_fallback`,label:`Safe fallback`,detail:`Known-good balanced allocation for recovery or low-confidence operation.`}],yt=[{value:`deterministic`,label:`Deterministic`,detail:`Use the fixed allocator every cycle. Safer default until auto has enough live evidence.`},{value:`auto`,label:`Auto`,detail:`Let the planner size and choose the cycle path, with deterministic fallback when needed.`}],bt=s?.network===`mainnet-beta`&&r.mainnetSync?.state!==`synced`,xt=U!=null||bt||!r.readiness?.ok||!s?.walletId||!W||!Ke||!Qe||!be||!Ce,St=U?U.title:bt?b.detail:!s?.walletId||!W?`Create or select Mining wallet.`:Ke?Qe?r.readiness?.ok?be?Ce?q?`Mining is already enabled`:`Start mining.`:Te?M.safeMaxCommitLamports>=N?`Target can be saved. Safe commit is ${E(M.safeMaxCommitLamports.toString(),`SOL`)} SOL.`:`Need ${Ee} SOL free for the 0.25 SOL eligibility commit plus collateral.`:`Lower target.`:tt:y.detail:`Deposit to Wallet.`:`Set RPC.`,Ct=Xe({walletReady:!!(s?.walletId&&W&&!U),feeReady:!!(Qe&&!nt),capitalReady:be,activeCommitReady:j>=N&&j<=M.safeMaxCommitLamports,started:q,clearing:ht||y.label===`Clearing`}),J=Je({actionBusy:r.actionBusy,pendingAction:r.pendingAction,minerEnabled:q,drainOnly:ht,startPrerequisitesBlocked:xt,startBlockedReason:St}),wt=J.startBlocked,Tt=!q&&y.label===`Ready`&&wt?{label:`Stopped`,tone:U?`danger`:`warn`,detail:St}:!q&&xe?{label:`Stopped`,tone:`warn`,detail:tt}:y,Et=!q&&y.label===`Ready`&&wt&&St!==`Start mining.`&&!U,Dt=ee(r.recovery),Y=w({profile:s,status:c,readiness:r.readiness}),Ot=Y.title===`Blocked`||Y.title===`Need SOL`||Y.title===`Need capital`||Y.title===`Capital locked`||Y.title===`Need free capital`,kt=Date.now(),At=we(r.plannerWindow),jt=we(r.activityWindow),Mt=r.history?v:_.filter(e=>{let t=new Date(e.recordedAt??``).getTime();return Number.isFinite(t)&&(At==null||kt-t<=At)}),X=De(Mt),Z=Oe(Mt),Nt=!!c?.recentActions?.some(e=>e.status===`success`&&e.action===`submitCycle`&&typeof c.currentCycleId==`number`&&e.cycleId===c.currentCycleId),Pt=l.title!==`Singleton mining wallet`,Q=X.length>0?X[X.length-1]:null,Ft=$e(_t),It=r.history?.actions??Ft,Lt=r.history?.activityOutcomes??v,Rt=et(rt({error:r.error,message:r.message,notifications:r.notifications,status:c,profile:s,recentActions:It,settledHistory:Lt,recoveryBlocked:!!(c?.blocked||r.recovery?.blocked),recoveryTitle:Dt.title,recoveryDetail:r.recovery?.detail??Dt.detail,showBlockingNote:Ot,claimabilityTitle:Y.title,claimabilityDetail:Y.detail,signerRentShortfall:nt,signerRentShortfallMessage:nt?`Leave at least ${E(oe.toString(),`SOL`)} SOL in Wallet for cycle creation and fees.`:null,recentOnly:!1}),`all`).filter(e=>{if(jt==null)return!0;let t=new Date(e.at??``).getTime();return Number.isFinite(t)&&kt-t<=jt}),zt=Math.max(1,Math.ceil(Rt.length/30)),Bt=Math.min(r.recentActionsPage,zt),Vt=(Bt-1)*30,Ht=Rt.slice(Vt,Vt+30),Ut=X[0]?.timeLabel??null,Wt=Q?.timeLabel??null,Gt=c?.liveCycleReport??null,Kt=typeof c?.currentCycleId==`number`?c.currentCycleId:typeof Gt?.cycleId==`number`?Gt.cycleId:null,qt=Gt?.committedLamports??`0`,Jt=R(qt),Yt=de(Gt?.validMinerCount),Xt=Gt?.totalCommittedLamports??(Jt?qt:null),Zt=Q?.cycleId??Kt,Qt=Q?.commitLabel??(Jt?E(qt,`SOL`):`—`),$t=[Q?.strategyLabel??se(le),Q?.executionLabel??ce(L)].filter(Boolean).join(` · `),en=1440*60*1e3,tn=v.filter(e=>{let t=new Date(e.recordedAt??``).getTime();return Number.isFinite(t)&&kt-t<=en}),$=ut(tn,en),nn=De(tn,{maxPoints:24}),rn=Se({plannerWindow:r.plannerWindow,visibleCycleCount:Mt.length,matchingCycleCount:r.history?.matchingOutcomeCount??Mt.length,sampled:r.history?.sampled??!1,rangeStart:Ut,rangeEnd:Wt,latestPoint:Q,currentCycleSubmitted:Nt,currentCycleId:c?.currentCycleId??null}),an=t=>e`<div class="mining-metric__rows">
|
|
96
96
|
${t.map(t=>e`<div
|
|
97
97
|
class=${t.wide?`mining-metric__row mining-metric__row--wide`:`mining-metric__row`}
|
|
98
98
|
title=${t.title??``}
|
|
@@ -2315,34 +2315,34 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2315
2315
|
<div class="mining-header-actions mining-header-actions--primary">
|
|
2316
2316
|
<button
|
|
2317
2317
|
class="btn small primary mining-header-action"
|
|
2318
|
-
?disabled=${
|
|
2318
|
+
?disabled=${J.startBlocked}
|
|
2319
2319
|
@click=${r.onStart}
|
|
2320
|
-
title=${
|
|
2320
|
+
title=${J.startTitle}
|
|
2321
2321
|
>
|
|
2322
|
-
${
|
|
2322
|
+
${J.startLabel}
|
|
2323
2323
|
</button>
|
|
2324
2324
|
<button
|
|
2325
2325
|
class="btn small mining-header-action"
|
|
2326
|
-
?disabled=${
|
|
2326
|
+
?disabled=${J.stopBlocked}
|
|
2327
2327
|
@click=${r.onStop}
|
|
2328
|
-
title=${
|
|
2328
|
+
title=${J.stopTitle}
|
|
2329
2329
|
>
|
|
2330
|
-
${r.pendingAction===`stopping`?`Stopping…`:
|
|
2330
|
+
${r.pendingAction===`stopping`?`Stopping…`:J.stopLabel}
|
|
2331
2331
|
</button>
|
|
2332
2332
|
<div
|
|
2333
2333
|
class="mining-inline-status"
|
|
2334
|
-
data-tone=${
|
|
2335
|
-
title=${
|
|
2336
|
-
aria-label=${`Mining ${
|
|
2334
|
+
data-tone=${Tt.tone}
|
|
2335
|
+
title=${Tt.detail}
|
|
2336
|
+
aria-label=${`Mining ${Tt.label}: ${Tt.detail}`}
|
|
2337
2337
|
>
|
|
2338
2338
|
<span class="mining-status-dot" aria-hidden="true"></span>
|
|
2339
|
-
<span>${
|
|
2339
|
+
<span>${Tt.label}</span>
|
|
2340
2340
|
</div>
|
|
2341
2341
|
<div
|
|
2342
2342
|
class="mining-setup-rail mining-setup-rail--compact"
|
|
2343
2343
|
aria-label="Mining setup checklist"
|
|
2344
2344
|
>
|
|
2345
|
-
${
|
|
2345
|
+
${Ct.map((t,r)=>e`
|
|
2346
2346
|
<div class="mining-setup-step" data-state=${t.state} title=${t.detail}>
|
|
2347
2347
|
<span class="mining-setup-step__marker" aria-hidden="true">
|
|
2348
2348
|
${t.state===`done`?n.check:r+1}
|
|
@@ -2356,7 +2356,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2356
2356
|
<dialog
|
|
2357
2357
|
id="mining-share-proof-dialog"
|
|
2358
2358
|
class="mining-share-proof"
|
|
2359
|
-
@click=${e=>{e.target===e.currentTarget&&
|
|
2359
|
+
@click=${e=>{e.target===e.currentTarget&&ct(`mining-share-proof-dialog`)}}
|
|
2360
2360
|
>
|
|
2361
2361
|
<div class="mining-share-proof__body">
|
|
2362
2362
|
<div class="mining-share-proof__head">
|
|
@@ -2367,39 +2367,39 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2367
2367
|
class="btn small mining-icon-btn"
|
|
2368
2368
|
type="button"
|
|
2369
2369
|
title="Close mining proof"
|
|
2370
|
-
@click=${()=>
|
|
2370
|
+
@click=${()=>ct(`mining-share-proof-dialog`)}
|
|
2371
2371
|
>
|
|
2372
2372
|
${n.x}
|
|
2373
2373
|
</button>
|
|
2374
2374
|
</div>
|
|
2375
2375
|
<div class="mining-share-proof__grid">
|
|
2376
|
-
${
|
|
2377
|
-
${
|
|
2378
|
-
${
|
|
2379
|
-
${
|
|
2380
|
-
${
|
|
2381
|
-
${
|
|
2382
|
-
${
|
|
2383
|
-
${
|
|
2384
|
-
${
|
|
2385
|
-
${
|
|
2386
|
-
${
|
|
2387
|
-
${
|
|
2376
|
+
${K(`Cycle`,Zt?String(Zt):`—`)}
|
|
2377
|
+
${K(`Capital`,Qt===`—`?`—`:`${Qt} SOL`)}
|
|
2378
|
+
${K(`Earned`,Q?.satLabel?`${Q.satLabel} SAT`:`—`)}
|
|
2379
|
+
${K(`Strategy`,$t||`—`)}
|
|
2380
|
+
${$&&nn.length?lt(nn,$):t}
|
|
2381
|
+
${$?e`
|
|
2382
|
+
${K(`24h SAT`,`${$.satLabel} SAT`)}
|
|
2383
|
+
${K(`SOL rebate`,`${$.rebateLabel} SOL`)}
|
|
2384
|
+
${K(`Avg capital`,`${$.avgCapitalLabel} SOL`)}
|
|
2385
|
+
${K(`Cycles`,String($.cycles))}
|
|
2386
|
+
${K(`Net SOL`,`${$.netLabel} SOL`)}
|
|
2387
|
+
${K(`Most used`,$.mostUsedStrategyLabel)}
|
|
2388
2388
|
`:t}
|
|
2389
2389
|
</div>
|
|
2390
2390
|
</div>
|
|
2391
2391
|
</dialog>
|
|
2392
2392
|
|
|
2393
|
-
${
|
|
2394
|
-
<strong>${
|
|
2393
|
+
${U?e`<div class="mining-note mining-note--compact">
|
|
2394
|
+
<strong>${U.title}</strong> · ${U.detail}
|
|
2395
2395
|
</div>`:t}
|
|
2396
2396
|
|
|
2397
|
-
${
|
|
2397
|
+
${Pt?e`<div class="mining-note mining-note--compact">
|
|
2398
2398
|
<strong>${l.title}</strong>${l.detail?e` · ${l.detail}`:t}
|
|
2399
2399
|
</div>`:t}
|
|
2400
2400
|
|
|
2401
|
-
${
|
|
2402
|
-
<strong>Cannot start yet</strong> · ${
|
|
2401
|
+
${Et?e`<div class="mining-note mining-note--compact">
|
|
2402
|
+
<strong>Cannot start yet</strong> · ${St}
|
|
2403
2403
|
</div>`:t}
|
|
2404
2404
|
|
|
2405
2405
|
<div class="mining-grid mining-grid--stats">
|
|
@@ -2415,7 +2415,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2415
2415
|
class="mining-inline-link"
|
|
2416
2416
|
type="button"
|
|
2417
2417
|
title="Show wallet address"
|
|
2418
|
-
@click=${()=>
|
|
2418
|
+
@click=${()=>ot(h,`******`,m)}
|
|
2419
2419
|
>
|
|
2420
2420
|
${n.eye}
|
|
2421
2421
|
</button>
|
|
@@ -2423,7 +2423,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2423
2423
|
class="mining-inline-link"
|
|
2424
2424
|
type="button"
|
|
2425
2425
|
title="Copy full wallet address"
|
|
2426
|
-
@click=${()=>
|
|
2426
|
+
@click=${()=>at(m)}
|
|
2427
2427
|
>
|
|
2428
2428
|
${n.copy}
|
|
2429
2429
|
</button>
|
|
@@ -2431,7 +2431,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2431
2431
|
class="mining-inline-link"
|
|
2432
2432
|
type="button"
|
|
2433
2433
|
title="Share mining summary"
|
|
2434
|
-
@click=${()=>
|
|
2434
|
+
@click=${()=>st(`mining-share-proof-dialog`)}
|
|
2435
2435
|
>
|
|
2436
2436
|
${n.image}
|
|
2437
2437
|
</button>
|
|
@@ -2457,14 +2457,14 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2457
2457
|
<span>Capital</span>
|
|
2458
2458
|
${u(`SOL deposited into the miner capital PDA. It can be free, locked, or withdrawn later when available.`)}
|
|
2459
2459
|
</div>
|
|
2460
|
-
${
|
|
2460
|
+
${an([{label:`Funded`,value:`${E(O.toString(),`SOL`)} SOL`,title:`Total SOL in miner capital.`},{label:`Locked`,value:`${E(k.toString(),`SOL`)} SOL`,title:`Capital reserved by submitted cycles until settlement and claim release it.`},{label:`Withdraw`,value:`${E(A.toString(),`SOL`)} SOL`,title:ft}])}
|
|
2461
2461
|
</div>
|
|
2462
2462
|
<div class="mining-metric">
|
|
2463
|
-
<div class="mining-metric__label" title=${
|
|
2463
|
+
<div class="mining-metric__label" title=${H}>
|
|
2464
2464
|
<span>Commit</span>
|
|
2465
|
-
${u(
|
|
2465
|
+
${u(H)}
|
|
2466
2466
|
</div>
|
|
2467
|
-
${
|
|
2467
|
+
${an([{label:_e,value:`${E(P.toString(),`SOL`)} SOL`,title:H},{label:`Safe commit`,value:`${E(M.safeMaxCommitLamports.toString(),`SOL`)} SOL`,title:He},{label:`Active commit`,value:`${E(j.toString(),`SOL`)} SOL`,title:We}])}
|
|
2468
2468
|
</div>
|
|
2469
2469
|
<div class="mining-metric">
|
|
2470
2470
|
<div
|
|
@@ -2474,7 +2474,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2474
2474
|
<span>Current cycle</span>
|
|
2475
2475
|
${u(`Live cycle snapshot for the currently observed cycle.`)}
|
|
2476
2476
|
</div>
|
|
2477
|
-
${
|
|
2477
|
+
${an([{label:`Cycle`,value:Kt==null?`—`:String(Kt)},{label:`Your commit`,value:Jt?`${E(qt,`SOL`)} SOL`:`—`},{label:`SOL in cycle`,value:Xt==null?`—`:`${E(Xt,`SOL`)} SOL`},{label:`Miners now`,value:Yt==null?`pending`:String(Yt)}])}
|
|
2478
2478
|
</div>
|
|
2479
2479
|
<div class="mining-metric">
|
|
2480
2480
|
<div
|
|
@@ -2484,14 +2484,14 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2484
2484
|
<span>Last result</span>
|
|
2485
2485
|
${u(`Most recent settled cycle result for this miner.`)}
|
|
2486
2486
|
</div>
|
|
2487
|
-
${
|
|
2487
|
+
${an([{label:`Cycle`,value:pt.cycleId==null?`—`:String(pt.cycleId)},{label:`SAT`,value:`${re(pt.satRaw,`SAT`)} SAT`},{label:`Net SOL`,value:`${ne(pt.netLamports,`SOL`)} SOL`}])}
|
|
2488
2488
|
</div>
|
|
2489
2489
|
<div class="mining-metric">
|
|
2490
|
-
<div class="mining-metric__label" title=${
|
|
2490
|
+
<div class="mining-metric__label" title=${Ve}>
|
|
2491
2491
|
<span>Claims</span>
|
|
2492
2492
|
${u(`Durable claim backlog. The claim worker claims the oldest ready cycles first and keeps retry counts plus the last error.`)}
|
|
2493
2493
|
</div>
|
|
2494
|
-
${
|
|
2494
|
+
${an([{label:`Pending`,value:String(V),title:Ve},{label:`Ready`,value:String(Le),title:Ve},{label:`Failed`,value:String(Re),title:Ve}])}
|
|
2495
2495
|
</div>
|
|
2496
2496
|
</div>
|
|
2497
2497
|
</div>
|
|
@@ -2511,15 +2511,35 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2511
2511
|
</div>
|
|
2512
2512
|
<select
|
|
2513
2513
|
class="mining-select"
|
|
2514
|
-
?disabled=${
|
|
2514
|
+
?disabled=${G}
|
|
2515
2515
|
@change=${e=>r.onStrategyPresetChange(e.currentTarget.value)}
|
|
2516
|
-
title=${
|
|
2516
|
+
title=${vt.find(e=>e.value===le)?.detail??``}
|
|
2517
2517
|
>
|
|
2518
|
-
${
|
|
2518
|
+
${vt.map(t=>e`<option value=${t.value} ?selected=${le===t.value}>
|
|
2519
2519
|
${t.label}
|
|
2520
2520
|
</option>`)}
|
|
2521
2521
|
</select>
|
|
2522
2522
|
</div>
|
|
2523
|
+
<div class="mining-stack">
|
|
2524
|
+
<div class="mining-section-label">
|
|
2525
|
+
Economy
|
|
2526
|
+
${u(`Participation cadence. Existing commitments always reveal and settle; this only controls entry into new cycles. 0.25 SOL is minimum eligibility, not a recommended always-on balance.`)}
|
|
2527
|
+
</div>
|
|
2528
|
+
<select
|
|
2529
|
+
class="mining-select"
|
|
2530
|
+
?disabled=${G}
|
|
2531
|
+
@change=${e=>r.onCycleCadenceChange(Number(e.currentTarget.value))}
|
|
2532
|
+
title=${`${me}; network fees are separate`}
|
|
2533
|
+
>
|
|
2534
|
+
<option value="1" ?selected=${ue===1}>Every cycle</option>
|
|
2535
|
+
<option value="2" ?selected=${ue===2}>Every 2nd</option>
|
|
2536
|
+
<option value="6" ?selected=${ue===6}>Every 6th</option>
|
|
2537
|
+
<option value="12" ?selected=${ue===12}>Every 12th</option>
|
|
2538
|
+
</select>
|
|
2539
|
+
<div class="mining-commit-status" title="Estimate excludes transaction fees.">
|
|
2540
|
+
Estimated runway ${me}
|
|
2541
|
+
</div>
|
|
2542
|
+
</div>
|
|
2523
2543
|
<div class="mining-stack">
|
|
2524
2544
|
<div class="mining-section-label">
|
|
2525
2545
|
Execution
|
|
@@ -2527,11 +2547,11 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2527
2547
|
</div>
|
|
2528
2548
|
<select
|
|
2529
2549
|
class="mining-select"
|
|
2530
|
-
?disabled=${
|
|
2550
|
+
?disabled=${G}
|
|
2531
2551
|
@change=${e=>r.onStrategyExecutionChange(e.currentTarget.value)}
|
|
2532
|
-
title=${
|
|
2552
|
+
title=${yt.find(e=>e.value===L)?.detail??``}
|
|
2533
2553
|
>
|
|
2534
|
-
${
|
|
2554
|
+
${yt.map(t=>e`<option
|
|
2535
2555
|
value=${t.value}
|
|
2536
2556
|
?selected=${L===t.value}
|
|
2537
2557
|
>
|
|
@@ -2568,7 +2588,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2568
2588
|
@input=${e=>r.onCapitalDepositDraftChange(e.currentTarget.value)}
|
|
2569
2589
|
placeholder="0.25"
|
|
2570
2590
|
/>
|
|
2571
|
-
<button class="btn small" ?disabled=${
|
|
2591
|
+
<button class="btn small" ?disabled=${G} @click=${r.onDepositCapital}>
|
|
2572
2592
|
${r.capitalActionBusy===`deposit`?`Funding...`:`Fund`}
|
|
2573
2593
|
</button>
|
|
2574
2594
|
</div>
|
|
@@ -2579,21 +2599,21 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2579
2599
|
inputmode="decimal"
|
|
2580
2600
|
.value=${r.capitalWithdrawDraft}
|
|
2581
2601
|
@input=${e=>r.onCapitalWithdrawDraftChange(e.currentTarget.value)}
|
|
2582
|
-
placeholder=${A>0n?
|
|
2602
|
+
placeholder=${A>0n?Ne(A):`0`}
|
|
2583
2603
|
/>
|
|
2584
2604
|
<button
|
|
2585
2605
|
class="btn small"
|
|
2586
|
-
?disabled=${
|
|
2587
|
-
@click=${()=>r.onCapitalWithdrawDraftChange(
|
|
2606
|
+
?disabled=${dt}
|
|
2607
|
+
@click=${()=>r.onCapitalWithdrawDraftChange(Ne(A))}
|
|
2588
2608
|
title="Fill the exact withdrawable miner capital amount."
|
|
2589
2609
|
>
|
|
2590
2610
|
Max
|
|
2591
2611
|
</button>
|
|
2592
2612
|
<button
|
|
2593
2613
|
class="btn small"
|
|
2594
|
-
?disabled=${
|
|
2614
|
+
?disabled=${dt}
|
|
2595
2615
|
@click=${r.onWithdrawCapital}
|
|
2596
|
-
title=${
|
|
2616
|
+
title=${ft}
|
|
2597
2617
|
>
|
|
2598
2618
|
${r.capitalActionBusy===`withdraw`?`Withdrawing...`:`Withdraw`}
|
|
2599
2619
|
</button>
|
|
@@ -2605,18 +2625,18 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2605
2625
|
<div class="mining-stack mining-stack--commit">
|
|
2606
2626
|
<div class="mining-field-row__label">
|
|
2607
2627
|
<div class="mining-section-label">
|
|
2608
|
-
${
|
|
2609
|
-
${u(
|
|
2628
|
+
${ye}
|
|
2629
|
+
${u(H)}
|
|
2610
2630
|
</div>
|
|
2611
2631
|
${T?e`<div class="mining-mini-wallet">
|
|
2612
2632
|
<span>Capital</span>
|
|
2613
|
-
<span>${
|
|
2633
|
+
<span>${it(T)}</span>
|
|
2614
2634
|
${D?e`<a href=${D} target="_blank" rel="noreferrer">View</a>`:t}
|
|
2615
2635
|
<button
|
|
2616
2636
|
class="mining-inline-link"
|
|
2617
2637
|
type="button"
|
|
2618
2638
|
title="Copy capital address"
|
|
2619
|
-
@click=${()=>
|
|
2639
|
+
@click=${()=>at(T)}
|
|
2620
2640
|
>
|
|
2621
2641
|
${n.copy}
|
|
2622
2642
|
</button>
|
|
@@ -2628,29 +2648,29 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2628
2648
|
class="mining-form-input"
|
|
2629
2649
|
type="text"
|
|
2630
2650
|
inputmode="decimal"
|
|
2631
|
-
.value=${
|
|
2632
|
-
@change=${e=>r.onCommitLamportsChange(
|
|
2651
|
+
.value=${Me(s?.funding.commitLamports??`250000000`)}
|
|
2652
|
+
@change=${e=>r.onCommitLamportsChange(Pe(e.currentTarget.value))}
|
|
2633
2653
|
/>
|
|
2634
2654
|
<button
|
|
2635
2655
|
class="btn small"
|
|
2636
|
-
?disabled=${
|
|
2637
|
-
@click=${e=>{let t=e.currentTarget.closest(`.mining-commit-inline`)?.querySelector(`input`);r.onUpdateCommit(
|
|
2656
|
+
?disabled=${G||M.safeMaxCommitLamports<N}
|
|
2657
|
+
@click=${e=>{let t=e.currentTarget.closest(`.mining-commit-inline`)?.querySelector(`input`);r.onUpdateCommit(Pe(t?.value??Me(s?.funding.commitLamports??`250000000`)))}}
|
|
2638
2658
|
title=${`Updates active commit now. If target is higher than safe, safe is used and target stays saved.`}
|
|
2639
2659
|
>
|
|
2640
2660
|
Update
|
|
2641
2661
|
</button>
|
|
2642
2662
|
</div>
|
|
2643
|
-
<div class="mining-commit-status" title=${
|
|
2644
|
-
${
|
|
2663
|
+
<div class="mining-commit-status" title=${He}>
|
|
2664
|
+
${Ge}
|
|
2645
2665
|
</div>
|
|
2646
2666
|
<input
|
|
2647
2667
|
class="mining-form-input"
|
|
2648
2668
|
type="range"
|
|
2649
|
-
min=${
|
|
2650
|
-
max=${
|
|
2669
|
+
min=${Me(N)}
|
|
2670
|
+
max=${Me(F)}
|
|
2651
2671
|
step="0.01"
|
|
2652
|
-
.value=${
|
|
2653
|
-
@change=${e=>r.onCommitLamportsChange(
|
|
2672
|
+
.value=${Me(I)}
|
|
2673
|
+
@change=${e=>r.onCommitLamportsChange(Pe(e.currentTarget.value))}
|
|
2654
2674
|
/>
|
|
2655
2675
|
</div>
|
|
2656
2676
|
</div>
|
|
@@ -2677,25 +2697,25 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2677
2697
|
class="mining-recent-actions mining-recent-actions--scroller"
|
|
2678
2698
|
style="margin-top: 14px;"
|
|
2679
2699
|
>
|
|
2680
|
-
${
|
|
2700
|
+
${Ht.length?Ht.map(e=>Ue(e)):e`
|
|
2681
2701
|
<div class="mining-note" style="margin-top: 0">
|
|
2682
2702
|
<div>${Be(`all`)}</div>
|
|
2683
2703
|
</div>
|
|
2684
2704
|
`}
|
|
2685
2705
|
</div>
|
|
2686
|
-
${
|
|
2706
|
+
${zt>1?e`<div class="mining-pager mining-pager--right">
|
|
2687
2707
|
<div class="mining-header-actions">
|
|
2688
2708
|
<button
|
|
2689
2709
|
class="btn small"
|
|
2690
|
-
?disabled=${
|
|
2691
|
-
@click=${()=>r.onRecentActionsPageChange(
|
|
2710
|
+
?disabled=${Bt<=1}
|
|
2711
|
+
@click=${()=>r.onRecentActionsPageChange(Bt-1)}
|
|
2692
2712
|
>
|
|
2693
2713
|
Prev
|
|
2694
2714
|
</button>
|
|
2695
2715
|
<button
|
|
2696
2716
|
class="btn small"
|
|
2697
|
-
?disabled=${
|
|
2698
|
-
@click=${()=>r.onRecentActionsPageChange(
|
|
2717
|
+
?disabled=${Bt>=zt}
|
|
2718
|
+
@click=${()=>r.onRecentActionsPageChange(Bt+1)}
|
|
2699
2719
|
>
|
|
2700
2720
|
Next
|
|
2701
2721
|
</button>
|
|
@@ -2724,21 +2744,21 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2724
2744
|
</div>
|
|
2725
2745
|
</div>
|
|
2726
2746
|
</div>
|
|
2727
|
-
${
|
|
2747
|
+
${Z?e`<div class="mining-strategy-analytics">
|
|
2728
2748
|
<div class="mining-strategy-analytics__cards">
|
|
2729
2749
|
<div class="mining-strategy-analytics__card">
|
|
2730
2750
|
<div class="mining-strategy-analytics__label">Most used</div>
|
|
2731
2751
|
<div class="mining-strategy-analytics__value">
|
|
2732
|
-
${
|
|
2752
|
+
${Z.summary.mostUsedLabel}
|
|
2733
2753
|
</div>
|
|
2734
2754
|
<div class="mining-strategy-analytics__sub">
|
|
2735
|
-
${
|
|
2755
|
+
${Z.summary.mostUsedDetail}
|
|
2736
2756
|
</div>
|
|
2737
2757
|
</div>
|
|
2738
2758
|
<div class="mining-strategy-analytics__card">
|
|
2739
2759
|
<div class="mining-strategy-analytics__label">Period SAT</div>
|
|
2740
2760
|
<div class="mining-strategy-analytics__value">
|
|
2741
|
-
${
|
|
2761
|
+
${Z.summary.totalSatLabel}
|
|
2742
2762
|
</div>
|
|
2743
2763
|
<div class="mining-strategy-analytics__sub">
|
|
2744
2764
|
settled history window
|
|
@@ -2747,76 +2767,76 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2747
2767
|
<div class="mining-strategy-analytics__card">
|
|
2748
2768
|
<div class="mining-strategy-analytics__label">Period net</div>
|
|
2749
2769
|
<div class="mining-strategy-analytics__value">
|
|
2750
|
-
${
|
|
2770
|
+
${Z.summary.totalNetLabel}
|
|
2751
2771
|
</div>
|
|
2752
2772
|
<div class="mining-strategy-analytics__sub">
|
|
2753
|
-
${
|
|
2773
|
+
${Z.summary.totalRebateLabel} SOL rebate
|
|
2754
2774
|
</div>
|
|
2755
2775
|
</div>
|
|
2756
2776
|
<div class="mining-strategy-analytics__card">
|
|
2757
2777
|
<div class="mining-strategy-analytics__label">Rebate split</div>
|
|
2758
2778
|
<div class="mining-strategy-analytics__value">
|
|
2759
|
-
${
|
|
2779
|
+
${Z.summary.rebateSplitRecorded?`${Z.summary.totalPerfRebateLabel} SOL`:`—`}
|
|
2760
2780
|
</div>
|
|
2761
2781
|
<div class="mining-strategy-analytics__sub">
|
|
2762
|
-
${
|
|
2782
|
+
${Z.summary.rebateSplitRecorded?`performance · ${Z.summary.totalDetRebateLabel} SOL det`:`split not recorded yet`}
|
|
2763
2783
|
</div>
|
|
2764
2784
|
</div>
|
|
2765
2785
|
<div class="mining-strategy-analytics__card">
|
|
2766
2786
|
<div class="mining-strategy-analytics__label">Best SAT</div>
|
|
2767
2787
|
<div class="mining-strategy-analytics__value">
|
|
2768
|
-
${
|
|
2788
|
+
${Z.summary.bestSatLabel}
|
|
2769
2789
|
</div>
|
|
2770
2790
|
<div class="mining-strategy-analytics__sub">
|
|
2771
|
-
${
|
|
2791
|
+
${Z.summary.bestSatDetail}
|
|
2772
2792
|
</div>
|
|
2773
2793
|
</div>
|
|
2774
2794
|
<div class="mining-strategy-analytics__card">
|
|
2775
2795
|
<div class="mining-strategy-analytics__label">Best rebate</div>
|
|
2776
2796
|
<div class="mining-strategy-analytics__value">
|
|
2777
|
-
${
|
|
2797
|
+
${Z.summary.bestRebateLabel}
|
|
2778
2798
|
</div>
|
|
2779
2799
|
<div class="mining-strategy-analytics__sub">
|
|
2780
|
-
${
|
|
2800
|
+
${Z.summary.bestRebateDetail}
|
|
2781
2801
|
</div>
|
|
2782
2802
|
</div>
|
|
2783
2803
|
<div class="mining-strategy-analytics__card">
|
|
2784
2804
|
<div class="mining-strategy-analytics__label">Best net</div>
|
|
2785
2805
|
<div class="mining-strategy-analytics__value">
|
|
2786
|
-
${
|
|
2806
|
+
${Z.summary.bestNetLabel}
|
|
2787
2807
|
</div>
|
|
2788
2808
|
<div class="mining-strategy-analytics__sub">
|
|
2789
|
-
${
|
|
2809
|
+
${Z.summary.bestNetDetail}
|
|
2790
2810
|
</div>
|
|
2791
2811
|
</div>
|
|
2792
2812
|
<div class="mining-strategy-analytics__card">
|
|
2793
2813
|
<div class="mining-strategy-analytics__label">Best skill</div>
|
|
2794
2814
|
<div class="mining-strategy-analytics__value">
|
|
2795
|
-
${
|
|
2815
|
+
${Z.summary.bestSkillLabel}
|
|
2796
2816
|
</div>
|
|
2797
2817
|
<div class="mining-strategy-analytics__sub">
|
|
2798
|
-
${
|
|
2818
|
+
${Z.summary.bestSkillDetail}
|
|
2799
2819
|
</div>
|
|
2800
2820
|
</div>
|
|
2801
2821
|
<div class="mining-strategy-analytics__card">
|
|
2802
2822
|
<div class="mining-strategy-analytics__label">Execution</div>
|
|
2803
2823
|
<div class="mining-strategy-analytics__value">
|
|
2804
|
-
${
|
|
2824
|
+
${Z.summary.totalCycles} cycles
|
|
2805
2825
|
</div>
|
|
2806
2826
|
<div class="mining-strategy-analytics__sub">
|
|
2807
|
-
${
|
|
2827
|
+
${Z.summary.executionDetail}
|
|
2808
2828
|
</div>
|
|
2809
2829
|
</div>
|
|
2810
2830
|
<div class="mining-strategy-analytics__card">
|
|
2811
2831
|
<div class="mining-strategy-analytics__label">Task/source</div>
|
|
2812
2832
|
<div class="mining-strategy-analytics__value">Strategy source</div>
|
|
2813
2833
|
<div class="mining-strategy-analytics__sub">
|
|
2814
|
-
${
|
|
2834
|
+
${Z.summary.sourceDetail}
|
|
2815
2835
|
</div>
|
|
2816
2836
|
</div>
|
|
2817
2837
|
</div>
|
|
2818
2838
|
<div class="mining-strategy-analytics__rows">
|
|
2819
|
-
${
|
|
2839
|
+
${Z.rows.map(t=>e`<div
|
|
2820
2840
|
class="mining-strategy-analytics__row"
|
|
2821
2841
|
title=${t.title}
|
|
2822
2842
|
>
|
|
@@ -2850,7 +2870,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2850
2870
|
</div>`)}
|
|
2851
2871
|
</div>
|
|
2852
2872
|
</div>`:t}
|
|
2853
|
-
${
|
|
2873
|
+
${X.length?e`<div class="mining-history-grid ${``}">
|
|
2854
2874
|
${e`<div class="mining-history-panel">
|
|
2855
2875
|
<div class="mining-history-panel__header">
|
|
2856
2876
|
<div>
|
|
@@ -2859,7 +2879,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2859
2879
|
</div>
|
|
2860
2880
|
</div>
|
|
2861
2881
|
<div class="mining-history-bars" aria-label="SAT earned history chart">
|
|
2862
|
-
${
|
|
2882
|
+
${X.map(t=>{let n=Math.max(6,100-t.satY),r=.48+(100-t.satY)/100*.48,i=[`Cycle ${t.cycleId}`,t.timeLabel,`${t.satLabel} SAT earned`,`${t.commitLabel} SOL commit`,`Erosion: ${t.erosionLabel} SOL`,`Miner rebate: ${t.rebateLabel} SOL`,t.keeperBountyLabel?`Keeper bounty: ${t.keeperBountyLabel} SOL`:null,t.submitFeeLabel?`Submit fee: ${t.submitFeeLabel} SOL`:null,t.keeperFeeLabel?`Keeper fees: ${t.keeperFeeLabel} SOL`:null,t.claimFeeLabel?`Claim fee: ${t.claimFeeLabel} SOL`:null,t.otherFeeLabel?`Other tx: ${t.otherFeeLabel} SOL`:null,t.strategyLabel?`Strategy: ${t.strategyLabel}`:null,`Execution: ${t.executionLabel}`,t.poolLabel].filter(Boolean);return e`<div
|
|
2863
2883
|
class="mining-history-bars__bar mining-history-bars__bar--sat"
|
|
2864
2884
|
style=${`height:${n.toFixed(2)}%; opacity:${r.toFixed(3)};`}
|
|
2865
2885
|
title=${i.join(`
|
|
@@ -2868,10 +2888,10 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2868
2888
|
</div>
|
|
2869
2889
|
<div class="mining-history-bars__footer">
|
|
2870
2890
|
<div class="mining-history-bars__range">
|
|
2871
|
-
Window ${
|
|
2891
|
+
Window ${rn.windowLabel}
|
|
2872
2892
|
</div>
|
|
2873
2893
|
<div class="mining-history-bars__range">
|
|
2874
|
-
${
|
|
2894
|
+
${rn.dataRangeLabel?`Data ${rn.dataRangeLabel}`:Q?`Latest ${Q.satLabel} SAT`:``}
|
|
2875
2895
|
</div>
|
|
2876
2896
|
</div>
|
|
2877
2897
|
</div>`}
|
|
@@ -2883,7 +2903,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2883
2903
|
</div>
|
|
2884
2904
|
</div>
|
|
2885
2905
|
<div class="mining-history-bars" aria-label="Net SOL history chart">
|
|
2886
|
-
${
|
|
2906
|
+
${X.map(t=>{let n=Math.max(6,100-t.netY),r=.42+(100-t.netY)/100*.5,i=[`Cycle ${t.cycleId}`,t.timeLabel,`${t.netLabel} SOL net`,`${t.commitLabel} SOL commit`,`Erosion: ${t.erosionLabel} SOL`,`Miner rebate: ${t.rebateLabel} SOL`,t.keeperBountyLabel?`Keeper bounty: ${t.keeperBountyLabel} SOL`:null,t.submitFeeLabel?`Submit fee: ${t.submitFeeLabel} SOL`:null,t.keeperFeeLabel?`Keeper fees: ${t.keeperFeeLabel} SOL`:null,t.claimFeeLabel?`Claim fee: ${t.claimFeeLabel} SOL`:null,t.otherFeeLabel?`Other tx: ${t.otherFeeLabel} SOL`:null,t.strategyLabel?`Strategy: ${t.strategyLabel}`:null,`Execution: ${t.executionLabel}`,t.poolLabel].filter(Boolean);return e`<div
|
|
2887
2907
|
class="mining-history-bars__bar mining-history-bars__bar--net"
|
|
2888
2908
|
style=${`height:${n.toFixed(2)}%; opacity:${r.toFixed(3)};`}
|
|
2889
2909
|
title=${i.join(`
|
|
@@ -2892,10 +2912,10 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2892
2912
|
</div>
|
|
2893
2913
|
<div class="mining-history-bars__footer">
|
|
2894
2914
|
<div class="mining-history-bars__range">
|
|
2895
|
-
Window ${
|
|
2915
|
+
Window ${rn.windowLabel}
|
|
2896
2916
|
</div>
|
|
2897
2917
|
<div class="mining-history-bars__range">
|
|
2898
|
-
${
|
|
2918
|
+
${rn.dataRangeLabel?`Data ${rn.dataRangeLabel}`:Q?`Latest ${Q.netLabel} SOL`:``}
|
|
2899
2919
|
</div>
|
|
2900
2920
|
</div>
|
|
2901
2921
|
</div>`}
|
|
@@ -2925,7 +2945,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2925
2945
|
</div>
|
|
2926
2946
|
</div>
|
|
2927
2947
|
<div class="mining-history-list">
|
|
2928
|
-
${
|
|
2948
|
+
${Rt.length?Rt.map(e=>Ue(e)):e`
|
|
2929
2949
|
<div class="mining-note" style="margin-top: 0">
|
|
2930
2950
|
${Be(`all`)}
|
|
2931
2951
|
</div>
|
|
@@ -2936,5 +2956,5 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{D as r,E as i,t as
|
|
|
2936
2956
|
</div>
|
|
2937
2957
|
</div>`:t}
|
|
2938
2958
|
</section>
|
|
2939
|
-
`}export{
|
|
2940
|
-
//# sourceMappingURL=mining-
|
|
2959
|
+
`}export{rt as buildMiningActivityEntries,De as buildMiningLineSeries,Xe as buildMiningSetupChecklist,Oe as buildMiningStrategyAnalytics,ke as buildPlannerVisualSeries,Ze as buildVisibleRecentActions,xe as describeChainTimeHealth,w as describeClaimability,ye as describeCurrentCycleDrift,qe as describeDashboardState,z as describeLiveCommitSizing,Je as describeMiningHeaderActions,Se as describeMiningHistoryWindow,p as describeMiningWalletRoleConflict,ee as describeRecoveryPath,_ as describeRiskMode,v as describeRuntimeStatus,d as describeSelectedWalletSuitability,m as describeStrategyMode,g as describeStrategyTransparency,et as filterMiningActivityEntries,C as formatMiningDraftTimestamp,x as miningAddressExplorerUrl,b as miningExplorerUrl,S as miningRecentActionExplorerUrl,dt as renderMining,ge as resolveLatestSettledCycleMetrics,f as resolveMiningWalletContext,ie as resolveMiningWalletLamports,B as resolveStableMiningValue,y as shouldShowAdminRecovery,he as summarizeCurrentCycleSnapshot,ue as summarizeLatestCycleMath,h as summarizePlannerOutcomes};
|
|
2960
|
+
//# sourceMappingURL=mining-BgHFh0ei.js.map
|