Skip to content

Commit 26decfc

Browse files
committed
deploy: f677212
1 parent cb89e19 commit 26decfc

13 files changed

Lines changed: 741 additions & 481 deletions

File tree

reference/implementation/machine-wallet-guardrails/index.html

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -885,6 +885,56 @@
885885
</ul>
886886
</nav>
887887

888+
</li>
889+
890+
<li class="md-nav__item">
891+
<a href="#vehicle-wallet-roles" class="md-nav__link">
892+
<span class="md-ellipsis">
893+
894+
Vehicle Wallet Roles
895+
896+
</span>
897+
</a>
898+
899+
<nav class="md-nav" aria-label="Vehicle Wallet Roles">
900+
<ul class="md-nav__list">
901+
902+
<li class="md-nav__item">
903+
<a href="#session-authority" class="md-nav__link">
904+
<span class="md-ellipsis">
905+
906+
Session Authority
907+
908+
</span>
909+
</a>
910+
911+
</li>
912+
913+
<li class="md-nav__item">
914+
<a href="#payment-decision-service" class="md-nav__link">
915+
<span class="md-ellipsis">
916+
917+
Payment Decision Service
918+
919+
</span>
920+
</a>
921+
922+
</li>
923+
924+
<li class="md-nav__item">
925+
<a href="#why-two-roles" class="md-nav__link">
926+
<span class="md-ellipsis">
927+
928+
Why Two Roles?
929+
930+
</span>
931+
</a>
932+
933+
</li>
934+
935+
</ul>
936+
</nav>
937+
888938
</li>
889939

890940
<li class="md-nav__item">
@@ -1539,6 +1589,56 @@
15391589
</ul>
15401590
</nav>
15411591

1592+
</li>
1593+
1594+
<li class="md-nav__item">
1595+
<a href="#vehicle-wallet-roles" class="md-nav__link">
1596+
<span class="md-ellipsis">
1597+
1598+
Vehicle Wallet Roles
1599+
1600+
</span>
1601+
</a>
1602+
1603+
<nav class="md-nav" aria-label="Vehicle Wallet Roles">
1604+
<ul class="md-nav__list">
1605+
1606+
<li class="md-nav__item">
1607+
<a href="#session-authority" class="md-nav__link">
1608+
<span class="md-ellipsis">
1609+
1610+
Session Authority
1611+
1612+
</span>
1613+
</a>
1614+
1615+
</li>
1616+
1617+
<li class="md-nav__item">
1618+
<a href="#payment-decision-service" class="md-nav__link">
1619+
<span class="md-ellipsis">
1620+
1621+
Payment Decision Service
1622+
1623+
</span>
1624+
</a>
1625+
1626+
</li>
1627+
1628+
<li class="md-nav__item">
1629+
<a href="#why-two-roles" class="md-nav__link">
1630+
<span class="md-ellipsis">
1631+
1632+
Why Two Roles?
1633+
1634+
</span>
1635+
</a>
1636+
1637+
</li>
1638+
1639+
</ul>
1640+
</nav>
1641+
15421642
</li>
15431643

15441644
<li class="md-nav__item">
@@ -1750,6 +1850,33 @@ <h3 id="layer-3-signedpaymentauthorization-spa">Layer 3: SignedPaymentAuthorizat
17501850
<li><strong>Intent hash</strong> — SPA binds to a canonical SettlementIntent</li>
17511851
<li><strong>Tamper resistance</strong> — SettlementIntent and final settlement must match the signed authorization</li>
17521852
</ul>
1853+
<h2 id="vehicle-wallet-roles">Vehicle Wallet Roles</h2>
1854+
<p>In an autonomous deployment, the vehicle wallet plays <strong>two distinct roles</strong> in the MPCP authorization pipeline.</p>
1855+
<h3 id="session-authority">Session Authority</h3>
1856+
<p>The wallet creates and signs the <strong>SignedBudgetAuthorization (SBA)</strong> before the session begins. This establishes the session-level spending envelope:</p>
1857+
<ul>
1858+
<li>Sets <code>maxAmountMinor</code> — the total spend ceiling for the session</li>
1859+
<li>Sets <code>destinationAllowlist</code> — the permitted payees</li>
1860+
<li>Binds to the PolicyGrant via <code>grantId</code></li>
1861+
</ul>
1862+
<p>The SBA is signed with the wallet's SBA key (<code>MPCP_SBA_SIGNING_PRIVATE_KEY_PEM</code>). Verifiers check this signature to confirm the budget was set by a trusted session authority.</p>
1863+
<h3 id="payment-decision-service">Payment Decision Service</h3>
1864+
<p>For each payment request within the session, the wallet evaluates the request against the loaded policy chain and, if approved, creates and signs a <strong>SignedPaymentAuthorization (SPA)</strong>:</p>
1865+
<ul>
1866+
<li>Assigns a unique <code>decisionId</code></li>
1867+
<li>Commits to the specific amount, destination, and asset</li>
1868+
<li>Computes and binds an <code>intentHash</code> to a canonical SettlementIntent</li>
1869+
<li>Signs with the wallet's SPA key (<code>MPCP_SPA_SIGNING_PRIVATE_KEY_PEM</code>)</li>
1870+
</ul>
1871+
<p>This decision is made <strong>locally</strong> — no central approval API is contacted. The SPA is a cryptographic proof that the wallet approved this specific payment within the authorized budget.</p>
1872+
<h3 id="why-two-roles">Why Two Roles?</h3>
1873+
<p>Separating session authority from payment decisions allows fleet operators to:</p>
1874+
<ul>
1875+
<li>Pre-authorize a spending envelope (SBA) before the vehicle enters service</li>
1876+
<li>Let the vehicle make individual payment decisions (SPA) locally within that envelope</li>
1877+
<li>Give verifiers a complete, self-contained authorization chain to validate</li>
1878+
</ul>
1879+
<hr />
17531880
<h2 id="wallet-integration">Wallet Integration</h2>
17541881
<p>A machine wallet integrates MPCP by performing checks <em>before</em> signing an SPA.</p>
17551882
<h3 id="decision-flow">Decision Flow</h3>

reference/implementation/reference-profiles/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1587,7 +1587,7 @@ <h2 id="usage">Usage</h2>
15871587
<p>Profiles define expected policy shape. Use <code>mpcp policy-summary</code> with <code>--profile</code> to validate a policy against a reference profile.</p>
15881588
<div class="highlight"><pre><span></span><code>mpcp<span class="w"> </span>policy-summary<span class="w"> </span>profiles/parking.json<span class="w"> </span>--profile<span class="w"> </span>parking
15891589
mpcp<span class="w"> </span>policy-summary<span class="w"> </span>profiles/xrpl-stablecoin.json<span class="w"> </span>--profile<span class="w"> </span>xrpl-stablecoin
1590-
mpcp<span class="w"> </span>policy-summary<span class="w"> </span>examples/fleet-simulator/fleet-policy.json<span class="w"> </span>--profile<span class="w"> </span>parking
1590+
mpcp<span class="w"> </span>policy-summary<span class="w"> </span>examples/machine-commerce/fleet-policy.json<span class="w"> </span>--profile<span class="w"> </span>parking
15911591
</code></pre></div>
15921592
<p>Validation checks: <code>allowedRails</code> in the policy must be a subset of the profile’s allowed rails; if the policy declares <code>_profile</code>, it must match the profile name.</p>
15931593

0 commit comments

Comments
 (0)