用Solidity在Truffle上構建一個HelloWorld智慧合約
原文地址:石匠的 blog
Truffle 的環境安裝在前文已經整理,這次用 Solidity 在 Truffle 寫一個 HelloWorld 以太坊智慧合約,並在 testrpc 上進行測試。當前的軟體版本資訊如下:
Truffle v4.1.11 (core: 4.1.11)
Solidity v0.4.24 (solc-js)
專案建立
開啟 Mac 的 terminal 終端,建立一個新目錄,並 truffle 專案初始化。
> mkdir HelloWorld
> cd HelloWorld
> truffle init
初始化好之後的目錄結構如下:
HelloWorld
|____truffle.js
|____migrations
| |____1_initial_migration.js
|____test
|____contracts
| |____Migrations.sol
|____truffle-config.js
撰寫 HelloWorld 合約
HelloWorld 智慧合約測試程式碼如下:
pragma solidity ^0.4.24;
contract HelloWorld{
address creator;
string message;
constructor()
{
creator = msg.sender;
}
function say() constant returns (string)
{
return message;
}
function setMessage(string _newMsg)
{
message = _newMsg;
}
/**********
Standard kill() function to recover funds
**********/
function kill()
{
if (msg.sender == creator)
selfdestruct(creator); // kills this contract and sends remaining funds back to creator
}
}
儲存到 contracts 目錄下的 HelloWorld.sol 檔案中。合約儲存了一個 message 變數,用來儲存設定的資訊。合約提供了 message 的設定和獲取介面 setMessage 和 say,測試的時候可以呼叫者 2 個介面進行測試確認。
編譯
在 HelloWorld 目錄下:
> truffle compile
compile 只會編譯更新過的合約檔案,如果有多個檔案,且想全部編譯,可以使用 truffle compile-all.
執行測試
1.啟動 testrpc
通過 testrpc 可以很方便的進行測試,開啟一個新的 terminal 終端執行命令:
> testrpc
預設會在 localhost:8545 進行合約部署的監聽。
2.修改合約配置
因為合約是要發給 testrpc 做執行,需要再 HelloWorld/truffle.js 中配置 testrpc 的地址資訊,如下:
module.exports = {
networks: {
development: {
host: "localhost",
port: 8545,
network_id: "*" // Match any network id
}
}
};
3.新增遷移資訊 (migrate)
需要配置告訴 truffle 遷移哪些合約到 testrpc,新增一個檔案 HelloWorld/migrations/2_deploy_contracts.js
var HelloWorld = artifacts.require("./HelloWorld.sol");
module.exports = function(deployer) {
deployer.deploy(HelloWorld);
};
執行遷移命令,部署合約到 testrpc:
> truffle migrate
同樣的,這個命令只會遷移修改過的合約,如果有異常錯誤或者需要手動全部重新遷移,可以執行 truffle migrate --reset.
遷移成功後在 testrpc 視窗也會有響應的提示資訊,包括函式呼叫和事務執行資訊等。
4.命令列測試合約
通過 console 可以方便的測試合約的開發介面是否訪問正常,執行命令:
> truffle console
執行成功後進入到 truffle 的命令列程式中,可以通過以下命令來測試合約介面,設定資訊:
> HelloWorld.deployed().then(i=>i.setMessage("Hello world!"));
HelloWorld.deployed() 返回了部署成功的 HelloWorld 合約的 Promise 物件,然後通過 then() 呼叫 setMessage 介面。執行成功後可以得到類似如下的資訊:
{ tx:
'0xbb506d5a8ad80ae431fcffc326e4910dcd272bba1fe458c8c83b8eefd08b7de1',
receipt:
{ transactionHash:
'0xbb506d5a8ad80ae431fcffc326e4910dcd272bba1fe458c8c83b8eefd08b7de1',
transactionIndex: 0,
blockHash:
'0x8dd58db70ad49d2741a9d36a6e5f77e5e6c0e19f09935df5cd21e52762472491',
blockNumber: 16,
gasUsed: 43459,
cumulativeGasUsed: 43459,
contractAddress: null,
logs: [],
status: 1 },
logs: [] }
因為 setMessage 是一個設定介面,會修改區塊鏈的狀態,所以他是一個 Transaction。然後呼叫 say 介面測試是否設定成功:
> HelloWorld.deployed().then(i=>i.say());
返回結果是:
"Hello world!"
表面前面的 setMessage 設定有效,且 say 介面訪問正常。
小結
以上是用 solidity 寫的很簡單的智慧合約測試程式,並部署在 truffle 和 testrpc 測試驗證成功,功能雖然簡單,但是走通了以太坊智慧合約的基本開發測試流程,以後可以基於此繼續做擴充套件。
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 區塊鏈2.0以太坊智慧合約solidity之helloworld區塊鏈Solid
- 如何建立一個Solidity智慧合約專案? - OliverSolid
- 智慧合約從入門到精通:用Solidity開發一個“Hello World”Solid
- solidity投票智慧合約程式碼Solid
- 用solidity語言開發代幣智慧合約Solid
- 智慧合約語言 Solidity 教程系列8 - Solidity APISolidAPI
- 智慧合約語言 Solidity 教程系列8 – Solidity APISolidAPI
- 3.7 智慧合約與solidity簡介Solid
- 使用truffle部署以太坊智慧合約到區塊鏈區塊鏈
- 智慧合約從入門到精通:Solidity AssemblySolid
- Solidity開發指南(六):合約結構解析Solid
- 智慧合約Dapp專案如何開發構建?智慧合約開發原始碼示例APP原始碼
- 智慧合約從入門到精通:Solidity組合語言Solid組合語言
- 在 NEO 上使用智慧合約釋出 NFT
- 智慧合約語言Solidity的最佳VSCode 外掛SolidVSCode
- Solidity的Truffle框架實戰Solid框架
- 快速上手第一個智慧合約
- Grayscale:在智慧合約平臺上變聰明
- 智慧合約最佳實踐 之 Solidity 編碼規範Solid
- 以太坊智慧合約開發第六篇:truffle開發框架框架
- Solidity案例詳解(一)存錢罐合約Solid
- Polygon馬蹄鏈在以太坊上的智慧合約開發應用Go
- 3.06 EOS智慧合約(上)
- Solidity語言學習筆記————31、智慧合約的基本檔案結構概述Solid筆記
- 小白的第一個HelloWord智慧合約
- 智慧合約語言 Solidity 教程系列1 – 型別介紹Solid型別
- 智慧合約語言 Solidity 教程系列9 - 錯誤處理Solid
- solidity智慧合約開發工具Atom及其外掛安裝Solid
- 用eclipes寫第一個HelloWorld
- 智慧合約ARB鏈上質押挖礦系統DAPP開發解析/Solidity編寫APPSolid
- DAPP代幣預售/智慧合約/NFT質押合約系統開發/Solidity編寫APPSolid
- 區塊鏈之--2小時構建以太坊智慧合約區塊鏈
- 編寫一個簡單的智慧合約
- Truffle 配置本地 ETH 系合約開發環境開發環境
- 如何用web3j編譯solidity智慧合約原始碼Web編譯Solid原始碼
- 以太坊智慧合約開發第五篇:字串拼接—Solidity字串Solid
- Solidity之旅(十)OOP-抽象合約SolidOOP抽象
- 以太坊中如何獲取另外一個智慧合約部署的合約地址?