hyOpenChain•区块链开放计算平台

——

添加时间: 2016-11-05 17:15:44
推荐度:

介绍

——

打印本文             

hyOpenChain简介

    hyOpenChain基于Chain Core深度定制的区块链计算平台,是一个使用GO语言开发的的开源区块链平台,基于Chain协议,专为金融行业服务。

    hyOpenChain拥有如下特性:

    hyOpenChain的核心ChainCore目前已受到如下领先的金融机构信赖:

    值得注意的是,hyOpenChain基于AGPL协议。

hyOpenChain核心概念

秘钥

       加密私钥是区块链中的主要授权机制。它们控制资产的发行和转让。每个交易都使用指定的发行或转移所需要的私钥进行签名,并且使用较早交易中的公钥或发布的资产类型来检查签名,以便确定新交易的有效性。

       简单的情况下,资产或账户将定义发行或转移所需的单个秘钥。但是可以通过定义多个秘钥来实现不同级别的安全性以及不同使用模式。例如可以使用两个签名秘钥来定义高价值资产,需要两个单独的各方来签署交易发行。联合账户也可以用两个签名秘钥来定义,从任意一方只需要一个签名秘钥来签署资产转移。所需要签名的阈值数成为法定数。

       生产环境中,私钥在HSM(硬件安全模块)中生成,并且永远不会离开它。它们相应的公钥被导出以应用于hyOpenChain中。为了在区块链里发行或转移资产单位,在hyOpenChain中创建的交易会发送给HSM进行签名。HSM对交易进行签名,而不会泄露私钥。一旦签名后,交易可以成功提交到区块链。

       开发环境中,hyOpenChain提供了方便的HSM模拟。Mock HSM API与hyOpenChain 企业版中的HSM API相同,提供了从开发到生产的无缝过渡,重要的是,Mock HSM不提供真正的HSM安全性。

资产

       资产是可以在区块链中发行的值。所有资产的给定单位都是可以互换的。

       资产的单位可以在各方之间直接交易,无需发行人的参与。

       每个资产都有一个全局唯一ID,这个ID来自于发行程序。发行程序通常定义一组可能的签名秘钥和签名的阈值,在发布新资产单元的时候,这些签名必须提供。在资产创建后,hyOpenChain会自动创建发行程序。发行人可以按照自己想要的次数发出任意数量的单位。定制发行程序可以对什么时候,是否发行已经由谁发行新单位做进一步的限制。

       每个资产都可以添加资产定义,资产定义是可选的键值对数据。资产定义会被提交到区块链中,区块链的参与者都可以查看资产定义。另外,资产可以添加本地标签,本地标签是私有的键值对数据,可以方便查询操作。有关详细信息,查阅全局数据VS本地数据

账户

    账户是hyOpenChain中的一个对象,通过创建和跟踪控制程序来跟踪区块链上的资产所有权。

    控制程序出现在每个交易的每个输出中,定义了必须满足花费输出的一组条件,通常,花费交易由一个或多个特定的秘钥进行签名。

    当创建账户的时候,你会提供一个或多个“根”秘钥和一个法定数量。您对账户的每次单独存款(即每个交易输出将资产转移给您)都会使用通过您的账户生成的新控制程序。每个控制程序是唯一的,使用账户的根秘钥求导出新的子秘钥。

    账户余额是使用你的控制程序,未花费交易输出集合的总和。当你发起交易时,你的账户会使用你的未花费输出作为新交易的输入。

    区块链上不存在账户对象,账户对象是hyOpenChain的本地数据。区块链上只能看到通过账户创建的控制程序。

交易基础

       区块链由一组不可变的加密交易链接组成。每个交易包含一个或多个输入和输出。

       输入可以发行资产的新单位,也可以通过将较早交易的输出作为资产转移的来源转移现有单位。

       输出从输入获取资源,并定义如何分配。单个输出指示资产数量以及指定该金额将来可以花费的控制程序。或者,输出可以退出资产的单位,从流通中去除这些单位。

       交易可以有多个不同类型的资产,不同来源,不同目的地的输入和输出组成。交易中所有的操作(发行,花费,控制,收回资产)作为单个原子操作发生交集,永远不会发生只有部分操作应用到交易上。

