<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>

          教程 | 使用WeBASE開(kāi)發(fā)智能合約Java應(yīng)用

          共 3616字,需瀏覽 8分鐘

           ·

          2021-10-22 22:09

          區(qū)塊鏈中間件平臺(tái)WeBASE功能豐富、操作友好,備受社區(qū)關(guān)注。WeBASE也不斷迭代優(yōu)化,致力于為社區(qū)帶來(lái)更好的開(kāi)發(fā)體驗(yàn)。


          在 WeBASE 的合約IDE中,“Java項(xiàng)目導(dǎo)出”功能除了提供可直接使用的SDK Client實(shí)例等功能之外,新增了導(dǎo)出腳手架時(shí)選中多個(gè)私鑰用戶、封裝了ServiceManaver類(lèi)以支持切換不同的私鑰來(lái)調(diào)用合約的功能。


          下面我們以合約倉(cāng)庫(kù)中的存證合約模板為例,一起熟悉一下WeBASE的“Java項(xiàng)目導(dǎo)出”功能,然后盡情地使用WeBASE開(kāi)發(fā)智能合約Java應(yīng)用吧。


            前期準(zhǔn)備


          我們用 WeBASE-Front 節(jié)點(diǎn)前置進(jìn)行操作。首先打開(kāi)“合約管理”中的“合約倉(cāng)庫(kù)”,導(dǎo)出一份“存證合約”模板到合約IDE中,存證合約模板包含存證實(shí)體 Evidence 和業(yè)務(wù)合約 EvidenceSignersData 兩個(gè)合約。



          在合約倉(cāng)庫(kù)中查看應(yīng)用模板的“預(yù)覽和說(shuō)明”,可以看到合約的簡(jiǎn)介文檔。



          我們導(dǎo)出存證合約模板到合約IDE后,分別創(chuàng)建一個(gè)名為 IssuerAlice 的私鑰用戶,后面將用這兩個(gè)私鑰來(lái)發(fā)起合約的部署、調(diào)用等交易。


          首先,我們?cè)诤霞sIDE中編譯 EvidenceSignersData 合約,并使用 Issuer 用戶部署。部署時(shí) EvidenceSignersData 的構(gòu)造函數(shù)需要傳入私鑰地址,用于初始化存證的 evidenceSigners,入?yún)⒏袷绞堑刂窋?shù)組address[],如下圖所示,我們填入 Issuer 用戶的地址作為初始的 evidenceSigners。



          通過(guò)合約代碼邏輯,我們可以了解到,調(diào)用 EvidenceSignersData 合約 newEvidence 方法創(chuàng)建一個(gè)新的存證時(shí),需要使用部署時(shí)傳入的evidenceSigners地址,也就是上文傳入的 Issuer 私鑰地址。


            生成腳手架


          合約部署后,我們執(zhí)行導(dǎo)出操作,窗口會(huì)嘗試自動(dòng)填入當(dāng)前連接的節(jié)點(diǎn)信息,如果節(jié)點(diǎn)前置未配置鏈節(jié)點(diǎn)的路徑,則可以手動(dòng)填入節(jié)點(diǎn)信息。填入后,我們可以通過(guò)“檢測(cè)”按鈕檢查能否連上節(jié)點(diǎn)。同時(shí),我們?cè)谟脩舻妮斎肟蛑羞x中多個(gè)私鑰用戶,表示導(dǎo)出時(shí)將選中的私鑰導(dǎo)入到即將生成的腳手架中。


          值得注意的是,在最新版的WeBASE中點(diǎn)擊“導(dǎo)出Java項(xiàng)目”按鈕后,只要在彈窗里的合約列表中選中合約即可;如果合約是未編譯的,IDE就會(huì)嘗試自動(dòng)完成合約編譯,實(shí)現(xiàn)了無(wú)需關(guān)閉窗口即可完成編譯的操作。



          最后選中需要導(dǎo)出的合約后,點(diǎn)擊確認(rèn)按鈕將會(huì)導(dǎo)出合約對(duì)應(yīng)的Java項(xiàng)目腳手架。下面我們通過(guò)Java的IDE打開(kāi)這個(gè)Java腳手架,了解一下腳手架包含了哪些內(nèi)容。


            運(yùn)行腳手架


          我們用Java的IDE打開(kāi)腳手架項(xiàng)目后,可以看到項(xiàng)目是基于Gradle進(jìn)行構(gòu)建的。



          如上圖所示,項(xiàng)目的配置文件中配置了system.peer為節(jié)點(diǎn)的IP與端口,包含了節(jié)點(diǎn)的證書(shū)路徑、合約的地址、加載的私鑰地址以及項(xiàng)目的端口等。


          基于WeBASE導(dǎo)出的Java項(xiàng)目也包含了WeBASE-Front節(jié)點(diǎn)前置中配置的sdk證書(shū),如下圖所示,用戶無(wú)需編寫(xiě)Java-SDK中的Client初始化的代碼,直接獲取config包中SdkBeanConfig類(lèi)初始化的Client的Bean實(shí)例即可。



          同時(shí),導(dǎo)出的Java項(xiàng)目還對(duì)選中的合約進(jìn)行了不同的封裝,包含了項(xiàng)目中raw包的原生合約Java類(lèi)和service包的封裝合約Service。
          • raw包:智能合約Solidity代碼轉(zhuǎn)為Java代碼的類(lèi)
          • service包:在WeBASE 合約IDE中選中的智能合約對(duì)應(yīng)的合約Service類(lèi)。



          和raw包中的合約Java類(lèi)一樣,每個(gè)合約Service類(lèi)的實(shí)例都會(huì)綁定一個(gè)私鑰。如果需要使用多個(gè)私鑰時(shí),則需要使用不同的私鑰來(lái)初始化一個(gè)新的合約Service類(lèi)。


          此外,WeBASE v1.5.2的更新封裝了一個(gè) ServiceManager 類(lèi),可以根據(jù)私鑰管理多個(gè)合約Service類(lèi)實(shí)例。ServiceManager 根據(jù)項(xiàng)目配置文件 application.properties 中配置的system.hexPrivateKey 獲取多個(gè)私鑰,并且通過(guò)這些私鑰初始化多個(gè)合約Service實(shí)例,保存在一個(gè)Map中。其中,Map以私鑰的地址為Key,以綁定了私鑰的合約Service實(shí)例為Value。



            基于腳手架二次開(kāi)發(fā)


          我們進(jìn)行業(yè)務(wù)的二次開(kāi)發(fā)時(shí),比如需要調(diào)用存證合約進(jìn)行存證時(shí)(合約的newEvidence方法),怎么通過(guò)腳手架的代碼進(jìn)行合約調(diào)用呢?


          在前文部署存證合約時(shí)我們使用了 Issuer 的私鑰地址初始化了 EvidenceSignersData 的合約,因此調(diào)用 newEvidence 方法時(shí),同樣需要使用 Issuer 私鑰來(lái)進(jìn)行存證操作。因此我們可以在 ServiceManager 類(lèi)中通過(guò)Issuer 的地址來(lái)獲取綁定了Issuer 綁定的合約EvidenceSignersDataService實(shí)例。通過(guò)該實(shí)例調(diào)用合約即可。


          如下圖所示,我們用一個(gè)單元測(cè)試來(lái)演示存證的核心業(yè)務(wù)代碼,代碼中通過(guò)Spring自帶的 Autowired+Qualifier 獲取 ServiceMap 實(shí)例。


          我們通過(guò) Issuer 的地址“0x7553be421a08b702a337a2c2713656138049a9ad” 來(lái)獲取ServiceMap 中綁定了 Issuer 私鑰的 EvidenceSignersDataService 實(shí)例。這樣我們?cè)谡{(diào)用 EvidenceSignersDataService 實(shí)例中的 newEvidence() 方法時(shí),實(shí)例會(huì)使用 Issuer 的私鑰來(lái)發(fā)起交易,如果使用 Alice 私鑰或者其他私鑰,合約則會(huì)返回報(bào)錯(cuò)。



          當(dāng)然,我們也可以直接使用腳手架提供的Bean實(shí)例,結(jié)合raw包中的原生合約Java類(lèi)或Java-SDK組裝交易進(jìn)行合約調(diào)用。完成應(yīng)用的二次開(kāi)發(fā)后,也可以通過(guò)WeBASE-APP-SDK接入到WeBASE應(yīng)用管理中進(jìn)行應(yīng)用的運(yùn)維管理。WeBASE應(yīng)用管理地址:

          https://webasedoc.readthedocs.io/zh_CN/latest/docs/WeBASE-APP-SDK/index.html


            構(gòu)建Jar并運(yùn)行


          在完成基于腳手架的區(qū)塊鏈應(yīng)用的二次開(kāi)發(fā)后,我們就可以通過(guò)腳手架提供的gradle-wrapper工具進(jìn)行項(xiàng)目構(gòu)建。


          # 修改為可執(zhí)行cd demo && chmod +x ./gradlew# 打包./gradlew build -x test# 查看文件ls ./dist


          執(zhí)行"gradlew build -x test"即可構(gòu)建得到一個(gè)dist安裝包,如下圖所示:



          進(jìn)入dist目錄后,查看application.propertiest文件中連接的節(jié)點(diǎn)IP端口正確后,使用"java -jar demo.jar"命令即可運(yùn)行項(xiàng)目,連接節(jié)點(diǎn)成功后會(huì)打印塊高信息如"Chain connect successful. Current block number 261",應(yīng)用成功啟動(dòng)后最后一行日志會(huì)打印如"Started Application in 5.812 seconds"的日志信息。


            即刻使用


          上述優(yōu)化及功能所涉及的最新代碼和技術(shù)文檔已同步更新,歡迎體驗(yàn)和star支持。如需咨詢技術(shù)問(wèn)題,歡迎本公眾號(hào)對(duì)話框回復(fù)【小助手】進(jìn)技術(shù)交流群。


          WeBASE 代碼倉(cāng)庫(kù):
          https://github.com/WeBankFinTech/WeBASE
          WeBASE 代碼倉(cāng)庫(kù)國(guó)內(nèi)鏡像:
          https://gitee.com/WeBank/WeBASE
          WeBASE 技術(shù)文檔:
          https://webasedoc.readthedocs.io/zh_CN/latest
          WeBASE 技術(shù)文檔國(guó)內(nèi)鏡像:
          https://fintech.webank.com/developer/docs/webase


          首次體驗(yàn)WeBASE,可參考一鍵部署文檔:
          https://webasedoc.readthedocs.io/zh_CN/latest/docs/WeBASE/install.html


          向我們報(bào)告問(wèn)題,歡迎提交issue:

          https://github.com/WeBankFinTech/WeBASE/issues




          瀏覽 258
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  欧美,三级黄 | 免费看一级A沽 | 国产www视频 | 亚洲国产一级黄片 | 欧美91 |