FISCO BCOS【初體驗筆記】

飛梭區塊鏈搭建初體驗筆記

    • 環境部署
      • 創建四個節點的飛梭區塊鏈
      • 用的VMware17 centos 7.9 區塊鏈是飛梭2.0用的webase-front
      • Java環境的正確安裝
      • Webase-front搭建
    • 智能合約設計
      • 一點合約調試筆記
    • 智能合約abi文件轉為go文件
    • 后端項目配置
    • 相關工具
    • linux常用命令(防忘記)
    • centos7.9相關
      • 更換國內鏡像源

寫在前面,這是我自己的小筆記,內容記得不全,主要是某些核心的步驟和bug的記錄。暫時沒有這方面深入的打算(純課題組需求),歡迎交流

環境部署

創建四個節點的飛梭區塊鏈

[yuegeyu@localhost fisco]$ bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545

啟動四個節點(注意這個目錄,執行腳本在127.0.0.1下面)

[yuegeyu@localhost 127.0.0.1]$ bash start_all.sh

用的VMware17 centos 7.9 區塊鏈是飛梭2.0用的webase-front

參照官網文檔搭建第一個區塊鏈,

啟動區塊各個節點:bash start_all.sh
同理,停止各個節點則執行stop腳本: bash stop_all.sh

Java環境的正確安裝

jdk-8u201-linux-x64.tar.gz的下載看這個文章

在etc/profile底下的環境變量路徑

export JAVA_HOME=/home/yuegeyu/jdk1.8.0_202
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

在這里插入圖片描述
這個輸出就裝好了

Webase-front搭建

參照官網教程進行搭建
復制fisco/nodes/127.0.0.1當中的認證到webase-front/conf/下,再行啟動,webase-front通過5002端口啟動
這部分直接在虛擬機終端去啟動webase-front(bash start.sh)就會顯示權限不夠,回到遠程這里卻可以。因為遠程是登錄的root的吧,終端沒有使用管理員權限應該。
在這里插入圖片描述

搭建完成后找到虛擬機ip
在這里插入圖片描述
之后關閉centos防火墻
【解決記錄】:視頻中只做了禁用自啟動操作,應該再systemctl stop firewalld一下,通過systemctl status firewalld檢查一下當前防火墻狀態即可
禁用防火墻

systemctl disable firewalld

智能合約設計

示例代碼

// SPDX-License-Identifier: MIT  
pragma solidity ^0.6.10;  
// 開啟 ABIEncoderV2 支持  
pragma experimental ABIEncoderV2;  //solidity版本較低,支持變長數組contract FoodTrace {  struct FoodItem {  uint id;  //食品id  unit無符號整型string name;  //食品名  address producer;  //生產者 address區塊鏈地址string details;  //細節  string[] logisticsRecords; // 物流記錄  bool logisticsRecorded; // 記錄物流信息的狀態  }  address public owner; // 合約的擁有者  uint public logisticsRecordedCount; // 記錄已注冊物流信息的食品數  uint public foodItemCount; // 食品項計數mapping(uint => FoodItem) public foodItems; // 食品項存儲  mapping(address => bool) public logisticsProviders; // 存儲注冊的物流方地址  // 事件定義  event FoodRegistered(uint id, string name, address producer);  event LogisticsUpdated(uint id, string logisticsInfo);  event LogisticsProviderRegistered(address provider); // 新事件  // 構造函數,設置合約的擁有者  constructor() public {  owner = msg.sender; // 設定合約創建者為擁有者  }  // 僅允許擁有者執行某些操作  modifier onlyOwner() {  require(msg.sender == owner, "Only owner can call this function");  _;  }  // 注冊物流方  function registerLogisticsProvider(address _provider) public onlyOwner {  logisticsProviders[_provider] = true; // 注冊物流方  emit LogisticsProviderRegistered(_provider); // 觸發事件  }  // 食品生產方注冊食品  function registerFood(string memory _name, string memory _details) public onlyOwner{  foodItemCount++;  foodItems[foodItemCount] = FoodItem({  id: foodItemCount,  name: _name,  producer: msg.sender,  details: _details,  logisticsRecords: new string[](0), // 初始化物流記錄為空數組  logisticsRecorded: false // 默認未記錄物流信息  });  emit FoodRegistered(foodItemCount, _name, msg.sender);  }  // 物流管理方記錄食品物流信息  function updateLogistics(uint _foodId, string memory _logisticsInfo) public {  require(foodItems[_foodId].id != 0, "Food item does not exist"); // 確保食品存在  require(logisticsProviders[msg.sender], "Not a registered logistics provider"); // 驗證調用者是否是注冊的物流方 require(_foodId <= foodItemCount, "Food ID exceeds the current food item count");//確保輸入的ID不超過當前的foodItemCountlogisticsRecordedCount++;  foodItems[_foodId].logisticsRecords.push(_logisticsInfo); // 添加物流信息  foodItems[_foodId].logisticsRecorded = true; // 設置為已記錄物流信息  emit LogisticsUpdated(_foodId, _logisticsInfo);  }  // 用戶查看食品記錄  function getFoodInfo(uint _foodId) public view returns (string memory, address, string memory, string[] memory, bool) {  require(foodItems[_foodId].id != 0, "Food item does not exist"); // 確保食品存在  require(_foodId <= foodItemCount, "Food ID exceeds the current food item count");//確保輸入的ID不超過當前的foodItemCountFoodItem memory foodItem = foodItems[_foodId];  return (foodItem.name, foodItem.producer, foodItem.details, foodItem.logisticsRecords, foodItem.logisticsRecorded);//返回食品信息和物流狀態  }  
}

