以太坊 ERC875 示例分析:一手交幣,一手交證

網絡上有不少關於用以太坊 ERC875 標準發貨的文章,比如這篇:《深入淺出以太坊 ERC875 標準(不可替代性通證標準)》http://8btc.com/article-4614-1.html

不過很多文章都沒有從技術實現角度清晰地解析 ERC875 標準主要用來做什麼,解決什麼問題。爲了獲得更精準一些的理解,可以研究該標準的示例代碼。

示例代碼:

https://github.com/alpha-wallet/ERC875-Example

合約代碼文件:

ERCTokenImplementation.sol

APP 代碼文件:

TradeImplementationExample.java

智能合約代碼和 APP 工具代碼的分析閱讀需要一些編程基礎,感興趣的讀者可以讀一讀或部署運行試一試。

關鍵的部分其實是如何把商品 Token 化 ,如何保證 TokenID 和實際的商品是一對一的,這些屬於問題分析過程,與編程實現關係不大。

需要特別注意的是, 在以太坊上交易和轉讓的只是商品的 TokenID,相當於是物權證明,並不是物品本身。 買家如何獲得實際物品,是需要在現實世界中完成的,而不是虛擬的區塊鏈世界。

現實世界和虛擬世界需要靠人類自身的行爲活動來連接。若用 ERC875 標準來交易類似遊戲道具之類的虛擬資產,也許是有一些創意的。

技術手段能實現的核心功能如下:

1、部署一個智能合約(合約代碼是開源的,以獲得信公衆的信任),把貨物或商品 Token 化,形成與之對應的唯一 TokenID,記錄在物品擁有者的以太坊賬戶地址下,一個地址下可以記錄多件物品的 TokenID,形成資產列表。

2、當物品擁有者需要把物品賣出去的時候(可以一次售賣多件物品),就 用自己的私鑰簽名 (售賣總額,成交有效期限,售賣的物品 TokenID 列表,合約地址),然後把簽名數據通過各類渠道公佈出去。

3、買家通過各類渠道得到賣家的簽名信息後,在某些 APP 工具的幫助下,從簽名數據中恢復出物品 TokenID 列表與價格信息,以及 V、R、S 簽名參數,通過這些參數構造一筆以太坊交易,攜帶與簽名信息中的交易總額等值的以太幣,發送到對應的合約地址。

合約中的代碼被交易觸發運行後,會調用 ecrecover 函數驗證傳入的簽名參數是否正確,並求出賣家的地址信息。從賣家地址下登記的資產列表中找出本次售賣對應的每件商品的 TokenID,並轉移登記到買家地址下的資產列表中,買家成爲這批物品的新主人。

對於同一份售賣簽名信息,可以同時有多個買家,這時候遵循先買先得的原則,一手交幣,一手交貨(物權證明),乾脆利索。

作者:Karl 嘉楠區塊鏈研究院高級研究員

嘉楠區塊鏈:嘉楠耘智(Canaan Inc.)旗下區塊鏈板塊。

熱文搶讀:

1、對可驗證隨機函數 VRF 的簡明解釋

2、Byteball 技術剖析之一:DAG 賬本與最優樹

以太坊 ERC875 示例分析:一手交幣,一手交證