Skip to content

docs: v4.1.0 audit updates - #159

Merged
thephez merged 17 commits into
dashpay:developfrom
thephez:v4.1-updates
Aug 11, 2026
Merged

docs: v4.1.0 audit updates#159
thephez merged 17 commits into
dashpay:developfrom
thephez:v4.1-updates

Conversation

@thephez

@thephez thephez commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

Overview

Updates the documentation for Dash Platform v4.1.0 across the protocol reference, DAPI reference, explanations, and tutorials.

Highlights

  • Documents protocol version 13 behavior, including document history, shielded pool changes, data contract options, and updated token rules.
  • Refreshes Platform and Core endpoint coverage, request bounds, pagination, aggregate query semantics, and proof behavior.
  • Corrects protocol wire formats, contract update rules, constants, error ranges, and missing address and shielded-transition constraints.
  • Expands explanations for aggregate queries, proofs, token behavior, DPNS transfers and sales, and shielded activity.
  • Updates tutorials, examples, archived-version links, and source references for the v4.1.0 codebase.

This PR is the result of a documentation audit against the v4.1.0 Platform implementation.

Preview: https://dash-docs--159.org.readthedocs.build/projects/platform/en/159/

Summary by CodeRabbit

Summary by CodeRabbit

  • Documentation
    • Updated Platform and SDK documentation for version 4.1, including automatic protocol negotiation.
    • Added guidance for username transfers and sales, document history, aggregate queries, shielded pools, address balances, proofs, tokens, and groups.
    • Clarified validation rules, limits, fees, authorization, endpoint behavior, streaming, pagination, and error handling.
    • Added JSON-RPC endpoints and expanded Core and Platform gRPC references.
    • Refreshed tutorials, setup requirements, local connections, terminology, and version references.

thephez and others added 9 commits August 5, 2026 09:06
DPNS domain documents no longer reject TRANSFER, PURCHASE and UPDATE_PRICE as of protocol version 13.

Add a concept-level "Name transfers and sales" section to the DPNS page covering transfer and sale, resolution to the new owner, the name record staying immutable, and recorded ownership and pricing history. Repoint both DPNS contract schema links to schema/v2.

Note on the data contract page that a document type's history-recording choice is fixed at creation and cannot be changed by a later contract update.

Add an Aggregate Queries section to the query explanation so the explanation layer has an entry point to count, total and average queries, cross-referencing the query syntax reference.

Repin the token configuration source links from v4.0.0 to v4.1.0, updating the base supply anchor from #L498 to #L606.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Update the build prerequisites to match the platform workspace at v4.1.0.

Correct the local devnet quorum sidecar port from 2444 to 22444. The dashmate local config overrides the base-config default, and the wasm-sdk local context provider uses 22444.

Drop the claim that Testnet operates on Dash Core v19.3.0.

Replace the deprecated js-dash-sdk local connection snippet on the masternode page with EvoSDK.localTrusted(), matching the rest of the tutorials, and link to the local devnet section.

Point node operators at the platform release notes for per-release upgrade steps and breaking changes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Add document history opt-in flags (keepsTransferHistory, keepsPurchaseHistory, keepsPricingHistory) to the document configuration table and full property dropdown, with a new Document History Flags section covering the meta-schema v2 gate and immutability on contract update. Note the distinction from the identically named token-level flag.

Scope the DPNS domain TRANSFER, PURCHASE and UPDATE_PRICE reject triggers to protocol version 12 and earlier, since bindings list v1 drops them, and document the records.identity rewrite applied on transfer and purchase.

Add a section on address balance changes originating from shielded pool activity and the protocol version 13 expansion of the recent per-block balance change set.

Repoint source links on these pages to v4.1.0, including the bindings list v1 path.
Update rs-dpp and rs-platform-version permalinks from v4.0.0 to v4.1.0 across the data contract, document, token, state transition, and errors pages, correcting line anchors that shifted upstream. The state transition size and batch limits now point at system_limits/v3.rs.

Document the v2 document meta-schema introduced by protocol version 13, including the keepsTransferHistory, keepsPurchaseHistory, and keepsPricingHistory document type flags and the document history system contract that records them.

Add the protocol version 13 requirement that group-valued authorized parties resolve at contract registration, and document the tagged singlePrice and setPrices forms of the token pricing schedule.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Update rs-dpp and rs-platform-value permalinks from v4.0.0 to v4.1.0 across the identity and shielded pool pages, correcting line anchors that shifted upstream. Shielded transition references now point at the specific v0/mod.rs definitions instead of the containing directory.

Document the exit denominations accepted by the Identity Create From Shielded Pool transition, including the protocol version 13 set that adds 0.03 and 0.25 DASH and retires 0.3 DASH, and the version 12 set retained for chain replay.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Update rs-dpp and rs-platform-version permalinks from v4.0.0 to v4.1.0, correcting line anchors that shifted upstream. System limit sources now point at system_limits/v3.rs, which supersedes v1.rs.

