????智能合约是存储在区块链上自动运行的脚本.1994 年 Nick Szabo 提出相关概念, 将智能合约定义为一种通过代码程序自动执行的交易协议. 满足合约条款的交易相关者, 无需第三方管理者的监督就可自动执行交易. 由于缺乏可支撑合约自动执行的平台和相关技术, 直到区块链技术的出现, 才使得智能合约这项技术得到应用. 随着区块链的不断发展, 以太坊的出现首次将区块链和智能合约结合, 通过以太坊虚拟机 (Ethereum virtual machine,EVM) 来处理区块链上的交易. 区块链确保了智能合约的用户在可信的环境下遵循合约规则自动执行合约代码, 同时利用区块链的透明性和可追溯性,跟踪合约状态. 智能合约的可扩展性、自动化为 EHR共享提供了便利. 利用区块链中存储的医疗数据、支持外部数据的预言机以及信用度机制, 患者可以在智能合约中设置信用度阈值和其他访问控制参数, 实现复杂的访问控制策略.智能合约预言机机制[19] 验证外部数据. 在智能合约中使用合约自带的函数 ecrecover 可以验证外部数据写入者的签名, 该函数需要数据的 Hash 值和签名对{v, r, s}. 所以对数据的签名需要遵循ecrecover 函数的规则. 实际上, 数据需要经过两次sha256的 Hash 操作后才能进行签名,签名结果中32 字节的 r 和 s 来自椭圆曲线数字签名算法 (Ellipticcurve digital signature algorithm, ECDSA) 的输出值, 一个字节的 v 则是用于恢复签名结果的标识,以太坊中为 27 或 28. ????在智能合约中, 数据主要分为 Storage 和 Memory两种类型, Storage 类型数据也可称为合约的状态变量, 会永久存储在区块链中; Memory 则是临时变量, 交易处理完成后该类型变量会被清空. 所以在编写合约时, 需要为永久存储的数据定义 Storage 类型变量, 而不仅仅是处理交易逻辑.
附参考文章:基于集成信用度评估智能合约的安全数据共享模型. 自动化学报, 2021, 47(3):594?608
|