黃德豐
(長江大學,湖北 荊州 434000)
隨著網絡的蓬勃發展,遠程教育在很大程度上已轉為網絡教育[1]。網絡使教與學活動產生了時空的分離,教師不再是直接的教育者,教育目標通過網絡課程來實現,教學活動圍繞著網絡課程展開,作為網絡教育載體的網絡課程,在整個遠程教育的發展過程中起著舉足輕重的作用[2]。網課流行的同時,盜版問題也是與日俱增。
根據區塊鏈技術的特點,可以與數字版權保護方面完美結合。在確權環節,區塊鏈去中心化分布式賬本技術以及獨特的時間戳體系,能夠解決傳統確權方案耗時長、成本高的痛點問題。區塊鏈的不可篡改特性更進一步保護了版權的唯一性[3]。
比特幣的開發者中本聰[4]于2008年整合了前人的相關技術和算法提出了比特幣的底層架構——區塊鏈。
區塊鏈技術是利用塊鏈式數據結構來驗證與存儲數據、利用分布式節點共識算法來生成和更新數據、利用密碼學的方式保證數據傳輸和數據訪問的安全、利用由自動化腳本代碼組成的智能合約來編程和操作數據的一種全新的分布式基礎架構與計算方式[5]。
2013年VitalikButerin創立了以太坊(Ethereum),以太坊的問世標志著區塊鏈2.0的實現。相比于比特幣,以太坊解決了在互聯網中的可擴展性問題,并能夠使用Solidity、Java等高級語言編譯智能合約,用戶可以實現自己想要的功能。以太坊作為給區塊鏈提供應用服務的平臺,可以為大量去中心化應用程序提供新思路,也可以實現不同應用程序之間的有效互動。
NFT全稱為Non-Fungible Token,非同質化代幣,是用于表示數字資產的唯一加密貨幣令牌,具有不可分割、不可代替、獨一無二等特性[6]。NFT是相對于同質化代幣而存在的概念。同質化代幣,即FT(Fungible Token),是可以互相替代、可任意拆分的Token。比特幣、以太幣等長期以來交易的加密資產多數是同質化代幣。NFT的主要應用場景逐漸從加密游戲拓展到收藏品、藝術品、域名、身份等領域。
IPFS(Inter Planetary File System)星際帝國系統文件,是一個旨在創建持久且分布式存儲和共享文件的網絡傳輸協議[7]。它是一種內容可尋址的對等超媒體分發協議。通過對存儲文件內容進行處理,為其分配與內容有關的唯一的哈希值。以太坊區塊鏈平臺與IPFS可以結合起來,將大數據存儲在IPFS上,將數據哈希值存放在以太坊上,可以很好地解決區塊鏈在數據存儲方面的弱點[8]
智能合約(Smart Contract)是一種旨在以信息化方式傳播、驗證或執行合同的計算機協議[9]。在交易情境下,智能合約利用代碼表達、確認并執行各方之間的協議,不需要第三方介入,且交易信息存儲上鏈,可追溯且不可篡改。
本文在傳統網課訂閱模式的基礎上,應用了基于NFT的智能合約對網課資源訂閱進行管理。因為智能合約是一個抽象化的概念,所以本系統使用了可視化的前端平臺,供作者與訂閱者使用。
實驗采用Solidity語言開發的智能合約,提供資源版權上鏈,鏈上交易存證,結合以太坊平臺的以太幣,實現資源作品上鏈和版權交易。本節中,以雙泳道流程圖的方式,詳細闡述作品上鏈階段和版權交易階段的流程(見圖1)。

圖1 資源作品上鏈及資源版權交易流程圖
原創作者將作品上傳到IPFS中,根據IPFS的工作原理,文件的內容通過密碼學算法,統計出文件的哈希值。如果上傳的作品,經過計算之后得到的哈希值重復,上傳失敗。如果沒有重復,會用哈希值作為文件在IPFS中的地址。此時,智能合約為作者鑄造代表作品權益的NFT。平臺將作者的以太坊地址以及哈希值提交給智能合約,智能合約將這些信息上鏈。至此,資源作品上鏈階段完成。
訂閱者通過平臺提交訂閱信息,平臺返回給訂閱者作品信息以及訂閱價格,訂閱者通過平臺進行訂閱。此時,平臺將訂閱者以太坊賬戶地址以及訂閱的資金提交到智能合約中,智能合約調用方法對提交的金額進行判斷,如果訂閱資金小于訂閱金額時,智能合約將終止交易,通過平臺返回訂閱失敗的信息。如果滿足訂閱條件,智能合約自動進行交易,為訂閱人頒發數字憑證。同時所有交易信息上鏈。
本系統采用了基于NFT的智能合約,通過對訂閱狀態的管理,實現了去中心化的操作。表1展示了合約中的變量以及用法:

表1 合約變量及用法解釋
圖2展示了本模式下的合約架構,將智能合約與ERC-721合約充分結合。通過訂閱者與智能合約交互,實現購買資源等功能。智能合約與資源作者交互,實現激活購買,授權訂閱等功能。

