没有合适的资源?快使用搜索试试~ 我知道了~
区块链:研究与应用2(2021)100020智能合约余额克劳迪奥·萨塞多蒂·科恩·Cosimo Laneve*博洛尼亚大学计算机科学与工程系,INRIA Focus,博洛尼亚,40126,意大利A R T I C L E I N F O关键词:智能合约区块链静态分析成本分析加密货币运动A B S T R A C T我们定义了一种技术,用于分析由于数字资产转移而导致的智能合约余额更新。该分析解决了轻量级智能合约语言,包括两步翻译。首先,我们通过一个简单的函数语言和静态分派来定义智能合约函数的输入输出行为然后,我们将这种中间语言的术语与计算数字资产损失或收益的成本方程相由此产生的方程可以被馈送到现成的成本分析器,以提供损失或收益的上限我们的分析已经原型化,我们报告其评估,并讨论扩展额外的功能。1. 介绍智能合约是在分布式网络上运行的程序,其中节点以区块链的形式存储公共状态这些程序越来越受到关注,因为它们实现了可以管理和转移具有相当价值的资产(通常以加密货币的形式,如比特币)的应用程序,称为分散式应用程序。这些应用的例子是食品供应链管理、能源市场管理和身份公证。最近已经提出了几种智能合约语言来指定去中心化应用程序,例如比特币脚本[1],以太坊的Solidity[2],天秤座的Move [3]。这些语言中的安全保证是至关重要的,因为可以编程大资本的转移事实上,在过去的几年里,由于智能合约中的微妙漏洞,已经损失了数百万美元[4,5]。为了减轻智能合约分析的负担,已经设计了许多自动化技术来验证相关属性,例如流动性[6],天然气消耗[7]以及编程模式的合规性和违规性[8]。这篇文章遵循了这些研究路线,重点关注了著名攻击的另一个关键特征:将加密货币资产从一个智能合约转移到另一个智能合约。事实上,我们的技术会自动计算智能合约在交易过程中获得和损失的加密货币数量的上限。我们在智能合约的语言上进行了这项研究,其结构受到了Solidity的启发。该语言是轻量级的,因为它没有复杂的特性,如新契约实例化、继承、try-catch异常处理、数组和映射。在我们的设置中,程序是一组(有限的)智能合约,其功能可以更新状态或转移加密货币或中止或调用其他功能。总的来说,我们的模型简单而严格,在我们看来,这是推理智能合约属性和理解其基本原理的基本标准一旦分析了核心模型上的属性,就可以解决从主流智能合约语言中提取的其他更复杂的功能1.1. 我们的贡献在第2节中,我们定义了mSCL,这是迷你智能合约语言的首字母缩写,被称为minuscule。 mSCL具有函数调用、字段更新、条件行为、加密货币转移、回退函数、递归和失败。更重要的是,mSCL有一个正式的操作语义,在第3节中定义,并且表达能力足以定义标准攻击。银行窃贼在E X示例1中收缩。mSCL智能合约之间的数字资产转移通过成本分析器进行分析[9,10]。 这些成本分析器使用的(声明性)语言具有严格的结构和较差的表达能力。例如,谓词必须以析取范式编写,数据类型只有数字(整数和实数),成本函数是无状态的。用这些严格的语言来编码资产转移和失败的语义、智能合约的状态、环境和布尔表达式的复杂性,结果是痛苦和特别的。出于这个原因,我们决定将* 通讯作者。电子邮件地址:claudio. unibo.it(C. Sacerdoti Coen)。https://doi.org/10.1016/j.bcra.2021.100020接收日期:2020年12月18日;接收日期:2021年5月7日;接受日期:2021年6月14日2096-7209/©2021作者。出版社:Elsevier B.V.代表浙江大学出版社。 这是一篇基于CC BY-NC-ND许可证的开放获取文章(http://creativecommons.org/licenses/by-nc-nd/4.0/)。可在ScienceDirect上获得目录列表区块链:研究与应用杂志主页:www.journals.elsevier.com/blockchain-research-and-applicationsC.拉内夫角萨塞尔多蒂·科恩区块链:研究与应用2(2021)1000202¼1/4f g[001 pdf 1st-31files]fg2由于成本分析师的刚性和适当成本模型的定义,mSCL受到关注。因此,在第4节中,我们介绍了一种中间函数语言,它具有静态分派,并允许环境作为原始数据类型、尾函数调用以及Presburger算术的每个谓词和运算符。中间语言中的函数旨在定义mSCL函数的输入输出行为。实际上,它们接受输入环境(对程序状态建模)并返回环境。(其他的中间语言已经被定义为智能合约;在第8节中进行了详细的讨论。虽然中间语言有一个非常简单的操作语义(只有两个规则),它允许我们以标准的方式建立翻译的正确性,但它不足以以直接的方式表达mSCL功能特别是,mSCL的一些特性需要明确的编码来纠缠翻译:失败和回溯的相应定义,资产的隐式和显式管理(例如由于回退而导致的复杂性),具有显式延续的函数调用(这应该需要高阶语言来表达延续传递风格,而中间语言是一阶的)。在第5节中,我们从中间语言中的术语推导出成本方程这些方程与两个成本模型相关联:一个用于计算交易结束时智能合约的损失,另一个用于计算收益。为了实现这个目标,我们对环境进行修饰(以便用值的元组来提供成本函数),规范化谓词,并选择适当的成本模型。值得注意的是,相对于没有规范化谓词的方程,规范化过程给出了指数数量的方程:我们的分析将受益于接受通用谓词的成本分析器。归一化的成本方程可以被馈送到成本分析器以计算损失和增益的上限我们已经对我们的技术进行了原型化,并在从以太坊下载的几个智能合约上运行了原型(并适应了mSCL)。第6节报告了通过在一些原型示例(一个银行窃贼代码、一个英国拍卖方案和两个庞氏骗局)上运行原型所选择这些例子是为了突出我们的技术和当前原型的问题。我们注意到,由于可扩展性问题,我们的分析只能在存在积极优化的情况下才能有利地使用。 正如结论中所讨论的,这是目前研究的一个问题。在第7节中,我们还研究了mSCL的扩展和其他功能(也是受Solidity的启发)。特别是,使用显式延续扩展mSCL函数调用允许我们表达著名的攻击,例如DAO [4]。我们讨论相关的工作在第8节中,我们在第9节中给出了结论。1.2. Captatio concilientiae这项工作不是为了解决Solidity问题,而是为了提供一个完整的-该语言的边缘分析器(这是一个工业项目,需要不同的努力)。这是一个概念验证,以通用智能合约语言计算加密货币的走势。Solidity一直被用作设计mSCL语言的灵感来源,我们希望它能模拟smart的创新特性合约(加密货币的转移,以及在错误的情况下通过恢复到初始状态获得的交易的ACID属性本文的一个关键贡献是定义了中间语言,并发展了中间语言的分析技术。一旦中间语言的分析器后端到位,就足以定义任何源代码到中间代码的翻译,以验证余额的相应更新在我们看来,中间语言是处理不同智能合约语言的前端和应用不同技术分析代码的后端之间的解耦点实际上,我们的中间语言比源语言简单得多,可以配备几种分析,以这种方式验证源语言。语言相当于将其编译为中间语言(从而忘记了分析的所有技术细节例如,可以重复使用计算成本和气体消耗等分析,因为已经为目标成本方程语言开发了相应的技术[7,10]。2. mSCL演算迷你智能合约语言,称为mSCL,被称为minus-cule,是一种演算,具有最小的智能合约原语集,例如函数调用,字段更新,条件行为,cryp。tocurrency转移,递归,和失败的启发Solidity.我们使用一组可数的智能合约名称Id,范围为C,D,H,函数名的可数集合,范围为m,m0,字段名的可数集合FId,范围为f,f0,以及变量,范围为x,y,z。变量包括字段名称和智能合约名称。mSCL的语法是其中写在“[”和“]”内的术语 mSCL程序P是智能合约定义的序列,这些定义依次是字段和函数定义的序列。如果C合约C,我们说C是C的智能合约名称,我们用cname sP来处理P的合约名称集。在合同中,场是Tf;相应的集合是场(C),函数要么是F中的函数,要么是回退函数。如果函数属于名为C的合约,我们写mTxpayableTz;SC,对于回退2C也是如此。此外,在函数m中,函数mTx1/2payable]fTz;Sg,Tx是形式参数,Tz;S是m的主体,其中Tz是局部变量。我们假设字段、形式参数和局部变量不包含重名。智能合约有一个隐式字段-余额-记录了合约中存储的加密货币。该字段在以下情况下更新:(i)当调用支付函数时(在这种情况下,余额增加了调用关键字值所携带的加密货币),或(ii)当加密货币被显式转移时(操作转移)。当存在时,回退功能允许合约接受加密货币转移。特别地,加密货币的转移还包括调用被调用方的回退函数(图1B中的转移的语义)。 2不对这种回退调用进行建模,因为相应的主体始终为空。如果被调用者没有回退,那么向其转移的加密货币将被拒绝,并且总是回溯。类似地,由于在mSCL中,未声明函数的调用默认为fallback函数,因此当它未命中时,会发生回溯。 在这些情况下,回退函数会忽略未声明函数的所有实际参数,除了传输的加密货币。语句S包括空语句ε;赋值xE,后跟一个延续,其中x可以是字段、形式参数或局部变量;条件语句;以两种格式E:m=E0和E:m:value=E00E0调用函数,其中E是被调用方C.拉内夫角萨塞尔多蒂·科恩区块链:研究与应用2(2021)1000203ð Þ[P S S我i2I▸S::¼QC000v0Q.ΣFig. 1. 在mSCL中的合同银行和小偷。合约,m是函数,E0是实际参数;术语值E00突出显示在调用期间从调用者到被调用者的密码传输发生时(mSCL函数调用在Solidity术语中是外部语句也可以被还原,将计算回溯到初始存储区,而E:transferE0则返回转移E0 从调用者到E的密码流,前提是调用者的平衡足够,并且被调用者具有回退功能(否则,发生回溯)。1E X value是标准的,除了三个术语:msg.sender返回调用者,msg.value返回调用期间传输的加密货币(仅在payable函数中使用),E:balance返回合约的余额。在下文中,我们使用u,v在Id中的常量表达式或元素上进行范围。mSCL程序的初始状态是通过(i)定义其中智能合约的余额,(ii)调用函数,以及(iii)指定(ii)中调用的调用者来确定的关于可能的初始状态,参见下面的E X示例1,关于形式定义,参见第3节。值得注意的是,(iii)中的调用者也可能是外部的(例如,它可能是不在程序中的智能合约或用户)。在这种情况下,只要程序不使用msg.sender访问它的函数,语义就完全确定了(否则我们需要对外部调用者做出假设,例如它必须具有回退功能)。我们的技术将允许外部调用者。假设1。(程序是类型化的)在本文的其余部分,我们认为所有mSCL程序都是良好类型的,相对于一个完全标准的类型系统,所有函数都是一阶的,只有两个类型是uint和address。局部变量和函数参数由uint类型化,唯一由地址类型化的表达式是msg.sender、this和程序中定义的智能合约的名称特别是,类型系统确保所有变量在使用之前都被声明,函数只被完全应用,并且传递和函数调用的接收者只是类型地址的表达式。通过实例说明了mSCL的特点例1. 图 1报告了合同Bank和Thief的代码,分别实现了共享的银行账户和贪婪的客户端。银行用于支付客户端:它有一个余额,一旦客户端使用非负整数n调用pay,并且余额足够大(第4行),它就会提取n个加密货币并将其转移到客户端(第5行)。为了让几个客户在提取更一致的金额,以多次调用支付功能。然而,由于可重入性,Thief找到了一种绕过支票的方法特别地,函数pay还通过调用客户端的函数ack来确认取款(因为客户端已经为它支付了1个这种看似无害的操作是攻击的核心,因为Thief的ack函数会回调pay,并且该过程会持续到账户被清空(例如,第4行的布尔表达式Thief执行的调用Bank.pay.value(1)(2)表达了攻击。我们注意到,我们即将推出的技术允许用两个变量x和y替换EX样本1中的常量值1和2,并分析x和y的哪些实例导致攻击。2.1. 话有两个功能未在mSCL中建模。首先,非空的回退体。这种扩展的分析需要管理明确的转移延续,这是困难的,并使分析的技术发展更加复杂。 我们更愿意在后面的第7节中处理非空的后备体,我们希望,在那里,分析已经被消化为更简单的设置。其次,我们不解决动态契约创建和部署问题。特别是,我们使用智能合约的符号名称来表示智能合约地址。当我们需要对智能合约的多个实例进行建模时,我们只需使用不同的名称复制代码。最初,一个合约知道它想要与之交互的其他合约的名称,但他也可以在以后知道其他名称(例如阅读msg.sender)。这种限制使我们能够避免依赖于上下文,并提高成本分析的精度在第7节中,我们将讨论这一限制可以放宽到什么程度3. mSCL的语义我们使用的记忆,范围是F1,F20,F3,F40,F50,F0 0在语义规则中使用以下辅助● 是内存更新,也就是说,是内存更新,也就是说,是内存更新。[v][f] [v]和七点半! v]当g6¼f时,●1/2e]]C0;v;C;v是一个函数,它返回e的值,假设C是当前合约,v是在调用过程中传输的值,C0是调用者,v是C的内存,其中存储了e中出现的字段和变量的值我们省略了1/2e]]C0;v;C;n,这是完全标准的,但我们注意到,由于mSCL约束,该函数是总的,在除法中,第二个参数始终是非空常数。1/2e]]C0;v;C;n返回e的值的元组。mSCL程序的状态,范围为,0,0,0,由以下语法定义I.i·iC:SjYCi.i·i2I同时,银行只允许每次交易最多提取5个加密货币也就是说,为了实现共享帐户所有者之间的公平性,程序员约束希望1在智能合约语言中,例如Solidity,动作消耗gas,并且在回溯过程中,这种gas永远不会返回在本文中,我们忽略了气体消耗,因为限制气体消耗在文献中已经是一个很好理解的问题(参见参考文献104)。[2]例如。哪里i2ICii·0是(运行时)合约的并行组合,C0vC:S或0是运行时状态。通常,状态的并行组合是结合的和交换的。合约有成对的记忆体,其中记忆体是当前记忆体,记忆体是回溯记忆体。 内存B10是当前事务开始处的内存;B10是B10的工作副本,它在事务期间更新,如果事务成功结束,它将被提交,成为新的回溯内存。当我们写C(C)C.拉内夫角萨塞尔多蒂·科恩区块链:研究与应用2(2021)1000204QP▸¼⊆S Sμμ⟶⟶μμfail图二、 mSCL([[]),[[e]]C0,v,C,的状态转换不会失败。我们总是假设m(m)场地(C)dom(n)(因为n也定义了形式参数和局部变量)。 当运行时语句的形式为i2IC i(ii)0时,我们说状态是最终的。注意,在最终状态下,每个合约的两个记忆是相等的。合约C(合约0)具有唯一名称C,其与中的合约名称一一对应。终止语句可以是0,终止语句,或C0vC:S,其中S必须在合约C中求值,调用者为C0,值为v。利用迁移关系定义了mSCL程序的语义μ0,其中μl=0[0]ail(程序在符号中保持隐式)。在一个到最终状态的转换中,除了负责提交内存的最后一个转换之外,所有的转换都是特别地,如果最后一次转换是一次中断,则计算正常终止,当前内存成为新的初始内存;如果最后一次过渡失败,则计算将回溯,回到最初的记忆。图11给出了“”的正式定义。 二、让我们对一些语义规则进行注释(当规则是标准的时,注释被省略)。规则[UPD]定义了字段或变量更新的语义:表达式e在C的当前内存中求值,结果内存将值绑定到x。 规则[TRANSFER]和[TRANSFER-FAIL]定义了e的语义。transfe r(e0). 前一个证明接收者e是可支付的(例如,具有回退功能)并且调用者的余额大于e0;在这种情况下,更新调用者的余额和e第二条规则处理错误:要么收件人不付款,要么呼叫者的不足够。在这种情况下,会发生故障并将其传播到整个解决方案(使用规则[BKT])。当回退体非空时,[TRANSFER]会更复杂:参见图中的[TRANSFER-CONT]。(六)。C.拉内夫角萨塞尔多蒂·科恩区块链:研究与应用2(2021)1000205我Xð Þð Þ0XPi21.. n我我!PdefYC·j?C0:C:mv¼¼⟶22图2的规则[METH*]处理函数调用,这在mSCL中特别复杂。规则[方法]定义成功的非支付函数调用e:me0。在这种情况下,通过使用e的值C0 0来执行函数分派,并且要评估的状态变为m的身体(没有任何延续)。规则[METH-FB]和[METH-ERR]定义了不成功的非付费函数调用。 这两个规则处理两种子情况,无论被调用者是否有回退函数;在第一种情况下,调用被分派到具有空主体的回退,并且计算成功终止;在第二种情况下,调用失败,并且整个计算回溯。函数调用的其他三个规则,即[METH-PAY],[METH-PAY-mSCL的表达2.正如我们将看到的,程序的评估相当于通过将更新的当前环境从一个函数调用传递到另一个函数调用来从初始环境计算最终环境,初始环境是相同的4.1. 环境Γ,称为环境,是一个映射Id→FId→E[Var→E;我们总是将Γ(C)(f)缩短为Γ(C)。f)并使用Γ[C.fe]表示对场C的e的更新。F. 请注意,环境返回抽象项(mSCL中的表达式)而不是(整数)值。我们还使用两个更新FB]和[METH-PAY-ERR]用于应付功能的调用在这些情况下,调用带有一个值,当调用成功时,操作员on电子邮件地址: C:f7!-e][[1/2C:[1/2C:[1/2-e]]。[001 pdf1st-31files][001pdf1st-31files][C:f]和必须相应地更新主叫方和被叫方的余额规则[METH-PAY-ERR]不更新余额,因为它对失败进行建模当调用者的余额小于要发送的值时,或者当由于没有函数和回退而无法执行分派时,都会发生这种情况。3.1. 初始状态mSCL程序的初始状态P 1/2 C1;N; CnN是一项0我我我的i21::n中间语言的语法使用特定的环境,称为纯环境:只要环境是单射的,并且只返回变量,它就是纯环境。中间语言的语义也使用了基环境:当共域中的表达式是基值时,环境就是基。4.2. 中间语言的转换中间语言中的程序是函数定义的元组C:m=0;r1;v;x;H=H=H=DD2Id在哪儿?是虚拟智能合约名称,C;C02cnamesP,Ci是合同名称Ci。也就是说,我们假设运行时合约在与智能合约定义一一对应;我们复制代码,以防我们需要同一个C的多个运行时合约。我们还假设Id包含一个虚拟名称User,可以在初始状态中使用它来代替C0。我们使用此expedient来覆盖外部智能合约或外部用户对程序函数的调用为了减少翻译和分析中的案例数量,我们排除了诸如C:m:valuev0之类的初始语句v从文件的正式部分,但我们将使用它们,不过在例子。例如,EX样本1的初始状态为:银行窃贼?小偷:银行:支付:价值10亿2千万其中,[余额[v]和[余额 1]。我们的结论是,观察到mSCL程序的执行顺序地,以确定性的方式,并且执行永远不会卡住。定理2.(决定论和进步)设P是一个mSCL程序,S是初始状态,使得S ≠ S。 然后(我们保留mSCL作为函数的名称我们要求1. 函数定义的形式参数包括两个环境Γ0和Γ1,这两个环境是纯的并且具有不相交的余域。Γ0是回溯时必须返回的环境;Γ1是成功终止时函数体必须更新的环境2. 剩余的参数,即vx和H,分别描述了所转移的加密货币的数量、函数的参数和调用者名称。我们观察到函数的主体是智能合约名称集合Id上的被加数,对于每个程序,我们假设是有限的。这种权宜之计允许我们在翻译过程中只考虑基础智能合约名称。这是我们用来将具有动态地址解析的mSCL映射到仅具有静态分派的语言的技术函数体θ的语法是θ::1je:mr;r0;e0;e00;Hjiθii21::n其中φi是布尔表达式,也包含谓词,例如1. 决定论:最多有一个S00这样S0μS00.MC或M。应付C.根据语法,一个函数可以返回一个环境,或者调用另一个函数,或者有一个非确定性。2. 进度:要么S0对某些S00来说是S 00,要么S0是最终的。我们注意到,mSCL程序是良好类型的假设(假设1)的结果是进步,这确保了所有对½½e]]C0;v;C;n的调用都返回一个值,并且当e是address类型时,C0;v;C;v/vC0 0其中C0 0是该州其中一份合同的名称。4. mSCL到中间语言的翻译我们的中间语言中的程序是一组函数,它们接受两个输入环境(回溯环境和当前环境)和变量(表示非负整数和智能合约名称),并返回一个环境。环境是中间语言中的本机值,对mSCL程序的状态进行编码,即它们将字段和局部变量映射到值。更准确地说,环境的共域是抽象的值,由一组有限的预测项φ1,φ n,φn调节的最小行为(φ)Θ。i21项。n(φi)Θi是(φ1)Θ1(φn)Θn的缩写(我们在编写程序时使用后一种表示法)。4.3. 中间语言的语义为了形式化函数调用的语义,我们需要将一个作为基础环境的实际参数Γ0与作为纯环境的形式参数Γ进行匹配。 我们用σr;r0表示使得σr;r0不小于r 0的唯一子空间。2为了提高可读性,我们用e表示mSCL程序中出现的表达式,用e表示在中间语言中用作抽象值时的相同表达式等价地,e和e在定义相同的两个文法E和E的生成上的C.拉内夫角萨塞尔多蒂·科恩区块链:研究与应用2(2021)1000206.,.,X.Σe11.ΣX.Σ.ΣC:m=0;r =1;x;z;Hi21::nHDiθDi美国银行电子天平第七章:贼! 平衡7!小偷;b11.Σ.Σ程序的语义由两条规则定义半适用]Bank:payr;r;1;2;Thiefl1≥1^4>1^25θfThief=Dg2;4;1n;yBank;b;yThief;b快!n ^1≥ 1 ^4> n ^2 <5.[X]真的盗贼:ackr;r0;0;Bankþðack:payable2ThiefÞThief:ackðΓ;Γ0;0;BankÞ1≤k≤n½½e]]v00X轴角Θ0C:mr;r;e;e;DkIΘDkfu;v=x;zgσr0;rσr;r0i2I我我我我拉克萨克小偷^ack:应付Thief^fallback2Thieffallback1其中[[e]]是e的值。[2019 - 05 - 19 00:00:00][2019 -01:00][2019 -01:00]盗贼62Thief^ack:payable盗贼:ackr;r0;0;Bank00小偷^后退小偷小摸直截了当。) 我们注意到,中间程序的语义是不确定的:如果Θ是(1>0)Θ1<$(2> 1)Θ2,那么它可能演变成Θ1或Θ2。我们还注意到中间语言实际上是一种标准函数式语言,具有映射(环境)、元组、条件和非确定性。规则[A]是β-还原哪里IΘf银行=Dg0;2;3v;y银行;b;y小偷;bIBank:pay加上映射上的模式匹配,而规则[C HOICE]允许在相应的保护为真时选择分支。语法和银行! 半平衡7!第7章小偷!½余额3]]中间语言的语义在下面的例子中说明实施例3. EX示例1的函数Bank.pay和Thief.ack可以银行!½余额3、小偷! 半平衡7!2]]:用中间语言写成如下。让4.4. mSCL的翻译Γ0¼银行! ½余额xBan k;b];盗贼余额7!xThief;b小偷mSCL在中间语言中的翻译定义如下:使用判断和推理规则。判决如下注意,Γ0和Γ1是具有不相交余域的纯环境又设ID为¼ {银行,小偷}。对于Bank.pay,我们获得:银行:支付<$r0; r1;v;n;HHDv≥1^y银行;b>n^n5ΘD2Id快!.v≥1 ^yBank;b>n^n5r1<其中,yBan k;b>n^fallback2D回退2D回退。yBank;b≤nr0回退62Dr0形式:● 对表达式s的判断:其中e和e 0是包含常量或变量的表达式; e是在ΘackD D ackΓ Γ0银行1语句ts:Γ;Γ0' e的判断S:Θ,其中,r是回溯0/4/2秒:0;0;;支付卡ack:payable2D支付卡D:ackr0;r0;0;银行返回62D^ack:应付62D^回退2D返回0个返回D^ac k:应付款D^回退62D回退0七点!-n;D:平衡[美国]●C;D其中,Γ0是当前的平均值,Θ是结果中间代码(e、C、D与判断表达式的相应代码相似)。回溯和当前环境对应于函数定义中的环境Γ 0和Γ 1(的实例),并且用于对回溯进行建模(在11次失败)和成功。对于Thief.ack,我们得到:盗贼:ac k r 0; r 1; v; H H D θ 00D2Id哪里000美元起付2美元0美元þpay:payable2D^yThief;b≥1Θ00- 是的pay:payable2D^yThief;b10- 是的pay62D^pay:payable62D^fallback2D^yThief;b≥10表达式的翻译报告在图。 3. 它通过将对字段的访问替换为环境中相应的值来对表达式进行部分规则[FIELD]和[VAR]管理变量;有三种情况:变量是被调用者的字段,或者是形式参数或智能合约名称。在任何情况下,我们返回在Γ中的相应值(也可以是表达式)。在[BAL]中,E 0的翻译。余额是合同的余额;在这种情况下,它是e0是一个名为H的智能合约:在我们的设置中,我们写为H2Id。þ支付D ^pay:应付D ^fallback 2 D ^y Thief;b<1 Γ0支付26D^pay:payable26D^fallback62D^pay0和Θ00¼D:支付Γ0;Γ0;1;2;小偷《小偷》:余额7!-1;D:平衡![7]关于中间语言的语义,让我们讨论一下Ban k的过渡。pay(r,r,1,2,Thie f),其中r^[Bank7![bal-规则[PROD-DIV]处理乘法和除法。由于第5节中的成本分析只涵盖了其中乘积和除法的第二个参数是常数的Presburger算术表达式,因此推理规则不会翻译无法提供给分析器的表达式语句的翻译在图中定义。 四、法官-anc e7!4、小偷[balanc e7!1]]。段返回使用谓词的中间代码(表示法为与mSCL中使用的相同):图3. mSCL表达式的翻译。12IC.拉内夫角萨塞尔多蒂·科恩区块链:研究与应用2(2021)1000207●22►第一0i21::n我我我kH1我h字段h变见图4。 mSCL语句的翻译。回退e,与eId,表示合同e具有回退功能;● m2e,加上e2Id,意味着m是e中不可支付的函数M. 应付款2e还要求m也是应付款。语句的翻译在图中定义。四、规则[INVK-NV]和[INVK]分别定义了非付费函数和付费函数的函数调用。前一个返回几个备选方案之间的选择:(i)当m在e0中时,则它减少到调用;(ii)当m在e0中并且它是可支付的时,则它被转换为具有0加密货币转移的调用;(iii)当m不在e0中但合约具有回退函数时,则转换是对回退的调用,在我们的情况下,返回当前环境(因为回退具有空主体);(iv)当m和回退两者都不在e0中时,则回溯发生并且转换是回溯环境。规则[INVK]管理从调用者到被调用者的加密货币转移调用;在这种情况下,我们必须检查调用者的余额中是否有足够的加密货币,否则会发生回溯。mSCL的翻译是用函数定义和程序的规则来完成的,如图所示。 5,其 中我 们 使 用具有明显意义的判 断Γ1C : mΓ0; Γ1;v;x;HΘ 和 :。 在[FUNCTION]中,函数的定义在两个纯环境中给出作为正式参数。 我们记得,Γ0是回溯环境,例如,在发生错误的情况下过渡到的环境,关键点是,在我们的系统中,集合Id是有限的,因此规则[FUNCTION]的假设和结论中的选择是有限的。(Said否则,我们分析具有有限数量已知合约实例的智能合约程序的成本。规则[1]给出了智能合约程序的翻译。该规则的前提包含一组假设,这些假设取决于一组有限的智能合约名称和函数名称。这并不意味着我们的分析要求必须知道所有交互合约的代码。特别是,分析(和我们的原型)涵盖了外部调用者(智能合约或用户)对程序函数的调用。如第3节所述,我们假设存在一个属于Id的虚拟名称User。例如,当应用于图1中mSCL程序的相应函数时,可以计算本节中定义的转换。读者可以验证这些代码正是银行的代码。工资和小偷在E中的ack x示例3。我们通过断言翻译的正确性来结束本节 为了评估这个属性,我们需要形式化mSCL程序的状态和它的中间代码之间的对应关系。以下定义旨在说明这种关系。定义4. (国家和中间代码对应)给定一个状态S¼QC0·jCvC:S,w edefineΓ是必须评估函数调用的环境envsℓÞi21::n Σ;h. C0七!拉吉;100ji图五. mSCL函数和程序的翻译我我我HC.拉内夫角萨塞尔多蒂·科恩区块链:研究与应用2(2021)10002082个月后,ðÞI;C;m我i21::nI;C;mGAINC0Z;x;Hmax0;rC:balance-rC:balanceifC:mr;r;z;x;HIr见图6。mSCL语句的翻译与延续,第一部分。并且我们写SvC;D我LOSSC0I;C;m 成为功能envsS'S:Θ或S :θi=0和θi= 1,并且环境S:θ i = 0和θ i =1。(0个00* 0翻译的正确性如下;证据可以在The AlcudiX.I;C;m0否则P是一个mSCL程序,使得损失C0Γz x H(max0;rC0:balance-r0C0:balanceifC:mr;r;z;x;H*r0定理5. 让初始状态使得S ′ Θ。然后I;C;m;m我0否则1. (决定论)如果Θ∈I*Θ0,则至多有一个Θ00,使得Θ0∈Iθ00;2. (正确性)如果S<$S0,则存在Θ0使得S0对于每个Dcnames、domΓD场。通过定理5(1),上述函数在地面输入上被很好地定义,因为编译的mSCL程序的减少是确定性的。5. 智能合约余额分析我们注意到,I;C;mSC0I;C;m 计算...的5.1. mSCL的成本模型由第4节中的翻译生成的中间语言程序在终止时返回环境 这个输出信息量太大了,因为我们感兴趣的是计算一个智能合约的加密货币变动,这些智能合约记录在相应的余额字段中。此外,不是计算在计算C:mΓ;Γ;z;x结束时获得/丢失的加密货币;H. 在这方面,如果计算没有终止,这两个函数返回0。事实上,在实际的智能合约语言中,发散程序将被认为不会获得/失去加密货币,因为交易将被回滚,因为它失败或耗尽气体-气体耗尽将发散计算变成失败的计算。(类似的评论可能涉及到卡住的计算,但这在我们的案例中从未发生过)。我们还注意到,函数LOSSC0是I;C;m余额的最终值,更重要的是计算上限智能合约可能损失的加密货币数量,而不是GAINC0的反义词I;C;m. 例如,如果C以余额10开始,在终止计算期间获得增益。 同样值得注意的是,我们所寻找的上界不仅仅是数字,即。的最大并以余额5终止,则其增益为0,其损耗为5。假设函数之间的逐点排序,我们感兴趣的是考虑到所有可能的输出,可以达到的值而是在GAINC0的可能精确上限I;C;m 损失C0I;C;m. 然而,在这方面,感兴趣的符号上限表示为函数的价值领域的初始环境和实际参数的初始调用。有时,我们的技术返回的渐近上界信息较少,如EX样本15。定义7.我们首先定义与C0C0相关的最终收益和损失智能控制器C0、方程组I和初始调用C:● 函数UGAINI;C;m是GAIN;C;m的上界当且仅当,r;e; x; H对于GAINC0定义域中的每个Γ;v0;v;D,第六章.设P是MSCL 程序和‘P. 让GAINC0I;C;m 和GAINC0I;C;mr;v0;v;Dr;v0;v;D我我我的C.拉内夫角萨塞尔多蒂·科恩区块链:研究与应用2(2021)1000209了c0I;C;m8<8
下载后可阅读完整内容,剩余1页未读,立即下载
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)