# 华为云区块链引擎服务 HBS > 轻松搭建、管理区块链应用 ## 产品介绍 - [图解华为云区块链引擎服务](https://support.huaweicloud.com/productdesc-hbs/hbs_productdesc_01008.md): 华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。 - [产品概述](https://support.huaweicloud.com/productdesc-hbs/hbs_productdesc_01001.md): 华为云区块链引擎服务(HuaweiCloud Blockchain Service,简称HBS)是华为自主研发的满足企业级和金融级的可信、协调要求的高性能、高安全的区块链技术服务平台,可以帮助企业和开发人员轻松搭建、管理区块链应用。当前仅“华北-北京四”区域支持华为云区块链引擎服务。 - [产品功能](https://support.huaweicloud.com/productdesc-hbs/hbs_productdesc_01002.md): 华为云区块链引擎服务支持以下功能: - [产品优势](https://support.huaweicloud.com/productdesc-hbs/hbs_productdesc_01003.md): 超强隐私保护利用可信执行环境TEE承担智能合约运行,安全级别高,结合远程证明,防止合约逻辑被恶意篡改,确保交易结果可信。数据保护根密钥在TEE内保存,防止数据被窃取并破解。隐私数据全程可信,满足金融级的可信。利用可信执行环境TEE承担智能合约运行,安全级别高,结合远程证明,防止合约逻辑被恶意篡改,确保交易结果可信。数据保护根密钥在TEE内 - [产品规格差异](https://support.huaweicloud.com/productdesc-hbs/hbs_productdesc_01004.md): 华为云区块链引擎服务提供专业版、企业版供您选择使用,每个版本均有不同的规格支持,详情请查看表1。 - [权限管理](https://support.huaweicloud.com/productdesc-hbs/hbs_productdesc_01005.md): 如果您需要对华为云上购买的HBS资源,给企业中的员工设置不同的访问权限,以达到不同员工之间的权限隔离,您可以使用统一身份认证服务(Identity and Access Management,简称IAM)进行精细的权限管理。该服务提供用户身份认证、权限分配、访问控制等功能,可以帮助您安全的控制华为云资源的访问。通过IAM,您可以在华为云帐 - [计费说明](https://support.huaweicloud.com/productdesc-hbs/hbs_productdesc_01006.md): 华为云区块链引擎服务按照整体打包收费(包括区块链服务费用和资源费用),收费规格请参见价格详情。 - [约束与限制](https://support.huaweicloud.com/productdesc-hbs/hbs_productdesc_01007.md): 华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。 ## 用户指南 - [使用流程](https://support.huaweicloud.com/usermanual-hbs/hbs_usermanual_0001.md): 华为云区块链引擎服务(Huawei Cloud Blockchain Service,简称HBS)提供服务部署、区块链管理、业务链管理等功能。以下为华为云区块链引擎服务使用全景图,希望对您的使用有所引导及帮助。HBS本身不涉及用户敏感信息。使用HBS处理数据的目的、范围、处理方式、时限等请遵从当地适用的法律法规。HBS本身不建议传输和存储 - [权限管理](https://support.huaweicloud.com/usermanual-hbs/hbs_usermanual_0002.md): 如果您需要对您所拥有的HBS进行精细的权限管理,您可以使用统一身份认证服务(Identity and Access Management,简称IAM),通过IAM,您可以:根据企业的业务组织,在您的华为云帐号中,给企业中不同职能部门的员工创建IAM用户,让员工拥有唯一安全凭证,并使用HBS资源。根据企业用户的职能,设置不同的访问权限,以达 - [基于华为云资源部署](https://support.huaweicloud.com/usermanual-hbs/hbs_usermanual_0004.md): 本页面介绍如何基于华为云资源创建华为云区块链引擎服务。如果您使用华为云帐号创建的IAM用户进行操作,IAM用户需要具备足够的权限才能操作并订购华为云区块链引擎服务。具体操作请参见:华为云区块链引擎权限管理。您可以通过先创建用户组并授权再将用户加入到用户组的方式,使用户具有用户组中的权限。完成环境准备工作后,可按照如下步骤购买并部署华为云区 - [服务管理](https://support.huaweicloud.com/usermanual-hbs/hbs_usermanual_0006.md): 提供华为云区块链引擎服务管理功能,可实时查看华为云区块链引擎服务运行状况,并对华为云区块链引擎服务做相应的操作。参数说明参数说明状态华为云区块链引擎服务状态。华为云区块链引擎服务状态包括:正常、不可用、创建中、删除中、升级中、故障、冻结中、已冻结、解冻中、已休眠、唤醒中、休眠中、安装中、操作中。服务类型华为云区块链引擎版本类型版本类型:专 - [合约管理](https://support.huaweicloud.com/usermanual-hbs/hbs_usermanual_0008.md): 为您提供界面化合约管理功能,包括合约安装、更新合约,安装和更新合约时支持对合约进行安全检查。合约安装前需要将开发的合约文件压缩成zip格式以执行安装。基于华为云资源部署的华为云区块链引擎服务:单击服务名称,进入服务概览页面。选择左侧导航栏中的“合约管理”,单击页面右上角的“安装合约”。单击服务名称,进入服务概览页面。选择左侧导航栏中的“合 - [查看区块链浏览器](https://support.huaweicloud.com/usermanual-hbs/hbs_usermanual_0009.md): 提供区块链相关信息的查询功能,包括区块数量、交易数量、区块详细信息、交易详细信息、性能数据及组织交易数量统计等,帮助您了解整个区块链的状态,对区块链基本的维护提供数据支撑。基于华为云资源部署的华为云区块链引擎服务:单击服务名称,进入服务概览页面。选择左侧导航栏中的“区块链浏览器”。单击服务名称,进入服务概览页面。选择左侧导航栏中的“区块链 - [下载配置文件](https://support.huaweicloud.com/usermanual-hbs/hbs_usermanual_0010.md): HBS支持执行合约、查询合约等功能。开发应用之前您需要进行配置文件下载,配置文件中包含用户证书和SDK。使用用户证书进行普通的交易和查询操作。SDK基于该配置文件可以方便地访问区块链网络并完成事务处理,您可以免去手工配置的繁琐流程。请妥善保管下载用户证书中的私钥,建议您对私钥进行加密存储。基于华为云资源部署的华为云区块链引擎服务:在服务卡 - [设置配额](https://support.huaweicloud.com/usermanual-hbs/hbs_usermanual_0011.md): 为防止资源滥用,平台限定了各服务资源的配额,对用户的资源数量和容量做了限制。如您最多可以创建多少台弹性云服务器、多少块云硬盘。如果当前资源配额限制无法满足使用需要,您可以申请扩大配额。登录管理控制台。在页面右上角,选择“资源 > 我的配额”。系统进入“服务配额”页面。配额页面您可以在“服务配额”页面,查看各项资源的总配额及使用情况。如果当 ## 开发指南 - [简介](https://support.huaweicloud.com/devg-hbs/hbs_devg_01.md): 本指导文档主要针对具备Go/Java开发经验的人员进行开发指导,合约与应用程序需客户自行开发,主要包含以下内容:合约开发,包含Go语言、AssemblyScript语言合约。SDK介绍,主要介绍Java、Golang语言SDK。应用程序开发,介绍Java、Golang语言客户端开发流程。 - [概述](https://support.huaweicloud.com/devg-hbs/hbs_devg_03.md): 合约主要用于操作账本上的数据。作为运行在区块链上的、特定条件下自动执行的代码逻辑,合约是用户利用区块链实现业务逻辑的重要途径,基于区块链特点,合约的运行结果是可信的,其结果是无法被伪造和篡改的。 - [合约结构](https://support.huaweicloud.com/devg-hbs/hbs_devg_05.md): go语言合约即一个Go文件,包含包声明、依赖包导入、智能合约的结构体定义和方法定义。创建好合约文件后就可以进行函数开发等操作。合约结构中,仅合约结构体可以更改,package名和方法签名不可更改。合约的结构如下: - [合约相关的API](https://support.huaweicloud.com/devg-hbs/hbs_devg_06.md): contractapi.ContractStub提供如下API接口,可以在合约文件中进行调用。这些API按照功能可以划分为: - [示例Demo](https://support.huaweicloud.com/devg-hbs/hbs_devg_07.md): 合约开发需要使用go mod,因此请确保GO111MODULE为on、镜像源配置。请确保可正常访问华为云镜像网站,环境设置命令如下合约开发和调测可参考合约示例Demo进行,单击链接获取contractDemo。工程目录分为三部分:internal目录提供一些接口以及接口的mock,用于帮助实现合约的接口使用。simplevalue目录提供 - [合约结构](https://support.huaweicloud.com/devg-hbs/hbs_devg_09.md): AssemblyScript语言合约主要包括index.ts和contract.ts两个文件,其中index.ts为开发智能合约文件(contract.ts)依赖的合约SDK,合约涉及的业务相关开发仅在contract.ts文件,智能合约文件contract.ts需要根据实际业务进行开发。合约SDK(index.ts)主要结构如下:智能合 - [合约相关的API](https://support.huaweicloud.com/devg-hbs/hbs_devg_10.md): 合约SDK(index.ts)提供如下API接口,可以在合约文件中进行调用。这些API按照功能可以划分为: - [合约编译](https://support.huaweicloud.com/devg-hbs/hbs_devg_12.md): 下载Node.js软件并安装,安装成功后,执行如下命令查看对应版本(软件对应版本无强制要求)。node -v npm -v设置新目录assembly,在该目录下执行 npm init 命令,其中package name输入为assembly(目录名、package name建议保持一致,具体名称无强制要求,可自行定义)。执行如下命令通过n - [Demo工程目录](https://support.huaweicloud.com/devg-hbs/hbs_devg_13.md): 合约开发和调测可参考合约示例Demo,单击链接获取AssemblyScript语言合约工程Demo。build目录下optimized.wasm为合约编译后对应的wasm字节码文件(最终合约类型文件为optimized.wasm压缩成的*.zip包,合约示例Demo)。assembly/index.ts 为开发智能合约文件(contrac - [概述](https://support.huaweicloud.com/devg-hbs/hbs_devg_15.md): 华为链目前提供Java、Golang两种语言SDK,区块链服务启动时会启动一系列grpc接口,监听客户端发送的消息,与客户端交互完成各种请求。在开发客户端时,如果从底层grpc接口开始,进行各种消息封装、消息发送、返回值解析等工作,不仅会导致开发量过大,并且造成重复劳动。SDK则是将区块链服务提供的各种grpc接口进行封装,同时封装各接口 - [SDK配置](https://support.huaweicloud.com/devg-hbs/hbs_devg_17.md): 1. Java的项目管理工具有maven和gradle两种,本指导主要以maven为例。2. linux环境,Java SDK的编译、运行,需要手动下载并配置openssl(openssl下载链接)解压openssl,拷贝openssl文件夹到目录/usr/local/include/下执行库的导入命令:export LD_LIBRARY - [通用方法](https://support.huaweicloud.com/devg-hbs/hbs_devg_18.md): SdkClient对象包含获取服务节点、获取各种类型的消息构造器及交易ID等方法,基于SDK开发时,必须先构造该对象。基于标准配置文件模板初始化SDK。调用方法public SdkClient(String configPath) throws CryptoException, ConfigException, IOException参数 - [利用合约发送交易](https://support.huaweicloud.com/devg-hbs/hbs_devg_19.md): 接口方法ContractRawMessage.classpublic RawMessage buildInvokeRawMsg(String chainId, String name, String function, String[] args)ContractRawMessage.classpublic RawMessage buil - [利用合约查询数据](https://support.huaweicloud.com/devg-hbs/hbs_devg_20.md): 接口方法ContractRawMessage.classpublic Invocation buildInvocation(String chainId, String name, String function, String[] args)ContractRawMessage.classpublic Invocation buildI - [查询块高](https://support.huaweicloud.com/devg-hbs/hbs_devg_22.md): 接口方法QueryRawMessage.classpublic RawMessage buildLatestChainStateRawMessage(String chainId) throws CryptoExceptionQueryRawMessage.classpublic RawMessage buildLatestChainSt - [查询区块详情](https://support.huaweicloud.com/devg-hbs/hbs_devg_23.md): 接口方法QueryRawMessage.classpublic RawMessage buildBlockRawMessage(String chainId, long blockNum) throws CryptoExceptionQueryRawMessage.classpublic RawMessage buildBlockRawM - [查询交易执行结果](https://support.huaweicloud.com/devg-hbs/hbs_devg_24.md): 接口方法QueryRawMessage.classpublic RawMessage buildTxRawMessage(String chainId, byte[] txHash) throws CryptoExceptionQueryRawMessage.classpublic RawMessage buildTxRawMessage - [利用交易ID查询交易详情](https://support.huaweicloud.com/devg-hbs/hbs_devg_25.md): 接口方法QueryRawMessage.classpublic RawMessage buildTxRawMessage(String chainId, byte[] txHash) throws CryptoExceptionQueryRawMessage.classpublic RawMessage buildTxRawMessage - [SDK配置](https://support.huaweicloud.com/devg-hbs/hbs_devg_27.md): linux环境,Go SDK的编译、运行,需要手动下载并配置openssl(openssl下载链接)解压openssl,拷贝openssl文件夹到目录/usr/local/include/下执行库的导入命令:export LD_LIBRARY_PATH=/usr/local/include/openssl - [通用方法](https://support.huaweicloud.com/devg-hbs/hbs_devg_28.md): GatewayClient对象包含获取服务节点、获取各种类型的消息构造器及交易ID等方法,基于SDK开发时,必须先构造该对象。client.GatewayClientBsClient对象包含富媒体文件上链、下载、操作记录查询等方法,使用区块链富媒体存储相关功能时,必须先构造该对象。bstore.BsClient基于标准配置文件模板初始化G - [利用合约发送交易](https://support.huaweicloud.com/devg-hbs/hbs_devg_29.md): 接口函数func (msg *ContractRawMessage) BuildInvokeMessage(chainID string, name string, function string, args []string) (*common.RawMessage, error)func (msg *ContractRawMessag - [利用合约查询数据](https://support.huaweicloud.com/devg-hbs/hbs_devg_30.md): 接口函数func (msg *ContractRawMessage) BuildInvokeMessage(chainID string, name string, function string, args []string) (*common.RawMessage, error)func (msg *ContractRawMessag - [文件上链](https://support.huaweicloud.com/devg-hbs/hbs_devg_31.md): 接口方法func (bc *BsClient) UploadFile(filePath, fileName string) (*UploadFileResponse, error)参数说明参数类型说明filePathstring待上链文件在本地的路径。当前支持不大于100MB的任意格式文件。fileNamestring文件在链上的名称。返 - [文件下载](https://support.huaweicloud.com/devg-hbs/hbs_devg_32.md): 接口方法func (bc *BsClient) DownloadFile(filePath, fileName string, versionId int) error参数说明参数类型说明filePathstring文件下载到本地的路径。fileNamestring待下载文件在链上的名称。versionIdint待下载文件的版本号。返回值 - [查询区块块高](https://support.huaweicloud.com/devg-hbs/hbs_devg_34.md): 接口方法func (msg *QueryRawMessage) BuildLatestChainStateRawMessage(chainID string) (*common.RawMessage, error)参数说明参数类型说明chainIDstring链名称。返回值类型说明*common.RawMessage查询链状态需发送的消息 - [查询区块详情](https://support.huaweicloud.com/devg-hbs/hbs_devg_35.md): 接口方法func (msg *QueryRawMessage) BuildBlockRawMessage(chainID string, blockNum uint64) (*common.RawMessage, error)参数说明参数类型说明chainIDstring链名称。blockNumuint64区块高度。返回值类型说明*com - [查询交易执行结果](https://support.huaweicloud.com/devg-hbs/hbs_devg_36.md): 接口方法func (msg *QueryRawMessage) BuildTxRawMessage(chainID string, txHash []byte) (*common.RawMessage, error)参数说明参数类型说明chainIDstring链名称。txHash[]byte交易Hash。返回值类型说明*common.R - [利用交易ID查询交易详情](https://support.huaweicloud.com/devg-hbs/hbs_devg_37.md): 接口方法func (msg *QueryRawMessage) BuildTxRawMessage(chainID string, txHash []byte) (*common.RawMessage, error)参数说明参数类型说明chainIDstring链名称。txHash[]byte交易哈希。返回值类型说明*common.Raw - [查询文件历史版本](https://support.huaweicloud.com/devg-hbs/hbs_devg_38.md): 接口方法func (bc *BsClient) GetFileHistory(fileName string) ([]*bstore.FileHistory, error)参数说明参数类型说明fileNamestring查询的链上文件名。返回值类型说明[]*FileHistory文件历史版本信息列表,每条历史版本信息包含版本号、文件哈希值 - [查询文件操作记录](https://support.huaweicloud.com/devg-hbs/hbs_devg_39.md): 接口方法func (bc *BsClient) GetFileOperation(fileName, startTime, endTime string) ([]*bstore.StorageEvent, error)参数说明参数类型说明fileNamestring查询的链上文件名。startTimestring查询记录的起始时间(秒时间 - [Java SDK升级](https://support.huaweicloud.com/devg-hbs/hbs_devg_41.md): 为提高使用体验,推荐将SDK升级到最新版本。升级过程中需要进行修改的地方如下,具体可参考最新的Java应用程序开发的示例Demo进行修改。从2.1.0.2.52升级至2.1.0.6.41修改pom文件修改合约发送、查询方法,详细参考下表。更新内容内容旧版本(2.1.0.2.52)新版本(2.1.0.6.41)SDK参考合约调用方法buil - [Go SDK升级](https://support.huaweicloud.com/devg-hbs/hbs_devg_42.md): 1. 删除原有huaweichainSDK文件,下载新版本的SDK文件解压至原有的SDK文件路径。2. SDK下载参见SDK配置。3. 修改合约发送方法,详细参考下表。 - [概述](https://support.huaweicloud.com/devg-hbs/hbs_devg_44.md): 为了能在应用程序中使用区块链服务,可参考本章节完成应用程序的开发。开发完成后,应用程序可以调用合约将业务数据发送到链上或从链上进行查询,以及查询区块链的块高、查看某个区块的详情和查看某笔交易的详情等。 - [SDK客户端配置](https://support.huaweicloud.com/devg-hbs/hbs_devg_46.md): 客户端配置如下:SDK配置请参考SDK配置。华为链实例创建完成后,下载配置文件,具体请参考下载配置文件。使用解压后的配置文件初始化SDK客户端,初始化方法请参考SDK介绍中的通用方法,配置示例可参考示例Demo。配置文件主要包含证书文件和yaml配置,实例中每个组织对应一个yaml文件,可通过读取不同的yaml生成不同的SDK客户端对象。 - [SDK客户端调用](https://support.huaweicloud.com/devg-hbs/hbs_devg_47.md): SDK客户端配置后,即可调用SDK进行区块链相关的业务逻辑开发。合约调用使用合约的调用方法,具体请参考利用合约发送交易和利用合约查询数据。使用合约的调用方法,具体请参考利用合约发送交易和利用合约查询数据。其他SDK接口调用查询块高,具体请参考查询块高。查询区块详情,具体请参考查询区块详情。查询交易执行结果,具体请参考查询交易执行结果。利用 - [示例Demo](https://support.huaweicloud.com/devg-hbs/hbs_devg_48.md): 本节提供一个基于Java SDK的Demo,帮助开发自己的Java客户端应用程序。可单击链接下载获取Java应用程序Demo,项目结构如下:其中App文件即业务端调用的示例,Contract文件实现了通过合约对业务数据交互。对数据有修改的操作如插入和删除,需要调用其中的send方法。对数据的查询操作如查询某个键的历史,需要调用其中的que - [SDK客户端配置](https://support.huaweicloud.com/devg-hbs/hbs_devg_50.md): 客户端配置如下:SDK配置请参考SDK配置。华为链实例创建完成后,下载配置文件,具体请参考下载配置文件。使用解压后的配置文件初始化SDK客户端,初始化方法请参考SDK介绍中的通用方法,配置示例可参考示例Demo。配置文件主要包含证书文件和yaml配置,实例中每个组织对应一个yaml文件,可通过读取不同的yaml生成不同的SDK客户端对象。 - [SDK客户端调用](https://support.huaweicloud.com/devg-hbs/hbs_devg_51.md): SDK客户端配置后,即可调用SDK进行区块链相关的业务逻辑开发。合约调用使用合约的调用方法,具体请参考利用合约发送交易和利用合约查询数据。使用合约的调用方法,具体请参考利用合约发送交易和利用合约查询数据。其他SDK接口调用利用交易ID查询交易,具体请参考利用交易ID查询交易。查询区块高度,具体请参考查询区块高度。查询区块详情,具体请参考查 - [示例Demo](https://support.huaweicloud.com/devg-hbs/hbs_devg_52.md): 应用程序开发需要使用go mod,因此请确保GO111MODULE为on、镜像源配置。请确保可正常访问华为云镜像网站,环境设置命令如下示例Demo基于Go SDK开发,主要用于帮助开发人员理解并开发Go客户端应用程序,示例Demo下载链接。Demo目录主要分为:main.go文件,为Go语言客户端主程序。huaweichain文件夹,Go