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

コロナによる需要変化 コロナパンデミックの影響で、人々は外に出られなくなり、自宅で過ごす時間が増えました。 この自粛ムードの中、下記のようなビジネスの需要変化が引き起こされています。 【利用者減少】 ...

2

米国レストランの決済時に毎日お世話になっていた「Square」のビジネスモデルについて本日はふれていきたいと思います。 「Square」とは、ネットにつながったモバイル端末と専用のカードリーダーを用意 ...

3

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

4

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

5

ナイキのSNKRSが、なぜこれほどまでに人気なのか?調べてみました。 きっかけは米国での友達との会話。彼は自分のシューズをみせて、「これ20万円もしたんだぜ。」と語ってくれました。 あまり靴に興味がな ...

-Blockchain, code, Metaverse, VR
-, ,

Copyright© BUSINESS HACKER , 2022 All Rights Reserved Powered by AFFINGER5.