Blockchain code Metaverse VR

Crypto×VR×SmartContract(413)

スポンサーリンク

//tips

//smart contract

まずはdexフォルダの作成。

cd dex
npm init -y
truffle init

-yをすることで、項目の入力を省略してpackage.jsonを作成できる。いつもenterでスキップしている部分を-yにすると省略できるというもの。

生成されたtruffle configの.solバージョンを設定するためコメントアウトを外し、下記のように設定。

solc: {
version: "0.8.4",

Dexのベースとなる.solコントラクトの作成。

//SPDX-License-Identifier:MIT
pragma solidity 0.8.4;

contract ERC20{
//学習版。本利用時にはopenzeppelinを使用する
string public name;
string public symbol;
uint8 public decimals=18;//少数桁数
uint256 public totalSupply;

mapping(address=>uint256) private balances;
mapping(address=>mapping(address=>uint256)) private allowances;

//transferの際にはeventを発生させる方がわかりやすい?
event Transfer(address indexed _from,address indexed _to,uint256 _value);

//documentによればapproveを実行するために使用がmustのよう
event Approval(address indexed _owner,address indexed _spender,uint256 _value);

constructor(string memory _name,string memory _symbol,uint256 _totalSupply){
name=_name;
symbol=_symbol;
totalSupply=_totalSupply;
balances[msg.sender]=totalSupply;

}

//mapから該当アドレスのdeposit残高を返す
//public でもいいが外部の人しか利用しない関数のためexternal
function balanceOf(address _owner)external view returns(uint256){
return balances[_owner];
}

//allowanaces確認用
function allowance(address _owner,address _spender)public view returns(uint256){
return allowances[_owner][_spender];//ownerのものをspenderがいくら使える権限があるか
}

function transfer(address _to,uint256 _value)external returns(bool) {
//_transferで簡略化
_transfer(msg.sender, _to, _value);
return true;//完了サインを出す
}

//第三者のfromからtoへ送金
function transferfrom(address _from,address _to,uint256 _value)external returns(bool) {
//第三者への送金なのでallowanesの送金権限確認が必要
require(allowances[_from][msg.sender>=_value],"transfer amount exceeds allowance");

//trueなどをreturnさせるよう
_transfer(_from, _to, _value);
//transferが終わったら-
allowances[_from][msg.sender]-=_value;

return true;//完了サインを出す
}

//approveは他の人の残高をどれだけ動かして良いか決めるもの
function approve(address _spender, uint256 _value)public returns(bool){
//msg.senderの残高を_spenderがどれだけ使っても良いかを決める
allowances[msg.sender][_spender]=_value;
emit Approval(msg.sender, _spender, _value);
return true;

}

 

function _transfer(address _from,address _to,uint256 _value)private {
//内部計算用のメソッド
require(_value <= balances[_from],"Insufficient balance");
require(_from != _to,"from=to");

balances[_from] -= _value;
balances[_to] += _value;

emit Transfer(_from, _to, _value);
}
}

.solのイベントについて調べていたら、発行されたイベントはトランザクションのレシートに記録される以上のことがわかってきたので記載。

内容としては、Solidityのeventでバックエンドであるスマートコントラクトから、フロントエンドであるクライアントへ向けたメッセージ伝達を行う役割を担えるとのこと。

要するに、フロントエンド側で通知を行うためにバックエンド側での手助けとしてイベントを使用する。

スマートコントラクトはユーザーの現在の残高など現在の状況を扱えるが、昨日受け取った ETH の合計というような状況の変化を扱うのは得意ではない。

そこでフロントエンドにその役割を託すことになるが、その際にイベントを発行することで、フロントエンドの定期チェック機能がイベントを発見し、それを通知という形でユーザーに教えることができる。

参照:

人気の記事

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.