あなたの知らないWeb3/NFT/DAOの真実
シンギュラリティソサイエティでは、代表の中島が NounsDAO 1 のNouner 2 になってから、Web3のブームが来ています。某国産DAOの話題から、エンジニアがそのDAOのSmart Contract 3 のソースを Etherscan 4 上で確認したことを発端に、スマートコントラクトの仕組みへの話題に発展しました。
(専門用語が多いので文末に用語解説を掲載しました)
有本 :XXXX DAOは結構ひどいかも。 XXXXDAO.solが、オリジナルのソースだと思いますが、Web上に
1人1つまでしかmint5 できない制限
と書かれている機能、これは特に制限が実装されてなさそうです。ソースの
// public functions
以下が、外から呼べるapiですが、onSaleの場合、だれでも、いくつでもmintできるような実装になっています。
B氏 :そうなんですね…
XXXX DAOでお試しの投票があったので体験してきました。
snapshot 6 のサイト上で投票します。
- snapshot へアクセス
- Wallet 接続
- 投票する
- Wallet で 3 の投票で良いかの承認をする
- snapshot で投票結果が見れる
- おそらく、投票締切時刻まで投票選択肢の変更は可能
(選択肢を変更できることが確認済み)
B氏 :投票権は一人一票で設定されている。投票のたびに ETH 7 とかはかからない。
有本 :投票自体は、ベースとなる Compound 8 のスマートコントラクトをそのまま使っているのですかね。ここはまだソースをみてないですが、オンチェーン上で投票するならETHがかかるはずなので(ブロックチューンに書き込むから)どういう仕組なのでしょうね。別件のNFT回りの調査が終わったらCompoundのソースも見てみたいと思います。
B氏 :全ては設計・実装次第なんですね。投票に GAS代9 が必要なのかどうかも含めて。
有本 :はい、基本は Solidity 10 で書かれたプログラムをオンチェーンで EVM 11 を使って動かしているので如何様にも改良可能です。GAS代については、計算量やブロックへの書き込みで決まります。なので、基本的に投票はGAS代がかかるはずなのですよね。なにかCompoundが裏技をつかっているか、もしくはそこのコミュニティーでの投票がETHを使うのではなくWebで行われているかのどちらかです。
B氏 :このWeb サイトが Snapshot というサイトでした。よく見ると、オープンな場での投票でした(www)
有本 :投票時に署名をして、会員か確認するWebサービスですね。
B氏 :XXXX DAOのコミュニティでは、多種多様な人がいらっしゃるので DAO を運営するために、運営者(サポートする人)が必須だと感じました。
うっかりDM でやりとりしてWallet 盗まれる人
手順を読まずにヘルプに問い合わせをする人
などなど。
有本 :これは、オンラインサロンでも同じで、基本はコミュニティー運営ですよね。中島さんの参加しているNounsDAOの話を聞いてもそう思います。
B氏 :大規模コミュニティ & DAO というのがまだ想像でていないんですよね…。どこかの段階で階級社会が出来上がって、それは DAO と呼べるのか?という疑問が拭えません。
- 行動する人
- 発言する人
- 文句だけ言う人
- 見ているだけの人
- 所属だけしている人
有本 :株式会社や政府などの仕組みと比較してDAOといっているだけ、結局は人間が意思決定するので、DAOでも社会の縮図 になると思います。
分散で、自立している人は、組織に属さないか、組織のTOPになるわけで…。
だた、投票や会計が機械化されてオープン になるので、そこがポイントかと。DAOの投票ですらアルゴリズムなので、代表権のある人に権力を集中させるといった仕組みも可能です。(これはDAOというよりはSolidity上でのプログラム、といったほうがよいのかな)
B氏 :そうなんですね。
Solidity は一度決めたプログラムを変更することは可能なのでしょうか?DAO 内の投票でプログラムの変更が可決したら… みたいなイメージです。現実世界でも新たに法律を制定したり、廃止したりするのでそれもできるのかなぁと思った次第です。
有本 :プログラムの変更はできません。しかし、動作を変えることはできます。Solidityはコントラクトという単位でデプロイします。コントラクトは他のコントラクトを呼び出すことができるのですが(コントラクト=クラスインスタンスと考えればよいかな)、呼び出し先のコントラクトを変更することが可能です。なので、そのように作れば、いくらでもプログラムの動作を変更することは可能です。
よって、誰かが作ったコントラクトを使う場合には、ソースをすべて見ておく必要があります。投票結果を書き換えることも可能ですね。しかし、書き換えられたとしても、それをログで追うことは可能です。そのコントラクト自体が古くなった場合には、selfdestruct12 を呼び出して削除して違うバージョンをデプロイして使うことになります。
こういった仕組みがあり、また、コントラクトやそのPublicな関数の呼び出しは誰でもできるので、きちんと実装しておかないと、勝手にmintしたりtransfer13 される可能性もあります。Solidityを実装する上でセキュリティが最も重要です。次にバグを発生させないこと。バグがあっても修正できません。
B氏 :ありがとうございます!バグがあったら、「selfdestructして削除して違うバージョンをデプロイして使うとなります。」をすれば新しいバージョンを利用可能なのでしょうか。それとも、根幹となる部分はどんな方法でも修正不可なのでしょうか。セキュリティの考え方ガラッと変わる印象です。
- 間違いなく実装することが重要
- 反面、リリース後の対応は従来に比べて減る?
有本 :一般的なプログラムで例えると、
- コントラクト=クラス
- オンチェーン上のコントラクタ=クラスインスタンス
- コンストラクタのアドレス=クラスインスタンスのポインター
- コンストラクタのブロックチェーン上の変数=インスタンス変数
例えば、NFTをmintするのは、クラスインスタンスのmintメソッドを呼び出す。これを前提としてクラスインスタンスは、いかなる操作でもそれ自身の変更はできない。デプロイ(インスタンス化)したら、変更は不可で、削除だけはできる。
インスタンス変数は、インスタンスのメソッド経由で変更可能。例えばmintしたらtokenIdをインクリメントしてtokenIdを管理するのは、この仕組を使っている。
クラスインスタンスから、別のクラスインスタンスを呼び出すことは可能。これは、相手のポインタを定数、もしくはインスタンス変数として持っていて、そのポインタを呼び出す。この仕組みを使って、呼び出し先の相手のポインターを書き換えるメソッドを用意すれば、呼び出し先のクラスインスタンスを変更することが可能。しかし、クラスインスタンス自体の仕組みは変えられないので、ここに問題がある場合はクラスインスタンスを削除する必要がある。ただし、作り変えた場合は、クラスインスタンスのポインタ(アドレス)は変わるので、そのクラスインスタンスを呼び出すクライアント全部に新しいアドレスを広告する14 必要がある。
有本 : 根幹となる部分はどんな方法でも修正不可です。
有本 :selfdestructして、コントラクトを新しくした場合は、新しいコントラクトのアドレスを利用者全員に伝える必要があります。なので、正式にリリースする前のテストや検証は超重要です。試しにデプロイして後で変えていく、というのはしづらいです。
逆に言うと、世にあるNFTで、自前でSolidityを書いてもるものは穴がある可能性があるので、暇なら、それを見ていくと、いたずらができるかもしれません。クラスインスタンスのpublicなメソッドは誰でも呼び出せるので。
B氏 :なるほど。ありがとうございました!
現実世界に似た感じになりますね。(憲法、法律みたいです)憲法・法律が変わる時に徹底した周知が必要なところも。
有本 :確かにそうですね!
OpenZeppelin15 のreferenceなどは、Web3の憲法みたいなもなので、ここに穴があると大混乱でしょうね。
クリプトゾンビ16 を一通り終わらせれば、これくらいの理解になるので、プログラムを仕事にしている人は必ず、すぐにやりましょう!
B氏 : クリプトゾンビやります!
有本 :これくらいの理解がない人がNFT、Web3、DAOといっていたら、詐欺師だと思って良いですね。
B氏 :詐欺師か、知ったかか、後で直せば良いんでしょと思ってリリースして後悔するか…
有本 :この前も、中島さんかな、twitterでシェアされていたもので、どこかのSolidityでバグが有って数億円が引き出せなくなった、、という記事がありました。
また、NFTはコンテンツが書き換えられない、と言っていますが、ソースやデータを良く見ると、コンテンツのurlが普通のWebだったり、storageのurlが実は書き換えられるようになっている可能性があるので注意です。NFTはコンテンツを書き換えできないように作れるけど、それが必須ではないです。
<用語解説>
-
NounsDAO: DAO(分散型自律組織)のひとつです。DAOは2014年頃登場した概念で、従来の株式会社と違い、意思決定には参加者同士の投票がおこなわれます。DAOの意思決定にはトークンがいりますが、透明性が高く誰でも参加することができます。 ↩︎
-
Nouner: Noun (NFT: ガバナンス・トークン) を保持し、意思決定に関われる参加者のこと。 ↩︎
-
Smart Contract: スマートコントラクトとは、あらかじめプログラムで書かれた契約/取引をブロックチェーン上で自動で実行する仕組みです。この概念は、1990年にコンピューター科学者、法学者、暗号研究者であるNick Szabo氏によって考案されました。 ↩︎
-
Etherscan: 暗号通貨であるEthereumのトランザクション(取引)を確認することができるWebサイトです。 ↩︎
-
mint: NFTを発行すること。 ↩︎
-
snapshot: Web3技術を活用したWeb 上の投票サービス。 ↩︎
-
ETH : Ethereumの単位。 ↩︎
-
Compound: Ethereum上につくられたDAO。 ↩︎
-
GAS: Ethereumの取引手数料。 ↩︎
-
Solidity: スマートコントラクトを記述するための手続き型プログラミング言語。 ↩︎
-
EVM: スマートコントラクトの展開と実行をこなう、Ethereumの仮想マシンのこと。 ↩︎
-
selfdestruct: コントラクトを削除する関数。 ↩︎
-
transfer: 仮想通貨の送金やNFTを送信すること。 ↩︎
-
広告する: 配信すること。(ブロードキャストのようなイメージ) ↩︎
-
OpenZeppelin: Ethereum上で安全なスマートコントラクを実装するためのライブラリです。 ↩︎
-
クリプトゾンビ: CryptoZombiesは、Solidityでスマートコントラクトの構築を学習できるWebサイトです。ゾンビを作りながらゲーム感覚で学べます。 ↩︎
関連ページ
- HtmlRAG: HTML is Better Than Plain Text for Modeling Retrieved Knowledge in RAG Systemsの紹介
- Magentic-One: A Generalist Multi-Agent System for Solving Complex Tasksの紹介
- 書評:LangChainとLangGraphによるRAG・AIエージェント[実践]入門 (エンジニア選書)
- SS推薦の図書
- Singularity Societyに入るには?
- 話題のネコ型ロボット「ミーア」!パワーアップします!
- 「世界モデルを持たないLLM」にとって難しい質問のリスト
- Raycastの機能拡張をカスタマイズ(テンプレート解説)
- RaycastJapan Meetup 第0回 イベントレポート
- Raycastのイベント発表資料
- Macの生産性を10倍上げるRaycastのイベント開催!!
- 「蔦屋家電+」ミーアの展示期間を延長しました!
- 安野たかひろ × 中島聡 緊急対談 書き起こし
- 蔦屋家電+でミーアたちに合う
- 安野たかひろ × 中島聡 緊急対談
- 蔦屋家電+とTi B SHOPでおしゃべり型ロボット「ミーア」に会いに行こう🐾
- W&Bミートアップ#13in東京 Stability AIとTuringからモデルサービングの最新手法を学ぶMeetup
- Turing CTOが語る自動運転2.0 生成AIで実現する次世代自律運転
- サンノゼで開かれたVisionProハッカソンに参加しました!
- おしゃべり猫型ロボット「ミーア」を開発
- コストコを超えるイノベーション!高品質・サプライズ価格なECの立ち上げ
- 空間ジェスチャーアプリを作る
- Turing Semiconductor/AI Day潜入レポ
- アーバンデータチャレンジ2023にてW受賞しました
- visionOSアプリ、Teegardenの開発物語
- エンジニア未経験のPMがChatGPTを使って簡単なプログラミングだけでプロダクトを作った話
- 新しい挑戦を躊躇する心理:優先順位の真実
- 時を超える知の投資:良書と大学教育の意義
- 動画生成AI SORAの革新とサム・アルトマンのビジョン
- イノベーションを起こしやすい組織について
- サッカー選手になりたいが、サッカーボールを蹴ったことがない人の話
- 2024年、国産クラウドに期待
- 仕事と焼肉、意外な共通点とは?
- 業界に激震!!Llama2オープン化がいかにすごいかを解説。
- OpenAIによる今回のアップデートがなぜ私たち開発者たちの間で「神アップデート」と呼ばれているか解説!!
- 統計的自然言語処理によりおぼろげながら浮かんできた思考の仕組みと教育の未来
- アプリ開発の常識を覆す? GPT-4の凄さに魅了された体験談
- あなたの NFT がゴミになるかもよ?
- GPT3の本質を理解し、ChatGPTを使いこなす為に知っておきたい事!!
- 今世紀のベストペーパー
- 「Web3がもたらす未来を考える」中島聡×塚田学対談
- これが未来の生活スタイル。遊牧民のように旅をしながら暮らす理想のノマドライフの提案。
- あなたのNFTは大丈夫?!某NFTが存在するのか確認してみました。
- 元米マイクロソフトのソフトウェアエンジニアが教える「エンジニアになりたいなら知っておいた方がいいコト!」
- 「フルオンチェーンでないNFTの怖さ」が現実に!〜フルオンチェーンNFTを可能にする技術
- 知らないと恐ろしい事に!AM/PM表記のなぞ?!
- DAOに対する「株式会社に代わる新しい仕組み」や「参加者全員が成功の果実を共有できる」という認識は間違いです。DAOの本質とは?
- スマートコントラクトが人々の行動を変え世界を変える!!
- フルブロックチェーンのスマートコントラクトは世の中に価値を提供し続ける!
- ビットコインこそ「究極のDAO」
- Pride Squiggle で画像をオンチェーンでダイナミックに生成するために使ったテクニック
- Netscapeからシェアを奪い取ったInternet Explorerが、終焉してしまった理由
- ソフトウェア・アーキテクチャの面からWeb2.0とWeb3の違いを分かり易く解説
- Web3の技術は素晴らしいがそれを生かすも殺すもエンジニア次第!
- AppleのWWDC22の基調講演で、最も私に刺さったのはCarPlay!!これが何を意味するのか?!
- Web3時代!NounsDAOの最大の発明はこれだ!
- 日本のシステムは最大のポンジースキームだった!?
- そして、すべてはソフトウェアになった
- パーソナル・ブランディング
- あなたの知らないWeb3/NFT/DAOの真実
- ハッカソン開会式のご挨拶「過去の戦争と比べて違うなと思うところ」
- NounsDAOをフォークした人にインタビューを受けました(翻訳)
- すでに解散したバンドのファンになった話
- 帝国化する企業と民主主義の末路
- 衰退していく日本のテレビ業界について語る
- Youtube のダークサイド
- 「理解できない」と言える強さ
- Oculus Go
- メタバース時代に掘り起こせそうな本屋さん
- 日本は少子高齢化・人口減少で新しい枠組みを作るのに良い実験場-<コモン>の領域を再建し人々の生活を安定させる
- Nintendo Switch とエクササイズ・バイク
- こんなダメな日本がかわるきっかけは「戦争か大災害しかない」噴火・地震・メタバースなど
- カルト・オンライン
- 中島聡×草場 壽一 「ソサエティを立ち上げた思い」
- 人工知能・機械学習の父
- 起業家と現実歪曲空間
- デマンド交通『おでかけ号』のタクシー予約/配車システムをDX化、高知・土佐清水で新登場
- 中島聡×SONY社内イベント
- メルカリ × 中島聡 ディスカッション イベントレポート
- 自動車業界の近未来
- 未来の社会のあり方
- SS推薦の動画
- 汎用人工知能・強いAIの開発にまつわる懸念点
- 未来のソフトウェアエンジニア教育を考える
- 財政出前講座 SIM2030
- Elon Musk の悩み
- Elon Musk のビジョン
- 自動運転社会のひとつの形
- Amazon Goに行ってみた
- 中島さん関連動画