iT邦幫忙

2022 iThome 鐵人賽

DAY 18
1
Web 3

那些關於 Ethereum 的事系列 第 18

ERC721A 的改進

  • 分享至 

  • xImage
  •  

ERC721A 的改進

ERC721A 官方說明

標準的 ERC721 因為是透過一個 mapping 把 tokenId 跟 address 連結在一起,因此在鑄造與儲存資訊時,就會是使用以下的方式來實作:

Token ID Owner
0 Alice
1 Bob
2 Alice
3 Alice
4 hydai
5 hydai

每一個 Token ID 都必然會對應到一個 Owner,因此在鑄造的時候每購買一個 NFT 就得花費一次寫入的成本。

而 ERC721A 的改進就從這裡切入,試圖提供一個減少燃料手續費的解決方案。

新的儲存方式

X 代表留空

Token ID Owner
0 Alice
1 X
2 X
3 Bob
4 hydai
5 X

今天當我們一次性購買多個 NFT 時,ERC721A 不再每個 Token ID 都寫入擁有者資訊,而是把它留空。
比如說 Alice 購買 3 個 NFT,他就把 Token ID 0 的擁有者設定成 Alice 但把 12 留空,因此當我們在查詢 12 時,他只需要往前找到第一個不為空的擁有者即可。
這樣的好處就是把購買 N 個 NFT 需要的 N 次寫入改成只需寫入 1 次,節省了 (N-1) 次寫入的燃料費用。

與 Enumeration 相比節省的費用

基本可以發現鑄造越多省越多。

交易時的代價

X 代表留空

Token ID Owner
0 Alice
1 X
2 X
3 X
4 hydai
5 X

但這樣的表示法在交易時要怎麼處理呢?
我們以上面的表格為例,若 Alice 要將 2 賣給 hydai,這時需要做兩件事情:

  1. 2 的擁有者改成 hydai
  2. 由於 3 的擁有者依然為 Alice,因此需要多寫入一次 Alice 這個擁有者資訊到 3 的格子裡
Token ID Owner
0 Alice
1 X
2 hydai
3 Alice
4 hydai
5 X

這時的燃料花費就會比普通的 ERC721 多一次的寫入。

結語

在實作上,選擇 ERC721、ERC721 Enumeration、ERC721A 等其實都是取捨問題。
只想做最基礎的功能,選 ERC721。
不管儲存的代價,想要在查詢方面容易,選 ERC721 Enumeration。
想要在鑄造時省錢,但交易時會貴一點,選 ERC721A。


上一篇
ERC721 的列舉擴充(enumeration extension)
下一篇
ERC721R - 有鑑賞期的 NFT
系列文
那些關於 Ethereum 的事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
法蘭克
iT邦新手 4 級 ‧ 2023-01-08 23:25:31

謝謝分享 之前一直搞不懂ERC721 Enumeration 跟ERC721A的差別。

我要留言

立即登入留言