最近需要搭建以太坊全节点,刚开始用的是geth,同步了1整天发现最新的70~80个块总是同步不下来,网上一查很多人遇到过这个问题,据说跟SSD的读写速度有关,无奈之下只能放弃,改用parity。
parity是一个和geth类似的以太坊客户端程序,由以太坊黄皮书作者Gavin Woods领导,采用Rust语言编写。试用了一下体验还是挺棒的,同步Ropsten的数据只需要几个小时的时间。但是,parity毕竟和geth还是有很大区别的,首先一点数据的目录结构和存储方式是不同的,另外某些RPC的调用方式也有些差异,踩了一些坑,记录下来希望对后来人有点帮助。

1.目录结构

parity中所有可用的链参考下面的链接:
https://wiki.parity.io/Chain-specification
在使用geth的时候同步主网跟Ropsten测试网一般用下面的命令:

geth --datadir ./gethData
geth --testnet --datadir ./gethData

对应的parity命令如下:

parity --base-path=./parityData
parity --chain ropsten --base-path=./parityData

我们来看一下生成的parityData的目录结构:
├── cache
├── chains
│ ├── ropsten
│ │ ├── db
│ └── ver.lock
├── jsonrpc.ipc
├── keys
│ └── ropsten
│ └── address_book.json
└── network
└── key
可以发现,原先geth里的keystore变成了keys/,geth.ipc变成了jsonrpc.ipc,另外数据库也已动到了chains//db中。因此为了保证以前使用geth的程序能正常工作,最简单的办法就是创建2个软链接:

cd parityData
ln -s jsonrpc.ipc geth.ipc
ln -s keys/ropsten keystore

2.搭建私网

我们在开发测试过程中最常用的是dev网络,是一种预先定义好的私网:

parity --config dev

对应的配置文件在下面的链接中:
https://github.com/paritytech/parity-ethereum/blob/master/ethcore/res/instant_seal.json
dev网络预先包含一个持有很多ETH的账户0x00a329c0648769a73afac7f9381e08fb43dbea72,密码为空。

如果想要定制私网,把上面的配置文件拷贝一份,修改好后用下面的命令启动:

parity --chain genesis.json

3.账户解锁

在使用geth的时候,一般会attach到geth.ipc上,或者通过JSON RPC进行账户解锁。在parity中也是类似,只是geth.ipc变成了jsonrpc.ipc。需要注意的是,启动parity需要增加下面的选项以开启该功能(偷懒的写法,all代表所有类别):

parity --chain genesis.json --base-path=./parityData --ipc-apis="all" --jsonrpc-apis="all"

好,我们先用geth attach的方式试一下:

geth attach ./parityData/jsonrpc.ipc
> personal.unlockAccount(eth.accounts[0], '123', 3600)
Error: Invalid params: invalid type: integer `3600`, expected a 0x-prefixed hex string with length between (0; 32].
> personal.unlockAccount(eth.accounts[0], '123', 0xe10)
Error: Invalid params: invalid type: integer `3600`, expected a 0x-prefixed hex string with length between (0; 32].
> personal.unlockAccount(eth.accounts[0], '123', '0xe10')
unlock duration must be a number

你会发现,不管你怎么写,都无法将账户解锁3600秒。。。只有下面这种能成功:

> personal.unlockAccount(eth.accounts[0], '123', null)
true

但是,这样只是临时解锁,账户只能发起一次交易,然后就必须重新解锁。如果你使用Truffle,就会遇上麻烦了,因为我们都知道,Truffle会先部署1个Migration合约,然后部署我们自己的合约的时候就会永远卡在那里。。。(吐槽一下,竟然没有错误提示)
实际上,github上有人讨论过这个bug,实际上是由于geth跟parity定义的参数类型不一致导致的。web3只处理geth的情况,但是没法兼顾parity。

看来此路不通,让我们再用JSON RPC试一下:

curl --data '{"method":"personal_unlockAccount","params":["0x33baea29cced0097685449fbd8dea161d3ad0a4d","123","0x100"],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545

很遗憾,没有成功,返回下面的错误:

{"jsonrpc":"2.0","error":{"code":-32000,"message":"Time-unlocking is not supported when permanent unlock is disabled.","data":"Use personal_sendTransaction or enable permanent unlocking, instead."},"id":1}

错误信息说的很清楚:不支持Time-unlocking,替代方案是使用personl_sendTransaction代替eth_sendTransaction。关于如何“enable permanent unlocking”,网上没有查到任何资料,估计是要改parity代码,暂时不考虑。
也就是说,调用personal_sendTransaction是可以的(需要提供keystore密码):

curl -X POST -H "Content-Type: application/json" --data '{"method":"personal_sendTransaction", "params":[{"from": "0x33baea29cced0097685449fbd8dea161d3ad0a4d", "to":"0x146aed09cd9dea7a64de689c5d3ef73d2ee5ca00", "value": "0x10000" }, "123"], "id": 1, "jsonrpc":"2.0"}' localhost:8545

但是调用eth_sendTransaction的时候会卡住:

curl -X POST -H "Content-Type: application/json" --data '{"method":"eth_sendTransaction", "params":[{"from": "0x33baea29cced0097685449fbd8dea161d3ad0a4d", "to":"0x146aed09cd9dea7a64de689c5d3ef73d2ee5ca00", "value": "0x10000" }, "123"], "id": 1, "jsonrpc":"2.0"}' localhost:8545

