区块链学习(二)Mac系统下EOS区块链开发环境

一、从GitHub上克隆主网代码仓库:(注意EOS-Mainnet/eos 与 EOSIO/eos 的版本是一致的。若以前在本地已经安装编译过EOSIO/eos的1.0.2版本及以上,则可以直接跳到步骤三),最新版本是1.1.6

git clone https://github.com/EOS-Mainnet/eos 
cd eos
git submodule update --init --recursive 
git tag
git checkout mainnet-1.1.6

二、编译eos代码

./eosio_build.sh  

三、替换config.ini 和 genesis.json 文件

(1)运行nodeos节点后会生成默认的config.ini/genesis.json文件,现在对其进行替换

(2)在不同系统中找到其文件地址:

  • linux-ubuntu: ~/.local/share/eosio/nodeos/config/
  • mac-osx: ~/Library/Application\ Support/eosio/nodeos/config/

(3)新的config.ini文件设置如下:

# fullnode sample config

blocks-dir = "blocks"

chain-state-db-size-mb = 1024

reversible-blocks-db-size-mb = 340

contracts-console = false

https-client-validate-peers = 1

http-server-address = 0.0.0.0:8888

access-control-allow-credentials = false

p2p-listen-endpoint = 0.0.0.0:9876

p2p-server-address = 0.0.0.0:9876


# List of peers

p2p-peer-address = p2p.one.eosdublin.io:9876

p2p-peer-address = eu-west-nl.eosamsterdam.net:9876

p2p-peer-address = p2p.mainnet.eosgermany.online:9876

p2p-peer-address = 35.197.190.234:19878

p2p-peer-address = p2p.genereos.io:9876

p2p-peer-address = fullnode.eoslaomao.com:443

p2p-peer-address = new.eoshenzhen.io:10034

p2p-peer-address = node1.eosphere.io:9876

p2p-peer-address = p2p.meet.one:9876

p2p-peer-address = bp.eosbeijing.one:8080

p2p-peer-address = peer1.mainnet.helloeos.com.cn:80

p2p-peer-address = p2p-public.hkeos.com:19875

p2p-peer-address = pub1.eostheworld.io:9876

p2p-peer-address = eu1.eosdac.io:49876

p2p-peer-address = peer.eosio.sg:9876


p2p-max-nodes-per-host = 10


agent-name = "eosmainnet"

# allowed-connection can be set to "specified" to use whitelisting with the "peer-key" option

allowed-connection = any


# peer-private-key is needed if you are whitelisting specific peers with the "peer-key" option

peer-private-key = ["EOS6qTvpRYx35aLonqUkWAMwAf3mFVugYfQCbjV67zw2aoe7Vx7qd", "5JroNC1B4pz9gJzNZeU7tkU6YMtoeWRCr4CJJwKsVXnJhRbKXSC"]


max-clients = 250

connection-cleanup-period = 30

network-version-match = 1

sync-fetch-span = 100

max-implicit-request = 1500

enable-stale-production = false

pause-on-startup = false

max-transaction-time = 10000

max-irreversible-block-age = -1

txn-reference-block-lag = 0


# Plugins used for full nodes

plugin = eosio::chain_api_plugin

plugin = eosio::history_api_plugin

plugin = eosio::chain_plugin

plugin = eosio::history_plugin

plugin = eosio::net_plugin

plugin = eosio::net_api_plugin

其中p2p-peer-address的配置来源于:

https://docs.google.com/spreadsheets/d/1K_un5Vak3eDh_b4Wdh43sOersuhs0A76HMCfeQplDOY/edit#gid=0

(4)genesis.json文件内容如下:

{
  "initial_timestamp": "2018-06-08T08:08:08.888",
  "initial_key": "EOS7EarnUhcyYqmdnPon8rm7mBCTnBoot6o7fE2WzjvEX2TdggbL3",
  "initial_configuration": {
    "max_block_net_usage": 1048576,
    "target_block_net_usage_pct": 1000,
    "max_transaction_net_usage": 524288,
    "base_per_transaction_net_usage": 12,
    "net_usage_leeway": 500,
    "context_free_discount_net_usage_num": 20,
    "context_free_discount_net_usage_den": 100,
    "max_block_cpu_usage": 200000,
    "target_block_cpu_usage_pct": 1000,
    "max_transaction_cpu_usage": 150000,
    "min_transaction_cpu_usage": 100,
    "max_transaction_lifetime": 3600,
    "deferred_trx_expiration_window": 600,
    "max_transaction_delay": 3888000,
    "max_inline_action_size": 4096,
    "max_inline_action_depth": 4,
    "max_authority_depth": 6
  }
}

此文件称为创世json文件,来自以下链接:

