云服务器内容精选

  • SDK接口 表1 ContractStub合约信息&状态数据库访问接口 接口 说明 String funcName() 功能:获取智能合约请求中指定的智能合约函数名称 入参:无 返回值:智能合约函数名称 byte[][] parameters() 功能: 获取请求参数 入参:无 返回值:用户执行智能合约逻辑时传入的多个参数,每个参数以[]byte表示 String chainId() 功能:获取智能合约所在链ID 入参:无 返回值:链ID String contractName() 功能:获取智能合约名称 入参:无 返回值:智能合约名称 byte[] getKv(String key) throws ContractException 功能:获取状态数据库中某个key对应的value; 入参:某个键值对的key信息,只支持string类型,不可为空 返回值:value值,目前只支持[]byte类型;当key不存在时,value为null 抛出异常:当网络出错,消息超时等,抛出异常 void putKv(String key, byte[] value) throws ContractException 功能:写状态数据库操作,此接口只是将key、value形成写集,打包到交易中,只有当交易排序、出块、并校验通过之后,才会将key/value写入到状态数据库中 入参:要写入的键值对,要求key != "",并且value != null 抛出异常:当网络出错,消息超时等,抛出异常 void delKv(String key) throws ContractException 功能:删除状态数据库中的key及其对应的value,此接口只是将待删除的key放入写集,打包到交易中,只有当交易排序、出块、并校验通过之后,才会将key删除 入参:要删除的key,要求key != "" 抛出异常:当网络出错,消息超时等,抛出异常 Iterator getIterator(String startKey, String endKey) throws ContractException 功能:查询状态数据库中,按字典序,以startKey开头,以endKey结尾的所有状态数据,结果以迭代器的形式呈现;注意,查询范围是左闭右开的,[startKey, endKey) 例如:startKey="11",endKey="14",所有key都是整数的话,则查询的结果中,key值包括:"11","12","13",不包括"14" 入参:startKey是待查询状态数据的按字典序的起始key,startKey != "",endKey是待查询的状态数据的按字典序的结束key,endKey!= ""; 返回值:Iterator是查询结果的迭代器,可以通过此迭代器,按顺序读取查询结果 抛出异常:当网络出错,消息超时等,抛出异常 HistoryIterator getKeyHistoryIterator(String key) throws ContractException 功能:查询一个key对应的所有历史的value 例如:一个key的value曾经为1,2,3,当前value为4,则返回的迭代器结果中按顺序包含了1,2,3,4 入参:key是待查询历史value值的key信息,key != "" 返回值:HistoryIterator是按顺序包含了历史value结果的迭代器结构体变量 抛出异常:当网络出错,消息超时等,抛出异常 void saveComIndex(String indexName, String[] attributes, String objectKey) throws ContractException 功能:为objectKey保存索引信息,indexName_attributes_objectKey构成索引信息,注意,此处只是形成索引信息的写集,只有当含有此写集的交易经过排序、出块,并校验通过后,才会写入状态数据库 例如:存储key/value信息,key="zhangsan",value={height=175, sex="male"},如果以sex="male"作为查询条件,查询所有的key/value, 则需要反序列化所有的value,性能损耗较大,因此,为当前key/value建立一个sex相关的索引:indexName="sex",attributes=[]string{"male"},objectKey="zhangsan, 入参:indexName 索引标记,indexName != "",attributes需要当做索引的属性,至少包含一个属性信息,objectKey 待索引的key值,objectKey != "" 抛出异常:当网络出错,消息超时等,抛出异常 Iterator getKvByComIndex(String indexName, String[] attributes) throws ContractException 功能:通过索引信息,查找满足某种查询条件的key/value,key/value以迭代器的形式输出 入参:indexName 索引标记,indexName != "",attributes需要当做索引的属性,至少包含一个属性信息 返回值:满足索引条件的key/value的迭代器变量 抛出异常:当网络出错,消息超时等,抛出异常 void delComIndexOneRow(String indexName, String[] attributes, String objectKey) throws ContractException 功能:删除objectKey的某个索引,indexName_attributes_objectKey构成索引信息,注意,此处只是形成索引信息的写集,只有当含有此写集的交易经过排序、出块,并校验通过后,才会写入状态数据库 入参:indexName 索引标记,indexName != "",attributes需要当做索引的属性,至少包含一个属性信息,objectKey 待索引的key值,objectKey != "" 抛出异常:当网络出错,消息超时等,抛出异常 表2 Iterator迭代器接口 接口 说明 boolean next() throws ContractException 功能:检查迭代器中是否还有下一个key/value 入参:无 返回值:bool值,true代表还有下一个值 抛出异常:当网络出错,消息超时等,抛出异常 String key() throws ContractException 功能:从迭代器中获取key 入参:无 返回值:key值 抛出异常:当网络出错,消息超时等,抛出异常 byte[] value() throws ContractException 功能:从迭代器中获取value 入参:无 返回值:value值类型为字节数组 抛出异常:当网络出错,消息超时等,抛出异常 void close() 功能:使用完迭代器之后,需要关闭迭代器 入参:无 抛出异常:当网络出错,消息超时等,抛出异常 表3 HistoryIterator查询某个key历史value信息的迭代器接口 接口 说明 long blockNum(); 功能:获取当前迭代位置(某笔交易)的 BlockNum 入参:无 int txNum(); 功能:获取当前迭代位置(某笔交易)的 TxNum 入参:无 byte[] txHash(); 功能:获取当前迭代位置((某笔交易))的hash 入参:无 boolean isDeleted(); 功能:被查询的key,当前是否已经在状态数据库中被删除 入参:无 long timestamp(); 功能:返回当前迭代位置(某笔交易)的时间戳 入参:无 父主题: JAVA合约开发
  • 示例2:A向B转账 执行如下命令,A向B转账,金额为10。 ./appdemo transaction -u A -p XXXXXXA -b b22edf18d64f57954640c8f3f6cf67d9401f262daead588ddfe8178xxxx -t 10 -c ./test-sdk-config.yaml -C tongtai -I idchaincode -T transaction -o aa73c757c9026fb623495d7058ca177f6152bcea 其中-b后的参数为接收方的地址。示例中为注册B用户时的返回值,即B用户注册数据的地址信息。 返回值为A账户的地址:2efc4639bc281060ce013dfea33a47b647b6f4a20103a6321c33d67d5xxxx
  • 示例3:查询账户余额 执行如下命令查询A账户的余额,返回值为A账户余额。 ./appdemo querybalance -p XXXXXX -u A -c ./test-sdk-config.yaml -C tongtai -I idchaincode -T transaction -o aa73c757c9026fb623495d7058ca177f6152bcea 执行如下名查询B账户的余额,返回值为B账户余额。 ./appdemo querybalance -p XXXXXX -u B -c ./test-sdk-config.yaml -C tongtai -I idchaincode -T transaction -o aa73c757c9026fb623495d7058ca177f6152bcea
  • 示例1:注册账户 执行如下命令注册B账户,账户金额为100。 ./appdemo register -u B -p XXXXXX -i 100 -c ./test-sdk-config.yaml -C tongtai -I idchaincode -T transaction -o aa73c757c9026fb623495d7058ca177f6152bcea -u:为注册的用户名B、-p:为B用户密码XXXXXX,密码必须包含大写、小写、数字、特殊字符中的至少两种,-c:为sdk配置文件名,-C:为安装链代码的通道名,-I:为安装示例链代码IDChaincode的实际安装链代码名,-T:为安装示例链代码Transaction的实际安装链代码名,-o:为peer节点组织的ID,可在通道管理界面查询。参数下同。 返回值为一串加密地址,示例: b22edf18d64f57954640c8f3f6cf67d9401f262daead588ddfexxxxx 以相同的方法注册A账户,账户金额为200。 ./appdemo register -u A -p XXXXXX -i 200 -c ./test-sdk-config.yaml -C tongtai -I idchaincode -T transaction -o aa73c757c9026fb623495d7058ca177f6152bcea 返回值为一串加密地址,示例: 2efc4639bc281060ce013dfea33a47b647b6f4a20103a6321c33dxxxxxx
  • 示例5:测试同态乘法 执行如下命令测试同态乘法。 ./appdemo homomulti -c ./test-sdk-config.yaml -a 100 -b 5 -C tongtai -T transaction -o aa73c757c9026fb623495d7058ca177f6152bcea 其中-a和-b后的参数为进行同态乘的乘数和被乘数,其中-a后的参数会被加密,-b后的参数是明文。
  • 链代码接口 链代码启动必须通过调用shim包中的start方法。实际开发中, 您需要自行定义一个类,来继承ChaincodeBase。以下为继承时必须重写的方法: public class SimpleChaincodeSimple extends ChaincodeBase { @Override public Response init(ChaincodeStub stub) { } @Override public Response invoke(ChaincodeStub stub) { } } init方法:在链代码实例化或升级时被调用,完成初始化数据的工作。 Invoke方法:更新或查询账本数据状态时被调用, 需要在此方法中实现响应调用或查询的业务逻辑。
  • 链代码结构 Java语言的链代码结构如下: package main // 引入必要的包,系统自动操作,只要在maven或gradle中配置即可 import org.hyperledger.fabric.shim.ChaincodeBase; import org.hyperledger.fabric.shim.ChaincodeStub; public class SimpleChaincodeSimple extends ChaincodeBase { @Override public Response init(ChaincodeStub stub) { // 在该方法中实现链代码初始化或升级时的处理逻辑 // 编写时可灵活使用stub中的API } @Override public Response invoke(ChaincodeStub stub) { // 在该方法中实现链代码运行中被调用或查询时的处理逻辑 // 编写时可灵活使用stub中的API } //主函数,需要调用shim.Start()方法 public static void main(String[] args) { new SimpleChaincode().start(args); } }
  • 下载SDK配置和证书 SDK配置、证书、用户应用程序是组合使用的。SDK配置文件中包含具体的链代码信息、证书路径信息,所以在下载SDK配置时需要指定链代码名称和证书存放路径(即下载的证书在应用程序执行机的最终存放路径)。如果证书路径后期有变更,您需要手动修改SDK配置文件中所有证书相关路径。 目前BCS支持三种证书:管理员证书、用户证书和CA证书。创建通道、加入通道、更新通道、安装链代码、实例化链代码、更新链代码和删除链代码需要使用管理员证书,交易和查询推荐使用用户证书。应用程序开发人员需要到实例管理界面下载对应服务的证书。 管理员证书:组织的管理权限证书和私钥,可使用该身份进行通道和合约的管理。 用户证书:组织的用户权限证书和私钥,可使用该身份进行普通的交易和查询。 CA证书: 组织的根证书,可以使用该CA公私钥签发下一级证书。 共识节点和Peer节点的管理证书是不同的,用户在通道内的管理操作,需要使用Peer节点管理证书,而不是共识节点管理证书。 请妥善保管下载证书中的私钥,建议您对私钥进行加密存储。 登录区块链服务管理控制台。 单击左侧导航栏中的“实例管理”。 在实例卡片中,单击“获取客户端配置”。 勾选需要下载的内容,包括SDK文件、共识节点证书和Peer节点证书。 SDK文件:配置应用SDK端要触发的组织节点,链码和证书存放路径。 表1 SDK文件参数说明 参数名称 说明 链代码名称 根据您的实际情况填写。链代码名称需要和链代码安装、实例化时的一致。 证书存放路径 用户在编译应用程序时,证书的最终存放路径。如果证书路径后期有变更,您需要手动修改SDK配置文件中所有证书相关路径。 通道名称 选择一个通道。 选择成员 选择通道中的节点组织。 共识节点证书:与区块链系统交互时,需要使用共识节点管理证书。请妥善保管对应证书的私钥,建议您进行加密保存。 Peer节点证书:用户在通道内的管理操作,需要使用Peer节点管理证书。请妥善保管对应证书的私钥,建议您进行加密保存。选择指定节点组织和要下载的证书类型。 单击“下载”。将下载的SDK文件解压出yaml文件备用。将下载的证书文件压缩包解压并放置在某应用目录中,使应用程序可访问。
  • 使用CloudIDE在线编辑合约 该功能当前仅“华北-北京四”区域支持。 登录区块链服务管理控制台。 在页面左侧选择“合约仓库”。 在“合约仓库”页签下,单击合约模板卡片上的“使用”。 图2 使用合约模板 此功能需要先开通CloudIDE服务才能使用,如果未开通,界面会跳转至CloudIDE服务开通页面,请根据界面提示开通。 根据页面提示填写项目实例名称、描述,单击“确认”则会创建一个CloudIDE实例并进入加载页面。 在创建实例完第一次启动过程中,页面加载时会下载合约代码至CloudIDE实例中,此过程请勿强行关闭页面,否则会导致创建的实例中没有合约代码。 创建CloudIDE实例成功后,可以对合约代码进行在线编辑、调试。具体用法请参考CloudIDE。 您可以在“合约IDE实例”页签下对已创建的CloudIDE实例进行使用、停止、编辑、删除操作。 图3 合约IDE实例
  • 下载合约模板 登录区块链服务管理控制台。 在页面左侧选择“合约仓库”。 在“合约仓库”页签下,您可以查看各类模板,包括金融、健康医疗、能源、航空等模板。 在合约模板卡片上,单击模板名称,可查看合约模板的详细信息,包括合约模板的版本、支持语言、类型及其接口信息。 图1 查看合约详情 在合约模板卡片上,单击下载合约模板到本地。 您可在区块链管理界面,将下载的模板文件进行链代码的安装和实例化操作,具体请参见链代码管理。
  • 使用引导 区块链服务BCS提供实例部署、区块链管理、通道/业务链管理、成员管理、通知管理等功能。以下为区块链服务使用全景图,希望对您的使用有所引导及帮助。 BCS本身不涉及用户敏感信息。使用BCS处理数据的目的、范围、处理方式、时限等请遵从当地适用的法律法规。BCS本身不建议传输和存储敏感数据,如果传输和存储敏感数据,请自行加密后再传输和存储。 图1 使用引导 注册账号 新用户请先注册完成实名认证,具体请参见账号注册和账实名认证。 权限管理 创建用户并授权使用BCS。 实例部署 Hyperledger Fabric增强版支持在CCE集群部署和边缘集群部署。 实例管理 提供Hyperledger Fabric增强版实例管理功能,可实时查看实例运行状况,并对区块链实例做相应的操作。 通道管理 通道为组织节点提供通信渠道。通过通道管理功能您可以创建通道或为已有通道添加组织节点等。 区块链管理 提供界面化链代码管理功能,包括链代码安装、实例化、更新链代码。 下载SDK配置和证书 开发应用之前需要进行配置文件下载,配置文件中包含用户证书和SDK。 联盟链管理 当您已创建区块链类型为“联盟链”时,您可以通过邀请其他租户加入此联盟链,组建一个多成员参与的联盟链系统。 合约仓库 提供已经实现某些基本功能的智能合约,您可以使用模板提供的基础功能代码,直接使用或二次开发符合自己业务逻辑的智能合约。 关于配额 支持查看服务的配额使用情况和扩大配额。 父主题: Hyperledger Fabric增强版管理
  • 其他操作 表1 其他操作 操作 说明 搜索通道 在通道管理页面右上角的搜索框中输入通道名称,可直接搜索对应的通道。 查看通道列表 在通道管理页面查看当前的通道列表。可查看通道名称、实例名称、查看节点等信息。 查看节点 单击“操作”列的“查看节点”,可按组织查看节点信息,包括组织的MSP标识、节点名称、节点IP端口、节点域名以及节点是否加入通道。 单个组织中的节点退出通道 单击“操作”列的“配置组织节点”,在“加入通道的组织”下方的“组织加入通道的节点数”减少节点数量,单击“确定”,即可退出通道。 图1 配置组织节点 说明: 若只需要节点退出通道,节点数只能减少到1;若是组织退出通道,节点数可以手动设置为0。 组织退出通道 单击“操作”列的“配置组织节点”,在“加入通道的组织”下方的“组织加入通道的节点数”将组织取消加入通道,单击“确定”,即可退出通道。 图2 组织退出通道 说明: 组织退出通道后,若链代码背书策略中有使用已退出的组织进行背书,则需要更新链代码的背书策略,否则将会导致交易失败,详细请参见链代码管理。 删除通道 单击“操作”列的“删除”,单击“确定”,即可删除通道。 说明: 通道内没有组织节点,即可删除通道。
  • 后续操作(可选) 已部署的实例,支持查看创建实例、删除实例、升级实例、添加组织、扩容节点、创建通道、节点加入通道等操作记录。左侧操作状态栏会展示已有操作记录的状态,操作状态类型包括:进行中、升级中、删除中、成功和失败(截图仅供参考,请以实际环境为准)。 图2 操作记录 系统将保留最近三天的操作记录。 登录区块链服务管理控制台,单击左侧导航栏中的“实例管理”。 单击“操作记录”,查看各个资源的操作记录。 您可以按资源名称关键词搜索操作记录,还可以在资源所在行进行“操作详情”及“删除”操作。 部署BCS的集群节点支持增加反亲和标签,在您需要将应用部署到区块链集群中时作区分隔离,以保证系统正常工作。 登录CCE控制台。 在“集群管理”页面,单击集群名称进入集群信息页面。 选择“节点管理”,在“节点”页签,勾选节点,单击“标签与污点管理”。 在弹出的窗口中,在“批量操作”下方单击“新增批量操作”,然后选择“添加/更新”。填写需要增加标签的键为“nodeScope”,值为“userApplication”。 单击“确定”。 标签添加成功后,再次单击“标签与污点管理”,在“节点数据”下方单击“查看”即可显示已经添加的标签。
  • 使用引导 华为云区块链引擎服务(Huawei Cloud Blockchain Service,简称HBS)提供实例部署、区块链管理、业务链管理等功能。以下为华为云区块链引擎服务使用全景图,希望对您的使用有所引导及帮助。 华为云区块链引擎本身不涉及用户敏感信息。使用华为云区块链引擎处理数据的目的、范围、处理方式、时限等请遵从当地适用的法律法规。华为云区块链引擎本身不建议传输和存储敏感数据,如果传输和存储敏感数据,请自行加密后再传输和存储。 图1 使用引导 注册账号 新用户请先注册完成实名认证,具体请参见账号注册和账号实名认证。 权限管理 创建用户并授权使用华为云区块链引擎。 实例部署 购买华为云区块链引擎实例。 实例管理 提供华为云区块链引擎管理功能,可实时查看华为云区块链引擎运行状况,并对华为云区块链引擎做相应的操作。 区块链管理 提供界面化合约管理功能,包括合约安装、更新合约。 下载配置文件 开发应用之前需要进行配置文件下载,配置文件中包含用户证书和SDK。 插件管理(公测) 支持安装插件、卸载插件、查看插件实例的基本信息。 关于配额 支持查看服务的配额使用情况和扩大配额。 父主题: 华为云区块链引擎管理
  • 部署区块链实例 完成环境准备工作后,可按照如下步骤购买并部署区块链实例。“集群”请选择“边缘集群”,并填写需要使用的边缘节点IP。 现网账号欠费会导致实例网盘被释放,已购买的实例不可用。 创建区块链实例和添加组织时,请务必保证弹性IP或私有IP与边缘节点一一对应,否则可能导致节点部署失败。 登录区块链服务管理控制台,进入“实例管理”,单击Hyperledger Fabric增强版的“购买”按钮。 根据界面提示,配置区块链基本信息,参数如表2所示。 表2 基本信息配置 参数 描述 示例 计费模式 区块链实例管理收费模式,支持包年/包月、按需计费。 包年/包月 区域 区块链基础设施所在的区域,建议选择与业务应用系统相同的地域。 使用默认区域 企业项目 请选择已创建的企业项目,将区块链服务BCS添加至企业项目中。 说明: 如果您没有开通企业管理服务,将无法看到企业项目选项。开通方法请参见如何开通企业项目 如果您使用已有CCE集群部署区块链服务BCS,建议您将区块链服务BCS添加至CCE集群的企业项目中,如果区块链服务BCS与部署区块链服务的CCE集群处于不同的企业项目,可能导致使用异常。 default 区块链实例名称 支持中英文字符、数字及中划线,不能以中划线开头,长度为4-24个字符。 说明: 目前区块链实例名称不支持修改,只能删除重新创建。 bcs-wh 版本类型 BCS提供基础版、专业版和企业版供您选择。 专业版 区块链类型 私有链指仅本租户内部使用的区块链实例,联盟链指可邀请其他租户一起组建联盟的区块链实例。 私有链 Hyperledger Fabric增强版内核 区块链实例的版本号。 区块链版本4.x.x对应社区Hyperledger Fabric v2.2。 v2.2 共识策略 区块链网络中节点之间达成共识需要遵从的规则。 支持快速拜占庭容错共识算法(FBFT)、Raft(CFT),各策略分别具有不同的特性及使用场景,请参见产品功能。 说明: raft共识基础版、专业版、企业版默认3个orderer节点。 Raft(CFT) 资源初始密码 登录区块链管理界面时的admin账户的密码、云主机的root密码和CouchDB密码。 高级配置中的区块链管理初始密码、云主机的root密码和CouchDB密码为选填项、如果您填写了就以填写值为准、如果您不填写就以资源初始密码的值为准。 - 资源初始密码确认 再次输入资源初始密码进行确认。 - 购买时长 选择区块链实例的购买时长。 一个月 单击“下一步:资源配置”,进行资源配置,参数如表3所示。 表3 资源配置 参数 描述 示例 集群 用于部署区块链实例。 选择边缘集群,需要先纳管边缘节点并检查边缘节点状态。 边缘集群 节点部署模式 根据实际选择模式: 随机模式:边缘集群纳管的节点名称无需和peer节点组织的名称保持一致。 节点组织绑定模式:边缘集群纳管的节点名称必须和peer节点组织的名称保持一致。 节点组织绑定模式 网络存储 默认“本地存储”。 本地存储 边缘集群实例 可以选择专业版。 专业版 边缘节点IP 输入边缘节点IP地址,请确保输入的IP地址正确(联盟链请务必使用公网IP),否则可能会导致区块链网络异常。 - 单击“下一步:区块链配置”,进行区块链配置,参数如表4所示。 表4 区块链配置 参数 描述 示例 区块链配置 根据实际需求选择“系统默认配置”或“自定义配置”。 自定义配置 区块链管理初始密码 输入登录区块链管理界面的admin账户的密码进行确认。 - 区块链管理确认密码 再次输入登录区块链管理界面的admin账户的密码进行确认。 - 部署方式 当版本类型选择“企业版”时需要设置该参数。 选择“全量部署”,则在购买区块链实例时需将全部Peer节点配置到节点组织中。 选择“部分部署”,则在购买区块链实例时只需将部分Peer节点配置到节点组织中,剩余Peer节点可在购买区块链实例以后任意时刻通过添加组织或添加节点方式部署。 部分部署 peer节点组织 为区块链实例添加peer节点组织。 organization,节点数量为2。 部署节点总数 当版本类型选择“企业版”且部署方式为“部分部署”时,需要设置该参数。最大可设置为企业版Peer节点配额。 说明: 所有Peer节点自购买区块链订单完成之后开始计费。 50 通道配置 通道主要用于实现联盟链中业务的隔离。通道内包含业务的参与方(联盟内的部分或全部组织)作为通道成员。每个通道可视为一条子链,并且对应一套分布式账本。 默认创建名为“channel”的实例通道,并将刚才创建的示例节点组织添加进此通道。 共识节点数量 区块链网络中参与交易共识的节点数量。 当共识策略是Raft(CFT)时,共识节点数量为3。 3 安全机制 保证数据安全的加密算法,支持ECDSA和国密算法。 ECDSA 账本数据存储方式 支持文件数据库(GoLevelDB)和NoSQL(CouchDB)存储方式。 文件数据库(GoLevelDB):使用Fabric原生存储方式,交易历史数据保存在区块链中,状态数据保存在LevelDB中。 NoSQL(CouchDB):使用Fabric原生支持的存储方式CouchDB存储交易数据和状态数据。CouchDB数据库是一个独立的文档集合,每一个文档维护其自己独立的数据和自包含的schema。 文件数据库(GoLevelDB) 区块生成配置 产生的区块配置可支持区块产生时间,区块交易数量和区块容量,其中任何一个条件满足,区块就会产生,可根据交易频率和业务量灵活配置。 否 单击“下一步:确认订单”。 确认配置信息无误后,勾选协议和免责声明,并单击“提交订单”。 请等待数分钟,安装页面提示安装成功,查看实例状态变为“正常”后,表示实例部署完成。 图2 查看实例状态