- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经按照以下步骤在本地成功创建了一个 Hyperledger Fabric v1.0 网络 Building Your First Network并使用 fabric-sdk-java 从我的 Java 应用程序与该网络通信.
在这里,它使用cryptogen 工具创建了证书,并且能够通过参与同一 channel 的每个对等方调用/查询链码。
我的实现是这样的:
我有四个组织 Org1、Org2、Org3 和 Org4,每个组织都有一个对等体。当 Org1 使用链码 C1 创建数量为 100 的 Assets A1 时,它必须像
Org2.peer0 A1: with quantity 40
Org3.peer0 A1: with quantity 30
Org4.peer0 A1: with quatity 20
And remaining 10 only will be available for Org1.peer0
所有这些同行都加入了同一个 channel channel1。我的要求是
If Org1 try to query the data for Org2 : error
If Org1 try to query its own data: return the Asset with the corresponding quantity.
目前它允许查询 channel 中所有节点的所有数据。为了使其对其他组织隐藏一个组织的 Assets ,最好的方法是什么?
最佳答案
我认为您混淆的根源是您将应用程序逻辑与通常在链代码中实现的业务契约(Contract)逻辑混合在一起。
假设你想在 4 个不同的参与方之间建立 Fabric 网络,你需要定义一个规则来定义你将如何在这些参与者之间拆分/分配 Assets 。现在,让我们把同行放在一边。在您的链代码中,您对 Assets 的概念和可能的用户概念进行编码以避免混淆,让我们称他们为人。所以你有 4 个人:Alice、Bob、Charlie 和 John,业务规则规定一旦 Alice 提交 Assets ,它必须分别根据 40%、30%、20% 和 10% 进行分配。
接下来,继续假设 Alice 在 Org1 工作,Bob 在 Org2,Charlie 在 Org3 和 John 在 Org4。现在你可以实现一个链码,它将根据提交交易的人应用业务规则。此外,您可以根据提交者身份实现 ACL,从而防止 Bob 查询比方说 John 的余额。
合理的问题是为什么我需要 4 个节点来实现如此简单的逻辑。由于您只能有一个部署了链码的对等节点,为所有 4 个组织配置的 channel ,您所需要的只是发送交易提案以调用链码。
这种方法的警告非常明显,您需要决定哪个组织将托管和运行该对等节点和链代码,因此由于所有 4 个组织并不真正相互信任,他们希望托管自己的对等节点并调用链代码反对他们自己的同龄人。为了防止每个组织互相欺骗并减少对抗性/非确定性行为的影响,他们将就背书政策达成一致,这实际上将确保其他组织的同行在模拟期间也能收到与您相同的结果。
现在回到你的问题,节点用于模拟当前状态的交易并在结果上签名,将结果发送回客户端,客户端根据策略聚合背书,并将结果提交给排序服务,排序服务切割 block 并将它们传递给peer 将验证区 block 中交易的正确性,并最终将它们提交到账本更新状态。
因此,您的链代码应该对客户/用户/个人的概念进行编码,您将在其中分配 Assets ,这些用户可以映射回客户端应用程序(真实世界的用户),这些应用程序可能注册到不同的组织,因此具有不同的证书由适当的组织 CA 签署。最后,您将能够利用链代码的 GetCreator
API 了解哪个客户端调用了链代码,并根据您定义的业务逻辑应用业务逻辑和访问控制。
很抱歉让我的回答太长,但总结一下。您的应用程序/服务将基于两层:第一层是应用程序层——映射到 org 的用户,第二层是持有分类账和部署的链代码的对等层——模拟和执行事务。因此,您将有 4 个节点和 4 个客户端,它们将向节点提交交易,您的逻辑将基于客户端身份而不是节点。
希望我的解释对你有意义;)
关于blockchain - 在 Hyperledger Fabric V1.0 中实现同一 channel 内节点之间的 channel 间安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46352182/
我有一个 k*n矩阵 X 和 k*k矩阵A。对于X的每一列,我想计算标量 X[:, i].T.dot(A).dot(X[:, i]) (或者,数学上, Xi' * A * Xi )。 目前,我有一个
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我是 VueJS 的新手。我已经使用 vuetify/webpack-ssr 模板创建了一个项目,现在我想创建一个登录页面,但是没有显示表单,控制台给了我以下信息: [Vue warn]: Unkno
我尝试将 value 插入到 C++ vector v 之前的第 i 元素(或元素 (i-1) 之后) )。代码很简单 v.insert(v.begin() + i, value); 我确信当 i 介
我需要显示使用合并排序算法排序的 vector 。然而,当我使用 v.begin() 时,我的 friend 使用 v.data() 来传递 vector 。他的代码运行良好,而我的却不行。请解释。
这是我的命令(url1、url2、url3、url4 是占位符): ffmpeg -i url1 -i url2 -i url3 -i url4 -filter_complex “[1:v:0] [1
我以前用过Vue,我知道怎么用v-for渲染元素序列,v-if或v-show有条件地显示元素,并且 v-model例如,控制段落的内容。 但现在我需要对 DOM 进行更精细的控制: 我有一个range
我正在学习所有权和借用。 borrow1 和borrow2 的区别在于在borrow2 打印时使用了&: fn borrow1(v: &Vec) { println!("{}", &v[10]
我找不到一种方法来选择不同的选项来渲染 v-for 中的文本。是否有可能或者我是否需要以不同的方式构建逻辑来执行类似于下面的代码的操作? // i
Iterable 的三个直接子类型是 Map , Seq , 和 Set .除了性能问题之外,似乎还有一个 Seq是从整数到值的映射,以及 Set是从值到 bool 值的映射(如果值在集合中,则为 t
我想应用一个计算方法,如果键存在则增加值,否则将 1。有 Map map = new HashMap<>(); 我不明白为什么 for (int i = 0; i v != null ? v++ :
标准(IEEE 754/C)是否保证以下代码断言永远不会失败? int main() { for ( /* all possible float / double values */ )
代码由Vue语言编写,使用Element-ui框架, 如果一个对象包含某些内容,则会显示该内容,如果不包含则禁用菜单按钮。 输出应该是这样的: a、b(禁用)、c、d、e 但我的是这样的: a、a(禁
如果我这样做: {{ morevalue }} {{ value }} v-else 中的跨度也会在第二个 V-FOR 上循环,即使它上面没有任何 v-for,为什么? 这是
如果我这样做: {{ morevalue }} {{ value }} v-else 中的跨度也会在第二个 V-FOR 上循环,即使它上面没有任何 v-for,为什么? 这是
我将 Vue.js 与 Vuetify 一起使用,我正在尝试使用 v-data-table 从后端加载菜单列表并使用 对其设置一些权限v-switches 但我在尝试 v-model 数组时遇到问题:
我在 Java 的流式操作中努力维护我想要的数据结构,这很可能是由于缺乏正确的理解和实践。 public class Main { public static void main(String
我正在尝试为匹配中的每个匹配呈现一些 HTML,但是,我不太确定 实际上是正确的。 更具体地说,我不确定我是否可以使用 v-bind:match='match'在与循环相同的元素上 v-for='ma
所以我想知道为什么这个 v-if 和 v-else 语句不起作用,为什么我要以不同的方式解决它。 代码如下 Required: Select a Workflow {{ isChain ?
我有一个 VueJS 组件 ,我在同一个模板中使用了两次来显示两组不同的数据。每个都显示在自己的 使用 v-if 切换的容器在导航选项卡上。 似乎这些组件被实例化为同一个实例。我调用 console
我是一名优秀的程序员,十分优秀!