![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
长安链 源码学习
文章平均质量分 70
长安链学习
明神特烦恼
深耕区块链底层技术,从业区块链五年以上,聚焦于联盟链技术发展,Hyperledger Fabric专家,基于Fabric做过各种改造,源码快翻新,了解程度登峰造极。
展开
-
长安链源码学习 vm-docker-go
vm-docker-go 原理原创 2022-09-23 14:23:19 · 690 阅读 · 0 评论 -
长安链源码学习v2.2.1--ioc机制(十)
长安链IOC原创 2022-08-31 12:55:30 · 225 阅读 · 0 评论 -
长安链源码学习v2.2.1--ioc机制(九)
长安链IOC机制原创 2022-08-31 11:12:09 · 346 阅读 · 0 评论 -
长安链源码学习-智能合约 (八)
智能合约包括系统合约、业务合约,这节将阐述长安链合约是如何分类的,以及智能合约执行流程。1. 合约分类系统合约1) 系统合约名称:var ContractName_value = map[string]int32{ "SYSTEM_CONTRACT_CHAIN_CONFIG": 0, "SYSTEM_CONTRACT_QUERY": 1, "SYSTEM_CONTRACT_CERT_MANAGE": 2, "SYSTEM_CONTRACT_GOVERNANCE": 3.原创 2021-06-16 08:34:19 · 3196 阅读 · 0 评论 -
长安链源码学习--账本 (七)
作者:明神特烦恼公众号:明神特烦恼在共识完成后进行区块提交阶段,对调用账本模块来对区块以及交易等进行持久化,本章节将一起分析一下账本模块实现过程。带着问题读代码:1)存储方式有哪些?2)账本存储哪些内容,有哪些索引?3)在写如多张数据库表,如果发生意外掉电,如何保证原子性?如何回滚?第一个问题:存储方式有哪些? 长安链支持nosql、sql两种形式的存储,其中nosql支持rocksdb、leveldb,sql支持mysql、sqlite。多种存储形式满足不同应用场景及业务要求。原创 2021-06-15 15:41:38 · 861 阅读 · 2 评论 -
长安链源码学习--区块验证(BlockVerify)(六)
作者:明神特烦恼公众号:明神特烦恼当节点接收到其他节点发送的提案信息 或者 接收到其他节点同步过来的区块,需要对区块进行验证,确保区块的有效性。待验证区块的数据结构:type Block struct { // header of the block Header *BlockHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"` // execution sequence of intra bl原创 2021-06-15 13:35:48 · 860 阅读 · 0 评论 -
长安链源码学习--提案(Proposer)(五)
作者:明神特烦恼公众号:明神特烦恼提案一般是共识流程中第一步,后面步骤为多阶段的投票,最终达到一致。这里分析提案将独立于共识,分析如何生成待共识的消息。提案的高度信息、提案人确认等由其他共识模块传入,这里不做分析。带着问题读代码:1)提案的触发点有哪些?2)从交易池获取的交易集合,作为待提案的消息,还要经过哪些检查?3)提案的最终数据结构是什么?4)生成的提案消息的生命周期是如何管理的?5)交易的读写集是如何生成的?第一个问题:提案的触发点有哪些?触发点入口比较收敛,在下面的函数中,原创 2021-06-14 17:34:05 · 1331 阅读 · 3 评论 -
长安链源码学习-- 交易池(四)
上一节已经对交易池的执行逻辑、数据结构等进行分析,本节将对txQueue和commonBatchPool进行分析。1. txQueue txQueue的数据结构为无锁并发队列,在文件annular_lockfree_queue.go中,看名字也可以看出其为循环无锁队列。实现思路如下:1)定义存储数组,以及写入游标、读取游标,假设capacity = 6,读取游标readerIdx、写入游标writerIdx。readerIdx、writerIdx会无限增加,每一个存储单元由val、rIdx.原创 2021-06-13 08:31:51 · 362 阅读 · 1 评论 -
长安链源码学习-- 交易池(三)
作者:明神特烦恼公众号:明神特烦恼交易池,一般称为mempool、txpool,用于缓存交易信息、为共识模块提供交易集输入。带着问题读代码:1)传入的交易请求结构是什么,交易池是否会补充参数?2)交易入池前检查有哪些?3)存储大量交易的数据结构是什么,是map 还是 链表 ?4)交易池支持的索引是什么,是否支持根据txid检索交易信息?还有哪些检索条件?5)提供给共识模块的交易集合如何选择?6)何时增加交易、清除交易?(这里分析batch类型,不分析single)第一个问题:传入的原创 2021-06-12 00:56:46 · 1552 阅读 · 6 评论 -
长安链--智能合约的开发、编译、安装、调用、查询(二)
作者:明神特烦恼智能合约是区块链与业务关联度最大的部分,合约的友好性、安全性、执行效率也是优秀的智能合约引擎的重要指标,长安链的支持多种语言的智能合约,包括go、rust、solidity、c++等。本节使用go语言开发智能合约,使用tinygo进行合约编译、使用go sdk 安装、调用、查询智能合约。官方参考文档: https://docs.chainmaker.org.cn/dev/%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6.html1.开发智能合约1)合约模板原创 2021-06-11 15:27:30 · 4971 阅读 · 3 评论 -
初识长安链--集群部署及测试(一)
作者:明神特烦恼长安链介绍: 长安链·ChainMaker是新一代区块链开源底层软件平台,包含区块链核心框架、丰富的组件库和工具集,致力于为用户高效、精准地解决差异化区块链实现需求,构建高性能、高可信、高安全的新型数字基础设施。 “长安链·ChainMaker”具备自主可控、灵活装配、软硬一体、开源开放的突出特点,由北京微芯研究院、清华大学、北京航空航天大学、腾讯和百度等知名高校、企业共同研发。取名“长安链”,喻意“长治久安、再创辉煌、链接世界”。 长安链作为区块链开源底层软件平台原创 2021-06-11 15:26:21 · 4954 阅读 · 7 评论 -
长安链智能合约的Key长度是否有限制?是否可以是中文?
作者:明神特烦恼公众号:明神特烦恼在技术群里有人问到 长安链智能合约中key长度是否有限制,是否可以是中文?这里我们一起来看一下先看一下智能合约调用PutStateByte过程,这里分析一下官方智能合约代码,其中fileHash是field,fact 为 key。PutStateByte("fact", fileHash, bytes)函数逐级调用最终会调用到sysCall函数code := sysCall(getRequestHeader(ContractMethodPutSta原创 2021-06-23 08:38:09 · 386 阅读 · 2 评论 -
长安链的Gas使用
作者:明神特烦恼公众号:明神特烦恼Gas在以太坊中表示执行智能合约所收取的费用。在长安链设计过程中,也借鉴Gas的概念,本文介绍长安链使用Gas的作用。 长安链的地址中并没有币的概念,也没有账户体系,而且在联盟链环境中,不需要收取执行智能合约的费用。我们通过代码来分析长安链的使用方式(gasm):1)在模拟执行生成读写机的流程,传入现有Gas参数为0(倒数第二个参数) contractResultPayload, txStatusCode := ts.VmManager.RunCon原创 2021-06-19 17:44:28 · 1979 阅读 · 3 评论