智能合约是运行在区块公上的一种代码,该代码由Solidity编写,并通过区块的智能合约虚拟机来执行,以达到对区块编程的目标。可以将区块公联理解为操作系统,Solidity是编写该操作系统应用程序的编程语言,智能合约虚拟机则是编程语言编译之后的代码运行环境。
区块基本知识
交易
区块通常被理解为超级账本,账户与账户之间可以通过交易来完成转账,只是这种转账方式与传统的银行转账有很大的不同。
(1)这是一个完全去中心化的金融系统,区块账户不需要使用者到银行机构或者其他部门申请,因为整个系统中没有这样的中心化部门来管理账户信息,使用者只需要根据一种非对称加密算法来生成一个密钥对,其公钥作为账户地址,也就是常说的区块钱包地址,这个地址可以在网络中广播,允许网络中所有的账户获取和使用。
该账户是公开的。私钥作为转账交易的签名和,由使用者私人保管,每次转账时,需要通过私钥签名来证明交易的合法性。在现实使用中,区块钱包会将私钥进行对称加密,通过使用者输入人类能够理解的作为私钥加密的密钥,将区块密钥以密文的形式保存到磁盘空间中。需要注意的是,如果忘记解密密钥的,就失去了对账户的操作权限。
(2)这是一个完全无中心的账本系统。在区块上的每一笔交易都是一条转账记录,如果该交易成功被整个区块网络认可则转账成功,并且会将转账记录存储在区块的数据库里面,每个区块节点都可以访问和操作这个数据库,并且任何人都可以查询交易双方的账户信息。
(3)发生在区块上的交易,是存储在区块网络中的所有全节点(拥有所有交易数据的区块节点叫作全节点)上的,并且也是公开可查的,用户不仅可以查询某个账户下的所有交易,还可以查看其账户余额。
区块
所有的交易信息都会形成一个结构化的账本,它们会被区块的节点(矿工)按照一定的方式和时间间隔组织起来,存储在区块节点中。这个用于存储交易信息的结构体就是区块,除了交易信息,区块还要存储一些额外的信息以保证交易数据的完整性和可靠性,区块数据结构如下:
不同的公有各自不同的涉及,关于区块的生产间隔,不同的区块网络有不同的设定,比如以太坊出块的时间间隔约15秒,而比特网络则需要10min才生成一个区块。
区块数据包含区块头与区块体,区块体存储具体的交易及交易相关的原始数据,区块头存储的是原始数据的Hash信息,任何对原始数据的修改,都会引起区块头Hash值的变化,这样对任何信息的篡改都很容易被察觉到并被验证为假数据。
区块的作用就是将不同时间阶段内的交易数据按照一定的格式和数量,打包成结构化数据,方便存储和管理。只有被打包到区块中并且被全公网络认可的交易,才算真正的有效交易。
区块头和区块体数据也会被当作输入数据做一次Hash运算,其运算结果会被存储在下一个区块的区块头中,这样任何区块内容的修改都会反映到区块的Hash值上,而区块的Hash值又是下一个区块的输入数据,它又会被当作新区块的数据参与一次新区块的Hash运算,随着时间的推移和交易量的增加,所有的区块会通过保存前一个区块的Hash运算结果的方式组成一条。
==将交易打包成数据块,再将数据块以Hash值的方式组织成式结构,这就是区块定义的来源。==由分布在全世界的节点组成,任何人都可以公开查询,但又无法任意修改。
区块被增加到区块之前,并不是所有区块都可以生成区块数据,也不是所有区块数据都能被增加到区块成为的数据,这个过程有一定的门槛,需要筛选出一个值得信任的节点来生成数据,然后由其他节点来验证其生成数据的有效性。这个生产区块的过程会得到数字货的激励,因此很多节点会加入生产区块的竞争。如果某个节点生产的区块数据得到了其他节点的验证,则其他节点会将的区块存储到本地,然后加入下一个数据块的生产竞争,这个过程被称为,而生成数据的节点被称为矿工。
需要注意的是,在矿工将交易打包成区块之后,还需要查找一个数字n,这个数字满足不等式:
n<=2256/Hdn<={2^{256}}/{H_d}
n<=2
256
/H
d
计算有效数字n的过程是需要付出算力的,而这个算力付出的过程是****的,这就是区块为何可以在没有中心管理者的情况下正常运作,且任何人都可以在无须信任的情况下参与区块业务。
成为出块人就可以成功拿到奖励,奖励分为系统的奖励和交易中的交易手续费,在每一笔交易数据中,转账人都可以手动设置手续费,这些手续于奖励矿工打包的工作。在转账时设置的手续费越高,转账时间就越短,转账速度就越快。
共识算法
在的过程中,矿工需要付出算力来查找一个满足条件的数字,这种算力的付出是无法伪造的,必须付出相应的算力和电力之后才能得到正确的数字。当某一个节点发现该数字之后,其他节点可以很快验证该数字的有效性,验证并不用花费太多的算力和能源。这种为了持续生成区块而被所有网络节点认可的方案就叫做共识算法,而付出算力来证明自己工作的共识算法被称作PoW(ProofofWork)。
目前比较流行的共识算法由DPoS、BFT和PoST等:
DPoS:类似于选举的运行模式,该算法根据数字货持有的数量对区块事务进行投票管理,并且轮流来选举出块人进行出块。
BFT:拜占庭容错机制,该机制通过多次通信交互来区分恶意节点和诚实节点,接收诚实节点的区块数据,丢弃恶意节点发送的数据和消息。
PoST:是存储公的共识算法之一,即统计节点有效存储和数据的大小和时长,将其作为节点的算力,来竞争成为出块节点,算力越大成为出块节点的概率越高,算力越大生成恶意数据的动力就越小,这是通过一种经济手段约束恶意行为的共识算法。
分叉
因为整个区块系统是点对点的对等网络,没有统一的中心机构协调各个节点的行为,所以在生成区块时,各个节点的行为都是相互独立的,很有可能同时由多个矿工在同一区块高度生成出2个以上的区块来。这些区块打包的交易很可能是不一样的,同时满足条件的数字n不是的,多个矿工之间生成的数字n是不一样的,但是同样是满足不等式的。在这种情况下,网络中的其他节点很可能同步到不同的区块数据,并且这些数据在数学上都是合法的、有效的。当不同的节点中的不同的区块作为当前区块时,就会存在分叉的情况,即不同的矿机对同一高度的区块生产了内存不一样的新区快,并且这些矿工都找到了满足不等式的数字n。
攻击
区块对于交易的组织方式及账户的管理方式决定了只有私钥持有者才有权修改本账户下的数字货信息。但是并不意味着区块是安全的,由于区块网络是无主的,每个持有数字货的账户和区块打包的矿工都无须审批、无须信任,随时随地可以参与,因此,只要拥有足够的算力就可以对整个网络发起攻击,比如的51%算力攻击。除了算力攻击,还有仅属于区块点对点网络特有的攻击,比如女巫攻击、日食攻击等。
以太坊智能合约
除了拥有上述区块的基本功能,以太坊还在比特网络的基础上增加了以太坊智能合约虚拟机,即EVM。在增加了EVM之后,以太坊就成了一个可编程的去中心化平台,任何系统开发者在支付一定的部署之后,就可以拥有一套完全去中心化的业务系统,这样的业务系统被称为DAPP。
以太坊
首先,以太坊可以视为大型的状态机,由分布在的以太坊节点来运行这个状态机,每一次交易的产生都会修改状态机的状态,将交易打包成区块之后,可以以区块为单位来衡量状态的迁移。
以太坊的状态是由以太坊上的所有账户组成的。也就是说,以太坊上的所有账户组成了以太坊的全局状态,以太坊账户的地址与账户状态的一个映射结构。以太坊账户又分为两种:一种是外部账户,也就是用于存放用户余额和转账的账户;另一种是智能合约账户,是在部署智能合约时生成的一个关于该智能合约的区块地址及其状态的映射关系。
智能合约账户,其地址映射到一个账户状态,这个状态由4部分组成:nonce、余额、存储数据的Hash值、EVM代码的Hash值。存储空间是智能合约虚拟机运行时需要的存储介质,EVM代码是智能合约代码编译并部署到以太坊之后的数据。
外部账户,该账户的状态仅仅由nonce和余额组成。
以太坊上的账户之间会有系统调用:
首先是账户生成交易对以太坊状态的修改。每次创建和部署智能合约,都会创建一个新的账户,创建账户的代码包含在交易中,交易可以由外部账户发起,也可以由合约账户发起,创建合约账户的代码通过solidity编程语言编写,通过以太坊的智能合约编译器编译生成。
其次,账户生成之后,会开辟账户存储空间和以太坊虚拟机可以理解并执行的代码。当智能合约生成之后,可以通过ABI接口调用智能该智能合约,这种信息调用也会对区块的状态发送读写操作。通过ABI接口传入外部数据,然后通过以太坊智能合约虚拟机读取合约代码,结合输入的数据和区块上存储的数据,修改区块状态,并将的状态信息存放在以太坊公上。
EVM
在以太坊之前的公项目中,如果需要修改某条公的某些特征或者增加对某种场景的支持,开发者必须在原有的公设计的基础上修改系统底层源代码,并重新维护一套公生态,这往往被称为硬分叉。
而以太坊EVM的出现,使得任何需要实现某一行业具体逻辑的开发者,无须复制以太坊的整套代码,然后修改出符合自己逻辑的公,而是基于以太坊现有的公网络和矿机组织、共识社区,通过EVM提供的API来编写智能合约,就可以完成一套区块系统,一套满足自己业务需求的系统,该系统具有区块所有的通行特征:去中心化、公开透明、无法篡改等。
因此,EVM的出现使得对区块编程成为可能,具有EVM的以太坊公技术可以视为是对原有区块技术的一次重大革新。
EVM作为一个离线的、独立的运行环境,它无法访问外界的文件系统、网络接口等资源,目前EVM的指令中尚未支持对这些资源的操作。当编写的智能合约被编译成EVM能够理解的代码之后,EVM会在自己独立的运行环境中执行用户编写的智能合约程序。
通过智能合约编译器,可以将智能合约编译成虚拟机能够理解的指令,然后通过以太坊账户发起一个交易,将这些指令部署到区块上,部署成功后会得到一个以太坊的地址,这个地址指明了该合约代码存放的位置。
当合约被调用时,可以根据合约的地址找到指令集的存储位置,虚拟机通过程序指令计数器记录当前指令的执行位置,随着程序的执行,指令计数器也会随之变化,它存储了下一条需要执行的指令的地址(偏移地址)。在指令中会有JUMP之类的跳转指令,因此指令计数器的数值并非总按顺序逐渐增加。
EVM的指令执行不在寄存器中执行,而是在一个被称作栈的内存空间中进行。这个栈*多可以容纳1024条栈指令,每条栈指令可以达到256位,也就是说EVM是256位的计算机,这个长度的指令特别适合Keccak-256Hash数据及椭圆函数运算。
智能合约的指令中包含了操作码和操作数,EVM加载到栈中之后,根据操作码运算,在执行操作码的过程中,会产生中间状态的临时数据,这些数据会被存放在栈空间上、内存中或者持久存储的空间中。指令中也有从内存或者持久存储空间中读取数据的操作,有些操作需要在区块状态的基础上进行下一步的操作,这些状态信息就存储在持久存储空间上;有些操作是存储的运算,这些数据一般通过内存进行读写。使用内存和持久存储空间需要支付一定的GAS。GAS指的是EVM执行指令时消耗的代价,这个代价以以太坊的数字货ETH来表示。
智能合约
1996年,NickSzabo在文章《SmartContracts:BuildingBlocksForDigitalMarkets》中提出了智能合约的概念。==所谓“合约”,就是条文、合同一类的东西,里面记录了发生的条件与对应执行的条款,以支持确权等操作;所谓"智能",就意味着自动化、可编程。==所以,智能合约就是可编程的合同,也可以理解为一段自动执行的条文合同,在计算机中,就是一段自动执行的程序片段。它更易于合约保存,并且由确定的算法运行,给定输入,就得到对应的输出,极大保障了合约的执行力。
以自动售货机做类比,可以帮助我们更好地理解智能合约的核心特征。当使用者选择好要购买的货物并完成支付,出货逻辑就会被触发,用户就能得到想要的货物,而这个过程不需要人工介入,节省了售卖货物的人力成本。如果要破坏这个合约,就得物理破坏售卖机。像POS刷卡机、EDI(电子数据交换)等,也可作此种类比。
以太坊公是操作系统,EVM是区块代码的运行环境,而Solidity则是区块的编程语言,通过编程语言编写的逻辑模块被称为智能合约。智能合约产生价值的*基本前提是有一个强有力的底层介质用于储存,让其不可被物理破坏。
以太坊与比特的不同在于可通过智能合约执行复杂的逻辑操作。在以太坊上,智能合约的语言是Solidity,它是图灵完备且较为上层的语言,极大地扩展了智能合约的能力范畴,降低了智能合约编写难度。
智能合约在区块上的可执行代码是一种类似汇编语言的指令集,这些指令集通过EVM的解释和执行,对区块的状态进行读写,实现合约规定的业务逻辑。因此通过Solidity这种**编程语言,加上Solidity编译器,可以将**语言编译成汇编指令集码,再将其部署到区块上执行。
账户发起创建合约交易时,以太坊交易中会加载合约创建代码,矿工在打包交易时会执行该合约的初始化代码,并生成智能合约对应的EVM代码和该合约对应的账户地址,当该在的区块被成功打包并同步到其他节点时,其他节点就可以通过消息调用来访问该合约对外开放的接口和功能。
智能合约的现状
从编程角度而言,智能合约就是一段代码。相比常规代码,智能合约具有许多差别与限制,例如:
单线程执行
代码执行会消耗资源,不能超出资源限制
目前难以获取外数据,例如取得天气信息、比赛结果等
其他限制,如TPS
这些特点使得目前智能合约生态以上资源的治理为核心。就像以太坊上各式各样的ERC标准与治理方案;EOS上有各种资源模型,比如CPU、RAM、兼经济模型、Rex、Bancor协议等。
显然,就目前的生态而言,智能合约对现实世界的影响力有限。但事物总是在发展的。目前,已有许多致力于突破这些限制的研究,典型的有Oracle(谕言机,但常被称为预言机),它允许智能合约和外进行交互,这样就能大大提高智能合约的使用场景,彷佛一台电脑通上了网;再比如那些突破自身性能瓶颈的尝试,例如支付通道、跨、plasma、rollup,它们都从不同角度打破安全与性能的枷锁。
毋庸置疑,智能合约将扮演着越来越重要的角色,将来随着以太坊2.0的落地,也许会开启新一个区块时代。
智能合约技术
以太坊采用了Solidity作为智能合约语言,Solidity是一门为实现智能合约而创建的**编程语言,能在允许以太坊程序的节点上运行。该语言吸收了C++、JaScript的一些特性,例如它是静态类型语言,支持继承、库等。
除了Solidity,每个平台的智能合约技术也有所不同,接下来将从公有、联盟作为切入,介绍其他平台所采用的技术。
- 升华智能合约量化-漫云科技-搭建效果快速上线现成案例 2024-11-23
- 合约量化对冲策略软件-漫云科技-行业软件案例定制一站式服务 2024-11-23
- 合约量化全自动交易-漫云科技-系统开发源码开发现成案例 2024-11-23
- 智能合约量化跟单-漫云科技-交易平台快速上线现成案例 2024-11-23
- 量化交易策略套利软件系统-漫云科技-开发公司成品开发定制开发 2024-11-23
- 量化对冲套利策略-漫云科技-行业软件成品开发定制开发 2024-11-23
- 智能合约量化跟单-漫云科技-系统开发成品开发一站式服务 2024-11-23
- 量化交易策略套利软件系统-漫云科技-行业软件源码开发现成案例 2024-11-23
- 升华智能合约量化-漫云科技-系统开发源码开发现成案例 2024-11-23
- 智能合约量化跟单-漫云科技-开发公司源码开发定制开发 2024-11-23