蔡明 云峰 阿娜呼 谷仕威 戴梓軒
摘要:由于以第三方交易平臺為中心的擔(dān)保交易難以保障擔(dān)保資金的安全,該文基于以太坊ERC721區(qū)塊鏈技術(shù)設(shè)計了商品鏈交易結(jié)構(gòu)來存儲商品交易數(shù)據(jù),通過追溯商品制造商和擁有者的交易數(shù)據(jù)來執(zhí)行假貨鑒別。保障交易數(shù)據(jù)不可篡改的同時,提高了假貨整別的查詢效率。本文設(shè)計了去中心化的擔(dān)保機制,基于智能合約ERC721標(biāo)準(zhǔn)化接口,將商品以非同質(zhì)化Token的形式發(fā)布,由于ERC721的性質(zhì),每當(dāng)Token被請求交易的時候都將廣播此條交易信息。由此實現(xiàn)資金轉(zhuǎn)移流程的不可篡改性,從而保障資金安全。
關(guān)鍵詞:區(qū)塊鏈;商品溯源;以太坊
中圖分類號:TP3? ? ? ? 文獻標(biāo)識碼:A
文章編號:1009-3044(2019)25-0246-04
1 區(qū)塊鏈的背景及現(xiàn)狀
當(dāng)下社會,以淘寶京東為首的電商交易平臺以網(wǎng)絡(luò)購物足不出戶便能買到各種商場買得到甚至買不到的東西而飛速發(fā)展,從最初的不信任網(wǎng)絡(luò)交易到現(xiàn)在把網(wǎng)購當(dāng)作家常便飯,電商極大程度的方便了我們的生活和工作。網(wǎng)購的群體似乎全體默認(rèn)似的相信這些電商平臺,放心地把資金交給第三方平臺作為和商家的媒介,確認(rèn)收貨后由第三方將資金轉(zhuǎn)交給商家,然而事實上這些商家也做得不錯,不然也無法贏得網(wǎng)民的信任。但是這終究是中心化的交易模式,一旦這些平臺出現(xiàn)信譽問題或者內(nèi)部漏洞,損失將無法避免。
同時存在的一個問題,商品的真假更加難以辨識,在實體店看得到摸得著的商品尚且大多數(shù)人都難以辨別真假,透過屏幕和網(wǎng)絡(luò)所進行的交易就更加困難。經(jīng)調(diào)查顯示,近半用戶都將商品質(zhì)量差,為仿制品作為對交易不滿意原因的首選。受限于中心化,各平臺對商品整合能力有限,對商品真假的辨別以及來源的辨別都存在較大的問題,同時一旦中心數(shù)據(jù)庫遭到攻擊,數(shù)據(jù)就存在著被篡改刪除的風(fēng)險。這是中心化存在的另一大問題。
僅僅優(yōu)化銷售中心對于解決根本問題是杯水車薪,最好的方法就是去中心化,去中心化的交易環(huán)境可以提供無須信任的交易模式,可以保障交易數(shù)據(jù)以及商品來源不可篡改,不需要第三方交易平臺即可實現(xiàn)真正的信任。同時購買商品的顧客可以通過區(qū)塊鏈追根溯源找到商品來源,辨別真假。
2008年中本聰最先提出了比特幣的機制,用于存儲比特幣的區(qū)塊鏈技術(shù)開始在各個領(lǐng)域被廣泛地應(yīng)用,同樣,在產(chǎn)品追根溯源方面也有著重要的作用??勺匪輸?shù)據(jù)是假貨鑒別的基礎(chǔ),然而現(xiàn)行傳統(tǒng)的供應(yīng)鏈可篡改、不透明、節(jié)點之間不同步等特性使得數(shù)據(jù)的可追溯十分困難。而區(qū)塊鏈技術(shù)不同于傳統(tǒng)的技術(shù),區(qū)塊鏈技術(shù)憑借工作量證明的共識機制,通過節(jié)點之間的算力競爭保證分布式數(shù)據(jù)的同步,去中心化使得數(shù)據(jù)不可篡改,賬簿公開,商品的來源更好追溯。
目前有一種常見防偽方式,就是“易損標(biāo)簽法”,通過簡單的刮刮卡印刷,印上商品唯一查詢編號,用戶通過刮開操作,破損標(biāo)簽后獲得編號,通過查詢編號或者商品的真?zhèn)危到y(tǒng)通過查詢次數(shù)記錄反饋給消費者,如果某個標(biāo)簽被查詢過,可以視為商品被打開過或者是假貨。
另一種防偽方式便是二維碼防偽,二維碼防偽采用二維碼加密技術(shù)給產(chǎn)品做標(biāo)識,將二維碼印刷或標(biāo)貼于產(chǎn)品包裝上,用戶只需通過指定的二維碼防偽系統(tǒng)或手機軟件進行解碼檢驗,即可驗證產(chǎn)品真?zhèn)?,獲得詳盡的信息。缺點在于二維碼本身并不能防偽,需要有一個手機APP應(yīng)用端和企業(yè)商品信息數(shù)據(jù)庫才能實現(xiàn)防偽的效果。原理是通過給每個商品分配一個唯一的二維碼,并運用不可復(fù)制的材料印刷技術(shù)來確保二維碼不能夠被復(fù)制,消費者在購買商品時通過下載手機APP查詢二維碼,核對商品信息、制造企業(yè)等信息即可辨別真?zhèn)?,增加了防偽成本,而且仍然存在造假?/p>
2016年沃爾瑪和清華大學(xué)合作,利用區(qū)塊鏈技術(shù)對食品進行追蹤,銷售給中國消費者,使沃爾瑪在全世界范圍內(nèi)對食品進行追蹤溯源,快速解決食品不安全問題。目前通過區(qū)塊鏈溯源的包括中國的豬肉和美國的包裝產(chǎn)品,這是目前最大型的區(qū)塊鏈技術(shù)的應(yīng)用實例。目前一些國家已將區(qū)塊鏈技術(shù)應(yīng)用于房屋產(chǎn)權(quán)證明領(lǐng)域。
2 區(qū)塊鏈相關(guān)技術(shù)及原理分析
2.1 區(qū)塊鏈性質(zhì)
2.1.1 去中心化
區(qū)塊鏈技術(shù)是比特幣和加密傳輸?shù)幕A(chǔ)技術(shù),中心問題是解決沒有值得信任的中心化結(jié)點的情況下,網(wǎng)絡(luò)中各個小節(jié)點如何實現(xiàn)相互信任,達成共識。區(qū)塊鏈被形象地稱為分布式賬本,原因就在于每一個節(jié)點都有著完全相同的所有交易數(shù)據(jù),而且沒有中心節(jié)點,也就意味著所有的節(jié)點都是中心節(jié)點,改變其中一個節(jié)點的數(shù)據(jù)并不會被其他節(jié)點所承認(rèn),除非掌握一半以上的節(jié)點,但這是一項龐大的工程,幾乎不可能完成。因此,區(qū)塊鏈去中心化的技術(shù)很好地解決了信任問題,那就是用算法取代中心。由于不存在中心節(jié)點,交易的成本也大幅度降低,促進了交易率的提高。
2.1.2 匿名性
在交易過程中,所有的交易信息都被完全公開,任何用戶都可以查詢所有的交易數(shù)據(jù),交易信息完全透明,但是出于隱私要求,用戶賬戶信息并不會被公開,區(qū)塊鏈技術(shù)有對應(yīng)的加密算法來完成,將賬戶信息加以保護,未經(jīng)允許無法訪問。區(qū)塊鏈技術(shù)的共識機制保證交易記錄真實有效,需要多個節(jié)點達成共識才能確保交易記錄真實有效。后續(xù)的合約機制當(dāng)達到特定條件自動執(zhí)行合約條款。區(qū)塊鏈技術(shù)中,顧名思義,數(shù)據(jù)以塊的形式進行存儲,塊塊相連,互相有一定的紐帶關(guān)系,下一個區(qū)塊保存著上一塊的哈希值,一旦從中刪除或修改某一塊,都會造成不可兼容,因此區(qū)塊鏈技術(shù)有著很好的不可篡改性。
2.1.3 不可篡改
區(qū)塊鏈技術(shù)的核心是當(dāng)前的鏈上所有結(jié)點共同維護鏈上存儲的交易信息,交易的基礎(chǔ)是密碼學(xué)而不是信任,任何用戶想要交易都不需要經(jīng)過第三方直接交易。從技術(shù)角度來講,所有完成的交易記錄都會串成一條主鏈,包含若干區(qū)塊,每個區(qū)塊保存交易信息、前一塊的哈希散列值、隨機數(shù),交易信息是交易雙方的交易額、數(shù)字簽名等;前一塊的哈希值目的是形成塊之間相互聯(lián)系的紐帶,保證不可篡改性;隨機數(shù)是交易的核心,所有礦工節(jié)點,共同計算這個隨機數(shù),計算成功的就擁有這一塊的記賬權(quán),并在網(wǎng)絡(luò)中進行廣播,完成交易。從本質(zhì)上通俗地說,區(qū)塊鏈?zhǔn)且粋€巨型的所有用戶都參與進去的數(shù)據(jù)庫,所有參與其中的礦工對節(jié)點信息進行驗證來找到正確的區(qū)塊進行交易存儲。這個鏈?zhǔn)浇Y(jié)構(gòu)隨著時間的增加而不斷延長,每個參與的節(jié)點都有一份完整的備份記錄,這些都是自動完成的。通過區(qū)塊鏈技術(shù),當(dāng)用戶想驗證歷史交易信息或商品溯源時,只要通過基于數(shù)據(jù)結(jié)構(gòu)的密碼學(xué)運算就能找到對應(yīng)的區(qū)塊,驗證產(chǎn)品真?zhèn)?,驗證來源是否可靠。
2.2 區(qū)塊鏈運行機制
2.2.1 智能合約
一種以信息化方式傳播、驗證或者執(zhí)行合約的計算機協(xié)議,能夠允許在沒有第三方的情況下進行可信的交易,并且這些交易是無法被追蹤、同時也是不可逆的。通過 POW 實現(xiàn)了 分布式一致性,同時使用 UTXO 模型 存儲和管理底層數(shù)據(jù)結(jié)構(gòu),實現(xiàn)了去中心化的分布式賬本,并且在一定程度上實現(xiàn)了『可編程』這一特點,但是它的腳本機制非常簡單,只是一個基于堆棧式的腳本語言。
2.2.2 非對稱加密
非對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數(shù)據(jù)進行加密,只有用對應(yīng)的私有密鑰才能解密;如果用私有密鑰對數(shù)據(jù)進行加密,那么只有用對應(yīng)的公開密鑰才能解密。主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(橢圓曲線加密算法)。使用最廣泛的是RSA算法,Elgamal是另一種常用的非對稱加密算法。
2.3 ERC721技術(shù)
ERC721是針對不可置換Token的智能合約標(biāo)準(zhǔn)接口,(non-fungile tokens)不可置換Token簡稱NFTs,操作標(biāo)準(zhǔn)API的實現(xiàn)方法。在ERC721標(biāo)準(zhǔn)下生成的token(在本項目中每寫入一件商品相當(dāng)于生成一個token)具有不可置換,獨一無二的特性,由于這種特性,在每次token交易發(fā)生時,系統(tǒng)都會廣播該token交易的雙方以及是哪條token被交易。該特性非常有利于交易追溯。
3 基于區(qū)塊鏈的商品交易鏈設(shè)計
3.1 商品鏈體系模型
本章主要說明基于區(qū)塊鏈的商品交易模式和假貨識別系統(tǒng)的核心技術(shù),并同時建立相應(yīng)模型。該商品鏈主要涉及的環(huán)節(jié)有:商品生產(chǎn)環(huán)節(jié),商品銷售環(huán)節(jié),二手交易環(huán)節(jié)。主要的關(guān)鍵技術(shù):基于ERC721的真?zhèn)巫R別功能,交易擔(dān)保。致力于如何完成可追溯源頭的真假鑒別,去中心化的擔(dān)保交易。 商品的真?zhèn)巫R別主要分為兩個方面來實現(xiàn),第一方面為商品的追根溯源,當(dāng)你查詢一件商品的來源時,可以逆著商品鏈,查詢到這個商品的各級供貨商,也就是這件商品的整個供貨渠道,然后繼續(xù)追溯的話可以追溯到這件商品的生產(chǎn)源頭,以及該商品各級原材料的源頭,來確保該商品本質(zhì)上的安全可靠。第二方面是商品的歸屬性查詢,由于是基于ERC721產(chǎn)生的商品token都具有唯一性,所以該token每次的交易記錄都會被系統(tǒng)廣播,被所有用戶見證交易,所以可以查詢到token 的完整流通路徑,可通過此被見證的路徑驗證其真?zhèn)危绻u家不在該token流通路徑尾端,則可判定為該商品為假。
擔(dān)保交易主要通過區(qū)塊鏈的去中心化的特性來實現(xiàn),先編寫智能合約,然后將所有的交易流程通過智能合約的ERC721標(biāo)準(zhǔn)接口來寫入?yún)^(qū)塊鏈中,這樣就實現(xiàn)了去中心化的交易擔(dān)保,可以有效地防止第三方篡改交易內(nèi)容。
3.2 基于區(qū)塊鏈的假貨鑒別
商品的真?zhèn)巫R別主要分為兩個方面來實現(xiàn),第一方面為商品的追根溯源,當(dāng)你查詢一件商品的來源時,可以逆著商品鏈,查詢到這個商品的各級供貨商,以及該商品各級原材料的源頭。在ERC721標(biāo)準(zhǔn)下,每次商品token被交易,系統(tǒng)都會廣播交易信息,所以用戶還可以通過自己商品的獨一無二的token來查詢廣播日志來查詢該商品的流通記錄,由于所有廣播都是所有用戶共同見證的,所以該廣播日志也具有不可篡改的性質(zhì)。這樣就形成了交易鏈及token交易日志雙查詢的雙保險機制,保證了用戶查詢商品真?zhèn)蔚目煽啃?。第二方面是商品的歸屬性查詢,因為該商品一直在該商品鏈上流通,如果你查詢到商品歸屬權(quán)現(xiàn)在不在你的賣家哪里,但他仍出售這件商品,則可判定為該商品為假。因為該技術(shù)涉及追溯查詢的效率,應(yīng)該對該商品鏈的結(jié)構(gòu)進行優(yōu)化。
3.2.1 比特幣交易結(jié)構(gòu)
比特幣系統(tǒng)是沒有余額的概念的,它使用的是UTXO模型(Unspent Transaction Outputs,未使用過的交易輸出),我們在交易過程中經(jīng)常說的錢包余額,實際上是一個錢包地址的UTXO集合。所以,在比特幣網(wǎng)絡(luò)中,存儲比特幣余額的是交易輸出,準(zhǔn)確點說就是未使用過的交易輸出,而每一筆交易的輸入實際上引用的是上一筆交易的輸出。下圖是比特幣系統(tǒng)中交易輸入輸出的過程:
由于比特幣比特幣對賬戶地址和交易地址都做了索引,所以上述操作可以快速地執(zhí)行,但是在假貨鑒別的背景下,要頻繁的通過商品id來查詢交易記錄,將商品變成比特幣后,比特幣的utxo結(jié)構(gòu)并不能提供快速的查詢操作。由于缺少索引,所以要想完成查詢操作,就要對所有區(qū)塊進行遍歷操作,這明顯是不現(xiàn)實的。所以為了能滿足我們高頻查詢的要求,我們要對比特幣交易結(jié)構(gòu)進行一定的改進。
3.2.2 商品鏈交易結(jié)構(gòu)
(1)交易塊:每發(fā)生一筆交易,買方就會創(chuàng)建一個交易塊來記錄交易數(shù)據(jù)。交易塊主要由塊數(shù)據(jù)(Block Data)和交易流數(shù)據(jù)(Tx Stream Data)兩部分組成。塊數(shù)據(jù)用于記錄交易塊的屬性數(shù)據(jù),例如該塊記錄的是哪件商品(Product ID)、由哪一個用戶產(chǎn)生(Owner Address)、交易塊的創(chuàng)建時間(Create Time)等;交易流數(shù)據(jù)用于記錄與交易直接相關(guān)的數(shù)據(jù),例如該商品的上一擁有者的賬戶地址(Up Owner Address)、下一擁有者的賬戶地址(Down Owner Address)、交易金額(Price)等。
(2)商品鏈:在一件商品完整的生命周期中,每被交易一次,就會產(chǎn)生一個交易塊,把一件商品的所有交易塊按照它的產(chǎn)生順序鏈接起來,就是一條商品鏈。由于該商品鏈記錄了前后交易的信息,所以該商品鏈類似于數(shù)據(jù)結(jié)構(gòu)中的雙鏈表結(jié)構(gòu),可以快速方便的追溯生產(chǎn)商的信息,同時也能向尾部追加交易信息。
該商品鏈保留了比特幣交易鏈的通過交易地址查詢交易信息的功能的同時,還可已通過商品的id快速高效的查找出該商品所在鏈,進而查詢出該商品的所有交易方。
塊數(shù)據(jù)和商品交易流的數(shù)據(jù)在追尋數(shù)據(jù)來源和商品所有權(quán)是有著至關(guān)重要的作用。將商品鏈通過雙鏈表和數(shù)組兩種數(shù)據(jù)結(jié)構(gòu)儲存,在查詢時無論是隨機查詢還是根據(jù)某個交易塊來查詢其他交易塊,查詢的效率都很高。通過該商品鏈結(jié)合比特幣交易結(jié)構(gòu)的特點和本身的id索引。就可以通過商品id和交易地址快速的定位交易區(qū)塊,進而就可進行整條鏈的交易數(shù)據(jù)查詢。通過這種特殊的結(jié)構(gòu),就能很高效的在海量商品交易信息中獲取到目標(biāo)商品的所有交易信息,進而提高假貨查詢的效率。
3.3 擔(dān)保交易
本交易體系采用智能合約的形式來代替?zhèn)鹘y(tǒng)的第三方平臺擔(dān)保。我們的優(yōu)勢在于,我們可以將擔(dān)保交易的仲裁結(jié)果與結(jié)算規(guī)則寫入?yún)^(qū)塊鏈中,使其獲得不可篡改的特性,這種特性可以使擔(dān)保交易的可靠性和安全性大大提高。
3.3.1 擔(dān)保交易雙方
在我們的商品鏈中,主要分為兩類用戶,一類為交易用戶,一類為商品制造商。交易用戶可執(zhí)行除了商品制造的所有操作,包括:定價、付款、發(fā)貨時申請 token、確認(rèn)收貨等操作。而商品制造商的操作有:注冊商品(只有被注冊過的商品才能被交易)
3.3.2 擔(dān)保交易流程
擔(dān)保交易通過買家付款的操作來激活執(zhí)行,買家付款的金額暫存在智能合約的合約賬戶中進行擔(dān)保,只有符合仲裁和結(jié)算的規(guī)則時,才會發(fā)生資金的轉(zhuǎn)移,將資金付款給賣家。這樣去信任性的擔(dān)保更為安全,可以有效避免人為的惡意操作。
在賣家發(fā)貨時,會生成一個隨機的token,該token會和商品一起發(fā)送給買家,該token的用途有如下幾條:1.匿名銷售功能,買家可以通過token來驗證商品的真?zhèn)?,不需要通過賣家的id和地址,所以不會暴露賣家的身份。2. 防止非法用戶銷售商品。在申請 token 時,智能合約會判斷當(dāng)前商品所有權(quán)是否歸屬于當(dāng)前申請人。由于只有商品的當(dāng)前擁有者才可申請 token,而非法用戶不具有該身份,導(dǎo)致其無法申請 token。由于缺少正確的 token,買方就可在交易初期識別非法商販,節(jié)省交易成本。
在買方確認(rèn)收貨時,智能合約會進行如下操作:(1)驗證token,判斷商品歸屬權(quán)是否為當(dāng)前賣家。(2)驗證制造商,核實商品來源是否屬實合法。(3)更新交易信息,轉(zhuǎn)移商品歸屬權(quán)。至此,交易完成,如果所有步驟符合智能合約規(guī)定,暫存到合約賬戶的金額將會打款給賣家。
3.3.3 擔(dān)保交易的仲裁結(jié)算模型
模型主要需要解決的問題是交易雙方在發(fā)生糾紛時如何進行仲裁和結(jié)算的問題。仲裁操作在買家收貨的時候觸發(fā),首先點時器判斷收貨是否超時未執(zhí)行,若超時后買家未操作,則把在合約賬戶的錢轉(zhuǎn)入賣家賬戶。如果在期限內(nèi)進行收貨操作,則合約執(zhí)行假貨鑒別的流程,如果鑒定結(jié)果為假,則把錢退回買家賬戶中,如果鑒定結(jié)果為真,則把錢匯入賣家賬戶中,視為交易成功。
4 區(qū)塊鏈可信溯源解決方案的設(shè)計與實現(xiàn)
在現(xiàn)有區(qū)塊鏈的基礎(chǔ)上,本項目基于以太坊智能合約, 實現(xiàn)商品可信溯源,在服務(wù)端運用SpringMVC,實現(xiàn)商品溯源查詢,前端運用Javascript通過HTML展示所查詢的結(jié)果,智能合約則使用以太坊自己的語言Solidify 將每一件商品信息和ID存在以太坊區(qū)塊鏈上。
4.1 開發(fā)環(huán)境
Windows 10
Geth v1.8.23-
solidity ^0.4.0
4.2 準(zhǔn)備工作
(1)安裝Ethereum錢包
(2)Geth安裝,安裝完成后執(zhí)行 geth help 查看geth的用法
4.3 初始化以太坊
(1)在本地新建genesis.json文件,通過控制臺Geth命令初始化創(chuàng)始區(qū)塊
geth init genesis.json
(2)啟動以太坊
geth --rpc --rpcapi personal,db,eth,net,web3 --networkid 666666 --rpccorsdomain ”http://remix.ethereum.org” console
(3)創(chuàng)建錢包,一種是在Ethereum圖形界面創(chuàng)建,一種是通過Geth在控制臺輸入personal.newAccount()創(chuàng)建
(4)解鎖當(dāng)前賬戶,使私鏈上的賬戶之間可以交易,通過Geth輸入
personal.unlockAccount(eth.accounts[0])
(5)開始挖礦操作,保證數(shù)據(jù)存在每一個區(qū)塊鏈結(jié)點。
miner.start(1)
4.4 部署智能合約
以太坊官方推薦的智能合約開發(fā)語言為Solidify,目前嘗試Solidify編程最好的方式是使用Remix。Remix是基于瀏覽器的Solidify IDE,它集成了Solidify編譯器、運行環(huán)境,以及調(diào)試和發(fā)布工具。使用瀏覽器打開網(wǎng)站https://remix.ethereum.org/,即可編寫智能合約代碼。
(1)編寫智能合約代碼
function register(address addr, string? username, string password) public {
}
(2)點擊Compile標(biāo)簽頁的Details,然后找到web3deploy將寫好的合約部署到本地私鏈上。
var addorsearchContract = ;
var addorsearch = addorsearchContract.new(
{
from: web3.eth.accounts[0],
data:
gas: '4700000'
}, function (e, contract){
console.log(e, contract);
if (typeof contract.address !== 'undefined') {
console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
}
})
(3)將RemixIDE生產(chǎn)的代碼拷貝到geth控制臺(注意:挖礦不能停),按下回車鍵運行就可以部署合約了。合約部署成功會有提示,
Contract mined! Address:0x9d77720ad98139952b33ff7de812957af811b09f
4.5 Java開發(fā)
使用maven管理 利用web3j庫進行開發(fā)
4.6 服務(wù)端開發(fā)
使用SpringMVC在Web端實現(xiàn)查詢注冊功能
4.6.1 追溯產(chǎn)品的制造商
根據(jù)伴隨該商品的唯一ID,擁有查詢權(quán)限查詢方通過前端可以追溯到商品鏈鏈?zhǔn)讈聿樵冊撋唐返男畔ⅰ?/p>
輸入:productID,name
輸出:companyInfo
4.6.2 判斷查詢方是否有權(quán)限查詢商品的制造商
鑒別假貨要通過追溯商品的制造信息和商品的所有權(quán)信息來判斷商品的銷售信息是否屬實。追溯商品制造商時,部分用戶可能會隱藏商品的來源。為了保護用戶的隱私,商品擁有者才有權(quán)限查詢商品制造商的信息。
輸入:商品唯一ID 和 商品品牌
輸出:查詢方是否有權(quán)限。
4.6.3 追溯商品的所有權(quán)
根據(jù)該商品的商品鏈,擁有查詢權(quán)限查詢方可以追溯到商品鏈鏈尾來查詢該商品的所有權(quán)。
4.6.4 通過商品token追溯商品的交易流通記錄
根據(jù)商品注冊時根據(jù)ERC721標(biāo)準(zhǔn)產(chǎn)生的商品唯一token,該token擁有者可查詢改商品的所有交易記錄。
輸入:商品token和用戶id
輸出:該token交易記錄
4.6.5 生產(chǎn)方和交易方
用戶的身份信息以合約UserContract的方式來實現(xiàn)。生產(chǎn)方注冊時需要填寫company字段,而交易方則無需填寫此字段。
4.6.6 擔(dān)保交易流程
商品交易的相關(guān)操作以BlockContract交易塊的形式管理。交易塊由塊數(shù)據(jù)和交易流數(shù)據(jù)兩部分組成。塊數(shù)據(jù)包含了交易塊的基本屬性,交易流數(shù)據(jù)包含了交易相關(guān)的數(shù)據(jù)。商品交易狀態(tài)有OnSale(銷售中),OffSale(未銷售)和Abort(廢棄)。商品交易前,生產(chǎn)方需要注冊其生產(chǎn)的商品。
生產(chǎn)商完成商品信息的注冊后,此商品的商品鏈就被創(chuàng)建完成,便可以交易了。交易中,賣方需要對其商品定價,并將商品的交易狀態(tài)改為OnSale。
買方付款時,所付金額不能低于賣方定價,否則交易失敗。若買方成功付款,將其金額暫存到智能合約中進行擔(dān)保。只有交易正常結(jié)束后,擔(dān)保資金才會支付給賣方。
買方付完款后,賣方需發(fā)貨,在發(fā)貨時會隨機生成一個獨一無二的token。
4.6.7 仲裁和結(jié)算
買方收到商品和token后,便可以確認(rèn)收貨。為了防止買方不主動發(fā)起確認(rèn)收貨,而影響正常交易的完成,在買方收貨后,會觸發(fā)定時器,若在規(guī)定時間買方未確認(rèn)收貨,智能能合約中的擔(dān)保資金會因超時轉(zhuǎn)至賣方。
部分代碼:
@Controller
public class UserController {
@RequestMapping("login")
@ResponseBody
public boolean login(HttpServletRequest request, HttpServletResponse response) throws Exception {
}
5 總結(jié)
本文主要以區(qū)塊鏈技術(shù)和供應(yīng)鏈為研究背景,基于以太坊區(qū)塊鏈技術(shù)設(shè)計了可追溯供應(yīng)鏈和去中心化的交易體系。提出了一種基于ERC721區(qū)塊鏈技術(shù)的去中心化供應(yīng)鏈交易體系,將每一個商品賦予一個非同質(zhì)化的token,將供應(yīng)鏈交易所產(chǎn)生的交易數(shù)據(jù)存儲于區(qū)塊鏈中,同時該token廣播交易日志的存在,可雙重保障交易數(shù)據(jù)的可追湖性和不可篡改性,在此基礎(chǔ)上通過對商品制造商和擁有者的追溯和追蹤實現(xiàn)了假貨鑒別。同時,本交易體系使用智能合的代替了傳統(tǒng)第三方交易平臺來進行交易擔(dān)保,該去信任化機制更可地保護了交易資金的安全。
參考文獻:
[1] 陳西蒙. 基于區(qū)塊鏈的供應(yīng)鏈交易和假貨鑒別的關(guān)鍵技術(shù)研究[D].華南理工大學(xué),2018.
[2] 鄧偉. 商業(yè)銀行視閾下區(qū)塊鏈技術(shù)的應(yīng)用分析[D].首都經(jīng)濟貿(mào)易大學(xué),2017.
[3] 郭珊珊. 供應(yīng)鏈的可信溯源查詢在區(qū)塊鏈上的實現(xiàn)[D].大連海事大學(xué),2017.
【通聯(lián)編輯:代影】