1.以太坊
以太坊是利用区块链技术开发的通用计算机,简单地说,以太坊=区块链+智能合约,开发者在以太坊上可以开发任意的应用,实现任意的智能合约。从平台的角度来讲,以太坊类似于苹果的应用商店;从技术角度来讲,以太坊类似于一个区块链操作系统。
2.私有链
在以太坊的公有链上部署智能合约、发起交易需要花费以太币。而通过修改配置,可以在本机搭建一套以太坊私有链,因为与公有链没关系,既不用同步公有链庞大的数据,也不用花钱购买以太币,很好地满足了智能合约开发和测试的要求,开发好的智能合约也可以很容易地切换接口部署到以太坊公有链上。
3.环境搭建
3.1 以太坊客户端
以太坊客户端用于接入以太坊网络,进行账户管理、交易、挖矿、智能合约相关的操作。目前有多种语言实现的客户端,常用的有 Go 语言实现的 go-ethereum 客户端 Geth,支持接入以太坊网络并成为一个完整节点,也可作为一个 HTTP-RPC 服务器对外提供 JSON-RPC 接口。
CentOS7上源码部署:
rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
yum install golang -y
git clone https://github.com/ethereum/go-ethereum
cd go-ethereum
make geth
环境变量设置:
vi /etc/profile
+export PATH="$JAVA_HOME/bin:$KAFKA_HOME/bin:$MAVEN_HOME/bin:$PATH:/usr/local/share/scala/bin:/data/tools/go-ethereum/build/bin"
source /etc/profile
测试安装是否成功:geth version
3.2 智能合约编译器
以太坊支持两种智能合约的编程语言:Solidity。Solidity 语法类似 JavaScript,它编译器 solc 可以把智能合约源码编译成以太坊虚拟机 EVM 可以执行的二进制码。
现在以太坊提供更方便的在线 IDE:Remix。 https://remix.ethereum.org, 使用 Remix,免去了安装 solc 和编译过程,它可以直接提供部署合约所需的二进制码和 ABI。
部署:
安装cmake
wget https://cmake.org/files/v3.10/cmake-3.10.2.tar.gz
tar zxvf cmake-3.10.2.tar.gz
cd cmake-3.10.2
./bootstrap
make
make install
部署solidity
git clone --recursive https://github.com/ethereum/solidity.git
cd solidity/
./scripts/build.sh
3. 3 安装solc
CentOS7通过yum安装nodejs和npm
curl --silent --location https://rpm.nodesource.com/setup_5.x | bash -
yum install -y gcc-c++ make
yum install -y nodejs
npm install -g solc
如下命令验证是否安装成功:solcjs --help
4. 私有链搭建
4.1
要运行以太坊私有链,需要定义自己的创世区块,创世区块信息写在一个 JSON 格式的配置文件中。例如genesis.json。其内容:
独立的区块链网络ID chainID: 网络 ID 在连接到其他节点的时候会用到,以太坊公网的网络 ID 是 1,为了不与公有链网络冲突,运行私有链节点的时候要指定自己的网络 ID。不同 ID 网络的节点无法相互连接。
当前挖矿难度: difficulty
区块Gas消耗限制: gasLimit

参数综述:

mixhash

与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。.

nonce

nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。

difficulty

设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度

alloc

用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。

coinbase

矿工的账号,随便填

timestamp

设置创世块的时间戳

parentHash

上一个区块的hash值,因为是创世块,所以这个值是0

extraData

附加信息,随便填,可以填你的个性信息

gasLimit

该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。

在Geth1.6+中,以太坊提供了一个生成创世块的向导工具:puppeth。并且提供了更适合在私有链中使用的 Clique PoA 共识算法。
准备好创世区块配置文件后,需要初始化区块链,将上面的创世区块信息写入到区块链中。
git clone https://github.com/littleredhat1997/Ethereum.git
cd Ethereum
mkdir ethereum
cp genesis.json ethereum/
cd ethereum
geth init genesis.json [geth --datadir data0 init genesis.json,指定目录将在此目录下生成./ethereum,否则在当前用户的根目录下生成]
其中 geth/chaindata 中存放的是区块数据,keystore 中存放的是账户数据
4.2 启动私有链节点
geth --rpc --rpcapi personal,db,eth,net,web3 --networkid 666666 console
[又:geth --identity "TestNode" --rpc --rpcport "8545" --datadir data0 --port "30303" --nodiscover console]

geth参数含义如下:

identity

区块链的标示,随便填写,用于标示目前网络的名字

init

指定创世块文件的位置,并创建初始块

datadir

设置当前区块链网络数据存放的位置

port

网络监听端口

rpc

启动rpc通信,可以进行智能合约的部署和调试

rpcapi

设置允许连接的rpc的客户端,一般为db,eth,net,web3

networkid

设置当前区块链的网络ID,用于区分不同的网络,是一个数字

console

启动命令行模式,可以在Geth中执行命令

进入交互式的 JavaScript 执行环境:
在这个环境里也内置了一些用来操作以太坊的 JavaScript 对象,可以直接使用这些对象。这些对象主要包括:
eth:包含一些跟操作区块链相关的方法;
net:包含一些查看p2p网络状态的方法;
admin:包含一些与管理节点相关的方法;
miner:包含启动&停止挖矿的一些方法;
personal:主要包含一些管理账户的方法;
txpool:包含一些查看交易内存池的方法;
web3:包含了以上对象,还包含一些单位换算的方法。
进入以太坊 Javascript Console 后,就可以使用里面的内置对象做一些操作,这些内置对象提供的功能很丰富,比如查看区块和交易、创建账户、挖矿、发送交易、部署智能合约等。
常用命令有:
personal.newAccount():创建账户;
personal.unlockAccount():解锁账户;
eth.accounts:枚举系统中的账户;
eth.getBalance():查看账户余额,返回值的单位是 Wei(Wei 是以太坊中最小货币面额单位,类似比特币中的聪,1 ether = 10^18 Wei);
eth.blockNumber:列出区块总数;
eth.getTransaction():获取交易;
eth.getBlock():获取区块;
miner.start():开始挖矿;
miner.stop():停止挖矿;
web3.fromWei():Wei 换算成以太币;
web3.toWei():以太币换算成 Wei;
txpool.status:交易池中的状态;
admin.addPeer():连接到其他节点;
4.3 命令行创建钱包
# 查询用户
eth.accounts
# 创建用户
personal.newAccount("password")
# 查询余额
eth.getBalance(eth.accounts[0])
并开始挖矿:miner.start(1) # 一个线程挖矿,多线程会很卡
挖到一个区块会奖励5个以太币,挖矿所得的奖励会进入矿工的账户,这个账户叫做 coinbase,默认情况下 coinbase 是本地账户中的第一个账户,可以通过 miner.setEtherbase() 将其他账户设置成 coinbase。
4.4 利用geth部署智能合约
编写智能合约文件crowdfunding.sol
编译智能合约,获得编译后的EVM二进制码:solcjs --bin crowdfunding.sol
再用solc获取智能合约的JSON ABI(Application Binary Interface),其中指定了合约接口,包括可调用的合约方法、变量、事件等:solcjs --abi crowdfunding.sol
回到Geth的控制台,用变量code和abi记录上面生成的两个文件中的内容,注意在code前加上0x前缀。
code="0x"(二进制文件内容)
abi="(abi文件内容)"
首先解锁账户:personal.unlockAccount(eth.accounts[0])
发送部署合约的交易:
crowdfundingContract = web3.eth.contract(abi)
contract = crowdfundingContract.new({from:eth.accounts[0],data:code,gas:1000000})
此时记下本交易的编码,如下此行:
contract=0xF0093B3c149c2F901a588bAe1152F6dBd1482725
使用miner.start() 命令开始挖矿,一段时间后交易会被确认,随新区块进入区块链。

智能合约的运行原理
智能合约是部署在区块链的代码,区块链本身不能执行代码,代码的执行是在本地的EVM中,实际上,部署在区块链上代码是能够在本地产生原智能合约代码的代码,可以理解区块链为一个数据库,而客户端从数据库中读取了存储的运行代码,并在本地运行后,将结果写入到了区块链这个数据库中。

5. 开发简单的业务应用
git clone https://github.com/littleredhat1997/CrowdFunding
进入目录crowdfunding\src\main\resources,修改文件config.properties,修改如下变量:
# 钱包密码
password=账户密码(password)
# 钱包路径
path=/root/.ethereum/keystore/UTC--2018-01-23T09-53-25.204779020Z--eeddb52b2dabb9a94a69c4d8d18bcb4875c618c0
# 合约二进制
binary=0x(二进制文件内容)
# 合约地址
address=0xF0093B3c149c2F901a588bAe1152F6dBd1482725(刚刚记下的那行contract编码)
进入项目主目录:
mvn clean install -Dmaven.test.skip=true
将war文件放入Tomcat的webapp目录下,启动Tomcat。在应用运行时,记得持续挖矿。

术语说明

术语   说明
ABI Application Binary Interface,应用二进制接口 其中指定了合约接口,包括可调用的合约方法、变量、事件等。
DApp Decentralized App,去中心化的应用程序 基于智能合约的应用称为去中心化的应用程序。
EVM Ethereum Virtual Machine,以太坊虚拟机 以太坊智能合约的运行环境。
Gas (消耗的)汽油 在以太坊上发起交易、部署合约和调用合约都要消耗一定量的以太币,这些消耗的以太币称为 Gas。
Geth - 以太坊客户端 go-ethereum,使用 Go 语言编写,是最常用的以太坊客户端之一。
Solidity - 以太坊智能合约的一种编程语言,类似 JavaScript。
Remix IDE https://remix.ethereum.org 基于浏览器的 Solidity 集成开发环境,在浏览器中编写和调试智能合约。

区块链以太坊应用总结相关推荐

  1. 【区块链-以太坊】5 Ubuntu下truffle ganache安装及使用

    [区块链-以太坊]5 Ubuntu下truffle & ganache安装及使用 1 truffle安装 1)输入sudo npm install -g truffle 2)将truffle复 ...

  2. 区块链-以太坊学习资料汇总

    最近一段时间以来,对区块链的底层研究和基于区块链的应用开发已经越来越火热了.机缘巧合,目前我也在进行区块链方面的开发,在之后的博客中,我会和大家一起分享区块链开发中的酸甜苦辣.今天我先来对收藏区块链- ...

  3. 8支团队正在努力构建下一代区块链以太坊Ethereum 2.0

    2019独角兽企业重金招聘Python工程师标准>>> "我们不想在构建 Ethereum 2.0时重新造轮子." 谈到开发人员为 Ethereum 区块链进行两 ...

  4. 可编程区块链以太坊的未来

    区块链的火热就不用说了,回看一下Vinay Gupta 2015年发表的文章<内容可编程的区块链:以太坊的未来>,感受一下先行者的思想. 到本文结束时,你将了解一般的区块链(特别是下一代区 ...

  5. 回看2015年是如何描述区块链以太坊的未来

    区块链的火热就不用说了,回看一下Vinay Gupta 2015年发表的文章<内容可编程的区块链:以太坊的未来>,感受一下先行者的思想. 到本文结束时,你将了解一般的区块链(特别是下一代区 ...

  6. 回望Vinay2015年的文章:内容可编程的区块链——以太坊的未来

    2019独角兽企业重金招聘Python工程师标准>>> 区块链的火热就不用说了,回看一下Vinay Gupta 2015年发表的文章<内容可编程的区块链:以太坊的未来>, ...

  7. 上下文可编程区块链——以太坊的未来

    区块链的火热就不用说了,回看一下Vinay Gupta 2015年发表的文章<内容可编程的区块链:以太坊的未来>,感受一下先行者的思想. 到本文结束时,你将了解一般的区块链(特别是下一代区 ...

  8. 区块链以太坊以及hyperledger总结

    https://learnblockchain.cn/ 1.什么是智能合约?它有什么特点? 就是具有交互能力而且能够在区块链中传递的合约 一个由计算机代码控制的以太币账户 特点: 公开透明.能即时与区 ...

  9. 区块链 以太坊 区块结构详解

    一.结构 区块由两部分组成,分别是 区块头(header) 区块体(body) 1. 结构图 2. 区块头(header) 区块头存储了区块的元信息,用来对区块内容进行一些标识,校验,说明等. 通用字 ...

  10. 区块链以太坊五大开发工具,你喜欢哪个?

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 以太坊(Ethereum)是运行智能合约的最受欢迎的分布式平台之一.因为虚拟货币近年来的发展,以太坊以区块链为基础引起广 ...

最新文章

  1. Java学习总结:20
  2. aptana手动配置python环境_Aptana Studio 3中通过Auto Config配置PyDev中Python出错
  3. php数据库查询中文方块,解决Python数据可视化中文部分显示方块问题
  4. linux大小写敏感 mysql_MySQL大小写敏感问题和命名规范
  5. [iOS] UITextField隐藏软键盘心得(隐藏自身软键盘、点击Return自动转到下个文本框、轻触背景隐藏软键盘)...
  6. 在64位系统上注册并使用32位的COM组件
  7. 现代软件工程 作业 个人项目
  8. linux shell 豆瓣,用Linux shell脚本爬取豆瓣邮箱
  9. Ubuntu su: authentication failure切换用户失败
  10. Docker 修改容器名称
  11. 安卓 页面跳转_挑战安卓和iOS!华为:鸿蒙覆盖1亿台设备,明年出鸿蒙手机
  12. 将Nginx添加到系统服务
  13. cacti 文件服务器,免费的服务器和网络监控工具-CactiEZ
  14. 高版本node,无法编译程序,删除所有文件
  15. pytest tox.ini使用
  16. 计算机病毒可通过光盘传播吗,光盘能传播病毒吗
  17. 大智能时代,未来人工智能发展新趋势
  18. 从阿里云下载kubeadm rpm格式安装包到本地离线安装
  19. win10右键菜单发送到的选项为空怎么解决
  20. 从文艺青年到2B青年,轻博客的N种玩法

热门文章

  1. 做一个浏览器上的Excel(一)
  2. 以视频搜视频?智能视频检索或将诞生新曙光
  3. html %3ca%3e可以传参吗,跨站脚本执行漏洞详解-恶魔上传
  4. web攻击有哪些方式?小白需要知道的几种攻击方式
  5. 巧用Mapinfo软件SQL查询功能
  6. 网友潜伏房产中介 曝光二手房买卖潜规则
  7. mac下复制、剪切文件,获得文件路径
  8. istio1.0.4快速部署与体验
  9. PhpStorm2020 + phpstudyV8 +XDebug
  10. FPGA驱动SPI接口的LCD(三)——LCD的初始化