又到周三学习时间,本期我们一起学习什么是以太坊智能合约,以及智能合约实现闪电贷操作的原理。
以太坊相比比特币的一个重大创新就是它支持智能合约(Smart Contract)。
所谓智能合约,就是一种运行在区块链上的程序。和普通程序不同的是,智能合约要保证在区块链网络的每一个节点中运行的结果完全相同,这样才能使链上所有的节点都能对某个生成新区块的单一节点进行验证和记录。
因此,以太坊提供了一个EVM(Ethereum Virtual Machine)虚拟机来执行智能合约的字节码,并且,和普通程序相比,为了消除程序运行的不确定性,智能合约有很多限制,例如,不支持浮点运算(因为浮点数有不同的表示方法,不同架构的CPU运行的浮点计算精度都不同),不支持随机数,不支持从外部读取和输入等等。
因此需要一种高级语言来编写智能合约,然后编译成EVM的字节码。最常用的开发智能合约的语言是以太坊专门为其定制的Solidity语言。
一个智能合约被编译后就是一段EVM字节码,将它部署在以太坊的区块链时,会根据部署者的地址和该地址的nonce分配一个合约地址,合约地址和账户地址的格式是没有区别的,但合约地址没有私钥,也就没有人能直接操作该地址的合约数据。要调用合约,唯一的方法是调用合约的公共函数,就好比我们都知道银行的地址,但不能直接去拿里面的钱,除非我们有银行卡才可以取钱一个道理。
这也是合约的一个限制:合约不能主动执行,它只能被外部账户发起调用。如果一个合约要定期执行,那只能由线下服务器定期发起合约调用。
此外,合约作为地址,可以接收ETH,也可以发送ETH。合约内部也可以存储数据。合约的数据存储在合约地址关联的存储上,这就使得合约具有了状态,可以实现比较复杂的逻辑,包括存款、取款等,由于合约能够对外部调用做出正确的响应因此具备智能化特征。
合约在执行的过程中,可以调用其他已部署的合约,前提是知道其他合约的地址和函数签名,这就大大扩展了合约的功能,这个可以理解为把许多齿轮组合在一起实现机械传动。例如,一个合约可以调用另一个借贷合约的借款方法,再调用交易合约,最后再调用还款方法,从而实现所谓的“闪电贷”(即在一个合约调用中实现借款-交易-还款)功能。多个合约的嵌套调用也使得因为代码编写的漏洞导致黑客攻击的可能性大大增加。为了避免漏洞,对智能合约的测试成为一项重要的工作程序。
最后我们总结一下智能合约的运行流程:,1,以太坊通过EVM虚拟机执行智能合约代码,。2,合约被部署后将自动获得一个地址,并可像外部账户一样存取ETH,还可以存储状态数据,。3,合约只能被动地被外部账户调用,但在执行时可以调用其他合约的公共函数。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.