Oracle Cloud Infrastructure 上 Oracle Blockchain Platform 的已知问题(第 2 代)

了解在使用 Oracle Blockchain Platform 时可能遇到的问题以及如何解决这些问题。

支持的超级账本架构版本

Oracle Blockchain Platform 23.3.3 支持 Hyperledger Fabric v2.5.3 。默认情况下,所有新用户都将使用 Hyperledger Fabric v2.5.3

支持的浏览器

有关要用于通过 Oracle Cloud Infrastructure 进行实例预配的受支持浏览器的信息,请参阅登录到控制台

如果 Oracle Blockchain Platform 控制台的行为不符合预期,请检查您是否正在使用受支持浏览器的最新版本。Oracle Blockchain Platform 支持以下浏览器:

  • Mozilla Firefox
  • Google Chrome
  • Safari
  • Microsoft Edge/Internet Explorer

Hyperledger Fabric 版本的互操作性

Oracle Blockchain Platform 不支持使用基于 Hyperledger Fabric v1.4.7 和同一区块链网络中 Hyperledger Fabric v2.x 的实例。

解决方法:不要尝试在同一区块链网络上运行不同主要版本的超级账本架构。

如果先决条件检查失败,则会卸载应用程序构建器 CLI

通过安装或重新安装最新版本升级 Blockchain App Builder 命令行界面 (command-line interface,CLI) 时,如果先决条件检查失败,将卸载现有的 Blockchain App Builder CLI。

解决方法:您可以重新安装早期版本的 Blockchain App Builder CLI,或者更新系统以满足先决条件,然后安装较新版本的 Blockchain App Builder CLI。

当小数 NFT 事务处理使用不正确的小数位数时没有错误

使用区块链应用程序构建器处理使用 ERC-1155 标准的小数 NFT 时,如果事务处理金额使用的小数位数大于规范文件中的最大小数位数,则不会指示错误。而是将实际事务处理金额截断为规范文件中定义的小数位数。此外,即使发送者和接收者的余额被截断为指定的位数,事务处理历史记录中的 transactedAmount 值也会显示未运行的值。

解决方法:在创建事务处理之前验证事务处理金额,以确保事务处理金额使用的小数位数不超过链代码的输入规范文件中指定的小数位数。

Go Chaincode 版本兼容性

对于 Oracle Blockchain Platform 版本 23.3.3,使用的 Go 版本已更新为 1.20。如果您尝试部署或升级与 Go 1.20 不兼容的链代码,该过程可能会失败。在升级或部署以 Go 编写的链代码之前,请确保链代码可以使用 Go 1.20 构建。可以在安装了 Go 1.20 的系统上对链码文件夹的内容使用以下命令来检查错误:
go mod tidy
go mod vendor

当前部署的链代码不受此行为的影响,在升级到 Oracle Blockchain Platform 23.3.3 后将继续按预期工作。

Node.js Chaincode 版本兼容性

对于 Oracle Blockchain Platform 版本 23.3.3,使用的 Node.js 版本已更新为 18.15.0。如果您尝试部署或升级与 Node.js 18.15.0 不兼容的链代码,该过程可能会失败。在升级或部署 Node.js 中编写的链代码之前,请确保链代码可以使用 Node.js 18.15.0 构建。

当前部署的链代码不受此行为的影响,在升级到 Oracle Blockchain Platform 23.3.3 后将继续按预期工作。

在以前的发行版中初始报告的问题:

无法从开发者工具页面运行法定货币令牌或余额转账样本

Oracle Blockchain Platform 22.4.2 中包含了 Fiat Money Token 示例的新版本。更新的链代码的软件包 ID 与以前的版本不同。如果您部署了 Fiat Money Token 示例,则升级到 Oracle Blockchain Platform 22.4.2 后,该示例将不再显示为已部署在控制台的“开发人员工具”页上,并且您将无法从“开发人员工具”页为示例运行任何操作。

余额转账示例的行为相同,该示例已针对 Oracle Blockchain Platform 22.3.2 进行更新以使用原子事务处理功能。

解决方法:在对等节点上再次安装示例链代码,这将使用新的软件包 ID 安装较新版本的链代码。对于部署了示例的每个通道,将链代码升级到新程序包。升级链代码后,“开发人员工具”页上的示例的状态和操作将正常运行。

使用区块链应用程序构建器时执行部署错误