一點合約調試筆記

由于添加物流主的函數是限定onlyowner 才能執行,也就是食品從產商yuegeyu(自己起的名兒,部署合約的時候用的賬號),所以需要yuegeyu調用添加物流主的函數才能添加物流主
所以provider部分填寫的是物流主JDwang的哈希地址
在這里插入圖片描述
JDwang成為物流主后擁有添加食品物流的權限
于是可以給包子添加物流信息
在這里插入圖片描述
物流添加后的回執
在這里插入圖片描述

智能合約abi文件轉為go文件

安裝abigen,目的是將合約的abi文件轉換為go文件

期間有一個依賴的bug,可能是相關的設置沒有打開,也可能是需要一個C編譯器CGO
報錯如下:

[root@localhost abigen]# go build
# gopkg.in/olebedev/go-duktape.v3
/opt/go/pkg/mod/gopkg.in/olebedev/go-duktape.v3@v3.0.0-20200619000410-60c24ae608a6/dbgsockettransport.go:14:16: undefined: Context
/opt/go/pkg/mod/gopkg.in/olebedev/go-duktape.v3@v3.0.0-20200619000410-60c24ae608a6/dbgsockettransport.go:16:15: undefined: DebugRequestFunc
/opt/go/pkg/mod/gopkg.in/olebedev/go-duktape.v3@v3.0.0-20200619000410-60c24ae608a6/dbgsockettransport.go:17:15: undefined: DebugDetachedFunc
/opt/go/pkg/mod/gopkg.in/olebedev/go-duktape.v3@v3.0.0-20200619000410-60c24ae608a6/dbgsockettransport.go:31:30: undefined: Context
/opt/go/pkg/mod/gopkg.in/olebedev/go-duktape.v3@v3.0.0-20200619000410-60c24ae608a6/dbgsockettransport.go:33:14: undefined: DebugRequestFunc
/opt/go/pkg/mod/gopkg.in/olebedev/go-duktape.v3@v3.0.0-20200619000410-60c24ae608a6/dbgsockettransport.go:34:15: undefined: DebugDetachedFunc
/opt/go/pkg/mod/gopkg.in/olebedev/go-duktape.v3@v3.0.0-20200619000410-60c24ae608a6/timers.go:11:10: undefined: Context
/opt/go/pkg/mod/gopkg.in/olebedev/go-duktape.v3@v3.0.0-20200619000410-60c24ae608a6/timers.go:30:10: undefined: Context
/opt/go/pkg/mod/gopkg.in/olebedev/go-duktape.v3@v3.0.0-20200619000410-60c24ae608a6/timers.go:37:20: undefined: Context
/opt/go/pkg/mod/gopkg.in/olebedev/go-duktape.v3@v3.0.0-20200619000410-60c24ae608a6/timers.go:63:22: undefined: Context
/opt/go/pkg/mod/gopkg.in/olebedev/go-duktape.v3@v3.0.0-20200619000410-60c24ae608a6/timers.go:63:22: too many errors
[root@localhost abigen]# go env CGO_ENABLED
0
[root@localhost abigen]# go list -m gopkg.in/olebedev/go-duktape.v3
gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6

運行這兩行代碼就解決啦

[root@localhost abigen]# export CGO_ENABLED=1
[root@localhost abigen]# yum install -y gcc  

后端項目配置

項目構建,依賴安裝
1.在項目文件夾下構建項目比如在/demo下執行

go mod init demo
然后
go mod tidy

在這里插入圖片描述

相關工具

