8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Moralis Pricing API でトークンの価格履歴を取得し DeFi 損益計算するメモ

Last updated at Posted at 2021-10-06

背景

DeFi での税金の損益計算で Uniswap で交換したときのトークン価格とか知りたい...

etherscan で DeFi トランザクションを集計して税計算を行う(だいたいできた. 進捗 89%)
https://qiita.com/syoyo/items/c75bad1d98981ae6fa21

があるが, 特定のブロックのときの価格を直接取得はできないのでめんどい... もっとお手軽ぺろっとやりたい...

Moralis(archive node アクセスなど 155 万回/month まで無料) で価格の履歴(各ブロック単位)取れました.

Moralis フリー archive node アクセスサービスで QuickSwap の USDC/JPYC 流動性ペア残高の履歴を取得するメモ
https://qiita.com/syoyo/items/a81f772394bf31432856

その他, Web3 API サービスでいろいろ情報取得できます!

JPYC 価格を取得する

参考として ERC20(Eth mainnet)の JPYC 価格を取得してみます.

Screenshot from 2021-10-06 21-16-29.png

実際には流動性プール(exchange. e.g. Uniswap)での価格になります.
デフォルトでは Uniswap が使われました(ブロックが新しければ v3, 古ければ v2).
(Matic の場合は QuickSwap)

curl -X 'GET' \
  'https://deep-index.moralis.io/api/v2/erc20/0x2370f9d504c7a6e775bf6e14b3f12846b594cd53/price?chain=eth' \
  -H 'accept: application/json' \
  -H 'X-API-Key: <APIKEY>'
{
  "nativePrice": {
    "value": "2253446224184",
    "decimals": 18,
    "name": "Ether",
    "symbol": "ETH"
  },
  "usdPrice": 0.007632394984635316,
  "exchangeAddress": "0x1f98431c8ad98523631ae4a59f267346ea31f984",
  "exchangeName": "Uniswap v3"
}

Voila! :tada:
usdPrice が取れました.

特定のブロックでの価格も取得してみます.

curl -X 'GET' \
  'https://deep-index.moralis.io/api/v2/erc20/0x2370f9d504c7a6e775bf6e14b3f12846b594cd53/price?chain=eth&to_block=12298371' \
  -H 'accept: application/json' \
  -H 'X-API-Key: <APIKEY>'
{
  "nativePrice": {
    "value": "3793535942220",
    "decimals": 18,
    "name": "Ether",
    "symbol": "ETH"
  },
  "usdPrice": 0.00890160133955811,
  "exchangeAddress": "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f",
  "exchangeName": "Uniswap v2"
}

Ultra super coool!

LP の時価?

LP(liquidity pair)のトークンの時価もほしいですよね.
(farming などしている場合, きちんとした DeFi 税金計算するには, 年末, 年度末時点での LP などの時価算出が必要)

残念ながら Pricing API で直には求めることができません.

reserve を調べる API ありますので, これで残高を調べ, Uniswap など流動性プールの計算式に当てはめて LP 時価を求めることになるでしょう.

Screenshot from 2021-10-06 21-31-26.png

Impermax など通常の(?)流動性プール以外の場合では, reserve 取得は対応してないでしょうから, 本記事最初にある別記事を参考にして自前でゴリゴリ書かないとだめそうです.

税金計算?

価格は取引所の価格ですからいくらか価格に歪みがありますので, 税金の損益計算は, ここから coingecko なり, ステーブルコインの場合は為替レートで参照価格を求めて補正することになるでしょう.

TODO

  • 自身のトレードのトランザクションログと, Moralis が出した価格がマッチしているか調べる
  • Liquidity-Provider fee を考慮してより正確な損益計算を行う
8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?