圖2 智能合約架構
本節主要針對資源版權交易部分,進行系統實現。訂閱者通過調用智能合約中的方法進行購買和查詢相關信息,資源上傳者可以通過調用合約進行授權。
本實驗平臺操作系統為Ubuntu20.04.3LTS 64位,中央處理器(CPU)為Inter Core i5-10300H CPU@2.50GHz,計算機內存8GB,本系統采用以太坊Truffle框架,Remix編譯器,MetaMask以太坊錢包插件,程序設計語言為Solidity0.8.0。
4.2.1 創建課程資源
資源作者在訂閱平臺創建課程前,平臺會對其是否登錄以太坊進行判斷,如果未登錄,則不能創建課程。如果登錄成功,作者可以創建課程。創建課程時,平臺調用合約中的creatClass函數,實現作者對課程名稱、課程介紹、訂閱金額、訂閱截止時間和發行量的定義。同時,智能合約通過ERC-721合約接口,實現為此課程鑄造NFT。算法1給出了創建課程的過程。
算法1 creatClass函數
輸入:課程名稱name、課程介紹content、訂閱金額price、發行量NFTCount、截止時間endtime。
1.require(bytes(_name).length>0);//課程名稱、內容、金額均不為空
2.require(bytes(_content).length>0);
3.require(_price>0);
4.class Count++;//每創建一個課程,存放課程數組的數量加1
5.class[class Count]=Class(class Count,_name,_price,_content,_endtime,_NFTCount,msg.sender);//實例化課程數組
6._mint(msg.sender,NFT);//為此課程鑄造NFT
輸出:創建成功
4.2.2 實現訂閱資源
在用戶購買資源時,平臺會調用合約中的purchase函數,對輸入金額進行判斷,滿足條件,合約會自動執行購買和扣費操作。同時,合約會根據訂閱者的訂閱信息,為訂閱者生成TokenID,以便后續作者授權操作。算法2給出了訂閱資源流程。
算法2 purchase函數
輸入:訂閱者地址owner、合約地址sale、支付金額value、NFT的tokenId。
1.if msg.value<price//首先判斷支付金額是否大于訂閱價格,同時發放的NFT數量不能大于作者的定義的發行量
2.and tokenIdNum>NFTCount
3.return FALSE
4.else
5.ERC721(sale).transferFrom(address(this),msg.sender,tokenIdNum);//為訂閱者頒發數字憑證
6.tokenIdNum++;
7.return TRUE;
輸出:訂閱成功
4.2.3 授權操作
當用戶訂閱成功之后,平臺會對資源作者發起申請授權的請求。合約會對發來的請求進行判斷,訂閱者的地址以及生成的NFT的ID是否對應。若符合條件,作者通過平臺進行授權。算法3給出了授權操作流程。
算法3 activate函數
輸入訂閱者地址owner、訂閱者的NFT標識tokenId、合約地址sale
1.require(_owner=ownerOf(_tokenId))//訂閱者的地址與NFT的ID對應
2.require(_getApproved(_tokenId)=sale)//批準作者對NFT的操作
3.safeTransferFrom(_owner,sale,_tokenId)
4.activate(_owner,_tokenId)//批準訂閱
輸出:已批準
4.2.4 查看交易詳情
交易成功后,訂閱者可以在頁面點擊查看詳情按鈕,觸發點擊事件。平臺通過訂閱者的以太坊地址,異步調用合約實例中的方法獲取合約地址、作者的以太坊地址、支付的金額以及當前的訂閱狀態等交易詳情信息,并顯示在頁面上。查詢詳情結果如圖3所示:

圖3 交易詳情
以太坊區塊鏈在以太坊虛擬機(EVM)中運行交易觸發代碼,以太坊中的開銷、轉發、儲存和運算等都以gas為單位表示[10],EVM中的每一步操作都有一個固定的耗費值,被稱為耗費的gas,gas price是單位gas的價格(用以太幣計量),實際交易成本的計算方式為二者的乘積[11]。本文的智能合約在本地以太坊網絡進行測試,合約構造函數(constructor)、creatClass、handlePrice、getNFTCount、purchase、cancle、activate、expire以及合約部署花費的消耗量如圖4所示。

圖4 智能合約調用函數的消耗量
本文將以太坊、智能合約、ERC-721合約和分布式存儲系統IPFS相結合,相比傳統的網課資源平臺,具有多方面的優勢。首先,從資源數據的存儲上,傳統的網課平臺采用數據庫的方式,對教學資源進行存儲。在本模式下,所有資源均上傳至IPFS系統中,由多個節點共同維護。避免了數據庫泄露,資源被盜用的風險,保證了資源數據的安全性。其次,在作品確權方面,每個作品都對應區塊鏈上的一個NFT代幣,具有唯一的標識,有效避免了版權沖突的問題。此外,利用智能合約與買賣雙方進行交易,既避免了第三方平臺的介入,也避免了因服務器故障帶來的影響。