|
1085 | 1085 | </span> |
1086 | 1086 | </a> |
1087 | 1087 |
|
| 1088 | +</li> |
| 1089 | + |
| 1090 | + <li class="md-nav__item"> |
| 1091 | + <a href="#cumulative-budget-enforcement" class="md-nav__link"> |
| 1092 | + <span class="md-ellipsis"> |
| 1093 | + |
| 1094 | + Cumulative Budget Enforcement |
| 1095 | + |
| 1096 | + </span> |
| 1097 | + </a> |
| 1098 | + |
1088 | 1099 | </li> |
1089 | 1100 |
|
1090 | 1101 | <li class="md-nav__item"> |
|
1482 | 1493 | </span> |
1483 | 1494 | </a> |
1484 | 1495 |
|
| 1496 | +</li> |
| 1497 | + |
| 1498 | + <li class="md-nav__item"> |
| 1499 | + <a href="#cumulative-budget-enforcement" class="md-nav__link"> |
| 1500 | + <span class="md-ellipsis"> |
| 1501 | + |
| 1502 | + Cumulative Budget Enforcement |
| 1503 | + |
| 1504 | + </span> |
| 1505 | + </a> |
| 1506 | + |
1485 | 1507 | </li> |
1486 | 1508 |
|
1487 | 1509 | <li class="md-nav__item"> |
@@ -1554,14 +1576,17 @@ <h2 id="import">Import</h2> |
1554 | 1576 | <span class="p">}</span><span class="w"> </span><span class="kr">from</span><span class="w"> </span><span class="s2">"mpcp-service/sdk"</span><span class="p">;</span> |
1555 | 1577 | </code></pre></div> |
1556 | 1578 | <h2 id="policy-grant">Policy Grant</h2> |
1557 | | -<div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nx">createPolicyGrant</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="kr">from</span><span class="w"> </span><span class="s2">"mpcp-service/sdk"</span><span class="p">;</span> |
| 1579 | +<div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nx">createPolicyGrant</span><span class="p">,</span><span class="w"> </span><span class="nx">createSignedPolicyGrant</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="kr">from</span><span class="w"> </span><span class="s2">"mpcp-service/sdk"</span><span class="p">;</span> |
1558 | 1580 |
|
1559 | 1581 | <span class="kd">const</span><span class="w"> </span><span class="nx">grant</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">createPolicyGrant</span><span class="p">({</span> |
1560 | | -<span class="w"> </span><span class="nx">policyHash</span><span class="o">:</span><span class="w"> </span><span class="s2">"a1b2c3"</span><span class="p">,</span> |
| 1582 | +<span class="w"> </span><span class="nx">policyHash</span><span class="o">:</span><span class="w"> </span><span class="s2">"a1b2c3d4e5f6"</span><span class="p">,</span> |
1561 | 1583 | <span class="w"> </span><span class="nx">allowedRails</span><span class="o">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"xrpl"</span><span class="p">,</span><span class="w"> </span><span class="s2">"evm"</span><span class="p">],</span> |
1562 | 1584 | <span class="w"> </span><span class="nx">allowedAssets</span><span class="o">:</span><span class="w"> </span><span class="p">[{</span><span class="w"> </span><span class="nx">kind</span><span class="o">:</span><span class="w"> </span><span class="s2">"IOU"</span><span class="p">,</span><span class="w"> </span><span class="nx">currency</span><span class="o">:</span><span class="w"> </span><span class="s2">"RLUSD"</span><span class="p">,</span><span class="w"> </span><span class="nx">issuer</span><span class="o">:</span><span class="w"> </span><span class="s2">"rIssuer"</span><span class="w"> </span><span class="p">}],</span> |
1563 | 1585 | <span class="w"> </span><span class="nx">expiresAt</span><span class="o">:</span><span class="w"> </span><span class="s2">"2030-12-31T23:59:59Z"</span><span class="p">,</span> |
1564 | 1586 | <span class="p">});</span> |
| 1587 | + |
| 1588 | +<span class="c1">// Signed (requires MPCP_POLICY_GRANT_SIGNING_PRIVATE_KEY_PEM — returns null if not set)</span> |
| 1589 | +<span class="kd">const</span><span class="w"> </span><span class="nx">signedGrant</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">createSignedPolicyGrant</span><span class="p">(</span><span class="nx">grant</span><span class="p">);</span> |
1565 | 1590 | </code></pre></div> |
1566 | 1591 | <h2 id="budget-authorization">Budget Authorization</h2> |
1567 | 1592 | <div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="p">{</span> |
@@ -1637,6 +1662,14 @@ <h2 id="verification">Verification</h2> |
1637 | 1662 | <span class="kd">const</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nx">result</span><span class="p">,</span><span class="w"> </span><span class="nx">steps</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">verifySettlementWithReport</span><span class="p">(</span><span class="nx">context</span><span class="p">);</span> |
1638 | 1663 | <span class="kd">const</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nx">valid</span><span class="p">,</span><span class="w"> </span><span class="nx">checks</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">verifySettlementDetailed</span><span class="p">(</span><span class="nx">context</span><span class="p">);</span> |
1639 | 1664 | </code></pre></div> |
| 1665 | +<h2 id="cumulative-budget-enforcement">Cumulative Budget Enforcement</h2> |
| 1666 | +<p>When performing multiple payments in a session, pass <code>cumulativeSpentMinor</code> to the verification context so the budget check accounts for all prior spending:</p> |
| 1667 | +<div class="highlight"><pre><span></span><code><span class="kd">const</span><span class="w"> </span><span class="nx">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">verifySettlement</span><span class="p">({</span> |
| 1668 | +<span class="w"> </span><span class="p">...</span><span class="nx">context</span><span class="p">,</span> |
| 1669 | +<span class="w"> </span><span class="nx">cumulativeSpentMinor</span><span class="o">:</span><span class="w"> </span><span class="s2">"5000"</span><span class="p">,</span><span class="w"> </span><span class="c1">// total minor-unit amount spent before this payment</span> |
| 1670 | +<span class="p">});</span> |
| 1671 | +</code></pre></div> |
| 1672 | +<p>The session authority MUST maintain this counter. The verifier is stateless and will not track prior payments on its own.</p> |
1640 | 1673 | <h2 id="environment-variables">Environment Variables</h2> |
1641 | 1674 | <table> |
1642 | 1675 | <thead> |
@@ -1670,6 +1703,18 @@ <h2 id="environment-variables">Environment Variables</h2> |
1670 | 1703 | <td>MPCP_SPA_SIGNING_KEY_ID</td> |
1671 | 1704 | <td>Key identifier (default: mpcp-spa-signing-key-1)</td> |
1672 | 1705 | </tr> |
| 1706 | +<tr> |
| 1707 | +<td>MPCP_POLICY_GRANT_SIGNING_PRIVATE_KEY_PEM</td> |
| 1708 | +<td>Private key for signing PolicyGrants</td> |
| 1709 | +</tr> |
| 1710 | +<tr> |
| 1711 | +<td>MPCP_POLICY_GRANT_SIGNING_PUBLIC_KEY_PEM</td> |
| 1712 | +<td>Public key for verifying PolicyGrant signatures (when set, unsigned grants are rejected)</td> |
| 1713 | +</tr> |
| 1714 | +<tr> |
| 1715 | +<td>MPCP_POLICY_GRANT_SIGNING_KEY_ID</td> |
| 1716 | +<td>Key identifier (default: mpcp-policy-grant-signing-key-1)</td> |
| 1717 | +</tr> |
1673 | 1718 | </tbody> |
1674 | 1719 | </table> |
1675 | 1720 | <h2 id="see-also">See Also</h2> |
|
0 commit comments