以太坊私链与智能合约部署学习(博主修正篇)—— 第一篇

以太坊(Ethereum)自2017年5月诞生以来,发展迅速。作为了一个小白,博主初步打算上个车,过个瘾。那什么是以太坊?请参看度娘的解释(https://baike.baidu.com/item/%E4%BB%A5%E5%A4%AA%E5%9D%8A/20865117?fr=aladdin)。

事物是个新事特,也是个好东西,但资料不多,所以小白博主也只能慢慢找寻资料,慢慢记录自己填坑的过程。

 第一篇的主题是:以太坊私链的创建:)

   一、配置环境与软件安装

1、安装geth

以下的资料来自:http://8btc.com/article-4537-1.html

1.1 安装 geth

MAC OSX

    首先确保已安装 homebrew,没有安装过的可以在命令行下执行/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 进行安装
    brew tap ethereum/ethereum
    brew install ethereum

WINDOWS

    访问 https://geth.ethereum.org/downloads/
    下载并安装 Geth for Windows

LINUX

    git clone https://github.com/ethereum/go-ethereum
    sudo apt-get install -y build-essential golang
    cd go-ethereum
    make geth

在这里,我们约定,go-ethereum的绝对路径为:/alidata/go-ethereum。

如果你觉得按照上面的命令能顺利执行,那就图森破了。这里有两点需要注意:

首先:千万选用ubuntu而不是centos,各种库无法编译,单单填centos依赖库的坑都能把搓衣板跪穿。对于像我这样的小白级级别,建议跟着教程走,调通了demo之后再去折腾centos。

其资:golang的安装,要到https://www.golangtc.com/download下载go1.9.2.linux-amd64.tar.gz,进行编译安装。因为apt-get下载后的版本是1.6,而go-ethereum需要的最低版本是1.7。报错信息为:go-ethereum 1.6 Makefile:15: recipe for target ‘geth‘ failed。编译步骤:

tar -xvf go1.9.linux-amd64.tar.gz
mv go /usr/local/src
mkdir $HOME/gosrc && cd $HOME/gosrc
mkdir bin  pkg  src

更新系统变量:

vim ~/.profile

export GOROOT=/usr/local/src/go
export GOPATH=$HOME/gosrc
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOROOT/bin

source ~/.profile

安装完Golang之后,再进入/alidata/go-ethereum,进行make geth,就可以顺利编译了。成功之后执行/alidata/go-ethereum/build/bin/geth -h,有如下回显则说明安装成功:

    2、安装npm

因为solc的安装要依赖于nodejs的npm组件。这一步相对简单:apt-get install npm

3、安装solc

按照教程示例,只需要简单的npm install -g solc,慢慢坐着等即可。

运行一段时间后,你会发现,自己又太天真了,天朝的网络质量,可以让你等到天荒地老。天朝的问题,只能在天朝内解决,我们可以依靠无所不能的大淘宝:

npm install -g cnpm --registry=https://registry.npm.taobao.org

apt-get install install nodejs-legacy

cnpm install solc

cnpm install -g solc

注意:到这里,solc安装成功。(但博主仍感觉有什么地方怪怪的,之后的文章会进一步求证,广大客官就先不用纠结了,答案近期分晓)

二、配置私链节点

以下这一部分,参照http://8btc.com/article-4537-1.html  说明的步骤进行操作,不会有问题。

1、创世区块的设置

创建/alidata/godblock/路径,这个路径的名称随意,觉得怎么牛B就怎么取。在这个路径下创建genesis.json文件和data目录。

genesis.json 的内容如下:

    {
    "config": {
            "chainId": 123456,
            "homesteadBlock": 0,
            "eip155Block": 0,
            "eip158Block": 0
    },
    "nonce": "0x0000000000000042",
    "difficulty": "0x020000",
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "coinbase": "0x0000000000000000000000000000000000000000",
    "timestamp": "0x00",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",
    "gasLimit": "0x4c4b40",
    "alloc": {}
    }

解释一下各个参数的作用:(来自:http://blog.csdn.net/sportshark/article/details/51855007)


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的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。

2.2 初始化

在命令行下进入刚才创建的文件夹/alidata/godblock/,输入如下命令:
    /alidata/go-ethereum/build/bin/geth --datadir data init genesis.json

 2.3 启动节点

/alidata/go-ethereum/build/bin/geth --datadir data --networkid 123456 --rpc --rpccorsdomain "*" --nodiscover console

geth的参数解释:


identity


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


init


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


datadir


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


port


网络监听端口


rpc


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


rpcapi


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


networkid


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


console


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

不出所料,这时节点将成功启动,并进入JavaScript控制台,如下图所示:

第一篇就先到这里吧,下一篇将一步一步地布署属于小白的第一个智能合约。不见不散:)

参考文章:

http://8btc.com/article-4537-1.html    以太坊私链与智能合约部署入门教程

http://blog.csdn.net/sportshark/article/details/51855007    区块链开发(一)搭建基于以太坊的私有链环境

http://npm.taobao.org/    淘宝NPM镜像

http://blog.csdn.net/weixin_40139875/article/details/77879915    go-ethereum 1.6 Makefile:15: recipe for target ‘geth‘ failed

时间: 2024-10-05 22:34:18

