一、環境搭建
- 搭建Truffle框架
簡介:這是一個流行的以太坊開發框架,內置了智能合約編譯,連接,部署等功能
- Truffle框架依賴Node,需要使用npm來安裝,首先需要安裝node,npm會同時安裝,在官網下載:Nodejs
輸入命令查看當前版本
node -v
- 接著就可以使用npm安裝Truffle框架了,使用npm安裝Truffle框架,安裝命令:
np install -g truffle
驗證Truffle安裝:
truffle --version
- Ganache
- 在這里我們也要用到Ganache,因為在以太坊上部署和測驗智能合約都是要花費以太幣的,也就是油費(Gas),而Ganache可以在本地創建一個區塊鏈網路來測驗我們的程式,不需要消耗真實的油費,
- Gannache下載路徑:Ganache
- Ganache作業原理:為我們創建一個Ganachi虛擬的區塊鏈網路,給我們分配10個外部賬號(節點),每個賬戶都有100個假以太幣,
- Ganache界面介紹:

ACCOUNTS: 賬號界面,顯示了自動生成所有的賬號及其余額,
BLOCKS: 區塊界面,顯示了再本地區塊鏈網路上挖掘的每一個區塊,及其Gas成本和包含的交易,
TRANSACTIONS: 交易頁面,列出了再本地區塊鏈上發生的所有交易
CONTRACTS: 合約頁面
EVENTS: 事件頁面
LOGS: 日志頁面
-
右上角搜索欄可以搜索本地區塊鏈網路上的區塊或者交易,
-
設定界面:

SERVER: 服務器設定頁面,管理關于網路連接的詳細資訊,比如網路id,埠,主機名和自動挖掘狀態,
ACCOUNTS & KEYS: 賬戶和密鑰頁,設定自動生成賬戶及其余額,
CHAIN 鏈頁,可以設定Gas限制和Gas價格,
高級設定 日志選項設定,比如保存日志檔案和配置詳細輸出的能力,
- solidity代碼
建議使用vs code撰寫,安裝solidity插件,
二、開發步驟
- 初始化專案:
- 首先創建專案目錄,之后進入這個目錄

- 用truffle init初始化這個專案

初始化成功之后我們再點開mydapp這個檔案,可以看到以下幾個檔案:

contracts目錄: 顧名思義,是智能合約目錄,現在里面已經有了一個Migrations.sol檔案,功能是遷移/部署/升級智能合約,
migrations目錄: 遷移檔案,里面的js腳本都是幫助我們將只能合約部署到區塊鏈上的,
test目錄: 測驗代碼目錄,
truffle-config.js檔案 可以在里面配置網路,
2. 添加package.json檔案,這是npm用來管理包的組態檔,內容:
{
"name": "ethereum-demo",
"version": "1.0.0",
"description": "以太坊demo",
"main": "truffle-config.js",
"directories": {
"test": "test"
},
"scripts": {
"dev": "lite-server",
"test": "echo \"Error: no test specified\" && sexit 1"
},
"author": "kevinhwu@qikegu.com",
"license": "ISC",
"devDependencies": {
"@truffle/contract": "^4.0.33",
"dotenv": "^8.1.0",
"lite-server": "^2.5.4",
"truffle-hdwallet-provider": "^1.0.17"
}
}
- package.json概述:每個專案的根目錄下面,一般都有一個package.json檔案,定義了這個專案所需的各種模塊,以及專案的配置資訊(比如:名稱,版本,許可證等元素),npm install命令,根據這個組態檔,自動下載所需要的模塊,也就是專案所需要的運行和開發環境,
關于package.json的詳細解釋,可參考:packeage.json詳細欄位
- 添加智能合約源檔案
- 在contracts目錄下創建一個新檔案MyContract.sol,給出代碼:
// 宣告solidity版本
pragma solidity ^0.5.0;
// 宣告智能合約MyContract,合約的所有代碼都包含在花括號中,
contract MyContract {
// 宣告一個名為value的狀態變數
string value;
// 合約建構式,每當將合約部署到網路時都會呼叫它,
// 此函式具有public函式修飾符,以確保它對公共介面可用,
// 在這個函式中,我們將公共變數value的值設定為“myValue”,
constructor() public {
value = "myValue";
}
// 本函式讀取值狀態變數的值,可見性設定為public,以便外部帳戶可以訪問它,
// 它還包含view修飾符并指定一個字串回傳值,
function get() public view returns(string memory ) {
return value;
}
// 本函式設定值狀態變數的值,可見性設定為public,以便外部帳戶可以訪問它,
function set(string memory _value) public {
value = _value;
}
}
- 這個智能合約的功能是可以獲取值和設定值,這段代碼是用solidity寫的,solidity基礎教程可以參考我的solidity文章,在這里就不掛鏈接了,主頁里就有,
- 使用truffle compile命令編譯專案:

- 編譯完成之后,我們再打開專案的根目錄,可以發現多了一個build目錄

這個檔案是智能合約的ABI檔案,代表“抽象二進制介面”,主要有以下兩個作用: - 作為可以在以太坊虛擬機(EVM)運行的可執行檔案
- 包含智能合約函式的JSON表示,以便外部客戶端呼叫這些函式
- 更新組態檔
修改網路配置連接到本地區塊鏈網路(Ganache)
- 打開位于根目錄下的truffle-config.js檔案,修改內容如下:
module.exports = {
networks: {
development: {
host: "127.0.0.1", // ip地址
port: 8545, // 埠
network_id: "*" // Match any network id
}
},
solc: {
optimizer: {
enabled: true,
runs: 200
}
}
}
ip地址,埠號等,應該與Ganache匹配

- 創建遷移腳本
- 在migrations目錄中創建腳本2_deploy_contracts,這個腳本是告訴Truffle如何部署智能合約,一定要標序號,作用是讓Truffle知道它們的執行順序,
var MyContract = artifacts.require("./MyContract.sol");
// 用require將合約賦值給一個MyContract變數
module.exports = function(deployer) {
deployer.deploy(MyContract); // 部署該合約
};
-
執行遷移命令truffle migrate


部署成功,并消耗了以太幣 -
使用truffle console(控制臺)訪問智能合約

控制臺啟動成功
MyContract.deployed().then((instance) => { app = instance })

輸入指令,運行成功
接著試試呼叫get方法,輸入app.get()

呼叫成功,確實顯示出myValue這個值,
我們再試試set方法,是否能改變這個值,首先輸入app.set(‘new Value’),接著再輸入app.get(),結果顯示:

修改成功,
三、總結
雖然只是一個簡單的獲取修改值的合智能合約,但是這也是開發智能合約的簡單步驟,通過這個步驟,修改合約代碼,我們還可以寫出更加復雜的智能合約,這只是一個步驟而已,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/246221.html
標籤:區塊鏈
上一篇:QT簡單繪圖