Correct the minimum withdrawal amount to 1,000,000 credits (1,000 duffs), raised from 190,000 credits in protocol version 12, and source it from system limits rather than the withdrawal transition module.

Add the maximum document value depth of 256 nested containers, introduced in protocol version 13 and unbounded in earlier versions.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…tics

Document the aggregate query limit contract, including the omit-for-default sentinel convention and the prove-versus-no-proof handling of an oversized limit, plus how a cursor composes with a range operator.

Add the new request bounds across the Platform and Core gRPC endpoints, the page-wide Platform request cap, and a stream termination and backpressure section covering RESOURCE_EXHAUSTED as a resumable signal.

Scope getShieldedAnchors to the anchors a node retains, and document the two-proof envelope used for compacted address balance proofs at protocol version 13.

Add glossary entries distinguishing the three history mechanisms, and repoint the DAPI code reference to rs-dapi.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Update the archived docs links in the index and DAPI endpoint reference from 2.0.0 to 4.0.0, and clarify in CLAUDE.md that endpoint version annotations are bolded/italicized by major release.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…oring

Add a verification step to the proofs explanation noting that a client checks the block height a response is anchored to, rejecting responses that have fallen too far behind the most recent height seen or that omit the information entirely. This is enforced by verify_metadata_height in rs-sdk, which the previous root-hash and signature steps did not cover.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This pull request updates Dash Platform 4.1 documentation. It revises protocol behavior, data contracts, DAPI endpoints, proofs, SDK examples, tutorials, and implementation references.

Changes

Dash Platform 4.1 documentation

