# 长安链基础知识介绍 ## 基础术语说明 | 名称 | 说明 | | :-------- | :-------------------- | | 区块(Block) |区块是区块链中存储交易和交易相关的数据的单元,通常由区块头和区块体组成。 | | 区块链(Blockchain) | 使用密码技术链接将共识确认过的区块按顺序追加而形成的分布式账本。 | | 智能合约(SmartContract) | 以数字形式定义的能够自动执行条款的合约。| | 读写集 (Read-write set) | 区块链上的一条交易执行过程中,被读取和被修改或写入的状态数据的集合。| | 交易(Transaction) | 也称为事务,区块链上的一次原子性账本数据状态变更及其过程和结果记录。| | 交易哈希(TransactionHash) | 交易上链成功后,产生的唯一哈希值。| | 对等网络(Peer-to-peer Networking) | 一种仅包含对控制和操作能力等效的节点的计算机网络。| | 可装配性 (Assemblability ) | 对于可装配区块链系统,其组成模块的易替代性使得整个系统具备易变更性,从而适应各种定制需求,称为可装配性。| | 交易调度(TransactionScheduling) | 将一批交易按照调度策略分配计算资源进行执行的过程。
交易调度的调度策略决定一批交易的执行顺序和交易并行冲突的处理机制。 | | 可装配区块链系统
(Assemblable Blockchain System) | 可装配区块链系统是由一组易替代、遵循一定规范的模块按照使用者的定制需求组合而成的可正常运作的区块链系统。
该系统具备易变更的特性,通过替换模块能够灵活变更为具备不同特性的另一个可正常运作的区块链系统。 | | 可装配区块链系统框架
(Assemblable Blockchain System Framework) | 可装配区块链系统框架是指为确定区块生成流程而设计的具有一定约束性的支撑结构。
框架决定了各个模块的调用规则,根据区块生成的具体要求选择相应的框架按照使用者的定制需求组合模块或
在已有框架上扩展、安插更多的模块,从而更迅速和方便地构建完整的区块链系统。 | | 提议节点(ProposingNode) | 区块链网络中负责产生新的候选区块的节点。| | 验证节点(VerifyingNode) | 区块链网络中负责验证新的候选区块的节点。
对某一候选区块而言,除提议此区块的节点外其余区块链节点均为验证节点。
在不同轮次中提议节点和验证节点身份可互相转换。 | | 可信执行环境(TrustedExecutionEnvironment) | 提供硬件级别的资源隔离和信任度量能力,其中最具代表性的是 Intel SGX。| | 交易读取 (Transactionreading) | 链上拉取区块,并读取区块中解析交易信息的过程。 | | 默克尔根(Merkle root) | 在构造Merkle树时通过从下到上两两计算得出的最后的唯一哈希值为默克尔根。| | 有向无环图(DAG) | DAG原本是计算机领域一种常用数据结构,
因为独特的拓扑结构所带来的优异特性,经常被用于处理动态规划、导航中寻求最短路径、数据压缩等多种算法场景。
有向无环图指的是一个无回路的有向图。
如果有一个非有向无环图,且A点出发向B经C可回到A,形成一个环。
将从C到A的边方向改为从A到C,则变成有向无环图。 | | 以太坊虚拟机(Ethereum Virtual Machine) | EVM是简化版的虚拟机,为了保证智能合约运行的流畅度,EVM并没有模拟完整的计算机,
而是采用了轻量级的虚拟机架构。 | | 长安链可执行文件(chainmaker binary) | 长安链项目chainmaker-go源码编译后生成的可执行二进制文件执行make命令后将生成在chainmaker-go/bin目录下 | | 长安链SDK(chainmaker SDK) | 用于与长安链交互(发送交易,订阅等)的软件开发工具 | | 合约SDK(contract SDK) | 用于开发智能合约的软件开发工具,使编译的wasm文件可与长安链进行交互 | | wasm文件(webassembly file) | 长安链指的智能合约编译后生成的文件。
wasm指通过各自符合WebAssembly规范的编译器编译出来的以.wasm结尾的文件。
c++: emmake make
rust: wasm-pack build
tinygo: tinygo build -no-debug -opt=s -o main.wasm -target wasm | | 长安链CA(chainmaker CA) | 指使用长安链配套证书管理工具chainmaker-cryptogen管理的证书、密钥体系 | | SPV(Simplified Payment Verification) | 轻节点,通过同步区块头和部分其他数据实现对交易的有效性证明 | | 外部证书 | 非长安链CA服务(chainmaker-ca)或证书生成工具(chainmaker-cryptogen)颁发的数字证书 |

