比特幣價格 比特幣價格
Ctrl+D 比特幣價格
ads

BCO:從Python-SDK談談FISCO BCOS多語言SDK_SCO

Author:

Time:1900/1/1 0:00:00

FISCOBCOS2.0從發布起就自帶官方控制臺,經過社區持續使用打磨,已經足夠強大、完善、友好。社區還有用各種開發語言開發的區塊鏈應用,為滿足開發者方便管理區塊鏈節點的需求,目前Python-SDK和Nodejs-SDK已經上架,go語言版本已經在路上。

本文以筆者最熟悉的Python-SDK為例,分享一些SDK開發的點滴,涵蓋應用開發流程、協議編解碼、網絡通信和安全事項等。

FISCOBCOS自帶快速搭建特性,五分鐘一鍵搭鏈后,開發者只需連上區塊鏈節點,寫合約、發交易。

控制臺和SDK的定位,是幫助用戶快速訪問區塊鏈,開發測試智能合約,實現業務邏輯。根據“奧卡姆剃刀”原則,設計哲學應盡量輕、模塊化、淺層次,不引入多余的功能,不給用戶和二次開發者造成額外負擔。

客戶端控制臺和SDK就像一輛操控好、配置精的快車,供開發者和用戶駕馭,輕松愜意,盡情馳騁于區塊鏈應用之路。

控制臺體驗

首先結合從準備環境到調用合約的全流程,體驗下控制臺,命令行交互界面風格如下:

1.準備環境:

在開始之前,請先通讀使用手冊和開發文檔,根據文檔介紹,stepbystep初始化環境,安裝依賴庫,目前Python-SDK支持linux/mac/windows操作系統。

為了連上區塊鏈節點,需要修改本地配置文件,填寫區塊鏈節點的對應網絡端口,如果選擇Channel協議,則需要配置相應的客戶端證書。

2.在線體驗:

配置好網絡后,可以運行console的get系列命令。試下手感,與FISCOBCOS親密接觸。確認鏈在正常工作,常用的指令有getNodeVersion、getBlockNumber、getPeers、getSyncStatus等,可以用console的usage或help命令了解所有支持的指令。

3.創建賬戶:

創建一個新的帳戶,即代表自己身份的公私鑰對,發送交易時會采用私鑰簽名。創建的帳戶用keystore格式保存在本地文件系統里,用戶可以設定密碼保護這個文件,注意記住創建帳戶時使用的密碼。

控制臺提供的帳戶相關命令是newaccount,showaccount。如果要使用剛創建的新帳戶為交易簽名,記得把它配置到client_config.py文件的相應位置。

Worldcoin應用程序將從Polygon遷移到Optimism的生態系統:金色財經報道,Sam Altman的加密項目Worldcoin于本周早些時候推出World App,該應用程序將從Polygon遷移到Optimism的生態系統中。World ID協議也將在OP主網上可用。[2023/5/11 14:58:07]

另外,如果賬戶信息需要高等級保護,則可以進行二次開發。將其放入加密機、TEE等安全區,以及開發秘鑰分片、助記詞等方案。

4.編寫合約:

編寫一個智能合約,或者參照SDK里自帶的智能合約例子修改定制,實現自己的業務邏輯。本文重點關注solidity智能合約,FISCOBCOS還有一種“預編譯合約”,采用C開發,需要和FISCOBCOS底層代碼聯合編譯。

5.編譯部署:

對合約進行編譯,獲得合約的ABI接口文件和BIN二進制代碼文件。Python-SDK里有bcos_solc.py文件可幫助開發者簡化編譯器配置和調用,同時,只要正確配置了合約路徑和編譯器路徑信息,直接運行控制臺的部署或調用合約接口指令,也會嘗試自動去編譯合約,操作體驗相當行云流水。

獨立部署合約的話,可使用控制臺的deploy指令,部署指令成功后會得到新的合約地址。參考命令是./console.pydeploySimpleInfosave,其中SimpleInfo是合約名,最后的"save"為可選,如果指定了"save",則將合約新地址記錄到本地文件里,以便后續使用。

