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