張杰 安徽財經大學 管理科學與工程學院
區塊鏈的概念于2008年底與中本聰發布在比特幣論壇上,而區塊鏈則是比特幣的核心。中本聰的觀點認為目前存在的以第三方認證為核心的交易系統缺乏相互信任的問題,一旦第三方被惡意攻破,客戶端并不知道系統已經失去了安全性,如果繼續交易所有的交易都會暴漏在一個非可信的環境中。同時由于中介機構的存在會因為中間商賺取差價導致交易成本的增加。
區塊鏈系統和計算機網絡系統一樣也是一個分層的系統,可以大體上分為協議層、擴展層和應用層。不同層級間是透明的,而現在大多數的區塊鏈系統也已為開發者提供好了協議層與擴展層,開發者只需要通過應用層開發出合適的程序或是合約即可。本文是通過嘗試使用小蟻Neo區塊鏈平臺,并通過該平臺來開發出相應的合約。
作為一個版權保護系統,要針對用戶上傳上的相關文字、圖像、音視頻、二進制文件等進行區別、編碼、加密以及最后的聲明、廣播、同步區塊。因此,用戶上傳的文件如何鑒定與存儲則成為系統的設計核心,同時針對于區塊鏈平臺上用戶身份的真實性與文件的版權合法性也要有相對應的應對措施。
(一)文件的鑒定
用戶上傳的需要聲明的文件可以大體上分為兩種形式:文字和二進制文件。對于上傳的文字信息因為占用的空間較小可以直接記錄并使用用戶的私鑰進行加密,而對于較大的二進制文件來說則需要對文件進行分割與分塊,對于每一個分塊需要記錄上一個分塊的地址信息,并且使用用戶的私鑰對于每一個分塊都進行加密,這樣就可以解決系統中用戶上傳信息不同且雜亂的問題。
(二)用戶管理
與用于數字貨幣交易的區塊鏈系統一樣,新建一個用戶相當于新建一個錢包數據,該用戶數據包括用戶的真實信息、賬戶地址、公鑰等基本信息,采用json文件格式進行存儲。其中賬戶地址、公鑰私鑰都是在注冊的過程中系統分配的,在登陸的時候需要通過該json文件來授權進入系統實現相應的功能。用戶可以隨時維護自己的相關數據信息,但是賬戶地址和公鑰信息是不可變更的,相當于其可以作為用戶在區塊鏈網絡上的一個用戶識別碼。
為保證用戶身份的唯一性,需要系統在生成賬戶地址和密鑰時保持隨機性和獨立性,同時要驗證注冊者的身份證號碼與姓名的一致性。同一個用戶在真實世界和區塊鏈平臺上要做到一對一的關系,系統不允許同一個身份信息者注冊多個賬號,防止一個人通過多個賬戶來回重復聲明文件所有權導致系統側鏈增多,降低系統的安全性與穩定性。
(三)交易記錄管理
用戶可以隨時在系統中查看最近的交易記錄摘要。為保證系統的安全性,對于和自己無關的交易只能查詢到交易文件的類型和價格信息,不能對作品的內容和交易雙方的身份進行識別。而對于和自己有關的交易,可以通過相應的模塊查詢到具體的交易時間、交易方、交易金額等信息,方便自身的數據管理與維護。
此在(Dasein)就是綻出的、固執的。這樣,即使在人的固執之中,也有神秘(das Geheimnis)在背后起作用。這種神秘即是存在的真理,只不過它在最源頭處就已經被遺忘而反過來被當作非本質性的。從這種意義上講,存在的非真理比真理更古老,虛無比存在更本源,非自由比自由更基礎。
(四)交易流程
在交易雙方聯系好的情況下,通過系統查找到想交易的區塊并實現交易。交易的核心目標有兩個:一是完成作品所有權信息的修改、二是完成版權費用的支付。按目前國家法律法規的規定不允許使用數字貨幣作為交易時的具體貨幣,因此我們預期通過接入支付寶或是微信支付讓第三方完成交易,區塊鏈平臺不介入其中、不收取手續費。當交易完成后由甲乙雙方共同確認完成平臺開始對所有權進行更改,并逐步同步到各個節點上。
(五)其他問題
現實中的版權登記往往具有一個公告期,而在目前的所有區塊鏈系統中這是沒有的,其他節點不能隨意更改區塊的內容。因此,對于冒充版權所有者上傳本不屬于他的版權作品的情況我們可以考慮在當用戶開始在系統中聲明文件所有權的同時,系統中的所有用戶均可收到相應的合約的概要信息,由其他用戶進行相應的表決,對于表決不通過的文件不予以登記版權。但是這樣如果出現大范圍的惡意拒絕又會對系統的獨立性與真實性造成問題,故如何解決登記文件版權的獨有性和真實性仍需要著重去解決。
(一)環境配置與準備
本系統采用本地化方式嘗試部署與開發,使用了四個區塊鏈節點部署在一臺虛擬機上。合約的開發環境為Visual Studio 2019社區版,采用.net core平臺完成合約開發。節點虛擬機采用VMware Workstations 15.5,對于四個虛擬節點的環境則使用Docker容器完成。

