controller-setup
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseController Setup
Controller 设置
Cartridge Controller is a gaming-focused smart contract wallet for Starknet with session keys, passkeys, and paymaster support.
Cartridge Controller是一款面向游戏场景的Starknet智能合约钱包,支持会话密钥、通行密钥以及Paymaster功能。
Installation
安装
bash
undefinedbash
undefinedBasic Controller usage
Basic Controller usage
pnpm add @cartridge/controller starknet
pnpm add @cartridge/controller starknet
With framework connectors (React, native apps)
With framework connectors (React, native apps)
pnpm add @cartridge/controller @cartridge/connector starknet
undefinedpnpm add @cartridge/controller @cartridge/connector starknet
undefinedQuick Start
快速开始
typescript
import Controller from "@cartridge/controller";
const controller = new Controller();
const account = await controller.connect();
// Ready to execute transactionstypescript
import Controller from "@cartridge/controller";
const controller = new Controller();
const account = await controller.connect();
// Ready to execute transactionsWhen to Use Policies
何时使用策略
Policies are optional. Choose based on your needs:
- Use policies: Games needing frequent, seamless transactions with gasless execution via Paymaster
- Skip policies: Simple apps where manual approval per transaction is acceptable
策略为可选功能。可根据需求选择:
- 使用策略:需要频繁、无缝交易,且通过Paymaster实现无gas执行的游戏应用
- 跳过策略:接受每笔交易手动授权的简单应用
Choosing a Connector
选择连接器
| Use Case | Connector | Key Difference |
|---|---|---|
| Web apps with starknet-react | | Keys managed via browser cookies & localStorage |
| Native/mobile apps | | App generates local keypair, authenticates via browser redirect |
| 使用场景 | 连接器 | 核心差异 |
|---|---|---|
| 使用starknet-react的Web应用 | | 通过浏览器Cookie与localStorage管理密钥 |
| 原生/移动应用 | | 应用生成本地密钥对,通过浏览器重定向完成认证 |
ControllerConnector (Web)
ControllerConnector(Web端)
typescript
import { ControllerConnector } from "@cartridge/connector";
const connector = new ControllerConnector({
policies, // Optional session policies
signupOptions, // Optional auth methods to show
});typescript
import { ControllerConnector } from "@cartridge/connector";
const connector = new ControllerConnector({
policies, // Optional session policies
signupOptions, // Optional auth methods to show
});SessionConnector (Native/Mobile)
SessionConnector(原生/移动端)
typescript
import { SessionConnector } from "@cartridge/connector";
import { constants } from "starknet";
const connector = new SessionConnector({
policies,
rpc: "https://api.cartridge.gg/x/starknet/mainnet",
chainId: constants.StarknetChainId.SN_MAIN,
redirectUrl: "myapp://auth-callback",
disconnectRedirectUrl: "myapp://logout", // Optional logout redirect
signupOptions: ["webauthn", "google"], // Optional auth methods
});Session flow: App generates keypair → User authenticates in browser → Browser redirects back → App signs transactions locally.
typescript
import { SessionConnector } from "@cartridge/connector";
import { constants } from "starknet";
const connector = new SessionConnector({
policies,
rpc: "https://api.cartridge.gg/x/starknet/mainnet",
chainId: constants.StarknetChainId.SN_MAIN,
redirectUrl: "myapp://auth-callback",
disconnectRedirectUrl: "myapp://logout", // Optional logout redirect
signupOptions: ["webauthn", "google"], // Optional auth methods
});会话流程:应用生成密钥对 → 用户在浏览器中完成认证 → 浏览器重定向回应用 → 应用本地签署交易。
Chain Configuration
链配置
Default RPC endpoints are provided. Override with custom chains:
typescript
import { constants } from "starknet";
const controller = new Controller({
chains: [
{ rpcUrl: "https://api.cartridge.gg/x/starknet/mainnet" },
{ rpcUrl: "https://api.cartridge.gg/x/starknet/sepolia" },
{ rpcUrl: "http://localhost:5050" }, // Local Katana
],
defaultChainId: constants.StarknetChainId.SN_MAIN,
});默认提供RPC端点。可通过自定义链进行覆盖:
typescript
import { constants } from "starknet";
const controller = new Controller({
chains: [
{ rpcUrl: "https://api.cartridge.gg/x/starknet/mainnet" },
{ rpcUrl: "https://api.cartridge.gg/x/starknet/sepolia" },
{ rpcUrl: "http://localhost:5050" }, // Local Katana
],
defaultChainId: constants.StarknetChainId.SN_MAIN,
});Performance: Lazy Loading
性能优化:懒加载
Defer iframe mounting until is called:
connect()typescript
const controller = new Controller({
lazyload: true,
});延迟iframe挂载,直到调用方法:
connect()typescript
const controller = new Controller({
lazyload: true,
});ControllerOptions Reference
ControllerOptions 参考
typescript
type ControllerOptions = {
chains?: Chain[]; // Custom RPC endpoints
defaultChainId?: string; // Default chain (hex encoded)
policies?: SessionPolicies; // Session policies
propagateSessionErrors?: boolean; // Return errors to caller
errorDisplayMode?: "modal" | "notification" | "silent";
lazyload?: boolean; // Defer iframe mount
preset?: string; // Theme preset name
signupOptions?: AuthOptions; // Auth methods to show
};typescript
type ControllerOptions = {
chains?: Chain[]; // Custom RPC endpoints
defaultChainId?: string; // Default chain (hex encoded)
policies?: SessionPolicies; // Session policies
propagateSessionErrors?: boolean; // Return errors to caller
errorDisplayMode?: "modal" | "notification" | "silent";
lazyload?: boolean; // Defer iframe mount
preset?: string; // Theme preset name
signupOptions?: AuthOptions; // Auth methods to show
};Package Compatibility
包兼容性
json
{
"@cartridge/connector": "0.11.3-alpha.1",
"@cartridge/controller": "0.11.3-alpha.1",
"@starknet-react/core": "^5.0.1",
"@starknet-react/chains": "^5.0.1",
"starknet": "^8.1.2"
}json
{
"@cartridge/connector": "0.11.3-alpha.1",
"@cartridge/controller": "0.11.3-alpha.1",
"@starknet-react/core": "^5.0.1",
"@starknet-react/chains": "^5.0.1",
"starknet": "^8.1.2"
}Common Issues
常见问题
Cookies required: Controller sets essential cookies for initialization.
HTTPS required in dev: Use for local HTTPS.
vite-plugin-mkcertConnector outside components: Create outside React components to avoid recreation on re-render.
ControllerConnector需要Cookie支持:Controller会设置必要的Cookie以完成初始化。
开发环境需HTTPS:使用实现本地HTTPS。
vite-plugin-mkcert在组件外部创建Connector:在React组件外部创建,避免重渲染时重复创建。
ControllerConnector