區塊鏈技術在頂級技術中佔據主導地位的主要緣由在於其去中心化。雖然區塊鏈的主要目的是在沒有中心的狀況下維護交易記錄,但爲了實現自動化,智能合約被引入。那麼在寫完智能合約以後呢?在本文的這個以太坊智能合約教程中,咱們將瞭解如何使用Truffle Ethereum和以太坊專用網絡來執行智能合約。php
咱們將在以太坊智能合約教程中查看如下主題:java
區塊鏈遵循的是「沒有中央權力機構」,這就是智能合約引入的緣由。但你有沒有想過如何使用智能合約?那麼,在以太坊智能合約的這一部分中,我將解釋保險流程中智能合約的使用案例。node
讓咱們考慮一個航班延誤保險的例子。假設你想要從出發地A到目的地C進行飛行,但你沒有直接飛行。那麼,你決定經過B來起色。如今,你的路線將從A到B,而後從B到C,其中B是機場,你將更改航班。不幸的是,從A到B以及從B到C的航班之間沒有太大的時間差距。因此,若是有任何問題,一旦從A到B的航班延誤,那麼你將錯過從B到C的航班。意識到這一點後,爲了不重大損失,你可能須要一個航班延誤保險。python
如今,若是你從A到B的航班延誤(這將使你錯過從B到C的航班),你將得到保險金額。這是正常的狀況,若是你的航班延誤,你能夠申請保險。而後,有人會覈實並批准保險,最後,你將得到你的保險金額。但這是一個漫長的過程。android
談到金融交易,特別是當你拿錢時,「越快越好」,不是嗎?那麼,讓咱們看看智能合約如何增強保險流程。智能合約是數字合約,在知足特定條件時自動執行。若是航班延誤,能夠編寫智能合約以向選擇航班延誤保險的人支付保險金額。所以,當航班延誤而且系統記錄此延遲時,保險將當即支付。程序員
OK!保險金額在幾秒鐘內支付。這就是智能合約如何簡單快速地實現流程。web
你已在上面的示例中看到智能合約如何增強財務流程。除快速交易外,智能合約還有更多好處。在這裏,我列出了使用智能合約的其餘一些好處:mongodb
如今,咱們知道如何使用智能合約來讓世界變得更快,讓咱們親身體驗這個以太坊智能合約教程。npm
對於以太坊智能合約教程,咱們須要5個重要的應用程序:編程
NodeJS是一個用於構建服務器應用程序的JavaScript框架。因爲咱們使用的是專用網絡,所以NodeJS能夠輕鬆構建網絡應用程序。
要安裝Nodejs,請在終端中運行如下命令:
$ sudo apt-get install nodejs
NPM表明Node Package Manager,用於運行Nodejs應用程序。
要安裝NPM,請在終端中運行如下命令:
$ sudo apt-get install npm
以太坊是一個基於開源和公共區塊鏈的分佈式計算平臺,用於構建去中心化應用程序。
要安裝以太坊,請在終端中運行如下命令:
$ sudo apt-get install software-properties-common $ sudo add-apt-repository -y ppa:ethereum/ethereum $ sudo apt-get update $ sudo apt-get install ethereum
Truffle是以太坊Blokchains的開發環境,測試框架和資產管道。
要安裝Truffle,請在終端中運行如下命令:
$ npm install -g truffle
Solidity是一種用於編寫智能合約的編程語言。要在咱們的系統上運行智能合約,咱們必須安裝Solidity Compiler。
要安裝Solidity Compiler,請在終端中運行如下命令:
$ sudo npm install -g solc
Genesis Block是Blockchain的起點,咱們須要一個genesis文件來啓動Blockchain。在以太坊智能合約的這一部分中,咱們將編寫一個Genesis文件並對其進行配置以容許咱們運行智能合約。
讓咱們首先建立一個新目錄,而後在該目錄中建立genesis文件:
$ mkdir ethereum-network $ cd ethereum-network $ nano genesis.json
如今,在genesis.json文件中輸入如下行:
{ "config": { "chainId": 2019, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc": {}, "difficulty" : "200" "gasLimit" : "99999999999999" }
保存並退出。
在此Etheruem智能合約教程中,咱們將在專用網絡上部署以太坊智能合約。所以,要啓動此網絡,咱們將使用如下命令:
$ geth --datadir ./dataDir init ./genesis.json
$ geth --port 4321 --networkid 1234 --datadir=./dataDir --rpc --rpcport 8543 --rpcaddr 127.0.0.1 --rpcapi "eth,net,web3,personal,miner"
在進一步討論以前,讓我解釋一下上面命令中使用的一些重要參數:
Geth控制檯是咱們能夠與以太坊私人區塊鏈互動的控制檯。要將Geth鏈接到以太坊私有區塊鏈,請打開一個新終端並運行如下命令:
$ geth attach http://127.0.0.1:8543
如今,咱們在Geth控制檯中,咱們能夠與區塊鏈進行通訊。
要進行任何交易,咱們須要一個賬戶。在以太坊的智能合約教程的這一部分中,咱們將看到如何從Geth控制檯建立一個新的以太坊賬戶。
按照目前爲止的步驟,咱們已經在Geth控制檯中。要建立新賬戶,請在Geth控制檯中運行如下命令:
> personal.newAccount('seedphrase')
將seedphrase替換爲你要爲此賬戶設置的密碼。
咱們建立了一個新賬戶,但此賬戶沒有ether。咱們須要開始採礦。要開始挖掘,咱們須要先解鎖賬戶。讓咱們解鎖賬戶並開始挖掘。
> personal.unlockAccount(web3.eth.coinbase, "seedphrase") > miner.start()
隨着採礦不斷髮生,一些ether將被存入該帳戶。
注意:這些ether是虛擬ether,沒有實際價值。
要檢查賬戶中的ether餘額,咱們將運行如下命令:
web3.fromWei(eth.getBalance(eth.coinbase), "ether")
當你按期運行此命令時,你將看到因爲採礦而致使ether增長。
要中止挖掘,請運行如下命令:
> miner.stop()
如今咱們已經準備好了咱們的私人區塊鏈,咱們將看到如何使用Truffle建立以太坊智能合約。在本教程中,咱們將建立一個簡單的「Hello World」以太坊智能合約。
首先,讓咱們首先建立一個新目錄來存儲Truffle項目。而後在該目錄中,咱們將建立一個新的Truffle項目。打開一個新終端並運行如下命令:
$ mkdir truffle $ cd truffle $ truffle init
truffle init命令將建立Truffle項目所需的全部必要文件。
如今咱們已準備好部署以太坊智能合約的全部內容,讓咱們編寫一個「Hello World」智能合約。
全部合約都應寫在contracts
目錄中。 咱們將切換到此目錄並建立名爲HelloWorld.sol
的合約,並在此文件中添加如下行:
pragma solidity ^0.4.15; contract HelloWorld { string public message; function Hello() public{ message = "Hello World!"; } }
就是這個!可是這個智能合約不能單獨執行。咱們將不得不爲它作一些配置。
要遷移咱們的智能合約,咱們必須在truffle
目錄的migrations
目錄中添加一個文件。在這個目錄中,咱們將添加一個名爲2_deploy_contracts.js
的文件,其中包含如下內容:
var HelloWorld = artifacts.require("./HelloWorld.sol"); module.exports = function(deployer) { deployer.deploy(HelloWorld); };
保存並退出。
要在咱們的網絡上運行Truffle,咱們須要編輯truffle
目錄中的truffle.js
文件。打開此文件並進行如下輸入:
module.exports = { rpc: { host:"localhost", port:8543 }, networks: { development: { host: "localhost", port: 8543, network_id: "*", from: "0xfa2361236b5ac8079cb6cf250e5284922ed9ba9a", gas: 20000000 } } };
注意:將from
地址替換爲你在上一步中建立的賬戶的地址。
在以太坊智能合約教程的最後一節中,咱們將瞭解如何在咱們的以太坊專用網絡上部署咱們的Hello World
智能合約。
在咱們執行智能合約以前,咱們必須首先將其編譯並部署到咱們的以太坊專用網絡。咱們將使用如下命令執行此操做:
$ truffle compile
如今,咱們必須解鎖咱們的賬戶並開始挖掘。使用Geth控制檯返回終端並運行如下命令:
> personal.unlockAccount(web3.eth.coinbase) > miner.start()
而後,返回到具備truffle
做爲當前工做目錄的終端並運行如下命令:
$ truffle migrate
等待部署完成。
要執行Hello World
智能合約,咱們必須進入Truffle控制檯。運行如下命令來執行此操做:
$ truffle console
你如今將在Truffle控制檯。要執行智能合約,請運行如下命令:
> var first_contract > HelloWorld.deployed().then(function(instance) { first_contract = instance; }) > dApp.message.call()
恭喜!你已經建立了第一個以太坊智能合約並執行了它。我但願這篇以太坊智能合約教程可以提供信息,並幫助你瞭解如何執行以太坊智能合約。如今,繼續嘗試編寫其餘智能合約並執行它。
若是你想學習區塊鏈並在Blockchain Technologies創建職業生涯,那麼請查看咱們分享的一些以太坊區塊鏈相關的交互式在線編程實戰教程:
- java以太坊開發教程,主要是針對java和android程序員進行區塊鏈以太坊開發的web3j詳解。
- python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
- php以太坊,主要是介紹使用php進行智能合約開發交互,進行帳號建立、交易、轉帳、代幣開發以及過濾器和交易等內容。
- 以太坊入門教程,主要介紹智能合約與dapp應用開發,適合入門。
- 以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
- ERC721以太坊通證明戰,課程以一個數字藝術品創做與分享DApp的實戰開發爲主線,深刻講解以太坊非同質化通證的概念、標準與開發方案。內容包含ERC-721標準的自主實現,講解OpenZeppelin合約代碼庫二次開發,實戰項目採用Truffle,IPFS,實現了通證以及去中心化的通證交易所。
- C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括帳戶管理、狀態與交易、智能合約開發與交互、過濾器和交易等。
匯智網原創翻譯,轉載請標明出處。這裏是以太坊智能合約之如何執行智能合約?