//tips
//基本情報理解
システム監査基準では、監査手続きを実施するときに適用する技法ウォークスルー法があるが、これは、データの生成から入力、処理、出力、活用までのプロセス、及び組み込まれているコントロールをシステム監査人が書面上でまたは実際に追跡するというもの。
システム監査人はシステム監査のまとめとして監査報告書を作成し、監査の依頼者に提出する。監査の結論には指摘事項のほかに改善勧告を記載し、改善の実施状況をフォローアップする。助言・指導まで行えるが非監査部門の責任者への指示や要因追加などの具体的な施策は要求できない。
//pitch deck
企業の物流支出の改善を行う7bridgesのpitchを確認。9枚のシンプルなスライドで、企業が抱える物流の問題点とそれに対する対策が書かれ、その結果どのように改善されるかまで示されていた。製品・サービスデモの掲載や1ページの情報量の整理をされれば、もっとわかりやすかったかもしれない。問題と解決策、その結果という流れは王道でインパクトがある。
//smart contract
先にトークンに組み込まれるERC20のコードを記載してきたが、今度はDex側のコードを書いていく。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./ERC20.sol";
contract Dex{
event buy(address acount,address _tokenAddr,uint256 _cost,uint256 _amount);
event sell(address acount,address _tokenAddr,uint256 _cost,uint256 _amount);
mapping(address=>bool)public supportedTokenAddr;
//関数修飾子を使いsellにもbuyにも簡単に対応する
modifier supportsToken(address _tokenAddr){
//サポートされているトークンかどうか
require(supportedTokenAddr[_tokenAddr]==true,"not supported");
_;
}
//使用できるトークンの絞り込み
constructor(address[] memory _tokenAddr){
//対応しているトークンアドレスをtrueにする
for(uint i=0;i<_tokenAddr.length;i++){
supportedTokenAddr[_tokenAddr[i]]=true;
}
}
function buyToken(address _tokenAddr,uint256 _cost,uint256 _amount)external payable supportsToken(_tokenAddr){
//自分のパソコンにある外部の関数を利用する際にはinterfaceを使わずともimportで代替可能
//トークンのインスタンスの作成
ERC20 token=ERC20(_tokenAddr);
//正しくコストが支払われているかの確認
require(msg.value==_cost,"insufficient");
//トークンが残っていることを確認
require(token.balanceOf(address(this))>=_amount,"Token sold out");
//トークン送付
token.transfer(msg.sender, _amount);
emit buy(msg.sender,_tokenAddr,_cost,_amount);
}
function sellToken(address _tokenAddr,uint256 _cost,uint256 _amount)external supportsToken(_tokenAddr){
ERC20 token=ERC20(_tokenAddr);
require(token.balanceOf(msg.sender)>=_cost,"insufficient");
//このコントラクトにethがあるかどうかの確認
require(address(this).balance>=_amount,"not enough funds");
token.transferFrom(msg.sender,address(this), _cost);
(bool success,)=payable(msg.sender).call{value: _amount}("");
require(success,"ETH transfer failed");
emit sell(msg.sender, _tokenAddr, _cost, _amount);
}
}
無事にかきおわり、ターミナルにてtruffle compileを行ったが問題なく通った。
Contractの中にjsonができていたが、こちらはフロントエンドとコミュニケーションする際に使うよう。