Oracle Cloud Infrastructure 上的 Oracle Blockchain Platform 已知問題 (第 2 代)

瞭解使用 Oracle Blockchain Platform 時可能會遇到的問題,以及如何解決這些問題。

支援的 Hyperledger Fabric 版本

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.7Hyperledger Fabric v2.x 為基礎的執行處理。

解決方法:請勿嘗試在相同的區塊鏈網路上執行不同主要版本的 Hyperledger Fabric。

如果先決條件檢查失敗,會解除安裝 App Builder CLI

當您透過安裝或重新安裝最新版本來升級 Blockchain App Builder 命令行介面 (CLI) 時,如果先決條件檢查失敗,就會解除安裝現有的 Blockchain App Builder CLI。

解決方法:您可以重新安裝舊版的 Blockchain App Builder CLI,或更新您的系統以符合先決條件,然後安裝更新版本的 Blockchain App Builder CLI。

小數位數 NFT 交易使用不正確的小數位數時,不會發生錯誤

當您使用「區塊鏈 App 產生器」處理使用 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 鏈碼版本相容性

對於 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 之後,將繼續如預期般運作。

先前版本中最初回報的問題:

無法從開發人員工具頁面執行 Fiat Money Token 或 Balance Transfer Sample

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 更新的 Balance Transfer 樣本也同樣符合原子交易功能。

解決方法:在對等上再次安裝範例鏈碼,這將會以新的套裝程式 ID 安裝較新版本的鏈碼。針對部署範例的每個通道,將鏈碼升級至新套裝程式。升級鏈碼之後,「開發人員工具」頁面上範例的狀態和作業會正常運作。

使用區塊鏈 App 產生器時發生部署錯誤

使用 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. 請重試建置。

區塊鏈 App 產生器產生的 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 Chaincode 部署失敗

為了避免在新的鏈碼中出現此行為,請升級至 Blockchain App Builder 22.4.3 或更新版本。您可以從 Oracle Blockchain Platform 主控台之區塊鏈 App 產生器窗格的開發人員工具頁籤下載區塊鏈 App 產生器。

使用 XA 程式庫時的閘道逾時

當您搭配 Oracle Blockchain Platform 使用 XA Java 程式庫時,可以將多個區塊鏈交易合併成由外部交易管理程式控制的全域交易。如果區塊鏈交易花費的時間超過閘道逾時值 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

平台升級後未更新 Gossip 領導者選擇屬性

當您將執行處理從 Hyperledger Fabric v1.4.7 升級至 Hyperledger Fabric v2.2.4 時,對等節點的 gossip 引線選擇屬性不會更新。換句話說,升級的執行處理會使用 Hyperledger Fabric v1.4.7 執行處理的現有屬性,而非新 Hyperledger Fabric v2.2.4 執行處理的預設屬性。如需有關對等節點屬性的詳細資訊,請參閱對等節點屬性

事件大小限制

從版本 22.2.1 開始,事件的有效負載大小預設限制為 50 KB。將會刪除任何大於有效負載大小上限的事件。Oracle DevOps 團隊可以依要求修改此參數。如果您預期要訂閱有效負載大於 50 KB 的事件,請在 My Oracle Support 中開啟「服務要求 (SR)」以要求事件大小上限。如需詳細資訊,請參閱 REST API 文件中的訂閱事件

包含冒號 (:) 的使用者 ID 無法用於 REST API 呼叫中

Oracle Blockchain Platform 可讓您將包含冒號 (:) 的使用者 ID 與 REST 代理主機註冊建立關聯。不過,使用基本認證 (使用者名稱和密碼) 時,無法在 REST API 呼叫中使用該使用者 ID。

解決方法:確定與 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 程式碼進行除錯

在 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
目前沒有解決此錯誤的解決方法。

多組織環境和區塊鏈 App 產生器

在具有多個組織的環境中,您可能需要使用主控台來完成部分作業。

若要透過參與者執行處理在相同通道上重新部署鏈碼,請使用主控台來部署鏈碼。

(Hyperledger Fabric v2.2.4) 若要升級鏈碼,請使用主控台並手動核准來自參與者的鏈碼。

分級一次僅適用於一個元件

一次只能調整一個節點類型。例如,您可以建立新增對等節點,並同時修改現有的對等節點設定值,但如果您也想要增加儲存體,則必須個別執行該動作。

此外,您一次只能調整一個對等體或 OSN - 例如,您無法在單一作業中新增兩個對等體。

不正確的作業系統時鐘可能會導致拒絕的要求

如果從屬端或 SDK 的本機時鐘超過 15 分鐘,對等和訂購者將會拒絕該從屬端或 SDK 的要求。確定已正確設定您的本機時鐘。

由於較舊的用戶端 SDK,區塊鏈應用程式無法如預期般運作

如果應用程式使用舊版的從屬端 SDK,其行為可能會意外。

解決方法:閱讀說明用戶端 SDK 更新的文件,並視需要修改您的應用程式。如需詳細資訊,請參閱 Hyperledger Fabric 文件中的 Hyperledger Fabric SDK

網路的 Oracle Blockchain Platform 執行處理無法管理撤銷的第三方憑證

如果 Oracle Blockchain Platform 網路包含具有第三方憑證或 Hyperledger Fabric 組織及其憑證的組織,則撤銷的憑證不會套用、不會顯示,也無法從網路的 Oracle Blockchain Platform 執行處理撤銷。

解決方法:使用原生 Hyperledger Fabric CLI 或 SDK 匯入組織的憑證撤銷清單 (CRL) 檔案。

創辦人通路清單包含由資訊建立的不正確,且無法使用編輯通路組織選項

