dero-mcp-server 0.1.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/POSITIONING.md +94 -0
  2. package/README.md +132 -31
  3. package/SKILL.md +264 -0
  4. package/data/docs-index.json +276 -264
  5. package/dist/bn254.d.ts +74 -0
  6. package/dist/bn254.d.ts.map +1 -0
  7. package/dist/bn254.js +205 -0
  8. package/dist/bn254.js.map +1 -0
  9. package/dist/citations.d.ts +140 -0
  10. package/dist/citations.d.ts.map +1 -0
  11. package/dist/citations.js +322 -0
  12. package/dist/citations.js.map +1 -0
  13. package/dist/composites/_shared.d.ts +119 -0
  14. package/dist/composites/_shared.d.ts.map +1 -0
  15. package/dist/composites/_shared.js +152 -0
  16. package/dist/composites/_shared.js.map +1 -0
  17. package/dist/composites/audit-chain-artifact-claim.d.ts +128 -0
  18. package/dist/composites/audit-chain-artifact-claim.d.ts.map +1 -0
  19. package/dist/composites/audit-chain-artifact-claim.js +305 -0
  20. package/dist/composites/audit-chain-artifact-claim.js.map +1 -0
  21. package/dist/composites/diagnose-chain-health.d.ts +64 -0
  22. package/dist/composites/diagnose-chain-health.d.ts.map +1 -0
  23. package/dist/composites/diagnose-chain-health.js +144 -0
  24. package/dist/composites/diagnose-chain-health.js.map +1 -0
  25. package/dist/composites/estimate-deploy-cost.d.ts +83 -0
  26. package/dist/composites/estimate-deploy-cost.d.ts.map +1 -0
  27. package/dist/composites/estimate-deploy-cost.js +116 -0
  28. package/dist/composites/estimate-deploy-cost.js.map +1 -0
  29. package/dist/composites/explain-smart-contract.d.ts +64 -0
  30. package/dist/composites/explain-smart-contract.d.ts.map +1 -0
  31. package/dist/composites/explain-smart-contract.js +149 -0
  32. package/dist/composites/explain-smart-contract.js.map +1 -0
  33. package/dist/composites/forge-demo-proof.d.ts +81 -0
  34. package/dist/composites/forge-demo-proof.d.ts.map +1 -0
  35. package/dist/composites/forge-demo-proof.js +204 -0
  36. package/dist/composites/forge-demo-proof.js.map +1 -0
  37. package/dist/composites/recommend-docs-path.d.ts +97 -0
  38. package/dist/composites/recommend-docs-path.d.ts.map +1 -0
  39. package/dist/composites/recommend-docs-path.js +149 -0
  40. package/dist/composites/recommend-docs-path.js.map +1 -0
  41. package/dist/composites/trace-transaction-with-context.d.ts +107 -0
  42. package/dist/composites/trace-transaction-with-context.d.ts.map +1 -0
  43. package/dist/composites/trace-transaction-with-context.js +217 -0
  44. package/dist/composites/trace-transaction-with-context.js.map +1 -0
  45. package/dist/daemon-base.d.ts +28 -0
  46. package/dist/daemon-base.d.ts.map +1 -0
  47. package/dist/daemon-base.js +62 -0
  48. package/dist/daemon-base.js.map +1 -0
  49. package/dist/dero-curve.d.ts +79 -0
  50. package/dist/dero-curve.d.ts.map +1 -0
  51. package/dist/dero-curve.js +79 -0
  52. package/dist/dero-curve.js.map +1 -0
  53. package/dist/docs-parse.d.ts.map +1 -1
  54. package/dist/docs-parse.js +18 -2
  55. package/dist/docs-parse.js.map +1 -1
  56. package/dist/http-server.d.ts +37 -0
  57. package/dist/http-server.d.ts.map +1 -0
  58. package/dist/http-server.js +132 -0
  59. package/dist/http-server.js.map +1 -0
  60. package/dist/index.js +18 -11
  61. package/dist/index.js.map +1 -1
  62. package/dist/proof-decode.d.ts +125 -0
  63. package/dist/proof-decode.d.ts.map +1 -0
  64. package/dist/proof-decode.js +619 -0
  65. package/dist/proof-decode.js.map +1 -0
  66. package/dist/server.d.ts.map +1 -1
  67. package/dist/server.js +414 -114
  68. package/dist/server.js.map +1 -1
  69. package/dist/tool-descriptions.d.ts +53 -0
  70. package/dist/tool-descriptions.d.ts.map +1 -0
  71. package/dist/tool-descriptions.js +285 -0
  72. package/dist/tool-descriptions.js.map +1 -0
  73. package/dist/tx-parse.d.ts +63 -0
  74. package/dist/tx-parse.d.ts.map +1 -0
  75. package/dist/tx-parse.js +183 -0
  76. package/dist/tx-parse.js.map +1 -0
  77. package/package.json +27 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnose-chain-health.js","sourceRoot":"","sources":["../../src/composites/diagnose-chain-health.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * `estimate_deploy_cost` — Phase C composite #4.
