版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微课视频版区块链金融第6章发行、交易及合约目录01.加密技术02.比特币交易03.合约机制加密技术PART01第6章发行、交易及合约比特币的发行机制:仅依靠节点挖矿产生。比特币规定,获得记账权的矿工将获得奖励,初始是50个比特币,然后每过4年数量减半,预计到2140年,挖矿将得不到任何奖励,比特币的总量将恒定维持在2100万个,不再增加。发行机制6.1.1加密技术第6章发行、交易及合约1.非对称加密算法一般采用非对称加密算法实现密钥生成、数字签名以及交易的确认及安全。公开密钥算法(Public-KeyAlgorithm)也称非对称加密算法。非对称加密算法在加密和解密过程中使用不同密钥,分别称加密密钥和解密密钥。公钥:可以公开的密钥(Public-Key,简称公钥),一般用公钥加密。私钥:不公开、需要保密的密钥(Private-Key,简称私钥),一般用私钥解密。公钥不同于私钥,私钥也不能根据公钥推算出来。用公钥加密后,只有用对应的私钥才能解密。非对称加密算法在区块链的应用场景主要是密钥(地址)生成及数字签名。6.1.1加密技术第6章发行、交易及合约2.椭圆曲线加密算法比特币采用非对称加密算法生成密钥对、实现私钥签名及签名验证三方面。由椭圆曲线加密算法Secp256k1来实现。椭圆曲线加密算法是基于椭圆曲线数学的一种非对称加密算法。建立在基于椭圆曲线的离散对数问题上的加密机制。6.1.1加密技术第6章发行、交易及合约2.椭圆曲线加密算法一条椭圆曲线(EllipticCurve,EC)是在射影平面上满足维尔斯特拉斯方程(Weierstrass)所有点的集合。椭圆曲线是连续的,不适合加密,把椭圆曲线定义在有限域上的形式可以表述为:椭圆曲线Ep(a,b),p为质数,x,y
[0,p-1],则y2
x3+ax+b(modp)式中,a、b需满足约束条件4a3+27b2≠0(modp)且为小于p的非负整数。6.1.1加密技术第6章发行、交易及合约2.椭圆曲线加密算法如下数学难题是椭圆曲线成为非对称加密算法的理论依据。给定等式:K=k*G(K、G为椭圆曲线Ep(a,b)上的点,k为小于n的整数,n是点G的阶),若给定k和G,计算K容易;给定K和G,求k困难。如果椭圆曲线上一点G,存在最小的正整数n使nG=
,则将n称为G的阶。k*G相当于k个G相加,此处的加法类似实数中普通的加法,但具体运算法则不同。点G称为基点(BasePoint),k(k<n)为私钥,K为公钥。6.1.1加密技术第6章发行、交易及合约2.椭圆曲线加密算法加法规则:任意取椭圆曲线上两点P、Q(P、Q两点不重合)做直线,交于椭圆曲线的另一点R’,过R’做y轴的平行线交于R,则规定P+Q=R,如图6-1所示。图6-1椭圆曲线6.1.1加密技术第6章发行、交易及合约2.椭圆曲线加密算法倍乘规则:若P、Q两点重合,则做P点的切线,交于椭圆曲线的另一点R’,过R’做y轴的平行线交于R,则规定R=P+P=2P,如图所示。图6-1椭圆曲线6.1.1加密技术第6章发行、交易及合约2.椭圆曲线加密算法椭圆曲线乘法:任何nP可以分解为基本的加法规则和倍乘规则计算。如:5P=P+P+P+P+P=2P+2P+P=2P+3P以上两个式子可以用加法规则和倍乘规则进行计算。因此,椭圆曲线乘法就是把乘法分成众多的切线与交线相加的过程6.1.1加密技术第6章发行、交易及合约2.椭圆曲线加密算法点R(x3,y3)求解方法如下:设P(x1,y1)和Q(x2,y2)为椭圆曲线Ep(a,b)上的两点,有R=P+Q,则点R(x3,y3)计算如下(d为直线PQ斜率):x3=d2-x1-x2modpy3=d
(x1-x3)-y1modp其中,若P=Q(P、Q重合),则d=[3
(x1)2+a]/(2
y1)
modp
若P
Q(P、Q不重合),则d=(y2-y1)/(x2-x1)modp6.1.1加密技术第6章发行、交易及合约2.椭圆曲线加密算法明文编码到椭圆曲线的方法:(1)为什么要对明文m编码椭圆曲线加密阶段,用到的加法规则和倍乘规则,都是基于椭圆曲线上的点进行。因次,必须将明文m通过某种方法转化为椭圆曲线上的一点M(xm,ym)。(2)明文m编码到椭圆曲线的方法①倍乘规则:M=mG这种方法正向运算比较简单,但是反向运算即从M得到m涉及到离散对数难题,计算复杂,计算量大。6.1.1加密技术第6章发行、交易及合约2.椭圆曲线加密算法明文编码到椭圆曲线的方法:(2)明文m编码到椭圆曲线的方法②Koblitz编码:可以用如下伪代码表示:foriinrange(100)://在100以内,随机选择整数ixm=100*m+is=xm3+a*xm+b//椭圆曲线方程y2
x3+a*x+b(modp)ifexistym:ym2=sreturnxm,ym③解码:m=x//100(整除)6.1.1加密技术第6章发行、交易及合约3.椭圆曲线加密算法流程椭圆曲线加密(EllipticCurveCryptography,ECC)算法流程如下。(1)Alice选定一条椭圆曲线Ep(a,b),并选取椭圆曲线上一点作为基点G。假设选定E23(1,1),基点G(0,1),基点G的阶数n=7。(2)Alice选择私钥k(k<n),并生成公钥K=k*G。如k=3,K=k*G=3*G=(3,13)。(3)Alice将Ep(a,b)和K、G传给Bob。(4)Bob收到信息后,将待传输的明文m编码到Ep(a,b)上的一点M(xm,ym),并产生一个随机整数r(r<n,n为G的阶数)。假设r=6,待传输明文为4,因为M在E23(1,1)上,用倍乘规则编码M=(13,16)。6.1.1加密技术第6章发行、交易及合约3.椭圆曲线加密算法流程(1)E23(1,1),基点G(0,1),基点G的阶数n=7。(2)K=3G=G+2G2G=G+G则:相当于两个重合的点相加根据右侧公式,d=(3*02+1)/(2*1)mod23=1/2mod23=12X3=122-0-0mod23=6Y3=12*(0-6)-1mod23=-73mod23=192G=(6,19)
同理:3G=G+2G=(0,1)+(6,19)=(3,13),相当于两个不重合的点相加。4G=G+3G=(0,1)+(3,13)=(13,16)
,相当于两个不重合的点相加。6.1.1加密技术第6章发行、交易及合约3.椭圆曲线加密算法流程椭圆曲线加密(EllipticCurveCryptography,ECC)算法流程如下。(5)Bob对点M(xm,ym)进行加密运算,计算点对(C1,C2),C1=M+r*K,C2=r*G。C1=M+6*K=(13,16)+6*(3,13)=(13,16)+(12,19)=(7,12),C2=6*G=(7,11)。(6)Bob将C1、C2传给Alice。(7)Alice接收到信息进行解密运算,即计算C1-k*C2,结果就是点M。M=C1-k*C2=(7,12)-3*C2=(7,12)-3*(7,11)=(7,12)-(12,19)=(7,12)-(12,19)=(7,12)+(27,2)=(13,16)。因为C1-k*C2=M+r*K-k*(r*G)=M+r*K-r*(k*G)=M,再对点M进行解码就可得到明文。6.1.1加密技术第6章发行、交易及合约3.椭圆曲线加密算法流程(7)计算M=C1-k*C2M=C1-k*C2=(7,12)-3*C2=(7,12)-3*(7,11)=(7,12)-(12,19)椭圆曲线上的减法P-Q等价于P+(-Q),而-Q是Q的加法逆元。对于有限域上的椭圆曲线,一般可将点Q=(x,y)的逆元定义为-Q=(x,-ymodp)即将Q的y坐标取负后求模。所以:-(12,19)=(12,-19mod23)=(12,4)则:M=(7,12)-(12,19)=(7,12)+[-(12,19)]=(7,12)+(12,4)=(13,16)求解过程中,直线斜率d=(-8/5)mod23,先求(8/5)mod23=20;再求-20mod23=3,即d=3。6.1.1加密技术第6章发行、交易及合约4.ECC在比特币中的应用在密码学中,通常将一条有限域的椭圆曲线描述为:T=(p,a,b,G,n,h),p、a、b确定一条椭圆曲线,p为质数,G为基点,n为点G的阶,h是椭圆曲线上所有点的个数m与n相除的商的整数部分。这6个参数的选择,直接影响加密的安全性,一般应满足以下几个条件。(1)p越大安全性越好,但运算速度会降低,200位左右可以满足常规安全要求。(2)p
n*h,h≤4,p*t
1(modn),n为质数,1≤t<20。(3)4a3+27b2
0(modp)。6.1.1加密技术第6章发行、交易及合约4.ECC在比特币中的应用ECC在比特币中的应用流程如下。(1)曲线参数设定:secp256k1曲线的参数设定如下。p=0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f=2256-232-29-28-27-26-24-1G=0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8n=fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141;h=01;a=0,b=7一般p为曲线的取值区间,n为可以取的最大私钥值,私钥必须小于n值,计算公钥的过程就是私钥与G点的乘法运算。6.1.1加密技术第6章发行、交易及合约4.ECC在比特币中的应用(2)密钥对生成①私钥私钥k通过随机数生成器生成。②公钥以私钥k与曲线上已定义的基点G(x,y)相乘得到K,K为公钥:K=k*G,公钥K被定义为一个点K(x,y)。在椭圆曲线中,点的相加等同于从该点画切线找到与曲线相交的另一点,然后映射到x轴。6.1.2钱包、地址及密钥第6章发行、交易及合约比特币中涉及到公钥、私钥和地址的概念。每一个比特币交易都必须含有比特币持有人的私钥数字签名。公钥在比特币网络中是公开的,用于对交易的合法性进行验证。地址用于表示收款人的地址。6.1.2钱包、地址及密钥第6章发行、交易及合约1.基本概念私钥:比特币持有者个人保有的、需要保密的密钥,用于对比特币交易进行数字签名。私钥由客户端软件创建或由钱包生成,应妥善保管。公钥:由私钥生成,和私钥成对出现,用于验证交易的合法性。在比特币网络中是公开的。地址:即比特币地址,也称钱包地址,是比特币交易时的接收地址,由公钥生成。钱包:钱包是密钥的容器,仅存放用户的公钥和私钥对,并不存放比特币。钱包可由下载的钱包软件生成,也可在线申请。6.1.2钱包、地址及密钥第6章发行、交易及合约2.私钥、公钥及钱包地址的关系比特币基于椭圆曲线加密算法,由私钥计算出公钥,再由公钥经过一系列数字签名运算得到比特币钱包地址,如图6-2所示。图6-2私钥、公钥与钱包地址的关系6.1.2钱包、地址及密钥第6章发行、交易及合约3.产生私钥比特币的私钥是通过调用随机数生成器生成的256位随机数,范围为0
2256,极难通过遍历的方式获得,因此私钥从密码学上是安全的。256位二进制形式的比特币私钥通过不同形式的转换,可以形成3种易识别的表示方法,分别是十六进制格式、WIF格式及WIF-Compressed格式,如图6-3所示。6.1.2钱包、地址及密钥第6章发行、交易及合约3.产生私钥图6-3不同格式的私钥生成6.1.2钱包、地址及密钥第6章发行、交易及合约3.产生私钥(1)十六进制格式十六进制格式就是把256位二进制的私钥用64位十六进制表示。6.1.2钱包、地址及密钥第6章发行、交易及合约3.产生私钥(2)钱包导入格式WIF(WalletImportFormat)格式,也称钱包导入格式。将私钥导入新钱包时,钱包用来识别私钥的格式,所以用钱包导出公钥时,会生成该格式的公钥,即WIF格式的私钥将生成非压缩格式的公钥。WIF格式的私钥生成过程是:第一步,先在十六进制格式头部添加前缀,如果是测试用,则添加0x6f前缀,如果连接到主链,则添加0x80前缀;第二步,对第一步的结果进行双哈希SHA()运算,运算结果取前4字节作为后缀,添加到第一步结果的尾部;最后采用Base58格式编码,生成WIF格式的私钥。6.1.2钱包、地址及密钥第6章发行、交易及合约3.产生私钥(3)钱包导入压缩格式WIF-Compressed格式,即钱包导入压缩格式,该格式增加了压缩标志(私钥的原始值并没有改变),表示将私钥导入到钱包后,钱包将生成压缩格式的公钥。WIF-Compressed格式的私钥生成过程是:第一步,先在十六进制格式头部添加前缀,如果是测试用,则添加0x6f前缀,如果连接到主链,则添加0x80前缀;第二步,在第一步运算结果的尾部添加压缩标志0x01;第三步,将第二步的结果进行双哈希SHA()运算,运算结果取前4字节作为后缀,添加到第二步结果的尾部;最后采用Base58格式编码,生成WIF-Compressed格式的私钥。6.1.2钱包、地址及密钥第6章发行、交易及合约4.生成公钥公钥由私钥经过Secp256k1椭圆曲线算法生成。公钥K(x,y)=私钥k
基点G(x,y)。椭圆曲线算法是单向计算过程,计算出的公钥可由平面点的坐标(x,y)表示。x,y都是256位二进制数值,如果同时存储x和y,占用空间较大,为节约空间,可只用坐标x的值表示公钥。公钥分压缩格式和非压缩格式两种。6.1.2钱包、地址及密钥第6章发行、交易及合约5.生成比特币钱包地址比特币钱包地址由公钥转换形成。根据交易脚本模型不同,主要有P2PKH类型地址及P2SH类型地址。两种地址的生成过程相同,区别体现在前缀的选择上。6.1.2钱包、地址及密钥第6章发行、交易及合约5.生成比特币钱包地址(1)P2PKH类型的比特币地址P2PKH(PaytoPublicKeyHash)类型的比特币地址生成过程如图6-4所示。图6-4P2PKH类型比特币地址生成过程6.1.2钱包、地址及密钥第6章发行、交易及合约5.生成比特币钱包地址(1)P2PKH类型的比特币地址生成过程描述如下:第一步,将公钥进行SHA256和RIPEMD160双哈希运算即PubKeyhash=RIPEMD160(SHA256(PubKey))运算结果是160位20B长度的公钥哈希;第二步,第一步结果的首部加比特币地址版本信息(此处版本为0x00);第三步,第二步结果经双SHA256()运算,取结果的前4字节,作为后缀添加在第二步结果尾部;最后经Base58编码转换成33或34个ASCII字符长度的比特币地址。6.1.2钱包、地址及密钥第6章发行、交易及合约5.生成比特币钱包地址(2)P2SH类型的比特币地址生成过程如下:第一步,将公钥进行SHA256和RIPEMD160双哈希运算,即PubKeyhash=RIPEMD160(SHA256(PubKey))运算结果是160位20B长度的公钥哈希;第二步,第一步运算结果首部添加比特币地址版本信息(此处版本为0x05);第三步,第二步结果经双SHA256()运算,取结果前4字节,作为后缀添加在第二步结果尾部;最后经Base58编码转换成比特币地址。比特币交易PART026.2比特币交易第6章发行、交易及合约比特币交易过程与复式记账类似,如图6-6所示。通用交易必须要有输入(Input)和输出(Output),输出之和未必等于输入之和。当输出币值小于输入币值时,输入与输出之差表示“交易手续费”,即矿工记账的报酬。图6-6复式记账交易6.2.1比特币账户模型第6章发行、交易及合约未花费的交易输出(UnspentTransactionOutput,UTXO)是比特币的账户模型,所有比特币都以UTXO的形式存在,没有余额的概念。下面以Alice转账给Bob和Cici为例介绍UTXO,如图6-7所示。图6-7比特币的UTXO账户模型6.2.2比特币交易结构第6章发行、交易及合约比特币规定每笔交易中用于支付的比特币必须证明其来源:一种是记账奖励(包括挖矿奖励和交易手续费);一种是前一交易中获得的未被使用的某个交易输出,即UTXO账户。比特币有两种交易类型:币基(Coinbase)交易和通用交易。6.2.2比特币交易结构第6章发行、交易及合约1.Coinbase交易Coinbase交易:每个区块的第一笔交易。节点挖矿的记账奖励。数据结构如表6-1所示。表6-1Coinbase交易数据结构6.2.2比特币交易结构第6章发行、交易及合约2.通用交易区块链网络中提交上来的交易单。数据结构如表6-2所示。表6-2通用交易数据结构6.2.2比特币交易结构第6章发行、交易及合约2.通用交易(1)通用交易输入结构交易输入结构如表6-3所示。表6-3交易输入结构6.2.2比特币交易结构第6章发行、交易及合约2.通用交易(2)通用交易输出结构交易输出结构如表6-4所示。表6-4交易输出结构6.2.2比特币交易结构第6章发行、交易及合约2.通用交易(3)交易的关系结构Coinbase交易是挖矿奖励或手续费交易。Coinbase字段的内容由获得记账权的节点填写,交易输出接收者是被奖励的节点。通用交易就是比特币的支付交易,比特币将从一个地址被转移到另一个地址,这种交易必须有输入和输出。交易的关系结构如图6-8所示。6.2.2比特币交易结构第6章发行、交易及合约2.通用交易(3)交易的关系结构交易的关系结构如图6-8所示。图6-8比特币交易关系结构6.2.2比特币交易结构第6章发行、交易及合约2.通用交易(3)交易的关系结构Lock_time指本次交易的执行时间,可以为立即执行,也可以设定执行时限;交易输入中的交易哈希为能证明比特币来源的上次交易的交易哈希值;输出索引是引用的上次交易的输出在交易输出集合中的位置;解锁脚本证明比特币合法来源;锁定脚本用接收者的比特币地址锁定本次输出给接收者。每次交易都需要证明交易中支付的比特币来源,因此在交易输入结构中引用本次支付者作为接收者的上一笔交易的输出,而本次交易的输出指比特币支付给谁。6.2.3比特币交易模型第6章发行、交易及合约比特币完成一笔交易的实质就是比特币从一个地址到另一个地址的转移过程。比特币交易由交易哈希形成了交易链,交易模型如图6-9所示。图6-9比特币交易模型6.2.3比特币交易模型第6章发行、交易及合约比特币协议规定建立交易数据时,支付方必须提供以下信息:输出结构:交易金额、接收方地址。输入结构:上一笔交易的交易哈希TxHash、输出索引n、支付方公钥、支付方用私钥生成的数字签名。在交易输入结构中,通过交易哈希引用上次交易(此处的上次交易指本次支付方作为接收方接收比特币的交易,即证明本次支付比特币的来源),并通过输出索引指明本次交易输入引用的是上次交易输出结构的第几个输出。6.2.4交易流程第6章发行、交易及合约比特币交易流程主要包括5步,下面以Alice转账给Bob为例说明交易流程。(1)Alice用自己的私钥对前一次交易做一个数字签名,创建一笔交易,Bob的比特币地址作为接收方地址。(2)Alice将本笔交易广播至全网,节点创建新区块。(3)各节点开始挖矿。(4)某节点完成挖矿,向全网广播新区块,并由其他节点验证。(5)其他节点验证通过,交易完成,继续挖矿。6.2.5交易验证第6章发行、交易及合约比特币采用简易支付验证(SimplifiedPaymentVertification,SPV),作用是验证支付,而不是验证交易。交易的验证包括以下内容。交易字节大小要小于区块的上限、交易的输入UTXO是存在的、交易输入UTXO没有被其他交易引用过(防止双花)、输入总金额大于输出总金额及解锁脚本验证。确认交易的真实性以后,所有的交易数据都会传送到在线节点的缓存中,由获得记账权的矿工把交易数据写入区块链,交易完成。一笔交易经过6次确认后才能被承认是合法交易,接收方才能收到比特币。6.2.5交易验证第6章发行、交易及合约以比特币钱包的客户端为例说明SPV验证过程。当Alice收到转账交易时,需要验证此笔交易对应的输入是否合法,就需要验证此交易输入对应的区块(Blockx)是否存在、是否得到共识,过程如下:(1)Alice的钱包客户端从区块链上获取主链的所有区块头,保存至本地。(2)根据交易输入中的交易哈希值定位到区块(Blockx),并判断该区块的区块头是否已在本地存储,如果没有则说明交易非法。(3)从该区块中获取交易集合构建MerkleTree,计算MerkleRoot哈希值,将结果与本地保存的区块的区块头MerkleRoot哈希值比较,相等,则继续下一步。(4)根据区块在区块链的位置确认此区块是否得到有效共识,是,则交易真实。6.2.6交易手续费第6章发行、交易及合约比特币交易需要支付者交纳手续费,手续费封装在Coinbase交易中奖励给记账者。交纳手续费不是强制要求。包含手续费的交易优先级高。未来,矿工收益将完全依靠交易手续费,手续费将成为激励机制的唯一经济来源。比特币交易的数据结构中没有手续费字段。手续费通过所有输入总和及所有输出总和之差表示,从所有输入中扣掉所有输出后的多余量会被记账矿工作为手续费收走。6.2.7双花问题第6章发行、交易及合约双重支付(Double-Spending):又称双花,一笔钱被支付两次以上就是双花。现实中的双花问题是通过实物转移或权威中心机构解决的。数字货币是虚拟货币,通过数字代码的形式呈现,可以被复制。在去中心化的区块链中,如何解决双花问题呢?区块链从数字货币自身及交易合规两个角度解决虚拟货币的双花问题。6.2.7双花问题第6章发行、交易及合约1.货币自身在区块链系统中,用数字货币支付时,要通过密钥证明这笔数字货币的合法来源。比特币系统中货币的合法来源只有3种:
某笔交易的接收
挖矿奖励
记账手续费支付这笔货币的账户通过密钥能解锁这笔货币的来源交易即可证明货币来源合法。6.2.7双花问题第6章发行、交易及合约2.交易合规区块链的所有交易存在着一个逻辑链,可以称之为交易链。交易链以时间戳、交易哈希作为前后链接的要素。数字货币的每笔交易都被存放在区块中,每笔交易被存储前,都将通过交易有效性验证以及共识证明,验证所支付的数字货币在交易链中未被支付,交易合规,且多数节点达成共识。合约机制PART036.3合约机制第6章发行、交易及合约合约机制:能够让用户自行定义交易逻辑的代码程序或计算机协议。合约机制主要分为:
交易脚本
智能合约6.3.1交易脚本第6章发行、交易及合约比特币合约机制:交易脚本本质是比特币交易结构的转移指令。脚本触发交易,以支持UTXO账户完成比特币的转账及交易有效性验证。交易脚本借助堆栈完成运算。脚本语言是基于堆栈和逆波兰表示法的执行语言,结构简单、从左至右依次处理。6.3.1交易脚本第6章发行、交易及合约1.概念(1)堆栈堆栈(Stack):简单的数据结构,后进先出(LastInFirstOut,LIFO)。压栈(Push)和出栈(Pop)两种操作方式。栈最上面的数据称为栈顶(Top)。常用操作:检视(Peek)。堆栈操作的比喻:往一个宽度只能放一本书且有一定高度的箱子里放书,放书的动作是Push,取书的动作是Pop。后放的书一定是先被取出的,拿起最上面的一本看一下再放进去就是Peek。6.3.1交易脚本第6章发行、交易及合约1.概念(2)逆波兰表示法操作符置于操作数后面,又称后缀表示法。操作符没有优先级,按照表达式顺序求值。例如:用逆波兰表示法变换算式(5-3)*4表达式:53-4*,先读5和3两个操作数,然后是减号,5减3得2,然后又是一个操作数4,然后是乘号,2乘4得8。6.3.1交易脚本第6章发行、交易及合约1.概念(3)脚本操作符以OP开头、大小1B256种操作符遇到操作数就压栈遇到操作符就执行如图6-10所示。图6-10堆栈操作过程6.3.1交易脚本第6章发行、交易及合约2.比特币脚本通过脚本自动执行校验,使每笔交易合法化。比特币的交易结构包含解锁脚本和锁定脚本(ScriptPubKey)。解锁脚本是来源证明,证明本次消费的比特币是上次交易的输出;锁定脚本是本次交易中输出的约束规定,规定下次交易消费这笔比特币的条件。比特币交易主要采用:P2PKH(PaytoPublicKeyHash)模型脚本P2SH(PaytoScriptHash)模型脚本6.3.1交易脚本第6章发行、交易及合约2.比特币脚本(1)P2PKH模型交易①脚本结构P2PKH交易模型的解锁脚本和锁定脚本如图6-11(a)和图6-11(b)所示。(a)P2PKH模型解锁脚本(b)P2PKH模型锁定脚本6.3.1交易脚本第6章发行、交易及合约2.比特币脚本(1)P2PKH模型交易②脚本代码<Sig>:本次交易支付者私钥生成的数字签名。<PubKey>:本次交易支付者的公钥。OP_DUP:操作符,复制栈顶数值并将其压栈,
相当于复制本次交易解锁脚本的<PubKey>。OP_Hash160:操作符,对栈顶数值求解公钥哈希,RIPEMD160(SHA256(PubKey))。6.3.1交易脚本第6章发行、交易及合约2.比特币脚本(1)P2PKH模型交易②脚本代码<PubKeyHash>:上次交易输出结构中接收者的公钥哈希,即接收者比特币地址。OP_EqualVerify:操作符,判断栈最上方的两个数值是否相等,
即判断OP_Hash160结果和上次交易输出结构的<PubKeyHash>是否相等。OP_CheckSig,操作符,验证交易的使用者数字签名是否正确。6.3.1交易脚本第6章发行、交易及合约2.比特币脚本(1)P2PKH模型交易③逻辑关系支付交易中,在交易输入中写入解锁脚本,即证明比特币来源的某次交易输出的锁定脚本;交易输出中写入锁定脚本是需要下一次的某个解锁脚本来解锁的。解锁脚本和锁定脚本的逻辑关系如图所示。6.3.1交易脚本第6章发行、交易及合约2.比特币脚本(1)P2PKH模型交易④脚本执行过程验证交易时,解锁脚本解锁的是上次交易的锁定脚本,即本次交易的解锁脚本和上次交易的锁定脚本组合成一个栈式结构,从左至右依次执行,如图6-13所示。图6-13验证脚本结构6.3.1交易脚本第6章发行、交易及合约2.比特币脚本(1)P2PKH模型交易④脚本执行过程在图6-13中,Sig是本次交易支付者私钥生成的数字签名,PubKey是本次交易支付者的公钥。Sig和PubKey是操作数,依次压栈。OP_DUP是操作符,将栈顶数据即PubKey复制一份,然后将复制的公钥压栈置栈顶。OP_Hash160是操作符,对栈顶PubKey做RIPEMD160(SHA256(PubKey)),结果压栈。PubKeyHash是操作数,是上次交易输出结构中接收者的公钥哈希,即接收者的比特币地址,也是本次交易支付者的比特币地址。将PubKeyHash压栈。6.3.1交易脚本第6章发行、交易及合约2.比特币脚本(1)P2PKH模型交易④脚本执行过程OP_EqualVerify是操作符,判断两个数据是否相等,判断操作时先把栈顶的两个数据出栈,如相等则继续,出栈的数据不再压栈。OP_CheckSig是操作符,作用是验证签名是否正确。通过公钥PubKey验证签名Sig,如结果是True,证明交易合法。脚本系统依次读取指令,并对堆栈操作。所有指令结束后,检查堆栈中的残留数据,如果均为True,则交易有效,否则交易无效。执行过程如图6-14。6.3.1交易脚本第6章发行、交易及合约2.比特币脚本(1)P2PKH模型交易④脚本执行过程6.3.1交易脚本第6章发行、交易及合约2.比特币脚本(2)P2SH模型交易P2SH是多重签名的一种应用形式。P2SH模型的交易脚本中增加了一个RedeemScript的概念,称为赎回脚本。锁定脚本填写的是RedeemScript的哈希值,使得锁定脚本变得很短,下次交易支付人要花费这笔交易的输出时,需要在解锁脚本中提供签名及一段序列化的RedeemScript,使得解锁脚本变长。6.3.1交易脚本第6章发行、交易及合约2.比特币脚本(2)P2SH模型交易①脚本结构在一个MtoN的P2SH交易中,赎回脚本RedeemScript的结构如图6-15(a)所示。(a)P2SH交易模型的赎回脚本6.3.1交易脚本第6章发行、交易及合约2.比特币脚本(2)P2SH模型交易①脚本结构P2SH交易模型的解锁脚本和锁定脚本如图6-15(b)和图6-15(c)所示。(b)P2SH交易模型的解锁脚本(c)P2SH交易模型的锁定脚本6.3.1交易脚本第6章发行、交易及合约2.比特币脚本(2)P2SH模型交易②脚本代码OP_0:空签名,为了解决CheckMultiSig调用的Bug。<SigM>:操作数,签名。<RedeemScript>:操作数,是一段序列化的脚本。OP_Hash160:操作符;对栈顶的数据运行Hash160运算。<RedeemScriptHash>:操作数,是赎回脚本经Hash160生成的20B哈希值。OP_Equal:操作符,判断前两个数据是否相等。如果相等,则交易合法。6.3.1交易脚本第6章发行、交易及合约2.比特币脚本(2)P2SH模型交易③逻辑关系逻辑关系与P2PKH相同。本次交易输入的解锁脚本解锁上次相关的交易输出的锁定脚本。6.3.1交易脚本第6章发行、交易及合约2.比特币脚本(2)P2SH模型交易④脚本执行过程验证交易时,解锁脚本解锁的是上次交易的锁定脚本,即本次交易的解锁脚本和上次交易的锁定脚本组合成一个栈式结构,从左至右依次执行,如图6-16所示。图6-16验证交易结构6.3.1交易脚本第6章发行、交易及合约2.比特币脚本(2)P2SH模型交易④脚本执行过程验证交易过程如下:第一步,先验证脚本哈希值是否匹配。将签名(Sig)压栈;将序列化RedeemScript压栈;执行OP_Hash160,将栈顶的RedeemScript出栈,运行Hash160,然后将哈希值压栈;脚本哈希值RedeemScriptHash压栈;执行OP_Equal,将最上面的两个数值出栈,并判断是否相等。如相等,则继续。此时栈中只有一个签名(Sig)。6.3.1交易脚本第6章发行、交易及合约2.比特币脚本(2)P2SH模型交易④脚本执行过程验证交易过程如下:第二步,反序列化RedeemScript,并执行该脚本,以验证签名。将公钥(PubKey)压栈,这时栈中有签名和公钥两个数据,调用CheckSig验证签名。如果结果为真,将True压栈,说明交易合法。6.3.2智能合约第6章发行、交易及合约脚本语言为非图灵完备,缺乏灵活性。1.图灵完备(1)图灵机。图灵机(TuringMachine),又称确定型图灵机。艾伦﹒麦席森﹒图灵(AlanMathisonTuring)在1936年提出的抽象计算模型。模型证明了只要图灵机被实现,就可以用来解决任何可计算问题。图灵机可以看作一种有限逻辑数学过程的强大逻辑机。6.3.2智能合约第6章发行、交易及合约1.图灵完备(2)图灵完备图灵完备性(TuringCompleteness)是指如果一系列操作数据的规则(如指令集、编程语言)可以实现图灵机模型里的全部功能时,则称具有图灵完备性。图灵完备的规则能够实现任何操作逻辑,如利用条件控制语句、循环语句编写符合任何逻辑的代码。6.3.2智能合约第6章发行、交易及合约2.智能合约(1)概念智能合约(SmartContract)是由密码学家尼克﹒萨博(NickSzabo)在1997年首次提出。由事件驱动、具备状态机制的、能够根据预设条件自动执行合约条款的程序化协议。智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议。6.3.2智能合约第6章发行、交易及合约2.智能合约(2)智能合约与区块链。以太坊在《以太坊:下一代智能合约和去中心化应用平台》中,提出将区块链技术和智能合约结合并运行。在以太坊中,智能合约是以状态机的形式出现的,智能合约的每次执行都是从一个状态转移到另一个状态。6.3.2智能合约第6章发行、交易及合约2.智能合约(3)智能合约构成要素智能合约包括合约主体、数字签名、合约条款及区块链平台4个要素。①合约主体:智能合约必须具备合约主体,才能实现自动锁定、合约解锁。②数字签名:链上所有参与者通过签名验证后,合约才能启动。③合约条款:智能合约条款涉及操作流程和执行条件,由所有参与者认同并签署后方可自动触发。④区块链平台:由于区块链技术去中心化的特性,智能合约被放入去中心化的区块链平台,等待执行。6.3.2智能合约第6章发行、交易及合约2.智能合约(4)智能合约漏洞①Solidity语言漏洞,比如重入漏洞、未检查call返回值、类型混乱、拒绝服务、访问控制、整数溢出等漏洞。②以太坊虚拟机漏洞,比如交易过程中数字货币丢失、堆栈调用深度限制以及变量的使用类型限制等漏洞。③区块链本身漏洞,比如交易顺序依赖、时间戳依赖以及随机数的生成等漏洞。6.3.2智能合约第6章发行、交易及合约2.智能合约(5)智能合约原理通用智能合约一般包括:针对交易的事务处理及保存机制、一个完备的状态机。状态机用于接收和处理智能合约,事务的处理及保存则在区块链上完成。智能合约在部署之后才能被调用,调用智能合约需要满足触发条件,每次调用需要读取合约的状态和代码。通用的智能合约模型如图所示。6.3.2智能合约第6章发行、交易及合约2.智能合约(6)智能合约运行机制签订并部署智能合约后,合约以程序代码的形式上链。在区块链节点传播和验证后,作为一笔交易被记录在新生成的区块中。用户通过程序代码预定义合约状态、转换规则、触发条件及处理动作。智能合约部署完成后,将周期检测是否满足触发条件,满足条件的事件将等待节点验证,如果多数验证节点达成共识,智能合约将被执行。成功执行的智能合约被删除,没有执行的合约继续等待,直到执行完毕。6.3.2智能合约第6章发行、交易及合约2.智能合约(7)智能合约部署①编写合约:编写合约代码,形成代码文件,包含触发自动执行合约的预设条件。②编译合约:通过编译器对代码文件进行编译。③部署合约:通过RPCAPI向以太坊节点发送创建交易(部署合约)请求,交易被验证合法后,识别为合约创建交易,检查输入数据,进入交易池。④合约验证:节点打包合约创建交易,生成新区块,广播到全网;其他节点收到新区块后对交易验证,创建EVM环境,生成智能合约账户地址,将合约上链。⑤部署完成:API获取智能合约创建交易收据,得到智能合约账户地址,完成。6.3.3预言机第6章发行、交易及合约如果智能合约的触发条件取决于区块链之外的信息,如何从外部获取真实、准确的数据?预言机的出现解决了智能合约在执行过程中面临的将现实中数据真实上链的难题。预言机是一个在多领域中有不同应用和解释的概念,本书仅介绍区块链领域应用的预言机。6.3.3预言机第6章发行、交易及合约1.区块链技术中的预言机预言机(OracleMachine)是将区块链外数据写入区块链内的一种机制或工具。实现了区块链与现实世界的数据互通。预言机既是智能合约与外部进行数据交互的唯一途径,也是区块链与现实世界进行数据交互的接口。区块链领域内的预言机本质上是区块链与外部数据调用和访问的可信中间件。6.3.3预言机第6章发行、交易及合约1.区块链技术中的预言机预言机工作角色主要由3部分组成:区块链智能合约、预言机节点及链下外部数据。访问外部数据工作流程主要包括以下4步:(1)区块链智能合约向预言机发起数据请求。(2)预言机向外部数据源获取数据。(3)外部数据源将数据发送给预言机。(4)预言机将数据反馈给区块链智能合约。6
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年胃壁间质炎性病变诊疗试题及答案(消化内科版)
- 2026年巢湖市文化局系统事业单位人员招聘考试备考试题及答案详解
- 2026年成都痔瘘专科医院医护人员招聘笔试备考试题及答案解析
- 2026年德阳市粮食和物资储备系统事业单位人员招聘考试备考试题及答案详解
- 2026年滁州市广播电视台(融媒体中心)人员招聘考试备考试题及答案详解
- 2026年福建省辅警招聘考试备考试题及答案详解
- 2026年大连市殡葬管理服务系统事业单位人员招聘考试备考试题及答案详解
- 2026津投期货经纪有限公司市场化选聘中层管理人员招聘2人考试备考试题及答案解析
- 2026年安康市法院书记员招聘考试备考试题及答案详解
- 2026年阿勒泰市工会系统事业单位人员招聘考试备考试题及答案详解
- GB/T 46562-2025能源管理体系多组织共用能源管理体系实施指南
- 成都市人事考试中心2025年下半年招考编外工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 2025年慢性乙型肝炎治疗指南
- 2025年湖北省仙桃市小升初数学试卷(含答案)
- 2025大学党校入党积极分子网络培训考试题库【含答案】
- 2025高中英语词汇5500词汇手册
- 知到《卫生统计学(湖南中医药大学)》智慧树网课完整版章节测试答案
- 园林绿化养护标准 DG-TJ08-19-2023
- JJF 2309-2025重点排放单位碳计量审查规范
- 仓储管理信息系统操作流程及规范
- 基于PLC的变电所智能型无功补偿控制系统设计
评论
0/150
提交评论