Corda 流的任一侧可以存在于单独的 Cordapp 中吗?

2024-04-22

如果一个节点想要在流的一侧执行自己的特定业务逻辑,如何实现?

例如,如果一家公司想要调用内部公司 api 来验证传入的交易数据,它可以在流程中执行此操作吗?如果是这样,是否需要通用地编写流程,以便所有使用相同 Cordapp(和流程)的公司调用自己的内部 API。也许 api url 存储在本地配置文件中。

或者,另一种选择是让每个公司拥有单独的 Cordapp,其中包含特定于他们的流程,这些流程可以与特定于其他公司的其他 Cordapp 中的流程进行通信。这看起来很快就会变得非常复杂。


当然。我在这方面写了一大堆东西,我可以粘贴在这里!

构建 CorDapps

CorDapps 可以分为共享和私有元素:

共享 CorDapp 元素

通常,CorDapp 的共享元素包括:

  • 组成状态对象或用作在流之间发送数据的有效负载的数据结构和自定义类型
  • 状态和合约定义必须可供所有节点使用,这些节点可能必须验证包含一个或多个 CorDapp 状态对象的交易
  • 抽象流定义用于定义流的通用表示,同时隐藏它的实际实现(可以是私有的)。这是因为 InitiatedBy 流注释需要类路径上相应 InitatingFlow 的 FlowLogic 子类型,因此可以注册流启动器
  • 使用节点服务的共享实用程序函数通常从流中使用并采用 ServiceHub 参数 - 通常这样做比编写另一个流或通过重复相同的方法来扰乱现有流更有意义
  • 在需要简单工作流程的情况下,通常需要共享流程,该工作流程不需要任何自定义,并且将由运行 CorDapp 的所有各方执行

通常建议保持共享 CorDapp JAR 尽可能小,这是因为包含状态和合约定义的 JAR 在网络中传输,交易包含 JAR 中定义的类型的状态。交易的下游验证者可能需要验证包含他们不进行交易的状态的交易,因此他们不需要其类路径上的流。因此,将状态和契约定义(以及任何依赖项)与其他所有内容分开打包是有意义的。

私有 CorDapp 元素

corDapp 的私有元素通常包括:

  • 定制流程实施
  • Corda服务
  • 上述所需的任何类型定义

如上所述,CorDapp 开发人员可以共享其流程的抽象表示并保持实现的私有性。流程框架允许各方实现自己的流程,前提是它们符合通用接口,即,双方InitiatingFlowInitiatedBy流在流中的预期点发送和接收相同的类型。

只要流程做到了这一点,其余的实现就可以定制。例如,自定义、私有实现可能会触及内部系统或使用专有类型,因此,它们不应与 CorDapp 的共享元素打包在一起。

流程版本控制

除了平台的发展之外,在平台之上运行的流程也可以发展。您想要启动其他流的任何流都必须使用@InitiatingFlow注解,其定义为:

annotation class InitiatingFlow(val version: Int = 1)

请注意,可选的 version 属性(默认为 1)用于指定流的版本。目前,该整数值纯粹是为了指导开发人员而存在的,只要发布的流程具有与先前版本不向后兼容的更改,就应该增加该整数值。非向后兼容的更改是更改流接口的更改。

目前,处理流程版本控制的工作留给了 CorDapp 开发人员。不过,未来该平台将执行规定的规则。

一组流的接口是什么?

流接口定义了 InitiatingFlow 和 InitiatedBy 流之间的发送和接收序列以及发送和接收的类型。最好用序列图来说明:

在上图中,InitiatingFlow:

  1. 发送一个 Int
  2. 接收一个字符串
  3. 发送一个字符串
  4. 接收自定义类型

InitiatedBy 流程则执行相反的操作:

  1. 收到一个 Int
  2. 发送一个字符串
  3. 接收一个字符串
  4. 发送自定义类型

提供两个IntiatingFlowInitiatedBy流程符合接口定义的顺序,其余流程可以以任何方式实现,并且可以包括不与其他方共享的专有业务逻辑。事实上,这是编写流程的预期方式。

有关如何实际执行此操作的示例,请查看此处:https://github.com/sollecitom/corda-foreign-exchange-example/blob/master/buyer-api/src/main/kotlin/net/corda/examples/fx/buyer/BuyCurrencyFlowDefinitions.kt https://github.com/sollecitom/corda-foreign-exchange-example/blob/master/buyer-api/src/main/kotlin/net/corda/examples/fx/buyer/BuyCurrencyFlowDefinitions.kt

这是由一位 Corda 开发人员编写的,在上面的文件中,有一个抽象流定义,其中有一个只有买方知道的私有实现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Corda 流的任一侧可以存在于单独的 Cordapp 中吗? 的相关文章