以太坊私链与智能合约部署学习(博主修正篇)—— 第一篇的相关文章

以太坊私有链下智能合约部署

上一篇文章实现了搭建私有链,以下进行智能合约的部署 一. 编写合约 简单的乘法例子: pragma solidity ^0.4.2; contract test { function multiply(uint a) returns(uint d) { return a * 7; } } 二. 编译合约 推荐网站:here 得到:Interface 和 Bytecode 和 Web3 deploy Bytecode: 6060604052341561000f57600080fd5b5b60ab8

区块链学习--win10下构建以太坊私链

构建以太坊私链1.环境是win10,下载对应的最新版本Ethereum-Wallet-win64-0-10-0.ziphttps://github.com/ethereum/mist/releases 2.解压到指定目录即可,运行Ethereum-Wallet初始化数据,私链搭建无需同步 3.初始化的相关数据,如用户为:administrator,则在系统生成目录:C:\Users\administror\AppData\Roaming\Ethereum WalletC:\Users\hehei

什么是以太坊?什么是智能合约?

以太坊是一个分布式的计算平台.它会生成一个名为Ether的加密货币.程序员可以在以太坊区块链上写下"智能合约",这些以太坊智能合约会根据代码自动执行. 以太坊是什么? 以太坊经常与比特币相提并论,但情况却有所不同.比特币是一种加密货币和分布式支付网络,允许比特币在用户之间转移. 相关:什么是比特币?它是如何工作的? 以太坊项目有更大的目标.正如Ethereum网站所说,"以太坊是一个运行智能合约的分布式平台".这些智能合约运行在"以太坊虚拟机"上

搭建以太坊私链完整版

可以直接下载程序进行安装,也可以下载源码自己进行编译安装,本文介绍源码编译方式. 源码编译 环境需求 正确安装Go语言环境 正确安装GCC:安装GCC方法 从github下载源码 go get github.com/ethereum/go-ethereum 编译 Ubuntu和Mac下编译 cd go-ethereum make geth 或者 make all Windows下编译 按以下目录结构才能正确编译,需要下载的包请自行下载 $GOPATH$/src ├── github.com │

区块链入门(5)Truffle 项目实战,Solidity IDE, 智能合约部署

在上一张我们学习了Truffle项目的创建,部署等相关内容,今天我们就来实战一下. 今天我们要做3件事: 1) 学习搭建一个Solidity IDE(Remix). 2) 使用这个Solidity Ide编写一份智能合约. 3) 在我们前面第1,2,3章中部署的私有网络节点集群中部署这个合约,并能够在不同的节点中调用这个合约. Remix,是一个Solidity开发语言的Ide, 它是一款运行在浏览器端的solidity ide,也是官方推荐使用的ide. 另外还有其它的solidiy ide,

使用 Browser-solidity 在 Go-Ethereum 上进行简单的智能合约部署

1.基本概念 之前文章中,已经讲过 Go-Ethereum 1.7.2 如何安装及搭建以太坊私有链,这里就不多介绍. 在本文讲解之前,先介绍以下几点基本概念. 1.1.什么是智能合约? 智能合约是存储在区块链上的一段代码,它们可以被区块链上的交易所触发,触发后,这段代码可以从区块链上读取数据或者向区块链上写入数据. 1.2.什么是Solidity? Solidity 是 Ethereum 的一种契约型编程语言,运行在Ethereum虚拟机(EVM)之上. 1.2.1.Solidity的语言特性

如何搭建以太坊私有链

在开发以太坊时,很多时候需要搭建一条以太坊私有链,通过本文一起看看如何在Mac上进行搭建. 写在前面 阅读本文前,你应该对以太坊语言有所了解,如果你还不了解,建议你先看以太坊是什么 go-ethereum客户端安装 Go-ethereum客户端通常被称为Geth,它是个命令行界面,执行在Go上实现的完整以太坊节点.Geth得益于Go语言的多平台特性,支持在多个平台上使用(比如Windows.Linux.Mac).Geth是以太坊协议的具体落地实现,通过Geth,你可以实现以太坊的各种功能,如账户

使用 Go-Ethereum 1.7.2搭建以太坊私有链

1.什么是Ethereum(以太坊) 以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约.开源的底层系统,以太坊从诞生到2017年5月,短短3年半时间,全球已有200多个以太坊应用诞生.以太坊是一个平台和一种编程语言,使开发人员能够建立和发布下一代分布式应用. 以太坊可以用来编程,分散,担保和交易任何事物:投票,域名,金融交易所,众筹,公司管理, 合同和大部分的协议,知识产权,还有得益于硬件集成的智能资产. 以太坊的白皮书:https://github.com/ethe

区块链,使用 Go-Ethereum 搭建以太坊私有链

1.什么是Ethereum(以太坊) 以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约.开源的底层系统,以太坊从诞生到2017年5月,短短3年半时间,全球已有200多个以太坊应用诞生.以太坊是一个平台和一种编程语言,使开发人员能够建立和发布下一代分布式应用. 以太坊可以用来编程,分散,担保和交易任何事物:投票,域名,金融交易所,众筹,公司管理, 合同和大部分的协议,知识产权,还有得益于硬件集成的智能资产. 以太坊的白皮书:https://github.com/ethe