https://github.com/EOS-Mainnet/eos/blob/launch-rc-1.0.2/mainnet-genesis.json

四、将以上的创世json文件,复制拷贝到~/eos/build/program/nodeos目录下,并启动nodeos节点:

./nodeos --genesis-json genesis.json  

启动和连接可能不会那么顺利,我是用下面的命令的

./nodeos --data-dir . --config-dir . --genesis-json genesis.json

注意:编译完成后相关的程序都在:/Users/[your name]/eos-mainnet/eos/build/programs/nodeos

五、连接主网查看链信息:

EOS钱包推荐,imtoken,需要找一个已有eos账户的帮忙才可以噢,因为要买cpu和内存

eos一些常用的命令学习:

cleos create key #创建公钥私钥对,用于创建钱包等
cleos get info
cleos get block 191
因为现在主网数据已经很多了,到12325622个block了,所以要同步数据是很慢的,我们直接不同步数据,直连主网
cleos -u https://api.eosnewyork.io get account yiguidyiguid

 

区块链学习(一)Mac系统下搭建基于以太坊的区块链开发环境

区块链的相关知识后补,先从实际的上手,从实例中学习

知识点

分布式数据库并且只能插入和查找

任何人都可以成为节点,保存整个数据库,且数据同步

工作量产生价值,成为币

软件安装

brew tap ethereum/ethereum
brew install ethereum

执行时间较长,需要耐心等待或者梯子

也可以编译安装,请自行百度

https://github.com/ethereum/go-ethereum

检查是否安装成功

geth -h

搭建私有链

需要给一个数据存储的文件夹,我们使用

cd ~
mkdir ethereum
cd ethereum

初始化一个创世区块,新建文件

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

有没有一种普罗米修斯里面造物主的感觉

下面是对这个创世区块的一些解释

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

然后我们可以准备启动我们的私链

geth --datadir data init genesis.json

运行上面的命令,会读取genesis.json文件,根据其中的内容,将创世区块写入到区块链中。如果看到log信息中含有Successfully wrote genesis state字样,说明初始化成功。其中的数据信息等会保存在我们设置的data目录中。

启动私有链

初始化完成后,就可以通过输入以下命令启动私有链,并打开console了

geth –-datadir data console 2>> geth.log

指定数据目录是data,启动console,并且把console的输出重定向到geth.log文件

这样你可以另外启动一个控制台,使用命令查看console的输出

启动了区块链节点并进入了Javascript Console

这是一个交互式的Javascript执行环境,在这里面可以执行Javascript代码,其中>是命令提示符。在这个环境里也内置了一些用来操作以太坊的Javascript对象,可以直接使用这些对象。这些对象主要包括:

eth:包含一些跟操作区块链相关的方法 
net:包含以下查看p2p网络状态的方法 
admin:包含一些与管理节点相关的方法 
miner:包含启动&停止挖矿的一些方法 
personal:主要包含一些管理账户的方法 
txpool:包含一些查看交易内存池的方法 
web3:包含了以上对象,还包含一些单位换算的方法

基本玩法

查看&创建账户

>eth.accounts
[ ]

目前还没有账户,下面开始创建,参数即是密钥

>personal.newAccount('password')
"0x2b661b5b692de27578e6fb199b4ae2714ff24047"

查询余额

>eth.getBalance(eth.accounts[0])
0

注意在console里也是可以用tab键自动补全的

启动&停止挖矿

miner.start(10)

其中参数表示挖矿使用的线程数。

第一次启动挖矿会先生成挖矿所需的DAG文件,这个过程有点慢,等进度达到100%后,就会开始挖矿,此时屏幕会被挖矿信息刷屏。

如果想停止挖矿,并且进度已经达到100%之后,可以在js console中输入

miner.stop()

挖到的区块会奖励币,是按wei的单位,wei是以太币的最小单位,1个以太币=10的18次方个wei。要查看有多少个以太币,可以用web3.fromWei()将返回值换算成以太币

>eth.getBalance(eth.accounts[0])
2.31e+21
>web3.fromWei(eth.getBalance(eth.accounts[0]),'ether') 
2310

可以设置矿工的账户

>miner.setEtherbase(eth.accounts[1])
true
>eth.coinbase

返回矿工的账户

转账

#为账户设置别名,方便命令输入
user1=eth.accounts[0]
user2=eth.accounts[1]
#查看区块高度,现在为0
eth.blockNumber
#转账测试,首先解锁账号user1
#命令运行后要求输入解锁密码,直接回车,默认账号锁定密码为空
也就是调用newAccount时候传的参数
返回true成功
personal.unlockAccount(user1)
#从user1向user2转账3个以太币
#命令运行后,提交交易立马回出发挖矿
eth.sendTransaction({from:user1,to:user2,value:web3.toWei(3,"ether")})

 