但是,我们已有的应用肯定都是基于eth_sendTransaction的,另外在网络中传输密码看起来也相当不安全。经多方查找,终于找到了账户永久解锁的优雅解决方案。
首先把要导入的keystore文件放到一个目录中(比如keystore目录),然后通过“account import”命令把keystore导入到parity中。
接下来把该账户的密码写到一个文件中,比如password.txt。
最后,启动parity时加上“–unlock”和"–password"选项就可以永久解锁了:

parity account import ./keystore --chain genesis.json --base-path=./parityData
parity --chain genesis.json --base-path=./parityData --ipc-apis="all" --jsonrpc-apis="all" --unlock="33baea29cced0097685449fbd8dea161d3ad0a4d" --password="password.txt"

更多文章欢迎关注“鑫鑫点灯”专栏:https://blog.csdn.net/turkeycock
或关注飞久微信公众号:

从geth切换到parity遇到的那些坑相关推荐

  1. 切换到ZSH以后遇到的坑

    了解到ZSH的强大以后打算将自己目前使用的bash切换到ZSH.具体ZSH比bash强在那里就不多少了,网上的文章一搜一大把.个人主要是被ZSH强大的自动补全吸引过来的.虽然bash装了bash-co ...

  2. Antd Tabs切换时状态遗留问题避坑

    destroyInactiveTabPane 被隐藏时是否销毁 DOM 结构 boolean false <Tabs defaultActiveKey="1" centere ...

  3. 如何在geth中创建genesis.json_基于以太坊的私有链搭建,mist+geth实现

    以前让学生做毕业设计,今天有人问起来,就写一个小教程,说一说基于eth的私有链如何搭建.非常简单. 一.geth,mist 客户端下载 1.这里我给大家介绍下,以太坊客户端,以太坊客户端主要分成两类. ...

  4. eth geth 安卓_零基础学习以太坊开发--安装和使用以太坊客户端geth

    一.预备知识 想从事区块链开发,了解以太坊开发的程序员,在刚开始接触以太坊的时候,发现有很多的新名词: EVM solidity go-ethereum(geth) pyethereum Testrp ...

  5. ABP入门系列(21)——切换MySQL数据库

    1. 引言 Abp支持MySql已经不是什么新鲜事了,但按照官方文档:Entity Framework - MySql Integration来,你未必能成功切换,本文就记录下切换MySql数据库遇到 ...

  6. blockchain 初步了解区块链

    业余时间学习下区块链相关的东西,参考资料: 廖雪峰区块链教程 尚硅谷深入理解以太坊核心技术 初步了解区块链 区块链的发展简史 以bitcoin为代表的区块链1.0,以智能合约为代表的区块链2.0,现在 ...

  7. 04以太坊测试网(Testnets)

    什么是测试网? 测试网络(简称testnet)用于模拟以太网主网的行为.有一些公开的测试网络可以替代以太坊区块链.这些网络上的货币毫无价值,但它们仍然很有用,因为合约和协议变更的功能可以在不中断以太网 ...

  8. 第二! 他排中本聪与V神中间, 单靠文字就“打败”了敲代码的程序员!

    来源 | <Mastering Ethereum> 作者 | Andreas Antonopoulos.Gavin Wood 出品 | 区块链大本营(blockchain_camp) An ...

  9. python必须连网开发吗_Python以太坊开发节点和网络选择

    为什么我需要连接到一个节点? 以太坊协议定义了一种方法,用于人们通过网络与智能合约相互作用.为了获得关于合约.账户余额和新交易状态等最新的信息,协议需要与网络上的节点进行连接.这些节点不断地共享最新的 ...

  10. Vitalik Buterin 问答集

    Vitalik Buterin在The Next Web上进行了一次网友问答活动,现在我们把V神的一些回答编译出来方便各位查阅. Q:你喜欢吃几成熟的牛排? A:我比较喜欢吃鱼. Q:关于Plasma ...

最新文章

  1. 找出前50个素数,构成素数表
  2. php 自动创建文件,php:自动创建多级文件夹
  3. IDEA 重复代码快速重构
  4. SAP offline应用的flush按钮实现
  5. Java中的异步等待
  6. Endnote生成的中英文混排参考文献中“等”与“et al”的处理
  7. java私有变量和_java – 大内部类和私有变量
  8. Python获取两个列表list的不同之处
  9. 【AI视野·今日CV 计算机视觉论文速览 第152期】Fri, 9 Aug 2019
  10. SQL Server游标
  11. 三角传输的在链路均衡项目中的灵活应用
  12. Android9.0 HIDL头文件加log编译
  13. 滚动条滚动到页面底部继续加载
  14. 智能脚本植入与CBSS+
  15. chrome浏览器使用console代码让115网盘免扫二维码登陆
  16. 基于WIKI中文语料·Word2Vec模型训练·Python
  17. Mybatis多参数查询与列表查询不同方式实现
  18. h5前端兼容性问题及解决方法集合
  19. 合工大计算机系汪教授,合肥工业大学计算机与信息学院导师介绍:洪日昌
  20. 计算机桌面的文件拒绝访问,win10系统桌面文件无法重命名提示访问被拒绝的设置办法...

热门文章

  1. 新建一个html代码页面,三分钟教你创建一个简单的网页
  2. 电子计算机与多谋种,2011—2012学年度第一学期七年级上册语文期末测试AB卷(2套)(含答案)...
  3. 【博闻强记】eclipse背景色的更改
  4. 程序员,金三银四该不该跳槽?
  5. 利用互斥量实现进程间同步
  6. 中职学校新增计算机专业申请书,中职学校计算机专业学生的培养
  7. TestNG单元测试框架详解
  8. 什么是BPM系统?BPM流程管理系统介绍
  9. 应用华为大数据平台配置大数据项目①
  10. 快速入门了解后端网络方面必备知识