黃德豐
(長江大學,湖北 荊州 434000)
隨著網(wǎng)絡的蓬勃發(fā)展,遠程教育在很大程度上已轉(zhuǎn)為網(wǎng)絡教育[1]。網(wǎng)絡使教與學活動產(chǎn)生了時空的分離,教師不再是直接的教育者,教育目標通過網(wǎng)絡課程來實現(xiàn),教學活動圍繞著網(wǎng)絡課程展開,作為網(wǎng)絡教育載體的網(wǎng)絡課程,在整個遠程教育的發(fā)展過程中起著舉足輕重的作用[2]。網(wǎng)課流行的同時,盜版問題也是與日俱增。
根據(jù)區(qū)塊鏈技術(shù)的特點,可以與數(shù)字版權(quán)保護方面完美結(jié)合。在確權(quán)環(huán)節(jié),區(qū)塊鏈去中心化分布式賬本技術(shù)以及獨特的時間戳體系,能夠解決傳統(tǒng)確權(quán)方案耗時長、成本高的痛點問題。區(qū)塊鏈的不可篡改特性更進一步保護了版權(quán)的唯一性[3]。
比特幣的開發(fā)者中本聰[4]于2008年整合了前人的相關技術(shù)和算法提出了比特幣的底層架構(gòu)——區(qū)塊鏈。
區(qū)塊鏈技術(shù)是利用塊鏈式數(shù)據(jù)結(jié)構(gòu)來驗證與存儲數(shù)據(jù)、利用分布式節(jié)點共識算法來生成和更新數(shù)據(jù)、利用密碼學的方式保證數(shù)據(jù)傳輸和數(shù)據(jù)訪問的安全、利用由自動化腳本代碼組成的智能合約來編程和操作數(shù)據(jù)的一種全新的分布式基礎架構(gòu)與計算方式[5]。
2013年VitalikButerin創(chuàng)立了以太坊(Ethereum),以太坊的問世標志著區(qū)塊鏈2.0的實現(xiàn)。相比于比特幣,以太坊解決了在互聯(lián)網(wǎng)中的可擴展性問題,并能夠使用Solidity、Java等高級語言編譯智能合約,用戶可以實現(xiàn)自己想要的功能。以太坊作為給區(qū)塊鏈提供應用服務的平臺,可以為大量去中心化應用程序提供新思路,也可以實現(xiàn)不同應用程序之間的有效互動。
NFT全稱為Non-Fungible Token,非同質(zhì)化代幣,是用于表示數(shù)字資產(chǎn)的唯一加密貨幣令牌,具有不可分割、不可代替、獨一無二等特性[6]。NFT是相對于同質(zhì)化代幣而存在的概念。同質(zhì)化代幣,即FT(Fungible Token),是可以互相替代、可任意拆分的Token。比特幣、以太幣等長期以來交易的加密資產(chǎn)多數(shù)是同質(zhì)化代幣。NFT的主要應用場景逐漸從加密游戲拓展到收藏品、藝術(shù)品、域名、身份等領域。
IPFS(Inter Planetary File System)星際帝國系統(tǒng)文件,是一個旨在創(chuàng)建持久且分布式存儲和共享文件的網(wǎng)絡傳輸協(xié)議[7]。它是一種內(nèi)容可尋址的對等超媒體分發(fā)協(xié)議。通過對存儲文件內(nèi)容進行處理,為其分配與內(nèi)容有關的唯一的哈希值。以太坊區(qū)塊鏈平臺與IPFS可以結(jié)合起來,將大數(shù)據(jù)存儲在IPFS上,將數(shù)據(jù)哈希值存放在以太坊上,可以很好地解決區(qū)塊鏈在數(shù)據(jù)存儲方面的弱點[8]
智能合約(Smart Contract)是一種旨在以信息化方式傳播、驗證或執(zhí)行合同的計算機協(xié)議[9]。在交易情境下,智能合約利用代碼表達、確認并執(zhí)行各方之間的協(xié)議,不需要第三方介入,且交易信息存儲上鏈,可追溯且不可篡改。
本文在傳統(tǒng)網(wǎng)課訂閱模式的基礎上,應用了基于NFT的智能合約對網(wǎng)課資源訂閱進行管理。因為智能合約是一個抽象化的概念,所以本系統(tǒng)使用了可視化的前端平臺,供作者與訂閱者使用。
實驗采用Solidity語言開發(fā)的智能合約,提供資源版權(quán)上鏈,鏈上交易存證,結(jié)合以太坊平臺的以太幣,實現(xiàn)資源作品上鏈和版權(quán)交易。本節(jié)中,以雙泳道流程圖的方式,詳細闡述作品上鏈階段和版權(quán)交易階段的流程(見圖1)。
圖1 資源作品上鏈及資源版權(quán)交易流程圖
原創(chuàng)作者將作品上傳到IPFS中,根據(jù)IPFS的工作原理,文件的內(nèi)容通過密碼學算法,統(tǒng)計出文件的哈希值。如果上傳的作品,經(jīng)過計算之后得到的哈希值重復,上傳失敗。如果沒有重復,會用哈希值作為文件在IPFS中的地址。此時,智能合約為作者鑄造代表作品權(quán)益的NFT。平臺將作者的以太坊地址以及哈希值提交給智能合約,智能合約將這些信息上鏈。至此,資源作品上鏈階段完成。
訂閱者通過平臺提交訂閱信息,平臺返回給訂閱者作品信息以及訂閱價格,訂閱者通過平臺進行訂閱。此時,平臺將訂閱者以太坊賬戶地址以及訂閱的資金提交到智能合約中,智能合約調(diào)用方法對提交的金額進行判斷,如果訂閱資金小于訂閱金額時,智能合約將終止交易,通過平臺返回訂閱失敗的信息。如果滿足訂閱條件,智能合約自動進行交易,為訂閱人頒發(fā)數(shù)字憑證。同時所有交易信息上鏈。
本系統(tǒng)采用了基于NFT的智能合約,通過對訂閱狀態(tài)的管理,實現(xiàn)了去中心化的操作。表1展示了合約中的變量以及用法:
表1 合約變量及用法解釋
圖2展示了本模式下的合約架構(gòu),將智能合約與ERC-721合約充分結(jié)合。通過訂閱者與智能合約交互,實現(xiàn)購買資源等功能。智能合約與資源作者交互,實現(xiàn)激活購買,授權(quán)訂閱等功能。
圖2 智能合約架構(gòu)
本節(jié)主要針對資源版權(quán)交易部分,進行系統(tǒng)實現(xiàn)。訂閱者通過調(diào)用智能合約中的方法進行購買和查詢相關信息,資源上傳者可以通過調(diào)用合約進行授權(quán)。
本實驗平臺操作系統(tǒng)為Ubuntu20.04.3LTS 64位,中央處理器(CPU)為Inter Core i5-10300H CPU@2.50GHz,計算機內(nèi)存8GB,本系統(tǒng)采用以太坊Truffle框架,Remix編譯器,MetaMask以太坊錢包插件,程序設計語言為Solidity0.8.0。
4.2.1 創(chuàng)建課程資源
資源作者在訂閱平臺創(chuàng)建課程前,平臺會對其是否登錄以太坊進行判斷,如果未登錄,則不能創(chuàng)建課程。如果登錄成功,作者可以創(chuàng)建課程。創(chuàng)建課程時,平臺調(diào)用合約中的creatClass函數(shù),實現(xiàn)作者對課程名稱、課程介紹、訂閱金額、訂閱截止時間和發(fā)行量的定義。同時,智能合約通過ERC-721合約接口,實現(xiàn)為此課程鑄造NFT。算法1給出了創(chuàng)建課程的過程。
算法1 creatClass函數(shù)
輸入:課程名稱name、課程介紹content、訂閱金額price、發(fā)行量NFTCount、截止時間endtime。
1.require(bytes(_name).length>0);//課程名稱、內(nèi)容、金額均不為空
2.require(bytes(_content).length>0);
3.require(_price>0);
4.class Count++;//每創(chuàng)建一個課程,存放課程數(shù)組的數(shù)量加1
5.class[class Count]=Class(class Count,_name,_price,_content,_endtime,_NFTCount,msg.sender);//實例化課程數(shù)組
6._mint(msg.sender,NFT);//為此課程鑄造NFT
輸出:創(chuàng)建成功
4.2.2 實現(xiàn)訂閱資源
在用戶購買資源時,平臺會調(diào)用合約中的purchase函數(shù),對輸入金額進行判斷,滿足條件,合約會自動執(zhí)行購買和扣費操作。同時,合約會根據(jù)訂閱者的訂閱信息,為訂閱者生成TokenID,以便后續(xù)作者授權(quán)操作。算法2給出了訂閱資源流程。
算法2 purchase函數(shù)
輸入:訂閱者地址owner、合約地址sale、支付金額value、NFT的tokenId。
1.if msg.value<price//首先判斷支付金額是否大于訂閱價格,同時發(fā)放的NFT數(shù)量不能大于作者的定義的發(fā)行量
2.and tokenIdNum>NFTCount
3.return FALSE
4.else
5.ERC721(sale).transferFrom(address(this),msg.sender,tokenIdNum);//為訂閱者頒發(fā)數(shù)字憑證
6.tokenIdNum++;
7.return TRUE;
輸出:訂閱成功
4.2.3 授權(quán)操作
當用戶訂閱成功之后,平臺會對資源作者發(fā)起申請授權(quán)的請求。合約會對發(fā)來的請求進行判斷,訂閱者的地址以及生成的NFT的ID是否對應。若符合條件,作者通過平臺進行授權(quán)。算法3給出了授權(quán)操作流程。
算法3 activate函數(shù)
輸入訂閱者地址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 查看交易詳情
交易成功后,訂閱者可以在頁面點擊查看詳情按鈕,觸發(fā)點擊事件。平臺通過訂閱者的以太坊地址,異步調(diào)用合約實例中的方法獲取合約地址、作者的以太坊地址、支付的金額以及當前的訂閱狀態(tài)等交易詳情信息,并顯示在頁面上。查詢詳情結(jié)果如圖3所示:
圖3 交易詳情
以太坊區(qū)塊鏈在以太坊虛擬機(EVM)中運行交易觸發(fā)代碼,以太坊中的開銷、轉(zhuǎn)發(fā)、儲存和運算等都以gas為單位表示[10],EVM中的每一步操作都有一個固定的耗費值,被稱為耗費的gas,gas price是單位gas的價格(用以太幣計量),實際交易成本的計算方式為二者的乘積[11]。本文的智能合約在本地以太坊網(wǎng)絡進行測試,合約構(gòu)造函數(shù)(constructor)、creatClass、handlePrice、getNFTCount、purchase、cancle、activate、expire以及合約部署花費的消耗量如圖4所示。
圖4 智能合約調(diào)用函數(shù)的消耗量
本文將以太坊、智能合約、ERC-721合約和分布式存儲系統(tǒng)IPFS相結(jié)合,相比傳統(tǒng)的網(wǎng)課資源平臺,具有多方面的優(yōu)勢。首先,從資源數(shù)據(jù)的存儲上,傳統(tǒng)的網(wǎng)課平臺采用數(shù)據(jù)庫的方式,對教學資源進行存儲。在本模式下,所有資源均上傳至IPFS系統(tǒng)中,由多個節(jié)點共同維護。避免了數(shù)據(jù)庫泄露,資源被盜用的風險,保證了資源數(shù)據(jù)的安全性。其次,在作品確權(quán)方面,每個作品都對應區(qū)塊鏈上的一個NFT代幣,具有唯一的標識,有效避免了版權(quán)沖突的問題。此外,利用智能合約與買賣雙方進行交易,既避免了第三方平臺的介入,也避免了因服務器故障帶來的影響。