资产平衡

       在一个交易内部,输入资产的总数必须等于输出资产的总数。为了创建新资产单位,我们在输入中发出并且用一个或多个输出控制它们。为了转移资产单位,我们将它们用在一个输入中,并用一个或多个输出控制它们。为了收回资产单位,我们将其用于输入,并将其在输出中收回。

       单个交易中任何输入输出的组合都可以使用,只要输入和输出相抵。

消费整个未花费支出

     当使用之前交易的输出作为输出时,必须消费该输出中的所有数量。如果你不想将全部数量转移到接收人,则必须更改会您的账户。这类似于现金,如果你有一张20美金的钞票,想花10美金,那么你会改变手中的钞票(找零)。

     因此,花费单个输入通常需要两个输出,一个给接收人,一个输出给资产的出资账户。通常情况下,hyOpenChain将为您自动管理和更改输出,因此你不需要在程序代码中担心这一点。

合并未花费输出

       某些付款可能需要比你所控制的任何未花费的输出更多的资产单位。当从账户支出时,只要账户拥有足够的资产单位,hyOpenChain会自动选择花费的输出来满足你的支付。

创建交易

       创建交易由如下几个步骤组成:

  1. 构建交易:定义交易应该做的事情,可以是发行资产的的新单位,或者在账户持有资产中花费资产,或者使用账户控制资产,等等

  2. 签名交易:使用私钥授权资产花费或者发行资产的新单位

  3. 提交交易:提交一个完整的,已经签名过的交易到区块链,并将其在网络上广播。

构建交易

    hyOpenChain API不是强制直接操作输入输出和更改。而是使用高级操作行为来构建交易。

    hyOpenChain 提供7个类型的行为:

Action

描述

发行(Issue)

发行指定资产的新单位

从账户支出(Spend from Account)

花费指定账户的特定资产单位。自动处理具有足够单位的输出,以及创建更改输出。

从账户的未花费输出中支出(Spend an unspent output from an account)

在账户中使用整个指定的的为花费输出,改动必须使用其他Action手动处理。

用账户控制(Control with account)

将指定资产单位接收到指定的账户中

用程序控制(Control with program)

将资产单位接收到指定的的控制程序中。用于向另一个hyOpenChain中的外部团体或账户付款。

收回(Retire)

收回指定资产单位

设置交易的参考数据(Set transaction reference data)

设置交易的的参考数据

参考数据

    你可以给交易添加任意的参考数据,这些数据将会与其他交易数据一起提交到区块链,这些数据是不能修改的。参考数据可以为整个交易指定,也可以为每个Action指定。

    Action级别的元数据将显示在相关的的输入和输出输出中。比如,在一个简单的支付中,支付人和收款人可以各自为他们直接相关的Action设置参考数据。

签名交易

    为了使一个交易被区块链接受,交易的输入必须包含有效的签名。对于发行的输入,签名必须对应在发行程序中的公钥。对于支出的输入,签名必须对应输出花费控制程序命名的公钥。

    交易签名为区块链提供了安全性。强大的加密技术防止每个人(甚至区块网络的运营商)在没有相关私钥的情况下生成有效的交易签名。

    hyOpenChain SDK假设私钥保存在由用户控制的HSM中。SDK包含一个HsmSigner接口,这个接口可以与HSM通信来进行签名。对于开发环境,每个hyOpenChain系统提供了模拟HSM功能,可以生成公钥,私钥对来签名交易。需要注意的是,HSM模拟无法提供真正HSM的安全性。在产品环境中,hyOpenChain并不存私钥并且不对签名进行交易。

提交交易

    一旦交易平衡后(输入等于输出),这个交易就被认为是有效的,并且可以提交给区块链。本地hyOpenChain系统将会把交易转发给区块生成器,区块生成器将会把交易添加到区块链,并广播给网络中别的hyOpenChain系统。

    hyOpenChain API在交易已经添加到区块链并且由本地系统索引之前,或者出现错误时,不会返回响应。这可以是你以线性方式编写程序。一般来说,如果提交并且响应成功,你代码的其余部分可以在保证交易已被提交到区块链的状态下运行。

未花费输出

       区块链中的每个新交易通过消费未花费输出来创建其他新交易,如果输出尚未用作新交易的输入,则认为该输出未用完。区块链上的所有资产单位都存在于未使用的输出集合中。

