スマートコントラクト分析が重要な理由
ウォレットをスマートコントラクトに接続する行為には常にリスクがあります。新しいトークンや若いDeFiプロトコルには、隠れた権限、honeypot、upgrade機能、過剰なowner権限が含まれることがあります。このガイドでは、ウォレット接続前にスマートコントラクトを確認する方法を整理します。
目的は、初心者でも使える確認手順を示すことです。どのblock explorerを見るか、コードのどこを確認するか、よくある警告サインは何か、署名やapprove前にどうリスクを下げるかを扱います。
スマートコントラクトのソースコード確認
最初に見るべきなのは、Etherscan、BscScan、Polygonscanなどのblock explorer上でのコード検証です。検証済みコントラクトでは、公開されたソースコードがデプロイ済みbytecodeと一致していることを確認できます。ABI、ファイル構成、Read Contract、Write Contractも確認できます。
コントラクトアドレスを開き、ContractタブでVerified状態を確認します。開発者でなくても、コードが公開されていること自体が重要です。公開コードはscannerに通せますが、未検証コードはブラックボックスです。
重要な関数と権限:approve、transferFrom、permit
approve(spender, amount)は、コントラクトにトークンを使う権限を与える関数です。その後、コントラクトはtransferFromを使って承認済み数量を移動できます。無制限approvalやNFTのSetApprovalForAllは特に危険です。
実務上の基本は、必要な数量だけ許可し、無制限承認を避け、誰に権限を与えるかを確認し、不要な承認は使用後にrevokeすることです。
Proxyとアップグレード:なぜリスクになるのか
Proxyパターンでは、同じアドレスを維持しながら実装部分を差し替えられます。大規模プロトコルには便利ですが、admin、multisig、governanceへの追加の信頼が必要になります。
分析ツール:静的スキャナーから拡張機能まで
1つのツールだけでは不十分です。異なる種類のリスクを補完するため、複数の情報源を組み合わせます。
- SlitherはSolidityの典型的な問題を検出し、具体的な指摘を出します。
- MythXは静的解析、 symbolic execution、ヒューリスティックを組み合わせます。
- Remix IDEはブラウザ上で基本チェックを行うのに便利です。
- Token Snifferは既知の詐欺パターンやhoneypotリスクを確認します。
- GoPlus Securityはトークンリスク、phishing、疑わしい操作を評価します。
- De.Fi Scannerは非エンジニアにも読みやすいレポートを提供します。
- 補助ツール:Honeypot.is、revokeサービス、Wallet Guard、Pocket Universeなど。
トークンコードでよくある詐欺パターン
詐欺的なトークンでは、同じような仕組みが繰り返し使われます。
- Honeypot:購入はできるが、ほとんどのアドレスでは売却できない。
- 動的ロック:tradingのオンオフ、blacklist、取引時間の制御。
- 変更可能な手数料:ownerが税率を極端に上げ、売却を事実上止める。
- 無制限mint:上限なしで新しいトークンを発行できる。
- 流動性の抜き取り:LP lockがない、または突然Remove Liquidityが行われる。
Scannerは多くのサインを検出しますが、最終判断はユーザー側にあります。複数の警告が重なる場合は接続しないのが安全です。
DeFiコントラクト:流動性、レンディング、ファーミング
DeFiではトークンだけでなく、pool、lendingプロトコル、farmともやり取りします。基本チェックは次の通りです。
- DEX pool:信頼性のあるDEXを優先し、カスタムforkの隠れたfeeやwithdraw機能に注意します。
- Lending:audit、cap、清算メカニズム、oracleを確認します。
- Farming/staking:報酬発行量、入金上限、owner roleを確認します。
- 全体:bug bounty、multisig、TVL、プロトコル年齢、過去のincidentを比較します。
NFTとmint(ERC-721/1155):基本チェック
mintや取引の前に、最低限これらを確認します。
- 公式アドレス:プロジェクト公式情報やmarketplaceとコントラクトを照合します。
- Supply cap:
maxSupplyとmintルールを確認します。 - 危険な権限:第三者サイトが明確な理由なく
SetApprovalForAllを求める場合は注意します。 - Metadata:中央集権CDNよりIPFSやArweaveの方が望ましい場合があります。
safeTransferFromに置き換え、保有NFTを攻撃者に送るケースがあります。OpenZeppelinと認識しやすいテンプレート
OpenZeppelinライブラリは、広く使われている標準実装なので良いサインです。import "@openzeppelin/..."、標準テンプレート、類似コントラクトを確認します。ただし注意は必要です。問題はテンプレート本体ではなく、追加された数行に潜むことがあります。
トークン機能:税金、blacklist、anti-whale
一部の機能はそれだけで詐欺ではありませんが、リスクと使い勝手を変えます。
- Taxes/fee:売買コストを増やします。上限があるかが重要です。
- Blacklist:bot対策として使われる一方、holderに対して使われる可能性もあります。
- Anti-whale:残高や取引量を制限しますが、通常の送金を妨げることがあります。
- Reflections/rewards:自動分配は魅力的に見えますが、コードを複雑にします。
Block explorerで見るべき点:履歴、呼び出し、イベント
Block explorerはdue diligenceの中心ツールです。
- タイムライン:deploy日、相互作用の頻度、活動パターン。
- Holder:上位アドレスへの集中、owner比率、取引所アドレス。
- 流動性:LP lock、期間、LP tokenの保有者。
- Read/Write Contract:frontendだけに頼らず機能を理解します。
- コメント/ラベル:証拠ではありませんが、警告サインになります。
- イベント:
0x0からのTransfer、Approval、OwnershipTransferred、Paused。
接続前チェックリスト
- Explorerでアドレス確認:コード、deploy、holder、怪しい取引、ラベル。
- Scanner利用:Token Sniffer、De.Fi Scanner、GoPlus。
- Frontend確認:URL、公式情報、怪しいギフトリンクの回避。
- Burner wallet利用:少額だけ入れた別アドレス。
- Approval最小化:無制限承認を避けます。
- 取引シミュレーション:署名前に何が変わるか確認します。
- Revoke方法を把握:承認一覧を定期的に見直します。
確認しても保証されないこと
- Frontendの誠実性:UIがアドレスやデータを差し替える可能性があります。
- チームの誠実性:きれいなコードでもoff-chain rug pullは防げません。
- トークン経済:技術的に正しくても価値がなくなる場合があります。
- 将来の変更:upgradeable contractは時間とともにリスクが変わります。
- ソーシャルエンジニアリング:コード確認はphishingやseed phrase漏えいを防ぎません。
まとめ
スマートコントラクトと安全にやり取りするには、規律、ツール、判断力が必要です。最低限、コード検証、scanner確認、approvalの理解、署名前の表示確認を行います。
どのツールも絶対の保証はしません。複数の情報源を照合し、burner walletから始め、広すぎる権限は定期的にrevokeしましょう。
approveを限定し、proxy upgradeを監視し、revokeツールを使える状態にしておくことです。