Skip to content

イーサリアムでスマートコントラクト開発してみた ~vol.1~

はじめに こんにちは! 初めて記事を書かせていただきます、曽我と言います。よろしくお願いします! 「ブロックチェーンによってこれまで価値が認められてこなかったものに価値をつけることができる」というお話に触れて以降、どうしてそんなことが可能になるのかを理解したいという思いがずっとあります。 ブロックチェーンの仕組みについては、勉強すればするほど分からないことが増えるばかりです。 今回、理論的な話だけではなくブロックチェーンの開発を実際に手を動かしてやってみることで、より具体的な議論に参加できるようにして理解を深めることを目標とします。   本記事ではまず、現状の疑問の整理と、それらに対して再度調べ直して構築した仮説とその根拠を記しました。 疑問点の整理 イーサリアム イーサリアムについては、ブロックチェーンの上でプログラムを動かせるものというぼんやりとした理解だったので、その定義から詳しく調べ直してみました。 https://ethereum.org/ja/developers/docs/intro-to-ethereum/#what-is-ethereum イーサリアムとは、ブロックチェーンにコンピュータが組み込まれたもので、 分散型、自由参加型かつ、検閲耐性を備えたアプリや組織を構築するための基盤となっています。 ① 分散していて ② 自由に参加できて ③ 検閲耐性のある そんなアプリを作れるものらしいです。   どういうことでしょうか。 一つ一つ見ていきましょう!   分散 分散とは、特定の組織が管理するサーバーにアプリが存在するのではなく、イーサリアム上のいろんなコンピュータにデプロイされているということだと思われます。 これのメリットとして思い浮かぶのは、特定のサーバーがダウンしたらサービスが止まる、といったことがなくなるということです。 しかしこの類の話は通常のアプリケーションでも出てくるものです。 他にもブロックチェーン特有のメリットが何かあるのでしょうか? 分散しているからその正しさを保証できるという意味であれば、それはあくまでブロックチェーンの特徴であり、イーサリアムでアプリを作るメリットではないと思います。   自由に参加できる 「自由に参加できる」とはどういうことなのでしょうか? 普通のWebアプリケーションでも、大体自由に参加できると思いますが、 ユーザー登録とかが不要になるという意味ですかね? 調べてみると、少しヒントとなるような記述がありました。 https://doneru.jp/life/what-is-the-application-dapps/ dapps では個人情報を載せないプライベートアドレスで容易にアクセスできます。 さらにユーザーが開発に参加し、利便性の高いサービスを構築してユーザー全員で作っていくことも可能です。 このエコシステムでは基盤となるチェーンは誰かが所有している訳ではないので、実際にはチェーン上のアプリケーションはユーザーの手に委ねられます。 そういった意味ではユーザーがホストなので、より多くのエージェントがアプリを利用しても永続的に公平さは保たれます。 「個人情報を載せる必要がない」という意味で「参加のハードルが低い」ということでしょうか。 しかし、アプリケーションの性質として個人情報の利用が必要なら提供せざるを得ないのではないのでしょうか? メールアドレスの提供なしには本人確認が出来ないと思うのですが。 もしやブロックチェーンなら「本人確認」が必要なくなるということでしょうか??   検閲耐性 「検閲耐性」とは何か? 「検閲耐性 ブロックチェーン」で調べても一発でバシッと上位に出てくれませんでした。 しかしこのような記述を見つけました。 https://academy.binance.com/ja/articles/what-s-the-relationship-between-blockchain-and-web3 検閲耐性: ブロックチェーンは検閲に強いように設計されているため、どの当事者も一方的に取引記録を変更することはできません。記録がブロックチェーンに追加されると、それを削除することはほとんど不可能です。この機能は、政府や企業の検閲からあらゆる種類の言論を保護するのに役立ちます。 アプリに記録されているデータを第三者が見て、データを書き換えることができない。 そのことを「検閲耐性がある」と言っているということでしょうか? どちらにせよ、誰にも変更できないというのはすごいですね。 一度記録した後に変更させたくないようなデータとしては 何かのログ というのが真っ先に思い付きます。 よく言われるのは、誰になんの権利があるのか。過去に誰が権利を有していたのか。そういったものをトレースしたいケース。 「誰にも変更できない」ことが保証されていたら確かに安心です。   ブロックチェーンとは何か(仮説) 上記を踏まえて、いろんな動画や記事を読みながら友人や Blockchain Biz の方々とやりとりする中で、「ブロックチェーンというのはこういうことなんじゃないか??」という仮説が立ちましたので披露させていただきます!! 結論 ブロックチェーンでは、特別な信頼関係構築なしに複数の組織のデータを「連携できる状態」にできる。 すなわち、自由に参加できる!!! (どう連携させるかはプログラムする = スマートコントラクト) それを可能にしているのは、ブロックチェーンが可能にした以下の要素。 特定の中央管理者がいない 改竄できない これらによって、結果的に「分散」していて「検閲耐性」がある状態になっている。   根拠 この仮説に至った根拠を記します。 複数の組織間を簡単に連携させる 薬局の例 https://youtu.be/H2jP94Fpoi0?t=940 上の動画では、中田敦彦さんが「調剤薬局のデータ連携」についてお話されています。 関連記事: https://www.indetail.co.jp/projects/?uc=detail-01 各地にいくつもある調剤薬局は、何か特定の組織によって管理されているわけではないそうです。 一部の大企業の傘下にある薬局同士は、共通のシステムですでに系列店舗同士での在庫移動が行われており、在庫の最適化が実現されています。 しかし薬局市場においてそのような薬局は全体の15%に過ぎず、その他の多くが個人経営だそうです。 そういった薬局同士が在庫データの連携を相互にしたいとなると、一からの信頼関係構築が必要となり大きなコストがかかると思われます。 具体的には「データを改竄しないでね。そのほかにも、お互い相手に不利益になるような恣意的な操作をしたら法的に訴えますよ」的なことを文書として残しておくなどのやり取りが予想されます。   これが2つの薬局間であればまだ頑張って実現できると思いますが、目的である在庫管理の最適化のために他の多数の薬局とも連携する必要が出てきたりすると、もう非常に面倒になってしまうのがイメージできます。 関係者としては連携システムを構築するベンダーもいるわけで、ステークホルダーの増加にともなって信頼関係の構築に金銭的、時間的、労力的コストが増加していくと思われます。 データを保有するのはどの組織の何のアカウントにするか決める必要があるし、その組織がそのデータを改竄しないことを法的に保証するために、同様に取り決めを構築する必要があるでしょう。   データ連携のための信頼関係構築のコストがバカにならないです。 これではイノベーションを生み出すコラボレーションが加速しない。 なんとかできないものか? そこでブロックチェーンに白羽の矢が立ったのです。 「信頼関係?俺にデータ預けてくれればそんなの丸ごと気にしなくて済むぜ!!!」 「そのデータの連携ルールはスマートコントラクトというプラットフォームを使えば作れるぜ!!」   ポイントの例 T ポイントを国家が「国の貨幣だ」として定めるのになんのハードルがあるんだろうか? と考えながらネットサーフィンしていると、以下の記事を見つけました。 ブロックチェーンが崩す共通ポイントの垣根:日本経済新聞 https://www.nikkei.com/article/DGXMZO14061860U7A310C1X13000/ 「支払い方法はどうしますか」「TポイントをPonta(ポンタ)に換えますので、それでお願いします」。近い将来、コンビニエンスストアのローソンのレジでこんな会話が交わされるかもしれない。 すでに共通ポイント同士をネットを通じて交換できるようにはなっている。だが、面倒な手続きが必要なうえ、実際にポイントを交換できるまで数週間かかっていた。消費者の「今すぐ換えたい」というニーズに応えられなかった。 なぜそんなにかかるのだろうか?と思い調べてみましたが、そんなに時間がかかるような例は今のところ見つかっていません。 https://www.smartwaon.com/ext/001/exchange/tpoint/#notes 例えばこちらのように T ポイントと WAON ポイントは即時交換が可能だそうです。 日経新聞のこの記事の公開日が6年前と非常に古いのを考慮すると、「ポイント同士の交換」というデータ変換を手動で行なっているようなケースを想定して書かれた文章なのではないかと思っています。   一度組織間で信頼関係を(文書など法的な手続きを経て)築いてシステムを構築したあとは、この T ポイントと WAON ポイントの例のように即時に交換することは可能になると思われますが、 問題なのは、「他のポイントとも交換できるようにしたい!」と思った時、その都度信頼関係を築くコストは莫大だということです。   (寄り道) 共通ポイント同士の交換が容易になれば、ポイントがどこでも使えるようになる。それは「ポイントが貨幣により近づくことを意味する」(野村総合研究所の冨田勝己上級コンサルタント)。 これは、長らくビットコインの意義について理解ができずにいた僕にとって、ヒントとなる記述でした。 「ブロックチェーン上で動くアプリを開発する」という本記事の趣旨からはズレるので、「ブロックチェーン上で貨幣が構築できる」という話については、機会があれば別記事でぜひ書きたいなと思っています! まとめ ブロックチェーンという技術は、以下を可能にするものだと考えます。 特別な信頼関係の構築なしにいろんな組織のデータを共通のデータベースに保存できる イーサリアムというプラットフォームは、以下を可能にするものだと考えます。 ブロックチェーンに保存されているデータを任意のロジックで連携させることができる これらをまとめると、イーサリアムによって以下の革命が起きていると考えます。 複数の組織に存在するデータを超低コストで連携させ、そのコラボレーションによって爆速で新たな価値を生み出すことができる   次回予告 今回の整理の後に疑問として残ったのが、 ブロックチェーンはもしかしたら「ログデータ」のような時系列データにしか適用できないのではないか? というものです。 例えば MySQL で管理するような一般的なリレーショナルデータの場合は、一度登録した後も(例えばユーザープロフィールの編集などの形で)変更しうるのが普通かなと思います。 普段からそういうアプリケーションを開発しているからか、「変更できないデータ」というのが、「時系列データ」以外にはどうにも直感的にイメージしにくいです。 そこで、どういった分野のアプリケーションで実際にイーサリアムが用いられているのか、具体的な事例を Vol.2 の記事で掘り下げていきたいと思います。    

もっと読む

ブロックチェーンの未来を探る Future Blockchain Summit 2023まとめ

中東アフリカ地域最大のブロックチェーン関連イベントであるFuture Blockchain Summitが、今年もドバイで開催されました。本イベントには、50カ国以上から150以上の団体が出展し、web3関連企業、政府関係者など多くの人が参加しました。本記事では、今年のFBSの様子と主なポイントをご紹介します。
もっと読む

web3authとは?使い方やethers.js/web3.jsとの連携まで紹介

Web3authとは? 一言でいうと.. Metamaskが不要になる! ユーザーは、Metamaskのかわりにweb2.0のようにgoogleやemailを用いてログインすることも可能に。DappsのUI/UXの観点で大きな効果がある。 概要 Web3Authは、Web3ウォレットおよびアプリケーション用の認証ツール。すべてのソーシャルログイン、Webおよびモバイルネイティブプラットフォーム、ウォレットなどたくさんのキー管理方法に対応している。 ソーシャルログイン: GoogleやFacebookなど通常のログイン手法を使うことができる。また、メールを用いて場合はメールにリンクが送られてくる認証形式。 非保管公開鍵インフラ:ユーザーは、暗号鍵ペアの所有権とアクセスを制御。プロバイダーが独自にユーザーの秘密キーを取得することは不可能。 UIカスタマイズ: Web3AuthのデフォルトのUIをシンプルな方法でカスタマイズ可能。また、Webとモバイルどちらも対応 (参考: https://web3auth.io/docs/how-web3auth-works) Web SDK 1. パッケージをインストール npm install --save @web3auth/modal or yarn add @web3auth/modal ※ node 18以上が必要 2. web3auth ダッシュボードでプロジェクトを作成 1. Googleアカウントなどでアカウントを作成&ログイン 2. Create Projectを選択 3. プロジェクトの作成画面 選択するのは3つ project name 名前 英語で5文字以上 select environment テストネットの場合は、sapphire testnetを選択 select chain イーサリアムベースの場合は、EVM based Chainを選択 (作成したあとのプロジェクトダッシュボード画面) ※Client IDをコード上で使用 Web3authの使い方(基礎) Import index.tsxなどでimport import { Web3Auth } from "@web3auth/modal"; web3authのインスタンス化 // web3authをインスタンス化 const web3auth = new Web3Auth({ clientId: "先程コピーしたId", // Get your Client ID from Web3Auth Dashboard chainConfig: { chainNamespace: "eip155", chainId: "0x5", // Please use 0x5 for Goerli Testnet }, }); clientIdは、先程作成したダッシュボード上でコピーアンドペースト UIのconfigを更に設定 const web3auth = new Web3Auth({ // type uiConfig uiConfig: { appName: "W3A", // <-- Your dApp Name appLogo: "<https://web3auth.io/images/w3a-L-Favicon-1.svg>", // Your dApp Logo URL theme: "light", // "light" | "dark" | "auto" loginMethodsOrder: ["apple", "google", "twitter"], defaultLanguage: "en", // en, de, ja, ko, zh, es, fr, pt, nl loginGridCol: 3, // 2 | 3 primaryButton: "externalLogin", // "externalLogin" | "socialLogin" | "emailLogin" }, chainConfig: { chainNamespace: CHAIN_NAMESPACES.EIP155 }, clientId: "YOUR_WEB3AUTH_CLIENT_ID", web3AuthNetwork: "cyan", }); default languageをjaにすると、日本語になる 非同期処理でインスタンスを初期化 useEffectとasync awaitを使用 const checkIfWalletIsConnected = async () => { try { if (!web3auth) { console.log("web3auth not initialized yet"); return; } await web3auth.initModal(); } catch (error) {…

もっと読む

web3は気候変動対策を加速できるか? ドバイで開催されるCOP28を前に高まる期待

ドバイで開催される気候変動枠組条約締約国会議(COP28)を控え、現地では気候変動対策へのブロックチェーン活用に向けた議論が進んでいます。本記事では、気候変動対策におけるブロックチェーン活用の可能性や、COP28に向けた取り組み状況を紹介します。
もっと読む

L2構築キットのOP StackとOP Stackベースのチェーンを包括したSuperchain構想の解説

Optimismは、Optimisticロールアップを手軽に開発できるOP-Stackを開発しており、CoinbaseやWorldCoinの参入により注目を集めています。同時に、OP Stackを使って開発されたOPチェーンをつなぐSuperchain構想も掲げています。本記事ではOp-StackとSuperchain構想について解説します。
もっと読む
Back To Top
Search