控制程序

       控制程序是保护区块链上资产单位的机制。当你首次发行资产的单位,你将它们发行到控制程序中。当你花费资产的单位,实际上是从存在的控制程序到一个新控制程序的过程。当你收回资产单位,实际上是从从一个存在的控制程序到一个特定的收回控制程序中,这个特定的收回控制程序永远不能进行消费。

       交易里的每个输出都包含一个控制程序。每个控制程序由一组断言组成,为了花费输出,这组断言必须被满足(比如,使用输出作为新交易的输入)。

查询

       hyOpenChain API中的数据结构为JSON对象。包括本地对象,如账户和秘钥,全局对象,如交易和资产。为了取回数据,你可以使用可选参数的查询。默认情况下,每个查询返回以最近对象的开始时间排序的对象列表。

过滤器

       过滤器用于通过提供参数匹配来过滤数据。

       过滤器由一个或多个术语组成,多个术语之间使用AND或OR连接。每个术语包含属性,操作符和值(查看API文档)。每个术语的目标是指定一个键值对。术语可以在范围内分组,用来查询对象内的子对象的数据。

       比如为了查询指定账号指定资产的交易,你可以创建两个术语,如下:

inputs(account_alias='alice' AND asset_alias='gold')

属性

任何JSON对象的字段可以用来作为过滤器的属性。要使用嵌套在另一个字段中的字段,可以提供该字段从最外面父对象开始的路径,如:

asset_definition.issuer.name

    注意:尽管你可以用JSON对象创建资产定义,标记(Tag),和引用数据,你只能查询包含字母,数字和下划线的字段。

操作符

       过滤器当前只支持 = 操作符,这允许你搜索字符串和数字的等值匹配。其他数据类型,比如布尔类型,还不支持。

       有两种方法使用=运算符,第一种如下:

alias='alice'

       第二种如下:

 alias=$1 OR alias=$2

       当使用第二种方式时,我们还需要提供有序的参数集合,如:

["Bob's account", "Bob's dog's account"]

       hyOpenChain SDK对如上两种方式都提供支持,但是hyOpenChain提供的开发者看板不支持第二种方式。

作用域

    交易对象中包含一个含有输入数组和输出数组的对象。inputs()和outputs()范围过滤器允许指定查询对象的范围。

    比如,下面的查询将会返回Alice向Bob支付黄金的交易:

inputs(account_alias='alice' AND asset_alias='gold') AND outputs(account_alias='bob' AND asset_alias='gold')


其他参数

可以对交易查询添加时间条件,以按照时间来过滤交易。

方法

描述

setStartTime

设置交易时间的最小值

SetEndTime

设置交易时间的最大值

余额查询和未花费输出查询允许通过时间参数来查询在指定时间的资产所有权

方法

描述

setTimestamp

设置要查询余额或未花费输出的时间点

特殊情况:余额查询

    区块链上的任何余额,都是未花费输出的总和。与hyOpenChain的其他查询不同,hyOpenChain的余额查询只是返回未花费输出的数量。

Sum By

    余额总和默认由asset_id和asset_alias计算,但也有可能需要更复杂的求和。比如,你过您有交易对手的IOU网络,您可能希望计算来自代表相同基本货币的不同交易对手的所有IOU的账户余额。

多方交易

    hyOpenChain的多方交易具有如下优点:

实时处理

       你可以使用交易反馈来处理到达区块链上的交易。这对于实时程序很有帮助(如通知实时程序更新界面)。交易反馈可以高效工作,而不需要在程序中轮询或保持状态.

批处理操作

       批处理操作是hyOpenChain API的高级特性,这个特性允许你绑定多个类似的操作到一个API调用中。这不仅减少了网络开销,还允许hyOpenChain并行的处理请求中的操作。

       支持批处理的操作有:

全局数据,本地数据

    hyOpenChain中有两种类型的数据,全局数据和本地数据。

    全局数据被提交到区块链并且所有网络节点共享。

    本地数据对于特定的hyOpenChain是私有的。

    只有交易和资产是全局数据,其他的对象都是本地数据。

    每个hyOpenChain使用相关的本地数据(如果有)对全局交易额资产对象进行标注。

    有关声明字段的详情,请参阅API 对象