随机推荐

  • 设置 Let's encrypt with Go - 握手错误

    我正在尝试设置让我们在用 Go 编写的负载均衡器上进行加密 我尝试了自动和手动设置 但总是出错 该域正确指向我们的服务器 Digital Ocean 我什至可以从浏览器打开该网站而不会出现错误 而且 ssl 检查报告该域上没有错误 事实是
  • CSS 动画面临的问题

    我正在尝试创建一个几秒钟后会淡入视图的文本 但我遇到了问题 淡入视图工作正常 但文本在显示后几乎立即消失 其次 我需要这个动画以延迟的方式工作 但是当我设置延迟时 它似乎没有任何区别 早些时候 延迟工作得很好 为什么动画显示后不久就消失了
  • 使用 Spring Security 和 CAS 单点注销

    使用纯 Spring Java 配置 我在让 Spring 和 CAS 执行单点登录时遇到问题 我使用以下配置进行单点登录 我使用一个简单的 JSP 页面对 url 进行表单 POSThttps nginx shane com app lo
  • 线程 1:信号 SIGABRT libc++abi.dylib:以 NSException 类型的未捕获异常终止(lldb)

    我本周开始使用 swift 编程 并尝试在我的应用程序中制作一个简单的导航栏 这不是我第一次遇到这个错误 并且不知道可能缺少什么 如果我没记错的话 我正确地连接了从用户界面到代码的所有内容 但输出显示 libc abi dylib term
  • Chrome 开发者工具 - 浏览器大小?

    我正在使用 Chrome 开发者工具并尝试获取浏览器宽度 以 px 为单位 谷歌最近推出了开发者工具的更新 在这些更新之前 缩放开发者工具时 屏幕高度和宽度通常会出现在网站预览的右上角 但现在无法找出屏幕尺寸 示例如下 现在如何通过 Chr
  • 如何在 CentOS 7 上的 PHP 7.2 上安装 zipArchive?

    我正在尝试在具有最新 WordPress 的 nginx Web 服务器上安装 ziparchive 和 domdocument 为了运行 Avada 主题 我需要在本地 CentOS 7 测试服务器上安装这两个主题 我在过去三天里一直在寻
  • 样式表的条件加载

    我有一个与客户合作的网站 每个客户端都可以有自己的主题 当某个客户端的用户登录时 必须加载公司主题 在 application css scss 中 我为每个公司都有这样一行 import theme x css scss import t
  • 如何获取两个任意变更集之间修改的文件列表?

    我唯一的猜测是这样可怕的事情 files where something has been added hg diff r AA r BB grep cut f1 cut d f2 gt tmp ka files where somethi
  • 在ggplot2中绘制两个面之间的线

    如何在两个面之间绘制多条线 我尝试通过在顶部图表的最小值处绘制点来实现此目的 但它们不在两个方面之间 见下图 到目前为止 这是我的代码 t lt seq 1 1000 y1 lt rexp 1000 y2 lt cumsum y1 z lt
  • Robocopy 将文件复制到远程计算机

    我正在尝试编写一个 robocopy 命令将文件从本地计算机复制到任何一台部署服务器 ROBOCOPY MyService bin release remote computer C services myservice MIR 我收到这个
  • 将 Moment 与 Angular 和 TypeScript 结合使用

    我是 TypeScript 的新手 自从我进行任何认真的 JavaScript 开发以来已经有一段时间了 所以我可能会遗漏一些明显的东西 我正在尝试在带有 TypeScript 的 Angular 1 应用程序中使用 Moment 我正在使
  • 为什么抽象方法不能同步?

    我正在读一本来自 CodeRanch 的线程 http www coderanch com t 455033 java programmer SCJP certification abstract synchronized methods
  • 从后面的代码设置文本框的字体

    如何设置a的字体TextBox from a string在后面的代码中 example txtEditor FontFamily Consolas txtEditor FontFamily new FontFamily Consolas
  • Android Listview添加相同的项目

    我正在开发一个 Android 应用程序 并且正在使用 Android ListView 我从网络服务获取数据并将它们填充到数组列表中 它的大小是 37 然后我尝试用 Arraylist 填充列表视图 但它总是得到相同的元素 最后一个 下面
  • 如何使可能挂起的分叉进程超时?

    我正在编写一个 Perl 脚本 它将写入一些输入并将这些输入发送到外部程序 该程序挂起的可能性虽小但非零 我想将其超时 my pid fork if pid gt 0 eval local SIG ALRM sub die TIMEOUT
  • 在任何项目根目录中都找不到入口文件index.ios.js [“/Users/neo/newProjects/F2”]

    实际行为 从头开始启动 React Native 项目时 我没有启动 而是出现红屏和此错误消息 Cannot Find Entry file index ios js in any of the project root Users neo
  • 将ffmpeg安装到虚拟环境中

    我正在尝试安装ffmpeg以便在 OpenAI 上使用它来录制视频 我已经使用它安装了brew install ffmpeg但不知怎的 当我编译我的代码时 我得到了同样的错误 就像我的包无法识别一样virtualenv我工作的地方 Pyth
  • 无法安装 R 包:CMake 错误

    我正在尝试安装factoextra 但我在 CMake 部分遇到了困难 特别是出现如下错误 CMake Error The source directory tmp does not exist 当我尝试安装其依赖项时也是如此 nloptr
  • ruby yaml ypath 和 xpath 一样吗?

    你好 我有一个像这样的 yaml 文件 data date 2004 06 11 description First description date 2008 01 12 description Another descripion 我如
  • Corda 流的任一侧可以存在于单独的 Cordapp 中吗?

    如果一个节点想要在流的一侧执行自己的特定业务逻辑 如何实现 例如 如果一家公司想要调用内部公司 api 来验证传入的交易数据 它可以在流程中执行此操作吗 如果是这样 是否需要通用地编写流程 以便所有使用相同 Cordapp 和流程 的公司调