6.調用合約:

用call或sendtx命令,指定合約名、合約地址、方法名、對應的參數,調用鏈上合約。

參考命令./console.pysendtxSimpleInfolastsetbalance100,即選擇SimpleInfo合約,指向其最近部署成功的地址,調用setbalance接口,傳入參數100。

交易在鏈上共識完成后,控制臺會自動打印交易回執里的方法返回碼、交易Eventlog信息列表等,供用戶查看,如果錯誤,則打印異常信息。

如果一切正常,到此即可基本走通區塊鏈應用之路。

值得一提的是,FISCOBCOS幾個語言版本的控制臺,都支持按Tab鍵提示指令和自動完成,幫助使用者流暢無錯地操作,提升用戶體驗。

數據:88,888,888枚BUSD從Paxos Treasury轉移到Binance:金色財經報道,據Whale Alert數據顯示,88,888,888枚BUSD(價值約88,950,929美元)從Paxos Treasury轉移到Binance。[2023/1/14 11:11:12]

再進一步,如果希望有豐富多彩的、可視化交互式頁面體驗,不妨使用WeBASE中間件平臺。

深入了解

整個SDK的模塊組合如下,可謂是麻雀雖小五臟俱全。

功能接口

支撐控制臺等交互模塊的,是已經封裝完備、開箱即用的功能接口API,包括:

1.get系列:

諸多的“get”開頭的接口,用于獲取鏈上的各種信息,包括區塊、交易、回執、狀態、系統信息等等。雖然幾十個get接口,但其實現邏輯基本一致,都是指定命令字和參數列表,請求和處理回應,實現起來也很快。

2.call:

對應合約的常量方法。所謂常量方法,是指合約里對應代碼不修改狀態,該請求不會全網廣播,僅在指定節點上運行。

3.sendRawTransaction:

構建一個交易,用賬戶私鑰簽名,發送到鏈上,這種交易會被廣播,進行共識處理,生成的狀態數據會被全網確認。部署新合約這個操作,實際上也是一種交易,只是不需要指定目標合約地址。

相關的是sendRawTransactionGetReceipt,名字很長,在sendRawTransaction基礎上增加了獲取回執的流程,用于簡化從發交易到獲取回執的閉環流程。

4.更多:

針對FISCOBCOS的全局系統配置、節點管理、CNS、權限等系統級功能的API,其原理是讀寫鏈上的系統合約,詳細指令列表見文末。

開發者可以參考控制臺和client/bcosclient.py等代碼,進行二次開發,實現更多更酷炫的功能。另外,SDK里內置了一系列的開發庫和小工具,幫助管理帳戶、輸出日志、統一異常處理、簡單的性能和耗時統計等。

合約開發相關

圍繞著合約開發,Python-SDK實現了合約編譯部署、合約地址本地化管理、ABI接口文件的管理,支持代碼自動生成,一個命令行即可生成供業務端直接使用的代碼,如

近5200萬枚BUSD從Paxos財政部轉移到幣安:金色財經報道,WhaleAlert數據顯示,51,888,888 BUSD(51,922,615美元)從Paxos財政部轉移到幣安。[2023/1/7 10:59:20]

pythoncodegen.pycontracts/SimpleInfo.abi。

solidity合約編譯后的ABI文件是個好東西。ABI全稱是ApplicationBinaryInterface,里面詳細描述了合約的接口信息,包括方法名、參數列表和類型、方法類型,以及Eventlog格式定義等等。

對ABI的管理,參見client/datatype_parser.py,加載和解析ABI文件,根據方法名、方法4字節簽名、方法類型等維度,靈活查詢方法列表和方法定義,并針對方法定義、輸入數據等進行編碼解碼,解析交易返回值、Eventlogs等。

有ABI定義在手,對合約的操控簡直是可以隨心所欲,開發者讀懂了ABI描述,基本就能全面理解一個合約的輸入輸出,和合約毫無障礙地對話,這種“面向遠程接口編程”的思想,很類似WSDL、IDL、ACE、ProtoBuffer和gRPC等經典軟件設計。

