一种高级智能合约转化方法及竞买合约设计与实现 |
来源:一起赢论文网 日期:2021-12-19 浏览数:1133 【 字体: 大 中 小 大 中 小 大 中 小 】 |
第44 卷 第3 期2021 年3 月计 算机 学 报CHINESEJOURNALOFCOMPUTERSVol .44No. 3Mar. 2021一种高级智能合约转化方法及竞买合约设计与实现朱 岩 秦博涵u陈 娥H刘国伟1 :)(北京科技大学计算机与通信工程学院 北京100 083)2 )(北京市经济和信息化局 北京 100744)摘 要 智能合约是运行在区块链上的数字协议, 智能合约的开发涉及计算机、 金融、 法律等多个领域, 近年来高级智能合约语言已被提出用于解决不同领域人员阅读、 交流与协同开发难的问题, 然而上述语言与可执行智能合约语言之间仍缺少有效的转化方法. 针对这一问题, 本文设计了一种SPESC到目标程序语言(Solidity) 的转化规贝II , 并提出了一种包括高级智能合约层、智能合约层和机器代码执行层的三层智能合约系统框架. 首先, 转化规则给出了根据SPESC合约当事人定义生成目标语言当事人子合约、 以及SPESC其余部分生成目标语言主体子合约之间的对应关系; 其次, 除程序框架与存储结构外, 目标语言程序还包含当事人人员管理、程序时序控制、异常检测等机制, 这些机制能辅助编程人员半自动化地编写智能合约程序; 进而, 通过两个实验验证了上述高级智能合约框架的易读性以及转换的正确性, 第一个实验邀请了计算机与非计算机人员分组阅读Solidi ty 和SPESC的智能合约并回答问卷, 结果表明阅读SPESC的速度约为阅读Solidity 两倍, 准确率也更高. 然后以竞买合约为实例, 给出了根据上述转化规则从SPESC合约转化到可执行Solidity 合约语言程序, 并通过以太坊私链部署运行来验证转化过程的正确性.实例表明上述转化规则和系统框架可简化智能合约的编写、规范智能合约的程序结构、辅助编程人员验证代码的正确性.关键词 智能合约; 面向领域语言; 代码生成; SPESC中图法分类号TP3 19DOI号1 0. 1 189 7/SP.J. 101 6. 2021 . 006 52AnAdvancedSmartContractConversionandItsDesignandImplementationforAuctionContractZHUYan1 )QINBo Han1)CHENE1 )LIUGu〇 Wei2 )1 :) { DeparLmenLofComput erandCommuni cat ionEngineering?UniversityofScienceandTechnologyBeijing? Beiji ng100083)2)( Beiji ngMunicipalBureauofEconomyandInformat ionTechnology?Beijing100744)AbstractAssecondgenerati onbl ockchai ntechnol ogy,smartcontractshavegreatl yenrichedthefuncti onalexpressi onofbl ockchai ntomakeappl i cati ondevel opmentmoreconveni ent. Smartcontractsareasetofdigital l yexecutabl eprotocol swhi chconcernbusi ness,fi nance,contractl aw,andi nformati ontechnology.Inrecentyears, advancedsmartcontractl anguages( ASCLs)havebeenproposedtosol vetheprobl emofdiffi cul treadi ng,comprehensi on,andcol l aborati onwhenwriti ngasmartcontractamongpeopl ei ndi fferentfiel ds.However, thiski ndofl anguagesarestil l hardtoputi ntopracticeduetothel ackofaneffecti veconversi onmethodfromtheASCLstoexecutablesmartcontractprograms. Ai mi ngatthisproblem,weproposeathreelayersmartcontractframework,i ncl udi ngadvancedsmart contractl ayer, basicsmart contractl ayer,andexecutabl emachi ne codel ayer. Aftercompari ngandanal yzi ngtheprosandconsofseveralASCLs,wetakeSPESCasanexampletoexpl orehowtodesignconversi onrulesfromi tscontract收稿日期:2020 04 20; 在线发布日期:2020 09 22. 本课题得到国家科技部重点研发计划( 2018YFB1402702)、 国家自然科学基金( 61972032)资助. 朱 岩, 博士, 教授, 主要研究领域为信息安全与密码学、 安全计算、 区块链、 移动云计算. Email: Zhuyan@uSt b.edu.cn. 秦博涵,硕士研究生, 主要研究方向为区块链、 智能合约. 陈 娥, 博士研究生, 主要研究方向为密码学和网络安全. 刘国伟, 硕士, 髙级工程师, 主要研究方向为大数据、 安全系统、 安全管理和标准.3 期朱 岩等:一种高级智能合约转化方法及竞买合约设计与实现65 3totargetl anguagecontracti nSoli dity.Wespeci fytheconversionrul esfromtwoaspects. Oneisprogramarchi tect ureofthetargetl anguage,whi chconsi stsofmai ncontractandpartycontracts.Thecorrespondi ngrul esprovi deanapproachtoconvertthedefiniti onofSPESCbasedcontracti ngparti esintopartysub contractsontargetl anguage,aswel lastoproducetherestofSPESCcontracti ntomainsub contractontargetl anguage. Theotheri stheapproachtospeci fynotonl yprogramarchitectureandstoragestructureonbasicsmart contractl ayer,butal soi mportantmechanisms,i ncl udi ngpersonnel management ,ti mi ngcontrol ,anomal ydetecti on,etc. Thesemechanismscanassistprogrammerstosemiautomatical lywri tesmartcontractprograms.Moreover,byi ntroducingthenotationofgroup,theSPESCbasedsmartcontractcansupporttheoperati onofdynamical l yaddi ngparticipantsi ntothecontract.Weal soveri fythel egi bilityofSPESCandthecorrectnessoftheconversionprocessesthroughtwocasestudi es.Fi rst,weinvitesomestudentsfromdepartmentofcomputerscienceanddepartmentofl aw.They,di vi dedintofourgroups,areaskedtoreadvoti ngandaucti oncontractsinSPESCandSoli dity,andanswerquesti onsdesignedforthecontracts.Theresul tshowsthatthespeedofreadingSPESCi sabouttwi ceasfastasthatofreadi ngSoli dity,andtheaccuracyofreadi ngSPESCishigher. Then,takingtheaucti oncontractasani nstance,weanal yzetheprocessofbi ddi ngcontractsandcompi l ethemi ntocontractsi nSPESC,andthenprovi dethewholeprocessofconverti ngfromaSPESC basedcontracttoanexecutabl econtractprogrami nSoli dityaccordi ngtotheaboveconversi onrul es,andveri fythecorrectnessoftheconversi onprocess,i ncl udi ngcodi ng,depl oyi ng,runni ng,andtesti ng,throughEthereumpri vatechai n.Thei nstanceresul tsshowthattheconversi onrul esandthethree layerframeworkcansi mplifythewritingofsmartcontracts,standardi zetheprogramstructure,andhelpprogrammerstoveri fythecorrectnessofthecontractprogram. Inourfuturework,aformalrepresentati onshal lbeestabl ishedontheexisti ngSPESClanguagemodel .Throughformalmethods,wecanfurtherprovi deformalanal ysistool stoveri fypre andpostconditi onsofcontractterms,aswel lasti mesequencebetweenterms.Secondl y,i nvi ewofthecorrectnessofthegeneratedSol i di tytargetcode,wecanconti nuetoi mprovethegeneratedtargetcodebasedonexisti ngresearchesonanal ysisordetecti onvul nerabili ties,opti mi zetheprogramstructureandspeci ficati ons,andenhancethesecurityofthecontract.Keywordssmartcontract;domai nspeci ficlanguage;codegenerati on;SPESCi 引 言智能合约[ 1]作为第二代区块链的技术核心, 它是区块链从虚拟货币、 金融交易到通用平台发展的必然结果. 广义上讲, 智能合约就是一套数字形式的可自动执行的计算机协议[2]. 由于它极大地丰富了区块链的功能表达, 使得应用开发更加便利, 因此近年来它已引起学术界与工业界的广泛关注.狭义上讲, 智能合约就是部署并运行在区块链上的计算机程序. 智能合约的代码、 执行的中间状态、 及执行结果都会存储在区块链中, 区块链除了保证这些数据不被篡改外, 还会通过每个节点以相同的输人执行智能合约来验证运行结果正确性. 区块链的这种共识验证机制, 保证了智能合约的不可篡改性和可追溯等特性, 从而使得它具备了被法律认可的可能.智能合约相较于比特币的脚本指令系统, 可以处理更加复杂的业务逻辑, 并可以更加灵活地在区块链中存储包括合约状态在内的各种数据.目前各大区块链平台和厂商都添加了智能合约模块, 较为流行的智能合约平台包括以太坊( Ethereum) 、 超级账本( Hyperl edgerFabric) 等.在智能合约语言方面, 以太坊的智能合约目前支持Serpent 和Soli dity两种编程语言, Serpent 类似于Python语言, 而Sol i dity类似于JavaScript 语言; 超级账本支持如G〇、Java 等传统编程语言进行编写; 此外, 其它平台也都在已有编程语言( 如C、6 54 计 算机 学 报 2021年C++Java) 基础上给出了智能合约开发工具. 总之, 从语言形式和运行环境上讲, 目前的智能合约可以分为以下三种:(1) 脚本型智能合约. 通过区块链中定义好的脚本指令和堆栈式类Forth语言完成基本的计算与条件控制, 如比特币脚本系统.(2) 传统编程语言智能合约. 其语言直接采用传统程序语言, 部署在虚拟机( VM) 或容器( Docker)里, 通过规定好的接口与区块链进行交互. 如超级账本平台中的链码采用Java、Go等语言, Neo 平台支持将C#Java和Python等多种语言编译为NeoVM支持的指令集.(3) 专用智能合约语言. 模仿传统程序语言并添加了与区块链交互的特殊元素, 如以太坊的Sol i dity语言, 同时该语言含有gas计费等特殊功能.研究动机. 通过上述分类可知, 智能合约平台和语言已日益成熟且功能趋于完善. 然而, 由于智能合约通常涉及到计算机、 法律、 金融等多领域的协作, 而目前的智能合约编程语言存在对于非计算机领域人员不够友好, 对没学习过编程的人员来说难以理解等问题. 具体而言, 目前的智能合约语言存在以下几个缺点:(1) 程序语言与法律合约形式相去甚远.(2) 智能合约程序专业性强, 用户和法律人员难以理解.(3) 从法律合约到可执行智能合约代码生成没有建立直接联系.这些缺点导致合约的编写非常困难, 不同领域人员之间交流存在障碍, 大大制约了智能合约的开发效率和公众的认可程度.近年来高级智能合约语言(ASCL) 已被一些学者提出来解决上述问题. 这种语言是介于现实合同与智能合约之间的一种语言, 通过易读且规范化的语法, 帮助不同领域人员进行沟通, 并可(半) 自动化地实现向平台智能合约语言的转化, 辅助编程人员进行编写.相关工作. 基于区块链的智能合约概念被提出以来, 不少学者在程序设计与平台构造等方面都做了大量研究工作. 这些工作中的多数研究是通过形式化语言验证合约的正确性, 如文献[3 7]等; 也有不少研究是从法律角度讨论智能合约, 如文献[8 11]等. 但以易于读写的语法建立高级智能合约语言模型, 并实现向可执行智能合约语言转化的工作比较少. 下面将介绍与ASCL相关的几种研究:文献[12]提出了一种被称为Si mplicity 的功能性语言, 该语言通过对抽象机器上操作语义的评估,计算空间和时间资源消耗的上限, 在执行之前计算出比特币脚本和以太坊虚拟机中的资源消耗费用,有利于解决智能合约的预付费问题.文献[13]提出了一种类自然智能合约语言( SmaCoNat) , 以可读性与安全性为目标, 通过限制用户定义变量名、 限制嵌套的使用、 代码分节、 拓展基础类型、 自然语法、统一身份表示的几种措施增强合约的可读性与安全性.文献[14]提供了一个新的自动生成智能合约的框架, 其框架利用语义规则对特定领域的知识进行编码, 然后利用抽象语法树的结构来合并所需的约束, 最终可以通过经过约束的语法编码为区块链的智能合约.文献[15]提出了一种新智能合约语言(Fmdel ) ,着重从金融的角度描述了合约的资金转移动作及乘法、逻辑、 时序表达式. 但Fi ndel只包含两种基本动作:Zero与One; 两种乘法运算:Scal e 与Scal eObs;Gi ve 变更执行方; 三种逻辑表达式:and、 or 和if; 以及Timebound 时间表达式. 因此, 该语言功能较单一.文献[16]提出了一种类自然语言智能合约语言( SPESC) , 它是一种以解决智能合约语言对于非计算机人员难以理解的问题为目标提出的高级智能合约语言. SPESC合同结构包括合约名称、 合约当事人、合约条款和附加属性四部分, 前三者分别与现实合同中的合同名称、 合同主体和合同主要内容对应,合约属性则是为了利用区块链不可篡改性记录合约中的重要信息及变更过程.与其它智能合约语言相比较( 见第2 节) , SPESC的语法易读、 结构清晰, 且包含完整的语言模型定义, 是智能合约未来的发展趋势之一, 更接近本文对高级智能合约语言的要求, 但目前SPESC还没有转化为可执行智能合约语言的生成器, 因此, 本文将继续针对这一问题进行研究.本文主要工作. 本文针对高级智能合约语言与可执行智能合约语言之间缺少转化方法的问题, 通过常用合约的实例化研究, 设计一种针对SPESC语言的可执行代码生成器, 给出了SPESC与目标程序语言( 以Sol i di ty 为例) 之间的转化关系, 可简化智能合约的编写、 规范智能合约的程序结构、辅助编程人员验证代码的正确性. 具体工作如下:( 1) 提出一种包括高级智能合约层、 智能合约层和机器代码执行层的三层智能合约系统框架, 该舉 着等:一种胃攀赞飯合錢翁化#., s竞买t纣駕计与黧现 65 5 3 期据幾長處編#了已有撺SiimCeNat 、 SWRL、 Findd、SPESC等高级智能合.约谱言特点基础上而提出的,弁給出了离级智能合约语貪编写智能合约的箱本雛獲》德给出了一种SPESC到1标輕春语言(Solidi tyi的转化规则. 首先, 给.出了根据SPESC合约当事人定义生成目标语言当事人乎合约、以及SPESC其余部分生成_标语言主体子合约的对歲关系I 其次,除程序框架与存储结构外, 目标语言程序还包含当事人人炅贊理、程序时序控制、 异常检测等机制, 这些机制能辅助编程人貝半自动化地编写智能合约程序,本文以竞实合约为桌例* 给出了根据上述转化规则从SPESC合约转化到可执行Sol i dity合约语貧程序、以及该程序的部箸、运行、测试的全过裎.首先, 通过引人当事人群体, 实现了支持当事人动态加人的SPESC竞:买智能費约; 然后V在 成可执行Solidity竞买合约谣言碁惠_, 通过以太坊私链部蓍并运行测试, 验怔了转化过程的正确性,组织结构? 本文粲2节将SPESC考几种相关工作对比分析; 第3节介绍包含高缀智能|钧语If的智能食约系统框樂第4 节介绍SPESC 的语法*第5节分析竞实的流程?第6 节.展示如何通过SPESC编写竞买合约; 第7 节说明以Soli dity 为目标语言的SPESC.编译规则满g节将计算机与-法律學生分组阅读SPESC与Sol i di ty编写的合約,, 完成问答验证易用性, 并将生成的Sol idky智能含约部箸并测试;最后迸行总结: 与眞望?2 相关工作T商我们对本文相关的几个工作1&1 5]进行梳理, 并将它们与SPESC[ 1 6 ]相比较>从而介绍SPESG的机制与优势.(;□gmaGoNat[ 1 3 ]与SPES0_?被择.出 两: 奢结抅栢似. 姻图1 所:示, SmsGsNat 合: 约?含合頻'头(Headi ng) 、 账户(AcwuntSeptioo.)、 资产'{Asset' -SectiQ.n)、 协议(AgreemeajSMrti on)、?件{Event-S<^t1〇n.) , 其中, 合约头、 账户、 事件分辄类似于SPESC.中的合约名称 事人、条款,而资产辱协议分别用来声明合约中渉及的资产以及对资产初始化. 诙含釣中展示TS_JGE>Nrt: 语言编写的出督停车蔡来控制停车场的合约.1ContractinSmaCoNatversi on0.1.23§InvolvedAccounts:4Account'Barrierin'by'AComp'byGenesi sali as'Barri erin'.sAccount'BarrierOut'by'AComp'byGenesisalias'BarrierOut*.67§InvolvedAssets:?AssetTheCoi n'byGenesi salias'TheCoi n'.9AssetParkTicket*bySelfalias'Ticket'.i 〇Asset’OpenBarri er'bySelfalias’Open’,ui2 §Agreement:i sSelfissues'Ti cket'withvalue42.uSelfissues'Open*withvalue1 .151 6§InputEvent:? 7 ifI nputisequalto'TheCoin'fromAnyoneisandifvalueofI nputisequalto0.3i 9then2〇Selftransfers'Ti cket'wi thvalue1toownerofInput.21 Selftransfers'Open'withvalue1to'Barri eri n'.22Selfissues'Open'withvalue1. 23endif2425 ifI nputisequalto'Ti cket'fromAnyonethen26Selftransfers'Open'withvalue1to'BarrierOut'.27Selfi ssues'Open'withvalue1.28endif图1SmaCoNat 合约翁于欒产做: 出: T: 更加具体的描述考限定,, 但暴Si取CeMst与乘文中对ASC.L■'要:拿相比害_一些差系: ①SmaCoNat 中株有_: 达如钶隹合约中存储_息, P、支持对于资产转移的描述<因此应用范爾较小; ?SmaCbNat 中没有对于时序的控制, 每个InputEvent 之间相互独立, 仅通过资产进行联系, 条款之间的关系更难梳理:与理懈,(2)文献[1C釆用改进后的网络本体輋賃COWL)—语义网规则语貪<SWRL)描述智能合约. 如_2 所示, 子图(a)是通过SWRL表示的智能合钓, 子图(b)是曲SWRL, 转化的JS0N格式键值对, 子图Cc) 是:最终生成的Go语言智能合钓. fi2展示了对病人信息进行校II的食约, 该合鈞要求疴人性别为女'性5 年爾大于&參尽管该文献提供了从SWRL自动转化为智能合约的生成器, 但是该锫言( 如廚2Ctf) 所示)采用本(a)SWRL智能合约(b)JSON格式键值对(c)Go培言智能合约图2蓮斌语XR痛典1 ( 满&0’生威會詩6 56 计導机攀报: _1苹体论语言的语怯. 表示,不易读写, 且主要虚用于对数据的限制考检验, 缺芝对于数据、 合约状态变化以及金_方面韵描述.(3} Fi mkl[1 53是一种声明式面向金融的智能合约语f, 通过两种资金转移动作与乘法、逻辑、 时序三类表达式的组合编写合约. 其合鈞最終体现为一个表迖式. 如下所示:£zcb  ̄! And(GixiMScolei1, 0.( fm-i1:SI>>>i,Af(?pw+1vears.Bwuleil1? (JncilSl'ii) )}.读翁达式翁示vH|攒人向倩掌人: 償礬10 USD,一_后借款人还款llUS'D. 由此可见, Findel 可以表示具有时序苯系的筒单金融合约*但无珐3^持变量的定义, 且一个合约只能渉及两个当事人, 与高级智能含约语1TASCL要求不符>(45SPESC[1 6]语言类似擎自, 然靜肓, 通过采用瑪实世界合屛中的语法元素,构建了SPESC谙法模型, 支持含缚当霧人权利 与义务(shal l )、 以及資产转移规则的定义?例如, SPESC描述的买卖合数如圈5所示.contractSimplePurchase2{partySeller{post〇collect〇}partyBuyer{一}info: ProductInfotermnol: Buyercanpaytermno2: Sellershallpostwhenwithin5dayafterBuyerdidpay.termno3:BuyercanconfirmReceive一"termno4: Sellercancollect一"typeProductInfo{price: Moneymodel: String图3SPES) C、合:餘示例该合约展示了销售者和购买: 者之间商品买卖的基本流程, 包含四条条款: 购粟者可以付款—荽者付款后. 销售者戀在5天内发货? 购实者W确认收货; 错售者有权收取货款.SPESC兼腻了现:实合约与现有智'能合约的诗点: 通过条款方式明确了合约当事人的权利与义务、同时面向甫法与金融领域定义了灣事人行为、 资产转移拇作、 履行期限以及变量化的合约信息.因此,SPESC支持编写买卖、竞买借贷.金融娄合鈞, ,, 同时也可寒现投裏s存怔等司法类合约. 与其它方案相比, SPESC更接近于ASCL要求.3 系统框架3. 1 系统目标禱于区块链的智能合约系统通常是指支捧可自动执行的含约代码生成并运行的软件系统. 现有的智能合约系统可分为两层: 智能合跨层与机器代码执行层? 为了增强合约的规范性和易读性, 本文的智能合约系统在这两层结构之上添加一层高级智能合约层, 高级智能合约语言在智能含鈎语言之上提供了更优化的封裝, 形成了类似于高敏程序M#与低级程序 言之间的美系, 如C++谙言与汇编语言.对本文的智能合约系统提出以下'棄求:(1) 高级智能合约谱言更便于阅读与理解*( 2)规范化智能合约的编写.C3:) 能支持高效的智能合约生成.⑷生成更系统的目标语言智能合约程序框架?3. 2 智能合约编写框架基于本文所提出的三层智能合约系统, 合釣当事人通过高级智能合约语言编写智能合釣的流程及框架如菌4 趼示? 在此框架中, 嘗先, 用户可以根据现实合同或真:实?樹进行高级智能合约语言的编辱5 然后, 通过高级智能合约语言的编译器, 将合约转化为传统程序语言编写的智能合约; 最后^生成机器代码并将其部署运行祖区块链中?现实合同 髙级智能合约语言 智能合约语言? 法律效力 转%?结构规范 ?图灵完备?自無语言?时序逻辑 ?事件触发?人工裁决?类自然语言?链上交互^JL虚拟机执行1鑪1 内存,数据, 机器11机器结果1数据 代码 11代码>成发布执行结果r 读取数据区雌下载代码V部署区块N-1区块N J区块 * NH1>慮4 智能鲁韵 架( 1) 现实合词在符合法律故精浞下签订成立后就具有法律效力. 规实合词的书写与?式相对自坩,没有严格规. 定的格式, 郎使合同中脊存歧义或缺曹, 也可以由司法机构根据法律与合约当#人的真实意图进行栽决. 它与目前的智能合约相比, 具有以下特朱 岩等:一种高级智能合约转化方法及竞买合约设计与实现 65 73 期①具有法律效力;②采用自然语言, 书写自由;③一旦出现争议可由人工裁决.(2) 高级智能合约语言将计算机程序、 法律、金融等多个方面的特点融合在一起, 以一种既比程序语言更容易被理解、 又比自然语言更规范的方式表达合约内容. 本文所采用的SPESC具有以下特点:①参考现实合同的结构;②通过时序逻辑表达时序关系;③采用类自然语言的语法.(3) 现有智能合约语言与传统的程序语言类似, 并在此基础上设计或预定义了区块链相关特殊元素或操作. 由于智能合约主要涉及多个用户之间的交互, 因此多采用事件触发的方式, 由用户调用并触发智能合约运行. 目前主流的智能合约语言如Sol i di ty、Java、GO等具有以下特点:①语言是图灵完备的, 表达能力强;②事件触发的方式执行;③预定义了与区块链交互的操作.(4) 智能合约通过编译生成机器代码后, 可在虚拟机或容器中运行, 它的部署执行步骤主要分下面三步:①部署智能合约. 将机器代码发布到区块链中, 使得其它参与共识的节点可以获取智能合约以便验证;②执行智能合约. 在执行或验证智能合约前,将智能合约代码下载到本地, 同时将存储在区块链中的合约状态恢复到内存中, 并在本地虚拟机中运行;③发布执行结果. 根据输人参数运行智能合约后, 将执行结果与其它参与验证节点共识, 记录到区块链中.4SPESC介绍下面介绍本文采用的高级智能合约语言SPESC的基础, SPESC智能合约由四部分组成: 合约名称、合约当事人描述、 合约条款、 附加信息.定义1. 合约. SPESC合约具体定义如下:Contract::=Titl e{Parties+Terms+ Additi onal +}.合约的当事人可能是个人、组织或是群体, 合约中应记录其关键属性和行为.定义2.当事人. 合约当事人具体定义如下:Parties::=partygroup?PartyName{Fiel d+Action+}.在上述定义中,group关键词表示合约的当事人是群体, Rei d表示当事人在合约中的需要记录的关键属性, Acti on声明了当事人在合约中的权利与义务.个体当事人是指合约中拥有一定权利或义务的个体, 如买家、卖家等. 群体当事人是指在合约中拥有相同权利与义务的多个个体, 如投票人、 竞拍人等, 群体当事人既可以在合约执行前事先指定, 也可以在合约运行中动态加人或退出.当事人定义是为了便于处理与记录当事人的信息. 每个个体在区块链中都有对应的账户地址, 因此,当事人属性中默认包含地址属性, 用户可以通过设定具体地址来规定当事人的具体身份, 也可以不在编写SPESC时规定, 而在智能合约运行时根据条款与执行情况进行变更.合约中的条款分为权利条款和义务条款两种,权利表示在一定条件下可以执行的动作, 义务表示在一定条件下必须完成的动作, 而未满足条件的动作或未被写人合约的动作表示禁止执行的动作.定义3. 条款. 合约条款具体定义如下:Terms:termtname:PName(shal l| can)AName(whenPreconditi on) ?(whileTransferOperati on+) ?(wherePostConditi on) ?.在上述定义中, PName 表示当事人, AName 表示执行的动作, Preconditi on表示可执行该条款的前置条件, TransferOperati on表示执行该条款的过程中伴随的资产转移, PostCondi ti on表示该条款执行结束后该满足的后置条件. 前置与后置条件区分的依据是: 合约的业务逻辑可通过前置条件与时间表达式予以表达, 对于程序预期外的情况, 可通过后置条件予以限制.资产转移的操作被分为存人、 取出、 转移三种.定义4. 资产转移. 资产转移操作定义如下:TransferOperati on: ;={ Deposi t}deposit(val ueROP)?AssetExp| { Wi thdraw}withdrawAssetExp| { Transfer}transferAssetExptoTarget在上述定义中, ROP表示关系操作, 包含>、<、=、>=和<=, AssetExp 表亦资产表达式, 用于描述转移的资产, Target 表示资产转移的目标账户.为了保证智能合约检查与记录的功能, 所有资产转移需通过合约账户实现. 如A向B转账的操作, 需先由A向合约账户转账, 再由合约账户向B6 58 计導机攀报: _1苹转账f通过上述方法S 合约便于根据条款对转账条件与金额检查, 同时在食约中记录转账信息, 因此,合约中渉及的资产转移本质应分为W种,即账户向合约转移和含约_向账户转移, 如图3(a)所示.图5 黉产__德#由于从用户账户向合约转移资产的操作只能由该用户自a主动执行, 而不能强制执行,因此为了区分执行者考其它账户 资产转移操作分为三种, 如图5( W所示s(1) 存人(d印oMt)? 用户由域将憲: 产存人合约.( 2) 取出( withdraw) . 根据合约条款从合约取出资产‘C泊转移(transfer)? 根据合约条款从合约向其它账户转移资产.在三种资产转移操作中, 存人操怍与后两种操作不同, 在后两#中, 操作的资产都是事隹在合约条款中约定, 由常量填是魔鴦可以准确描述的. 而在存人操作中, 由于蕞由用户主动执行;》荐人资产不一定由合约直接规定含约A能对资产进行限定, 如在第!5 节描述的合约中, 合對无法直接规定竞实人在竞拍时的出价、而可以P良制为出价一定要大于当前_高价■此外? 资产转移操作述. 与墨体的智能含约乎台及语言有关? 例如. 在以太坊平含中, 账户既可以基合约账户也可以是用户账户?由于Solidity 编写的合钓中可以定义布收到以太币时自动执行的接收方法, 向未知用户转移资. 产可能存在安全风险. M此,在以以太坊作为智能合萄平台时, 虛尽量通过用户主动取款的方式代眷转账方式.程. 竞买(Auction) 是专门从事?拍卖:亚务的机构■接受货主的委托, 在规. 定的时间与场所, 按照一定的章鐘和规则, 将要抬卖的货物向买主展示, 公开叫价竞购, 巔后由拍卖人把货物卖给符合规则的买主的一种现货交易方式. 本文主褰讨论以最高价成交的竞买合约.意买合_约渉及两个当事人:( 1.) 捎卖人. 即从事拍卖括动的企业法人.( 2) 彘买人.即参加竞购拍卖标的的公民、法人或其它组织,最高价竞买流程如图8 所示; 其流程如下:(1) 首先, 由拍卖人或主持人开始竞拍, 并设置竞拍底价和竞栢结束时间.( 2)竞拍斯间竞.买人fi时可以进行出价* 筒时Jb交狎金t: 如果出价大于目前爾裔价,lil讀为新'嫿高价, 押金放人资金池, 并将之前儀湾齿价着所变押金退回y否则, 出价不大 目前讀高价, 出价失败, 道国押金^( 3> 在竞拍时间结東后, 拍卖人可以收取合釣中掌高通价齒押禽-嫌6 费福程5 竞买合约6SPESC编写竞买合约本文將通过基SPESC的拍論会錄实钶?珙B4義上:迷的濂程中?用SPESC编写合约(见附件A)SPESG生成器, 并验证生成合釣的正确性以及三&分为三个部分:合约框架的可用'性i举节将介绍竟买脅约规卿及流(1) 食约当事人? 如前所述, 竞买合釣包含竞买朱 岩等:一种高级智能合约转化方法及竞买合约设计与实现 65 9 3 期人与拍卖人两方. 首先, 竞买人的定义如下:partygroupbidders{amount:MoneyBidOWithdrawBid( ) 還M人属于群体当事人, 是.超户在执行^竞拍操作Bui 时表明参与竞、 买弁注册成为竞买人. 竞买人包含货币裘型的属性amount, 甩擎fe录竞买人的押金池, 用 轉牧无敏的进价? 同时WlthdrawBi d 声明了竞买人可以回收查价失败所交的押金.其次, 拍卖人的定义如下:partyauctioneer{StartBidding(reservePrice:Money,auctionDuration:Date)Coll ectPayment( )J拍卖人即拍品所有者属于个体当事人, 声明了拍卖人可以执行的两个动作: 开始竞拍StartBidding 和结束竞拍Col lectPayment. 在执行开始竞拍时, 需要输入两个参数: 底价reservePrice 和竞拍时间auctionDuration.( 2)合釣中记录的附加信息. 本含约中主寒舊粟记_三个变量:highestPrice:MoneyhighestBidder:biddersBi ddingStopTime:Date第一个变量为货币鸯遵, 记緣了当前最高价, 第二个变量为竞买人类翌, 记焉了当前最高出价者第三个变量为曰期类型. 记歲了竞拍结束时间_在此处定义的債滇会被记. 豪到区块链中> 从而保证K块链不仅记录了信息当前的状态, 还会is录含约执行过p中每一步执行后的历史状态?由于&块链数据具有不可篡政性和时序性, 保证了智能合约状态的不可篡改性和可追溯性, 智能合釣与K块链绪合簡一方蔺优势就体瑰在途M?p: ) 条繫, 本会钧中;gs在載: 条条在第3 节的竞买合约分析中可以着也, 有三个_裏当事人主动触发的过程* 分别是: ①开始食拍、②钽价竞拍和③:收取货款, 其佘流程可由程序自动完處,由于任何账户可以柱册为竞买人, 且本■ 文中以Soli dity为目标语 如第4节所述, 如果直接向拍卖人发H资金:是有安耷风险的, 让拍卖人自己取钱会更加安全. 因此, 在爾写含约时添加收回狎金条款,如: 圈7 所亦,通过Petrt网表應了拍蠢: 过黯的状态_移:圈雜中, 合约分为四种状态: 和五种动作. 状态包括生效、 竞拍中、 竞拍结束、合约终止j 动作: 包猜开始食拍、出价竞拍、 收回押金、时间结東、收取货款?在五种动作中, 时间结隶是斑甘箕机自动触发* 其佘四种为用户触发;? 根据四种动作, 编写如下条款.-条款1. 发起竞拍条款寒义如下:termnol:auctioneercanStartBidding,wherehighestPrice=reservePriceandBiddingStopTi me=auctionDuration+now.拍卖人( auctioneer) 有权触发动作发起竞拍(StartBiddi ng), 在动作执行后, 当前最高价(highest-Price) 应为拍卖人输入的底价( reservePrice), 结束时间(Biddi ngStopTi me) 应为当前时间( now) 加上输入的竞拍持续时间( auctionDuration) .条款2.出价竞拍条款定义如下:termno2:bidderscanBid,whenafterauctioneerdidStartBiddingandbeforeBiddingStopTi mewhil edeposit¥value>highestPri cewherehighestPrice=valueandhighestBidder= thisbidderandthisbidder: :amount=thisbidder I !Origi namount+value.竞买人(bi dders} 可以在拍卖人发起竞拍g*且在竞拍结東前, 向合鈞转账(deposit) 进行出价(Bi d)?其:中 抬盡人发起竟撤0由 ?arti 0_5rdidStartBiddi ng_孝, 在囊拍结乘翁由befomBidding-蠢示, 如果出价<¥*1 咖5大于巨前聲畜价(liighestPri—J出价成功|: 如栗离价小于讓警f最畜价, 则出价失败.动作执行成功后, 巖芮出价人的属性( thisbi dder: :amount) 中愈泪職了幾败的街价总额s 其中为方便表达, Origi n关键词表示动作执行前的值,660 计 算机 学 报 2021年合约当前最高价( highestPrice) 与最高价出价人(highestBidder) 应为本次出价( val ue) 与出价人(thisbidder) .条款3. 回收押金分为两条子条款定义如下:termno3_l:bi dderscanWithdrawBid,whenthisbidderisn^thighestBidderandthisbidder: :amount>0whi lewithdraw¥thisbidder I;amountwherethisbidder I !amount=0.如果竞买人a!dders〗 不是最高出价者, 且当前合约中存有押金(thisbidder: :amount >0), 可以取回无效的竞价( WithdrawrBid) . 条款执行成功后,该竞买人押金记录( thisbidder:: amount) 应为0.termno3_2:bidderscanWithdrawBid,whenthisbi dderishighestBidderandthisbi dder: :amount〉highestPri cewhi lewithdraw¥thisbidder I :amount-highestPri cewherethi sbidder I !amount=highestPrice.如果竟:实人是最髙出价者* 且当前合约中存有震靈襲人竞价失败的狎金'《thisbMsigr ;::high成Price), 可以取回无敎的耷价-条款执行成功后, 该.龛駕.人押金记录应为最高价.条款4. 结束竞拍条款定义如下ttermno4:auctioneercanCol l ectPayment,whenafterBiddingStopTimeandbeforeauctioneerdidColl ectPaymentwhi lewithdrawShighestPrice.拍卖人(aucti'mieet) 在竞拍时间謂東后* 且没有收取过货擊U可以收取、货款(Coll ectPayment) 并将趣商价货象敗出C withdraw).7 目标代码生成本节通过竞买合约的例子.. 讲述SPESC的目标代码生成方抜, 从而斑编写好的SPESC合约自动生成¥ol i di ty代猶7.1 目标语言合约框架生成的Sol idi ty 合约分为两部分:(1) 当事人合约 当事人,定义生成的合约. 芏要负賣3事人人员的管理、关键事件的记录与统计和记录飾查询功能.( 2) 主合约. 由其它部分生成的合约, 主要包括变量的定义、修饰器(Modifer).以及条款生成的方法.下面分别对这两个方_的生成过程进行阐述.如圈8所 蘭中麋p了由SPESC自动生成的Soli dity潘言竞赛合约类图, 并通过带颜色的线标明TSPESC元素与其对应关系, Soli dity语官竞繁合约盎分为三个部分, 拍卖人倉约、竞实人含约与舞买由体合约?拍卖人合约中包含相卖人的地址、 人员的注册与查坷方法以及对其所属的两个条款StartBidding与Gol l ectPayment的记录?竞买人合约包含由地址和SPESC中定义的变儳amoat姐戒的結构体>结构体数鳥、 映射遠:、人虽_加与查询 法以及ammnt 的貴_与乘取方法.龛买主体合约中包含当拳入的定义、SPESC中二条附加慑&私ig:he: MPriC0、 higfi械Bidder、Biddhr§-&吵77騰的定义以及拫据五条条款生成的四个方法和商个修饰簾C:o nl yb iddacs、邱1 ysuetimiee; r )., 其中,图asfEse,_成合ii■图讀:處養#舉 着等:一种胃攀赞飯合錢翁化#., s竞买t纣駕计与黧现 661 3 期龜歡3.1 聲S.2 声明猶悬興一个动作"Withdra衩Bi d,因Jfe只生成一个方法》此外, 对于当事人的管理, 除了基本的操作外, 未被使用的管理操作会以注释时方式提供, 如象取当事人群体列表、 删除个体等, 如皋用户在方法的实现中需要使用y可以解除注释使用. 而对于不参与时序控制前条款:, 如竞憂合约中的出价竞拍(fid)和取屈押金( Withdrswmd), 不.#令约中生成记暴执行情况的属性与方法, 实际执行積况仍可以在区块镶中浪溯^恒不在合约中另行记录与处理.7. 2 当事人合约的生成每个当事人都会对应生成一个当事人含约*_于_事人可分为个体a#人■群体当事,人两类(见第. 4节),因此, 灣事人合约可分为个体当事人合.约(Indi vidualPartyGcntracstJ或群体当拿人合翁(GroupPartf-C〇ft: tract个体当事人#约被用来规范一定权利或义务行为猶个体, 如实家、■ 卖家对遺的食约, #体挡事A#约则用来规定拥有相同权利与义务'行为的多个个体, 如投擊人、竞拍人对应的合约. 群体当事人合约与: 个体当參人_区; 拿于: 群体当事人合绮顏食数:组及映射络构体及増删操作>使得群体当事人可以在: 合约运行中动态加入或退出.两乘当*人合约结构如图9'所示?闺I 当_, 人合維_#情况1?当#入个体生威的Sol idity合约肉容按类別分为三个部分.⑴当事人属性, 当事人个体露要记遽的内容包括账户地址、成员嵐?性、条款执行记睪, 账户地址作为账户的唯一身份标识, 对:应账户#区: 块键中的地址(11. 成员属性是在SPESC中由用户使定的_: 要记录的属性, 并会在屢性操作中生成对应的设定与获取方法*秦款执行记議Ree?jri: 裂成规厕如下: 对_该当事人限定的条款集合中中的每个条款“ReeoitdI\^'-li_is-^M^I3dne*;V??;? £r#} ■其中, 《?_: 着取条歉z 的动作名4变量各以下划线起始是为了与用户定义变量K分. 例如, 对于条款1对应的动作StartBiddi ng, 按上述规则将生戚两个变量: _isSrdWlWiife發 记录条款Z 暴费執行完威与-SfiarrSMr ii吨 记暴条款? 执行时间,如图10 所示,竞实例-中拍蠢人未在/SPESC中隹义薦性U低#酉个衡屬華軟StartBiddi ng 利Gol l ectBayment, 每个条拿隹翁前述猶两个屬性,例Wl:_isSMnBiddin:gDoae, ffl _St£i rtBidditigTime.此外?: 瘦讀— 欢Aiirf-?%**麗于记奪抬素人地址.I//attributesofactionStartB iddingbool_isStartBiddingDone;uint_Sta rtBiddingTime;//attributesofactionCollectPaymentbool_isCollectPaymentDone;uint_CollectPayme ntTime;address_auctionee rAddress;图圾 拍翁A合蠢变暴⑵人员管理. 根据当事人是群体还蠢个fr,生成对应管理方法. 个体管理较齿简单, 包括注册、注销与查询三种方法在竞实例子中抢卖人只渉及注^册*%查询拍禽人地址两种方法, 如图11 所示.functionregist(address)public{_auctioneerAdd ness=a;}functiongetAddress( )publicviewreturns(address) {return_auctioneerAddress;Hu 拍肩A的人黄管載(泊条款执行管理? 对于当事人的每条条款, 生成条款执行记_方法, 在条款执行完毕后记录完成时间; 生成査询方法, 返回条款完成时间. 拍卖人的开始竞拍条款生成方祛如图12 所示.I functionStartBiddingDone( )public{_StartBiddingTime=now;_isStartBiddingDone=true;}—functionStartBiddingTime( )publicviewreturns(uint") {if(_isStartBiddingDone){return_StartBiddingTime;>—returnmax:l>'图12 拍卖人条款执行管理方法① 账户在区块链中的地址通常是账户公钥的哈希.参与方个体个体变量地址成员属性条款执行记录方法人员管理注册注销查询属性操作获取设定条款执行管理记录函数查询函数参与方群体个体变量地址成员属性条款执行记录群体变量数组〈 结构体〉映射〈 地址, 数组坐标〉方法人员管理增加删除查询属性操作获取设定条款执行管理记录函数6 62 计導机攀报: _1苹情况2. 当豪人:群体除当事人个体的内容外,还包含更丰霄的_人管理方法, 以及多种记录的查_方式?具律生成规则如下:(1) 当事人属往? 对于当拿人群体, 为了使当事人可以遍历, 采用结构体数II记录个体内容*同时为了方便用户逋过地址查询用户个体僮息, 添加账户地址到幾載坐:__映||_CM:appiiigtable}, 如图lf所示. 其中数组中记录的用户个体变屬与当事人个体的崔舊鮮同.MappingTableArray嫌13 貪參A#体人綦誉is( 2) 人员管理? 当事人群体人员:管理包括添加、删除1査询.添加操作如图13 虚: 线中A.11与A.2) 所示, 例如, 为了添加新的当事人个体 A. 1) 首先将个体燈息插人数组最后一位; A.2) 然: 后在映射表中记录辑个体地址Addrea> sB对应雜数逾坐标JV_删除操作如图13 虛线中B. 1) 到B. 幻所示, 例如, 为了删除个体 根据地址AdctessA从映射中查询到其在数组的'坐标K后< ^. 1)将数组最后一象JV的个体Pg替换掉 位的信息, 并将第IV位输空; B. 2)将映射中记录的 坐标替换为新坐标K;BJ) 将匕的坐标:替换为初: 始像0. 如果删除的个体是黎龜中畢后一隹,则直接將数组和映射表对应位置資置J? 空即可?在竞裏合约中, 竞买人渉及添加与查询操作, 如薦14JF示.functionadd(addressa) public{_biddersEntity.push(bidderstype( {_biddersaddress: a,amount:0}) ) ;_userlist[a]=一sum;_sum++j}functioncontains(addressi)publicviewreturns(bool){return_userlist[a] !=0j>I图1 4 營买人: 的人员;會理方窗GT) 条款执行管理. 当事人群体生成的合约中>除3事人个体包含的记录方法外, 在#约中记款第一个人与最后一个人的完戚条款的时间4是供以下”兰种查询方式i①A1 丨 查询. 最后一个个体完成时间;②First查询. 第一个个体完戚时间;③This 查询■ 这个当拳人个体完成时间,如在,投票合约中, 主持人在所有人都投票H后才能统计, 思SPESC表示如termnol:chairmancancount,whenafteral lvotersdidvote.则通过_一种方式:盡: 衡时间_7.3 主体合约生成生成的主体合约主要分商部分.第一部分是合约属性和当事人的定义与初始化. 合约的属性就是甩户在SPESC中定义的合约信息, 当事人通过上一?节定义的当事人含鐘囊: S义. 其中, 生成的变量默认访问权限为公开、(publ ic》类ifsSoli dity中念开权琅变量可以通过合约直接访问,从而象取合约状暮例如, 竞.实者可以查询合约中/j%/j 德 廉知_貪出价人地址,而_: 定自 3是否中标.第j部分是条款的处理*SPESC合约中的每个条款包含一个动作s 在Solidity中对应生成一个方法?#费中包貪执行条件裣测、方法主体翁执行_,擧橇测三个部分* 如果条件检测失败, 程序会抛出异常弁傲栢应处理.義Solidity中抛出: 暴常'分为tequir#、.a銘妓t:和revert: 三种? 其中, TecjuireJI■傭爾趙"宁检测执行条件, 如方法的输人或合约的状态等, 如果检测不'通过, 以禽纺平舍奢返述痛卞的:負趙 I 而assert关键词用于检测鞋#的?外情况, 在正确运行的程序中aggert 检测永远不会失败,一旦检测失败, 意味着程序中存在错谋,应该修改代码s 而rewrt 关键词与require 类似, 但可以通过与其它语旬错含表达更眞_的情祝?条款的执行条件有三种限制:( 1) 当事人限制. 条款规定有哪些当事人可以执行-( 2) 条件限制>SPESC条款市的前置条件,( 3> 金额限制? 交易操作中的deposit]吾句, 调用该方法青粟向合约存入的金额限制.执行条件检测失败属于程序正常状态, 应返还用户剩余费甩* 并M滚状态?因此, 使用关镩爾reigui rerevert.在条款所生成的方法最后会根据S置条件生成舉 着等:一种胃攀赞飯合錢翁化#., s竞买t纣駕计与黧现 663:3 期相应的执行结果检测, 辅助用户编写方法主体逻辑*检验程序中的错误、一旦?置条件裣测失畋, 袁. 味着程序中参在错误3因此, 使用 关键饲进行检测.SPESC编译规则将依据条款的后蹙条件_测生成方法所包含的主体内容, 翁内容作为编程人员的参考. 词时>编程人员也需依照业务逻辑及其它细节曾查、 补充完成主体逻辑的设计. 在这个过程中,已知方法输人和结果>用户只需麥关;注单个方法的实现,通过后蠻条件验证执行正确性即可.在本例子尊中, 巷序逻辑相对比较筒单.因此,在自动生. 成后t只需添加竞实人注册代码后> 检查代码逻辑没有'问窥, 就可以直接运行.如面1S 所示^SPESC语言代码记齿A, 所生成的Sol idi ty代码记: 为B,when^?fterauctioneerdidStartBiddingI beforeBiddingstopTime(whil6)depos i t¥value>highestPricefwh erehighes tPrice=valuean dI highes tBidder=thi sbidderand| thisbidder: : amount=thisbidder: c^) ri^amount+value.\(a)lf un cti onBid( )publi cfp ayabl &) {! if(I b idd er s . c ontai n s(msg. sender))i b idder s . a dd(m5g. s ender) ; // REQUIR Erequi re(no w■au cti on eer . Star tBi d di ngTime ()&&require(msg. v alu e>h igh estPr ice) ;this b id der tB i dd ingStopTime) ;bi d der s.getamount(msg.sen der )j// USE RCODEHE REhighe stP ric e=msg. va l ue;highe stB idder =msg.s enderjbi d de rs . set amoun t(msg. se n der,b id d er s .geta mou nt(msg. s en d er)-+msg. val ue// CHE CKIas sert(high estPr ice=msg.va lue&&highe stB idd er =msg.sen der &&b id d er s .get a mou nt(msg. s en d er)=th is_b i dd er_Ori_a mou nt+msg. va l ue) ;(b)图15蠢嶽2 对应儀系(1:) 根据A 續1 行中:动作1名BM:曼處柑词方法名(B乎福第1 行记为B1) . 如果检测到A中含有资产转移语旬*如第4行的whi l e关键词, 则.为方法添加科yabk关键词,表明方法可以接收或发送以太币:(21根藤A第1行6f5Bidders的银定生成当事人检测. 然而在本例中拫据費约实际意?,出价的人即为食实人,因此, 需果春动去掉当事人限制并添加当事人注册代码(B2?3) : 如果出价者不是竞餐人则注册成为竞买人;(J0根据SPESC中在拍卖人开始鸾实后竞裘时间结東前的前置条件(A2?3)与出价大于最高价的棄求(A4) 生成了两条执行赛求( B4?3根据SPESC中的后置条件(AS-?7), 自动生成了三条执行代码B7?9〉 :记录了最高价, 最高出价人和焉高出价人的资?金池, 供编程人a参考;(5.) 根据后量条件( A5?生成了断言(B10?11) 用于结果检测,其中A第T行中使用了Ori关键词表示诶变議泰方法执行前的值, 因此在方法主体前记录该变量CB6),以便于在检测时使用.上述例子中,所生成的执行代码术縛要修改, 就可以茈确运行,但如果将第二条条款的后置条件:膂换为如下语句:wherethisbidder !;amount=thisbidder :: Oriamount+highestPriceandhighestPrice= valueandhighestBidder= thisbidder.条款表达意思相周, 但生成的方法主体会. 错吳地将i一个最慕价加人本饮出价者前資:金池!ff’C断言可"以成功检测出错误h需要手动调整程序ff生成的语句顺取7. 4 表达式实现SPESC. 辨共含有S録达式: 逡辑、关系、运算、常量和时间表达式. 在SPESC谱賃的转化模型中, 所有表达式都继敢Express 抽象类, 增强了互操作性?如表1 所示L中薦示了SPESC?达式对应的编程镇言运箕符, 以德生成后的优先锲.表ISPPSC表达式对应运算符及优先级优先级 生成运算符 SPESC表达式ActionEnforcedTimeQueryThisExpression2I NotExpression3 MultiplicativeExpressionAdditiveExpressionTimeLineRelati onalExpressionTimePredi cate6==、 !=Relati onalExpression7AndExpressionTimePredi cate8| | OrExpressionConditional Expression?.ImplyExpressionSPESC中的时间表达式类型分为时间点与时间段, 其中类型为日期(Da?)的當量与变養#动作完成时间表:: 达式(AGt;ionEnfot&WTTi nieQuety)v金遍'6 64 计 算机 学 报 2021年时间表达式( Gl obal Ti meQuery) 属于时间段; 而类型为时间(Tmie) 的常量与变量属于时间点.时间线表达式( Tmi eLme) 中, 时间点与时间点不能进行加减运算, 时间点与时间段运算结果为时间点, 时间段与时间段运算结果为时间段. 而时间谓词表达式(TimePredicate) 的返回结果为布尔值, 其生成规则如下:afteranow^>aaafterb=〉>a〉>bcafterb=〉>now〉>c+bwithincafterb=>(now>b) &&(now〈b+c)其中, a 与b属于时间点, c 属于时间段, now为当前时间.8 实验及结果针对SPESC语言及其转化规则, 本节将通过两个实验分别测试SPESC语言所生成合约的易用性和SPESC合约转化可执行合约的有效性.8. 1SPESC语言易用性实验针对SPESC语言的特性, 我们设计了一个问卷式对照实验, 从阅读时间与准确性两方面评估SPESC合约是否比现有的智能合约更易于理解.(1) 参加者. 本次实验邀请了15 名参与者, 包括9 名计算机科学系( CS) 学生以及6 名法学系(L)学生. 15 名参与者被随机分为两组( 即GA和GB).GA由四名CS 学生( 即GACS) 和三名法律学生( 即GAL) 组成. GB由5 名CS学生( 即GBCS) 和3 名法律学生( 即GBL) 组成.(2) 智能合约. 本次实验所用智能合约包含“借贷合约”与“竞买合约”两种, 其中, 借贷合约( LendmgSO) 改编自Github 上的开源Soli dity 程序?. 竞买合约( Aucti onSO) 改编自Sol i di ty 文档中描述的官方示例?. 作为对照, 将上述两种SoHdity 合约编写为SPESC合约形式, 被称为Lendi ngSP 和Aucti onSP.(3) 问卷与数据收集. 实验采用针对不同合约的问卷回答形式, 每个人得到2 份问卷, 分别是借贷问卷、竞买问卷. 试卷包括1〇 个问题, 采用标识a.,表示问卷:r 中第_y 个问题, 具体问题如下:Qi . i 谁能执行confirm函数? ( SS)Qu借款的条件是什么?( SS)Ql . 3 借款会造成什么影响? ( SS)Qu还款会造成什么影响? ( SS)Qu借贷者的义务有哪些? (MS)Qu什么条件下可以参与竞拍?( SS)Q2 . 2 如何取回自己失败的竞价?( SS)Q2 . 3 目前最高出价者可取回之前失败竞价吗? (SS)Qu结束竞买会造成什么影响?( MS)Q2 . 5 竞买者有哪些权利? (MS)其中SS、MS分别表示单选和多选.( 4) 实验过程. 首先, 我们对所有参与者在前一个小时讲解了SPESC和Soli dity 的基本语法和语义; 其次, 通过购买合约的两种语言示例回答参与者的问题; 然后, 要求GA和GB分别阅读Lendi ngSP和LendmgSO, 并填写相关借贷合约的问卷, 我们对每个参与者答题时间进行记录; 最后, 要求GA和GB分别阅读Aucti on SO和Aucti onSP, 并填写有关竞买合约的问卷并记录时间.(5) 实验结果. 在上述实验过程中, 我们从回答过程与回答结果中统计了作答平均时长 与平均准确率 , 其中, G表示组别, Q表示问题. 实验结果如表2 和表3 所亦.表2 问卷1统计(借贷合约)哼. /% PV% pC^y% ̄P%J%GACS7 62. 8 100. 0 100. 0 75. 0 75. 0 83. 5 83. 9GAL 722. 3 100. 0 100. 0 100. 0 100. 0 89. 0 88. 7GA 745. 4 100. 0 100. 0 85. 7 85. 7 85. 9 86. 0GBCS 1551. 2 20. 0 80. 0 60. 0 0 63. 4 39. 6GBL 1193. 7 66. 7 0 66. 7 0 66. 7 39. 2GB 1439.637.5 50. 062.5064.639.4表3 问卷2 统计(竞买合约)丁Gq2 巧,,Fg/% y2.2Pgq/% ^2. 3 吃. 4/%GACS 1264. 0 50. 0 50. 0 25. 0 75. 0 95. 0 64. 5GAL 1437. 3 33. 3 33. 3 66. 7 55. 6 58. 3 43. 0GA 1338. 3 42. 9 42. 9 42. 9 66. 7 79. 3 55. 3GBCS664. 2 60. 0 100. 0 100. 0 100. 0 100. 0 91. 7GBL 756. 0 0 33. 3 66. 7 100. 0 100. 0 50. 0GB 698. 6 37. 5 75. 0 87. 5 100. 0 100. 0 76. 0从表2 和表3 结果可知: 对于借贷合约, 阅读SPESC合约的GA完成速度比Soli dity 的GB 快( 前者用时是后者〇.52 倍) , 答题准确率更高( 提高1 倍多 对于竞买合约, 阅读SPESC合约的GB完成速度同样比Sol kHty 的GA快( 前者用时是后者〇.52 倍) , 且答题准确率更高(提高约0.4 倍).8. 2SPESC语言转化实验针对SPESC合约转化有效性, 我们将通过实验①https : //gi thub. com/t erzim/dappbin②https : // solidity, readthedocs. io/en/develop/ soliditybyexample. ht ml ^simpleopen auct ion朱 岩等:一种高级智能合约转化方法及竞买合约设计与实现 66 53 期的方式验证第7 节方法生成的Sol idity智能合约.下面介绍从编写SPESC到执行完成流程中的实验环境、 实验步骤及预测结果以及实验结果与分析.(1)SPESC语言模型与生成器SPESC包含70 条语言模型与64 条语法规则,以及一千多行的生成器代码, 最终形成一个Ecl ipse插件, 通过插件编写SPESC代码并生成目标代码.SPESC的语法和生成器通过EMF与Xtext 实现,其中, EMF是一个建模框架和代码生成工具, Xtext是一个开发程序语言和特定领域语言的框架.(2) 区块链测试平台实验系统运行在三个Wi nd〇ws7系统的虚拟机下, 区块链采用以太坊平台, 以太坊Geth 客户端版本为1.7.0 stabl e. 创世区块的参数如图16 所示.’ ’homes二eadBlock”: 0,"eipl55Elock”::,’ ’coinbase_ ■: " OxOOOj j DuO OOOjj DuOODOjj D D OOOOOj D D 000 00 OD D 0' *,' 'diffic-LLlty": r? 'mixhash": " Dx C 0 0 C1 C 0 0u C 0 0 C1 C 0 0 0 C 0 0 C1 j 0 0 0 C 0 C> C1 j 0 0 0 C 0 0 C1 j 0 0 0 C' 0 0图16 创世块参数实验中三个虚拟机共部署3 个节点, 分别是一个拍卖人节点A和两个竞买人节点B1 与B2. 每个节点的主要账户初始状态如表4 所示.表4 账户状态账户 A B1 B2地址0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c0xl4723A09ACff 6D2A60DcdF7aA4AFf308FDDC160C0x4B0897b0513f dC7C541B6d9D7E929C4e5364D2dB余额100ethlOOethlOOeth(3) 编译环境Sol i di ty合约需要编译为机器代码才能在以太坊虚拟机中运行, 本文使用以太坊的Remi x编译器, Rennx是一个开源工具, 包含编写合约、测试、调试和部署的功能. Remi x用JavaScript 编写, 支持在浏览器和本地使用.(4) 合约测试合约的测试流程如下, 其中查询步骤由于不影响合约状态、 不造成任何开销且随时可以执行而被省略:步骤1. 由A部署合约, 此时合约中拍卖人由A注册, 只有A可以执行方法StartBiddi ng, A无法执行其它方法, 其它账户也无法执行任何方法.步骤2.A执行StartBi ddi ng方法开始竞拍, 并设置底价为2eth, 设置结束时间为执行后5 mm( 以太坊中的时间每生成一个区块更新一次, 执行时间为当次区块时间, 以太坊平均15s 生成一个区块,因此可能存在少量误差). 此时, StartBi ddi ng、Wi thdrawBi d、 Col l ectPayment方法不能被执行. 任何账户可以执行Bi d方法进行出价, 但出价若少于或等于2eth, 执行失败.步骤3.B1 执行Bi d方法出价参与竞拍, 出价3eth. 此时, 最高出价者为B1, 最高价为3eth, Bl 的资金池里有3eth, 方法可执行情况与步骤2 相同.步骤4.B2 执行Bid方法出价竞拍, 出价4eth.此时, 最高出价者为B2 , 最高价为4eth, B2 的资金池里有4eth. 所有账户可以执行Bi d方法, B1 可以执行WithdrawBi d.步骤5.B1 执行WithdrawBi d收回押金, 然后再次执行Bi d出价竞拍, 出价5eth. 此时, 最高出价者为B1, 最高价为5eth, Bl 的资金池有5eth, B2 资金池有4eth.步骤6. 等到竞拍时间结束. 此时, 只有A可以执行Col l ectPayment , B2可以执行WithdrawBid.步骤7.A执行Coll ectPayment 收取货款, B2执行Wi thdrawBi d收回押金( 不分先后顺序). 合约结束, 合约中没有资金, 没有方法可以执行.( 5) 实验结果与分析经过实际运行测试, 测试结果与上述流程中预测的方法可执行情况、合约状态相符. 账户余额与执行消耗gas 情况如表5 所示, 其中执行消耗gas 指的是智能合约程序在以太坊虚拟机中执行所需消耗的gas, 即程序实际执行的步骤. 存储消耗gas 指的是更改区块链中数据所需消耗的gas, 即将上传到区块链的变量的更改. Gas 所消耗的以太币为coM=Xgasp*rice, 其中gasPrice为gas单价, 由合约用户在执行合约时设置, 单价的高低影响矿工处理的优先级.6 66 计 算 机 学 报 2021年表5 运行情况当事人 操作 参数 账户余额/eth 总消耗gas 执行消耗gas 存储消耗gas拍卖人A 部署(初始化) A99. 9; Bl:100. 0?B2:100:0 2124 04 0 1577 980 546 060拍卖人A StartBiddi ng 底价:2eth; 时间:300s A99. 9; Bl:100. 0?B2:100:0 110 73 7 8 9017 21 720竞买人B1 Bid 存人:3et h A99. 9; Bl:96. 9;B2:100:0 15655 2 135280 21 272竞买人B2 Bid 存人:4et h A99. 9; Bl: 96. 9;B2:95. 9 14155 2 120 280 21 272竞买人B1 Wi thdrawBid A99. 9; Bl:99. 9;B2: 95. 9 44361 38 08 9 6272竞买人B1 Bid 存人:5et h A99. 9; Bl:94. 9;B2:95:9 84 48 0 63 208 21 272拍卖人A CollectPayment A104. 9; Bl:94. 9;B2:95:9 81861 60 58 9 21 272竞买人B2 Wi thdrawBid A104. 9; Bl:94. 9;B2:99:9 44 361 38 08 9 6272自动生成的Sol i di ty 智能合约中, 程序员仅对方法内的代码检查与修改, 而合约的接口、 变量、 修饰器、合约间的关系等程序结构由生成器自动生成.因此, SPESC规范化了Soli dity合约的结构.上述实验以竞买合约为例展示了通过SPESC编写、生成、运行的完整流程. 上述实例表明, 合约既可以通过时序逻辑表示描述执行流程, 也可以通过变量记录的合约状态描述, 因此, 该流程对于其它合约同样适用, 如买卖、竞买、借贷、 投票等.但对于合约中出现的除以太币外其它资产, 如自定义代币、买卖的货物等, 只能通过变量记录, 未来可以增加对资产的定义及操作.9 总结与展望本文提出了SPESC的生成规则, 通过SPESC编写智能合约, 可以自动生成人员管理, 提供便捷的操作与查询接口, 用户不需要考虑当事人存储结构, 但增加了适用性的同时也会稍微增加运算开销; 可以根据条件生成时序控制, 记录条款执行情况;SPESC无法保证生成正确的函数体, 但可以根据后置条件生成方法结果检测, 辅助编写与检测程序.为了进一步改善SPESC语言, 后续工作将包括以下方面: 首先, 为验证SPESC编写合约的正确性,目前已有很多通过形式化验证合约正确性的研究, 如前文提到的文献[3 7]等, 未来可以在已有的SPESC语言模型基础上, 建立形式化表示, 通过形式化的方法, 验证合约条款的前置、 后置条件, 以及条款间时序的正确性, 为用户提供形式化分析工具. 其次, 对于生成的Sol kHty 目标代码正确性, 目前已有一些分析或检测漏洞的研究, 如文献[17 20]等, 未来研究可以根据这些研究继续改进生成的目标代码, 优化程序结构和规范, 增强合约安全性和正确性.致 谢 感请何啸老师在可读性实验中提供的帮助, 感请实验室所有同学的帮助!参 考 文 献[1]Li nnhof fPopi enC, SchneiderR,ZaddachM. Digi t alMarketplacesUnleashed. Berl in,Germany:Springer,2018[2]SzaboN. Smart contracts : Buildingbl ocksfordigi t almarkets. TheJournalofTranshumanistThought ? 199 6,(16) ; 18 20[3]SchransF?EisenbachS?DrossopoulouS. Writingsafesmartcont ractsinf lint//Proceedingsof theConferenceCompanionof t he2ndInternationalConferenceonArt , Science? andEngineeringofProgramming. NewYork, USA, 2018:218 219[4]CoblenzM. Obsidian: Asaferblockchainprogramminglanguage//Proceedingsof 20 17IEEE/ACM39t hInt ernat ionalConferenceonSoft wareEngineeringCompanion( ICSEC) .BuenosAires, Argent ina ,2017: 97 99[5]IdelbergerF?GovernatoriG? RiveretR? etal . Evaluationoflogicbasedsmart cont ractsfor bl ockchainsyst ems//Proceedingsof the20 16RuleML10thInternationalSymposium. StonyBrook,USA,201 6: 167 183[6]SergeyI , KumarA,I loborA. Scilla: Asmart cont ractintermediatelevellanguage. ArXivpreprint arXiv: 180 1.00 687 ,2018[7]Frant zCK,NowostawskiM. Frominstit ut ionstocode:Towardsautomat edgenerationof smartcont racts//Proceedingsof 2016IEEE1stInt ernat ionalWorkshopsonFoundat ionsandApplicat ionsofSelfxSystems(FASxW). Tucson, USA,20 16: 210 2 15[8]KasprzykK. Theconcept of smart contractsfromthelegalperspective. ReviewofComparat iveLaw,2018 , 34 ( 3): 21 30[9]GoldenfeinJ?Leit erA. Legalengineeri ngontheblockchain:4Smartcont racts^aslegalconduct. LawandCritique,2018,29(2) : 141 14 9[10] GomesSS. Smartcont racts: Legalfrontiersandinsertionintothecreativeeconomy. BrazilianJournalof Operations&-Product ionManagement ,20 18, 15( 3): 376 385朱 岩等:一种高级智能合约转化方法及竞买合约设计与实现 66 7 3 期[11]AllenJG.Wrappedandstacked: 4Smartcontracts?andtheinteractionofnaturalandformallanguage. EuropeanReviewofContractLaw?2018,14(4):307-343[12]O’ConnorR.Simplicity:Anewlanguageforblockchains//Proceedingsofthe2017WorkshoponProgrammingLanguagesandAnalysisforSecurity(PLAS?17). NewYork,USA,2017 :107-120[13]RegnathE,SteinhorstS. SmaCoNat:Smartcontractsinnaturallanguage//Proceedingsofthe2018ForumonSpecifi?cation&-DesignLanguages(FDL). Garching,Germany,2018 :5-16[14]ChoudhuryO,RudolphN,Syll aI,etal. Auto-generationofsmartcontractsfromdomain-specificontologiesandsemanticrules//Proceedingsofthe2018IEEEInternationalConferenceonInternetofThi ngs(iThings)andIEEEGreenComputingandCommunications(GreenCom)andIEEECyber,PhysicalandSocialComputing(CPSCom)andIEEESmartData(SmartData).NovaScotia ,Canada2018:963-970[15]Bi ryukovA,KhovratoyichD,Tikhomi rovS.Findel: SecureDerivativeContractsforEthereum//Proceedi ngsoftheInternationalConferenceonFinancialCryptographyandDataSecurity(FC2017).Sliema,Malta,2017 :453-467[16]HeXiao,QinBohan,ZhuYan,etal. SPESC: Aspecificationlanguageforsmartcontracts//Proceedingsofthe2018IEEE42nd AnnualComputerSoftware and ApplicationsConference(COMPSAG). Tokyo,Japan,20 18 : 132-137[17]LuuL,ChuDI I,OlickelI I, etal. Makingsmartcontractssmarter//Proceedingsofthe2016ACMSIGSACConferenceonComputerandCommunicationsSecurity. Vienna, Austria,2016 : 254-2 69[18]AtzeiN?BartolettiCimoliT. AsurveyofattacksonEthereumSmartContracts(SoK)f/ProceedingsoftheInternationalConference onPrinciplesofSecurityandTrust.Berlin, Germany:Springer,2017 , 10204:164-186[19]BhargavanK,SwamyN,SantiagoZanella-Beguelin,etal.Formalverifi cationofsmartcontracts : Shortpaper//Proceedingsofthe2016ACMWorkshoponProgrammingLanguagesandAnalysisforSecurity. 2016:9 1-96[20]PariziRM,DehghantanhaA. Smartcontractprogramminglanguageson blockchains: Anempiricalevaluationofusabilityandsecurity//Proceedings ofthe2018InternationalConferenceonBlockchain(ICBC2018),Cham:Springer,2018 : 45 3-467附录A.SPESC编写的竞买合约完整实例.1contractSimpleAuction{2partygroupbidders{4amount: Money5Bid( )6WithdrawOverbidMoney( )7}89 partyauctioneer^StartBidding(reservePrice: Money,biddingTime: Date)11StopBidding( )12}1314highestPrice:Money15highestBidder: bidders16BiddingStopTime: Date1718-termnol: auctioneercanStartBidding,19whenbeforeauctioneerdidStartBiddingwherehighestPrice=reservePriceandBiddingStopTime=biddingTime+now.2122-termno2:bidderscanBid,whenafterauctioneerdidStartBiddingandbeforeBidd ingStopTime24whiledeposit¥value>highestPricewherehighestPrice=valueandhighestBidder=thisbidderand26thisbidder : : amount=thisbidder : : Oriamount+value.2728-termno3_l: bidderscanWithdrawOverbidMoney,whenthisbidderisn'thighestBidderandthisbidder : : amount> 030whilewithdraw¥thisbidder: : amount31wherethisbidder: : amount=0.32termno3_2: bidderscanWithdrawOverbidMoney,whenthisbidderishighestBidderandthisbidder: : amount>highestPricewhilewithdraw¥thisbidder: : amount-highestPrice36wherethisbidder: : amount=highestPrice .3738-termno4: auctioneercanStopBidding,whenafterBiddingStopTimeandbeforeauctioneerdidStopBidding40whilewithdraw¥highestPrice.41}66 8 计 算机 学 报 2021年tZHUYan,Ph.D.,professor.Hi sresearchinterestsi ncl udeinformationsecurityandcryptography,securecomputing,blockchain, mobilecloudcomputing.BackgroundBlockchainisahottopicinrecentyears,andsmartcontracts , asthecoreofthesecond-generationblockchain,arewidelydeployedindecentral izedappl ication,andareconnectedtothefieldsofcomputer,finance,l awandsoon.Atpresent,therearesomeresearchesonhowsmartcontractsareexpressedfromanaturallanguage-l ikeperspective,someresearchesprovidesanewframeworkofautomaticgenerating,andsomeresearchesprovideformalmethodstoverifythecorrectnessofsmartcontracts, butthereisnocompletesolutionfromsyntaxrepresentation,codegenerationtoexecution.Thispaperfocusesonthelackofconversionmethodsbetweenadvancedsmartcontractlanguagesandexecutablesmartcontractl anguages.Bas edonthepreviousSPESCresearch,thispaperdesignsathree-layerstructureoftheQINBo-Han,M.S.candi date.Hisresearchinterestsi ncl udeblockchai n,smartcontract.CHENE, Ph.D.candidate.Herresearchinterestsincludecryptographyandnetworksecurity.LIUGuo-Wei,seniorengineer.Hisresearchinterestsi ncl udebigdata,securitysystem,securi tymanagementandstandard.smartcontractsystem,includingadvancedsmart-contractlayer, basicsmart-contractlayer, andexecutabl emachine-codelayer.Thenweprovidetheconversionrul esoftheadvancedsmartcontractl anguagetothesmartcontractlanguage,anddemonstratesitthroughexamples.FinallyweverifythelegibilityofSPESCandthecorrectnessoftheconversionprocessesthroughtwocasestudi es.ThisworkwassupportedbytheNationalKeyTechnologiesR&DProgramsofChina(2018YFB1402702)>theaimofwhi chistodesignanddevelopsmartcontractservi cebasedonblockchainforresearchingontheoryandtechnologyofmodernservicetrusttransaction.ThisworkwasalsopartlysupportedbytheNationalNaturalScienceFoundationofChina(61 972032) . |
[返回] |