//tips
//基本情報理解
プロバイダ責任制限法とは、webページや電子掲示板など「不特定の者によって受信されることを目的とした電気通信の送信」で個人の権利の侵害があった場合に、プロバイダの損害賠償責任の制限、被害を受けた者が発信者情報の開示を請求する権利を定めた法律。
請負契約とは注文元から仕事を請け負って自社の従業員によって仕事を行う契約方式。業務委託を受けたB社の従業員がB社の指揮命令を受けるのではなく、発注元のA社の指揮命令を受けて作業させると偽装請負となる。
//crypto
マルチシグMultisig とは、トランザクションの署名に複数の秘密鍵を必要とするセキュリティ向上技術のこと。
必要な署名の数は2/3のように分数で表され、トランザクションを完了させるためには、事前に作られた3つの秘密鍵の内、2 つの鍵での署名が必要となる。
もし、一つの鍵を紛失してもほかの鍵で署名可能となるなどのメリットも別途ある。
ただ、手間や送金にかかる費用が加算されるというデメリットもある。
エスクローエージェント(仲介者)は買手から一時的にお金を預かり、商品が届かない場合にはお金の返金が行われます。この仕組みを「エスクロー」と呼びます。
このマルチシグを活用し、公正な第三者を取引に噛ませるエスクローを行うことができる。任意の仲介人を1人おいて2of3のマルチシグを使うことで、売り手、買い手、第三者が秘密鍵を持つことになるので、購入商品到着後に署名をしないケースや商品の返済を受け付けないケースなどに公正な第三者が介入することができる。
//smart contract
さらにtestを実行。
it("Should return token names and symbols correctly",async()=>{
expect(await dai.name()).to.equal("Dai");
//dai.nameを読んだ後Daiになるかチェック
expect(await link.symbol()).to.equal("LINK");
});
it("Should have correct total supply",async()=>{
expect(await comp.totalSupply()).to.bignumber.equal(toWei(10**4));
//compのトータルサプライをチェック
//toweiをインポート
//chaiはビッグナンバーサポートはデフォではしていないのでto.bignumber.
});
こうするとトータルサプライ部分で下記エラーが発生。
1) Contract: ERC20 token test
Should have correct total supply:
TypeError: Cannot read property 'totalSupply' of undefined
at Context.<anonymous> (test/erc20.test.js:41:27)
at processTicksAndRejections (internal/process/task_queues.js:88:5)
そういえばcompではなく、linkで設定を行なったのでそちらに変えたら、きちんと通った。
it("Should have correct total supply",async()=>{
expect(await link.totalSupply()).to.bignumber.equal(toWei(10**6));
});
今度はきちんと失敗することを確認するテストも追加する。
it("Should return token names and symbols correctly",async()=>{
expect(await dai.name()).to.equal("Dai");
//dai.nameを読んだ後Daiになるかチェック
expect(await link.symbol()).to.equal("LINK");
//expectはchaiの関数
});
it("Should have correct total supply",async()=>{
expect(await link.totalSupply()).to.bignumber.equal(toWei(10**6));
//compのトータルサプライをチェック
//toweiをインポート
//chaiはビッグナンバーサポートはデフォではしていないのでto.bignumber.
});
//きちんと失敗することを確認するテスト
it("Should revert when transfer amount>balance",async()=>{
const ownerBalance=await link.balanceOf(owner);
const transferAmount=ownerBalance.add(new BN(1));
//バランスより1多いので必ず失敗しなければおかしい
await truffleAssert.reverts(link.transfer(alice,transferAmount));
//chaiには失敗することを確認する関数はないのでtruffleの関数を使用している
});
Itが多くなるとどれがどのテストか混乱するのでカテゴリー分けを行う。
describe("Supply",()=>{
it("Should return token names and symbols correctly",async()=>{
expect(await dai.name()).to.equal("Dai");
//dai.nameを読んだ後Daiになるかチェック
expect(await link.symbol()).to.equal("LINK");
//expectはchaiの関数
});
});
このように記載するとSupplyというカテゴリーのテストだとわかるようにターミナル表示が行われる。
Contract: ERC20 token test
✓ Should have correct total supply
✓ Should revert when transfer amount>balance (448ms)
Supply
✓ Should return token names and symbols correctly (39ms)
ここからはフロントエンドに実装に移る。