王怡然,宋东翔
(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的病理数字切片数据存储方案可以解决现有存储方式的诸多问题,提高数据的可信度、安全性和可追溯性。然而,该方案仍需在实际应用中进一步验证和完善。未来,笔者仍期望通过持续的研究和创新,推动这一技术在医疗领域更广泛的应用。