使用区块链应用程序构建器部署 Go 链代码项目时,可能会遇到类似于以下内容的错误:
ERROR RunCommand: spawn modd ENOENT
ERROR RunCommand: Error in Chaincode deployment
[+] Running 3/3
  Container ca.example.com Stopped 0.4s
  Container orderer.example.com Stopped 0.6s
  Container peer0.org1.example.com Stopped 0.6s
ERROR RunCommand: Error in Chaincode deployment, process exit with code 1
解决方法:
macOS
  1. 运行以下命令:
    env GO111MODULE=off go get ‘github.com/cortesi/modd/cmd/modd’
  2. 重试部署。
Microsoft Windows
  1. 使用 go install 运行以下命令:
    go install github.com/cortesi/modd/cmd/modd@latest
  2. 使用 go get 运行以下命令:
    SET GO111MODULE=auto
    go get ‘github.com/cortesi/modd/cmd/modd’
  3. 重试部署。

Blockchain App Builder 生成的 TypeScript 链代码中的初始化失败

如果使用 Blockchain App Builder 版本 22.4.2 或更低版本生成 TypeScript 链代码,则在本地或远程部署或运行链代码时,可能会出现与以下文本类似的错误:
本地环境:
INFO: Error in initalizing chaincode. Error :  failed to initialize chaincode Error: Failed to 
initialize the chaincode Error: endorsement failure during invoke. response: status:500 message:"error 
in simulation: failed to execute transaction 
e22ba18c00ecbd3135cdb509e08667cf6d5d9e79c4217b73492b5bb50836d58d: could not launch chaincode 
testagain:v0: error building chaincode: error building image: failed to get chaincode package for 
external build: could not get legacy chaincode package 'testagain:v0': open 
/var/hyperledger/production/chaincodes/testagain.v0: no such file or directory
远程环境:
INFO: 

============ Started Initializing Chaincode ============