事實上,整個SDK中最繁瑣的是ABI編解碼部分,為了兼容EVM,FISCOBCOS在交易處理時沿用了ABI編碼,以及兼容RLP協議。

ABI、RLP制定了嚴格的規范,對基礎數據類型、數組和變長數據、函數方法、參數列表等都有特定的編解碼方式,否則組件之間無法通信,數據無法解析,虛擬機“不認識”所輸入的交易,則不能執行合約。

如果自行手寫這里的編解碼,即使是熟手也得花不少時間,還要能保證測試通過、保持版本兼容,所幸github上已經有eth-abi、eth-utils、rlp等一系列開源項目,可以引入這些項目且根據具體的需要進行修訂,能節約不少工作量,向這些項目作者們致謝,開源就是爽!

交易數據結構相關

在搞定了基礎編解碼之外,還需要實現FISCOBCOS交易結構,重點注意支持并行處理交易增加的randomid、blocklimit字段,為支持群組特性增加的fiscoChainId和groupId字段,在交易的receipt里增加的交易output等。

2.8億枚TRX從Poloniex交易所轉出,價值1177.7萬美元:據Whale Alert數據顯示,北京時間09月04日15:19, 2.8億枚TRX從Poloniex交易所轉入TLoxh9開頭地址,按當前價格計算,價值約1177.7萬美元,交易哈希為:8d0dadb8e67b3aa8b0b7b1c3bda2a0425d1c17bb83022c904ff48200f557dc27。[2020/9/4]

其中,交易的blocklimit定義為“交易生命周期,該交易最晚被處理的塊高”,SDK需要定期到鏈上查詢當前塊高,以確定當前交易的生命周期。

對于開發者來說,清晰理解交易的輸入、交易回執、交易輸出(tx.output)是非常重要的。

交易調用合約里的某一個方法時,首先將方法名字和參數類型列表組合,如'set(string,uint256,address)',對這一段文本進行Keccak-256(SHA-3)計算,并截取前4個字節做為“方法簽名”,然后對傳入的參數,根據類型定義依次進行ABI編碼,并和"方法簽名"拼接一串二進制數據,做為交易的輸入數據。

和交易結構體的其他字段一起再進行RLP編碼,并用帳戶私鑰進行簽名,得到一段二進制請求數據,由sendRawTransaction發往節點,節點收到后,立刻返回交易Hash給到客戶端。

交易在鏈上被網絡共識確認,處理完成后,通過getTransactionReceipt接口,可以獲得交易處理的詳細結果。

在交易回執中,以下幾個字段尤為關鍵:

1.contractAddress:

僅在部署合約交易時有效,表示新合約的地址。

2.output:

對應方法的return值,可用于判斷業務邏輯的最終處理結果。

3.Logs:

如果在合約代碼里,寫了一些Eventlog,則receipt的logs字段里可以解碼出詳細的信息。Eventlog可用于幫助客戶端監聽、跟蹤交易的處理結果,甚至可以幫助開發者調試合約執行過程,相當于在合約里打調試日志。當然,在合約正式發布時,應清除調試的Eventlog,只保留必要的log,避免冗余信息存到鏈上。

金色晨訊 | Poloniex:計劃在Tron網絡上支持USDT導致大量USDT從Poloniex錢包轉移:1.灰度CEO:本周其投資基金已籌集到超2000萬美元,創2017年以來新高。

2.Poloniex:計劃在Tron網絡上支持USDT導致大量USDT從Poloniex錢包轉移。

3.奧地利數字化部長:歐洲有過度監管傾向 沒有必要擁有自己的區塊鏈規則。

4.印度HDFC銀行向虛擬貨幣買家發“威脅”郵件 無法澄清交易性質者將被凍結賬戶。

5.泰國SEC金融科技部主任:禁止加密貨幣的決定從來都不是永久性的。

6.彭博:Bitfinex事件顯示小額投資者面臨更高風險。

