web3-account-abstraction
npx skills add https://github.com/stanah/dotagents --skill web3-account-abstraction
Agent 安装分布
Skill 文档
web3-account-abstraction: ã¢ã«ã¦ã³ãæ½è±¡åï¼ERC-4337ï¼ã¹ãã«
ERC-4337 ã«åºã¥ãã¢ã«ã¦ã³ãæ½è±¡åã®è¨è¨ãã¿ã¼ã³ãã¹ãã¼ãã¢ã«ã¦ã³ãå®è£ ãPaymaster çµ±åãã»ãã·ã§ã³ãã¼ç®¡çãæä¾ããã¹ãã«ãã¬ã¹ã¬ã¹ãã©ã³ã¶ã¯ã·ã§ã³ãã½ã¼ã·ã£ã«ãªã«ããªã¼ãããããã©ã³ã¶ã¯ã·ã§ã³çã®ã¦ã¼ã¹ã±ã¼ã¹ã対象ã¨ããã
ERC-4337 ã¢ã¼ããã¯ãã£æ¦è¦
ã³ã³ãã¼ãã³ãé¢ä¿
ã¦ã¼ã¶ã¼
â
ââ UserOperation 使
â
â¼
Bundler (alt-mempool)
â
ââ UserOp ããã³ãã«
â
â¼
EntryPoint ã³ã³ãã©ã¯ã (singleton)
â
ââ validateUserOp() â Smart Account
ââ validatePaymasterUserOp() â Paymaster (optional)
ââ execute() â Smart Account â Target Contract
主è¦ã³ã³ãã¼ãã³ã
| ã³ã³ãã¼ãã³ã | å½¹å² | ãªã³ãã§ã¼ã³/ãªããã§ã¼ã³ |
|---|---|---|
| Smart Account | ã¦ã¼ã¶ã¼ã®ã¦ã©ã¬ããï¼ã³ã³ãã©ã¯ãï¼ | ãªã³ãã§ã¼ã³ |
| EntryPoint | UserOp ã®ããªãã¼ã·ã§ã³ã»å®è¡ã管ç | ãªã³ãã§ã¼ã³ï¼singletonï¼ |
| Paymaster | ã¬ã¹ä»£ã代æããã | ãªã³ãã§ã¼ã³ |
| Bundler | UserOp ãåéã»ãã³ãã«ã»éä¿¡ | ãªããã§ã¼ã³ |
| Account Factory | Smart Account ã®ããã㤠| ãªã³ãã§ã¼ã³ |
UserOperation ã®æ§é
UserOperation {
sender // Smart Account ã¢ãã¬ã¹
nonce // ãªãã¬ã¤é²æ¢
initCode // åå: Factory + 使ãã¼ã¿ / 以é: 空
callData // å®è¡ãã颿°å¼ã³åºã
callGasLimit // å®è¡æã¬ã¹ãªããã
verificationGasLimit // ããªãã¼ã·ã§ã³æã¬ã¹ãªããã
preVerificationGas // Bundler ã¸ã®ãªã¼ãã¼ãããè£å
maxFeePerGas
maxPriorityFeePerGas
paymasterAndData // Paymaster ã¢ãã¬ã¹ + æ¤è¨¼ãã¼ã¿
signature // Smart Account ã®ç½²å
}
ã¯ã¼ã¯ããã¼
Step 1: AA è¦ä»¶ã®æ´ç
ã¦ã¼ã¶ã¼ã®è¦ä»¶ãã AA ã®ã¦ã¼ã¹ã±ã¼ã¹ãå¤å®ãã:
| ã¦ã¼ã¹ã±ã¼ã¹ | å¿ è¦ã³ã³ãã¼ãã³ã | åç §ãªãã¡ã¬ã³ã¹ |
|---|---|---|
| ã¬ã¹ã¬ã¹ãã©ã³ã¶ã¯ã·ã§ã³ | Paymaster | references/paymaster-patterns.md |
| ã½ã¼ã·ã£ã«ãªã«ããªã¼ | Smart Accountï¼Guardianï¼ | references/smart-account-patterns.md |
| ã»ãã·ã§ã³ãã¼ï¼èªåå®è¡ï¼ | Session Key Module | references/session-keys.md |
| ããããã©ã³ã¶ã¯ã·ã§ã³ | Smart Accountï¼executeBatchï¼ | references/erc4337-core.md |
| ERC20 ã§ã¬ã¹æ¯æã | Token Paymaster | references/paymaster-patterns.md |
æ¤è¨¼ã²ã¼ã: ã¦ã¼ã¹ã±ã¼ã¹ãä¸è¨ã®ããããã«è©²å½ãããã¨ã該å½ããªãå ´å㯠AskUserQuestion ã§è¦ä»¶ãæç¢ºåãããAA ãä¸è¦ãªå ´åï¼é常㮠EOA ã§ååãªå ´åï¼ã¯ãã®æ¨ãä¼ããã
Step 2: ã¹ãã¼ãã¢ã«ã¦ã³ã鏿
ããã¸ã§ã¯ãè¦ä»¶ã«åºã¥ãã¹ãã¼ãã¢ã«ã¦ã³ãå®è£ ã鏿ãã:
| å®è£ | ç¹å¾´ | æ¨å¥¨ã±ã¼ã¹ |
|---|---|---|
| Safe (æ§ Gnosis Safe) | æãå®ç¸¾ãããã¢ã¸ã¥ã©ã¼è¨è¨ããã«ãã·ã°å¯¾å¿ | ã¨ã³ã¿ã¼ãã©ã¤ãºãé«ã»ãã¥ãªãã£è¦ä»¶ |
| Kernel (ZeroDev) | 軽éããã©ã°ã¤ã³åãä½ã¬ã¹ã³ã¹ã | DeFiãã²ã¼ã ãé«é »åº¦æä½ |
| Biconomy Smart Account | SDK ãå å®ãå°å ¥ã容æ | è¿ éãªãããã¿ã¤ããã¢ãã¤ã«ã¢ã㪠|
| Simple Account (eth-infinitism) | ãªãã¡ã¬ã³ã¹å®è£ ãæå°æ§æ | å¦ç¿ã»æ¤è¨¼ãã«ã¹ã¿ã å®è£ ã®ãã¼ã¹ |
references/smart-account-patterns.md ãèªã¿è¾¼ã¿ã鏿ããå®è£
ã®è©³ç´°ãã¿ã¼ã³ã確èªããã
夿ã䏿ãªå ´å: AskUserQuestion ã§ãã»ãã¥ãªãã£éè¦ vs éçºé度éè¦ãããã«ãã·ã°å¿ è¦æ§ãã確èªããã
æ¤è¨¼ã²ã¼ã: ã¹ãã¼ãã¢ã«ã¦ã³ãå®è£ ãæ±ºå®ãã対å¿ãã SDK / ã©ã¤ãã©ãªãããã¸ã§ã¯ãã«ã¤ã³ã¹ãã¼ã«å¯è½ã§ãããã¨ã
Step 3: ãªãã¡ã¬ã³ã¹èªã¿è¾¼ã¿
Step 1-2 ã®çµæã«åºã¥ããå¿ è¦ãªãªãã¡ã¬ã³ã¹ãèªã¿è¾¼ã:
| ãªãã¡ã¬ã³ã¹ | èªã¿è¾¼ãæ¡ä»¶ |
|---|---|
references/erc4337-core.md |
常ã«èªã¿è¾¼ãï¼åºç¤ç¥èï¼ |
references/paymaster-patterns.md |
ã¬ã¹ã¬ã¹ / ERC20 æ¯æããå®è£ ããå ´å |
references/smart-account-patterns.md |
ã¹ãã¼ãã¢ã«ã¦ã³ãã®ã«ã¹ã¿ãã¤ãºãå¿ è¦ãªå ´å |
references/session-keys.md |
ã»ãã·ã§ã³ãã¼ / èªåå®è¡ãå®è£ ããå ´å |
æ¤è¨¼ã²ã¼ã: erc4337-core.md ãæ£å¸¸ã«èªã¿è¾¼ãããã¨ã
Step 4: å®è£
- ã¹ãã¼ãã¢ã«ã¦ã³ãã®ã»ããã¢ãã:
- Account Factory ã®é¸æã¾ãã¯ãããã¤
- ååãããã¤æã®
initCodeã®æ§æ - ç½²åã¹ãã¼ã ï¼ECDSA / Passkey / ãã«ãã·ã°ï¼ã®è¨å®
- UserOperation ã®æ§æ:
callDataã®ã¨ã³ã³ã¼ãï¼execute/executeBatchï¼- ã¬ã¹ãã©ã¡ã¼ã¿ã®è¦ç©ããï¼Bundler RPC 使ç¨ï¼
- Paymaster ä½¿ç¨æã®
paymasterAndDataè¨å®
- Bundler ã¸ã®éä¿¡:
eth_sendUserOperationRPC ã³ã¼ã«- UserOp ããã·ã¥ã®åå¾ã¨è¿½è·¡
- ããã³ãã¨ã³ãçµ±å:
web3-frontendã¹ãã«ã® wagmi / viem ãã¿ã¼ã³ã¨çµã¿åããã- ãã©ã³ã¶ã¯ã·ã§ã³ UX ã¯ã¬ã¹ã¬ã¹ã«é©å¿ããã
æ¤è¨¼ã²ã¼ã: UserOperation ã Bundler ã«åçãããEntryPoint ã§å®è¡ããããã¨ããã¹ããããï¼Sepoliaï¼ã§æ¤è¨¼ããã
Step 5: ãã¹ãã»ãããã¤
- ãã¼ã«ã«ãã¹ã:
- anvil + Bundlerï¼Stackup / Pimlico ã®ãã¼ã«ã«ã¢ã¼ãï¼ã§ãã¹ã
- UserOp ã®ããªãã¼ã·ã§ã³ã»å®è¡ã確èª
- ãã¹ãããããããã¤:
- Sepolia ã§ã¹ãã¼ãã¢ã«ã¦ã³ãã®ããã㤠+ æä½ãæ¤è¨¼
- Paymaster ã®ããã¸ãã確èª
- æ¬çªãã§ãã¯ãªã¹ã:
- EntryPoint ã¢ãã¬ã¹ã®æ£å½æ§ç¢ºèªï¼å ¬å¼ singletonï¼
- Paymaster ã®ããã¸ããæ®é«ã¢ãã¿ãªã³ã°è¨å®
- Bundler ã®ãã§ã¤ã«ãªã¼ãã¼è¨å®
æ¤è¨¼ã²ã¼ã: ãã¹ããããã§å ¨ã¦ã¼ã¹ã±ã¼ã¹ãæ£å¸¸åä½ãããã¨ã
使ç¨ä¾
ä¾ 1: ã¬ã¹ã¹ãã³ãµã¼ï¼ã¦ã¼ã¶ã¼ã®ã¬ã¹ä»£ã dApp ãè² æ ï¼
ã¦ã¼ã¶ã¼å ¥å: ãã¦ã¼ã¶ã¼ãã¬ã¹ä»£ãæããªãã¦æ¸ãããã«ãããã
ã¢ã¯ã·ã§ã³:
- Step 1: ã¬ã¹ã¬ã¹ãã©ã³ã¶ã¯ã·ã§ã³ â Paymaster ãå¿ è¦
- Step 2: éçºé度éè¦ â Biconomy Smart Account ã鏿
- Step 3:
erc4337-core.md+paymaster-patterns.mdãèªã¿è¾¼ã¿ - Step 4: 以ä¸ãå®è£
:
- Biconomy SDK ã§ã¹ãã¼ãã¢ã«ã¦ã³ãåæå
- Verifying Paymaster ã®è¨å®ï¼dApp ãµã¼ãã¼ã§ç½²åçæï¼
paymasterAndDataã UserOp ã«ä»ä¸- ããã³ãã¨ã³ãã§ã¯ã¬ã¹è¦ç©ãã表示ãçç¥ï¼0 ETHï¼
- Step 5: Sepolia ã§ Paymaster ããã¸ãã â ã¬ã¹ã¬ã¹ãã³ããæ¤è¨¼
çµæ: ã¦ã¼ã¶ã¼ã¯ ETH ãæã£ã¦ããªãã¦ã NFT ããã³ãã§ãããã¬ã¹ä»£ã¯ dApp ã® Paymaster ãè² æ ã
ä¾ 2: ã»ãã·ã§ã³ãã¼ï¼ã²ã¼ã ã®èªåå®è¡ï¼
ã¦ã¼ã¶ã¼å ¥å: ããããã¯ãã§ã¼ã³ã²ã¼ã ã§ãæ¯åç½²åããªãã¦æ¸ãããã«ãããã
ã¢ã¯ã·ã§ã³:
- Step 1: ã»ãã·ã§ã³ãã¼ â Session Key Module ãå¿ è¦
- Step 2: é«é »åº¦æä½ â Kernel (ZeroDev) ã鏿
- Step 3:
erc4337-core.md+session-keys.mdãèªã¿è¾¼ã¿ - Step 4: 以ä¸ãå®è£
:
- Kernel Smart Account ã®ã»ããã¢ãã
- Session Key Module ã®ã¤ã³ã¹ãã¼ã«
- ã»ãã·ã§ã³ãã¼ã®æ¨©éã¹ã³ã¼ãã³ã°ï¼å¯¾è±¡ã³ã³ãã©ã¯ãã»é¢æ°ã»æéãå¶éï¼
- ãã©ã¦ã¶ã®ãã¼ã«ã«ã¹ãã¬ã¼ã¸ã«ã»ãã·ã§ã³ãã¼ãä¿å
- ã»ãã·ã§ã³ãã¼ã§ UserOp ã«èªåç½²å
- Step 5: ã²ã¼ã ã³ã³ãã©ã¯ãã¸ã® move() 颿°ãã»ãã·ã§ã³ãã¼ã§100åå®è¡ãã¦æ¤è¨¼
çµæ: ååã®ã¿ãã¹ã¿ã¼ãã¼ã§ç½²åã以éã¯ã»ãã·ã§ã³ãã¼ã§èªåç½²åãããã²ã¼ã æä½ãã·ã¼ã ã¬ã¹ã
ä¾ 3: ã½ã¼ã·ã£ã«ãªã«ããªã¼
ã¦ã¼ã¶ã¼å ¥å: ãç§å¯éµãç´å¤±ãã¦ãã¢ã«ã¦ã³ãã復æ§ã§ããããã«ãããã
ã¢ã¯ã·ã§ã³:
- Step 1: ã½ã¼ã·ã£ã«ãªã«ããªã¼ â Guardian æ©è½ãå¿ è¦
- Step 2: ã»ãã¥ãªãã£éè¦ â Safe ã鏿
- Step 3:
erc4337-core.md+smart-account-patterns.mdãèªã¿è¾¼ã¿ - Step 4: 以ä¸ãå®è£
:
- Safe Smart Account ã®ã»ããã¢ããï¼1/1 ç½²åè ï¼
- Recovery Module ã®è¿½å : 3 人㮠Guardian ãè¨å®ï¼2/3 ã§å¾©æ§å¯è½ï¼
- Guardian ã«ã¯å人㮠EOA ã¢ãã¬ã¹ã¾ãã¯ä¿¡é ¼ããããµã¼ãã¹ãè¨å®
- 復æ§ããã¼: Guardian ããªã«ããªã¼ææ¡ â é å»¶æéï¼48æéï¼â æ°ãªã¼ãã¼è¨å®
- Step 5: ãã¹ããããã§éµç´å¤±ã·ããªãªãã·ãã¥ã¬ã¼ã
çµæ: ã¦ã¼ã¶ã¼ã¯ç§å¯éµãç´å¤±ãã¦ããGuardian 2/3 ã®æ¿èªã§æ°ããéµã«åãæ¿ããããã
ãã©ãã«ã·ã¥ã¼ãã£ã³ã°
1. UserOperation ã®ããªãã¼ã·ã§ã³å¤±æ
çç¶: Bundler ã AA2x ã¨ã©ã¼ã³ã¼ããè¿ã
åå ã¨å¯¾ç:
- AA21 (didn’t pay prefund): Smart Account ã«åå㪠ETH ããªããããã¸ããããã Paymaster ã使ç¨ããã
- AA23 (reverted):
validateUserOpã revert ãããç½²åãæ£ããããnonce ãæ£ããã確èªããã - AA24 (signature error): ç½²åã®å½¢å¼ã䏿£ãSmart Account ã®ç½²åæ¤è¨¼ãã¸ãã¯ã¨ç½²åæ¹æ³ãä¸è´ãã¦ããã確èªããã
- AA25 (invalid nonce): nonce ã䏿£ã
getNonce()ã§ææ°ã® nonce ãåå¾ãã¦ä½¿ç¨ãããnonce ã¯ãã¼ä»ãï¼2D nonceï¼ã®ããããã¼ã®é¸æã確èªããã
2. Bundler æ¥ç¶ã¨ã©ã¼
çç¶: eth_sendUserOperation ãæ¥ç¶ã¨ã©ã¼ã¾ã㯠4xx ãè¿ã
åå ã¨å¯¾ç:
- Bundler URL ã®ä¸æ£: æ£ãããã§ã¼ã³ç¨ã® Bundler URL ãè¨å®ãã¦ããã確èªãããStackup / Pimlico / Alchemy 㯠ãã§ã¼ã³ãã¨ã«ã¨ã³ããã¤ã³ããç°ãªãã
- EntryPoint ãã¼ã¸ã§ã³ã®ä¸ä¸è´: Bundler ããµãã¼ããã EntryPoint ãã¼ã¸ã§ã³ï¼v0.6 / v0.7ï¼ã¨ã¹ãã¼ãã¢ã«ã¦ã³ãã® EntryPoint ãã¼ã¸ã§ã³ãä¸è´ãããã
- API ãã¼ã®æéåã: ææ Bundler ãµã¼ãã¹ã® API ãã¼ã確èªããã
3. Paymaster ã®ããã¸ããä¸è¶³
çç¶: AA31 (paymaster deposit too low) ã¨ã©ã¼
åå ã¨å¯¾ç:
- ããã¸ããæ®é«ã®ç¢ºèª:
entryPoint.balanceOf(paymasterAddress)ã§æ®é«ã確èªããã - ããã¸ããã®è¿½å :
entryPoint.depositTo(paymasterAddress)ã§ ETH ã追å ããã - ã¢ãã¿ãªã³ã°ã®è¨å®: ããã¸ããæ®é«ãé¾å¤ãä¸åã£ãå ´åã«ã¢ã©ã¼ããéä¿¡ããä»çµã¿ãæ§ç¯ããã
- Rate Limiting: Paymaster ã®å©ç¨ä¸éï¼1ã¦ã¼ã¶ã¼ããã/æéãããçï¼ãè¨å®ãã¦æ¯æ¸ãé²ãã
4. Smart Account ã®ãããã¤ã失æãã
çç¶: initCode ãå«ãæåã® UserOp ã失æãã
åå ã¨å¯¾ç:
- Factory ã¢ãã¬ã¹ã®ä¸æ£:
initCodeã®å é 20 ãã¤ããæ£ãã Factory ã¢ãã¬ã¹ã確èªããã - salt ã®è¡çª: åã salt ã§æ¢ã«ã¢ã«ã¦ã³ãããããã¤ããã¦ããã
getAddress()ã§æ¢åã¢ã«ã¦ã³ãã®æç¡ã確èªããã - ã¬ã¹ä¸è¶³:
verificationGasLimitã Factory ã®ãããã¤ã³ã¹ããå«ãã§ããã確èªãããååã¯é常ããå¤ãã¬ã¹ãå¿ è¦ã
5. ããããã©ã³ã¶ã¯ã·ã§ã³ã®é¨å失æ
çç¶: executeBatch ã®ä¸é¨æä½ã revert ããããå
¨ä½ã失æãã
åå ã¨å¯¾ç:
- ã¢ãããã¯å®è¡: ããã©ã«ãã®
executeBatchã¯ã¢ãããã¯ï¼1ã¤å¤±æã§å ¨ä½å¤±æï¼ãæå³çãªåä½ã - try-catch ãã¿ã¼ã³: é¨åçãªå¤±æã許容ããå ´åã¯ãåæä½ã try-catch ã§ã©ãããã delegate call ã使ç¨ããã
- ã·ãã¥ã¬ã¼ã·ã§ã³:
eth_estimateUserOperationGasã§äºåã«å ¨æä½ã®ã·ãã¥ã¬ã¼ã·ã§ã³ãè¡ãã失æããæä½ãé¤å¤ããã
注æäºé
- EntryPoint ã®ãã¼ã¸ã§ã³ç®¡ç: ERC-4337 㯠v0.6 㨠v0.7 ã§äºææ§ããªããã¹ãã¼ãã¢ã«ã¦ã³ãã»Bundlerã»Paymaster å ¨ã¦ãåããã¼ã¸ã§ã³ã«æããã
- ç§å¯éµã®ç®¡ç: Smart Account ã®ãªã¼ãã¼ãã¼ã¯ EOA ã®ç§å¯éµãç´å¤±ããã¨ã¢ã«ã¦ã³ãã®å¶å¾¡ãåªå¤±ããï¼Recovery Module ããªãå ´åï¼ã
- ã¬ã¹ãªã¼ãã¼ããã: AA ãã©ã³ã¶ã¯ã·ã§ã³ã¯é常㮠EOA ãã©ã³ã¶ã¯ã·ã§ã³ããã¬ã¹ã 20-40% å¤ããPaymaster ä½¿ç¨æã¯ dApp ããã®ã³ã¹ããè² æ ããã
- Bundler ã®ä¸å¤®é権ãªã¹ã¯: åä¸ã® Bundler ã«ä¾åããã¨ãã¦ã³ã¿ã¤ã ãªã¹ã¯ããããè¤æ° Bundler ã®ãã§ã¤ã«ãªã¼ãã¼ãè¨å®ããã
- ã³ã³ãã©ã¯ãã® Solidity å®è£
ï¼Smart Account / Paymaster ã®å
é¨ãã¸ãã¯ï¼ã¯
solidity-coreã®ã»ãã¥ãªãã£ãã¿ã¼ã³ãåç §ããã - ããã³ãã¨ã³ãçµ±åã¯
web3-frontendã¹ãã«ã® viem / wagmi ãã¿ã¼ã³ãåç §ããã