-
Java智能合约部署及调用
Java智能合约部署及调用 之前学习的Fabric智能合约及SDK都是使用Golang语言编写的,但做应用的同事使用的都是Java语言;为了打通这层语言上的隔阂,开始学习使用Java语言编写智能合约及SDK。环境概述 开发环境:Windows 10 家庭版、WSL2 - Ubuntu 20.04 LTS 开发软件:eclipse Java版本:1.8.0_191 依赖管理:maven区块链 这里使用fabric-samples v1.4.4 版本的区块链网络,共识算法为 s...…
-
CouchDB
CouchDB Apache CouchDB 是一个面向文档的数据库管理系统。它提供以 JSON 作为数据格式的 REST 接口来对其进行操作,并可以通过视图来操纵文档的组织和呈现。 CouchDB 是 Apache 基金会的顶级开源项目。介绍 couchDB的字段只有三个:文档ID、文档版本号和内容。内容字段可以看到是一个text类型的文本,里面可以随意定义数据,而不用关注数据类型,但数据必须以json的形式表示并存放。例如一个表述用户的文档可以表示为:[_id:1001, _r...…
-
Docker
Docker简介Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。应用场景 Web 应用的自动化打包和发布 自动化测试和持续集成、发布 在服务型环境中部署和调整数据库或其他的后台应用 从编译...…
-
GO 读写文件
GO 读写文件 之前在学习GO语言基础时,为了能看懂代码,主要是学了下GO语言的语法。在后面接手一个小项目的需求时,发现需要操作文件,才重新开始学,现在来做一个学习总结。OS包操作文件文件打开方式打开文件的标志主要分为以下几种 t1:文件访问模式标志,不能同时使用只能指定其中一种 t2:文件创建标志 t3:已打开文件的状态标志 标志 用途 统一UNIX规范版本 类型 O_RDONLY ...…
-
Fabric Sdk Go集合配置
Fabric-SDK-GO本文主要参考《如何在Fabric SDK Go中添加集合配置?》,博客底部提供的解答实测有效。 在之前学习Fabric链码时,就接触到了私密数据。当时使用私密数据是在节点容器中,实例化链码时指定的集合配置(--collections-config=./私密数据文件)。在sdk-go中也是需要在链码实例化的时候指定集合配置。构建方法以下为构建集合配置的主要方法:func newCollectionConfig(colName, policy string, re...…
-
Fabric-SDK-GO通道实例
Fabric-SDK-GO代码内容本次程序主要是新建一个通道,然后在新建的通道上操作链码。以下为程序代码步骤: 创建sdkClient 通过sdkClient创建上下文 构建资源管理器 创建和更新通道 节点加入通道 创建通道管理器 安装链码 实例化链码 升级链码 调用链码 链码查询注意新建通道需要给它指定通道配置,在fabric-samples/first-network 文件夹下执行命令:../bin/configtxgen -profile TwoOrgsChan...…
-
Fabric-SDK-GO简单实例
Fabric-SDK-GO Fabric-SDK-GO是Hyperledger Fabric官方提供的Go语言开发包,应用程序可以利用Fabric-SDK-GO与fabric网络进行交互并访问链码。简单的来说,就是用来连接和操作Fabric网络。 pkg/fabsdk:主package,主要用来生成fabsdk以及各种其他pkg使用的option context。 pkg/client/channel:主要用来调用、查询链码,或者注册链码事件。 pkg/client/resmgm...…
-
客制化Fabric-samples
概述 本次实例是在原生配置文件上做修改,将原来的两个组织(Org1、Org2)四个节点(peer0.org1.example.com、peer1.org1.example.com、peer0.org2.example.com、peer1.org2.example.com)修改为一个组织(Yunphant)三个节点(peer0.yunphant.com、peer1.yunphant.com、peer2.yunphant.com)。通过对配置文件的修改来深入了解各个配置属性的作用。修改配置...…
-
Go语言基础
基本数据类型序号类型和描述1布尔型布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。2数字类型整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。3字符串类型:字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。4派生类型:包括: (a) 指针类型(Point...…
-
Ubuntu18.04安装区块链环境
安装go先去官网下载go安装包https://studygolang.com/dlwget https://studygolang.com/dl/golang/go1.15.linux-amd64.tar.gz右键解压解压或者在安装包目录执行 tar -zxvf go1.15.linux-amd64.tar.gz将解压文件夹中的go文件夹复制到 /usr/local在该文件夹下执行 sudo chmod -R 0777 go 赋予权限在主目录(即:~/)创建一个文件夹作为工作目录:mkdi...…
-
Fabric链码
Fabric链码 链码(即智能合约)是一段对账本进行操作的程序。⼀般是指由开发⼈员使⽤Go语⾔(也⽀持Java等语⾔)编写的应⽤程序代码,提供分布式账本的状态处理逻辑。链码被部署在Fabric的⽹络节点中,能够独⽴运⾏在具有安全特性的受保护的Docker 容器中,以 gRPC 协议与相应的 peer 节点进⾏通信,以操作(初始化 或管理)分布式账本中的数据。可以根据不同的需求开发出不同的复杂的应⽤。在 Hyperledger Fabric 中,链码⼀般分为: 系统链码(略) ...…
-
Kubernetes
Kubernetes简介Kubernetes(简称k8s)是一个基于容器的分布式架构的系统支撑平台。它具备完备的集群管理能力: 多层次的安全防护和准入机制 多租户应用支撑能力(同时运行多种应用,相互影响小) 透明的服务注册能力和服务发现机制 强大的故障发现和自我修复能力 服务滚动升级和在线调度机制 可扩展的资源自动调度机制 多粒度的资源配额管理能力k8s还具备完善的管理工具,可以在上面进行部署测试、运维监控等各个环节。架构 kubectl:k8s的sdk...…
-
Fabric排序服务
Fabric排序服务 Fabric排序服务的功能是将从应用程序接收到的交易进行排序、分组并生成区块,再发送给记账节点。 逻辑架构 Broadcast:接收客户端发来的请求(交易) Deliver:用于区块同步(排序节点之间、记账几点) 一、Peer使用Deliver获取最新区块 Peer主节点在加入通道后,会随机的向orderer注册区块事件,有新区块写入Orderer账本时,Orderer把区块发送给Peer ...…
-
Fabric交易
Fabric交易交易是指对链代码(即智能合约)的操作,分为1部署交易和调用交易。 部署交易是指创建新的链代码。用程序作为参数,交易成功执行时,链代码就被安装到区块链上了。 调用交易是指运行链代码。可能会修改相应的状态,并返回输出。 交易头:元数据(链码名称,版本)。 交易签名:加密签名,用于客户端防篡改。 交易提案:对程序提供的参数进行编码,负责将参数传递过去。 交易响应:智能合约的输出。世界状态在交易前后的值。 交易流程 前提假设是各节点已经提前颁发好证书,且已正常启...…
-
Fabric基本概念
Fabric基本概念 Fabric是IBM贡献的一个超级账本框架。它是一个利用现有的成熟技术来组合而成的一个区块链技术的实现。是一种允许可插实现各种功能的模块化架构。具有强大的容器技术,来承载各种主流语言来编写的智能合约。Fabric架构 Fabric大致分为三个模块:底层的网络层、权限管理模块、区块链应用模块。通过SDK和CLiI为应用开发者提供服务。 区块链应用模块账本 Hyperledger Fabric有一个账本子系统,包含两个组件:世界状态和交易日志。每一个参与者...…
-
Java中的锁
Java中的锁 Java中有很多锁名词:自旋锁 ,自适应自旋锁,阻塞锁,可重入锁 ,读写锁 ,互斥锁 ,悲观锁 ,乐观锁 ,公平锁,非公平锁 ,偏向锁,线程锁,锁粗化, 锁消除,轻量级锁,重量级锁,独享锁,共享锁,分段锁。乐观锁/悲观锁 乐观锁与悲观锁不是指具体的什么类型的锁,而是指看待并发同步的角度。这里的乐观和悲观都是相对于并发而言的。 悲观锁认为对于同一个数据的并发操作,一定会被其它线程修改,哪怕没有修改,也会认为修改。因此对于同一个数据的并发操作,悲观锁采取加锁的形式。...…
-
RabbitMQ
RabbitMQ简介RabbitMQ特点 RabbitMQ 是一个由Erlang语言开发的基于AMQP标准的开源实现。RabbitMQ最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 保证可靠性(Reliability)。RabbitMQ使用一些机制来保证可靠性,如持久化、传输确认、发布确认等。 具有灵活的路由(Flexible Routing)功能。在消息进入队列之前,是通过Exchange(交换器)来路由消息的,对于典型的路由功能,...…
-
消息队列
消息队列系统间通信技术介绍分布式应用 一般来说,大型应用通常会被拆分成多个子系统,这些子系统可能会部署在多台机器上,也可能只是一台机器的多个进程中,这样的应用就是分布式应用。 如果是一个业务被拆分成多个子业务部署在不同服务器上,那就是分布式应用;如果是同一个业务部署在多台服务器上,那就是集群。 分布式应用的子系统之间并不是完全独立的,他们需要相互通信来共同完成某个功能,这就涉及系统间通信了。系统间通信 目前业界通常有两种方式来实现系统间通信,其中一种是基于远程过程调用的方式...…
-
SpringCloud-Config
分布式配置中心 我们开发项目时,需要有很多的配置项需要写在配置文件中,如:数据库的连接信息等。 这样看似没有问题,但是我们想一想,如果我们的项目已经启动运行,那么数据库服务器的ip地址发生了改变,我们该怎么办? 如果真是这样,我们的应用需要重新修改配置文件,然后重新启动,如果应用数量庞大,那么这个维护成本就太大了! 有没有好的办法解决呢?当然是有的,Spring Cloud Config提供了这样的功能,可以让我们统一管理配置文件,以及实时同步更新,并不需要重新启动应用程序。Spr...…
-
SpringCloud-Zuul
服务网关 Zuul前言通过前面的学习,使用Spring Cloud实现微服务的架构基本成型,大致是这样的: 我们使用Spring Cloud Netflix中的Eureka作为服务注册中心完成服务注册与发现;而服务间通过Feign和Ribbon实现服务的消费以及负载均衡;通过Spring Cloud Config实现了应用多环境的外部化配置以及版本管理。为了使得服务集群更为健壮,使用Hystrix的融断机制来避免在微服务架构中个别服务出现异常时引起的故障蔓延。 ...…