发现还没转过去,此时交易已经提交到区块链,但还未被处理,这可以通过查看txpool来验证:

>txpool.status 
{
     pending: 1,
     queued: 0 
}

#挖矿测试
#geth启动后,自动启动挖矿,这时运行miner.start(),返回为null 无交易的时候#不挖矿,当有交易时自动会触发挖矿流程

#我们可以先停止挖矿
miner.stop()

然后发现交易已经完成

查看交易和区块

可以通过区块号查看区块

> eth.getBlock(66)
{
 difficulty: 135266,
 extraData: "0xd783010802846765746886676f312e31308664617277696e",
 gasLimit: 3350537,
 gasUsed: 0,
 hash: "0x265dfcc0649bf6240812256b2b9b4e3ae48d51fd8e43e25329ac111556eacdc8",
 logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
 miner: "0x4a3b0216e1644c1bbabda527a6da7fc5d178b58f",
 mixHash: "0xaf755722f62cac9b483d3437dbc795f2d3a02e28ec03d39d8ecbb6012906263c",
 nonce: "0x3cd80f6ec5c2f3e9",
 number: 66,
 parentHash: "0x099776a52223b892d13266bb3aec3cc04c455dc797185f0b3300d39f9fc0a8ec",
 receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
 sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
 size: 535,
 stateRoot: "0x0c9feec5a201c8c98618331aecbfd2d4d93da1c6064abd0c41ae649fc08d8d06",
 timestamp: 1520391527,
 totalDifficulty: 8919666,
 transactions: [],
 transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
 uncles: []
}

或者通过交易hash查看交易,交易hash就是在sendTransaction的时候,会返回的一串

> amount = web3.toWei(10,'ether')
"10000000000000000000"
> eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
INFO [03-07|11:13:11] Submitted transaction fullhash=0x1b21bba16dd79b659c83594b0c41de42debb2738b447f6b24e133d51149ae2a6 recipient=0x46B24d04105551498587e3C6CE2c3341d5988938
"0x1b21bba16dd79b659c83594b0c41de42debb2738b447f6b24e133d51149ae2a6"
>eth.getTransaction("0x1b21bba16dd79b659c83594b0c41de42debb2738b447f6b24e133d51149ae2a6")
{
 blockHash: "0x1cb368a27cc23c786ff5cdf7cd4351d48f4c8e8aea2e084a5e9d7c480449c79a",
 blockNumber: 463,
 from: "0x4a3b0216e1644c1bbabda527a6da7fc5d178b58f",
 gas: 90000,
 gasPrice: 18000000000,
 hash: "0x1b21bba16dd79b659c83594b0c41de42debb2738b447f6b24e133d51149ae2a6",
 input: "0x",
 nonce: 0,
 r: "0x31d22686e0d408a16497becf6d47fbfdffe6692d91727e5b7ed3d73ede9e66ea",
 s: "0x7ff7c14a20991e2dfdb813c2237b08a5611c8c8cb3c2dcb03a55ed282ce4d9c3",
 to: "0x46b24d04105551498587e3c6ce2c3341d5988938",
 transactionIndex: 0,
 v: "0x38",
 value: 10000000000000000000
}

除夕夜忆故人