用户提供的全局数据

       交易构建器和资产构建器都包含两个方法来提供用户提供的数据,这部分数据会提交到区块链上:

资产定义

      资产定义是当您首次发布单位时写入区块链的资产的数据。资产定义可以包括您希望区块链中的参与者能够查看的任何详细信息,比如:

{    "type": "security",    "sub-type": "corporate-bond",    "entity": "Acme Inc.",    "maturity": "2016-09-01T18:24:47+00:00"}

       hyOpenChain并不指定资产定义的语义。而是由应用程序来确定它应该包含什么数据。

交易参考数据

       交易参考数据在交易写入区块链时包含在交易中。这对任何交易相关的任何类型的外部数据都很有用,比如:

{    "external_reference": "123456"}

       交易参考数据可以包括在交易的顶层或在构建交易时的单独动作中。

用户提供的本地数据

       账户构建器和资产构建器都包含两个方法来提供用户提供的数据,这部分数据被私有的保存在hyOpenChain中。

账户和资产别名

       别名是由用户提供的唯一标识符。它们补充了hyOpenChain生成的标识符,单这不意味着是人们可读的。尽可能使用别名来让hyOpenChain API中的操作更加方便。

账号标签(Tag)

       账号标签是本地数据,可提供方便的存储并支持复杂查询,如:

{    "type": "checking",    "first_name": "Alice",    "last_name": "Jones",    "user_id": "123456",    "status": "enabled"}

资产标签

       资产标签是对资产定义的本地补充,可用于查询区块链。这对于您不希望在区块链上发布的信息非常有用。资产标签还允许您添加关于没有创建资产的额外数据。如:

{    "internal_rating": "B"}

区块链参与者

    区块链参与者主要有资产发行人,账户管理员,区块链观察员三个角色。

资产发行人

       资产发行人在区块链上定义和发行数字资产。所有资产均为发行人对某种类型价值或权利的担保,从政府货币,到公司债券,到忠诚度积分,到IOU,到内部存款。

账户管理员

       账户管理员控制区块链上的资产单位。账户管理员是数字资产密码的保管人,可以使个人,公司,金融机构或政府。

区块链观察员

    区块链观察员,如审计员,监管机构,分析师等,不发行或控制资产。他们只接收区块和查看区块的数据。

区块链网络基础功能

连接到区块链

       当初始化hyOpenChain的时候,参与者可以通过提供如下信息连接到已有的区块链中:

  1. 区块生成器URL

  2. 网络token

  3. 区块链ID

       然后hyOpenChain将会从区块生成器上下载区块链数据。一旦hyOpenChain与网络同步后,它们将会接收新区快。

接收区块

       区块链中的每个参与者通过以下步骤独立地验证从区块生成器接收的区块:

  1. 验证区块是否由法定数量的区块签名者进行签名(在上一个区块的共识程序中所定义)

  2. 验证区块的每个交易,确保每个输入均已正确签署,且不会重复支出资产单位。

提交交易

       当交易提交到hyOpenChain的API上时,它将自动中继到区块生成器,已包含在下一个区块中。直到在交易出现在区块中或者发生错误之前,API不会响应。因此一旦从API接到成功的响应,就保证交易已被包含在有效的区块中,并且在区块链上是不可变的。


上一篇hyTrustFood•智能食品成分检测(TellSpec)
下一篇hyDataPlus•大数据可视化分析工具

评论

——


产品

——

创新改变世界,服务创造价值!翰博汇的每一步成功皆缘于为客户提供最高品质的服务。我们为毫不妥协的产品和服务品质感到骄傲,我们非常荣幸能与客户和合作伙伴共同成长。

更多

网站首页 关于 联系 新闻 产品 解决方案 服务
翰博汇

翰博汇凭借深厚的技术实力和整合的生态资源,提供信息技术服务、咨询与解决方案,云计算、大数据、物联网服务和产品,为各领域的客户创造价值。   京ICP备13003308号   京公网安备11010502024066

  • 010-84960246
  • info@hanboway.com
  • 周一 ~ 周五: 9:00 ~ 17:00
  • 北京朝阳红军营东路18号52号楼