見出し画像

請求書ファイナンスをブロックチェーンで行う融資サービスTinlakeのスマートコントラクトの仕組みは?

前回は請求書ファイナンスをブロックチェーンで行う融資サービスTinlakeについて解説しました。Tinlakeは請求書などの資産をNFTと呼ばれる規格でブロックチェーン上で表現し、それを担保にステーブルコインを借りることを可能にするエコシステムでした。

前回見たTinlakeから貸し手と借り手の役割は以下のようになりました。

貸し手
Tinlakeにステーブルコインを提供し、シニアトランシェとジュニアトランシェのいずれかの運用による利息を受け取ります

借り手
NFT資産を担保にTinlakeに預けられたステーブルコインを借り入れます

以下はTinlakeのスマートコントラクトの全体像です。

青ブロックがコアロジックを担うコントラクト赤ブロックが外部の資産(ERC20やNFTなど)を表すコントラクト黄色ブロックがコントラクトの一部の役割を担うモジュールです。

また各矢印において、青矢印は特定のユーザーやコントラクトからの関数呼び出し、緑矢印はどのユーザーやコントラクトからでも呼び出せる関数呼び出し、オレンジの矢印は外部の資産コントラクトに対する関数呼び出しを表しています。

画像5

次から実現しているコントラクト全体像をTinlakeの開発者向けドキュメント、またTinlakeのgithub上ソースコード(執筆時点のdevelopブランチ)から解説していきます。

借手側の各コントラクト

借手側のコントラクト全体像を見ていきます。

Shelfコントラクトの役割

画像2

Shelfコントラクトの役割は担保となるNFTの預かり管理(カストディ機能)と、借入・返済の機能提供です。Shelfコントラクトの一部の機能は他に使われており、Pile、Ceilingという別モジュールに分けられています。

Pileモジュール

Pileは金利の設定をするコントラクトで、各ローンについて金利の設定を紐付けます。また、debt関数でローンを指定するとローン残高が分かります。incDebt関数でローン残高の増加、decDebt関数でローン残高の減少を更新します。なお、accrue関数は、ローン残高に依存している他のメソッドが更新後の残高を取得できるように整合性を取るために用意されています。

Ceilingモジュール

Ceilingモジュールは融資限度額の管理モジュールです。Ceilingモジュール(上限モジュール)は、creditline(与信)とprincipal(元金)という2つのコントラクトを持ち、それぞれ各ローンに対して、与信上限額、元金を管理する役割を持ちます。それぞれ借りられる上限を示しており、これを超えた借入が行われないことを管理する役割になります。

参考:Principal.solで借入を行ってCeilingの融資限度を更新する関数

    function borrow(uint loan, uint amount) external auth {
       // safeSub will revert if the ceiling[loan] < amount
       ceiling[loan] = safeSub(ceiling[loan], amount);
   }

ここから先は

3,111字 / 7画像

¥ 500

期間限定 PayPay支払いすると抽選でお得に!

この記事が気に入ったらサポートをしてみませんか?