7.Bitfinex電子郵件回應用戶:有信心為解凍資金提供有說服力的證據,不會“跑路”。[2019/4/28]

Python-SDK客戶端里內置了解析“方法簽名”、交易input/output、receipt.logs等字段的方法。

在使用控制臺命令行時,只要是查詢交易和回執的指令,在命令行后面附帶合約名,也可以自動解析出相關的數據來,例如:./console.pygetTransactionReceipt0x79b98dbb56d2eea289f756e212d5b6e5c08960beaa8ea8331740fdcfaa8dcab1SimpleInfo,最后這個“SimpleInfo”為可選合約名,不需要帶后綴,要求在contracts/目錄下有SimpleInfo.sol文件。

這個貼心小設計,可以幫助開發者直觀探秘區塊鏈交易的脈絡,對各種信息一目了然,不會迷失在天書一樣的十六進制字符海洋里。

網絡協議

最后聊聊FISCOBCOS的兩種網絡協議:JSONRPC和Channel長連接。

JSONRPC連接沒有證書驗證和通信加密,建議在本身安全可信的環境里使用,比如本機或內網,一般用于運維管理和統計分析場合。

JSONRPC的格式相當簡單通用,各種語言庫都內置了JSON編解碼以及HTTP請求協議實現,一般不需要自行開發,甚至可以采用curl、telnet等工具進行收發,如:

//Requestcurl-XPOST--data'{"jsonrpc":"2.0","method":"getBlockNumber","params":,"id":1}'http://127.0.0.1:8545|jq//Result{"id":1,"jsonrpc":"2.0","result":"0x1"}

Channel協議是FISCOBCOS獨有的協議,Channel協議的特點是安全高效,支持雙向實時通信,可用于遠程調用乃至公網的通信。

如果使用Channel長連接方式,則需要從區塊鏈節點上獲取SDK證書,放置到SDK項目的對應路徑下,證書詳見文末。

這個協議的數據包格式示意圖如下,是一種TLV(Tag/Length/Value)風格的擴展實現:

格式說明:

所有整形數編碼都是網絡序,大端;

Length實際上包含了從第一個字段到最后一個字段的整個數據包的長度;

包頭為定長,為(42324)=42字節;

數據體的實際長度根據具體內容而變,字節數為Length-42字節。

Channel長連接通信和數據收發的要點如下:

采用TLSv1.2安全傳輸,SDK和節點之間需要加載證書,用證書握手、驗證后才能建立長連接。

長連接用心跳包維護,需要定期發起心跳包。

數據按包為單位,編碼成流數據傳輸,那么在收發數據時,需要持續從socket流里獲取數據,按照數據包的格式,判斷長度是否合法,數據是否收全,是否能正確的解析,對“部分收取”的數據,要保留在接受緩沖區里,待收取完成后再進行解析,不能丟棄,否則可能導致解析錯誤。

Channel協議支持雙向通信,SDK可以主動請求節點,節點也可能往SDK推送消息,如區塊鏈系統通知、數據更新通知、AMOP跨機構消息等。

設計異步的、隊列化、回調式消息處理機制,根據消息的序列號、指令類型、狀態碼等維度,正確處理消息。Python-SDK用了多線程以及Promise庫,以盡量高速優雅地處理各種消息。

對socke流數據編程有一定經驗的開發者,理解這個協議和實現它并不會很難。對Channel協議實現,數據包解析參見client/channelpack.py,通信和數據收發參見client/channelhandler.py。

總結

Python-SDK的開發始于今年6月中旬,寫出第一個可用版本只花了一個星期,然后雕琢用戶交互細節,以及進行代碼優化、文檔完善,并進行多輪測試保證質量,團隊其他同學實現Nodejs版本SDK的用時也差不多。

總的來說,在有一些基礎代碼參考的前提下,開發一個FISCOBCOS特定語言版本SDK,還是挺敏捷寫意的事情,一點兒也不難,Justforfun。

