###### tags: `BCALI`
# 2021/10/25 卒論用メモ
### 削減できるGASと機能について
* Opensea全体での24時間で$3,079,234.26になる。
* そのうち9割以上を占めているのがAtomicMatchというコントラクトであり、内包される機能は以下である。
```
function atomicMatch(Order memory buy, Sig memory buySig, Order memory sell, Sig memory sellSig, bytes32 metadata)
{
check buy side parameter;
check sell order is valid;(expirationTime, signature)
check sell order is not cancelled or finalized;
transfer sell price(ETH or ERC20) to seller;
transfer fee to Opensea;
transfer NFT from seller to buyer;
emit event;
}
```
つまり、売り手の情報と買い手の情報の突合・決済・NFTの移行というNFT取引の一切を単一のコントラクトで行なっており、それぞれを別コントラクトで実行するよりもGASコストの削減もできている。
* 全取引において、NFTに対するSellOrder(売り注文)とBuyOrder(買い注文)が署名されるとAtomicMatchが呼び出されコントラクトが実行される。
* 一定量の取引をまとめる、もしくは時間ごとに区切って、オフチェーンで情報を所有し、コントラクトの実行回数を減らすことができれば、GASの削減は可能になるのではないか。
* 例えば、DB上で通常の取引プラットフォームを運用して、NFT価値移転の情報を一定期間ごとにハッシュ化してブロックチェーンに書き込むと、一定時間以降はその時間以前の記録を改竄困難な状態で保存することができる。
* その場合は一定期間の設定ごとにブロックチェーンにデータを書き込みに行くので、その回数*GASになり、冒頭のGASとの差分だけ削減が可能になる。
* その一定期間の合理性については検討が必要。というのと、その期間はDBの管理になってしまうので、サービスの可用性が損なわれる可能性がある。
ToDo
- [ ] シーケンス図(Buyer,Seller)を作ってフローの中で割愛できそうな部分を探す。
- [ ] 取引所における機能要件と非機能要件を整理する。