此刻我爸爸,大姑姑,小姑姑在团年饭桌上聊天聊得热火朝天,过去二十年的恩恩怨怨在我奶奶去世后的新年第一天都沉浸在了酒里话里
人有三次逝去,一次是呼吸的停止,一次是身体的消失,最后一次是最后一个记得ta的人把ta忘记。。。
最后奶奶弥留之际心心念念的可能是我爸爸给她买的二手洗衣机,怕她“快走了”用新的浪费
也许是赌气出走,十年没有见面的女儿
又或者是我和我表哥表姐约了快一年回常德见奶奶,才约到在医院见到了我奶奶的却是最后一面
也许是我爸爸蒸的那一碗好吃的蒸蛋
也许是和我妈妈几十年的恩恩怨怨
这一切的一切,都随着一个人的逝去而烟消云散
在这辞旧迎新的一天夜里,我们开始怀念她
我的奶奶出生在一个不平凡的年代,1935年,她小时候的事情,我知道得不多,只是小时候断断续续地从长辈们的口中知道,她的家里是地主家,曾经有过很多土地,生活过得不错,在那个不远的桃江县城。
后来她和我的爷爷走到了一起,可惜我的爷爷英年早逝,她从36岁起,就带着4个孩子开始了蹉跎的一生,然后还要遭遇到小儿子的病故。
从我记事起,奶奶就是一个年老的样子,直到我今天看到墓碑上她和我爷爷年轻时候的样子,我觉得十分温暖和感动,几十年的思念,他们终于又走到了一起。
奶奶的擂茶
小时候的记忆,都是周末和假期在奶奶家度过的,过年放花炮,夏天擂擂茶,直到去年我出差经过常德,奶奶还专门给我做了擂茶,送到车上。
步行到火车站
初中的时候,有一次约我去健步走,我们俩从常德东门走到火车站,然后又走到柳叶湖,那是我第一次走那么远的路,我已经记不得我们当时聊了些什么,只记得我们那天很开心,在新修的火车站照了很多照片
去北京
高三的时候,奶奶和我妈妈参加了夕阳红旅行团,去到了北京,他们老一辈人梦想的地方。看天安门,逛王府井,还登上了长城,在好汉碑合影留恋。可惜我后来到北京这么多年,她都没有机会再来北京玩一次。
守候老家
我的奶奶在我们几个孩子都读大学之后,常德的老家变得越来越冷清,可是她不愿意去其他地方,就希望待在老地方,守候着老家,还好她盼来了我上北京的大学,留在北京工作,结婚,生子。
饭桌上,我爸爸对两个妹妹说从今以后,我不要求你们,随便你们回不回来
大姑姑说,我没有妈了,就像没有家了一样,但是我希望我以后回常德,希望有口饭吃,就像之前奶奶在的时候一样,她招呼一声,我们三姊妹就会在一起。
是啊,爸妈在哪里,哪里就是家
写下这些文字,是为了纪念我的奶奶,一位老人,一位故人,就像《寻梦环游记》里面写的一样,人一辈子走过,希望有人能够记得她,不会忘记她,也不枉来过一辈子。
愿你再来人间 轰轰烈烈一辈子
.

2017年的总结

1月4日 净耀法师来访
1月10日去日本
1月21日 年会
1月28 过年
2月6日 开年红包
2月11日 惠州 佛宇山寺
2月14 深圳 戴鹏
2月17 新加坡 菩提阁
2月25 泰国僧王
2月26日 龙泉寺
3月1日 深圳 心田科技
3月12日 联合国开会
3月20日-31日 智慧之旅
4月13日 开始看新办公室
4月15日 任斐回国
4月19日 安虎生来访
4月22日 五台山
5月5日 佛诞节
5月9日 斯里兰卡
6月2日 香送
6月9日 北航项目
6月10日 为爱行走
6月11日 第三次美国之行
6月15日 加拿大
7月6日 能智法师
7月15日 赴上海
8月16日 赴上海
8月20日 武汉
8月28日 赴上海
8月30日 哈尔滨阿城 金灵寺
9月16日 赴上海
9月20日 娄底
10月10日 杭州 西蠡谷
10月15日 赴上海
11月7日 云南
11月11日 不合作
11月22日 展会
12月1日 重启
12月27日 搬家
12月31日 烟台

 

2017年上半年很踏实,下半年用新学的词叫日了狗了

小菩提说,好在不是被狗日了,2018年,新的开始,加油吧~!

十月一号

过去的一年,201610-201710

去过:

台湾两次

新加坡一次

美国三次

加拿大一次

日本一次

印度尼泊尔一次

斯里兰卡一次

公司:

从520到305

1000 到 6500

国内n个省市

n个寺院

收获很多

海宝一枚

世界很大,等着你们去发现

科学是什么

物理规律是恒定不变的吗?

黑洞的形式是怎样的呢?

光子是唯一没有质量的吗?

光速是三维生物的极限吗?

高维意识控制着三维的人体,意识没有质量,形状,不受时间和空间的限制

五月天

逝水比喻时光荏苒

终于我们不再为了生命狂欢,为爱情狂乱

盛夏光年,一天一天更灿烂

又到一年的五月

阳光 夏天

自转公转,如同诗一般

让天空解释着蔚蓝,落花铺成一片红色地毯

期待更加精彩的未来

 

整理硬盘

以前总是喜欢把所有东西都保存好,整理分类

最近发现越来越不喜欢存东西了,包括照片和聊天记录

其实记忆里的东西才是最美好的,不是吗?

人生如歌

看我是歌手,听到苏运莹唱得《知足》突然想起了我的大学,想起了曾经听到的、唱过的很多歌,人生如歌

如果让我用歌来回顾过去的人生,我最先会想到这几首歌

《心太软》算是小时候唱得第一首流行歌吧?哈哈

《爱在西元前》一边听周杰伦一边玩石器时代的日子

《一生有你》初中最喜欢的一首歌

《千里之外》离开家来北京上大学

《知足》大学第一次参加歌手比赛

待续