Skip to content

Commit 0259d69

Browse files
committed
engine-completed
1 parent 745ef45 commit 0259d69

File tree

14 files changed

+632
-492
lines changed

14 files changed

+632
-492
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import { Callout } from '@doc';
2+
3+
export const metadata = {
4+
title: "AWS KMS Wallet",
5+
description:
6+
"Learn how to set up an AWS KMS wallet with thirdweb Engine.",
7+
};
8+
9+
10+
## AWS KMS wallet
11+
12+
An AWS KMS Wallet is a wallet securely stored in your AWS account. Engine can create and transact with the wallet, but not delete it.
13+
14+
<Callout variant="info" title="AWS KMS Support">
15+
AWS KMS wallets are not currently supported on Engine Cloud. They are currently supported on Engine Dedicated v2, and will be available soon with Dedicated v3.
16+
</Callout>
17+
18+
19+
#### Setup
20+
21+
1. [Create an IAM user](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console) with programmatic access.
22+
1. [Grant the following KMS permissions](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html) to this user.
23+
- `kms:CreateKey`
24+
- `kms:GetPublicKey`
25+
- `kms:Sign`
26+
- `kms:CreateAlias`
27+
- `kms:Verify`
28+
1. On the user page, navigate to **Security credentials > Access keys**.
29+
1. Select **Create access key** to get an **Access Key** and **Secret Key**.
30+
1. In the dashboard, navigate to **Configuration > Server Wallets**.
31+
1. Select **AWS KMS** and provide the following:
32+
- Access Key (example: `AKIA...`)
33+
- Secret Key (example: `UW7A...`)
34+
- Region (example: `us-west-1`)
35+
36+
#### Import an existing wallet
37+
38+
1. Ensure your [KMS key is created](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) with the following settings:
39+
- Key type: `Asymmetric`
40+
- Key spec: `ECC_SECG_P256K1`
41+
- Key usage: `Sign and verify`
42+
1. In the dashboard, navigate to **Overview > Server Wallets**.
43+
1. Select **Import** and provide the following:
44+
- AWS KMS Key ID (example: `0489da75-9830-4a5a-97e3-e4a6df7775b3`)
45+
- AWS KMS ARN (example: `arn:aws:kms:us-west-1:632186309261:key/0489da75-9830-4a5a-97e3-e4a6df7775b3`)
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { Callout } from '@doc';
2+
3+
export const metadata = {
4+
title: "Circle Wallet",
5+
description:
6+
"Learn how to set up a Circle wallet with thirdweb Engine.",
7+
};
8+
9+
## Circle Wallet
10+
11+
[Circle Programmable Wallets](https://developers.circle.com/w3s/programmable-wallets) is a Wallet as a Service (WaaS) solution designed to simplify the creation and management of secure Web3 wallets and their private keys. Engine can create and transact with the wallet, but not delete it.
12+
13+
<Callout variant="info" title="Circle Wallets">
14+
Circle wallets are not currently supported on Engine Cloud. They are currently supported on Engine Dedicated v2, and will be available soon with Dedicated v3.
15+
</Callout>
16+
17+
#### Setup
18+
19+
1. Create a Circle account at the [Circle Console](https://console.circle.com/signin).
20+
2. Navigate to [API & Client Keys](https://console.circle.com/api-keys).
21+
3. Create an API Key. (Either a standard key or a restricted key scoped to "Programmable Wallets" is required.) Do not enable the IP Allowlist. Store this key, it is not shown again.
22+
4. In the dashboard, navigate to **Configuration > Server Wallets**.
23+
5. Select **Circle** and provide the following:
24+
- API Key (example: `API_KEY:...`)
25+
26+
<Callout variant="info" title="Circle API Key">
27+
Circle API Keys are scoped to either Testnet or Mainnet. Server wallets
28+
created with a testnet key will not work on the mainnet, and vice versa
29+
<br /> If you want to change between testnet and mainnet, you will need to
30+
update the API key configuration in engine, and recreate a wallet with the
31+
Mainnet scope.
32+
</Callout>
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
import { Details } from "@doc";
2+
3+
## Google Cloud KMS wallet
4+
5+
A Google Cloud KMS Wallet is a wallet securely stored in your Google Cloud account. Engine can create and transact with the wallet, but not delete it.
6+
7+
#### Setup
8+
9+
1. [Enable Google KMS API](https://cloud.google.com/kms/docs/create-encryption-keys#before-you-begin) for your GCP account.
10+
1. [Create a Service Account](https://cloud.google.com/iam/docs/service-accounts-create).
11+
1. Navigate to the [IAM](https://console.cloud.google.com/iam-admin/iam) page. Find the service account and select **Edit Principal** to add the following roles:
12+
- Cloud KMS Admin
13+
- Cloud KMS CryptoKey Signer/Verifier
14+
1. Navigate to the [Service Accounts](https://console.cloud.google.com/iam-admin/serviceaccounts) page. Select the above service account.
15+
1. Navigate to the **Keys** tab. Select **Add Key > Create new key**.
16+
1. Select **JSON** to download the JSON file. This file contains the key's private key in plaintext.
17+
1. In the dashboard, navigate to **Configuration > Server Wallets**.
18+
1. Select **Google KMS** and provide the following:
19+
20+
<Details id="gcpApplicationProjectId" summary="gcpApplicationProjectId">
21+
22+
This is the Project ID of the GCP project where the key was created.
23+
24+
**Where to find**:
25+
26+
- Navigate to the Google Cloud Console.
27+
- Click on the project dropdown at the top of the page.
28+
- The Project ID is displayed under your project's name.
29+
30+
</Details>
31+
32+
<Details id="gcpKmsLocationId" summary="gcpKmsLocationId">
33+
34+
This is the location where the keyring was created (e.g., us-central1, europe-west1).
35+
36+
**Where to find**:
37+
38+
- In the Google Cloud Console, go to **Security > Cryptographic Keys**.
39+
- Click on the keyring that contains your key.
40+
- The location is displayed in the Location field.
41+
42+
</Details>
43+
44+
<Details id="gcpKmsKeyRingId" summary="gcpKmsKeyRingId">
45+
46+
This is the ID of the keyring where your key is stored.
47+
48+
**Where to find**:
49+
50+
- In the Google Cloud Console, go to **Security > Cryptographic Keys**.
51+
- Select the keyring that contains your key.
52+
- The KeyRing ID is displayed in the list or the URL.
53+
54+
</Details>
55+
56+
<Details id="gcpApplicationCredentialEmail" summary="gcpApplicationCredentialEmail">
57+
58+
This is the email associated with the service account used for accessing the KMS key.
59+
60+
**Where to find**:
61+
62+
- In the Google Cloud Console, go to **IAM & Admin > Service Accounts**.
63+
- Find the service account you are using. its email will be in the format: `[email protected]`
64+
65+
</Details>
66+
67+
<Details id="gcpApplicationCredentialPrivateKey" summary="gcpApplicationCredentialPrivateKey">
68+
69+
This is the private key of the service account that is used for authenticating API requests.
70+
71+
**Where to find**:
72+
73+
- Open the JSON file downloaded above.
74+
- Copy the value of the `private_key` field.
75+
76+
</Details>
77+
78+
#### Import an existing wallet
79+
80+
1. Ensure your [keyring is created](https://cloud.google.com/kms/docs/create-key-ring) with the following settings:
81+
- Purpose: `Asymmetric sign`
82+
- Algorithm: `Elliptic Curve P-256 - SHA256 Digest`
83+
1. In the dashboard, navigate to **Overview > Server Wallets**.
84+
1. Select **Import** and provide the following:
85+
- GCP KMS Key ID (example: `0489da75-9830-4a5a-97e3-e4a6df7775b3`)
86+
- GCP KMS Version ID (example: `1`)
87+
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { createMetadata, Callout } from "@/components/Document";
2+
3+
export const metadata = createMetadata({
4+
title: "Configure Wallets | thirdweb Engine",
5+
description: "Configure your server wallets to perform blockchain actions with Engine.",
6+
});
7+
8+
# Configure Engine Wallets
9+
10+
Engine performs blockchain actions using server wallets that you own and manage.
11+
12+
### Smart Server Wallets
13+
14+
Smart server wallets are the **recommended option** to perform blockchain actions with Engine.
15+
16+
**Benefits:**
17+
- Eliminate manual gas management. Smart server wallets are automatically funded via your thirdweb-linked payment method using a built-in paymaster.
18+
- Smart accounts use multi-dimensional nonces, which are more efficient than EOAs.
19+
- Works with all existing Engine endpoints without needing any code changes.
20+
- Secured non-custodially through Vault, thirdweb's key management system.
21+
22+
Smart server wallets are included with Engine Cloud and Engine Dedicated. [Learn how to configure your own smart server wallets.](/engine/configure-wallets/server-wallets)
23+
24+
### Secure and import your own EOA
25+
26+
For users wanting to use their own wallets, we recommend securing your wallet with a key management service such as [AWS KMS](/engine/configure-wallets/aws-kms) or [Google Cloud KMS](/engine/configure-wallets/google-kms).
27+
28+
**Benefits:**
29+
- Import your own existing wallets and use them with Engine.
30+
31+
Importing secured EOAs through AWS KMS or Google are included in the Engine Dedicated plan.
32+
### Circle Programmable Wallets
33+
34+
Circle Programmable Wallets is a Wallet as a Service (WaaS) solution designed to simplify the creation and management of secure Web3 wallets and their private keys.
35+
36+
### Configuration Types
37+
38+
- `smart:local` - Smart account backed by a local key
39+
- `smart:aws-kms` - Smart account backed by AWS KMS
40+
- `smart:gcp-kms` - Smart account backed by Google Cloud KMS
41+
- `smart:circle` - Smart account backed by Circle Developer-Controlled Wallets
42+
43+
## Best practices
44+
45+
- Using AWS or Google Cloud KMS wallets is recommended for securing wallets for production use. Private keys are never exposed and the wallet is backed up securely by the cloud provider.
46+
- Use labels and multiple server wallets to organize and track usage. Example: Use one wallet to pay out creators on your platform and another to airdrop NFTs to users.
47+
- If using your own wallets require topping up gas or ERC20 tokens regularly, consider creating separate "funds storage" backend wallet that transfers funds to other wallets via the dashboard UI or API.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { Details } from "@doc";
2+
3+
## Smart Server Wallets
4+
5+
Smart server wallets are the recommended way to perform blockchain operations with Engine. Each smart server wallet consists of an EOA (managed internally by Engine) and a smart account (using thirdweb's default account implementation).
6+
7+
### Benefits
8+
9+
Smart server wallets inherit smart account benefits and offer several advantages over traditional EOAs:
10+
11+
- **Gas Management**: Built-in paymaster eliminates the need to maintain gas tokens. This means you never need to hold crypto or top up gas.
12+
- **Better Nonce Management**: Smart accounts use multi-dimensional nonces, which are more efficient than EOAs.
13+
- **Simple Integration**: Works with all existing Engine endpoints without any code changes.
14+
15+
### How it works
16+
17+
The smart account is automatically deployed the first time you send a transaction on a chain. You don't need to think about deploying or managing the smart account - Engine handles everything behind the scenes. All transactions are sent as UserOperations to the EntryPoint contract on chain.
18+
19+
<Details summary="How are Smart Backend Wallets different from existing engine AA features?">
20+
Unlike the [previous account abstraction implementation in
21+
Engine](account-abstraction) where you had to manage both the account address
22+
(`x-account-address`) and the backend wallet address
23+
(`x-backend-wallet-address`) separately, smart backend wallets simplify this.
24+
The backend wallet address is now the smart account address itself.
25+
</Details>
26+
27+
<Details summary="When not to use Smart Backend Wallets?">
28+
At this time, Smart Backend Wallets do not allow for importing a smart
29+
account. In use cases where you need to import a smart account (such as with
30+
session keys), you should use [Engine AA features that utilise the
31+
`x-account-address` header](account-abstraction).
32+
</Details>
33+
34+
### Pricing
35+
36+
Smart server wallets have no additional costs to use with your Engine instance. Transactions sent from smart backend wallets follow the [same billing model as regular account abstraction transactions with thirdweb](/connect/account-abstraction/infrastructure#pricing--billing).
37+
Smart accounts need to be deployed on each chain. This costs gas and is billed to your account like any other transaction.
File renamed without changes.

apps/portal/src/app/engine/faq/page.mdx

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
1-
import { Callout } from "@doc";
1+
import { Callout, Details } from "@doc";
22

3-
# FAQ
4-
5-
## About Engine
6-
7-
### Which contracts work with Engine?
3+
# Engine FAQs
84

5+
<Details summary="Which contracts work with Engine?">
96
Engine supports reads and writes to any contract verified on the blockchain explorer, including any contract deployed via thirdweb.
107
_Note: Some endpoints allow providing the contract ABI to support any unverified contract._
118

129
Engine also supports deploys for thirdweb [prebuilt contracts](https://thirdweb.com/explore) including NFTs, tokens, marketplaces, and smart accounts.
1310

1411
If you have a question about a particular contract type, [contact us](https://thirdweb.com/support).
12+
</Details>
1513

16-
### How are Engine and the thirdweb Contract SDK different?
17-
14+
<Details summary="What is the difference between Engine and thirdweb SDKs?">
1815
Engine is a server that manages your backend wallets and how they interact with contracts. This difference unlocks capabilities that thirdweb and other web3 SDKs, including:
1916

2017
- Management of KMS backend wallets
@@ -24,10 +21,9 @@ Engine is a server that manages your backend wallets and how they interact with
2421
- Webhooks on completed transactions to sync onchain and off-chain activity
2522

2623
Additionally, Engine is built on top of the thirdweb SDK and has the same capabilities.
24+
</Details>
2725

28-
## Using Engine
29-
30-
### How do I wait for a transaction to be mined?
26+
<Details summary="How do I wait for a transaction to be mined?">
3127

3228
Write calls to contracts do not block until they are mined. Instead they enqueue an async job and immediately return a reference to the job called `queueId`.
3329

@@ -46,8 +42,9 @@ Here are three ways to determine when the job is mined:
4642
console.log("Received data:", JSON.parse(res.result));
4743
};
4844
```
45+
</Details>
4946

50-
### How do I send native currency with my transaction?
47+
<Details summary="How do I send native currency with my transaction??">
5148

5249
To send native tokens (e.g. ETH on Ethereum), set `txOverrides.value`.
5350
This may be required when calling a `payable` contract method.
@@ -64,7 +61,9 @@ Here's an example of sending 0.2 ETH:
6461
}
6562
```
6663

67-
### How do I override gas settings?
64+
</Details>
65+
66+
<Details summary="How do I override gas settings?">
6867

6968
To override the gas settings, set relevant `txOverrides` gas fields.
7069
Each field is optional and will be estimated by Engine if omitted.
@@ -89,7 +88,9 @@ Otherwise if gas prices don't fall, transactions may be in your queue indefinite
8988

9089
</Callout>
9190

92-
### How do I set a timeout on transactions?
91+
</Details>
92+
93+
<Details summary="How do I set a timeout on transactions?">
9394

9495
To specify a transaction timeout, set `txOverrides.timeoutSeconds`.
9596
Engine flags transactions as `errored` if they are not sent before the timeout. An `errored` webhook will be sent.
@@ -106,3 +107,5 @@ Here's an example of a 2-hour timeout:
106107
}
107108
}
108109
```
110+
111+
</Details>

0 commit comments

Comments
 (0)