# BDContract介绍

- - -

## 什么是BDContract?

  北大数瑞是面向大数据场景的数据资源、IoT资源、云资源的管理、调度平台。BDContract是一个可信计算框架，计算逻辑以智能合约的方式表达。通过”随机“和”冗余计算“的方式实现智能合约的可信执行。BDContract在保证智能合约的可用性、可靠性的同时，着重提升执行效率和安全性。


- - -

## 特点

0. 支持多种执行模式，权衡可用性、可靠性、正确性和效率。
1. 接入各种数据源。
2. 支持合约的细粒度监测。
3. 支持合约的状态。
4. 访问控制。
5. 支撑跨语言调用。


- - -

## 更新日志

* **v1.4.5** 2021年6月29日
    - 稳定性提升
    - HTTP服务端的URIPath优化
    - 支持以Http方式进行静态资源文件加载

* **v1.4.4** 2021年6月15日
    - 修复了getContractMeta时没优先返回RUNNING/HANGED的合约的问题
    - 实现了HomomorphicEncrypt的逻辑

* **v1.4.3** 2021年6月9日
    - 修复SSL Renegotiate Bug
    - 实现内存不足时自动Hangup-Resume
    - 实现contract meta的硬盘持久化
    
* **v1.4.1** 2021年5月26日
    - 实现了事件机制中的事件语义，支持“至少一次”、“至多一次”和“只有一次”
    - 优化了合约模板
    - 增加模板配置文件
    - 优化了MockTemplate注解

* **v1.4.0** 2021年5月9日
    - 优化了ACTemplate
    - 完善了DoRepo的配置联动
    
* **v1.3.9** 2021年4月22日
    - 修复了doipConfig在updateConfig中不支持的bug
    - test-tool支持了sudo
    - 优化了contract-template中的ACTemplate模板
    
* **v1.3.6** 2021年4月21日
    - 修复了docker中无法获取cpuid的问题

* **v1.3.6** 2021年4月16日
    - 修复了部分bug
    - 修复了GRPCPool线程数量不足导致排队的bug
    - 修复了requestID分配在压力测试下可能重复的bug 

* **v1.3.5** 2021年3月31日
    - 修复了部分bug
    - http的合约调用部分增加了简单拥塞控制策略
    - 稳定性提升  

* **v1.3.0** 2021年2月1日
    - 优化心跳机制
    - 修复部分Bug
    - 更新SM2/SM3库
    - 更新前端签名计算方式
    
* **v1.2.0** 2020年12月11日
    - 优化了多节点执行模式
    - 优化了合约master路由的逻辑
    - 修复了部分bug
    - 修复文件系统相关的漏洞

* **v1.1.0** 2020年9月
    - 支持https，并更新了该部分文档


* **v1.0.9** 2020年8月27日
    - 完善IO相关工具类的文档
    - 优化合约模板：DAC持久化


* **v1.0.7** 2020年8月13日
    - 优化合约日志、账本接口
    - 优化相关接口的文档
    - 提供合约模板的websocket接口
    - 自动编译bug修复

* **v1.0.5** 2020年7月25日
    - 弱化NC的中心化作用，集群点对点连接。
    - 优化bdwareclient
    - TODO MemoryDurable

* **v1.0.2** 2020年7月22日
    - 修复CentOS7下Too Many Opened Files的Bug
    - 修复权限Bug
    - 增加权限说明
    - 修复MySQLUtil的bug
    - 升级BDLedger版本

* **v1.0.1** 2020年7月5日
    - 更新了NodePortal/CenterPortal的UI。
    - 修改了编译流程，在NodePortal中可查看编译结果，在OnlineIDE中可手动/启动时编译
    - 修改了合约分发逻辑，以编译后ypk作为分发的文件
    - 支持public目录下的ypk在多节点模式下执行时，合约故障自动恢复

* **v0.99** 2020年6月22日
    - 自定义合约方法的计费
    - 新增了GasExample、Incentives示例
    - 在客户端实现了"校验多点结果"，并优化了结果返回的方式
    - 修复断线重连后无权限提示

* **v0.97** 2020年5月25日
    - cpu等资源的计量：gas机制
    - onlineIDE.html 支持上传多个文件
    - udp方式组网进行多点执行[无定序消息]
    - bdwareclient.html，修复只包含计算逻辑的调用示例生成前缀错误

* **v0.95** 2020年5月19日
    - 修复了onlineIDE.html在的pathname有前缀时不能正确跳转bdwareclient的bug。
    - 修复了bdwareclient的pathname有前缀时自动提取url的bug。
    - 启用了合约的权限
    - 增加了NodePortal.html/OnlineIDE.html和bdwareclient.html中无权限时的提醒

