基于 Oracle Cloud Infrastructure (Gen 2) 的 Oracle Blockchain Platform 的已知问题

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

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

支持的超级账本架构版本

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

支持的浏览器

有关要用于通过 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.7Hyperledger Fabric v2.x 的实例。

解决方法:请勿尝试在同一区块链网络上运行不同主要版本的 Hyperledger Fabric。

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

当您通过安装或重新安装最新版本来升级区块链应用程序构建器命令行界面 (command-line interface,CLI) 时,如果先决条件检查失败,将卸载现有的区块链应用程序构建器 CLI。

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

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

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

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

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

执行链代码版本兼容性

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

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

Node.js 链代码版本兼容性

对于 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 安装较新版本的链代码。对于部署示例的每个通道,将链代码升级到新程序包。升级链代码后,示例在“开发人员工具”页面上的状态和操作将正常运行。

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

使用 Blockchain App Builder 部署 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. 重试部署。

区块链应用程序构建器生成的 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 的调试模式下运行令牌链代码。

解决方法:升级到最新版本的 Blockchain App Builder。如果无法升级,请完成以下步骤:

  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

平台升级后未更新八卦领导者选择属性

将实例从 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 中打开服务请求 (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 更新的文档,并根据需要修改应用程序。有关更多信息,请参见 Hyperledger Fabric 文档中的 Hyperledger Fabric SDK

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

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

解决方法:使用本机超级账本架构 CLI 或 SDK 导入组织的证书吊销列表 (certificate revocation list,CRL) 文件。

创始人的渠道列表包含不正确的“由信息创建”和“编辑渠道组织”选项不可用

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

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

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

ImplicitMeta Oracle Blockchain Platform 不支持策略

如果使用原生超级账本架构 CLI 或 SDK 修改渠道的配置,则 Oracle Blockchain Platform 将不支持您指定的某些配置设置。

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

    解决方法:将读取者和写入者策略更新为签名策略,并根据需要定义策略规则。有关更多信息,请参见超级账本架构文档中的访问控制列表 (Access Control Lists,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"}

为了防止从专用数据库清除数据,超级账本架构要求您将 blocktolive 值设置为 0。但是,Oracle Blockchain Platform REST API 不支持将此配置设置为 0。

解决方法:使用控制台实例化链代码,在 Instantiate Chaincode(实例化链代码)对话框的 "Private Data Collections"(专用数据收集)部分中,将 blocktolive(阻止)字段设置为 0。

对等端无法从其他对等端提取专用数据

如果专用数据收集的 blocktolive 值小于 10 且其 maxPeerCount 值小于对等点总数(不包括背书对等点),则对等点可能会无法从其他对等点提取专用数据。当使用控制台创建专用数据收集定义或使用本机超级账本架构 CLI 或 SDK 时,会设置此值。

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

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

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

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

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

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

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

控制台和 REST API 导出的文件仅与同一组件兼容。例如,如果使用控制台导出对等方,则无法使用 REST API 导入对等方(只能通过控制台导入)。如果您通过 REST API 导出对等端,则无法通过控制台导入(只能通过 REST API 导入)。

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

链代码名称要求

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

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

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

日期和时间选择器行为

Oracle Blockchain Platform 日期和时间选择器无法按预期运行。您可以使用日期和时间选择器来筛选日志文件或分类账活动等项。

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

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

文档可访问性

获得 Oracle 支持