Odyssey-v3.7
奥德赛 3.7 版本为非强制升级,包含以下新功能和改进。
模块化
奥德赛 3.7 进行了代码组织结构的模块化工作,方便开发者对模块进行自定义开发。几个主要模块如下:
框架
作为核心模块,框架模块既是区块链的入口,也将其他所有模块紧密地连接在一起。换言之,框架模块负责各个模块的初始化和模块之间的通信。
协议
去中心化波场协议可由任何团队实现,不受编程语言限制。所有遵循波场协议的客户端都能相互通信。
简洁高效的数据传输协议对分布式网络来说至关重要,对区块链而言则更甚。因此,该协议是基于谷歌(Google)的优质开源软件协议 Protocol Buffers 实现的。
协议所定义的区块链具体业务逻辑包括:
- 消息的数据格式,包括区块、交易、提议、见证人、投票、账户、交易所等等。
- 区块链节点间的通信协议,包括节点发现协议、节点数据同步协议、节点打分协议等。
- 区块链为外部系统或客户端提供的接口协议。
共识
共识机制是区块链的重要组成部分。波场区块链采用 DPoS 作为核心共识机制,长期以来运行稳定。但是,要想将 Java-tron 改造成为强大的基础设施,支持搭建用于实际应用场景的区块链,我们就必须为其装备可替换的共识模块。 区块链开发者应选取最适合具体应用情景的共识机制。利用可替换的共识模块,我们的终极目标是使共识机制可以通过设置一些必要参数来决定。除此之外,只要实现几个必要的接口,开发者即可自定义共识模块。
加密
作为区块链的核心模块之一,加密是区块链数据安全的基础, 应用于公钥和私钥的推论、交易验证和零知识证明等。Java-tron 对加密模块进行了抽象化,并支持替换加密算法,可以根据不同的业务需求选择合适的加密算法。
执行器
执行器是用于处理各种交易的核心模块。众所周知,波场区块链上的每一笔交易都包含一个合约。总体而言,波场区块链共有两种合约:系统合约和智能合约。大量应用程序通过智能合约实现,在区块链的内部虚拟机中运行。然而,智能合约在功能性和灵活性方面仍受限制,无法满足复杂应用程序的要求。自定义的执行器则为应用程序开发者提供了一种全新的开发方式。他们可以选择将应用程序的代码植入链内,而不用在虚拟机上运行。
内存数据库
内存数据库专为区块链数据储存而设计。节点始终认为最长链是正确的区块链,并会持续将其延长。除非采用类似 PBFT 的确定性共识算法,目前区块链领域的常见做法是切换到最长链。因此,支持数据回滚是内存数据库模块最突出的功能。该模块中定义了几个设计精细的抽象接口,开发者可以自由选择存储引擎,实现对应的接口。现有的两个实现方案是 LevelDB 和 RocksDB。
固化块的新事件订阅触发器
添加了用于更新固化块的订阅触发器,该触发器触发了固化块更新事件到消息队列,以便用户可以及时获取最新的固化块信息。固化块是指不可撤销的区块。所以,当一个区块变成固化块后,打包在该区块内的交易即被区块链接受。
新增两个HTTP API
gettransactioninfobyblocknum
描述:查询特定区块内的交易信息列表
此 API 已添加到 /wallet 和 /walletsolidity 中。
参数 num:区块高度
返回:交易信息列表
/wallet:
curl -X POST http://127.0.0.1:8090/wallet/gettransactioninfobyblocknum -d '{ "num": 18084308 }'
/walletsolidity:
curl -X POST http://127.0.0.1:8091/walletsolidity/gettransactioninfobyblocknum -d '{ "num": 18084308 }'
broadcasthex
/wallet/broadcasthex
描述:广播十六进制字符串格式的签名交易
参数:十六进制字符串格式的签名交易
返回:广播结果
curl -X POST http://127.0.0.1:8090/wallet/broadcasthex -d'{
"transaction":"0A8A010A0202DB2208C89D4811359A28004098A4E0A6B52D5A730802126F0A32747970652E676F6F676C65617069732E636F6D2F70726F746F636F6C2E5472616E736665724173736574436F6E747261637412390A07313030303030311215415A523B449890854C8FC460AB602DF9F31FE4293F1A15416B0580DA195542DDABE288FEC436C7D5AF769D24206412418BF3F2E492ED443607910EA9EF0A7EF79728DAAAAC0EE2BA6CB87DA38366DF9AC4ADE54B2912C1DEB0EE6666B86A07A6C7DF68F1F9DA171EEE6A370B3CA9CBBB00"}'
新增一个 RPC 接口
在Wallet
WalletSolidity
服务中添加 GetTransactionInfoByBlockNum
方法
rpc GetTransactionInfoByBlockNum (NumberMessage) returns (TransactionInfoList) {
}
代码片段:
NumberMessage.Builder builder = NumberMessage.newBuilder();
builder.setNum(blockNum);
TransactionInfoList transactionInfoList = blockingStubFull.getTransactionInfoByBlockNum(builder.build());
Updated almost 3 years ago