Cryptocurrency Research Lab.

Cryptocurrency関連技術についての調査・研究

【BSC】Pancake Bunnies

明けましておめでとうございます。
今年はもっと本格的に仮想通貨分野の動向や技術を追っていき、自分でも新しいサービスをはじめられればと思っています。 どうぞよろしくお願いします。

2020年12月31日にようやく🥞PancakeSwap🐰のNFT600個が出揃いましたね。
(このうち110個はすでにburnされているため有効なのは490個)

このNFTがいったいどのように使われるのかまだ分かりませんが、『Phase 2.0』がとても待ち遠しいです!

NFTの種類

BlueberriesとCircularが少なめですね。
DEGOで売られている値段にもその傾向が表れているように思います。ただ、NFTの種類ごとの使われ方の違いによって、今後、値段の傾向は変わっていくかもしれません。

Type bunnyId minted burned count %
Swapsies 0 175 63 112 23%
Drizzle 1 117 16 101 21%
Blueberries 2 80 6 74 15%
Circular 3 77 4 73 15%
Sparkle 4 151 21 130 27%
(total) 600 110 490

BscScan Holder Chart

BscScanで見ると、2021/1/1時点で、Burnが110、次いでDEGOが占めていますでしょうか。全種類集めている方もそれなりにいるみたいですね。

https://bscscan.com/token/tokenholderchart/0xdf7952b35f24acf7fc0487d01c8d5690a60dba07

f:id:halifax:20210101084811p:plain ※2021年1月1日現在のBscScanサイトの画面スナップショットより

NFTの使い道?

NFTは残念ながら当たりませんでしたが、DEGOで入手できたので、NFTを使ったこれからの企画に参加することができそうです。売られている価格が高いのか安いのはまだ何とも言えませんが、自分が購入したときよりは上がっているようです。

CakeSwapよりも前にはじまったBakerySwapでは、ComboというNFTを持っているとStaking Powerがアップする効果がありました。CakeSwapのNFTにも何らかの特典があるのではと期待しています。(NFTを持っている🐰だけが浸かれるPoolとか???)

Access to Smart Contract

Binance Smart Chainを使いながらEthereumを学んでいます。今回はPancakeSwapのNFTを例に、プログラムからどのようにデータを取得できるかについて調べてみたいと思います。

なお、以下のBscScanのRead Contractからでもデータは確認することは可能です。

Ethers

Ethereum(およびBSCなどのEVM互換)へアクセスするJavaScriptライブラリとして、web3.jsのほかにも、Ethersというものがありますので、これを使ってみたいと思います。

npm install --save ethers

TypeChain

JavaScript/TypeScriptからスマートコントラクトを呼び出すI/Fを生成する便利なツールとして、TypeChainというものがあるのを最近知りましたので、使ってみたいと思います。2021/1/1時点で最新のEthers V5向けにI/Fを生成するには、以下のようにコマンドを実行します。

npm install --save-dev typechain @typechain/ethers-v5

PancakeBunnies ABI

PancakeBunniesのスマートコントラクトにアクセスするためのI/Fが記述されたABI (Application Binary Interface)は、以下のような方法で取得できます。src/contractsというディレクトリを用意して、その下にPancakeBunnies.abiというファイル名でABIを保存しておきます。

wget \
  -O src/contracts/PancakeBunnies.abi \
  'https://api.bscscan.com/api?module=contract&action=getabi&address=0xdf7952b35f24acf7fc0487d01c8d5690a60dba07&format=raw'

ABIがダウンロードできたら、typechainで生成してみましょう。

./node_modules/.bin/typechain --target ethers-v5 --outDir src/contracts src/contracts/PancakeBunnies.abi

src/contractsにPancakeBunniesのスマートコントラクトI/Fプログラムが出力されますので、呼び出してみましょう。 たとえば、totalSupplyを見てみたい場合には、以下のようなプログラムでよいでしょう。

プログラム例 (test.ts)

import { ethers } from 'ethers';
import { PancakeBunnies__factory } from './contracts';

const BSC_RPC_ENDPOINT = 'https://bsc-dataseed.binance.org/';
const PANCAKE_BUNNIES_ADDRESS = '0xDf7952B35f24aCF7fC0487D01c8d5690a60DBa07';

async function main() {
  const provider = new ethers.providers.JsonRpcProvider(BSC_RPC_ENDPOINT);
  const pancakeBunnies = PancakeBunnies__factory.connect(PANCAKE_BUNNIES_ADDRESS, provider);

  const totalSupply = (await pancakeBunnies.totalSupply()).toNumber();
  console.log(totalSupply);
}

main();

実行例

490

今後、ブロックチェーン技術を活用したWebアプリケーションをつくる場合などに、あるNFTを持っている人だけがアクセスできるページをつくるといったような応用もできるかもしれません。