docs: v4.1.0 audit updates - #159
Conversation
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>
📝 WalkthroughWalkthroughThis pull request updates Dash Platform 4.1 documentation. It revises protocol behavior, data contracts, DAPI endpoints, proofs, SDK examples, tutorials, and implementation references. ChangesDash Platform 4.1 documentation
Estimated code review effort: 4 (Complex) | ~60 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
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 ...`
There was a problem hiding this comment.
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 winName 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 winLine 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
evonodesorvalidators.</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 winMake the
time.localexample 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 winUse
RE2-compatibleas the adjective.Change
RE2 compatibletoRE2-compatible.Static analysis reports
QB_NEW_EN_HYPHENon 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 winClarify the
offsetandproverule.The description first says that
offsetcannot be combined withprove, then limits the rejection to a non-zerooffset. 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 winFix 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 winAlign the epoch limit with the platform range semantics.
MAX_EPOCHis65,279, not65,535. Ifcountis a record count with an inclusivestart_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 winUse the
$updatedAtfield name in this sentence.The phrase
updated at timestampis 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_HYPHENon 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 winGive 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 ResponseStatic 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 winUse
DASH/kBfor the fee rate.Dash Core’s
estimateSmartFeereturns 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 winDocument
getBlockrequest validation.GetBlockRequestuses aoneofcontainingheightandhash. The handler rejects requests with neither field, or with a whitespace-only hash, withINVALID_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 winRemove the unsupported freshness policy.
ResponseMetadataexposesheightandtime_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 winUse the v2 schema for protocol 13+ references. The
documentActionTokenCostdefinition 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 valueUse
duffas the primary unit name.The protocol defines
CREDITS_PER_DUFF, andduffis the canonical term. Use1000 credits/dufffor consistency.satoshiremains 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
📒 Files selected for processing (51)
CLAUDE.md_static/dashmint-lite.html_static/dashnote-lite.html_static/dashproof-lite.htmldocs/explanations/dapi.mddocs/explanations/dpns.mddocs/explanations/drive-platform-chain.mddocs/explanations/drive.mddocs/explanations/fees.mddocs/explanations/identity.mddocs/explanations/nft.mddocs/explanations/platform-consensus.mddocs/explanations/platform-protocol-data-contract.mddocs/explanations/platform-protocol-data-trigger.mddocs/explanations/platform-protocol-document.mddocs/explanations/platform-protocol-state-transition.mddocs/explanations/platform-protocol.mddocs/explanations/proofs.mddocs/explanations/query.mddocs/explanations/shielded-pool.mddocs/explanations/tokens.mddocs/index.mddocs/protocol-ref/address-system.mddocs/protocol-ref/data-contract-document.mddocs/protocol-ref/data-contract-token.mddocs/protocol-ref/data-contract.mddocs/protocol-ref/data-trigger.mddocs/protocol-ref/document.mddocs/protocol-ref/errors.mddocs/protocol-ref/identity.mddocs/protocol-ref/protocol-constants.mddocs/protocol-ref/shielded-pool.mddocs/protocol-ref/state-transition.mddocs/protocol-ref/token.mddocs/reference/dapi-endpoints-core-grpc-endpoints.mddocs/reference/dapi-endpoints-grpc-overview.mddocs/reference/dapi-endpoints-json-rpc-endpoints.mddocs/reference/dapi-endpoints-platform-endpoints.mddocs/reference/dapi-endpoints.mddocs/reference/data-contracts.mddocs/reference/glossary.mddocs/reference/platform-proofs.mddocs/reference/query-syntax.mddocs/resources/faq.mddocs/tutorials/building-platform.mddocs/tutorials/connecting-to-testnet.mddocs/tutorials/contracts-and-documents/retrieve-data-contract-history.mddocs/tutorials/example-apps/dashnote.mddocs/tutorials/node-setup/connect-to-a-network-dash-core-full-node.mddocs/tutorials/node-setup/connect-to-a-network-dash-masternode.mddocs/tutorials/setup-sdk-client.md
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>
There was a problem hiding this comment.
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 winDescribe 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
📒 Files selected for processing (12)
docs/explanations/fees.mddocs/explanations/identity.mddocs/explanations/platform-protocol-state-transition.mddocs/explanations/platform-protocol.mddocs/reference/dapi-endpoints-core-grpc-endpoints.mddocs/reference/dapi-endpoints-grpc-overview.mddocs/reference/dapi-endpoints-platform-endpoints.mddocs/reference/dapi-endpoints.mddocs/reference/data-contracts.mddocs/reference/glossary.mddocs/reference/platform-proofs.mddocs/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
Overview
Updates the documentation for Dash Platform v4.1.0 across the protocol reference, DAPI reference, explanations, and tutorials.
Highlights
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