MobaXterm連接虛擬機

linux常用命令(防忘記)

查詢ip:ip a
在這里插入圖片描述
文件編輯:vim 文件名
進入編輯模式 : i
保存并退出:先按Esc退出編輯,然后輸入:wq回車后退出
管理員權限:命令前加sudo,或者直接切換管理員身份:su -,然后填寫密碼即可

centos7.9相關

更換國內鏡像源

不更換的話默認的鏡像源無法安裝git、go環境
參照這個筆記更換阿里云鏡像源:https://blog.csdn.net/m0_51691302/article/details/120244799?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79902.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79902.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79902.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

內容社區系統開發文檔

1 系統分析 1.1 項目背景 1.2 需求分析 2 系統設計 2.1 系統功能設計 2.2 數據庫設計 2.2.1 數據庫需求分析 2.2.2 數據庫概念結構設計 2.2.3 數據庫邏輯結構設計 2.2.4 數據庫物理結構設計 2.2.5 數據庫視圖設計 2.2.6 函數設計 2.2.7 存儲過程設計 2.2.8 觸發器…

BigemapPro小技巧:調整線方向及延長線

今天為大家分享兩個 BigemapPro 處理矢量數據的小技巧&#xff0c;分別是調整線方向和延長線要素&#xff0c;掌握這些技巧能夠大幅提升數據處理的效率和準確性。 01 調整線方向 在BigemapPro中&#xff0c;線要素其實是帶有方向屬性的&#xff0c;正常情況下看不出來 但是如果…

nt!MiSessionAddProcess函數分析和nt!MmSessionSpace全局變量的關系

第一部分&#xff1a; 1: kd> g Breakpoint 42 hit nt!MiSessionAddProcess: 80ab2fbe 55 push ebp 1: kd> kc # 00 nt!MiSessionAddProcess 01 nt!MmCreateProcessAddressSpace 02 nt!PspCreateProcess 03 nt!NtCreateProcessEx 04 nt!_KiSystemServic…

2025年消防設施操作員考試題庫及答案

一、判斷題 31.消防用水不作他用的技術措施應每季度進行檢查&#xff0c;若發現故障應及時進行處理。&#xff08;&#xff09; 答案&#xff1a;錯誤 解析&#xff1a;本題考查的是消防水池、高位消防水箱的保養方法。每月檢查消防用水不作他用的技術措施&#xff0c;發現故…

Ray開源程序 是用于擴展 AI 和 Python 應用程序的統一框架。Ray 由一個核心分布式運行時和一組用于簡化 ML 計算的 AI 庫組成

?一、軟件介紹 文末提供程序和源碼下載 Ray開源程序 是用于擴展 AI 和 Python 應用程序的統一框架。Ray 由一個核心分布式運行時和一組用于簡化 ML 計算的 AI 庫組成 二、Ray AI 庫的更多信息 數據&#xff1a;適用于 ML 的可擴展數據集訓練&#xff1a;分布式訓練Tune&…

軟件設計師-軟考知識復習(3)

在磁盤上存儲數據的排列方式會影響I/O服務的總時間。假設每個磁道被劃分成10個物理塊&#xff0c;每個物理塊存放1個邏輯記錄。邏輯記錄R1,R2…R10存放在同一個磁道上&#xff0c;記錄的排列從1到10。 假定磁盤的旋轉速度為10ms/周&#xff0c;磁頭當前處在R1的開始處。若系統…

Unity Editor 擴展:查找缺失的 Image Sprite

在 Unity 開發過程中&#xff0c;缺失的 Sprite 引用&#xff08;特別是在 UI 元素上&#xff09;可能導致程序運行時出現問題&#xff0c;尤其是在使用 Image 組件時。當你擁有多個 Prefab 和大量的 UI 資源時&#xff0c;手動檢查每個 Prefab 是否缺失了 Source Image 變得十…

在VTK中使用VTKCamera

文章目錄 概要Cpp代碼概要 在VTK(Visualization Toolkit)中,vtkCamera 類用于控制三維場景中相機的視角。相機決定了你從哪個角度和位置觀察三維場景。使用 vtkCamera 的一般步驟包括創建相機對象、配置相機參數、將相機設置為渲染器的活動相機,以及更新相機視圖。 Cpp代…

【Docker系列】使用格式化輸出與排序技巧

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

臨床智能體AI與環境感知AI的融合:基于python的醫療自然語言處理深度分析

引言 醫療領域的數智化進程正以前所未有的速度推進,人工智能技術的應用尤為顯著。隨著大型語言模型(LLMs)的迅猛發展,醫療AI已從簡單的輔助工具升級為復雜的智能體系統。臨床智能體AI與環境感知AI的融合代表了醫療AI的最新發展方向,為重塑醫療運營自然語言處理提供了全新…