* **v0.90** 2020年5月9日
    - 更改了yjs.jar/bdserver.jar的打包方式
    - 更新了install.sh/update.sh
    - onlineIDE的修改后提醒
    - onlineIDE标签页自适应宽度
    - 文件接口隔离


* **v0.8** 2020年4月26日
    - 完善文档界面和优化SDK提供方式
    - 数瑞Web客户端，客户端中所有的数据处理和如何对处理后的数据进行渲染均来自合约调用，实现可信Web应用。

* **v0.78** 2020年4月13日
    - 合约调用DAC示例
    - 支持动态修改IO权限
    - 支持合约状态自定义备份（定时）策略
    - 修复部分页面bug
    - 日志展示优化
    - 优化账本日志展示
    - 启用部分权限访问控制


* **v0.7** 2020年3月25日
    - 支持多种角色的访问控制
    - 更新了UI

* **v0.6** 2020年2月14日
    - 优化了合约进程间的通讯
    - 尝试接入P2P网络

* **v0.5** 2019年12月10日
    - 完善了3种智能合约状态记录-回放策略
    - 支持了最简单的多点执行算法（不同步）

* **v0.45** 2019年9月2日
    - 初步实现PBFT算法

* **v0.4** 2019年5月10日
    - 支持memory dump

* **v0.35** 2019年4月26日
    - 实现合约的静态分析框架
    - 支持事件的发布-订阅

* **v0.3** 2019年1月8日
    - 支持账本数据的接入
    - 合约状态上链

* **v0.2** 2018年10月9日
    - 支持Python包的自动生成
    - 支持合约打包为ypk
    - 支持文件、数据库等数据的接入

* **v0.1** 2018年8月6日
    - 定义了智能合约的语法
    - 基于nashorn引擎，实现了智能合约的执行

- - -

## 使用开源项目说明
BDWareContract项目站在了许多巨人的肩膀上，感谢这些开源项目。

本项目的智能合约后端使用了以下开源库。

| 名称 | Licence类型 | 说明 |
| ------ | ---------- | ---- |
| [Project Nashorn](https://openjdk.java.net/projects/nashorn/) | [GPLv2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) | 使用了该项目的编译器，可以将js函数编译为java字节码 |
| [ASM OW2](https://projects.ow2.org/view/asm/) | [BSD](https://en.wikipedia.org/wiki/BSD_licenses#4-clause_license_(original_%22BSD_License%22)) with attribution | 基于asm的TreeAPI与VisitorAPI实现合约的静态分析框架 |
| [Netty](https://netty.io/) | [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) | 使用netty作为Http/Websocket的服务端 |
| [gRPC](https://grpc.io/) | [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) | 使用gRPC与BDWareLedger通讯 |
| [RocksDB](https://github.com/facebook/rocksdb) | [GPLv2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) | 后台数据库 |
| [ANTLR](https://github.com/antlr/antlr4) | [BSD](https://en.wikipedia.org/wiki/BSD_licenses#4-clause_license_(original_%22BSD_License%22)) | 对合约脚本的词法分析与语法分析 |
| [SM2Java](https://github.com/PopezLotado/SM2Java) | [无](https://github.com/PopezLotado/SM2Java/blob/master/README.md) | 国密SM2 Java语言实现 |



本项目的智能合约前端使用了以下开源库。

| 名称 | Licence类型 | 说明 |
| ------ | ---------- | ---- |
| [Bootstrap](https://getbootstrap.com/) | [MIT](https://github.com/twbs/bootstrap/blob/master/LICENSE) | 前端的排版、样式 |
| [jQuery](https://jquery.org/) | [MIT](https://jquery.org/license/) | 用于操作DOM的javascript库 |
| [jQueryUI](https://jqueryui.com/) | [MIT](https://jquery.org/license/) | 前端UI构件库 |
| [DataTables](https://datatables.net/) | [MIT](https://datatables.net/license/mit) | 表格样式 |
| [CodeMirror](https://codemirror.net/) | [MIT](https://codemirror.net/LICENSE) | 代码编辑框样式 |
| [eCharts](https://echarts.apache.org/zh/index.html) | [ApacheV2](https://www.apache.org/licenses/) | 统计图表 |
| [sm-crypto](https://github.com/JuneAndGreen/sm-crypto) | [MIT](https://github.com/JuneAndGreen/sm-crypto/blob/master/LICENCE_MIT) | 国密SM2 javascript语言实现 |

本项目的文档使用[Sphinx](https://www.sphinx-doc.org/en/master/)生成，感谢[readthedocs](https://readthedocs.org/)提供文档样式。