表1 相關環境配置
(二)創建Neo本地測試節點環境
虛擬機中采用的是ubuntu 16.04 LTS鏡像,在虛擬機軟件中添加一塊NAT網卡后在虛擬機中安裝好系統后關閉系統自動更新并卸載不必要的軟件和依賴,同時將虛擬機的IP設置為靜態IP(本項目使用192.168.64.130)以方便管理。在虛擬機環境中安裝Docker-ce版本并將當前用戶添加到Docker用戶組中,這樣就可以在運行時免sudo完成相應的操作,為以后錯誤的處理和排查提供了便利。為提高鏡像同步速度,使用阿里云的容器鏡像加速服務為本地的Docker環境提供鏡像源加速。為了開發方便,需要關閉ubuntu系統的防火墻,保證相關端口的暢通。
所有的準備操作完成后便可以使用Docker社區中已經有的容器來搭建Neo的本地測試環境與測試鏈。采用社區中的neo-local容器鏡像,進入到neo-local文件夾,在終端中輸入docker-compose up開始對應用鏡像進行下載與同步,等待同步好后便可以通過make start命令啟動區塊鏈系統的本地測試鏈。
該Docker鏡像包含4 個共識節點組成的一個完整的工作網絡,同時支持了區塊鏈瀏覽器平臺Neoscan、開發工具包Neopython和用于開發者自定義金額數量的錢包。通過瀏覽器打開http://192.168.64.130:4000/ 即可訪問到區塊鏈瀏覽器,通過4002端口的GAS客戶端可以為自己的測試賬戶提供自定義的錢包金額。
(三)搭建區塊鏈客戶端軟件
采用Visual Studio 2019來實現Neo-GUI程序的二次開發和區塊合約的編寫。該程序需要使用到.NET Framework 4.7的平臺環境,以及基于Nuget的程序包。在PM窗口下通過Nuget完成Neo.SmartContract.Framework包的安裝后即可對該程序進行編譯。
因需要連接到本地測試鏈而不是Neo的主鏈,故需對于配置文件進行修改。在 config.json 中修改服務器的地址為 192.168.64.130,端口號為20333,并同時修改protocol.json中的SeedList為本地的IP地址,對于SystemFee全部修改成0即免費部署和運行所有的合約以方便后期的調試運行。

圖1 區塊系統正常運行
運行調試后左下方的本地區塊高度和當前總區塊高度保持一致,且和虛擬機中系統后臺的區塊鏈高度保持一致,驗證了系統是可以正常連通的。
(四)編譯合約編譯器與合約編寫
因Neo的智能合約是通過C#的編譯器編譯為中間碼avm來實現的,故需要通過neoa、neoj和neon三個項目(分別實現匯編、Java、.NET平臺的編譯)來實現對于合約的編譯。
在Visual Studio中啟用基于.NET Core的跨平臺開發后打開neon項目,修改相應的生成平臺為32位,同時勾選發布為一個獨立運行的程序,將所需要的庫和運行時均加入進來實現脫離.Net系統運行時運行。最后選擇發布的平臺為win10-x86,將發布好的neon編譯器的目錄加入到系統環境變量即可實現隨處可用cmd運行編譯。
通過插件NeoPlugin可以快速生成基于NEP-5的空白智能合約模板。基于該模板為此我設計了一個基于文件哈希的智能合約,主要是通過文件哈希值來描述文件區塊,對于該區塊的內容實現查詢、修改所有者、刪除的智能合約功能,并通過Neo-GUI進行部署與試運行。因在上一步已經修改了部署合約的相關費用為0,故在交易的過程中相關的手續費也不從用戶的錢包賬戶中扣除。
通過基于Neo的版權保護系統的設計、搭建與智能合約的編寫與實施讓我感受到了數字作品的版權保護依然任重而道遠。一方面來說,版權作品的形式眾多,如何將作品正確地轉化為合適的數字作品形式依然是個問題,同時如何正確地區分相類似或是侵權的作品也是一個難題,如果引入第三者或是其他用戶來鑒別又會破壞整個區塊鏈系統的完整性與可靠性。另一方面,平臺所具備的功能較規劃來說還是比較單一,部分功能受限于技術水平和法律法規的約束而無法實現。但是不可否認的是區塊鏈系統仍為解決版權保護問題的一種非常獨特的解決方案,如果在國家有關部門的協調和結合下,我相信在不遠的將來實體版權保護和數字版權保護的一系列問題都會得以解決,尤其是基于區塊鏈的相關系統當中。同時我也會繼續積極完善基于Neo的系統設計,為數字版權保護提供一種可能性。