Fabric学习-区块链网络的形成(1)

1、区块链网络

区块链网络是一种技术基础架构,可为应用程序提供分类帐和智能合约(链码)服务

首先,智能合约用于生成交易,随后将交易分配到网络中的每个对等节点,在该对等节点中,它们一成不变地记录在账本副本中。

在大多数情况下,多个组织会作为一个联盟聚集在一起以形成网络,并且它们的权限由 最初配置网络时联盟所同意的一组策略确定。此外,网络政策会随着时间的推移而变化,取决于财团组织的同意。

应用程序的用户可能是使用客户端应用程序或区块链网络管理员的最终用户。

1.1 样本网络

R1,R2,R3和R4这四个组织共同决定并签署协议,他们将建立和利用Hyperledger Fabric网络。R4已被指定为网络发起者–已被授予建立网络初始版本的权力。R4无意在网络上执行业务交易。R1和R2以及R2和R3都需要在整个网络内进行专用通信。组织R1有一个客户端应用程序,可以在通道C1内执行业务交易。组织R2有一个客户端应用程序,可以在通道C1和C2中完成类似的工作。组织R3有一个客户端应用程序,可以在通道C2上执行此操作。对等节点P1维护与C1关联的分类帐L1的副本。对等节点P2维护与C1关联的分类帐L1的副本和与C2关联的分类帐L2的副本。对等节点P3维护与C2关联的分类帐L2的副本。该网络根据网络配置NC4中指定的策略规则进行管理,该网络受组织R1和R4的控制。通道C1根据通道配置CC1中指定的策略规则进行管理;该渠道受组织R1和R2的控制。通道C2根据通道配置CC2中指定的策略规则进行管理;该渠道受组织R2和R3的控制。有一个订购服务O4,它充当N的网络管理点,并使用系统通道。订购服务还支持应用程序通道C1和C2,出于交易目的,将其分为块进行分发。四个组织中的每一个都有一个首选的证书颁发机构。

1.2 Hyperledger Fabric网络建设流程

这个章节以上章节的样本网络为例,描述如何一步步基于Hyperledger Fabric去建立一个完整的区块链网络。

1.2.1建立网络

让我们从创建网络的基础开始:

启动订购者后便形成了网络。在我们的示例网络N中,包括单个节点O4的订购服务是根据网络配置NC4配置的,该网络配置向组织R4提供管理权限。在网络级别,证书颁发机构CA4用于将身份分配给R4组织的管理员和网络节点。

我们可以看到,定义网络N的第一件事是订购服务O4。按照事先约定将订购服务视为网络的初始管理点,O4最初由组织R4中的管理员配置和启动,并托管在R4中。NC4是配置,其包含描述网络管理功能的初始集合的策略。最初,将其设置为仅通过网络授予R4权限。目前R4是网络的唯一成员。

证书颁发机构

其中的CA4是证书颁发机构,它用于向管理员和网络节点颁发证书。CA4是为组织R4颁发证书,一方面证明其合法身份,一般在联盟链或者是私有链中,只允许有网络许可的组织进入。同时还在交易时附上组织的签名,以保证交易确实是由某组织发起的,这就具备抗抵赖性,一般CA4都是签发X509证书。

首先,区块链网络的不同组织使用证书将彼此识别为来自特定组织,每个组织可以使用不同CA签发的证书去标识组织身份。在Hyperledger Fabric中提供了一个内置的CA(称为Fabric-CA),但不同组织可以选择使用自己的CA或者商业CA。

而证书与组织之间存在一个映射,这个映射是通过MSP的结构来实现的。MSP(Membership Service Provider)是成员服务提供者,MSP定义了网络的其他成员如何验证由该组织发布的有效标识生成的签名(例如,与交易相关的签名)。MSP中身份的特定访问权限受策略约束,这些策略在组织加入网络时也已达成共识。

网络配置NC4使用一个命名的MSP来标识由CA4分配的证书的属性,该证书将证书持有者与组织R4相关联。然后,NC4可以在策略中使用此MSP名称,以向R4的参与者授予对网络资源的特定权限。这种策略的一个示例是确定R4中可以将新成员组织添加到网络的管理员。

其次,CA颁发的证书会成为 事务生成和验证过程的核心。具体而言,X.509证书用于客户端应用程序交易建议和智能合约 交易响应中以进行数字签名交易。随后,托管分类账副本的网络节点在接受交易到分类账之前会验证交易签名是否有效。

章节总结:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要连接虚拟机区块链网络,需要进行以下步骤: 1. 安装 Hyperledger Fabric 网络,并确保网络正在运行。 2. 下载并安装 fabric-sdk-java。 3. 创建一个 Java 应用程序,并将 fabric-sdk-java 添加到类路径。 4. 在 Java 应用程序创建一个 Fabric 客户端对象,并指定连接的节点信息。 5. 使用客户端对象创建一个 Fabric 通道对象,并向通道添加一个或多个对等方和一个或多个排序服务。 6. 在通道对象定义和安装链码。 7. 使用客户端对象调用链码函数。 下面是一个简单的示例代码,展示如何连接虚拟机区块链网络。 ```java import org.hyperledger.fabric.sdk.*; import org.hyperledger.fabric.sdk.exception.*; public class FabricClient { private HFClient client; private Channel channel; public FabricClient() throws Exception { client = HFClient.createNewInstance(); // 设置连接信息 String peerUrl = "grpc://localhost:7051"; String ordererUrl = "grpc://localhost:7050"; String pemFile = "/path/to/pem/file"; String userName = "user1"; String orgName = "org1"; // 创建一个 Fabric 用户对象 User user = new FabricUser(userName, orgName, pemFile); // 初始化客户端对象 client.setUserContext(user); client.setCryptoSuite(CryptoSuite.Factory.getCryptoSuite()); // 创建一个 Fabric 通道对象 channel = client.newChannel("mychannel"); // 添加对等方节点 Peer peer = client.newPeer("peer1", peerUrl); channel.addPeer(peer); // 添加排序服务节点 Orderer orderer = client.newOrderer("orderer", ordererUrl); channel.addOrderer(orderer); // 初始化通道对象 channel.initialize(); } public String invokeChaincode(String functionName, String... args) throws Exception { // 创建一个链码调用请求对象 TransactionProposalRequest request = client.newTransactionProposalRequest(); ChaincodeID chaincodeID = ChaincodeID.newBuilder().setName("mychaincode").build(); request.setChaincodeID(chaincodeID); request.setFcn(functionName); request.setArgs(args); // 发送链码调用请求并等待响应 Collection<ProposalResponse> responses = channel.sendTransactionProposal(request); for (ProposalResponse response : responses) { if (response.getStatus() != ChaincodeResponse.Status.SUCCESS) { throw new Exception("Chaincode invoke failed: " + response.getMessage()); } } // 提交链码调用事务 channel.sendTransaction(responses); return "Chaincode invoke succeeded"; } } ``` 在这个示例代码,我们创建了一个名为 FabricClient 的 Java 类,它充当了 Fabric 客户端的角色。在构造函数,我们初始化了客户端对象,并连接了一个名为 mychannel 的 Fabric 通道。然后,我们定义了一个名为 invokeChaincode 的函数,该函数接受一个链码函数名和一个或多个参数,并将其用作链码调用请求。最后,我们向通道提交了链码调用事务。 要使用这个示例代码,您需要将其添加到一个 Java 应用程序,并在应用程序创建一个 FabricClient 对象。然后,您可以使用 FabricClient 对象调用 invokeChaincode 函数来调用链码函数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值