Blockchain code Metaverse VR

SmartContract×VR×Crypto(602)

スポンサーリンク

//tips

//smart contract

勢いがついたのでこのままクリプトゾンビ攻略を進めてしまう。

ERC721の所有権移転には2パターンある。

・transfer関数での移転
→トークンの送り手が関数を呼び出すケース
・takeOwnershipでの移転
→トークンの受け手が関数を呼び出すケースでapprove関数での承認手続きが入る分複雑になる

ただ、ベースとなる作業は同じで下記なのでこちらをprivateとし、外部からアクセスするものを別途2パターンに分けて作成する。

function _transfer(address _from, address _to, uint256 _tokenId) private {
ownerZombieCount[_to]++;
ownerZombieCount[_from]--;
zombieToOwner[_tokenId] = _to;
Transfer(_from, _to, _tokenId);
}

こちらが一つ目のトークンの送り手が呼び出すタイプ。

function transfer(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) {
_transfer(msg.sender, _to, _tokenId);
}

2つ目は、トークン所有者がapprove関数を呼び出し、新所有者のaddress、_tokenIdの情報を与え、新所有者がtakeOwnership関数を_tokenIdで呼び出すと、コントラクトがapprove関数から承認済みかを確認してから、トークンを移転する構造を加える。

やっとapproveの意味合いについて理解できてきたかもしれない。プラットフォームだけが要求するものではない。

まずは新たに承認データベースを設定。

mapping (uint => address) zombieApprovals;

そこから先のベースにつなぐ関数を実装。

function transfer(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) {
_transfer(msg.sender, _to, _tokenId);
}

function approve(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) {
zombieApprovals[_tokenId] = _to;
Approval(msg.sender, _to, _tokenId);
}

function takeOwnership(uint256 _tokenId) public {
require(zombieApprovals[_tokenId] == msg.sender);
address owner = ownerOf(_tokenId);
_taransfer(owner, msg.sender , _tokenId)
}

結局は下記の_transferで所有の移転が行われることには変わりはない。

ownerZombieCount[_to]++;
ownerZombieCount[_from]--;
zombieToOwner[_tokenId] = _to;

コントラクトのセキュリティのポイントとなるオーバーフローとアンダーフローの回避の確認。

オーバーフロー は、定められた桁数を超過した場合のことで例えば、uint8は8ビットであるため2^8 - 1 = 255が最大値となるが、number++;などと関数を書いていると超過する場合がある。

具体的には255を表す、バイナリの11111111に1を足すと、00000000に戻る。つまり255+1は0になる。

逆にアンダーフローは0から1を引くと、255となる。

これらの問題を回避するために、OpenZeppelinはSafeMathというライブラリ用意してくれているので、こちらを標準装備しておくとよさそう。

ライブラリとは、特別なタイプのコントラクトで、データ型への関数アタッチができる。例えば、uintで定義されたものに直接関数を付け加えられることが可能となる。uint256 b = a.add(3);

.add(3)の部分が機能として追加できると考えればわかりやすいか。

少し特殊なのはコントラクトの後にusingを使用する必要があること。

contract ZombieFactory is Ownable {
using SafeMath for uint256;

人気の記事

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.