-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into amie/spender-eoa
- Loading branch information
Showing
4 changed files
with
196 additions
and
2 deletions.
There are no files selected for viewing
24 changes: 24 additions & 0 deletions
24
docs/pages/guides/spend-permissions/api-reference/client-resources.mdx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
# Client resources | ||
|
||
Recommended libraries for handling blockchain and wallet interactions. The example project in the [Quick Start](/guides/spend-permissions/quick-start.mdx) guide uses all three of these. | ||
|
||
### Using Viem | ||
|
||
[Viem](https://viem.sh/) is a TypeScript interface for Ethereum that provides low-level stateless primitives for interacting with Ethereum. | ||
|
||
- **[Getting Started with Viem](https://viem.sh/docs/getting-started.html)** | ||
|
||
- **[Getting Started with Account Abstraction](https://viem.sh/account-abstraction#getting-started-with-account-abstraction)** | ||
Viem provides support for account abstraction clients, including specific support for Coinbase Smart Wallet and paymasters. | ||
|
||
### Using Wagmi | ||
|
||
[Wagmi](https://wagmi.sh/) is a collection of React Hooks that facilitate development of blockchain frontends. | ||
|
||
- **[Getting Started with Wagmi](https://wagmi.sh/react/getting-started)** | ||
- **[coinbaseWallet](https://wagmi.sh/react/api/connectors/coinbaseWallet)** | ||
|
||
### Using OnchainKit | ||
|
||
[OnchainKit](https://onchainkit.xyz/) is a collection of React components and TypeScript utilities that help developers quickly build | ||
onchain applications. |
105 changes: 105 additions & 0 deletions
105
docs/pages/guides/spend-permissions/api-reference/spendpermissionmanager.mdx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
# `SpendPermissionManager.sol` smart contract | ||
|
||
The open-source contracts repository is [here](https://github.com/coinbase/spend-permissions). | ||
|
||
### Structs | ||
|
||
#### `SpendPermission` | ||
|
||
Defines the complete parameters of a spend permission. | ||
|
||
| Field | Type | Description | | ||
| ----------- | --------- | ------------------------------------------------------------------------------------------ | | ||
| `account` | `address` | Smart account this spend permission is valid for. | | ||
| `spender` | `address` | Entity that can spend `account`'s tokens. | | ||
| `token` | `address` | Token address (ERC-7528 native token address or ERC-20 contract). | | ||
| `allowance` | `uint160` | Maximum allowed value to spend within each `period`. | | ||
| `period` | `uint48` | Time duration for resetting used `allowance` on a recurring basis (seconds). | | ||
| `start` | `uint48` | Timestamp this spend permission is valid starting at (unix seconds). | | ||
| `end` | `uint48` | Timestamp this spend permission is valid until (unix seconds). | | ||
| `salt` | `uint256` | An arbitrary salt to differentiate unique spend permissions with otherwise identical data. | | ||
| `extraData` | `bytes` | Arbitrary data to include in the permission. | | ||
|
||
#### `PeriodSpend` | ||
|
||
Describes the cumulative spend for the current active period. | ||
|
||
| Field | Type | Description | | ||
| ------- | --------- | ---------------------------------------- | | ||
| `start` | `uint48` | Start time of the period (unix seconds). | | ||
| `end` | `uint48` | End time of the period (unix seconds). | | ||
| `spend` | `uint160` | Accumulated spend amount for period. | | ||
|
||
--- | ||
|
||
### Contract functions | ||
|
||
#### `approve` | ||
|
||
Approve a spend permission via a direct call from the `account`. Only callable by the `account` specified in the spend permission. | ||
|
||
```solidity | ||
function approve(SpendPermission calldata spendPermission) external; | ||
``` | ||
|
||
--- | ||
|
||
#### `approveWithSignature` | ||
|
||
Approve a spend permission via a signature from the `account` owner. Compatible with [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492) signatures for automatic account creation if needed. | ||
|
||
```solidity | ||
function approveWithSignature(SpendPermission calldata spendPermission, bytes calldata signature) external; | ||
``` | ||
|
||
--- | ||
|
||
#### `spend` | ||
|
||
Spend tokens using a spend permission, transferring them from the `account` to the `spender`. Only callable by the `spender` specified in the permission. | ||
|
||
```solidity | ||
function spend(SpendPermission memory spendPermission, uint160 value) external; | ||
``` | ||
|
||
--- | ||
|
||
#### `revoke` | ||
|
||
Revoke a spend permission, permanently disabling its use. Only callable by the `account` owner specified in the spend permission. | ||
|
||
```solidity | ||
function revoke(SpendPermission calldata spendPermission) external; | ||
``` | ||
|
||
--- | ||
|
||
#### `getHash` | ||
|
||
Generate a hash of a `SpendPermission` struct for signing, in accordance with [EIP-712](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md). | ||
|
||
```solidity | ||
function getHash(SpendPermission memory spendPermission) public view returns (bytes32); | ||
``` | ||
|
||
--- | ||
|
||
#### `isApproved` | ||
|
||
Check if a spend permission is approved and not revoked, regardless of whether the current time is within the valid time range of the permission. | ||
|
||
```solidity | ||
function isApproved(SpendPermission memory spendPermission) public view returns (bool); | ||
``` | ||
|
||
--- | ||
|
||
#### `getCurrentPeriod` | ||
|
||
Retrieve the `start`, `end`, and accumulated `spend` for the current period of a spend permission. | ||
Reverts if the current time is outside the valid time range of the permission, but does not validate whether the | ||
spend permission has been approved or revoked. | ||
|
||
```solidity | ||
function getCurrentPeriod(SpendPermission memory spendPermission) public view returns (PeriodSpend memory); | ||
``` |
47 changes: 47 additions & 0 deletions
47
docs/pages/guides/spend-permissions/api-reference/wallet-fetchpermissions.mdx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
## Coinbase Wallet API | ||
|
||
### `wallet_fetchPermissions` | ||
|
||
A utility API endpoint for recalling permissions previously granted for a specific user. | ||
Excludes permissions that have expired or been revoked. | ||
|
||
#### Schema | ||
|
||
**Endpoint:** `https://chain-proxy.wallet.coinbase.com?targetName=base-sepolia`. | ||
|
||
```typescript | ||
type FetchPermissionsRequest = { | ||
chainId: string; // hex, uint256 | ||
account: string; // address | ||
spender: string; // address | ||
pageOptions?: { | ||
pageSize number; // number of items requested, defaults to 50 | ||
cursor string; // identifier for where the page should start | ||
} | ||
} | ||
|
||
type FetchPermissionsResult = { | ||
permissions: FetchPermissionsResultItem[]; | ||
pageDescription: { | ||
pageSize number; // number of items returned | ||
nextCursor string; // identifier for where the next page should start | ||
} | ||
} | ||
|
||
type FetchPermissionsResultItem = { | ||
createdAt: number; // UTC timestamp for when the permission was granted | ||
permissionHash: string; // hex | ||
signature: string; // hex | ||
permission: { | ||
account: string; // address | ||
spender: string; // address | ||
token: string; // address | ||
allowance: string; // base 10 numeric string | ||
period: number; // unix seconds | ||
start: number; // unix seconds | ||
end: number; // unix seconds | ||
salt: string; // base 10 numeric string | ||
extraData: string // hex | ||
}; | ||
} | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters