本文主要是介绍区块链开源项目Ripple三、交易的完整生命周期,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
修改区块链的唯一方法是提交交易,待交易通过共识后即可写入区块链,同时修改区块,下面对整个交易的生命周期做详细说明。
rippled底层提供了交易提交的API(详细请参考https://ripple.com/build/rippleapi):submit 后面跟交易的已签名BLOB,签名可以掉调用rippled的RPC命令Sign,也可直接用submit 后面跟私钥。不过这种方式一般只在笔者做内部测试用,正式给客户使用时绝不可把私钥提交到服务器上,这样违背了“去中心化”的初衷,在笔者的实际开发中,一般用Ripple-lib从当调用的中间层,通过ws与底层通讯,下面以调用RIpple-LIb脚本调用为例,先介绍二个API
1.preparePayment(address, payment,option)
2.sign(prepared.txJSON, secret);
第一个对交易payment校验,填上必须的字段,如费用,区块序号和账户序号等。
第二个对用私钥对交易签名。返回值就可以用submit提交。
有几个注意的地方:
1.区块序号和账户序号
LastLedgerSequence:上一个区块的序号,若干个区块构成区块链,每一个区块对应一个递增的序号。
Sequence:账户序号 区块链上有若干账号,每一个账号的交易序号都是从1开始递增。
2.共识达成的最大区块序号
ripple-lib脚本发送交易时,preparePayment可以有三个参数,第一个参数:公钥 第二个参数,交易JSON,第三个字段,限制选项。限制选项中有个maxLedgerVersion,这个意为达成共识的最大区块序列号,如果在这个区块上还没有达成的话,那么交易失效。
提交到本地后,本地先验证交易的合法性,比如必须字段是否已经填写(参看交易的必须字段参考在src\ripple\protocol\impl\TxFormats.cpp)
,这几步对应文件src\ripple\app\tx\impl\Payment.cpp,判断结构非常清晰,123步骤逐渐深入).
本地验证通过后,启动一个工作者线程advanceThread(对应文件src\ripple\app\ledger\impl\LedgerMaster.cpp),里面调用doAdvance,这个函数以后介绍同步还会详细说明,对于本地验证通过后的交易,发布到网络上参与共识。
共识通过后,各节点取得这个区块,写到本地数据库中。
自此,一个交易的完整生命周期结束。
这篇关于区块链开源项目Ripple三、交易的完整生命周期的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!