JAVA SE(9)——多態

1.多態的概念&作用 多態(Polymorphism)是面向對象編程的三大基本特性之一&#xff08;封裝和繼承已經講過了&#xff09;&#xff0c;它允許不同類的對象對同一消息做出不同的響應。具體來說&#xff0c;多態允許基類/父類的引用指向派生類/子類的對象&#xff08;向上轉型…

GPS定位方案

目錄 一、常用的GPS定位方案包括&#xff1a; 二、主流品牌及熱銷型號 三、常用GPS算法及核心邏輯&#xff1a; 一、基礎定位算法 二、高精度算法 三、輔助優化算法 四、信號處理底層算法 四、基本原理&#xff08;想自己寫算法的琢磨一下原理&#xff09; 一、常用的GP…

PCIe - ZCU106(RC) + KU5P(EP) + 固化

目錄 1. 簡介 1.1 Data Mover 1.2 描述符 2. ZCU102 2.1 Ubuntu OS 2.2 USB Host 2.2.1 連接拓撲 2.2.2 設備類型 2.2.3 USB 跳帽設置 2.3 無線網卡 2.4 PCIe Info 2.4.1 Diagram 2.4.2 lspci -tv 2.4.3 lspci -v 2.4.2.1 設備基本信息 2.4.2.2 控制與狀態寄存…

精益數據分析(43/126):媒體網站商業模式的盈利與指標解析

精益數據分析&#xff08;43/126&#xff09;&#xff1a;媒體網站商業模式的盈利與指標解析 在創業和數據分析的學習旅程中&#xff0c;我們不斷探索各種商業模式的奧秘&#xff0c;今天讓我們一同深入《精益數據分析》&#xff0c;聚焦媒體網站商業模式&#xff0c;剖析其盈…

Android數據庫全棧開發實戰:Room+SQLCipher+Hilt企業級應用構建

簡介 在移動應用開發中,數據庫作為數據存儲的核心組件,其安全性和性能對企業級應用至關重要。本文將從零開始,全面講解Android數據庫開發的最新技術,包括Room框架的深度使用、SQLCipher加密數據庫的實現、Hilt依賴注入的集成以及前后端數據同步的完整方案。通過一個加密任…

HarmonyOS 5.0 低時延音視頻開發??

大家好&#xff0c;我是 V 哥。 在HarmonyOS 5.0的開發中&#xff0c;支持低時延音視頻開發&#xff0c;為了確保語法正確&#xff0c; V 哥以下代碼符合HarmonyOS NEXT API 14的規范。為了方便初學者更好入門&#xff0c;V 哥伙同2位小伙伴花了1年時間&#xff0c;搞了三本鴻蒙…

微調大模型如何準備數據集——常用數據集,Alpaca和ShareGPT

微調大模型如何準備數據集——常用數據集,Alpaca和ShareGPT 數據集準備常用數據集自定義數據集AlpacaShareGPT數據集準備 常用數據集 預訓練數據集 Wiki Demo (en)RefinedWeb (en)RedPajama V2 (en)Wikipedia (en)Wikipedia (zh)Pile (en)

2025年OpenAI重大架構調整:資本與使命的再平衡

目錄 前言 一、調整核心&#xff1a;三重架構的重構 1.1 控制權的重新錨定 1.2 營利部門的角色轉型 1.3 資金池的重新配置 二、調整動因&#xff1a;三重矛盾的破解 2.1 資金需求與融資限制的沖突 2.2 商業競爭與使命純度的博弈 2.3 內部治理與外部監管的張力 三、產…

GD32/STM32 ADC/DMA使用指南

首先我們對ADC及DMA的基礎知識作一下簡單介紹。 一、 GD32/STM32 ADC模塊的核心要點 一&#xff09;、ADC基礎特性 ?12位逐次逼近型? GD32/STM32 ADC為12位分辨率&#xff0c;最大量化值為4095&#xff08;對應3.3V參考電壓&#xff09;&#xff0c;支持0-3.3V模擬輸入范…

Linux(十四)進程間通信(IPC),管道

一、進程間通信 &#xff08;一&#xff09;系統介紹進程間通信 進程間通信&#xff08;IPC&#xff09;介紹 小編插入的這篇文章詳細介紹了進程間通信的一些內容&#xff0c;大家可以一起學習。 &#xff08;二&#xff09;進程間通信的方法 1、管道 2、信號量 3、共享…