Layer / File(s) Summary
SDK and connection guidance
_static/*.html, docs/tutorials/*, CLAUDE.md
Examples use Evo SDK 4.1 and automatic protocol negotiation. Local connection instructions and development tool versions are updated.
Platform concepts and protocol behavior
docs/explanations/*, docs/resources/faq.md
Documentation covers updated identity, address, shielded-pool, consensus, fee, proof, query, NFT, token, DPNS, and state-transition behavior.
Data contract and protocol references
docs/protocol-ref/*, docs/reference/data-contracts.md
References and schemas target Platform 4.1. Contract history, token formats, address rules, identity proofs, shielded-pool constraints, and state-transition rules are expanded.
DAPI endpoint references
docs/reference/dapi-endpoints*.md, docs/reference/platform-proofs.md
Endpoint availability, request validation, limits, streaming, pagination, proofs, JSON-RPC methods, and status responses are updated.
Navigation and terminology
docs/index.md, docs/reference/glossary.md
Previous-version links and glossary definitions now reflect current Platform concepts and terminology.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the documentation scope and the v4.1.0 audit updates covered by the pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

thephez and others added 7 commits August 6, 2026 17:10
Apply the v4.1.0 explanation audit. The largest cluster is immutability: token configuration marked Description, keep history, start paused, allow transfer to frozen balance, and main control group modification as mutable when they are fixed at registration, and the data contract page listed token configuration changes as a permitted contract update that validation always rejects.

Correct outright-wrong mechanics: document create and replace no longer list platform-assigned timestamps as caller-supplied fields, token fees are scoped per document type and per action rather than contract-wide, the fee multiplier no longer claims to scale user-paid fees, and query.md no longer denies the history queries that ship in v4.1.0.

Document the shielded pool constraints that reject otherwise-valid transitions - the minimum pool notes gate on exits, anchor expiry, and the fixed identity-creation denominations - and propagate the address system and shielded pool into the protocol overview, state transition authorization, and proofs coverage.

Also split the withdrawals data trigger rows, add the masternode rewards bindings, point the binding list at the active version, attribute Drive and platform chain hosting to evonodes, and fix the DPNS contested name criteria.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Add a shared "Result limits and pagination" section covering the default 100-item count/limit, the 100-entry cap on identifier arrays, and the endpoints with different accepted ranges or server-side response caps, and point per-endpoint fields at it.

Document the v4.1.0 bounds on contested resource index and cursor values, the single contested index per document type, offset/prove exclusivity, epoch and protx hash argument limits, and the per-array identifier caps on identity, token, and address endpoints.

Add response object tables for getContestedResourceVoteState, getVotePollsByEndDate, getCurrentQuorumsInfo, and getStatus, and explain the proto3 default omissions that hide voteChoiceType, revision, isBanned, and catchingUp from JSON output.

Correct the masternode identity ID section to distinguish the owner identity from the derived voter and operator identities, fix the search_key request type and security_level_map field names, correct the getIdentitiesBalances example to camelCase keys and string balances, and refresh the getStatus example with current network values.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…RPC methods

Move getBlock and getMasternodeStatus out of the "Disabled Endpoints" section into the main Core gRPC endpoint list, since they are reachable again, and drop the "Disabled in Dash Platform v1.0.0" annotations from their overview rows. Refresh the getMasternodeStatus example proTxHash.

Document the previously missing JSON-RPC getStatus and sendRawTransaction methods and add them to the overview table. Note that JSON-RPC getStatus returns the same response object as the Platform gRPC getStatus, and clarify on the deprecated Core gRPC getStatus that it is a distinct endpoint replaced by getBlockchainStatus and getMasternodeStatus.

Correct subscribeToTransactionsWithProofs: the bloom filter is optional, and omitting it streams all transactions. When supplied, v_data must be non-empty and n_hash_funcs must be between 1 and 50. Also record that send_transaction_hashes is defined in the protocol but currently ignored by the node, and fix the example's empty v_data.

Add getDocumentHistory to the Platform overview table, replace the commented-out getEstimatedTransactionFee placeholder with a ready-to-restore draft noting it is implemented in rs-dapi but not publicly exposed, and point the JSON-RPC implementation reference at the rs-dapi jsonrpc_translator module.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ils for v4.1.0

Correct the JSON Schema keyword restrictions on both the protocol reference and data contracts pages: $ref allows internal references beginning with # rather than being disabled outright, dependentSchemas is not supported, arrays are limited to byte arrays requiring byteArray: true, and per-item array schemas are unavailable. Drop the uniqueItems/maxItems row and the stale dependentSchema and prefixItems advice.

Document the sized_integer_types and tokens contract configuration keys and the keepsTransferHistory, keepsPurchaseHistory, and keepsPricingHistory document options, and point the DPNS and document meta-schema links at the v2 schemas.

Replace the 16 KB serialized data limit with the v4.1.0 system limits: 20 KiB per state transition and 5 KiB per document field value.

Correct query syntax: offset is not supported for document queries in v4.1.0, the in clause requires 1 to 100 unique values, the limit maximum is node-configurable, and operator names match a fixed alias set. Restructure the range operator, compound index ordering, and aggregate query notes from admonitions into headed subsections so they are linkable.

Document the address tree sync proofs on the platform proofs page: neither getAddressesTrunkState nor getAddressesBranchState takes a prove parameter, trunk proofs are served from a checkpoint whose height trails the tip and whose quorum must be resolved at that height, and branch responses carry only a bare merkProof. Also describe proof verification in terms of rs-drive-proof-verifier and the WebAssembly bindings rather than naming a specific package.

Add Evonode and Group glossary entries, expand Credits with the conversion table reference, and extend the DAPI Client, Platform state, and State transition entries to cover the address system and shielded pool.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…f detail

Rename the "Limits on aggregate queries" section to "Aggregate query limits" and update the three getDocuments cross-references. Fold the separate aggregate cursor and unsupported operation sections into a single "Other aggregate restrictions" list, and move the oversized-limit proof behavior under a subheading.

Distinguish aggregate result modes from DOCUMENTS throughout the limit discussion: `limit: 0` is rejected only in aggregate modes and uses the configured default when returning documents, cursors apply only to DOCUMENTS, and the configured maximum is described as a default rather than a fixed value. Correct offset to say it is present on the wire but rejected with `Unsupported`, and give operator aliases their own table so the evaluation operator table stays readable.

Trim the address tree sync section on the platform proofs page to the verification consequences and defer request/response mechanics to the endpoint reference, and note the two departures from the standard Proof structure where that structure is introduced rather than in the overview. Add a note on the getAddressesTrunkState example that protocol version 13 and above use the compacted proof encoding.

Add an Evo SDK tab to the aggregate query example showing count/sum/average in place of a select projection, including the hex-encoded index keys returned by grouped counts and the schema flags an aggregate requires.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Fix the token JSON examples, which were non-functional in four ways: the discriminator is `$formatVersion`, change control rules are internally tagged so the `{"V0": {...}}` wrapper does not exist on the wire, rule fields serialize in camelCase, and authorized action takers are `{"$type": ...}` maps rather than bare strings. Add the JSON values to the authorized parties and distribution tables.

Correct the asset lock proof discriminator to `$type` with string values `"instant"` and `"chain"`, and rename the token transfer `amount` field to `$amount`.

Document effective limits that differ from the documented ones: shielded transitions cap at 6 actions rather than 16 because the Halo 2 proof grows per action, and address credit withdrawals enforce a withdrawal amount floor above the documented per-input minimum. Add the consensus constraints omitted from the shield and shielded withdrawal transitions.

Expand the data contract update section to cover tokens, groups, keywords, description, and the one-way `sizedIntegerTypes` transition, and restate the index rule as tree compatibility plus aggregate flag immutability. Add the keyword constraints and the byte-versus-character description bound.

Split the aggregate query flags into document-type and index-level subsections, and add the index-level flags to the document indices reference. Reword the `pattern` restriction to name the Rust regex engine, since RE2 validation is not performed. Point the DPNS examples at the v2 schema active under protocol version 13.

Repoint five identity constant links to the v3 state transition versions file and correct the document state error code range to 40100-40199.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Ran `python3 scripts/tutorial-sync/sync_tutorial_code.py  --source ...`

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 9

Note

Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.

🟡 Minor comments (13)
docs/tutorials/node-setup/connect-to-a-network-dash-masternode.md-119-129 (1)

119-129: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Name the SDK consistently.

Line 119 says “Dash SDK”, but the example imports @dashevo/evo-sdk. Use “Dash Evo SDK” so the prose identifies the same client as the code.

Proposed wording
-To make the Dash SDK connect to your local network, use the `localTrusted()` factory method:
+To make the Dash Evo SDK connect to your local network, use the `localTrusted()` factory method:
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/tutorials/node-setup/connect-to-a-network-dash-masternode.md` around
lines 119 - 129, Update the prose introducing localTrusted() to consistently
call it the “Dash Evo SDK” instead of “Dash SDK,” while leaving the example and
surrounding instructions unchanged.
docs/explanations/drive-platform-chain.md-22-22 (1)

22-22: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Line 22 says the platform chain is hosted exclusively on evonodes, but the later description still says that blocks are shared among all masternodes. If regular masternodes do not host or validate the platform chain, update that wording to evonodes or validators.

</review_comment>

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/explanations/drive-platform-chain.md` at line 22, Update the later
platform-chain description that says blocks are shared among all masternodes to
refer only to evonodes or validators, keeping the terminology consistent with
the exclusive hosting statement.
docs/reference/dapi-endpoints-platform-endpoints.md-3633-3633 (1)

3633-3633: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Make the time.local example use the documented unit.

Line 3565 documents milliseconds, but this value has 10 digits and is seconds-like. The other example time values have 13 digits. Replace it with a millisecond value, or correct the field description after verifying the wire format.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/reference/dapi-endpoints-platform-endpoints.md` at line 3633, Update the
time.local example in the relevant endpoint documentation to use a 13-digit
millisecond timestamp consistent with its documented unit and the other time
examples; preserve the surrounding example structure.
docs/reference/data-contracts.md-472-472 (1)

472-472: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Use RE2-compatible as the adjective.

Change RE2 compatible to RE2-compatible.

Static analysis reports QB_NEW_EN_HYPHEN on this line.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/reference/data-contracts.md` at line 472, Update the pattern description
in the data-contracts table to use the hyphenated adjective “RE2-compatible”
instead of “RE2 compatible,” preserving the rest of the wording and link
unchanged.

Source: Linters/SAST tools

docs/reference/dapi-endpoints-platform-endpoints.md-494-494 (1)

494-494: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Clarify the offset and prove rule.

The description first says that offset cannot be combined with prove, then limits the rejection to a non-zero offset. State one rule consistently. If zero is allowed with proofs, say that only non-zero offsets are rejected.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/reference/dapi-endpoints-platform-endpoints.md` at line 494, Update the
offset parameter description in the API documentation to state consistently that
proofs reject only non-zero offsets, while offset zero remains allowed with
prove; remove the contradictory claim that offset cannot be combined with prove.
docs/reference/dapi-endpoints-platform-endpoints.md-3079-3080 (2)

3079-3080: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Fix the changed table pipe style.

These changed rows omit trailing pipes. Markdownlint reports MD055. Add the trailing | to each row.

Static analysis reports MD055 on these rows.

Also applies to: 3477-3478

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/reference/dapi-endpoints-platform-endpoints.md` around lines 3079 -
3080, Add the missing trailing pipe character to the `start_epoch` and `count`
table rows, including the corresponding rows in the other referenced section, so
all Markdown table rows use consistent pipe style and satisfy MD055.

Source: Linters/SAST tools


3079-3080: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Align the epoch limit with the platform range semantics.

MAX_EPOCH is 65,279, not 65,535. If count is a record count with an inclusive start_epoch, document the corresponding exclusive upper bound and update both descriptions.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/reference/dapi-endpoints-platform-endpoints.md` around lines 3079 -
3080, Update the start_epoch and count descriptions to use MAX_EPOCH 65,279,
documenting the exclusive upper bound implied by an inclusive start_epoch and
record count. Ensure both validation wording and the effective count ceiling
consistently reflect 65,279.
docs/explanations/platform-protocol-document.md-122-122 (1)

122-122: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Use the $updatedAt field name in this sentence.

The phrase updated at timestamp is unclear. State the field name directly and avoid ambiguity.

Proposed wording
-If the data contract sets the updated at timestamp as required for the document type, Platform assigns the updated timestamp and block height from block info rather than accepting them from the caller.
+If the data contract requires `$updatedAt` for the document type, Platform assigns the timestamp and block height from block information rather than accepting them from the caller.

Static analysis reports QB_NEW_EN_HYPHEN on this line.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/explanations/platform-protocol-document.md` at line 122, Update the
sentence to refer explicitly to the $updatedAt field instead of “updated at
timestamp,” while preserving the existing behavior that Platform derives the
updated timestamp and block height from block info when the field is required.
Also rephrase as needed to avoid the reported hyphenation issue.

Source: Linters/SAST tools

docs/reference/dapi-endpoints-json-rpc-endpoints.md-233-264 (1)

233-264: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Give the new example headings unique names.

Line 233 and Line 264 both use #### Example Request and Response. Markdownlint reports MD024 for duplicate headings. Include the endpoint name in each heading.

Proposed headings
-#### Example Request and Response
+#### `getStatus` Example Request and Response
...
-#### Example Request and Response
+#### `sendRawTransaction` Example Request and Response

Static analysis reports MD024 on these headings.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/reference/dapi-endpoints-json-rpc-endpoints.md` around lines 233 - 264,
Rename the duplicate “Example Request and Response” headings in the endpoint
documentation to include their corresponding endpoint names, including the
examples around getStatus and sendRawTransaction, while preserving the existing
heading level and content.

Source: Linters/SAST tools

docs/reference/dapi-endpoints-core-grpc-endpoints.md-855-856 (1)

855-856: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Use DASH/kB for the fee rate.

Dash Core’s estimateSmartFee returns the rate in DASH per kilobyte, not BTC per kilobyte.

Suggested change
-The rate is sourced from Dash Core's `estimateSmartFee` and is denominated in BTC/kB.
+The rate is sourced from Dash Core's `estimateSmartFee` and is denominated in DASH/kB.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/reference/dapi-endpoints-core-grpc-endpoints.md` around lines 855 - 856,
Update the fee-rate unit description in the estimateSmartFee documentation from
BTC/kB to DASH/kB, preserving the existing explanation of the zero-fee fallback.

Source: MCP tools

docs/reference/dapi-endpoints-core-grpc-endpoints.md-155-255 (1)

155-255: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Document getBlock request validation. GetBlockRequest uses a oneof containing height and hash. The handler rejects requests with neither field, or with a whitespace-only hash, with INVALID_ARGUMENT: hash or height is not specified. Mark exactly one field as required and document this error.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/reference/dapi-endpoints-core-grpc-endpoints.md` around lines 155 - 255,
Update the getBlock documentation to state that exactly one of hash or height is
required, reflecting the GetBlockRequest oneof validation. Add the
INVALID_ARGUMENT error `hash or height is not specified` for requests with
neither field or a whitespace-only hash, while preserving the existing parameter
descriptions and examples.

Source: Coding guidelines

docs/explanations/proofs.md-59-60 (1)

59-60: 🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win

Remove the unsupported freshness policy.

ResponseMetadata exposes height and time_ms, but Platform does not define clock-skew, height-lag, or high-water-mark rejection rules. Describe these fields as blockchain-state context instead.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/explanations/proofs.md` around lines 59 - 60, Update the
freshness-verification explanation around “Client checks freshness on two
independent axes” to remove claims about clock-skew, height-lag,
high-water-mark, and missing-field rejection policies. Describe
ResponseMetadata.height and ResponseMetadata.time_ms only as blockchain-state
context, while preserving the cryptographic confirmation statement that follows.
docs/protocol-ref/data-contract-document.md-280-280 (1)

280-280: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Use the v2 schema for protocol 13+ references. The documentActionTokenCost definition is identical in v0 and v2 at #L294-L337, so update line 280 to /v2/ or state why v0 remains canonical. Line 424 uses v0 for general constraints, but v2 adds rules and properties. Change that link to /v2/ or scope it to pre-v12 validation.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/protocol-ref/data-contract-document.md` at line 280, Update the
documentActionTokenCost reference in the tokenCost documentation to use the v2
schema for protocol 13+; also update the general-constraints reference near the
later schema link to v2, or explicitly scope the v0 link to pre-v12 validation.

Source: Coding guidelines

🧹 Nitpick comments (1)
docs/protocol-ref/state-transition.md (1)

16-16: 🎯 Functional Correctness | 🔵 Trivial | 💤 Low value

Use duff as the primary unit name.

The protocol defines CREDITS_PER_DUFF, and duff is the canonical term. Use 1000 credits/duff for consistency. satoshi remains a valid synonym.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/protocol-ref/state-transition.md` at line 16, Update the
state-transition fee description to use “duff” as the primary unit, changing the
rate wording to 1000 credits/duff while preserving satoshi as an acceptable
synonym if mentioned.

Source: MCP tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/explanations/fees.md`:
- Around line 45-49: Revise the fee explanation near “Fee Multiplier” to clarify
that the multiplier does not scale the base fee, while the final charged fee is
still calculated using the complete formula, including userFeeIncrease and
storageRefund. Keep the active 1.0x behavior and existing fee-component
descriptions accurate.

In `@docs/explanations/identity.md`:
- Around line 23-24: Update the Identity Create Process and Identity Balance
Topup Process sections to explicitly label their existing asset-lock steps as
the Core-chain path. Add separate layer 2 procedures for Platform-address
funding and shielded-pool creation/top-up, or link to authoritative
documentation covering those flows, so the document no longer implies every
identity requires a Core-chain asset lock.

In `@docs/explanations/platform-protocol-state-transition.md`:
- Around line 33-35: Update the shielded authorization description in
docs/explanations/platform-protocol-state-transition.md lines 33-35 and
docs/explanations/platform-protocol.md lines 43-45 to state that shielded
transitions omit the generic identity transition signature, while retaining
Orchard spendAuthSig and bindingSignature authorization and noting that
applicable transitions may also include address witnesses or an asset-lock
signature.

In `@docs/reference/dapi-endpoints-grpc-overview.md`:
- Around line 44-50: Update the streaming endpoint recovery guidance to
distinguish confirmed-block resumption from interrupted mempool snapshots:
require a mempool rescan or reconciliation after reconnecting and transaction-ID
deduplication to prevent missed or duplicated unconfirmed transactions. Keep the
existing last-completed-block resume behavior for block data and the
opening-stream backoff guidance unchanged.

In `@docs/reference/dapi-endpoints-platform-endpoints.md`:
- Line 4849: Update the documentation for the unpaginated endpoint’s
RESOURCE_EXHAUSTED response so it is not described as unconditionally retryable.
State that retries should use backoff and, where applicable, an alternate node,
or specify the condition under which retrying is useful to avoid loops on the
same node.

In `@docs/reference/dapi-endpoints.md`:
- Line 162: Align the JSON-RPC getStatus classification across both
documentation sites: in docs/reference/dapi-endpoints.md lines 162-162, place
getStatus under the Platform listing or label it as a Platform JSON-RPC
endpoint; in docs/reference/glossary.md lines 49-52, clarify that JSON-RPC
exposes Platform status or explicitly scope the description to Core-only
methods.

In `@docs/reference/data-contracts.md`:
- Line 129: Update all remaining document meta-schema links in
docs/reference/data-contracts.md from document/v0/document-meta.json to the v2
document-meta.json URL, preserving each referenced definition and changing
anchors to the specified v2 locations (`#L23`, `#L24`, `#L21`, `#L358`, `#L359`, `#L482`,
`#L378`, `#L188`, and `#L201`).

In `@docs/reference/platform-proofs.md`:
- Around line 54-59: Revise the paragraph around the statement that clients do
not parse proofs manually to distinguish standard SDK verification from
direct-client handling. State that SDKs hide parsing for standard proofs, while
direct clients must follow the protocol-specific compacted proof envelope and
bare merkProof verification paths described below; retain the existing verifier
and WebAssembly references.

In `@docs/reference/query-syntax.md`:
- Around line 174-175: Update the orderBy operator list in the query syntax
reference to include the `in` operator, keeping the existing documentation
wording and examples unchanged.

---

Minor comments:
In `@docs/explanations/drive-platform-chain.md`:
- Line 22: Update the later platform-chain description that says blocks are
shared among all masternodes to refer only to evonodes or validators, keeping
the terminology consistent with the exclusive hosting statement.

In `@docs/explanations/platform-protocol-document.md`:
- Line 122: Update the sentence to refer explicitly to the $updatedAt field
instead of “updated at timestamp,” while preserving the existing behavior that
Platform derives the updated timestamp and block height from block info when the
field is required. Also rephrase as needed to avoid the reported hyphenation
issue.

In `@docs/explanations/proofs.md`:
- Around line 59-60: Update the freshness-verification explanation around
“Client checks freshness on two independent axes” to remove claims about
clock-skew, height-lag, high-water-mark, and missing-field rejection policies.
Describe ResponseMetadata.height and ResponseMetadata.time_ms only as
blockchain-state context, while preserving the cryptographic confirmation
statement that follows.

In `@docs/protocol-ref/data-contract-document.md`:
- Line 280: Update the documentActionTokenCost reference in the tokenCost
documentation to use the v2 schema for protocol 13+; also update the
general-constraints reference near the later schema link to v2, or explicitly
scope the v0 link to pre-v12 validation.

In `@docs/reference/dapi-endpoints-core-grpc-endpoints.md`:
- Around line 855-856: Update the fee-rate unit description in the
estimateSmartFee documentation from BTC/kB to DASH/kB, preserving the existing
explanation of the zero-fee fallback.
- Around line 155-255: Update the getBlock documentation to state that exactly
one of hash or height is required, reflecting the GetBlockRequest oneof
validation. Add the INVALID_ARGUMENT error `hash or height is not specified` for
requests with neither field or a whitespace-only hash, while preserving the
existing parameter descriptions and examples.

In `@docs/reference/dapi-endpoints-json-rpc-endpoints.md`:
- Around line 233-264: Rename the duplicate “Example Request and Response”
headings in the endpoint documentation to include their corresponding endpoint
names, including the examples around getStatus and sendRawTransaction, while
preserving the existing heading level and content.

In `@docs/reference/dapi-endpoints-platform-endpoints.md`:
- Line 3633: Update the time.local example in the relevant endpoint
documentation to use a 13-digit millisecond timestamp consistent with its
documented unit and the other time examples; preserve the surrounding example
structure.
- Line 494: Update the offset parameter description in the API documentation to
state consistently that proofs reject only non-zero offsets, while offset zero
remains allowed with prove; remove the contradictory claim that offset cannot be
combined with prove.
- Around line 3079-3080: Add the missing trailing pipe character to the
`start_epoch` and `count` table rows, including the corresponding rows in the
other referenced section, so all Markdown table rows use consistent pipe style
and satisfy MD055.
- Around line 3079-3080: Update the start_epoch and count descriptions to use
MAX_EPOCH 65,279, documenting the exclusive upper bound implied by an inclusive
start_epoch and record count. Ensure both validation wording and the effective
count ceiling consistently reflect 65,279.

In `@docs/reference/data-contracts.md`:
- Line 472: Update the pattern description in the data-contracts table to use
the hyphenated adjective “RE2-compatible” instead of “RE2 compatible,”
preserving the rest of the wording and link unchanged.

In `@docs/tutorials/node-setup/connect-to-a-network-dash-masternode.md`:
- Around line 119-129: Update the prose introducing localTrusted() to
consistently call it the “Dash Evo SDK” instead of “Dash SDK,” while leaving the
example and surrounding instructions unchanged.

---

Nitpick comments:
In `@docs/protocol-ref/state-transition.md`:
- Line 16: Update the state-transition fee description to use “duff” as the
primary unit, changing the rate wording to 1000 credits/duff while preserving
satoshi as an acceptable synonym if mentioned.
🪄 Autofix

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 Plus

Run ID: 522146a2-843d-4c65-90c8-bfca980fa9c2

📥 Commits

Reviewing files that changed from the base of the PR and between bf3c1a8 and bd16967.

📒 Files selected for processing (51)
  • CLAUDE.md
  • _static/dashmint-lite.html
  • _static/dashnote-lite.html
  • _static/dashproof-lite.html
  • docs/explanations/dapi.md
  • docs/explanations/dpns.md
  • docs/explanations/drive-platform-chain.md
  • docs/explanations/drive.md
  • docs/explanations/fees.md
  • docs/explanations/identity.md
  • docs/explanations/nft.md
  • docs/explanations/platform-consensus.md
  • docs/explanations/platform-protocol-data-contract.md
  • docs/explanations/platform-protocol-data-trigger.md
  • docs/explanations/platform-protocol-document.md
  • docs/explanations/platform-protocol-state-transition.md
  • docs/explanations/platform-protocol.md
  • docs/explanations/proofs.md
  • docs/explanations/query.md
  • docs/explanations/shielded-pool.md
  • docs/explanations/tokens.md
  • docs/index.md
  • docs/protocol-ref/address-system.md
  • docs/protocol-ref/data-contract-document.md
  • docs/protocol-ref/data-contract-token.md
  • docs/protocol-ref/data-contract.md
  • docs/protocol-ref/data-trigger.md
  • docs/protocol-ref/document.md
  • docs/protocol-ref/errors.md
  • docs/protocol-ref/identity.md
  • docs/protocol-ref/protocol-constants.md
  • docs/protocol-ref/shielded-pool.md
  • docs/protocol-ref/state-transition.md
  • docs/protocol-ref/token.md
  • docs/reference/dapi-endpoints-core-grpc-endpoints.md
  • docs/reference/dapi-endpoints-grpc-overview.md
  • docs/reference/dapi-endpoints-json-rpc-endpoints.md
  • docs/reference/dapi-endpoints-platform-endpoints.md
  • docs/reference/dapi-endpoints.md
  • docs/reference/data-contracts.md
  • docs/reference/glossary.md
  • docs/reference/platform-proofs.md
  • docs/reference/query-syntax.md
  • docs/resources/faq.md
  • docs/tutorials/building-platform.md
  • docs/tutorials/connecting-to-testnet.md
  • docs/tutorials/contracts-and-documents/retrieve-data-contract-history.md
  • docs/tutorials/example-apps/dashnote.md
  • docs/tutorials/node-setup/connect-to-a-network-dash-core-full-node.md
  • docs/tutorials/node-setup/connect-to-a-network-dash-masternode.md
  • docs/tutorials/setup-sdk-client.md

Comment thread docs/explanations/fees.md
Comment thread docs/explanations/identity.md
Comment thread docs/explanations/platform-protocol-state-transition.md Outdated
Comment thread docs/reference/dapi-endpoints-grpc-overview.md Outdated
Comment thread docs/reference/dapi-endpoints-platform-endpoints.md Outdated
Comment thread docs/reference/dapi-endpoints.md
Comment thread docs/reference/data-contracts.md
Comment thread docs/reference/platform-proofs.md Outdated
Comment thread docs/reference/query-syntax.md Outdated
Correct the shielded authorization description on both protocol explanation pages. Shielded transitions omit the generic identity signature but retain Orchard `spendAuthSig` and `bindingSignature`, and applicable transitions also carry address witnesses or an asset-lock signature.

Add `in` to the operators listed for `orderBy`, matching the range operator section and the `is_range` classification in rs-drive.

Note that JSON-RPC `getStatus` returns Platform status rather than Core information, on both the endpoint listing and the DAPI Client glossary entry.

Document that an interrupted mempool snapshot has no resume cursor on `subscribeToTransactionsWithProofs`, and point the streaming overview at that endpoint rather than describing mempool recovery generically. Replace the unconditional retry advice on `getShieldedAnchors` with backoff and alternate-node guidance.

Link the layer 2 identity funding paths from the identity explanation and label the existing procedures as the Core-chain path. Clarify that the fee multiplier does not scale the base fee while the final fee still follows the complete formula, and that SDKs verify standard proofs automatically while direct clients handle the compacted envelope and bare `merkProof` paths.

Point the data contract meta-schema references at the v2 schema and recompute the line anchors.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/explanations/identity.md (1)

74-76: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Describe the net credit amount after fees.

Line 74 says the identity balance increases by the full locked amount. Line 38 says the initial balance is the locked value minus fees. Use consistent wording so readers do not calculate an incorrect identity balance.

Proposed wording
- their credit balance increases by that amount.
+ their credit balance increases by the net amount credited after applicable fees.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/explanations/identity.md` around lines 74 - 76, Update the credits
explanation near the identity balance increase to state that the balance
increases by the locked amount minus applicable fees, matching the initial
balance definition elsewhere in the document; preserve the surrounding
descriptions of credit sources, fee deductions, and withdrawals.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@docs/explanations/identity.md`:
- Around line 74-76: Update the credits explanation near the identity balance
increase to state that the balance increases by the locked amount minus
applicable fees, matching the initial balance definition elsewhere in the
document; preserve the surrounding descriptions of credit sources, fee
deductions, and withdrawals.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 985885cc-0323-46bd-8b01-3e18af03d37c

📥 Commits

Reviewing files that changed from the base of the PR and between bd16967 and ea1ef14.

📒 Files selected for processing (12)
  • docs/explanations/fees.md
  • docs/explanations/identity.md
  • docs/explanations/platform-protocol-state-transition.md
  • docs/explanations/platform-protocol.md
  • docs/reference/dapi-endpoints-core-grpc-endpoints.md
  • docs/reference/dapi-endpoints-grpc-overview.md
  • docs/reference/dapi-endpoints-platform-endpoints.md
  • docs/reference/dapi-endpoints.md
  • docs/reference/data-contracts.md
  • docs/reference/glossary.md
  • docs/reference/platform-proofs.md
  • docs/reference/query-syntax.md
🚧 Files skipped from review as they are similar to previous changes (9)
  • docs/explanations/platform-protocol-state-transition.md
  • docs/reference/dapi-endpoints-grpc-overview.md
  • docs/reference/glossary.md
  • docs/reference/dapi-endpoints.md
  • docs/explanations/platform-protocol.md
  • docs/explanations/fees.md
  • docs/reference/dapi-endpoints-core-grpc-endpoints.md
  • docs/reference/platform-proofs.md
  • docs/reference/dapi-endpoints-platform-endpoints.md

@thephez
thephez merged commit 63b0ef0 into dashpay:develop Aug 11, 2026
2 checks passed
@thephez
thephez deleted the v4.1-updates branch August 11, 2026 20:54
@thephez
thephez restored the v4.1-updates branch August 12, 2026 15:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant