Open9

blockchain開発学習日記

ホリホリホリホリ

08/18

Ethereumを使ったスマートコントラクトでのHelloWorld的DAppを実装する

  • SolidityとEthereumによる実践スマートコントラクト開発に沿って実装
  • truffleのインストール
  • TDDでやる
  • ブロックチェーン上でテキストを格納し、そのテキストをブラウザ上で表示するという簡単なもの
    • MetaMaskで予めログインする
    • コントラクトをデプロイしたアドレスからでないとテキストを編集できないようにする

コントラクトのローカルネットワークへのデプロイ

  • Ganacheを使った
  • ローカルでブロックチェーンを作成し、Ganacheが自動で作成したアドレスのMnemonicフレーズでMetamaskにインポートする
  • このときローカルホストのネットワークは手動でローカルのURLなどを入れないといけなかった
  • Webクライアントはweb3.jsを経由して、テストネットワークに接続する

テストネットワークへのデプロイ

以下の2つを試した

  • Goerli
  • Rinkeby
    • infra.io が発行したURLを使ってテストネットにデプロイした
    • etherがなかったがデプロイできた。ガス代はデプロイのときにもかかる理解だったが謎

次はERC-20の仕様を実装してみる

ホリホリホリホリ

08/22

学習メモ

アウトプット

ホリホリホリホリ

08/23

学習メモ

アウトプット

ホリホリホリホリ

08/28

学習メモ

アウトプット

ホリホリホリホリ

08/29

学習メモ

コード

コントラクトの実行スクリプト

 const alchemy = new hre.ethers.providers.AlchemyProvider(
    'maticmum',
    ALCHEMY_API_KEY,
  ) // JSON RPCプロバイダを取得
  const userWallet = new hre.ethers.Wallet(PRIVATE_KEY, alchemy) // 秘密鍵とJSONPRCプロバイダを使ってウォレットを初期化
  const Greeter = new hre.ethers.Contract(CONTRACT_ADDRESS, abi, userWallet) // コントラクトアドレス,コントラクトのABI,ウォレットを使ってコントラクトのインターフェースを初期化
  const tx = Greeter.setGreeting('hoge') // コントラクトのトランザクションを発行
  await tx.wait() // トランザクションの完了を待つ(マイニングされるのを待つ)

ウォレットの作成スクリプト

  const wallet = hre.ethers.Wallet.createRandom()
  const userWallet = new hre.ethers.Wallet(wallet.privateKey, alchemy)
  const Greeter = new hre.ethers.Contract(CONTRACT_ADDRESS, abi, userWallet)

アウトプット

ホリホリホリホリ

08/30

学習メモ

  • モバイルアプリとの連携を調べる
    • openseaアプリだとプロフィール画面に「ConnectWallet」ボタンがあって、これをタップするとMetamaskアプリが起動して、所有しているNFTがOpenseaアプリ上に表示される
    • これはつまり、openseaのアカウントとNFTは紐付いていなくてあくまでもethereumのアドレスに対してNFTが紐付いていることを示していると解釈した
  • Metamaskのモバイルアプリにディープリンクしてウォレットとモバイルアプリを接続する方法
  • モバイルアプリからWalletConnect使うとトランザクションをブリッジしてくれるらしい
  • torusを試しに使ってみる
    • web3Authというライブラリがあり、それをreact-nativeアプリに入れてドキュメント通り試してみたが、うまく動かなかった
    • いろいろ調べてみたが、webベースでの話が多く、ネイティブアプリでの話は出てこなかった
    • ネイティブアプリで試してみたところちゃんと動いた。Googleなどのログインプロバイダによってログインしたあと、結果として返ってくる中に秘密鍵が含まれている様子
  • web3Auth検証

アウトプット

  • react-native, express, hardhat の構成でDapps開発できるレポジトリを作った
  • web3Authのサンプルアプリを作成した。react-nativeのsdkが動かなかったので、AndroidのネイティブSDKで試した
  • web3Authから受け取ったjwtからpublicKeyを取得し、それをウォレットのアドレスに復元するというのをやった
ホリホリホリホリ

08/31

学習メモ

  • pythonの鍵生成ライブラリ
  • Moralisについて
    • Moralisは、Dapp開発におけるインフラを提供してくれる開発プラットフォーム。一言でいうとAlchemyの競合
    • alchemyやinfuraなどが持っているノードプロバイダとしての機能にプラスして、blockchainにまつわる様々な操作が可能なAPIを提供してくれる
    • 主にバックエンドを提供するものなので、ウォレット自体は提供していなさそう。tutorialではmetamaskなどのサードパーティウォレットを使う例が紹介されている
    • ただ、このあたりのAPIはalchemyのSDKにも実装されているので、Moralisだけでしかできないというわけではなさそう