王怡然,宋東翔
(1.德宏職業(yè)學(xué)院,云南 德宏 678400;2.德宏師范高等專科學(xué)校,云南 德宏 678400)
病理學(xué)作為醫(yī)學(xué)教育中的重要基礎(chǔ)學(xué)科,也是維系基礎(chǔ)醫(yī)學(xué)和臨床醫(yī)學(xué)間緊密聯(lián)系的橋梁學(xué)科[1]。目前,許多教師借助教學(xué)App或者網(wǎng)站平臺(tái)上傳一些簡(jiǎn)單的病理切片圖進(jìn)行教學(xué)。但這些平臺(tái)均使用傳統(tǒng)中心化的存儲(chǔ)方式,一旦系統(tǒng)崩潰或遭到黑客攻擊,就會(huì)存在全部數(shù)據(jù)消失或者數(shù)據(jù)被篡改和泄露等安全隱患,影響數(shù)字切片的真實(shí)性,嚴(yán)重影響教學(xué)質(zhì)量[2]。本文設(shè)計(jì)了一種基于區(qū)塊鏈非同質(zhì)化代幣的病理數(shù)字切片數(shù)據(jù)存儲(chǔ)系統(tǒng)。該系統(tǒng)通過(guò)將病理數(shù)字切片數(shù)據(jù)與NFT結(jié)合,實(shí)現(xiàn)數(shù)據(jù)的唯一標(biāo)識(shí)、所有權(quán)確認(rèn)以及數(shù)據(jù)交易的追溯。此外,本文通過(guò)智能合約對(duì)數(shù)據(jù)的使用權(quán)限進(jìn)行管理,確保數(shù)據(jù)的安全性。
目前,部分高校使用傳統(tǒng)教學(xué)模式中基于顯微鏡觀察病理切片的方式辨識(shí)病變組織的形態(tài)特征,由于實(shí)驗(yàn)室的器材限制,學(xué)生人數(shù)多,顯微鏡、切片數(shù)量少[3],觀察病理切片的實(shí)驗(yàn)課大多難以開(kāi)展;并且傳統(tǒng)的載玻片存在易破碎、難管理等問(wèn)題,載玻片上病理組織還會(huì)隨時(shí)間的推移變得模糊不清[4-5],導(dǎo)致病理信息丟失。
數(shù)字切片一旦生成可以永久保存,且圖像質(zhì)量恒定,可被重復(fù)使用,完美地彌補(bǔ)了使用傳統(tǒng)載玻片存在的缺陷與不足[6]。區(qū)塊鏈技術(shù)的發(fā)展為數(shù)字切片數(shù)據(jù)的存儲(chǔ)與共享提供了新思路。區(qū)塊鏈?zhǔn)且粋€(gè)又一個(gè)區(qū)塊組成的鏈條[7-8],每一個(gè)區(qū)塊中保存了一定的信息,它們按照各自產(chǎn)生的時(shí)間順序連接成鏈條。這個(gè)鏈條被保存在所有的服務(wù)器中,只要整個(gè)系統(tǒng)中有一臺(tái)服務(wù)器可以工作,整條區(qū)塊鏈就是安全的[9]。這些服務(wù)器在區(qū)塊鏈系統(tǒng)中被稱為節(jié)點(diǎn),它們?yōu)檎麄€(gè)區(qū)塊鏈系統(tǒng)提供存儲(chǔ)空間和算力支持。如果要修改區(qū)塊鏈中的信息,必須征得半數(shù)以上節(jié)點(diǎn)的同意并修改所有節(jié)點(diǎn)中的信息,而這些節(jié)點(diǎn)通常掌握在不同的主體手中。因此,篡改區(qū)塊鏈中的信息是一件極其困難的事[10]。
相比于傳統(tǒng)的網(wǎng)絡(luò),區(qū)塊鏈具有3個(gè)核心特點(diǎn),即:數(shù)據(jù)不可篡改、數(shù)據(jù)操作可追溯、數(shù)據(jù)公開(kāi)透明[8]?;谶@3個(gè)特點(diǎn),研究者發(fā)現(xiàn)可以把病理數(shù)字切片存儲(chǔ)在區(qū)塊鏈中,使數(shù)據(jù)更加真實(shí)可靠、公開(kāi)透明安全,幫助解決教育教學(xué)甚至是醫(yī)療安全等問(wèn)題,病理學(xué)教師、專家學(xué)者都可以將具有典型病例的數(shù)字切片上傳到區(qū)塊鏈中,教師與教師、學(xué)校與學(xué)校之間的資源共享得以實(shí)現(xiàn),增強(qiáng)了學(xué)校間的合作和交流,豐富了教學(xué)內(nèi)容,使病理學(xué)教學(xué)得以快速發(fā)展。
病理數(shù)字切片作為醫(yī)療診斷的重要依據(jù),其安全、高效、可追溯的存儲(chǔ)方式尤為重要。區(qū)塊鏈技術(shù)的出現(xiàn),特別是非同質(zhì)化代幣(Non-Fungible Token,NFT)的應(yīng)用,為解決這一問(wèn)題提供了新的思路。區(qū)塊鏈技術(shù)的特性,如去中心化、不可篡改、透明度高等,使其成為存儲(chǔ)病理數(shù)字切片數(shù)據(jù)的理想選擇。而NFT為數(shù)字資產(chǎn)的唯一性和所有權(quán)提供了解決方案。將NFT應(yīng)用于病理數(shù)字切片的存儲(chǔ),不僅可以保證數(shù)據(jù)的真實(shí)性和可信度,還能實(shí)現(xiàn)數(shù)據(jù)的追溯[11]。為了將NFT與病理學(xué)數(shù)字切片結(jié)合,需要在Solidity智能合約中定義特定的數(shù)據(jù)結(jié)構(gòu)和變量[12]。這些數(shù)據(jù)結(jié)構(gòu)能夠有效地表示每個(gè)病理學(xué)數(shù)字切片的唯一性、所有權(quán)等相關(guān)信息。
病理數(shù)字切片包含如下信息:(1)患者信息,患者姓名、患者年齡、患者性別、患者ID等;(2)樣本信息,樣本類型(組織、細(xì)胞等)、取樣日期和取樣部位(器官、組織等);(3)病理學(xué)描述,診斷結(jié)果、病理學(xué)分類和細(xì)胞或組織結(jié)構(gòu)描述;(4)醫(yī)生信息,簽發(fā)病理報(bào)告的醫(yī)生姓名和醫(yī)生簽名或身份驗(yàn)證信息;(5)切片信息,切片編號(hào)或標(biāo)識(shí)符、切片制備日期和切片制備技術(shù);(6)圖像數(shù)據(jù)或數(shù)據(jù)哈希,病理切片的數(shù)字圖像數(shù)據(jù)或數(shù)據(jù)哈希值。
基于Solidity和ERC-721標(biāo)準(zhǔn)的簡(jiǎn)化智能合約,本文創(chuàng)建、存儲(chǔ)和管理病理數(shù)字切片信息的過(guò)程如下。
(1)引入ERC-721標(biāo)準(zhǔn)。Solidity合約基于OpenZeppelin的ERC-721URIStorage,實(shí)現(xiàn)了ERC-721標(biāo)準(zhǔn)的擴(kuò)展,每個(gè)代幣有一個(gè)獨(dú)特的URI。繼承Ownable合約:通過(guò)繼承OpenZeppelin的Ownable合約,智能合約獲得了一個(gè)所有者的地址。所有者(合約部署者)擁有執(zhí)行某些受限函數(shù)的特權(quán)。
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol"。
(2)定義合約。
contract PathologySliceContract is ERC721,Ownable {。
(3)定義病理切片的數(shù)據(jù)結(jié)構(gòu),PathologySlice存儲(chǔ)病理切片的詳細(xì)信息。
struct PathologySlice {string patientName;//患者姓名uint256 patientAge;//患者年齡string patientGender;//患者性別string sampleType;//樣本類型(組織、細(xì)胞等)uint256 samplingDate;//取樣日期string samplingSite;//取樣部位(器官、組織等)string diagnosis;//診斷結(jié)果string doctorName;//簽發(fā)病理報(bào)告的醫(yī)生姓名uint256 sliceNumber;//切片編號(hào)或標(biāo)識(shí)符uint256 preparationDate;//切片制備日期string preparationTechnique;//切片制備技術(shù)string imageDataHash;//病理切片的數(shù)字圖像數(shù)據(jù)或數(shù)據(jù)哈希值}。
(4)存儲(chǔ)切片元數(shù)據(jù),使用映射結(jié)構(gòu)_pathologySlices存儲(chǔ)切片的詳細(xì)信息,其中鍵是切片的tokenId。
mapping(uint256 => PathologySlice)private _pathologySlices。
(5)創(chuàng)建病理切片NFT構(gòu)造函數(shù),構(gòu)造函數(shù)設(shè)置了合約的名稱PathologySliceNFT和符號(hào)SliceNFT,并創(chuàng)建NFT。
constructor() ERC721("PathologySliceNFT","SliceNFT"){}。
本文的實(shí)驗(yàn)?zāi)康氖球?yàn)證基于區(qū)塊鏈的病理數(shù)字切片管理智能合約的功能性、安全性。通過(guò)編寫(xiě)測(cè)試用例,演示合約如何有效地創(chuàng)建和管理病理學(xué)NFT,并確保數(shù)據(jù)的安全和不變性。
實(shí)驗(yàn)在以太坊Ropsten測(cè)試網(wǎng)絡(luò)上進(jìn)行,使用Truffle Suite作為主要的開(kāi)發(fā)和測(cè)試框架。合約使用Solidity 0.8.0編寫(xiě),所有的交互測(cè)試通過(guò)MetaMask錢包進(jìn)行。
編寫(xiě)基于JavaScript的測(cè)試腳本,使用Truffle框架自動(dòng)執(zhí)行并驗(yàn)證結(jié)果,合約代碼如下。
(1)導(dǎo)入智能合約,引入智能合約的應(yīng)用程序二進(jìn)制接口(Application Binary Interface,ABI)以便在測(cè)試中進(jìn)行交互:
const PathologySliceContract = artifacts.require("PathologySliceContract")。
(2)定義測(cè)試套件和合約實(shí)例,使用Mocha的contract函數(shù)定義測(cè)試套件,并在before部分獲取合約實(shí)例。before 部分會(huì)在運(yùn)行測(cè)試套件前執(zhí)行,確保獲取部署的智能合約實(shí)例:
contract("PathologySliceContract",(accounts)=> {
let pathologySliceContract;
before(async () => {
pathologySliceContract = await PathologySliceContract.deployed();})。
(3)測(cè)試合約部署,第一個(gè)測(cè)試用例確保智能合約成功部署。通過(guò)檢查合約地址是否存在來(lái)確認(rèn)合約部署的成功:
it("should deploy the contract",async()=>
{assert(pathologySliceContract.address);})。
(4)測(cè)試上傳病理切片和鑄造NFT,第二個(gè)測(cè)試用例模擬了上傳病理切片的過(guò)程,并檢查相應(yīng)的病理切片信息是否正確存儲(chǔ)以及鑄造NFT是否成功。測(cè)試用例中上傳一個(gè)名叫張三的患者病理切片信息,使用異步函數(shù)await確保在進(jìn)行下一步之前等待智能合約交互完成。
it("should upload pathology slice and mint NFT",async () => {// 上傳病理切片的信息。
await pathologySliceContract.uploadPathologySlice(“張三”,30,“男”,“組織”,Date.now(),“心臟”,“診斷細(xì)節(jié)”,“李四醫(yī)生”,tokenId,Date.now(),“設(shè)備信息”,“0x123abc”)。
// 獲取上傳后的病理切片信息。
const pathologySlice = await pathologySliceContra
ct.getPathologySlice(tokenId)。
// 添加斷言,確保病理切片信息正確存儲(chǔ)。
assert.equal(pathologySlice.patientName,“張三”);
assert.equal(pathologySlice.patientAge,30);
assert.equal(pathologySlice.patientGender,“男”);
// 驗(yàn)證NFT是否鑄造成功。
const owner = await pathologySliceContract.ownerOf(tokenId);
assert.equal(owner,uploader);})。
4.3.1 部署合約的測(cè)試結(jié)果
測(cè)試用例1部署合約PathologySliceContract,實(shí)驗(yàn)結(jié)果顯示合約成功部署。這說(shuō)明測(cè)試用例確認(rèn)智能合約已成功部署,合約地址存在,確保合約可以正常運(yùn)行。
4.3.2 上傳病理切片和鑄造NFT的測(cè)試結(jié)果
測(cè)試用例2上傳病理切片和鑄造NFT實(shí)驗(yàn)結(jié)果顯示上傳病理切片信息和鑄造NFT過(guò)程成功。這說(shuō)明測(cè)試用例模擬了上傳病理切片的信息并鑄造NFT的過(guò)程。詳細(xì)的斷言和驗(yàn)證確保了病理切片信息正確存儲(chǔ),NFT成功鑄造并被分配給正確的所有者。
本文所提的基于區(qū)塊鏈NFT的病理數(shù)字切片數(shù)據(jù)存儲(chǔ)方案可以解決現(xiàn)有存儲(chǔ)方式的諸多問(wèn)題,提高數(shù)據(jù)的可信度、安全性和可追溯性。然而,該方案仍需在實(shí)際應(yīng)用中進(jìn)一步驗(yàn)證和完善。未來(lái),筆者仍期望通過(guò)持續(xù)的研究和創(chuàng)新,推動(dòng)這一技術(shù)在醫(yī)療領(lǐng)域更廣泛的應(yīng)用。