ERROR: {
  "Error": "Chaincode Deployment failed. Error in initializing chaincode: Status Code: 400, 
Error Message: {\"returnCode\":\"Failure\",\"error\":\"failed to invoke chaincode: 
Transaction processing for endorser 
[jasfounderdec5-oabcs1-ams.blockchain.ocp.oraclecloud.com:20010]: Chaincode status Code: 
(500) UNKNOWN. Description: error in simulation: failed to execute transaction 
947bbaf2feccc39cdf53bd7a07cd17f15d682a5a4ee6e3c3e63dec6346b0394e: error sending: chaincode 
stream terminated\",\"result\":null}"
}

解决方法:要解决现有链代码的此行为,请完成以下支持页面中的步骤:

本地和远程 OBP 环境中的 TypeScript 链代码部署失败

为了避免在新的链代码中出现这种行为,请升级到 Blockchain App Builder 22.4.3 或更高版本。您可以从 Oracle Blockchain Platform 控制台的“区块链应用程序构建器”窗格上的开发人员工具选项卡下载区块链应用程序构建器。

使用 XA 库时的网关超时

将 XA Java 库与 Oracle Blockchain Platform 一起使用时,可以将多个区块链事务处理组合成一个由外部事务处理管理器控制的全局事务处理。如果区块链事务处理的完成时间超过网关超时值 60 秒,则事务处理状态在事务处理管理器端和 Oracle Blockchain Platform 端可能会变得不确定。

解决办法:此问题没有解决方法。在这种情况下,您必须手动解决事务处理。

无法在 Microsoft Windows 的调试模式下运行令牌链代码

如果使用 Blockchain App Builder 版本 22.2.1 或更低版本,则无法在 Microsoft Windows 上以调试模式运行令牌链代码。

解决方法:升级到最新版本的区块链应用程序构建器。如果无法升级,请完成以下步骤:

  1. 打开 chaincode/.vscode/task.json 文件进行编辑。
  2. task.json 文件的第六行包括 command 键。从行中删除以下字符串:
    -p '${workspaceFolder}' 
例如,编辑前 task.json 文件中的行:
"command": "ochain debug -p '${workspaceFolder}' \"[{\\\"userId\\\":\\\"admin\\\",\\\"orgId\\\":\\\"Org1MSP\\\"}]\" -v v8",
晚于:
"command": "ochain debug \"[{\\\"userId\\\":\\\"admin\\\",\\\"orgId\\\":\\\"Org1MSP\\\"}]\" -v v8",

平台升级后未更新订购服务设置

将实例从 Hyperledger Fabric v1.4.7 升级到 Hyperledger Fabric v2.2.4 时,将保留现有排序服务设置。换句话说,升级的实例使用 Hyperledger Fabric v1.4.7 实例的现有排序服务设置,而不是新 Hyperledger Fabric v2.2.4 实例的默认设置。下表汇总了排序服务设置值。有关订购服务的更多信息,请参阅管理订购服务

设置 v1.4.7 和升级的 v2.2.4 实例的默认值 新 v2.2.4 实例的默认值
批处理超时(毫秒) 2000 2000
最大消息计数 10 500
绝对消息字节数 98 98
首选消息字节数 512 2
快照时间间隔大小 20 16

平台升级后未更新 Gossip 领导选择属性

将实例从 Hyperledger Fabric v1.4.7 升级到 Hyperledger Fabric v2.2.4 时,不会更新对等节点的八卦引导者选择属性。换句话说,升级的实例使用 Hyperledger Fabric v1.4.7 实例的现有属性,而不是新 Hyperledger Fabric v2.2.4 实例的默认属性。有关对等节点属性的更多信息,请参见 Peer Node Attributes

事件大小限制

从版本 22.2.1 开始,默认情况下,事件的最大有效负载大小限制为 50 KB。将删除大于最大有效负载大小的任何事件。Oracle DevOps 团队可以按请求修改此参数。如果您希望订阅有效负载大于 50 KB 的事件,请在 My Oracle Support 中创建一个服务请求 (Service Request,SR),以请求更大的最大事件大小。有关详细信息,请参阅 REST API 文档中的订阅事件

包含冒号 (:) 的用户 ID 无法用于 REST API 调用

Oracle Blockchain Platform 允许您将包含冒号 (:) 的用户 ID 与 REST 代理注册关联。但是,使用基本验证(用户名和密码)时,该用户 ID 无法在 REST API 调用中使用。

解决方法:确保与 REST 代理注册关联的所有用户的用户 ID 中没有冒号 (:)。

没有为无效身份证明返回 CORS 标头

如果请求中发送的凭证无效、不正确或已过期,则调用 REST 代理事务处理的客户应用程序将不会在响应中收到跨源资源共享 (CORS) 标头( Access-Control-Allow-Origin 标头)。

创建渠道时出现排序程序状态错误

创建通道时,您可能会看到以下错误:
Failed to create the channel with error: aborted
Please check the orderers status.

解决方法:尝试重新创建通道。这是一个间歇性的问题。

在 Microsoft Windows 上的 Visual Studio Code 中调试

在 Microsoft Windows 上,在 Visual Studio Code 中调试链代码项目时,可能会遇到类似于以下内容的错误:
dlv: failed to install dlv(github.com/go-delve/delve/cmd/dlv@latest): Error: Command failed:
C:\Program Files (x86)\Go\bin\go.exe get -x github.com/go-delve/delve/cmd/dlv@latest
# get https://proxy.golang.org/github.com/go-delve/delve/cmd/dlv/@v/list
# get https://proxy.golang.org/github.com/@v/list
# get https://proxy.golang.org/github.com/go-delve/@v/list
# get https://proxy.golang.org/github.com/go-delve/delve/cmd/@v/list
# get https://proxy.golang.org/github.com/go-delve/delve/@v/list
# get https://proxy.golang.org/github.com/@v/list: 410 Gone (0.420s)
# get https://proxy.golang.org/github.com/go-delve/delve/cmd/@v/list: 410 Gone (1.040s)
# get https://proxy.golang.org/github.com/go-delve/@v/list: 410 Gone (1.062s)
# get https://proxy.golang.org/github.com/go-delve/delve/cmd/dlv/@v/list: 410 Gone (1.066s)
# get https://proxy.golang.org/github.com/go-delve/delve/@v/list: 200 OK (1.448s)
go: found github.com/go-delve/delve/cmd/dlv in github.com/go-delve/delve v1.8.3C:\Users\<UserName>\go\pkg\mod\github.com\go-delve\delve@v1.8.3\service\debugger\debugger.go:28:2:found packages native (proc.go) and 
your_operating_system_and_architecture_combination_is_not_supported_by_delve(support_sentinel.go) in C:\Users\Asus\go\pkg\mod\github.com\go-delve\delve@v1.8.3\pkg\proc\native
此错误目前没有解决方法。

多组织环境和区块链应用构建器

在具有多个组织的环境中,您可能需要使用控制台来完成某些操作。

要通过参与者实例在同一渠道上重新部署链代码,请使用控制台部署链代码。

(Hyperledger Fabric v2.2.4) 要升级链代码,请使用控制台并从参与者手动批准链代码。

一次只能缩放一个组件

一次只能缩放一个节点类型。例如,您可以同时创建添加对等节点和修改现有的对等节点设置,但如果您还想增加存储,则必须单独执行此操作。

此外,一次只能缩放一个对等节点或 OSN - 例如,无法在单个操作中添加两个对等节点。

操作系统时钟不正确可能会导致拒绝的请求

如果客户端或 SDK 的本地时钟超过 15 分钟,则来自客户端或 SDK 的请求将被对等节点和排序节点拒绝。确保本地时钟设置正确。

区块链应用程序由于较旧的客户端 SDK 而无法正常工作

如果应用程序使用的是较旧版本的客户端 SDK,则其行为可能会意外。

解决方法:阅读描述客户端 SDK 更新并根据需要修改应用程序的文档。有关详细信息,请参阅 Hyperledger Fabric 文档中的超级账本架构 SDK

网络的 Oracle Blockchain Platform 实例无法管理已撤销的第三方证书

如果 Oracle Blockchain Platform 网络包含具有第三方证书的组织或超级账本架构组织并且其证书被撤消,则撤消的证书不会应用于、不会显示在其中,并且无法从网络的 Oracle Blockchain Platform 实例中撤消。

解决方法:使用本机 Hyperledger Fabric CLI 或 SDK 导入组织的证书撤销列表 (Certificate Revocation List,CRL) 文件。

创始人的渠道列表包含由信息创建的错误,并且“编辑渠道组织”选项不可用

在混合网络中(创建者实例和参与者实例正在运行不同版本的 Oracle Blockchain Platform ),创建者的渠道列表可能会显示参与者创建的渠道的错误 MSP ID。将显示创始人的 MSP ID,而不是参与者的 MSP ID。在导入 CRL、撤消或应用 CRL 或在通道上设置锚点对等点之后,可能会发生这种情况。

渠道的编辑渠道组织选项仅可用于创建者字段中显示的实例。如果显示错误的 MSP ID,则渠道创建者无法更新渠道组织。

解决办法:此问题没有解决方法。

ImplicitMeta Oracle Blockchain Platform 不支持策略

如果使用本机 Hyperledger Fabric CLI 或 SDK 修改通道的配置,则 Oracle Blockchain Platform 不支持您指定的某些配置设置。

  • 本机超级账本架构 CLI 和 SDK 对读者和编写者使用 ImplicitMeta 渠道策略。当渠道使用这些策略时,Oracle Blockchain Platform 控制台无法保证可以成功处理管理操作(例如,编辑组织)。

    解决方法:将读者和写进程策略更新为签名策略,并根据需要定义策略规则。有关详细信息,请参阅超级账本架构文档中的访问控制列表 (ACL)

  • 如果渠道使用 ImplicitMeta 策略类型,并且您在渠道配置中将“组”部分中的 mod_policy 更改为“管理员”,并且渠道中存在多个组织,则无法使用 Oracle Blockchain Platform 管理渠道。例如,您无法向渠道添加新组织,也无法以任何方式更改渠道的 ACL 策略,包括恢复其原始值。

    解决方法:使用本机超级账本架构 CLI 或 SDK 管理渠道。

渠道创建者无法更新渠道的配置

使用本机超级账本架构 CLI 或 SDK 创建渠道时,configtx.yaml 文件中不包括创建者策略。Oracle Blockchain Platform 要求创建者策略允许渠道创建者编辑渠道的配置。

解决方法:手动编辑 configtx.yaml 文件以添加创建者策略。

在 REST API 中不支持在 instantiateChaincode 端点中将 blocktolive 设置为 0

如果您使用的是 REST API 的 instantiateChaincode 端点,并且在 dataCollectionConfig 中将 blocktolive 值设置为 0,则您将收到以下错误: {"respMesg":"invalid argument"}

要防止从专用数据库清除数据,Hyperledger Fabric 要求您将 blocktolive 值设置为 0。但是,Oracle Blockchain Platform REST API 不支持将此配置设置为 0。

解决方法:使用控制台实例化链代码,在实例化链代码对话框的“专用数据收集”部分中,将 blocktolive 字段设置为 0。

对等端未能从其他对等端提取专用数据

如果专用数据收集的 blocktolive 值小于 10 且其 maxPeerCount 值小于对等点总数(不包括背书对等点),对等点可能无法从其他对等点提取专用数据。当使用控制台创建专用数据收集定义或使用本机超级账本架构 CLI 或 SDK 时,将设置此值。请参见 https://jira.hyperledger.org/browse/FAB-11889

解决方法:确认 blocktolive 值已设置为大于或等于 10。或者,确认 maxPeerCount 值设置为不小于对等点总数,不包括背书对等点。如果需要,您可以重新实例化或升级链代码以重置这些值。

渠道创建者组织和渠道策略设置不一致

可以使用控制台创建通道并将组织的 ACL 设置为 ReaderOnly。保存新渠道后,无法从渠道的编辑渠道组织选项更新此 ACL 设置。

但是,可以使用控制台的 Manage Channel Policies 选项将组织添加到写入器策略,该策略将覆盖通道的 ReaderOnly ACL 设置。

解决办法:此问题没有解决方法。

导出和导入的文件不兼容性

无法在控制台和 REST API 之间导出和导入文件(CRL、证书、排序服务设置和对等节点)。

控制台和 REST API 导出的文件仅兼容于使用同一组件进行导入。例如,如果使用控制台导出对等设备,则无法使用 REST API 导入该设备(只能通过控制台导入)。如果使用 REST API 导出对等节点,则无法使用控制台导入该对等节点(只能使用 REST API 导入)。

解决办法:此问题没有解决方法。

链代码名称要求

Oracle Blockchain Platform 链代码名称和版本要求与超级账本架构要求不同。在从控制台或超级账本架构客户机部署链代码时,必须使用 Oracle Blockchain Platform 要求。如果在从超级账本架构客户端部署时未遵循这些要求,则链代码可能在控制台中错误地列出。

解决方法:在部署链代码名称和版本时使用以下规则。

  • 使用 ASCII 字母数字字符、短划线 (-) 和下划线 (_)。
  • 名称只能以 ASCII 字母数字字符开头和结尾。例如,不能使用 _mychaincodemychaincode_ 等名称。
  • 短划线 (-) 和下划线 (_) 必须后跟 ASCII 字母数字字符。例如,不能使用 my--chaincodemy-_chaincode 等名称。
  • 名称和版本均可长达 64 个字符。
  • 链代码版本还可以包含句点 (.) 和加号 (+)。

日期和时间选择器行为

Oracle Blockchain Platform 日期和时间选择器的行为不符合预期。您可以使用日期和时间选择器来筛选日志文件或分类账活动等项。

解决方法:使用以下信息可帮助您使用日期和时间选择器。

  • 如果选择特定时间段(例如,最后一天),然后再次选择该时间段以重新运行查询,则查询不会重新运行。要获取最新信息,请单击“刷新”按钮。
  • 如果您尚未在计算机上设置时区,则在选择自定义选项时,必须在 GMT 中指定开始时间和结束时间。但是,如果在 "Preferences"(首选项)中将 "Timezone Setting"(时区设置)设置为 GMT (在控制台中选择实例名称,然后单击 "Preferences"(首选项),然后单击 "Timezone Setting"(时区设置),控制台上的时区将自动转换为 GMT。

使用链代码手动为 Shim 提供供应商

在 Hyperledger Fabric 中,fabric-ccenv 映像包含 github.com/hyperledger/fabric/core/chaincode/shim (shim) 软件包。这样,您无需包括 shim 即可打包链代码。但是,这可能会导致未来超级账本架构发行版出现问题,而且在使用 shim 中包含的程序包时可能会产生问题。

解决方法:为了避免潜在问题,您应在使用 peer 命令行界面打包和安装链代码、打包或安装链代码之前,手动为 Shim 软件包提供链代码。请参见 https://jira.hyperledger.org/browse/FAB-5177

文档可访问性

有关 Oracle 对可访问性的承诺的信息,请访问 Oracle 可访问性计划的 Web 站点 http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc

获得 Oracle 支持

购买了支持服务的Oracle 客户可通过 My Oracle Support 获得电子支持。有关信息,请访问 http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info;如果您有听力障碍,请访问 http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs