区块链技术在顶级技术中占据主导地位的主要缘由在于其去中心化。虽然区块链的主要目的是在没有中心的状况下维护交易记录,但为了实现自动化,智能合约被引入。那么在写完智能合约以后呢?在本文的这个以太坊智能合约教程中,咱们将了解如何使用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的以太坊应用,包括帐户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
汇智网原创翻译,转载请标明出处。这里是以太坊智能合约之如何执行智能合约?