//tips
//基本情報理解
a mod n と b mod nが等しい場合は、単純に
a mod n = b mod n
a mod n - b mod n=0
(a-b) mod n=0
とすれば良い。
分割統治は、一つの大きな問題を複数の小さな問題に分割し、それぞれを解決した後に統合する方法で、クイックソートがそれに該当する。適当な基準値を設けて、それより小さな値のグループと大きな値のグループにデータを分割すること。
CPUのプログラムレジスタの役割は命令を読み出すために次の命令が格納されたアドレスを保持する。実行する命令は命令レジスタに記憶されるが、次の命令を読み込むために主記憶装置の読み出しアドレスを設定するのがプログラムレジスタ。
命令レジスタは、主記憶から読み出された命令を解析するまで保存しておくレジスタ。
汎用レジスタは演算を行うためにメモリから読み出したデータを保持するもの。特に被演算データや演算操作の結果を保持するレジスタをアキュムレータという。
//crypto
Shortポジションはbetafinanceで簡単にできるようになったようなので、Tokemakについて調べていく。
現在ので移行しているdifiにパターンとしては通貨ペアを提供してくれるような流動性を提供するために、トークンの配布などの大量の資金メリットを与えている。
逆にいえばdifi側の初期のユーザー獲得コストは半端ないことになる。
Current solutions to the problem of token liquidity are:
Engaging centralized market makers, a costly affair
下記の3点がまだたりてないよねということ。
capital [money], market knowledge [strategy], and trading/pricing expertise [technology]
Incentivizing their users through yield farming, an equally costly solution
通貨を発行するだけではインフレが起こるだけなので、インターネットの隆盛をAWSが支えているようにdifiの成長を支えるインフラとしての役割をtokemakが担い、通貨発行以外の手段でのクライアントアプローチルートを整えたいというもの。
our aim is to usher in the broadband moment for liquidity or “value-flow” in DeFi.
新興defiのマーケット案内人として、広範囲へのアプローチプラットフォームで彼らの普及を後押しするのが目的となりそう。
やたらreactor原子炉という言葉が出てくるなあと思っていたら、自身のプロジェクトの例え話に用いられていた。内容はガスを熱してプラズマにすると熱を発するので、その熱をベースに原子融合のエネルギーを取り出すというもの。
Tokemak (with an “e”) has been architected to gather idle tokens in order to seamlessly generate and deploy sustainable liquidity.
なので、プールに各トークンを入れておいて、ユーザーもその中で回遊するようにしておけば、あるトークン間でのやりとりもそれなりに生まれるよねということのよう。
さらにそのプールとtokemak自体に預けられたデポジットの間でトークンを動かすことができるようなので、プール内の流動性を高めることもできるよう。
下記の新興トークンへのサポート部分がコンパウンドやアーバとの1番の違いかも。
New DeFi projects: New projects will be able to inexpensively stand up their own token reactors and use the Tokemak’s protocol controlled assets to generate healthy liquidity for their project from its inception
https://medium.com/tokemak/introducing-tokemak-the-utility-for-sustainable-liquidity-8b99a4757301
https://forum.sushi.com/t/collateralize-sushi-reactor-on-tokemak/5919
https://docs.tokemak.xyz/
//smart contract
昨日の続きのwebページへの反映。
let text = $(this).text();に選んだトークンは入ることになるがこれにはスペースまで含まれてしまうことになるので、
let token= undifined;
token=text.replace(/\s/g,"");
このようにして削除。
Macでは、逆スラッシュはoption+¥でかける。
換金元の数量を入力した際に換金先の数量も表示したいのでInput部分にリスナーを作る。
Jsには様々なイベントが定義されており、それらのイベントが発生した際に動作するように対応付けておいた関数のことをイベントリスナーと呼ぶ。
$("#input").on("input",function(){
if(token===undefined){
return;
}
const input=parseFloat($(this).val());//htmlのinput部分の値を取り、stringから数値に直す
updateOutput(input);
});
ここから新たにupdateOutput関数を作成。これにより変換元の数量を入れると変換先の数量を自動計算して表させることができる。htmlでの文言表示も適したものに変換する。
function updateOutput(input){
let output;
switch(token){
case "COMP":
output=buyMode ? input/priceData.compEth:input*priceData.compEth;
//ethの数量input/ethとcompの割合priceData.compEth。これによりcompの数量がわかる
break;
case "LINK":
output=buyMode ? input/priceData.linkEth:input*priceData.linkEth;
break;
case "DAI":
output=buyMode ? input/priceData.daiEth:input*priceData.daiEth;
break;
}
//outputが0の場合は弾くようにする
if(output===0||isNaN(output)){
//htmlとの連動
$("#output").val("");
$(".rate.value").css("display", "none");
$(".btn.swap").html("Enter an amount");
$(".btn.swap").addClass("disabled");
}else{
$("#output").val(output.toFixed(7));//少数7桁まで区切る
$(".rate.value").css("display", "block");
//exchangeレート表示
if (buyMode) {
$("#top-text").html("ETH");
$("#bottom-text").html(" " + token);
$("#rate-value").html(exchangeRate.toFixed(5));
} else {
$("#top-text").html(token);
$("#bottom-text").html(" ETH");
$("#rate-value").html(exchangeRate.toFixed(5));
}
//wei表記したもの
finalInput=web3.utils.toWei(input.toString(),"either");
finalOutput=web3.utils.toWei(output.toString(),"either");
}
};
ここからSwapするためにはウォレットが必要なのでganacheでcontractからデプロイしたコントラクトアドレスを確認、コピーして、app.jsに反映させる。
userが換金元/先のトークンを変換したときにもリフレッシュするようにするようにしたいが、コントラクトはアドレスだけわかってもどうしようもないのでinterfaceを作成する必要があるとのこと。ここではabi。
dexInst=new web3.eth.Contract(abi.dex,dexAddr,{from:user});
abi.jsを作成。abi自体はdex.js部分の一部なのでコピーして移すことになるよう。
これをhtmlの方にインポートする必要があるので、下記のように追加。
<script src="../node_modules/web3/dist/web3.min.js"></script>
<script src="./assets/abi.js"></script>
これをベースにリフレッシュ部分を下記のように実装。
if(user){
switch(token){
case "DAI":
tokenInst=new web3.eth.Contract(abi.token,daiAddr,{from:user});
break;
case "LINK":
tokenInst=new web3.eth.Contract(abi.token,linkAddr,{from:user});
break;
case "COMP":
tokenInst=new web3.eth.Contract(abi.token,compAddr,{from:user});
break;
}
}
次はスワップを行う。下記のようにhtmlのスワップボタンを押されたのを検知して実行させるようにしていく。
$("#swap-box").submit((e)=>{
e.preventDefault();
})