よくある質問
このFAQでは、NERO Chainでの開発において開発者が直面する一般的な課題、落とし穴、質問に回答します。
アカウントアブストラクション
アカウントアブストラクションとは正確には何ですか?
アカウントアブストラクション(AA)は、ユーザーがガス代用のネイティブトークン(NERO)を保持する必要なく、スマートコントラクトウォレットがトランザクションを実行できるようにするパラダイムです。アカウントアブストラクション(AA)により、トランザクションのスポンサーシップ、バッチ処理トランザクション、複雑な認証方法などの機能が可能になり、アカウント管理ロジックをトランザクション検証から分離することができます。
なぜUserOperationsが拒否され続けるのですか?
UserOperationsが拒否される理由はいくつかあります:
- 無効な署名:ウォレット用の正しい署名者を使用していることを確認してください
- ガス不足:ガス制限を増やすか、SDKのガス見積もり関数を使用してみてください
- ペイマスターの拒否:ペイマスターAPIキーが有効で、十分な資金があることを確認してください。APIキーに十分な残りのリクエスト数があるかを確認してください。リクエスト数が不足している場合は、NEROチームにお問い合わせください。
- ノンス問題:アカウントに対して正しいノンスを使用していることを確認してください
- 検証の失敗:スマートコントラクトウォレットは、その要件を満たさない操作を拒否する場合があります
AAエラーコードのデバッグ方法は?
エラーコードは以下のパターンに従います:
- AA1コードはアカウントの作成に関連しています(例:デプロイメントのための資金不足)
- AA2コードは送信者に関連しています(例:無効な署名)
- AA3コードはペイマスターに関連しています(例:デポジット不足)
- AA4コードは一般的な検証の失敗に関連しています
- AA5コードは実行後の問題に関連しています
ペイマスター統合
スポンサード・トランザクションが失敗する理由は?
ペイマスターが失敗する一般的な理由には以下があります:
- APIキーのレート制限:キーの使用パターンを確認し、制限の引き上げを検討してください
- 戦略の拒否:戦略パラメータがアプリケーションのニーズと一致していることを確認してください
- 資金不足:Type 0戦略の場合、スポンサーシップアカウントに十分な資金があることを確認してください
- ユーザー支払いの失敗:Type 1/2戦略の場合、ユーザーが十分なトークン残高を持ち、ペイマスターコントラクトを承認していることを確認してください
- 残りのリクエスト数不足:APIに十分な残りのリクエスト数があるかを確認してください
支払い戦略タイプの違いは何ですか?
- Type 0(スポンサーシップ):ガス料金は開発者/アプリケーションによって完全にカバーされます
- Type 1(ERC-20前払い):ユーザーは実行前にERC-20トークンでガス料金を支払います
- Type 2(ERC-20後払い):ユーザーは実行後にERC-20トークンでガス料金を支払います
ガス支払いに対応しているトークンを確認する方法は?
ペイマスターAPIのコア機能を使用して、ペイマスターでのガス支払いに使用できるERC-20トークンを確認できます。これはType 1およびType 2の支払い戦略にとって特に重要です。
開発環境
テスト用に利用できるネットワークは?
NERO Chainは開発とテスト用のテストネット環境を提供しています:
- テストネットRPC:https://rpc-testnet.nerochain.io
- テストネットバンドラー:https://bundler-testnet.nerochain.io/
- テストネットペイマスター:https://paymaster-testnet.nerochain.io
メインネットにデプロイする前に、必ずテストネットで実装を徹底的にテストしてください。
テストネットトークンの入手方法は?
NERO Chainのフォーセットapp.testnet.nerochain.io/faucetからテストネットNEROトークンを入手できます。
セキュリティのベストプラクティス
どのようなセキュリティ対策を実装すべきですか?
- 秘密鍵をクライアント側のコードに保存しない:安全な鍵管理を使用してください
- APIキーには環境変数を使用する:アプリケーションにAPIキーをハードコーディングしないでください
- ガス制限を実装する:過剰なコストを防ぐために適切なガス制限を設定してください
- ユーザー入力を検証する:トランザクションで使用される入力は常に検証してください
- 適切なエラー処理を実装する:操作が失敗した場合にユーザーに明確なフィードバックを提供してください
ペイマスターAPIキーを保護する方法は?
ペイマスターAPIキーは機密認証情報として扱う必要があります:
- コードではなく環境変数に保存する
- 乱用を検出するためにレート制限とモニタリングを実装する
- セキュリティを強化するためにAPIキーを定期的にローテーションする
スマートコントラクトのデプロイ
コントラクトのデプロイが失敗する理由は?
デプロイメントが失敗する一般的な理由:
- ネットワーク設定の誤り:HardhatやRemixの設定が正しいNERO Chain RPCを指していることを確認してください
- ガス不足:デプロイメントのガス制限を増やしてみてください
- コントラクトサイズの制限:非常に大きなコントラクトはサイズ制限を超える可能性があります
- コンパイルエラー:SolidityコンパイラバージョンがNERO Chainと互換性があることを確認してください
どのSolidityバージョンを使用すべきですか?
NERO ChainはEthereumのLondonフォークと互換性のあるすべてのSolidityバージョンをサポートしています。最適な互換性とセキュリティのために、Solidity ^0.8.12の使用をお勧めします。
重要:Neroscanでのコントラクト検証については、Solidityバージョン0.8.29以下を使用することを確認してください。EVMバージョンの依存関係を含む様々な要因により、Neroscanは新しいSolidityバージョンをタイムリーにサポートできない場合があります。
OpenZeppelinプロキシコントラクトの検証が失敗する理由は?
OpenZeppelinプロキシコントラクトはNeroscanで特定の検証の課題に直面する可能性があります:
一般的な問題:実装コントラクトは正常に検証されるにもかかわらず、TransparentUpgradeableProxyやProxyAdminコントラクトを検証しようとする際に「Invalid compilerVersion」エラーが発生します。
根本的な原因:ブロックエクスプローラーの検証インフラストラクチャには、OpenZeppelinプロキシコントラクトのコンパイル設定とバージョン互換性に制限があります。
解決策:
- Solidity ≤ 0.8.29を使用:テストネット/メインネットのブロックエクスプローラーは現在、Solidityバージョン0.8.29までをサポートしています
- OpenZeppelin v5サポート:エクスプローラーは、Solidity 0.8.29でプリコンパイルされたバイトコードを使用するOpenZeppelin v5プロキシコントラクトをサポートしています
- 検証順序:常に実装コントラクトを最初に検証し、その後プロキシコントラクトの検証を試行してください
重要なポイント:
- 実装コントラクトは通常、問題なく検証されます
- プロキシコントラクト(TransparentUpgradeableProxy、ProxyAdmin)にはサポートされているSolidityバージョンが必要です
- EVMバージョンの更新やその他の要因により、Neroscanは最新のSolidityバージョンをすぐにサポートできない場合があります
プロキシコントラクトの検証で問題が続く場合は、開発環境でコンパイルとデプロイメントの両方にSolidity 0.8.29以前のバージョンを使用していることを確認してください。
ウォレット統合
なぜAAウォレットアドレスを生成できないのですか?
AAウォレット生成に関する潜在的な問題:
- ファクトリーアドレスの誤り:正しいアカウントファクトリーアドレスを使用していることを確認してください
- ソルト衝突:アドレス派生に異なるソルト値を試してみてください
- チェーンIDの不一致:NERO Chainの正しいチェーンIDを使用していることを確認してください
- 初期化データの問題:初期化コールデータが正しくフォーマットされていることを確認してください
ウォレットの復旧をどう処理すればよいですか?
AAウォレットには、以下のような復旧メカニズムを実装してください:
- 信頼できる連絡先を通じたソーシャルリカバリー
- 特定のアクションに対するマルチシグ要件
- セキュリティ上重要な操作のためのタイムロック
- 遅延後に有効化できるバックアップ署名者
トラブルシューティング
行き詰まった場合はどこで助けを得られますか?
持続的な問題が発生した場合は、以下を通じてNERO Chainサポートに連絡してください:
UserOperationが処理されたかどうかを確認する方法は?
以下を使用してUserOperationのステータスを確認できます:
- UserOpSDKの
client.getUserOperationReceipt(hash)メソッド - neroscan.ioのNERO Chain Explorer
eth_getUserOperationReceiptメソッドを使用したバンドラーRPCエンドポイント