Blockchain code Metaverse VR

Crypto×VR×SmartContract(359)

スポンサーリンク

//tips

//基本情報理解

認証局が発行するCRL cerficate revocation listは認証局が発行したデジタル証明書が有効期限よりも前に失効したことを示すシリアル番号のリストで、認証局が電子署名を行った上で提供する。

PCからサーバに対し、IPv6を利用した通信を行う際にはネットワーク層の暗号化にIPsecが用いられる。

IPsec/security architecture for internet protocolのことで、IPパケット単位で暗号化を行い、データの改竄防止や機密性を確保する仕組み。

OCSP online certificate status protocolは認証局が発行したssl/tls証明書が有効かどうかを確認するプロトコル。

デジタル証明書のシリアル番号、証明書発行者の識別名DNのハッシュ値などをOCSPレスポンダに送信し、その応答でデジタル証明書の有効性を確認する。

//pitch deck

Coinbaseの2012年のpitchを見つけた。 これで$600Kの出資を受けたのを手始めに、そこから$538Mまで拡大していったとのこと。

11枚のスライドで、図表を多様し、内容も簡潔でわかりやすい。ツールを使いやすくした結果のユーザの成長率という形で魅力を表している。ビットコインという新しい技術としての魅力も相乗効果で載っていると思う。

//smartcontract

続Bank contract。modifierで関数を整理するところを確認。

pragma solidity 0.8.4;

contract SimpleBank{
//アドレスからsimplebankという財布に入れるというイメージ
//payableを追加し入出金可能にする
function deposit() public payable{

}

function withdraw()public{
//payable(msg.sender)で外部に送金できるアドレスにできる
//送金額はaddress(this).balanceとなり、address(this)でこのコントラクトのアドレスを記載できる
//msg.senderに対して、このコントラクトの全ての残高を送るというもの
payable(msg.sender).transfer(address(this).balance);

//このままでは財布に他の人のお金がが入っていた場合も引き出した人が総取りしてしま引き出した人が総取りしてしまう
//たまたtransferから最近call関数に送金の役目がシフトしつつある
}

}

contract Bank{
mapping(address=>uint)balance;

address owner;

modifier onlyOwner {
//modifier修飾子を関数につけると、修飾された関数を実行する前に、modifierの処理を予め実行させることができる
//関数の見た目を整理し、美しくするもの
require(msg.sender == owner,"you are not the owner");
//_; では、先にmodifierの内容が実行され、処理部分が後の_にはいることを表す。必須。
_;
}

//複数の関数に使われているrequire処理を一つにまとめて導入する
modifier balanceCheck(uint _amount){
require(balance[msg.sender]>=_amount,"Insufficient balance");
_;
}

constructor (){
//ownerをデプロイ実行者に設定
owner=msg.sender;
}

function getBalance()public view returns(uint){
return balance[msg.sender];
}

function deposit() public payable onlyOwner{

//ownerのみ預金できるようにする
//require(msg.sender == owner,"you are not the owner")
//これはmodifierにて代替できる

balance[msg.sender]+=msg.value;

}

function withdraw(uint _amount) public balanceCheck(_amount){
//require(条件,エラーの場合の処理)でif文のような制約を作れる
//条件が達成されていなかったらエラー文を表示できる
//require(balance[msg.sender]>=_amount,"Insufficient balance");

//もしエラーが表示されたらそこで処理が終了し、下記の残りのgas代も返却される

//引かれる前のバランスを変数に保存
uint beforeWithdraw = balance[msg.sender];

balance[msg.sender]-=_amount;
payable(msg.sender).transfer(_amount);

uint afterWithdraw = balance[msg.sender];

//assert文はプログラムが思い通りに動いているか
//確認するために使う。どちらかというと開発用
assert(afterWithdraw == beforeWithdraw - _amount);

//もし()内と異なるじ内容が検出されたら前の処理はなかったことになる
}

//コントラクト財布内での送金/財布内の別の所持者に送金

function transfer(address _to,uint _amount)public balanceCheck(_amount){
//require(balance[msg.sender]>=_amount,"Insufficient balance");
//自身には贈らないように制約を付加
require(msg.sender != _to,"Invalid recipiant");
balance[msg.sender]-= _amount;
balance[_to]+=_amount;

}
}

上記をもとに、機能をコントラクトに分割し、分割したままでは元のコードにエラーが出るので、コントラクト間で機能を継承できるようにする。

pragma solidity 0.8.4;

import "./ownable.sol";
//ファイル名を記載
//別ファイルのものを継承できる

contract Bank is Ownable{
//is ...で、...の機能を記載コントラクトに継承することができる
//Ownableが親でBankが子となる

mapping(address=>uint)balance;

//publicは誰でもアクセスできる

function getBalance()public view returns(uint){
return balance[msg.sender];
}

function deposit() public payable onlyOwner{

balance[msg.sender]+= msg.value;
}

function withdraw(uint _amount) public {
uint beforeWithdraw = balance[msg.sender];

balance[msg.sender]-=_amount;
payable(msg.sender).transfer(_amount);

uint afterWithdraw = balance[msg.sender];

assert(afterWithdraw == beforeWithdraw - _amount);

}

//コントラクト財布内での送金/財布内の別の所持者に送金

function transfer(address _to,uint _amount)public {
require(balance[msg.sender]>=_amount,"Insufficient balance");
//自身には贈らないように制約を付加
require(msg.sender != _to,"Invalid recipiant");
_transfer(msg.sender,_to,_amount);

}

//privateはコントラクと内でアクセスできる
function _transfer(address _from,address _to,uint _amount)private{
balance[_from]-= _amount;
balance[_to]+=_amount;
}
}

継承親は下記とした。

pragma solidity 0.8.4;

contract Ownable{
//onlyOwnerの機能を持ったコントラクト
address owner;

modifier onlyOwner {
require(msg.sender == owner,"you are not the owner");
_;
}

constructor (){
owner=msg.sender;
}
}

 

人気の記事

1

皆さん、ついに、エアラインでも、サブスクリプションが始まったのはご存じですか? まだ実験段階ですが、ANAが、定額全国住み放題サービスを提供する「ADDress」と組んで、国内線を4回まで定額利用可能 ...

2

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

3

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

4

ついに、noteの月間アクティブユーザー数が4400万人(2020年3月時点)に到達しました。 そもそも、「note」とは、クリエイターが、文章やマンガ、写真、音声を投稿することができ、ユーザーはその ...

5

ボードゲームカフェが1日2回転で儲かるという記事をみつけたので興味を持ち、調べてみました。 まずは、需要がどれくらいあるのか、市場のようすからみていきましょう。 世界最大のボードゲーム市場はドイツで、 ...

-Blockchain, code, Metaverse, VR
-, ,

Copyright© BUSINESS HUNTER , 2023 All Rights Reserved Powered by AFFINGER5.