3
+ *
4
+ * Wedge: `dero_get_gas_estimate` returns raw `gascompute` and
5
+ * `gasstorage` numbers. Agents have to know that the first is DVM
6
+ * execution cost and the second is on-chain byte cost — and have to
7
+ * separately call `dero_get_sc` to understand what they are about to
8
+ * deploy. This composite returns the estimate, the parsed contract
9
+ * surface (functions / stringkeys / uint64keys), a plain-text
10
+ * breakdown explaining what each number means, and the curated
11
+ * "Create, Deploy & Use a Smart Contract" docs page as a citation.
12
+ *
13
+ * Design contract § 4. Sequencing rule: SHIP
14
+ * FOURTH. Numeric semantics; relies on `extractScSurface` (composite
15
+ * #2) being stable. Must not ship before composite #2 because the
16
+ * surface enrichment proves out the reuse path planned in the design
17
+ * doc.
18
+ *
19
+ * Failure model:
20
+ * - DVM compile failure (daemon returns `RPC error -32098`) → the
21
+ * classifier branch in `withStructuredErrors` surfaces this as
22
+ * `INVALID_INPUT` with an actionable hint. The daemon's exact
23
+ * compile message stays in `_meta.error.raw`.
24
+ * - Invalid signer address → daemon usually emits `RPC error
25
+ * -32602` (RPC_INVALID_PARAMS); existing classifier branch
26
+ * handles it.
27
+ * - Daemon returns a non-"OK" status with 0/0 numbers → return
28
+ * the estimate as-is and set `breakdown: null`. NEVER fabricate
29
+ * a breakdown when the numbers are 0/0 with a non-success
30
+ * status; the agent must see the daemon's exact status string.
31
+ */
32
+ import { z } from 'zod';
33
+ import { type DeroDaemonRpc } from './_shared.js';
34
+ export declare const estimateDeployCostInputSchema: {
35
+ readonly sc: z.ZodString;
36
+ readonly signer: z.ZodOptional<z.ZodString>;
37
+ readonly include_breakdown: z.ZodOptional<z.ZodBoolean>;
38
+ };
39
+ type EstimateInput = {
40
+ sc: string;
41
+ signer?: string;
42
+ include_breakdown?: boolean;
43
+ };
44
+ type EstimateBreakdown = {
45
+ compute_note: string;
46
+ storage_note: string;
47
+ total_units: number;
48
+ };
49
+ /**
50
+ * Pure function: turn a (gascompute, gasstorage) pair into a
51
+ * plain-language breakdown. Returns `null` when either number is
52
+ * unavailable or non-numeric, OR when the daemon returned 0/0 with a
53
+ * non-"OK" status (in which case fabricating a breakdown would
54
+ * mislead the agent — the design contract is explicit on this).
55
+ *
56
+ * The DVM denominates gas in atomic units (the daemon docs call them
57
+ * "gas units"). Converting to DERO requires the fee-per-gas table,
58
+ * which is itself a separate query. We deliberately do NOT convert
59
+ * here and instead surface the raw unit total plus a note pointing
60
+ * the agent at the docs.
61
+ */
62
+ export declare function buildBreakdown(gascompute: number | string | undefined, gasstorage: number | string | undefined, status: string | undefined): EstimateBreakdown | null;
63
+ export declare function estimateDeployCost(rpc: DeroDaemonRpc, args: EstimateInput): Promise<{
64
+ estimate: {
65
+ gascompute: number | null;
66
+ gasstorage: number | null;
67
+ status: string | null;
68
+ };
69
+ breakdown: EstimateBreakdown | null;
70
+ signer_used: string | null;
71
+ include_breakdown: boolean;
72
+ sc_surface: {
73
+ functions: import("./_shared.js").DvmFunctionSignature[];
74
+ stringkeys: string[];
75
+ uint64keys: string[];
76
+ raw_code_length: number;
77
+ function_count: number;
78
+ };
79
+ } & {
80
+ related_docs?: import("../citations.js").DeroCitation[];
81
+ }>;
82
+ export {};
83
+ //# sourceMappingURL=estimate-deploy-cost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimate-deploy-cost.d.ts","sourceRoot":"","sources":["../../src/composites/estimate-deploy-cost.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,cAAc,CAAA;AAIrB,eAAO,MAAM,6BAA6B;;;;CAgBhC,CAAA;AAEV,KAAK,aAAa,GAAG;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B,CAAA;AASD,KAAK,iBAAiB,GAAG;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EACvC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EACvC,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,iBAAiB,GAAG,IAAI,CAU1B;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa;;;;;;;;;;;;;;;;;;GAgD/E"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * `estimate_deploy_cost` — Phase C composite #4.
3
+ *
4
+ * Wedge: `dero_get_gas_estimate` returns raw `gascompute` and
5
+ * `gasstorage` numbers. Agents have to know that the first is DVM
6
+ * execution cost and the second is on-chain byte cost — and have to
7
+ * separately call `dero_get_sc` to understand what they are about to
8
+ * deploy. This composite returns the estimate, the parsed contract
9
+ * surface (functions / stringkeys / uint64keys), a plain-text
10
+ * breakdown explaining what each number means, and the curated
11
+ * "Create, Deploy & Use a Smart Contract" docs page as a citation.
12
+ *
13
+ * Design contract § 4. Sequencing rule: SHIP
14
+ * FOURTH. Numeric semantics; relies on `extractScSurface` (composite
15
+ * #2) being stable. Must not ship before composite #2 because the
16
+ * surface enrichment proves out the reuse path planned in the design
17
+ * doc.
18
+ *
19
+ * Failure model:
20
+ * - DVM compile failure (daemon returns `RPC error -32098`) → the
21
+ * classifier branch in `withStructuredErrors` surfaces this as
22
+ * `INVALID_INPUT` with an actionable hint. The daemon's exact
23
+ * compile message stays in `_meta.error.raw`.
24
+ * - Invalid signer address → daemon usually emits `RPC error
25
+ * -32602` (RPC_INVALID_PARAMS); existing classifier branch
26
+ * handles it.
27
+ * - Daemon returns a non-"OK" status with 0/0 numbers → return
28
+ * the estimate as-is and set `breakdown: null`. NEVER fabricate
29
+ * a breakdown when the numbers are 0/0 with a non-success
30
+ * status; the agent must see the daemon's exact status string.
31
+ */
32
+ import { z } from 'zod';
33
+ import { attachCitations, extractScSurface, } from './_shared.js';
34
+ const DERO_ADDRESS_REGEX = /^(dero1|deto1)[0-9a-z]+$/i;
35
+ export const estimateDeployCostInputSchema = {
36
+ sc: z
37
+ .string()
38
+ .min(1)
39
+ .describe('DVM-BASIC contract source to deploy. MUST be the full contract (Function ... End Function blocks), not a function body alone.'),
40
+ signer: z
41
+ .string()
42
+ .regex(DERO_ADDRESS_REGEX, 'Expected DERO address starting with dero1 or deto1')
43
+ .optional()
44
+ .describe('Optional dero1.../deto1... signer for the eventual deploy tx.'),
45
+ include_breakdown: z
46
+ .boolean()
47
+ .optional()
48
+ .describe('Default true. Set false to return raw estimate numbers only.'),
49
+ };
50
+ /**
51
+ * Pure function: turn a (gascompute, gasstorage) pair into a
52
+ * plain-language breakdown. Returns `null` when either number is
53
+ * unavailable or non-numeric, OR when the daemon returned 0/0 with a
54
+ * non-"OK" status (in which case fabricating a breakdown would
55
+ * mislead the agent — the design contract is explicit on this).
56
+ *
57
+ * The DVM denominates gas in atomic units (the daemon docs call them
58
+ * "gas units"). Converting to DERO requires the fee-per-gas table,
59
+ * which is itself a separate query. We deliberately do NOT convert
60
+ * here and instead surface the raw unit total plus a note pointing
61
+ * the agent at the docs.
62
+ */
63
+ export function buildBreakdown(gascompute, gasstorage, status) {
64
+ const compute = typeof gascompute === 'number' ? gascompute : Number(gascompute);
65
+ const storage = typeof gasstorage === 'number' ? gasstorage : Number(gasstorage);
66
+ if (!Number.isFinite(compute) || !Number.isFinite(storage))
67
+ return null;
68
+ if (compute === 0 && storage === 0 && status !== 'OK')
69
+ return null;
70
+ return {
71
+ compute_note: `gascompute=${compute} — DVM execution cost (units the daemon charges for running the contract's Initialize and any reachable functions during the deploy). Higher when the contract has more code paths.`,
72
+ storage_note: `gasstorage=${storage} — on-chain byte cost (units the daemon charges for storing the contract code blob and its initial state). Roughly proportional to source length.`,
73
+ total_units: compute + storage,
74
+ };
75
+ }
76
+ export async function estimateDeployCost(rpc, args) {
77
+ const params = { sc: args.sc };
78
+ if (args.signer)
79
+ params.signer = args.signer;
80
+ // Required call. DVM compile failures throw RPC error -32098 which
81
+ // the classifier branch in src/server.ts maps to INVALID_INPUT.
82
+ const raw = (await rpc('DERO.GetGasEstimate', params)) ?? {};
83
+ const gascompute = typeof raw.gascompute === 'number' || typeof raw.gascompute === 'string'
84
+ ? Number(raw.gascompute)
85
+ : null;
86
+ const gasstorage = typeof raw.gasstorage === 'number' || typeof raw.gasstorage === 'string'
87
+ ? Number(raw.gasstorage)
88
+ : null;
89
+ const status = typeof raw.status === 'string' ? raw.status : null;
90
+ const includeBreakdown = args.include_breakdown !== false;
91
+ const breakdown = includeBreakdown ? buildBreakdown(raw.gascompute, raw.gasstorage, raw.status ?? undefined) : null;
92
+ // Wedge enrichment: parse the SC source the user just submitted so
93
+ // the agent can show "you're about to deploy X functions" alongside
94
+ // the gas numbers. Reuses extractScSurface from composite #2, with
95
+ // the user-provided `sc` shaped as a DeroGetScResult so the same
96
+ // extractor can run unchanged.
97
+ const surface = extractScSurface({ code: args.sc });
98
+ return attachCitations({
99
+ estimate: {
100
+ gascompute,
101
+ gasstorage,
102
+ status,
103
+ },
104
+ breakdown,
105
+ signer_used: args.signer ?? null,
106
+ include_breakdown: includeBreakdown,
107
+ sc_surface: {
108
+ functions: surface.functions,
109
+ stringkeys: surface.stringkeys,
110
+ uint64keys: surface.uint64keys,
111
+ raw_code_length: surface.raw_code_length,
112
+ function_count: surface.functions.length,
113
+ },
114
+ }, 'estimate_deploy_cost');
115
+ }
116
+ //# sourceMappingURL=estimate-deploy-cost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimate-deploy-cost.js","sourceRoot":"","sources":["../../src/composites/estimate-deploy-cost.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * `explain_smart_contract` — Phase C composite #2.
3
+ *
4
+ * Wedge-defining composite. Today an agent calls `dero_get_sc`, gets a
5
+ * raw code blob with stringkeys/uint64keys/balances, and must know
6
+ * DVM-BASIC syntax to interpret it. This composite extracts the
7
+ * contract's function surface and stitches it to the right bundled DVM
8
+ * docs page — something no generic chain MCP can replicate because no
9
+ * other chain MCP ships the docs index in-process.
10
+ *
11
+ * Design contract § 2. Sequencing rule: SHIP
12
+ * SECOND — establishes the SC-introspection pattern (`extractScSurface`)
13
+ * that `trace_transaction_with_context` and `estimate_deploy_cost` reuse.
14
+ *
15
+ * Failure model:
16
+ * - `DERO.GetSC` failing entirely → handler throws so
17
+ * `withStructuredErrors` surfaces a structured error to the agent.
18
+ * - `DERO.GetSC` succeeds but returns no `code` → response carries
19
+ * `surface.has_code: false`, `functions: []`, narrative explains
20
+ * the SCID is unknown or has no on-chain code, and `_meta.error`
21
+ * style hint points at `dero_docs_search("smart contract")`.
22
+ * - Code present but `extractScSurface` finds zero functions →
23
+ * return surface with `functions: []` and a narrative noting
24
+ * parse-uncertainty. NEVER swallow the raw code; surface
25
+ * `raw_code_length` so the agent knows to fall back to `dero_get_sc`.
26
+ */
27
+ import { z } from 'zod';
28
+ import { type DeroDaemonRpc, type DeroScSurface } from './_shared.js';
29
+ export declare const explainSmartContractInputSchema: {
30
+ readonly scid: z.ZodString;
31
+ readonly topoheight: z.ZodOptional<z.ZodNumber>;
32
+ };
33
+ type ExplainInput = {
34
+ scid: string;
35
+ topoheight?: number;
36
+ };
37
+ type ContractKind = 'token' | 'registry' | 'minimal' | 'generic';
38
+ /**
39
+ * Classify a contract from its surface + raw code so we can pick the
40
+ * most relevant docs page as "primary". Pure function, deterministic,
41
+ * unit-testable. Returns the classification AND the slug to elevate.
42
+ */
43
+ export declare function classifyContractAndPickDoc(surface: DeroScSurface, code: string): {
44
+ kind: ContractKind;
45
+ primarySlug: string;
46
+ };
47
+ export declare function explainSmartContract(rpc: DeroDaemonRpc, args: ExplainInput): Promise<{
48
+ scid: string;
49
+ topoheight: number | null;
50
+ kind: ContractKind;
51
+ surface: {
52
+ functions: import("./_shared.js").DvmFunctionSignature[];
53
+ stringkeys: string[];
54
+ uint64keys: string[];
55
+ balances: Record<string, string | number>;
56
+ };
57
+ narrative: string;
58
+ raw_code_length: number;
59
+ has_code: boolean;
60
+ } & {
61
+ related_docs?: import("../citations.js").DeroCitation[];
62
+ }>;
63
+ export {};
64
+ //# sourceMappingURL=explain-smart-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain-smart-contract.d.ts","sourceRoot":"","sources":["../../src/composites/explain-smart-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAGL,KAAK,aAAa,EAElB,KAAK,aAAa,EACnB,MAAM,cAAc,CAAA;AAIrB,eAAO,MAAM,+BAA+B;;;CAUlC,CAAA;AAEV,KAAK,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAWzD,KAAK,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAA;AAEhE;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CA6B7C;AA2CD,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY;;;;;;;;;;;;;;;GAmDhF"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * `explain_smart_contract` — Phase C composite #2.
3
+ *
4
+ * Wedge-defining composite. Today an agent calls `dero_get_sc`, gets a
5
+ * raw code blob with stringkeys/uint64keys/balances, and must know
6
+ * DVM-BASIC syntax to interpret it. This composite extracts the
7
+ * contract's function surface and stitches it to the right bundled DVM
8
+ * docs page — something no generic chain MCP can replicate because no
9
+ * other chain MCP ships the docs index in-process.
10
+ *
11
+ * Design contract § 2. Sequencing rule: SHIP
12
+ * SECOND — establishes the SC-introspection pattern (`extractScSurface`)
13
+ * that `trace_transaction_with_context` and `estimate_deploy_cost` reuse.
14
+ *
15
+ * Failure model:
16
+ * - `DERO.GetSC` failing entirely → handler throws so
17
+ * `withStructuredErrors` surfaces a structured error to the agent.
18
+ * - `DERO.GetSC` succeeds but returns no `code` → response carries
19
+ * `surface.has_code: false`, `functions: []`, narrative explains
20
+ * the SCID is unknown or has no on-chain code, and `_meta.error`
21
+ * style hint points at `dero_docs_search("smart contract")`.
22
+ * - Code present but `extractScSurface` finds zero functions →
23
+ * return surface with `functions: []` and a narrative noting
24
+ * parse-uncertainty. NEVER swallow the raw code; surface
25
+ * `raw_code_length` so the agent knows to fall back to `dero_get_sc`.
26
+ */
27
+ import { z } from 'zod';
28
+ import { attachCitations, extractScSurface, } from './_shared.js';
29
+ const SCID_HEX_REGEX = /^[0-9a-fA-F]{64}$/;
30
+ export const explainSmartContractInputSchema = {
31
+ scid: z
32
+ .string()
33
+ .regex(SCID_HEX_REGEX, 'Expected 64-character hex Smart Contract ID')
34
+ .describe('64-char hex Smart Contract ID'),
35
+ topoheight: z
36
+ .number()
37
+ .int()
38
+ .optional()
39
+ .describe('Optional topo height; omit for latest tip'),
40
+ };
41
+ // ---------------- Heuristic docs routing ----------------
42
+ //
43
+ // The four bundled DVM docs slugs we can route to. Validated by the
44
+ // citation CI guard via `RELATED_DOCS_BY_TOOL.explain_smart_contract`.
45
+ const DVM_DOC_FUNDAMENTALS = 'dvm/smart-contract-fundamentals';
46
+ const DVM_DOC_LANGUAGE = 'dvm/dvm-basic';
47
+ const DVM_DOC_DEPLOY = 'dvm/create-deploy-use-smart-contract';
48
+ const DVM_DOC_PLATFORM = 'dvm/dero-virtual-machine';
49
+ /**
50
+ * Classify a contract from its surface + raw code so we can pick the
51
+ * most relevant docs page as "primary". Pure function, deterministic,
52
+ * unit-testable. Returns the classification AND the slug to elevate.
53
+ */
54
+ export function classifyContractAndPickDoc(surface, code) {
55
+ const functionNames = new Set(surface.functions.map((f) => f.name.toLowerCase()));
56
+ const codeUpper = code.toUpperCase();
57
+ const looksLikeToken = codeUpper.includes('SEND_ASSET_TO_ADDRESS') ||
58
+ functionNames.has('mint') ||
59
+ functionNames.has('burn') ||
60
+ (functionNames.has('transfer') && functionNames.has('transferownership'));
61
+ if (looksLikeToken) {
62
+ return { kind: 'token', primarySlug: DVM_DOC_LANGUAGE };
63
+ }
64
+ const looksLikeRegistry = codeUpper.includes('EXISTS(') ||
65
+ functionNames.has('register') ||
66
+ functionNames.has('lookup') ||
67
+ functionNames.has('reserve');
68
+ if (looksLikeRegistry) {
69
+ return { kind: 'registry', primarySlug: DVM_DOC_FUNDAMENTALS };
70
+ }
71
+ if (surface.functions.length <= 1) {
72
+ return { kind: 'minimal', primarySlug: DVM_DOC_DEPLOY };
73
+ }
74
+ return { kind: 'generic', primarySlug: DVM_DOC_FUNDAMENTALS };
75
+ }
76
+ // ---------------- Narrative ----------------
77
+ //
78
+ // Lives next to the composite (not in `_shared.ts`) because the shape is
79
+ // tightly coupled to composite #2's response. Pure function for testability.
80
+ function buildNarrative(scid, topoheight, surface, kind) {
81
+ if (!surface.has_code) {
82
+ return `SCID ${scid} returned no on-chain code at topoheight ${topoheight ?? 'tip'}. Either the contract does not exist or it was deployed without code. Try dero_docs_search("smart contract") for installation context, or re-check the SCID.`;
83
+ }
84
+ const fnCount = surface.functions.length;
85
+ const stringCount = surface.stringkeys.length;
86
+ const uint64Count = surface.uint64keys.length;
87
+ const balanceCount = Object.keys(surface.balances).length;
88
+ if (fnCount === 0) {
89
+ return `Found ${surface.raw_code_length} bytes of code at SCID ${scid} (topoheight ${topoheight ?? 'tip'}) but no DVM-BASIC Function declarations were recognized by the parser. The raw code is still available via dero_get_sc; ${stringCount} stored string keys and ${uint64Count} uint64 keys are present, with ${balanceCount} asset balance(s).`;
90
+ }
91
+ const kindPhrase = {
92
+ token: 'has a token-style surface (transfer/asset operations)',
93
+ registry: 'has a registry-style surface (Register/Lookup/EXISTS pattern)',
94
+ minimal: 'is a minimal contract (Initialize-only or single function)',
95
+ generic: 'has a generic state-machine surface',
96
+ };
97
+ const fnList = surface.functions
98
+ .slice(0, 6)
99
+ .map((f) => (f.args.length > 0 ? `${f.name}(${f.args.length}-arg)` : `${f.name}()`))
100
+ .join(', ');
101
+ const more = fnCount > 6 ? ` (+${fnCount - 6} more)` : '';
102
+ return `SCID ${scid} at topoheight ${topoheight ?? 'tip'} ${kindPhrase[kind]}. Exposes ${fnCount} function${fnCount === 1 ? '' : 's'}: ${fnList}${more}. State carries ${stringCount} string key${stringCount === 1 ? '' : 's'} and ${uint64Count} uint64 key${uint64Count === 1 ? '' : 's'}, with ${balanceCount} asset balance entr${balanceCount === 1 ? 'y' : 'ies'}. See the cited docs page for the DVM concept that best matches this surface.`;
103
+ }
104
+ // ---------------- Handler ----------------
105
+ export async function explainSmartContract(rpc, args) {
106
+ const params = {
107
+ scid: args.scid,
108
+ code: true,
109
+ variables: true,
110
+ };
111
+ if (args.topoheight !== undefined)
112
+ params.topoheight = args.topoheight;
113
+ // Required call. Failure propagates through withStructuredErrors.
114
+ const raw = (await rpc('DERO.GetSC', params)) ?? {};
115
+ const surface = extractScSurface(raw);
116
+ const code = typeof raw.code === 'string' ? raw.code : '';
117
+ const { kind, primarySlug } = classifyContractAndPickDoc(surface, code);
118
+ const responseTopoheight = typeof args.topoheight === 'number' && Number.isFinite(args.topoheight)
119
+ ? args.topoheight
120
+ : null;
121
+ const narrative = buildNarrative(args.scid, responseTopoheight, surface, kind);
122
+ // Compose the payload, then attach static citations and re-order so the
123
+ // heuristic's pick is first. Static citation order (in RELATED_DOCS_BY_TOOL)
124
+ // ends up as the fallback order when the heuristic returns a slug already
125
+ // at position 0.
126
+ const payload = attachCitations({
127
+ scid: args.scid,
128
+ topoheight: responseTopoheight,
129
+ kind,
130
+ surface: {
131
+ functions: surface.functions,
132
+ stringkeys: surface.stringkeys,
133
+ uint64keys: surface.uint64keys,
134
+ balances: surface.balances,
135
+ },
136
+ narrative,
137
+ raw_code_length: surface.raw_code_length,
138
+ has_code: surface.has_code,
139
+ }, 'explain_smart_contract');
140
+ if (payload.related_docs && payload.related_docs.length > 0) {
141
+ const idx = payload.related_docs.findIndex((d) => d.slug === primarySlug);
142
+ if (idx > 0) {
143
+ const [picked] = payload.related_docs.splice(idx, 1);
144
+ payload.related_docs.unshift(picked);
145
+ }
146
+ }
147
+ return payload;
148
+ }
149
+ //# sourceMappingURL=explain-smart-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain-smart-contract.js","sourceRoot":"","sources":["../../src/composites/explain-smart-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * `dero_forge_demo_proof` — composite #7.
3
+ *
4
+ * Builds a `deroproof…` display object for a chosen transaction, ring slot,
5
+ * and amount. The string is constructed locally from public chain data — no
6
+ * wallet, no keys, no broadcast. On an unpatched explorer it shows
7
+ * **Verified ✓** for the chosen amount; on the chain, nothing changes.
8
+ *
9
+ * Purpose: defensive demonstration of the integrity-page Part 3 forge math
10
+ * (`docs/integrity/inflation-claim`, Part 3). When an AI agent is asked
11
+ * "does this deroproof string prove the chain minted coins?", the agent can
12
+ * forge an equivalent string here and show, on real chain inputs, that
13
+ * **Verified** is a display-layer fact about the pasted object — not a
14
+ * consensus statement about coins moving.
15
+ *
16
+ * Math (same equation `proof.Prove()` checks at `proof/proof.go:88-95`):
17
+ *
18
+ * blinder = C[slot] − amount × G
19
+ * forged_string = bech32("deroproof", version || blinder_compressed || CBOR({HH: 0…0, VU: amount}))
20
+ *
21
+ * Self-check: amount × G + blinder == C[slot]. If this fails, the encoded
22
+ * string would not verify and we never return it.
23
+ *
24
+ * Read-only invariant: this tool computes a string and returns it. It does
25
+ * NOT touch a wallet, broadcast a transaction, or mutate any chain state.
26
+ * Annotation `readOnlyHint: true` is preserved.
27
+ */
28
+ import { z } from 'zod';
29
+ import { type DeroCitation } from '../citations.js';
30
+ import { type DeroDaemonRpc } from './_shared.js';
31
+ export declare const forgeDemoProofInputSchema: {
32
+ readonly tx_hash: z.ZodOptional<z.ZodString>;
33
+ readonly tx_hex: z.ZodOptional<z.ZodString>;
34
+ readonly ring_slot: z.ZodDefault<z.ZodNumber>;
35
+ readonly amount_dero: z.ZodDefault<z.ZodString>;
36
+ };
37
+ export type ForgeDemoProofInput = {
38
+ tx_hash?: string;
39
+ tx_hex?: string;
40
+ ring_slot?: number;
41
+ amount_dero?: string;
42
+ };
43
+ export type ForgeDemoProofResult = {
44
+ forged_proof_string: string;
45
+ target_amount: {
46
+ dero: string;
47
+ atoms_signed: string;
48
+ atoms_uint64: string;
49
+ };
50
+ ring_slot: number;
51
+ ring_size: number;
52
+ ring_receiver_address: string | null;
53
+ math: {
54
+ C_slot_hex: string;
55
+ amount_x_G_hex: string;
56
+ blinder_hex: string;
57
+ };
58
+ self_check: {
59
+ verified: boolean;
60
+ method: string;
61
+ };
62
+ explorer_display_amount: string;
63
+ context_note: string | null;
64
+ related_docs: DeroCitation[];
65
+ _diagnostics: {
66
+ step_latencies: Record<string, number>;
67
+ halted_at: string | null;
68
+ total_ms: number;
69
+ tx_source: 'tx_hash' | 'tx_hex';
70
+ };
71
+ };
72
+ /**
73
+ * Execute the forge. Composes:
74
+ * 1. (optional) daemon fetch of TX hex + ring members
75
+ * 2. parse TX → extract C[ring_slot]
76
+ * 3. compute blinder = C[slot] − amount × G
77
+ * 4. self-check: amount × G + blinder == C[slot]
78
+ * 5. encode forged proof string + assemble narrative + citations
79
+ */
80
+ export declare function forgeDemoProof(rpc: DeroDaemonRpc, input: ForgeDemoProofInput): Promise<ForgeDemoProofResult>;
81
+ //# sourceMappingURL=forge-demo-proof.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forge-demo-proof.d.ts","sourceRoot":"","sources":["../../src/composites/forge-demo-proof.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAYvB,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,cAAc,CAAA;AAKrB,eAAO,MAAM,yBAAyB;;;;;CA+B5B,CAAA;AAEV,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAWD,MAAM,MAAM,oBAAoB,GAAG;IACjC,mBAAmB,EAAE,MAAM,CAAA;IAC3B,aAAa,EAAE;QACb,IAAI,EAAE,MAAM,CAAA;QACZ,YAAY,EAAE,MAAM,CAAA;QACpB,YAAY,EAAE,MAAM,CAAA;KACrB,CAAA;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC,IAAI,EAAE;QACJ,UAAU,EAAE,MAAM,CAAA;QAClB,cAAc,EAAE,MAAM,CAAA;QACtB,WAAW,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,OAAO,CAAA;QACjB,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;IACD,uBAAuB,EAAE,MAAM,CAAA;IAC/B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,YAAY,EAAE,YAAY,EAAE,CAAA;IAC5B,YAAY,EAAE;QACZ,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACtC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;QACxB,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,EAAE,SAAS,GAAG,QAAQ,CAAA;KAChC,CAAA;CACF,CAAA;AAuCD;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAiI/B"}