進化し続けるブロックチェーン技術とDeFiにおいてセキュリティは最優先事項なだけではなく、信用と信頼を築く基盤となります。本ブログではアルジェムがユーザーの金融取引に対しどのようなセキュリティ対策をとっているのか、その基本哲学から最先端技術まで詳しく解説していこうと思います。
概要
アルジェムにおいてセキュリティは最優先です。環境が日々変化するなかセキュリティ対策も継続的な見直しが必要となります。
セキュリティロードマップ
完璧なセキュリティを達成するための重要なパラメーターがアルジェムセキュリティロードマップに描かれています。
コントラクト一覧:透明性重視
透明性を保つためにデプロイしているコントラクト一覧を公開しています。
アルジェムは常に業界トップクラスのセキュリティを提供できるように努力をしています。
コントラクトインフォメーション
セキュリティデプロイメントとコントラクト管理
アルジェムのコントラクトはGitHub CIとOpenZeppelinライブラリーモジュールでデプロイし信頼性を強化しています。
大半のコントラクトはアップグレード可能であり利用の際は必ずProxyアドレスを利用そ推奨しています。
ロールベーススマートコントラクト管理:
スマートコントラクトの管理にロールベースシステムを採用しているためマルチシグウォレットを必要としており、通常のウォレットからの危険を伴うコントラクトは動作しません。特徴的な2つのロールは以下
・Default_Admin_Role
アルジェムのチームメンバー2人とアスターコアメンバー2人によって3/4 Gnosis Safe Multisig が管理されています。
Multisigアドレス:0xf1893e221227ff7B28D0dBe4dc367F54AAf9BEBD (Astar Network mainnet).
全てのコントラクトに対する変更やロールのgrant/revokeはDEFAULT_ADMIN_ROLE ( 要multi-signature transaction)でのみ可能です。
・Manager
アルジェム開発チームの常用アドレス
Manager address: 0xf9B9068276163f47cd5599750496c48BeEba7B44 (Astar Network mainnet).
最低ステーキング数量などセキュリティに影響のない作業を行う際に使用するロールです。
各ロールに関する全容についてはMiro boardをご覧ください。
デプロイ済スマートコントラクトアドレス
GitHub上のコントラクト一覧:
https://github.com/AlgemDeFi/algem-contracts
Liquid Staking
Contract name: Liquid Staking
Contract address: 0x70d264472327B67898c919809A9dc4759B6c0f27
アップグレード可能.
Liquid Staking Manager
Contract name: LiquidStakingManager
Contract address: 0x6edB3FdA40B8110fc0B820b48B7567E337915ffa
アップグレード可能.
Ndistributor
Contract name: NDistributor
Contract address: 0x460FB32070b77eB4Ff8d8f3EF717972F24433C83
アップグレード可能.
NFT Distributor
Contract name: NFTDistributor
Contract address: 0x5167D19e76934D881FBdd77FB97ea36fb4FaE0cf
アップグレード可能.
Adapters Distributor
Contract name: AdaptersDistributor
Contract address: 0x294Bb6b8e692543f373383A84A1f296D3C297aEf
アップグレード可能.
Algem Liquid Staking Discount
Contract name: AlgemLiquidStakingDiscount
Contract address: 0xF0F9238013af5982f97A347D190181F200Ad68CD
アップグレード可能.
Sirius Adapter
Contract name: SiriusAdapter
Contract address: 0x29774f72d921d1F5C591ab68dE532a528A4288B4
アップグレード可能.
Kagla Adapter
Contract name: KaglaAdapter
Contract address: 0x8d4F87A8f688Af04e9E3023C8846c3f6c64f410e
アップグレード可能.
Arthswap Adapter
Contract name: ArthswapAdapter
Contract address: 0x09D5476c1c31eeE81E31dFD6923C314D33E57a4F
アップグレード可能.
Sio2 Adapter
Contract name: Sio2Adapter
Contract address: 0x7dE84319633850Bdabc557A1C61DA9E926cB4fF0
アップグレード可能.
nASTR
Contract name: nASTR
Contract address: 0xE511ED88575C57767BAfb72BfD10775413E3F2b0
アップグレード可能.
Algemantis Nautilus Pass (NFT)
Contract name: AlgemantisNautilusPass
Contract address: 0x170a3768117A9Ae6939EA46c1b4265e94De44534
変更不可能.
Algem Liquid Staking Discount (NFT)
Contract name: AlgemLiquidStakingDiscount
Contract address: 0xF0F9238013af5982f97A347D190181F200Ad68CD
アップグレード可能.
Algem Dojo (NFT)
Contract name: AlgemDojo
Contract address: 0xeBdA851087FF6A75961781987B9f1F7832D9DeB0
変更不可能.
Pause 機能
pause機能は異変発生時にコントラクトを一時停止します。
現在は以下のコントラクトに有効です:
・リキッドステーキング
・NASTR
・SiO2 Adapter
Pause機能はOpenZeppelinライブラリーのPausable module standardに準拠しています。
Contract.pause()
Pause a contract by setting the paused boolean flag to True.
Contract.unpause()
Unpause a contract that was previously paused, re-enabling exchanges.
機能停止:
・リキッドステーキング
All calls to contract functions are blocked.
・NASTR
transfer()
transferFrom()
mint()
burn()
・Sio2 Adapter
supply()
withdraw()
borrow()
addSTokens()
claimRewards()
Timelock
マルチシグウォレットで管理しているためコントラクトにtime-lock機能はありません。
すなわち管理者権限の速やかな実行を可能にし安全且つ制御可能な実行環境を維持できます。
オンチェーン危機監視システム
Fortaのようなプラットフォームが提供するオンチェーン監視システムへ積極的に投資を行っています。
内部活用
プロダクトデザインのワークフロー
強固なプロダクトデザイン支えられたセキュリティ。アルジェムのリサーチと計画の軸となっているのは:
- Hacker-Proof Framework: 総合的なプロダクトセキュリティへの知見と不具合を最小限に抑えるツールの融合
- Economic Resilience: 有益な行動へ報酬を与え$ALGMトークノミクスを強化することで、アルジェムステークホルダーの興味を維持しつつ様々な経済的リスクを軽減
- Isolation: dAppプロダクトとコンポーネントを隔離
これらの原理に従いプロダクトデザインワークフロー以下のようになります
問題の特定と初期デザイン:
問題の特定と初期デザイン
情報収集と解析:
競合解析、ユーザー統計、行動解析、コミュニティフィードバックなどの情報収集により有益な情報を入手
内部での精査と議論:
収集した情報の精査と初期デザインの見直し
デザインのアップデート:
収集した情報を基に初期デザインをアップデート
専門家による意見:
セキュリティや経済の専門家と協力し更なるデザインの精査と正書
コミュニティとの連携:
コミュニティとの公開討論やフィードバックを利用しプロダクト改善に活用
最終デザイン:
上記の内容を基に最終デザインを作成
開発へ移行:
最終デザインを基にデザインから開発へ
ドキュメント公開:
開発終了後にプロダクトデザインをステークホルダー向けに文書で公開。
開発ワークフロー
スマートコントラクトデザイン:
プロダクトデザインに沿ったデザイン、ロジック、インターフェースなどを詳細に計画
コントラクト実装:
デザインに沿って明瞭、正確、読みやすく且つ正しく動作しモジュラーとデータ管理で修正可能なコードをSolidityで書く。
徹底したUnitテスト:
MochaやChai、Foundryのようなフレームワークに従い様々な状況を見据えたUnitテストを行い、問題の早期発見に努める。
ローカルでの開発テスト:
GanacheやAnvilなどを用いて、様々なシナリオやコントラクトの正確性や効率に関してローカルで開発テストを行う。
セキュリティ監査:
マニュアルと自動解析ツール両面からセキュリティ監査を行う。reentrancy, integer overflows, access controlなどを発見しデプロイ後のセキュリティリスクを最小化。
デプロイ:
初期はテストネットでデプロイし基本動作等を徹底的に確認後メインネット(アスターネットワーク等)へデプロイ。
継続的監視とメンテナンス:
予期せぬ問題やエラーに備えコントラクトは継続的に監視。
文書:
コントラクト詳細を文書化。ユーザーへコントラクトの理解を促す。
事前監査の準備:完璧なコントラクトを目指す
下記のような項目に従い継続的に事前監査を行いコントラクトの信頼性を担保。
正確な文書:
Natspecや機能、コントラクトオブジェクト、パラメーターを明確にするfunction header commentsを含めたUML図によるデザインの明確化に焦点を当てた包括的文書。
Code Alignment と Style Guide:
Solidityスタイルガイドに従いコードを揃え標準的なコードベースを作成。
数式の明確化:
理解を深めるために利用した数式を文書化。
統計の利用:
監査前のコードに対しSlitherやMythx.ioのような統計ツールを利用し初歩的なエラーを解決
包括的テスト方針:
以下の様な複数のテスト方式を利用:
- Unit Testing: 独立したunitsの基本機能をテスト.
- Fuzz Testing: ランダムデータを利用し予期せぬエラーを発見
- Regression Testing: ベータバージョンをデプロイしストレステストを行う
- Integration Testing: システム全体が矛盾なく動くかテスト
Test内容をRepositoryへ:
GitHub Repositoryにテスト内容を公開し透明性や協力を仰ぐ。
ユーザーインターフェースの統合:
ユーザーインターフェースとコントラクトをリンクさせコントラクトが遅延なく動作するかを確認
コミュニティによるテスト:
ローンチ前のテストをコミュニティと行いパフォーマンスとエラーを確認。
コードの改善:開発前進への条件
開発を進めるにあたりコードに対しいくつかの確認事項があります。
正確な命名規則: 記述的かつシンプルなコードを命名規則に従って付けてあるか。難解な場合はグロッサリーに説明があるか。
スタイルの一貫性: コードは読みやすさ、理解しやすさに徹しスタイルに一貫性があるか。
モジュールの活用: モジュラーを活用しているか。機能は小規模且つ理解しやすいか。主要機能が複数のライブラリーやコントラクトにまたがる場合、encapsulationを行いスムーズな動作を保証しているか。
読みやすく整理されたコード: コードは系統的に整理され動作内容に応じてグループ化されているか。読みやすく理解しやすいか。
スマートコントラクトチェックリスト:備えあれば患いなし
開発を進める前に以下の項目を確認
- 全ての事前テストをコントラクトを格納しているrepositoryへ公開したか
- repository内のテスト内容やコントラクト実行プロセスについて文書にまとめたか
- 文書とrepositoryに数式や追加データを加えたか
- Solidityスタイルガイドに従っているか
- 無意味なコメント、使われていないコードブロック、TODOsなどが残っていないか
- 不要な変数や機能は取り除いたか
- 適切なaccess controlは設定されているか
- 統計ツールによるテストは行ったか
- 他の開発者による査読はされたか
- Solidityのバージョンは確認したか
開発:確実に動作するコントラクト作成に向けて
コントラクト作成:必要な機能を備えたスマートコントラクトをSolidityで作成
編集:今後のデプロイメントに必要となるbytecodeを生成
コントラクトデプロイメント:bytecodeを含むトランザクションを開始しブロックチェーン上に新しいコントラクトインスタンスを生成
テスト:様々なシナリオを利用状況を想定しデプロイ後のコントラクトの動作確認
コントラクトを使用:デプロイしたコントラクトの機能を呼び出し実際に動作させてみる
アップグレードとメンテナンス:変化する需要に対応できるように後々のアップデートやイテレーションを考えておく
デプロイ後のチェック:完璧を求めて
機能テスト:ブロックチェーン上で正常に作動するように稼働中のコントラクトに対し様々な機能や動作確認を行う
セキュリティ監査:実績のある監査会社による脆弱性、エラー、リスクなどのコード監査
ガス代の調整:経済合理性のあるガス代かコントラクトの動作を確認
アクセス制限の確認:特定の機能とデータに対し権限のあるユーザーのみにアクセス権があるか確認
文書の査読:デプロイした機能とコントラクトの整合性を確認
監視とイベント追跡:イベントログと監視ツールを用いてコントラクトの利用状況を追跡し不具合への即時対応
ユーザーとの対話:速やかにコントラクトデプロイメントをユーザーへ知らせ最新コントラクトの利用方法を伝える
事故や緊急事態発生時の対策
セキュリティ対策やコントラクト情報はdocumentation、Algem’s GitHub repositoryからご覧になれます。
まとめ:
ブロックチェーン業界において、アルジェムは細部にこだわったスマートコントラクトデザイン、徹底したコードテスト、監査、計画的なデプロイメントなど安全性、信頼性、利便性を徹底的に追及しています。
計画的ワークフローとその実践により脆弱性や危険性を排除。ユーザーフィードバックや監査なども活用し透明性、堅牢性、信頼性を保てるように心がけています。
ユーザー保護だけでなく最先端技術を体験して頂けるよう安全設計に努め、標準コードを遵守し、全てを網羅した文書を準備しています。
今後も継続的な改善、徹底した監視、ユーザーとの積極的な対話を続けていきます。これら全ての行動がアルジェムをブロックチェーン業界の中でも安心・安全・イノベーティブなプロジェクトとして確立させています。
アルジェムについて
アルジェムはアスターネットワーク上に構築されたdAppで、リキッドステーキングとリキッドレンディングという2つの主要機能を開発・提供しています。これら2つのソリューションにより、$ASTRホルダーは保有資産を最大限活用することが可能になります。
リキッドステーキングとリキッドレンディングを活用することで、ユーザーは資金運用効率を高めネットワーク内の流動性が高まることでアスターネットワークとポルカドットの持続的な成長をサポートしていきます。
コミュニティに参加しよう
隔週開発アップデート
隔週開発アップデート – 2024/12/18
隔週開発アップデート – 2024/12/06
隔週開発アップデート – 2024/11/20