在各語言版本SDK開發和迭代過程中,FISCOBCOS團隊和社區開發者一直保持溝通交流,納入優質pullrequest,在體驗中持續優化。

歡迎社區開發者根據自身使用場景的實際情況,繼續完善現有SDK,或貢獻更多語言類型的FISCOBCOSSDK,幫助更多開發者順暢地走在區塊鏈之路上。

最后,感謝杰哥、安總、小白、wheat等同學,以及多位社區開發者對Python-SDK的重要貢獻。

參考資料

FISCOBCOS官方控制臺:

https://github.com/FISCO-BCOS/console

Python-SDK:

https://github.com/FISCO-BCOS/python-sdk

Nodejs-SDK:

https://github.com/FISCO-BCOS/nodejs-sdk

FISCOBCOS安裝:

https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/installation.html#fisco-bcos

合約開發教程:

https://fisco-bcos-documentation.readthedocs.io/zh_CN/release-2.0/docs/manual/smart_contract.html

WeBASE:

https://fintech.webank.com/webase

ABI:

https://solidity.readthedocs.io/en/latest/abi-spec.html

RLP:

https://github.com/ethereum/wiki/wiki/RLP

交易數據結構:

https://fisco-bcos-documentation.readthedocs.io/zh_CN/release-2.0/docs/design/protocol_description.html

RPC原理:

https://fisco-bcos-documentation.readthedocs.io/zh_CN/release-2.0/docs/design/rpc.html

Channel協議定義:

https://fisco-bcos-documentation.readthedocs.io/zh_CN/release-2.0/docs/design/protocol_description.html#channelmessage-v1

SDK證書:

https://fisco-bcos-documentation.readthedocs.io/zh_CN/release-2.0/docs/manual/certificates.html

AMOP跨機構:

https://fisco-bcos-documentation.readthedocs.io/zh_CN/release-2.0/docs/manual/amop_protocol.html

Tags:BCOCOSSCOFiscoBCO幣COS價格scoin幣價

火必交易所
BTC:BTC重要阻力區的抉擇_HBTC

昨晚BTC向下刺探10550美元斐波那鍥0.382點位后,然后快速拉高至上方阻力區10800美元上方再回落至目前10700美元附近.

1900/1/1 0:00:00
TEL:Telegram 計劃9月1日開啟TON網絡公測,主網將在10月底前上線_RAM

8月21日消息,Telegram旗下區塊鏈項目TelegramOpenNetwork中文社區稱TON核心代碼已基本完成,計劃9月1日開啟公測,開放全節點代碼和網絡驗證模塊.

1900/1/1 0:00:00
數字貨幣:“中國式”數字貨幣發展史:央行在下一盤怎樣的大棋?_區塊鏈

作者:陳情編輯:三歲 “如果你不能打敗他們,那就加入他們的隊伍”。Libra白皮書的發布引發輿論軒然大波,所顯露的支付性能似乎愈加印證了貨幣數字化才是貨幣未來這一命題的真實性.

1900/1/1 0:00:00
數字貨幣:黃天威:未來五年內將面臨一場數字貨幣大戰_ETH

黃天威|訪談嘉賓 螞蟻幣眾小姐姐、金色財經客座主持|訪談主持 本期簡訊: 8月21日20:00,區塊鏈撲克牌大佬、比特時代創始人黃天威做客“紛智共識機·百家訪談”第十一期.

1900/1/1 0:00:00
DEX:ZB.com關于開放第五期投票上幣項目ACC充提及交易的公告_DEXTF價格

尊敬的ZB用戶: 第五期投票上幣項目ACC滿足投票上幣條件,錢包已對接完成。ZB.com將于2019年8月20日14:00開放ACC充提業務,并將于8月22日14:00開放ACC/USDT交易.

1900/1/1 0:00:00
EOS:獨家視頻 | 進軍EOS:OK礦池從POW到POS擴張的突破口_LINA幣

8月12日,EOS節點排名發生大“震動”,OK礦池EOS節點從備選節點躍居首位,成為首個得票數超過2億的超級節點.

1900/1/1 0:00:00
ads