Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 7 additions & 13 deletions smart-accounts-kit/guides/x402/buyer/advanced-permissions.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ export type PaymentRequirements = {
maxTimeoutSeconds: number
extra: {
assetTransferMethod: string
facilitators?: Address[]
facilitatorAddresses?: Address[]
}
}
```
Expand All @@ -121,16 +121,17 @@ export type PaymentRequirements = {
Request Advanced Permissions from the user with the Wallet Client's `requestExecutionPermissions` action.

In this example, you request an ERC-20 allowance permission with a fixed allowance equal to the
resource cost. Use the [`redeemer`](../../../reference/advanced-permissions/rules.md#redeemer) rule
to restrict redemption to facilitator addresses from the payment requirements.
resource cost. Set `redeemer` to restrict redemption to the facilitator addresses from the payment
requirements. The SDK converts this parameter to a
[`redeemer`](../../../reference/advanced-permissions/rules.md#redeemer) rule.

See the [`requestExecutionPermissions`](../../../reference/advanced-permissions/wallet-client.md#requestexecutionpermissions) API reference for more information.

```ts
import { base as chain } from 'viem/chains'

const facilitators = accepted.extra.facilitators
if (!facilitators || facilitators.length === 0) {
const facilitatorAddresses = accepted.extra.facilitatorAddresses
if (!facilitatorAddresses || facilitatorAddresses.length === 0) {
console.error('No facilitators found in PAYMENT-REQUIRED')
// Handle error
}
Expand All @@ -153,14 +154,7 @@ const grantedPermissions = await walletClient.requestExecutionPermissions([
},
isAdjustmentAllowed: false,
},
rules: [
{
type: 'redeemer',
data: {
addresses: facilitators!,
},
},
],
redeemer: facilitatorAddresses!,
},
])
```
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ Create an `x402Erc7710Client` using
The provider creates an <GlossaryTerm term="Open redelegation">open redelegation</GlossaryTerm>
from the session account using the granted permission. The facilitator can then redeem the redelegated
permission context for x402 settlement.
The provider uses the session account's address as the redelegation's `from` address.

```ts
import { createx402DelegationProvider } from '@metamask/smart-accounts-kit/experimental'
Expand All @@ -134,7 +135,6 @@ const erc7710Client = new x402Erc7710Client({
delegationProvider: createx402DelegationProvider({
account: sessionAccount,
parentPermissionContext: permission.context,
from: permission.from,
}),
})
```
Expand Down
Loading