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

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

表1 合約變量及用法解釋
圖2展示了本模式下的合約架構(gòu),將智能合約與ERC-721合約充分結(jié)合。通過訂閱者與智能合約交互,實(shí)現(xiàn)購(gòu)買資源等功能。智能合約與資源作者交互,實(shí)現(xiàn)激活購(gòu)買,授權(quán)訂閱等功能。

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

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

圖4 智能合約調(diào)用函數(shù)的消耗量
本文將以太坊、智能合約、ERC-721合約和分布式存儲(chǔ)系統(tǒng)IPFS相結(jié)合,相比傳統(tǒng)的網(wǎng)課資源平臺(tái),具有多方面的優(yōu)勢(shì)。首先,從資源數(shù)據(jù)的存儲(chǔ)上,傳統(tǒng)的網(wǎng)課平臺(tái)采用數(shù)據(jù)庫(kù)的方式,對(duì)教學(xué)資源進(jìn)行存儲(chǔ)。在本模式下,所有資源均上傳至IPFS系統(tǒng)中,由多個(gè)節(jié)點(diǎn)共同維護(hù)。避免了數(shù)據(jù)庫(kù)泄露,資源被盜用的風(fēng)險(xiǎn),保證了資源數(shù)據(jù)的安全性。其次,在作品確權(quán)方面,每個(gè)作品都對(duì)應(yīng)區(qū)塊鏈上的一個(gè)NFT代幣,具有唯一的標(biāo)識(shí),有效避免了版權(quán)沖突的問題。此外,利用智能合約與買賣雙方進(jìn)行交易,既避免了第三方平臺(tái)的介入,也避免了因服務(wù)器故障帶來的影響。