//tips
//smart contract
ここでは所有の部分の確認とpauseやコントラクト機能の停止ができるselfdestructの動作確認を行っている。
pragma solidity ^0.5.13;
contract StartStopUpdateExample {
//コントラクトのdeployerをmanagerとするため
address owner;
bool public paused;
//deploy時に一回呼ばれる
constructor()public{
owner=msg.sender;
}
function sendMoney()public payable{
}
function withdrawAllMoney(address payable _to)public {
//if,else文の代わりがrequire
require(msg.sender==owner,"You are not the owner");
require(!paused,"Contract is paused");
//第三者にコントラクトの財布の中身を提供
_to.transfer(address(this).balance);
/*
if(msg.sender==owner){
}else{
}
*/
}
//さらにmanagerにも制限を加える
//pause設定されている時にはownerでも送金できなくする
function setPaused(bool _paused)public {
require(msg.sender==owner,"You are not the owner");
paused=_paused;
}
//コントラクトの廃棄
//Solidityのselfdestruct は二つの働きを持つ。
//効果的にそのアドレスのバイトコードを削除することで、コントラクトを使えないようにする。
//コントラクトの全資産をターゲットアドレスに送る。
function destoroySmartContract(address payable _to)public{
require(msg.sender==owner,"You are not the owner");
selfdestruct(_to);
}
}
Mappingの仕様についても確認していく。
まずは単純な登録からで、これはアドレスのステータス管理にかなり使えそう。コントラクト内のアクションを実行したmsg.senderに対してのステータスをつけることができる。先のクラファンページでは寄付の実行や承認の実行などで使えていたかと思う。
pragma solidity ^0.5.13;
contract SimpleMappingExample{
mapping(uint=>bool)public myMapping;
mapping(address=>bool)public myAddressMapping;
//マップのindexにtrueを組み込む
function setValue(uint _index)public{
myMapping[_index]=true;
}
//アドレスのステータス管理に使える
function setMyAddressToTrue()public{
myAddressMapping[msg.sender]=true;
}
}