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