<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          區(qū)塊鏈應用開發(fā)組件:助力低代碼開發(fā)

          共 3906字,需瀏覽 8分鐘

           ·

          2021-04-08 14:45

          區(qū)塊鏈技術(shù)在經(jīng)歷了十余年的發(fā)展后,漸呈“燎原之勢”,不斷在各行業(yè)落地生根。但同時,從技術(shù)的角度看,區(qū)塊鏈應用開發(fā)仍然有著較高的門檻,存在不少痛點,在應用開發(fā)各個環(huán)節(jié)上的用戶體驗、效率及安全有待提升。


          在社區(qū)中,我們也經(jīng)常聽到關(guān)于區(qū)塊鏈應用開發(fā)的諸多問題:
          • 如何在solidity代碼中將賬戶地址和字符串互轉(zhuǎn)?
          • 現(xiàn)有的solidity代碼是否支持高級語言中常用但相對復雜的數(shù)據(jù)結(jié)構(gòu),例如可迭代的mapping?
          • 是否可以提供一套基于明確應用場景的可供復用、參考的智能合約代碼?
          • solidity智能合約如何快速編譯為abi和binary文件?
          • 如何在使用gradle構(gòu)建的區(qū)塊鏈應用中快速編譯智能合約代碼,而不必使用編譯腳本?
          • 寫完智能合約后,如何編寫區(qū)塊鏈應用?
          • 是否可以提供一個便于開發(fā)的區(qū)塊鏈應用代碼生成器?
          • 編程小白如何快速上手區(qū)塊鏈應用開發(fā)?

            ...


          這些問題既有與合約開發(fā)相關(guān)的,也有與應用開發(fā)相關(guān)的。基于此類場景問題,結(jié)合自身實踐經(jīng)驗,微眾銀行區(qū)塊鏈正式開源區(qū)塊鏈應用開發(fā)組件WeBankBlockchain-SmartDev,期望從區(qū)塊鏈應用開發(fā)中的各個環(huán)節(jié)入手,多維度地提高區(qū)塊鏈應用的開發(fā)效率,幫助開發(fā)者成為區(qū)塊鏈應用開發(fā)的“10倍工程師”。目前,整個組件基于solidity語言開發(fā)。近期微眾銀行區(qū)塊鏈還開源了Liquid合約語言,未來我們也會適配Liquid語言。


            什么是應用開發(fā)組件?


          區(qū)塊鏈應用開發(fā)組件WeBankBlockchain-SmartDev的研發(fā)初衷在于打造低代碼開發(fā)的組件庫,全方位助力開發(fā)者高效、敏捷地開發(fā)區(qū)塊鏈應用。WeBankBlockchain-SmartDev包含了一套開放、輕量的開發(fā)組件集,覆蓋合約的開發(fā)、編譯、應用開發(fā)等環(huán)節(jié),開發(fā)者可根據(jù)自己的情況選擇相應開發(fā)工具,提升開發(fā)效率。


          從合約開發(fā)的視角來看,對于常用的功能,不必再重復造輪子,只需按需引用,參考“智能合約庫”中的代碼,就可以引入相應功能,為合約開發(fā)的效率和安全保駕護航。對于非基礎(chǔ)性功能,例如業(yè)務場景,我們也提供了代碼模板供參考復用。


          從合約編譯的視角來看,對于正在開發(fā)中的區(qū)塊鏈應用,不必再依賴控制臺對合約代碼進行編譯,只需使用合約gradle編譯插件就地編譯,便可立即得到abi、bin和java合約。這些編譯物直接被輸出到Java項目中,省去了拷貝的步驟,提供了如開發(fā)原生java程序一樣迅捷、絲滑的體驗。


          從應用開發(fā)的視角來看,從智能合約到項目搭建,包含了大量機械而重復的工作,如創(chuàng)建項目、引入依賴、編寫配置代碼、訪問智能合約、編寫相關(guān)實體類等。相形之下,通過WeBankBlockchain-SmartDev,開發(fā)者可以選用應用開發(fā)腳手架。腳手架會根據(jù)智能合約自動生成項目工程。工程中已經(jīng)包含了上述邏輯代碼,開發(fā)者只需基于該工程繼續(xù)添加業(yè)務邏輯代碼,聚焦在自身的業(yè)務上即可。



            應用開發(fā)組件包含哪些子組件?


          智能合約庫組件


          “天下苦solidity久矣”,在solidity智能合約開發(fā)過程中,如果沒有一套可參考的模板和代碼庫,不僅影響開發(fā)的效率,同時可能因為對智能合約開發(fā)的不熟悉而引入安全風險。智能合約庫涵蓋了從基礎(chǔ)類型到上層業(yè)務的常見solidity庫代碼,用戶可根據(jù)實際需要進行參考、復用。智能合約庫的層級結(jié)構(gòu)如下:



          1、基礎(chǔ)類型層:提供了常見的solidity內(nèi)置類型的復雜操作庫函數(shù),涵蓋了數(shù)學運算,整型轉(zhuǎn)換操作、字符串操作、地址操作合數(shù)組操作等。在增強內(nèi)置基礎(chǔ)類型功能的同時,還為智能合約的安全保駕護航。


          2、數(shù)據(jù)結(jié)構(gòu)層:提供了其他高級編程語言中常見、而solidity語言中未提供的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),讓智能合約開發(fā)如虎添翼。


          3、通用功能層:作為合約開發(fā)的“粘合劑”,現(xiàn)階段整合了CRUD、Table庫,并提供了密碼學庫,極大地便利了智能合約業(yè)務邏輯中的相關(guān)操作。


          4、上層業(yè)務層:提供了積分和存證這兩個常見業(yè)務場景的智能合約模板。上述智能合約模板代碼遵循了高內(nèi)聚、低耦合、易于升級的設(shè)計理念,既可供智能合約初學者學習和參考,也能給經(jīng)驗豐富的智能合約開發(fā)者帶來啟迪和思考。


          智能合約編譯插件


          在以往的FISCO BCOS開發(fā)中,智能合約需要編譯,首先要安裝控制臺,然后在調(diào)試階段,需要把合約導入控制臺,編譯后再把java文件拷貝出來調(diào)試。且只要合約有變更,此流程就需要重新執(zhí)行。因此,我們提供了智能合約編譯插件,用戶只需要在項目中調(diào)用gradle相關(guān)命令,就會自動根據(jù)項目中的合約生成abi、bin和java代碼,節(jié)省了大量寶貴的時間。



          應用開發(fā)腳手架


          區(qū)塊鏈應用的開發(fā)流程,除了合約開發(fā)外、還包括應用開發(fā)。其中,應用開發(fā)又包括項目建立、引入依賴、配置代碼編寫、模型類編寫、服務類編寫、業(yè)務邏輯編寫等步驟。這些步驟相對繁瑣,影響了開發(fā)的效率。因此,我們提供了智能合約腳手架,用于一鍵式生成區(qū)塊鏈應用開發(fā)工程,降低了應用開發(fā)的難度。用戶將自己的合約導入腳手架,即可生成對應的應用開發(fā)模板工程,包含對應的POJO類、服務類等,用戶可基于此直接開發(fā)區(qū)塊鏈應用項目。



            應用開發(fā)組件使用場景


          場景1:智能合約開發(fā)


          在智能合約開發(fā)中,從基礎(chǔ)的四則運算到上層的業(yè)務場景,都可以使用成熟的、可復用的庫。


          以四則運算為例,需要判斷是否存在溢出的風險,此時可以使用數(shù)學相關(guān)庫LibSafeMathForUint256Utils。


          以數(shù)據(jù)結(jié)構(gòu)為例,在solidity中,mapping類型的key不可被迭代,此時若需要使用對key進行迭代的映射,可以使用mapping相關(guān)的庫LibBytesMap。


          以通用功能為例,如果希望引入哈希、驗簽等密碼學功能,則可以使用Crypto庫。


          以業(yè)務場景為例,如果想實現(xiàn)存證功能,可以參考場景模板Evidence,模板中納入了相關(guān)實現(xiàn),起到拋磚引玉的效果。


          場景2:合約修改與調(diào)試


          在區(qū)塊鏈應用開發(fā)、調(diào)試過程中,通常需要在項目中用到abi、bin、java合約等內(nèi)容,并基于這些內(nèi)容進行相應的調(diào)試。如果合約出于調(diào)整等原因而需要重新編譯,此時不必將合約拷入控制臺編譯,只需運行相應的gradle指令,就可以生成新的編譯物。同時,這些編譯物直接嵌在了項目中。如下圖示例中,對HelloWorld合約編譯后,產(chǎn)生的編譯物示例:



          場景3:區(qū)塊鏈應用開發(fā)


          假如用戶已經(jīng)寫好了智能合約,需要基于智能合約,開發(fā)一個提供rest接口的web項目。在這種情況下,用戶可以將合約拖入腳手架,一鍵生成項目。下圖是生成的樣例工程,包含了必要的配置類、DAO(Data Access Object)相關(guān)代碼。開發(fā)者只需對項目進行必要的配置,并添加相應的controller等代碼,就可以輕松實現(xiàn)上述需求。



            開源地址


          github代碼庫地址


          SmartDev-Contract 智能合約庫組件

          https://github.com/WeBankBlockchain/SmartDev-Contract 

          SmartDev-SCGP 智能合約編譯插件

          https://github.com/WeBankBlockchain/SmartDev-SCGP

          SmartDev-Scaffold 智能合約應用開發(fā)腳手架

          https://github.com/WeBankBlockchain/SmartDev-Scaffold


          gitee代碼庫地址


          SmartDev-Contract 智能合約庫組件

          https://gitee.com/WeBankBlockchain/SmartDev-Contract
          SmartDev-SCGP 智能合約編譯插件
          https://gitee.com/WeBankBlockchain/SmartDev-SCGP
          SmartDev-Scaffold 智能合約應用開發(fā)腳手架
          https://gitee.com/WeBankBlockchain/SmartDev-Scaffold

          文檔地址

          SmartDev-Contract 智能合約庫組件
          https://smartdev-doc.readthedocs.io/zh_CN/latest/docs/WeBankBlockchain-SmartDev-Contract/index.html 
          SmartDev-SCGP 智能合約編譯插件
          https://smartdev-doc.readthedocs.io/zh_CN/latest/docs/WeBankBlockchain-SmartDev-SCGP/index.html
          SmartDev-Scaffold 智能合約應用開發(fā)腳手架
          https://smartdev-doc.readthedocs.io/zh_CN/latest/docs/WeBankBlockchain-SmartDev-Scaffold/index.html

          歡迎參與WeBankBlockchain的社區(qū)建設(shè):

          • 如項目對您有幫助,歡迎點亮我們的小星星(點擊項目左上方Star按鈕)。

          • 歡迎提交代碼(Pull requests)。

          • 提問和提交BUG。

          • 如果發(fā)現(xiàn)代碼存在安全漏洞,可通過以下地址上報:

            https://security.webank.com/




          瀏覽 32
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  翔田千里无码在线观看 | 波多野结衣免费看 | 欧美一级特黄色aa大片 | 最近中文字幕在线中文字幕7 | 黑人大吊在线 |