June 10, 2026

Capitalizations Index – B ∞/21M

cryptoZombies 教學 Lesson5-Day12 – Howard Wang – Medium

Cryptozombies 教學 lesson5-day12 – howard wang – medium

cryptoZombies 教學 Lesson5-Day12 – Howard Wang – Medium

Cryptozombies 教學 lesson5-day12 – howard wang – medium

在這堂,我們會解說各種不一定的Token,像常見的ERC20,ERC721以及ERC721x,都懂了之後就能交易我們的殭屍了喔.

Chapter 1: Tokens on Ethereum

相信大家都有在以太上聽過Token, 最常見的ERC20 Token等等.

Token是什麼呢: Token就是一個遵守一些共同規則的智能合約,這句話或許很繞口,不過看看例子,最常見的通常會遵守transferFrom(address _from, address _to, uint256 _tokenId)and balanceOf(address _owner) ,以及在合約內部都會有mapping(address => uint256) balances ,

第一個function 帶有Token從哪來,要給誰,是哪種Token.

第二個function 這個合約擁有者有多少餘額.

還會有個映射來記錄餘額.

所以Token簡單來說就是一個智能合約可以追蹤誰擁有了多少Token以及可以交易這些Token.

Why does it matter?

由於ERC20 Token都擁有一樣名稱的function就可以一樣的方式進行互動.

也就是說你可以自己使用ERC20的技術創造一個Token就可以與任何也用ERC20技術的Token進行交易.並且ERC20都有既定程式碼,只要複製改下Token名稱,你也能創造Token.

亦或是像交易所,可以插入新的Token地址,這樣交易所就能多購買一種Token了

Disadvantage for ERC20

ERC20在Token方面對人們來說是一件很酷的技術,不過以殭屍遊戲的例子來說,卻不是個好工具,大家都知道你可以只購買0.26個ETH,但是卻不能只購買0.49個殭屍吧.

並且不是所有的殭屍都是一樣的吧,你不想你的99等殭屍與1等殭屍做同等交換吧

ERC721 Token

所以這時候就有了一個新的技術稱為ERC721, 他假設每樣Token都是獨特的並且都擁有自己的ID,也就是說不能進行交換,而且要購買時只能一次買走全部而不能只購買一半.這對我們殭屍的交易來說是一件好事

並且使用這樣的規範,我們不用自己識做一個拍賣所,只要我們符合規範,就可以上架在交易平台進行拍賣,統一管理會比我們自己實作來的乾淨明瞭.

Putting it to the Test

這堂課是要實作ERC721的合約

  1. 宣告Solidity版本號
  2. 匯入zombieattack.sol.
  3. 繼承ZombieAttack.

答案如圖1–1

圖1–1

Chapter 2: ERC721 Standard, Multiple Inheritance

我們先來看ERC721的標準

contract ERC721 

可能現在還不是很了解也很繁雜,不過在往後章節我們都會一步一步帶著你實現製作一個ERC721的合約:)

Implementing a token contract

在製作ERC721合約時,都必須匯入ERC721文件,並且多載這些function ,不過妳一定有個疑問,我們原本的合約不是已經繼承上一份合約了嗎,要怎麼在繼承一個呢,在Solidity中,擁有了多重繼承的能力,所以你可以不只繼承一份合約呢(是不是很像我們的殭屍一樣,可以繼承很多食物的能力呢XD)

contract SatoshiNakamoto is NickSzabo, HalFinney 

而語法就像上述所寫,以逗號隔開即可.

Putting it to the Test

  1. 匯入ERC721文件
  2. 繼承ERC721合約

答案如圖2–1

圖2–1

Chapter 3: balanceOf & ownerOf

首先我們要先實作最基本的兩個function ,balanceOf ownerOf

balanceOf :function balanceOf(address _owner) external view returns (uint256 _balance); 將可見度設為external 並且使用view 來返回餘額,還記得為甚麼嗎(Hint:GAS),在殭屍的例子中,為輸入擁有者的地址,返回殭屍數量.

ownerOf: function ownerOf(uint256 _tokenId) external view returns (address _owner); 傳入TokenID,在殭屍的例子中,TokenID為殭屍的ID,返回殭屍的主人.

Putting it to the Test

還記得之前的合約有設置mapping 來儲存殭屍的數量以及擁有者嗎,如果忘記了請去找找zombiefactory.sol

  1. 在合約內實作balanceOf 以及ownerOf

答案如圖3–1

圖3–1

Chapter 4: Refactoring

這裡有個壞消息告訴各位,還記得我們之前有實作過一個modifier 叫做ownerOf 吧,我們在上一章節也引用了ERC721裡的ownerOf function ,這樣當你編譯之後就會產生錯誤,那你會想說,我們更改ERC721裡面的function 名字就好啦,這樣就不符合ERC721的規範,別人也無法以ERC721規範來使用這個合約,所以我們要更改ownerOf modifier 的名字.

Putting it to the Test

  1. zombiefeeding.sol 中的ownerOf modifier 改為onlyOwnerOf.
  2. 將有使用到這modifier 都更改為正確名稱.

答案如圖4–1

圖4–1

Chapter 5: ERC721: Transfer Logic

ERC721中有兩種交易Token的方式.

  1. function transferFrom(address _from, address _to, uint256 _tokenId) external payable;

第一種方式為想賣Token的人會傳入自己的地址,對方的地址,TokenID

  1. function approve(address _approved, uint256 _tokenId) external payable;
  2. function transferFrom(address _from, address _to, uint256 _tokenId) external payable;

第二種方式為賣家先傳自己的地址,對方的地址,TokenID到一個名為approvefunction ,之後用mapping (uint256 => address)儲存被承認的買家地址,買家以及賣家可以去呼叫第二個transferFrom ,而transferFrom 會先驗證你是否在mapping 裡面,如果在mapping 裡面才能取得Token.

第一種通常為Token的擁有者呼叫,而第二種通常為Token的接收者呼叫

Putting it to the Test

讓我們來定義一個 _transfer

  1. 定義ㄧ_transfer function 帶有三個參數address _from, address _to, and uint256 _tokenId 並且將可見度設為private
  2. function 首先要將對方的殭屍數量增加並且減少擁有方的數量
  3. 再來要將殭屍的主人名字改成買方.
  4. 最後因為在ERC721文件中, transfer 為一 event ,所以我們可以使用 emit 將他廣播出來.

答案如圖5–1

圖5–1

Chapter 6: ERC721: Transfer Cont’d

Putting it to the Test

  1. 新增一個mapping(uint => address) zombieApprovals 來儲存可呼叫transferFrom的地址,如果有人呼叫了這個transferFrom function 就可以快速檢查他是否在名單上了
  2. transferFrom 新增require 檢查住址是否為擁有者或是買家地址.
  3. 最後,別忘了呼叫_transfer

答案如圖6–1,6–2

圖6–1
圖6–2

Published at Sun, 24 Feb 2019 13:56:23 +0000

Previous Article

Bitcoin [BTC] worth $300,000 stolen by scammers in email-based “Sextortion” racket |

Next Article

Bitcoin Breaks Down = Retrace (Support Where? $3740 – $3665 Firs

You might be interested in …

Bitcoin Core 0.17.0 Released

bitcoin Core 0.17.0 Released bitcoin Core version 0.17.0 is now available for download containing many new features as well as bug fixes and other improvements. For a complete list of changes, please see the release […]

East West Blockchain Conference II

East West Blockchain Conference II DESCRIPTION The annual East West Blockchain Conference II is arriving November 15 2018!  This year, the conference will explore several key trends that are shaping the industry from the perspective of […]