//tips
//基本情報理解
330を8進数から10進数に変換すると、
3*8^2+3*8^1+0*8^0=216
と表される。
リアルタイムシステムとは、システムの入力に対して厳密な時間制約の中で実行される保証システム。時間制約に対し、RTOS realtime operating systemを用いることが一般的。
RTOSでは、タスク優先順位により制御され、組み込み機器のリソースや特性に合わせてカーネルが提供される、汎用OSで提供されるGUIやファイルシステムは提供されない。
//crypto
Tokemakに触る前にベースとなるcompoundの使い方・考え方から学ぶ。
Compoundは管理者不在の分散型レンディングサービスで、管理者を通さないレンディングによって、低い手数料やスピーディーな取引を実現している。
レンディングプラットフォームは、ユーザーから預けられた仮想通貨をプールを通して、企業や機関投資家などに貸し付けることで収益を得るもの。
借りた側が返済をしないというリスクが起きないように、借りる額の150%を担保にしなければならないなどの制約を設けている。
資金を預けて収益を得たい場合は、Supply APYを参考にし、預けた分の利回りを確認する。
仮想通貨を借りたいという方はBorrow APYを参考にし、支払い利率を確認する。借りた分の通貨の運用利益が大きければペイするし、借りる際に使用した担保分債権も運用できる。
・Supply APY:資金をプールした時に得られる年利
債権トークンであるcTokenはCompound上で預け入れをおこなったユーザーに対価として付与され、レンディングサービスの金利収入はこのトークンに追加されていく仕組みとなっている。
ctokenはイーサリアムのERC-20規格に従って発行され、10ETHをコンパウンドに供給すると、10ETHと同じ価値を持つcETHが付与されることになる。
コンパウンドに付与されたcTokenは、コンパウンド以外のサービスで利用することが可能で、ユニスワップなどで実際にcTokenは取引されている。
cTokenは、債権であるため、ユニスワップなどで売却した場合には、コンパウンドにロックした資産を引き出すための権利も一緒に売却していることになる。
なので、ctokenはガバナンストークンであるCOMPとは異なることを認識しておく。
・Borrow APY:資金を借りた時に発生する年利
コンパウンドで資産を借り入れる場合は、一般的なレンディングサービスと同様に担保となる資産を預け入れる必要がある。
この資産に対しても、債権トークンであるcTokenが付与される。なので、コンパウンドで仮想通貨を借り入れる場合は、cTokenと借り入れる仮想通貨の両方が手元に入ってくる。
利息を払ってもトークンを借りるメリットとして、
-自己資産を売却せずにステーブルコイン借りて運用できること
-借りたトークンをショートできること
-他プラットフォームとの金利差を狙えること
がある。ショート方法については別途もう少し調べてみる。
仮想通貨を貸し出しているときは、その資金がロックされてしまうため、自由に移動することができなくなり、それはコンパウンドにロックされている資産(TVL:Total Value Locked)として全体量を確認することができる。
このロック量が流動性に影響を与え、プラットフォームの価値を高める指標となるので重要な指標。
ただ、コンパウンドはライバルのアーべと比べると取り扱い品種が少ないなどの懸念点があり、クロスチェーンプラットフォームGatewayによりイーサリアム以外のブロックチェーンとの相互運用を可能にするサービスの活躍が望まれている。
//smart contract
今回は簡単なフロントエンドの確認。
フロントエンドの構築はダウンロードで対応。下記のクライアントフォルダに該当するhtmlやcssが格納されている。
https://github.com/BlockAcademyJP/dapp-kaihatuhen/tree/part6
現在作成しているフォルダの中身を一旦非難させ、ダウンロードしたものをそのままdexフォルダ内に入れる。
ターミナルにて、
cd dex
truffle console
Migrateとしたいが前回作成したものを覚えているので、最新のものに更新するために—resetをつける必要がある。
migrate —reset
これによりウォレットを再デプロイできた。
ここからweb3ファイルをインストールする必要がある。
別のターミナルを開き、npm install web3を実行。
Htmlのファイルにインストールしたweb3を読み込ませる必要があるのでスクリプトを追加。
Index.htmlファイルに下記を加える。
<script src="../node_modules/web3/dist/web3.min.js"></script>
次にapp.jsを開き、フロントエンドのロジックを記載。
Web3のインスタンス生成から。
let web3;を作成したら、
$(document).ready(async () => {
if(window.ethereum){
//window.ethereumでメタマスクがあるかどうかを確認
web3 = new Web3(Web3.givenProvider);
//Web3.givenProviderメタマスクが接続しているノードのアドレス
//これでインスタンス生成
}
priceData = await getPrice();
console.dir(priceData);
});
さらにクリックされたらメタマスクとコネクトするコマンドを記載。
//クリックされたら実行するコマンド
$(".btn.login").click(async () => {
//時間がかかるのでasync もつけておく
try {
//metamaskのポップアップを出す
//window.ethereumはメタマスクのオブジェクト
const accounts = await window.ethereum.request({
//ここでアカウントをリクエストしている
method: "eth_requestAccounts",
});
user = accounts[0];//ここにアカウントアドレスが入っている
//コネクト後に表示する文言を変更
$(".btn.login").html("Connected”);//変更該当箇所は””の中、ここではbtn.login
$(".btn.swap").html("Enter an amount");
$("#username").html(user);
} catch (error){
alert(error.message);
}
})
メタマスクのアカウントを開き、アカウントのインポートボタンを押すとprivatekeyの入力を求められるのでganacheのキーボタンを押すと出てくるプライベートキーを入力。
インポートされたアカウントで、カスタムRPCを開き、所定の数値とGanache表示のRPC serverを入れることで解決した。
Vscodeのlive機能で、無事にコネクト結果を反映させることができたのでapp.jsでhtml表示の方も少しいじっていく。
async function getPrice()でトークンの値段を取得するコマンドを確認する。
Coin geckoのapiを確認すると、換金元tokenと数量、換金先のtoken種類がわかれば、換金先の数量をjsonで返すメソッドがあるのでそちらを使えるようにする。
https://www.coingecko.com/en/api/documentation
このメソッドを使う際のリクエスト
ただ、jsonはjsでは使えないのでオブジェクトに直す必要がある。
async function getPrice(){
//時間がかかる処理なのでawait
const daiData = await (await fetch("https://api.coingecko.com/api/v3/simple/price?ids=dai&vs_currencies=eth")).json();
//.jsonでオブジェクトに直す
//fetchを使うことでapiを取得できる
const compData = await (
await fetch(
"https://api.coingecko.com/api/v3/simple/price?ids=compound-governance-token&vs_currencies=eth"
)
).json();
const linkData = await (
await fetch(
"https://api.coingecko.com/api/v3/simple/price?ids=chainlink&vs_currencies=eth"
)
).json();
return {
//ここで上記で取得したjsonの中身の値を取得している
daiEth: daiData.dai.eth,
linkEth: linkData.chainlink.eth,
compEth: compData["compound-governance-token"].eth
}
}