## 功能清单说明 | 功能名称 | | 描述 | | ------------------ | ------------------------------------------------------------ | ------------------------------------------- | | 合约引擎 | GASM、WASMER、WXVM、EVM、NATIVE、VM-DOCKER GO分别对应 tinygo、rust、 c++、 solidity、golang等
合约语言native为内置系统合约 | 合约执行环境 | | 合约功能 | put、get、迭代器范围查询、隐私计算、事件 | 合约内支持的功能 | | 合约加密方案 | 层级身份加密、paillier半同态加密、bulletproofs零知识证明 | 合约内可提供加密方案 | | 系统合约 | 证书管理、节点管理、链配置更新、区块/交易信息查询 | 长安链内置合约 | | 共识算法 | SOLO、RAFT、TBFT、maxBFT、dPoS | | | 加密算法 | (sha256、sm3)(ecc_p256、sm2) | | | 并行调度 | DAG有向无环图 | 使交易可并行执行的方案 | | KV存储引擎 | LevelDB、BadgerDB、MySQL | 使用K、V格式存储数据 | | SQL合约存储引擎 | MySQL,SQLite | 使用结构化存储数据 | | SQL合约引擎 | tinygo、rust | 可在合约内写sql语句 | | 存储内存加速 | | 将需要存储的内容预先放在内存, 异步存储落盘 | | P2P网络模块 | 本地配置种子节点和信任根 | 节点间连接网络 | | RPC服务 | 提供与SDK交互接口 | 链与其他工具交互接口 | | 交易缓存 | batch交易池、single 交易池 | 接收交易的交易池 | | 轻节点 | SPV,同步块头和交易有效性校验 | 同步部分数据的客户端 | | 跨链 | 异构链,正/逆向操作的合约实现 | 区块链数据互通技术 | | 归档 | 历史数据归档、恢复、查询功能 | | | 权限控制 | 使用证书标识账户体系 | | | 工具:运维监控 | Prometheus、Grafana | | | 工具:自拉起服务 | | 使服务在电脑重启后可自动运行 | | 工具:链SDK | go、java、nodejs。支持发送交易、查询交易、订阅区块/交易/合约事件 | 与链交互的软件包 | | 工具:CMC | 命令行工具。支持发送交易、查询交易 | 与链交互的命令行工具 | | 工具:证书生成工具 | | 生成链需要的证书的工具 | | 生态:区块链浏览器 | | 可查看链区块、交易数据和链状态 | | 生态:CA证书服务 | | 提供签发证书功能 | ## 编写语言 | 项目 | 编程语言 | 说明 | | ------------ | --------------------------- | ------------------------------------------------------------ | | 长安链主项目 | golang | 长安链主项目采用golang,以降低并发编程的使用门槛,提升整体性能。 | | SDK | golang、java、nodejs | 长安链SDK目前支持golang、java和nodejs,方便使用者与业务系统集成开发。
后续会增加对python的支持。 | | 智能合约 | golang、c++、rust、solidity | 长安链智能合约目前支持golang、c++、rust、solidity等语言,方便各个开发者选择熟悉的语言开发业务逻辑。
不久as(assembly script) 也将支持 | | 生态工具 | golang | 长安链证书生成工具、区块链浏览器、区块链管理平台等一系列生态工具的后端目前也选择golang作为开发语言。 |