トークンエコノミーとITコンサルタント

旧帝大大学院卒業後、SIerからコンサルに転身した筆者が、トークンエコノミー、暗号通貨、構成技術やプロトコルについて学ぶブログになりました。最新の暗号通貨レポートの翻訳、ソースコードの解説、技術動向、週次レポート、など。特に、データ活用ビジネスの分界点・テクノロジー、資産価値を運用するテクノロジーも含めて書いていきます。

Githubの実装からERC721とERC020の違いをさらっと確認してみる

ERC721のDEXをいち早く実装しようと思いたったはいいものの、
ERC020と大まか違いは認識してるけど、DEX作るにあたっての違いはさすがにないよな・・・?
ということが気になったため、一応念のため実装を遡る。

おさらいだが、ERC721とはEthereumの実装の取り決めの一つであり、Non-Fungible Token(NFT)を
実現できるプロトコルである。
NFTはその名の通り「代替不可能なトークン」であり、ひとつひとつの送金ごとに IDが払い出されるため
送金された後はまったくべつのトークンとして扱われるため、貨幣ではなく交換媒体として注目されている。


ではさっそく、実装上、何が違うのかを確認してみる。

まず、多くのトークンとして普及しているERC020の実装インターフェースを確認する。

pragma solidity ^0.4.23;


/**
* @title ERC20Basic
* @dev Simpler version of ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/179
*/
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}

続いてERC721Basic.solの実装。

pragma solidity ^0.4.23;


/**
* @title ERC721 Non-Fungible Token Standard basic interface
* @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
*/
contract ERC721Basic {
event Transfer(
address indexed _from,
address indexed _to,
uint256 _tokenId
);
event Approval(
address indexed _owner,
address indexed _approved,
uint256 _tokenId
);
event ApprovalForAll(
address indexed _owner,
address indexed _operator,
bool _approved
);

function balanceOf(address _owner) public view returns (uint256 _balance);
function ownerOf(uint256 _tokenId) public view returns (address _owner);
function exists(uint256 _tokenId) public view returns (bool _exists);

function approve(address _to, uint256 _tokenId) public;
function getApproved(uint256 _tokenId)
public view returns (address _operator);

function setApprovalForAll(address _operator, bool _approved) public;
function isApprovedForAll(address _owner, address _operator)
public view returns (bool);

function transferFrom(address _from, address _to, uint256 _tokenId) public;
function safeTransferFrom(address _from, address _to, uint256 _tokenId)
public;

function safeTransferFrom(
address _from,
address _to,
uint256 _tokenId,
bytes _data
)
public;
}

*1





メソッドのなかにownerOfだったり、approvalだったりがある。
引数には送受信アドレスとtokenIDが必要なことから、送受信のアドレスとtokenIDがコントラクトに含まれるため、
それらを利用、判定したアプリケーションが構築できることが確認できた。

次回はPlasma cashとライトニングネットワークの違いをきちんとまとめつつ、ERC721ベースのDEXの進捗を書いてみるかしら。。。

bitFlyer ビットコインを始めるなら安心・安全な取引所で