在混合網路中 (創辦人執行處理和參與者執行處理執行不同版本的 Oracle Blockchain Platform),發起者的通道清單可能會對參與者建立的通道顯示錯誤的 MSP ID。會顯示發起者的 MSP ID,而不是參與者的 MSP ID。匯入 CRL、撤銷或套用 CRL 或在通道上設定錨點對等項目後,可能會發生此情況。

通道的編輯通道組織選項僅適用於建立者欄位中顯示的執行處理。如果顯示錯誤的 MSP ID,則通路建立者無法更新通路組織。

解決方法:此問題沒有解決方法。

Oracle Blockchain Platform 不支援 ImplicitMeta 原則

如果您使用原生 Hyperledger Fabric CLI 或 SDK 來修改通道的組態,則 Oracle Blockchain Platform 不支援您指定的部分組態設定值。

  • 原生 Hyperledger Fabric CLI 與 SDK 對讀取器和寫入器使用 ImplicitMeta 通道原則。當通道使用這些原則時,Oracle Blockchain Platform 主控台無法保證能夠順利處理管理作業 (例如,編輯組織)。

    解決方法:將讀取器和寫入器原則更新至「簽章」原則,並視需要定義原則規則。如需詳細資訊,請參閱 Hyperledger Fabric 文件中的 Access Control Lists (ACL)

  • 如果通道使用 ImplicitMeta 原則類型,而在通道組態中,您將群組區段中的 mod_policy 變更為「管理員」,且通道中有多個組織,則您無法使用 Oracle Blockchain Platform 管理通道。例如,您無法將新組織新增至通道,或以任何方式變更通道的 ACL 原則,包括回復其原始值。

    解決方法:使用原生 Hyperledger Fabric CLI 或 SDK 來管理通道。

通路建立者無法更新通路的組態

當您使用原生 Hyperledger Fabric CLI 或 SDK 建立通道時,建立者原則不會包含在 configtx.yaml 檔案中。Oracle Blockchain Platform 要求建立者原則允許通道建立者編輯通道的組態。

解決方法:手動編輯 configtx.yaml 檔案以新增建立者原則。

REST API 中不支援將 instantiateChaincode 端點中的阻隔性設為 0

如果您使用 REST API 的 instantiateChaincode 端點,且在 dataCollectionConfig 中將 blocktolive 值設為 0,則您會收到下列錯誤: {"respMesg":"invalid argument"}

為了避免從專用資料庫清除資料,Hyperledger Fabric 要求您將 blocktolive 值設為 0。不過,Oracle Blockchain Platform REST API 不支援將此組態設為 0。

解決方法:使用主控台來建立鏈碼,並在建立鏈碼對話方塊的「私人資料收集」區段中,將阻隔欄位設為 0。

對等方無法從其他對等方提取私人資料

如果專用資料收集的 blocktolive 值小於 10 且其 maxPeerCount 值小於對等體 (不包括背書對等體) 總數,對等體便無法從其他對等體提取專用資料。當您使用主控台建立專用資料收集定義或使用原生 Hyperledger Fabric CLI 或 SDK 時,就會設定此值。請參閱 https://jira.hyperledger.org/browse/FAB-11889

解決方法:確認 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 需求。如果從 Hyperledger Fabric 用戶端部署時未遵循這些需求,則鏈碼可能會在主控台中不正確地列出。

解決方法:建置鏈碼名稱和版本時,請使用下列規則。

  • 使用 ASCII 文數字字元、破折號 (-) 以及底線 (_)。
  • 名稱必須以 ASCII 文數字字元為開頭和結尾。例如,您不能使用 _mychaincodemychaincode_ 等名稱。
  • 破折號 (-) 和底線 (_) 後面必須接著 ASCII 文數字字元。例如,您不能使用 my--chaincodemy-_chaincode 等名稱。
  • 名稱和版本最多可有 64 個字元。
  • 鏈碼版本也可以包含句號 (.) 與加號 (+)。

日期與時間選擇器行為

Oracle Blockchain Platform 日期和時間選擇器的行為不如預期。您可以使用日期與時間選擇器來篩選項目,例如日誌檔或分類帳活動。

解決方法:請使用下列資訊來協助您使用日期與時間選擇器。

  • 如果您選取特定期間 (例如最後一天 ),然後再次選取以重新執行查詢,查詢就不會重新執行。若要取得最新資訊,請按一下重新整理按鈕。
  • 如果您尚未在電腦上設定時區,則在選取自訂選項時,必須以 GMT 指定開始時間和結束時間。不過,如果您在「偏好設定」中將「時區設定」設為 GMT (在主控台中,選取您的執行處理名稱,然後按一下「偏好設定」,然後按一下「時區設定」),主控台上的時區會自動轉換為 GMT。

使用 Chaincode 手動為 Shim 提供供應商

在 Hyperledger Fabric 中,fabric-ccenv 影像包含 github.com/hyperledger/fabric/core/chaincode/shim (shim) 套裝軟體。這樣一來,您就可以封裝鏈碼,而不需要加入陰影。不過,這可能會導致未來的 Hyperledger Fabric 發行版本發生問題,而且在使用 shim 隨附的套裝軟體時可能會導致問題。

解決方法:若要避免潛在問題,您應該先手動為 shim 套裝軟體與鏈碼建立廠商,然後再使用 peer 指令行介面來封裝和安裝鏈碼,或者封裝或安裝鏈碼。請參閱 https://jira.hyperledger.org/browse/FAB-5177

說明文件協助工具

如需有關 Oracle 對於協助工具的承諾資訊,請瀏覽 Oracle Accessibility Program 網站,網址為 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