Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThreads an Changes
Sequence DiagramsequenceDiagram
participant Client as HTTP Handler (getTx)
participant Utils as Utils (getArkExplorerUrl)
participant Service as Service (getTransfer)
participant Page as Page Template (TransferTxBodyContent / Pending)
participant Comp as Component Template (Transfer → FeeTable)
participant Browser as Browser
Client->>Utils: getArkExplorerUrl(network)
Utils-->>Client: arkExplorerUrl
Client->>Service: s.getTransfer(..., arkExplorerUrl)
Service->>Page: pages.TransferTxBodyContent(tx, explorerUrl, arkExplorerUrl)
Page->>Comp: components.Transfer(tx, explorerUrl, arkExplorerUrl)
Comp->>Comp: arkTxid(tx) (conditional)
Comp->>Comp: ReceivedTxTable/SentTxTable(..., arkTxid, arkExplorerUrl)
Comp-->>Browser: Render HTML (include Ark explorer link if arkTxid != "")
Browser-->>Browser: Display page with Tx ID / explorer link
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (3)
internal/interface/web/static/styles.css (1)
1-1: Exclude generated CSS bundle from Stylelint to target source styles only.The
internal/interface/web/static/styles.cssfile is a minified build artifact generated by Parcel from the sourceinternal/interface/web/assets/styles.scss. Currently,.stylelintrc.jsonhas noignorePatternsand no.stylelintignorefile exists, so any Stylelint invocation would lint the minified output instead of source styles. Add an exclusion pattern (via.stylelintignoreorignorePatternsin.stylelintrc.json) to excludeinternal/interface/web/static/and ensure Stylelint targets the sourceassets/directory only.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/interface/web/static/styles.css` at line 1, Add an ignore for the generated CSS bundle so Stylelint targets source SCSS only: update .stylelintrc.json (or add a .stylelintignore) to exclude the directory "internal/interface/web/static/" (or the specific file "internal/interface/web/static/styles.css"); ensure the ignore entry uses that exact path string so Stylelint will skip the minified bundle and only lint the source under "internal/interface/web/assets/" (no code changes to styles.css needed).internal/interface/web/templates/pages/tx.templ (1)
14-34: UnusedarkExplorerUrlparameter inTransferTxPendingContent.The
arkExplorerUrlparameter is accepted but never used in this template—the pending transfer table doesn't render explorer links. This is likely intentional since pending transactions may not have confirmed Ark txids yet, but consider removing the parameter if it's not needed for consistency with the handler API.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/interface/web/templates/pages/tx.templ` around lines 14 - 34, The template TransferTxPendingContent currently accepts an unused parameter arkExplorerUrl; remove arkExplorerUrl from the function signature and update any callers (handlers or renderers that pass arkExplorerUrl to TransferTxPendingContent) to stop supplying that argument, or alternatively use arkExplorerUrl where appropriate (e.g., pass it into components.PendingTransferTable) if you intend to display explorer links—ensure consistency between the TransferTxPendingContent signature and all places that invoke it (search for TransferTxPendingContent usages and adjust their argument lists accordingly).internal/interface/web/templates/components/feeTable.templ (1)
149-155: Consider extracting duplicated Ark txid/explorer block into a shared templ helper.Both tables render identical rows for txid + explorer. A small shared component would reduce drift risk and keep future changes in one place.
Also applies to: 173-179
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/interface/web/templates/components/feeTable.templ` around lines 149 - 155, Extract the duplicated Ark txid/explorer HTML into a shared template helper (e.g., arkTxRow or renderArkTx) that accepts arkTxid and arkExplorerUrl, moves the conditional check for arkTxid != "" into that helper, uses truncateTxid and templ.SafeURL inside it, and call this helper in place of the duplicated block in feeTable.templ (both occurrences around the current txid/explorer blocks). Ensure the helper renders the same tableLine("Tx ID", truncateTxid(arkTxid)) and the explorer link with templ.SafeURL(arkExplorerUrl + "/tx/" + arkTxid) so both places (the original and the other occurrence) reference this single implementation.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@internal/interface/web/templates/components/feeTable.templ`:
- Around line 149-154: The explorer "View" row should only render when both
arkTxid and arkExplorerUrl are set; update the conditional guarding the block
that renders the explorer link (the branch using arkTxid, truncateTxid and
templ.SafeURL(arkExplorerUrl + "/tx/" + arkTxid)) to require arkExplorerUrl !=
"" as well (e.g., check arkTxid != "" && arkExplorerUrl != "") so you don't
produce a relative /tx/{txid} link; apply the same change to the second
occurrence around lines rendering the same explorer link.
In `@internal/interface/web/utils.go`:
- Around line 27-36: getArkExplorerUrl currently omits explicit handling for the
"mutinynet" network and falls back to the mainnet URL; update getArkExplorerUrl
to add a case for "mutinynet" that returns the correct Arkade explorer URL (or,
if Arkade has no mutiny-specific explorer, add a clear comment in
getArkExplorerUrl explaining that arklib.BitcoinMutinyNet intentionally falls
back to "https://arkade.space"), referencing the function name getArkExplorerUrl
and the constant arklib.BitcoinMutinyNet so reviewers can verify behavior
matches getExplorerUrl's handling.
---
Nitpick comments:
In `@internal/interface/web/static/styles.css`:
- Line 1: Add an ignore for the generated CSS bundle so Stylelint targets source
SCSS only: update .stylelintrc.json (or add a .stylelintignore) to exclude the
directory "internal/interface/web/static/" (or the specific file
"internal/interface/web/static/styles.css"); ensure the ignore entry uses that
exact path string so Stylelint will skip the minified bundle and only lint the
source under "internal/interface/web/assets/" (no code changes to styles.css
needed).
In `@internal/interface/web/templates/components/feeTable.templ`:
- Around line 149-155: Extract the duplicated Ark txid/explorer HTML into a
shared template helper (e.g., arkTxRow or renderArkTx) that accepts arkTxid and
arkExplorerUrl, moves the conditional check for arkTxid != "" into that helper,
uses truncateTxid and templ.SafeURL inside it, and call this helper in place of
the duplicated block in feeTable.templ (both occurrences around the current
txid/explorer blocks). Ensure the helper renders the same tableLine("Tx ID",
truncateTxid(arkTxid)) and the explorer link with templ.SafeURL(arkExplorerUrl +
"/tx/" + arkTxid) so both places (the original and the other occurrence)
reference this single implementation.
In `@internal/interface/web/templates/pages/tx.templ`:
- Around line 14-34: The template TransferTxPendingContent currently accepts an
unused parameter arkExplorerUrl; remove arkExplorerUrl from the function
signature and update any callers (handlers or renderers that pass arkExplorerUrl
to TransferTxPendingContent) to stop supplying that argument, or alternatively
use arkExplorerUrl where appropriate (e.g., pass it into
components.PendingTransferTable) if you intend to display explorer links—ensure
consistency between the TransferTxPendingContent signature and all places that
invoke it (search for TransferTxPendingContent usages and adjust their argument
lists accordingly).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 241e2332-5860-4931-9877-dd411d81c880
⛔ Files ignored due to path filters (1)
internal/interface/web/static/styles.css.mapis excluded by!**/*.map
📒 Files selected for processing (10)
internal/interface/web/handlers.gointernal/interface/web/static/styles.cssinternal/interface/web/templates/components/feeTable.templinternal/interface/web/templates/components/feeTable_templ.gointernal/interface/web/templates/components/tx.templinternal/interface/web/templates/components/tx_templ.gointernal/interface/web/templates/pages/tx.templinternal/interface/web/templates/pages/tx_templ.gointernal/interface/web/types/transfers.gointernal/interface/web/utils.go
| if arkTxid != "" { | ||
| @tableLine("Tx ID", truncateTxid(arkTxid)) | ||
| <div class="flex justify-between mb-2"> | ||
| <p class="text-white/50 uppercase">explorer</p> | ||
| <a href={templ.SafeURL(arkExplorerUrl + "/tx/" + arkTxid)} target="_blank" rel="noopener noreferrer" class="text-blue hover:underline">View</a> | ||
| </div> |
There was a problem hiding this comment.
Guard explorer row on arkExplorerUrl too.
At Line 149 and Line 173, the condition only checks arkTxid. If arkExplorerUrl is empty/misconfigured, the link becomes a relative /tx/{txid} route and points to the wrong destination.
💡 Suggested fix
- if arkTxid != "" {
+ if arkTxid != "" {
`@tableLine`("Tx ID", truncateTxid(arkTxid))
- <div class="flex justify-between mb-2">
- <p class="text-white/50 uppercase">explorer</p>
- <a href={templ.SafeURL(arkExplorerUrl + "/tx/" + arkTxid)} target="_blank" rel="noopener noreferrer" class="text-blue hover:underline">View</a>
- </div>
+ if arkExplorerUrl != "" {
+ <div class="flex justify-between mb-2">
+ <p class="text-white/50 uppercase">explorer</p>
+ <a href={templ.SafeURL(arkExplorerUrl + "/tx/" + arkTxid)} target="_blank" rel="noopener noreferrer" class="text-blue hover:underline">View</a>
+ </div>
+ }
}- if arkTxid != "" {
+ if arkTxid != "" {
`@tableLine`("Tx ID", truncateTxid(arkTxid))
- <div class="flex justify-between mb-2">
- <p class="text-white/50 uppercase">explorer</p>
- <a href={templ.SafeURL(arkExplorerUrl + "/tx/" + arkTxid)} target="_blank" rel="noopener noreferrer" class="text-blue hover:underline">View</a>
- </div>
+ if arkExplorerUrl != "" {
+ <div class="flex justify-between mb-2">
+ <p class="text-white/50 uppercase">explorer</p>
+ <a href={templ.SafeURL(arkExplorerUrl + "/tx/" + arkTxid)} target="_blank" rel="noopener noreferrer" class="text-blue hover:underline">View</a>
+ </div>
+ }
}Also applies to: 173-178
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@internal/interface/web/templates/components/feeTable.templ` around lines 149
- 154, The explorer "View" row should only render when both arkTxid and
arkExplorerUrl are set; update the conditional guarding the block that renders
the explorer link (the branch using arkTxid, truncateTxid and
templ.SafeURL(arkExplorerUrl + "/tx/" + arkTxid)) to require arkExplorerUrl !=
"" as well (e.g., check arkTxid != "" && arkExplorerUrl != "") so you don't
produce a relative /tx/{txid} link; apply the same change to the second
occurrence around lines rendering the same explorer link.
🔍 Arkana Review —
|
- Display truncated Ark transaction ID and explorer link in received/sent tx tables - Make Ark explorer URL configurable via getArkExplorerUrl() instead of hardcoding - Add safe truncation to prevent panic on short txid strings
🔍 Arkana PR Review — fulmine#385Author: kukks | Type: Feature (UI enhancement) SummaryAdds Ark transaction ID display and explorer link to the transaction details page in Fulmine. Addresses review feedback from previous PR #368 (superseded). What Changed
ReviewPositive:
Notes:
VerdictLGTM — clean feature addition with proper security practices (SafeURL, noopener, conditional rendering, bounds checking). |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
internal/interface/web/templates/pages/tx_templ.go (1)
49-164:arkExplorerUrlparameter accepted but unused inTransferTxPendingContent.
TransferTxPendingContentacceptsarkExplorerUrlin its signature (line 49) but doesn't pass it to any child component. The function renderscomponents.PendingTransferTable(tx.CreatedAt, nextClaim)(line 146) which doesn't receive the explorer URL.If this is intentional (pending transfers don't need explorer links until settled), consider documenting this or removing the unused parameter to keep the API clean. If the explorer link should be shown for pending transfers, the parameter needs to be wired through.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/interface/web/templates/pages/tx_templ.go` around lines 49 - 164, TransferTxPendingContent currently accepts arkExplorerUrl but never uses it; either remove the unused parameter or forward it to the child that would render explorer links. To fix, update the TransferTxPendingContent signature to drop arkExplorerUrl (and all call sites) if no explorer link is needed, or modify the call to components.PendingTransferTable(tx.CreatedAt, nextClaim) to instead pass arkExplorerUrl (e.g., components.PendingTransferTable(tx.CreatedAt, nextClaim, arkExplorerUrl)) and update the PendingTransferTable function signature and its render logic to use the explorer URL; ensure changes reference the TransferTxPendingContent function and components.PendingTransferTable to locate code to change.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@internal/interface/web/templates/pages/tx_templ.go`:
- Around line 49-164: TransferTxPendingContent currently accepts arkExplorerUrl
but never uses it; either remove the unused parameter or forward it to the child
that would render explorer links. To fix, update the TransferTxPendingContent
signature to drop arkExplorerUrl (and all call sites) if no explorer link is
needed, or modify the call to components.PendingTransferTable(tx.CreatedAt,
nextClaim) to instead pass arkExplorerUrl (e.g.,
components.PendingTransferTable(tx.CreatedAt, nextClaim, arkExplorerUrl)) and
update the PendingTransferTable function signature and its render logic to use
the explorer URL; ensure changes reference the TransferTxPendingContent function
and components.PendingTransferTable to locate code to change.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: e2900647-02e0-440a-8340-d5e98ce96dfe
⛔ Files ignored due to path filters (1)
internal/interface/web/static/styles.css.mapis excluded by!**/*.map
📒 Files selected for processing (10)
internal/interface/web/handlers.gointernal/interface/web/static/styles.cssinternal/interface/web/templates/components/feeTable.templinternal/interface/web/templates/components/feeTable_templ.gointernal/interface/web/templates/components/tx.templinternal/interface/web/templates/components/tx_templ.gointernal/interface/web/templates/pages/tx.templinternal/interface/web/templates/pages/tx_templ.gointernal/interface/web/types/transfers.gointernal/interface/web/utils.go
✅ Files skipped from review due to trivial changes (1)
- internal/interface/web/types/transfers.go
🚧 Files skipped from review as they are similar to previous changes (4)
- internal/interface/web/templates/pages/tx.templ
- internal/interface/web/templates/components/tx_templ.go
- internal/interface/web/templates/components/feeTable_templ.go
- internal/interface/web/templates/components/feeTable.templ
The refillFulmine setup crashes with "no funds to settle" when the faucet TX hasn't confirmed before Settle is called. Retry up to 3 times with 5s backoff to give the arkd server time to process funds.
🔍 Arkana PR ReviewPR: Add txid and explorer link in tx details page OverviewAdds Ark transaction ID display and explorer link to the transfer/transaction detail pages. Supersedes #368 with conflict resolution and review feedback addressed. ✅ What looks good
📋 Observations
🔒 Security
Cross-repo impactNone — self-contained Fulmine UI change. No protocol or SDK impact. One minor observation (non-blocking): verify |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@internal/test/e2e/main_test.go`:
- Around line 107-113: The test retries f.Settle(ctx, &pb.SettleRequest{})
unconditionally which can cause duplicate commits because SettleRequest has no
idempotency key; change the retry logic in main_test.go to only retry on
explicit retryable transport errors (e.g., transient network/timeouts) by
inspecting the returned error before retrying, and add contextual error wrapping
that includes the number of attempts and the last error when returning failure;
alternatively, implement an idempotency guard in the service layer where
ArkClient.Settle is invoked (the method calling ArkClient.Settle in the service
code) so duplicate server-side settlements become no-ops, and ensure error
messages include "Settle failed after N attempts: <last error>" to satisfy
descriptive error guidelines.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 50d5e7f4-0705-40ba-a342-698d916f7970
📒 Files selected for processing (1)
internal/test/e2e/main_test.go
| for attempts := 0; attempts < 3; attempts++ { | ||
| _, err = f.Settle(ctx, &pb.SettleRequest{}) | ||
| if err == nil { | ||
| break | ||
| } | ||
| time.Sleep(5 * time.Second) | ||
| } |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# 1) Inspect Settle implementations/callers and nearby guards.
rg -n -C3 --type=go '\bSettle\s*\('
# 2) Check Ark client interface/contracts for idempotency wording.
rg -n -C3 --type=go 'type .*ArkClient.*interface|ArkClient.*Settle'
# 3) Check proto request shape for idempotency fields.
fd -e proto | xargs rg -n -C2 'rpc Settle|message SettleRequest|idempot|nonce|request_id'Repository: ArkLabsHQ/fulmine
Length of output: 18883
Guard Settle retries with idempotency-safe conditions and improve error messaging.
Lines 107–113 retry f.Settle(...) unconditionally up to 3 times. The SettleRequest proto (api-spec/protobuf/fulmine/v1/service.proto:235) is empty with no idempotency key, request ID, or nonce. If attempt 1 commits server-side but returns a transport error, attempts 2–3 can trigger duplicate settlement. The service layer (internal/core/application/service.go:754–760) makes a direct call to ArkClient.Settle(ctx) with no state guard or idempotency check.
Additionally, after the loop exits with an error, the raw error is returned without context about retry attempts, violating "always use descriptive error messages in error handling" from the coding guidelines.
Suggested fix
for attempts := 0; attempts < 3; attempts++ {
_, err = f.Settle(ctx, &pb.SettleRequest{})
if err == nil {
break
}
+ if !isRetryableSettleErr(err) {
+ return fmt.Errorf("settle failed (non-retryable): %w", err)
+ }
time.Sleep(5 * time.Second)
}
+if err != nil {
+ return fmt.Errorf("settle failed after 3 attempts: %w", err)
+}Either restrict retries to explicitly retryable errors only, or ensure SettleRequest supports idempotency keys and the service layer guards against duplicate settlement.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@internal/test/e2e/main_test.go` around lines 107 - 113, The test retries
f.Settle(ctx, &pb.SettleRequest{}) unconditionally which can cause duplicate
commits because SettleRequest has no idempotency key; change the retry logic in
main_test.go to only retry on explicit retryable transport errors (e.g.,
transient network/timeouts) by inspecting the returned error before retrying,
and add contextual error wrapping that includes the number of attempts and the
last error when returning failure; alternatively, implement an idempotency guard
in the service layer where ArkClient.Settle is invoked (the method calling
ArkClient.Settle in the service code) so duplicate server-side settlements
become no-ops, and ensure error messages include "Settle failed after N
attempts: <last error>" to satisfy descriptive error guidelines.
🔍 Arkana Review —
|
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@internal/interface/web/handlers.go`:
- Around line 841-842: The Ark explorer URL mapping may be using the
non-official domain; inspect and update the getArkExplorerUrl function to ensure
it returns the officially documented Arkade explorer domain for each network
(use data.Network.Name to branch), or explicitly verify that
https://explorer.arkade.sh redirects to https://arkade.space and, if not
equivalent, replace the mapping to use https://arkade.space for mainnet and any
other correct domains for testnets so the handler builds consistent, documented
explorer links.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 940b68d0-b959-4b28-addc-218773b18418
📒 Files selected for processing (3)
internal/interface/web/handlers.gointernal/interface/web/templates/components/tx.templinternal/interface/web/templates/components/tx_templ.go
🚧 Files skipped from review as they are similar to previous changes (1)
- internal/interface/web/templates/components/tx.templ
| explorerUrl := getExplorerUrl(data.Network.Name) | ||
| arkExplorerUrl := getArkExplorerUrl(data.Network.Name) |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check the actual URL returned for each network
rg -n -A15 'func getArkExplorerUrl' --type go
# Also check if arkade.space is referenced elsewhere
rg -n 'arkade\.space' --type goRepository: ArkLabsHQ/fulmine
Length of output: 1007
🏁 Script executed:
# Search for test plan files or documentation
git ls-files | grep -E "(test|plan|spec|doc)" | head -20Repository: ArkLabsHQ/fulmine
Length of output: 992
🏁 Script executed:
# Search for any references to arkade in test files or documentation
rg -n "arkade" --type md,txt --max-count 20Repository: ArkLabsHQ/fulmine
Length of output: 91
🏁 Script executed:
# Look for test files that might reference explorer URLs
fd -type f -name "*.go" | xargs rg -l "explorer|arkade" | grep -i testRepository: ArkLabsHQ/fulmine
Length of output: 480
🏁 Script executed:
# Find all markdown and documentation files
find . -type f \( -name "*.md" -o -name "*.rst" -o -name "*.txt" \) | head -30Repository: ArkLabsHQ/fulmine
Length of output: 179
🏁 Script executed:
# Search for any references to arkade.space or test plan content
rg -i "arkade\.space|test.*plan" --max-count 30Repository: ArkLabsHQ/fulmine
Length of output: 43
🏁 Script executed:
# Search for PR or test documentation in common locations
ls -la . | grep -iE "readme|test|plan|doc"
cat README.md 2>/dev/null | head -50Repository: ArkLabsHQ/fulmine
Length of output: 2262
🏁 Script executed:
# Check the docs for test plan information
cat docs/swaps.regtest.mdRepository: ArkLabsHQ/fulmine
Length of output: 6127
🏁 Script executed:
# Search for arkade URLs in test files
rg -n "explorer|arkade" internal/test/e2e/Repository: ArkLabsHQ/fulmine
Length of output: 1760
🏁 Script executed:
# Check internal/interface/web/README.md for any relevant documentation
cat internal/interface/web/README.mdRepository: ArkLabsHQ/fulmine
Length of output: 3691
🌐 Web query:
arkade.space explorer.arkade.sh relationship
💡 Result:
arkade.space is the Arkade Protocol Blockchain Explorer, used to browse transactions, addresses, and VTXOs on the Arkade network. explorer.arkade.sh appears to be an alternative or related subdomain for the same or similar explorer functionality for the Arkade protocol, though direct confirmation of its operation was not found in search results. Arkade is a programmable execution layer for Bitcoin, enabling offchain financial applications with onchain settlement, as documented at docs.arkadeos.com. The explorer at arkade.space provides a user interface for exploring the Arkade blockchain data, including VTXOs managed by arkd servers.
Citations:
- 1: https://arkade.space/
- 2: https://docs.arkadeos.com/learn/faq/what-is-arkade
- 3: https://docs.arkadeos.com/arkd/what-is-arkd
- 4: https://docs.arkadeos.com/
Verify that Ark explorer URLs are consistent with official documentation.
The code uses https://explorer.arkade.sh for mainnet, but public documentation identifies https://arkade.space as the Arkade Protocol Blockchain Explorer. Confirm these domains are equivalent (e.g., via redirect) or update the URL mapping to use the official explorer domain.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@internal/interface/web/handlers.go` around lines 841 - 842, The Ark explorer
URL mapping may be using the non-official domain; inspect and update the
getArkExplorerUrl function to ensure it returns the officially documented Arkade
explorer domain for each network (use data.Network.Name to branch), or
explicitly verify that https://explorer.arkade.sh redirects to
https://arkade.space and, if not equivalent, replace the mapping to use
https://arkade.space for mainnet and any other correct domains for testnets so
the handler builds consistent, documented explorer links.
Derive Ark txid from existing Txid and Explorable fields instead of storing it separately. When Explorable is false, Txid is the Ark transaction ID to use for explorer links.
🔍 Arkana Review —
|
The TestSettleVHTLCByDelegateRefundWithOutpoint test consistently fails with "no funds to settle" because it runs last and the arkd server has been drained by previous tests. Call refillArkd() at the start of this test to ensure sufficient funds.
|
Iterative review — new commits since last review
All three test stability commits look correct. No security concerns. |
Summary
getArkExplorerUrl()instead of hardcodingarkade.space(addresses review feedback from @Kukks)Supersedes #368 — rebased onto current master, resolved conflicts, and addressed all review comments.
Test plan
https://arkade.space/tx/{txid})Summary by CodeRabbit
New Features
Style