Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

EOS钱包开发:如何选择交易网络

华胥
147 0 0
主网Jungle 测试网络本地网络
, g4 Y( N( ?; N

/ v5 G: |$ ]' R( `, Z- h& [5 h# l咱们在开发阶段一般选择测试网络和本地网络皆可,测试完成后在部署到主网。这里我们先选择在本地网络上进行开发,因为在Jungle 测试网络中不支持wallet的RPC接口,因为它作为一个公共的服务节点,是不可能帮助大家管理私钥的,那样会非常不安全,大家都会共用相同的钱包和私钥。最后我们将使用本地搭建的keosd服务管理钱包,并连接到Jungle 测试网络中。
4 k' w* _" h$ _+ C  k! TEOS支持的操作系统
! d, w8 N- {  q' O: T
0 G* Q" ^9 W  h# X1 u& zAmazon 2017.09 and higher1 ^, [( h3 c* u2 U! r9 Q$ F
Centos 7
+ F" |7 H4 N) {! O1 yFedora 25 and higher (Fedora 27 recommended)' E. K  z& [8 {
Mint 18+ c$ V- t9 ?$ M5 P1 |: |
Ubuntu 16.04 (Ubuntu 16.10 recommended)
  |  K* q; \" w3 uMacOS Darwin 10.12 and higher (MacOS 10.13.x recommended)
2 W& t8 Z% X/ ?. T

$ b! P( \% p0 p. {. k/ g本教程的开发环境选择为:Ubuntu 16.04、本地网络、RPC+eosjs、eosV1.2.2。接下来开始搭建EOS本地环境将它部署在单个主机。
4 `0 M3 x! S- q6 _+ }一、下载和编译EOS) P+ w# K! ]. d8 `2 g0 B
获取EOS指定版本源码及其所有子模块,若不加入–recursive参数,则不能下载EOS关联的子项目。指定版本源码使用-b指定版本号。3 K- D6 U2 ]2 W) f  N
git clone https://github.com/EOSIO/eos -b v1.2.2 --recursive
- m% W* H# W' j, _! ?+ i编译源码生成可执行文件5 U( m$ {) R4 m5 Q
cd eos( i# t5 Q) F: l  v, ^
./eosio_build.sh9 f( [$ V, x9 `! g$ \9 n( r& H+ i
编译时间比较长,需一两个小时不等,若编译顺利成功后,则会看到如下显示! D4 U" Y8 G0 Z0 [/ f

8 K, y+ H; z* r) J在编译的过程中很有可能会出现各种错误,由于系统、EOS版本的差异出现的错误也会不一样,下面列出了常见的多种错误的解决办法。
+ b" {. K7 L% ?2 s$ p二、编译时报错的解决办法" t9 h9 Y( w' W% z8 J6 b
1. 物理内存RAM不足1 L/ P- ^" }* c
7 T% E; K' Y3 s+ N
解决办法:
6 m+ e/ E/ I# c+ U$ H' S修改文件源码eos/scripts/eosio_build_ubuntu.sh中的if [ "${MEM_MEG}" -lt 7000 ]; then,将7000改为自己系统的内存大小,如4000,如还报错,那么继续减小。$ q/ z" Q" p, h) g# N' M
2. 可用内存不足) H) ~8 ]! k3 Q& i, H1 h
You must have at least 20GB of available storage to install EOSIO.5 [+ @- {3 f7 q) K& x0 }
Exiting now.
, d# v0 R& x, v' ^4 ]0 m2 N解决办法:( `/ x) X" [; S; R. X& H5 X
在文件源码eos/scripts/eosio_build_ubuntu.sh中增加如下一行代码代码前面。8 U( v; s  `0 o* G, c5 B4 x! U
DISK_MIN=11 X/ R5 u/ g5 m/ H+ I
3. 无法下载(MongoDB等)
, S8 A( C1 n+ C+ V( L7 [9 d4 a无法下载MongoDB等是由于翻墙配置的问题。1 e7 ]  [4 R2 n7 P, z% \7 a
解决办法:/ [' }! n: T  Y5 B1 ~
Mac的Shadowsocks使用“PAC自动模式”,另外偏好设置配置如下
" c' O% B: }6 v; n' G) x
0 f8 ?, `) H% {: \
$ ~6 ]7 l5 x& ?- q0 T# J1 T: JUbuntu的配置如下,其中的192.168.1.116 是Mac的局域网地址。
, t0 f1 Z& g9 \# _( r! q
' Y4 Y' H  _1 j, J8 n. X; E4. 不能创建/tmp/llvm-compiler文件夹0 ]! a7 L( c) W; V
' o" u: @8 y5 C1 ~5 M6 d2 v* \7 V
解决办法:0 D" e. N' Y8 Y/ D6 G# q
进入/tmp目录,删除llvm-compiler文件夹即可。
1 h4 Z$ N" ~# _  m三、安装EOSIO
8 v" W# B6 G# p! i  @安装所有依赖库并构建EOSIO,使用如下命令
6 v: q2 x! d6 A* ~- T/ q8 `sudo ./eosio_install.sh
. Z' e! v  O- c4 t/ F若出现如下错误file INSTALL cannot make directory "/usr/local/eosio/etc/eosio",加上sudo即可。
6 Y0 c- |- i, E; z5 ]* i5 s
: ^( i, m& z5 l  t% Y1 w安装成功后的效果如下! N! n  b7 I1 R, G
) Z3 H% }: Q8 O6 ]2 ^1 \
安装完在根目录新增了build文件夹,最后EOS的目录结构如下。" y9 \2 i! ~/ {& l! s
5 i2 J5 h) Z( a8 m! ~$ m# A
四、配置Nodeos与Keosd
3 V4 z6 j5 W* E( k% t/ t& r1. 配置Nodeos; `4 P1 z) t6 S( L0 J, ~/ h
Nodeos是用来运行节点的EOSIO程序。执行一下步骤进行配置:5 v: @! B% e! z* m3 G
找到如下config.ini文件的位置,然后打开config.ini文件Mac OS: ~/Library/Application\ Support/eosio/nodeos/config/config.iniLinux: ~/.local/share/eosio/nodeos/config/config.ini将文中enable-stale-production所在行用#注释,producer-name所在行也用#注释
: _  f# U9 O' B% U5 G0 `

" X- f4 ?7 n6 }( S9 G( z. w再最后面添加如下内容# H) K0 m2 Y- E  J
# Enable production on a stale chain, since a single-node test chain is pretty much always stale
, Q/ m( t& e1 _, W3 Fenable-stale-production = true' s0 ], m, v/ v- C
# Enable block production with the testnet producers# d. W, A+ Q: L# L! M+ G& [
producer-name = eosio
; {- T9 ?1 V2 N6 E4 @, ^" J$ e# Load the block producer plugin, so you can produce blocks
4 p; j9 D2 f" h3 t, uplugin = eosio::producer_plugin
& T+ I( G" q4 t8 f1 F# As well as API and HTTP plugins
, O1 s+ Z3 q( ?plugin = eosio::chain_api_plugin
- @( u5 o# m& h" Xplugin = eosio::http_plugin& x4 E6 u9 G4 D, V. h, y6 J
# This will be used by the validation step below, to view history
2 e6 K, e" w/ \$ nplugin = eosio::history_api_plugin; `- H) W  x* J2 g
若是v1.2之前的版本需添加plugin = eosio::wallet_api_plugin插件。
! }* F7 f0 {2 N: ?1 e( S9 X; n& `2. 配置Keosd8 P3 b, ^* V' G/ Z$ x
keosd 是一个轻客户端钱包,负责管理钱包,以便在广播到网络之前保护密钥和签署交易,在本地计算机上运行并在本地存储您的私钥。- x( @9 B" J4 _- r: A# I% D
找到路径~/eosio-wallet/config.ini,然后打开config.ini文件将第一行的服务地址设置为:' t2 h0 }/ y. ^' l! f
- a% a  }& v% m- ?/ I& M
http-server-address = 127.0.0.1:8889
7 X$ d& F4 U/ _五、启动节点
1 t. U$ `0 y$ }  |1. 启动nodeos1 Y. M2 `6 K7 {
使用以下命令启动自己的单节点区块链:1 V2 O( w4 E. T  V
nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin0 U% p$ z5 J  R$ G! P
使用了plugin加载一些可选插件,在V1.2之前版本需要添加--plugin eosio::wallet_api_plugin插件。启动后应该每0.5秒生成一个块并有日志输出到终端,如下) O3 U7 l+ K: G
! T! o/ j: G9 h
如果报如下错误,则添加参数--delete-all-blocks
/ Z; U$ T" j9 N+ _& k
: L! P. d# ?: L* y& f  I1 r2. 启动keosd. y$ d6 M( _" R9 F9 q
可以直接输入命令keosd即可启动keosd。
- l+ n" F+ z6 ]/ b0 D' {$ keosd
5 w1 y/ i5 W$ e5 h- |# r( p停止keosd,因为cleos可以自动启动keosd,最终可能会有多个keosd正在运行。
" R) S# ]: S, P9 p: S8 U5 ^* D* b$ y* }$ pkill keosd' N% M- m1 h3 ~6 r( O$ |
注意:当使用RPC接口时,需要另起keosd,且端口与nodeos的不能一样。在使用cleos连接wallet时不用另外单独启动keosd,它连接的是nodeos的keosd服务。若使用cleos时报如下错误,则须停止keosd。+ ]1 @+ p* {# Y$ I
lixu@ubuntu:~$ cleos wallet create7 Y0 J2 ~7 u# T# E5 S
"/usr/local/eosio/bin/keosd" launched
$ }, U! V* W* w& @" n& O7 NUnable to connect to keosd, if keosd is running please kill the process and try again.( j2 y' W& q! i
六、使用Cleos创建钱包: c% F: G/ F% y, s3 |: |$ F4 R
下面我们使用命令行进行操作,需要使用到Cleos,它是一个命令行工具,可以与nodeos公开的REST API进行交互,前提是nodeos需要配置eosio :: chain_api_plugin插件。
! B1 p2 P7 C8 j# z, U1. 创建钱包5 ?7 i. d: N7 W
钱包是授权私钥的存储库,与区块链交互所必需的。通过如下命令创建钱包,可以通过-n参数指定创建的钱包名称。如果不指定钱包名称,则会创建一个名为default的默认钱包。
- h" J0 a1 T, l+ ~- M# z# r! ncleos wallet create
' ~; Y$ l5 T3 f/ O0 h, ^# `& j/ X若是1.2以上版本,则需添加参数–to-console,输出如下
( F* ]" k+ v: l3 n8 ^lixu@ubuntu:~$ cleos wallet create --to-console
5 X8 @7 O; m0 y) V& E" x+ ?Creating wallet: default
' G% A; U" u% N( I  T$ nSave password to use in the future to unlock this wallet.
$ k  ]3 m9 X6 ]/ ~Without password imported keys will not be retrievable.
" C& R# p. K+ s" P9 S/ C"PW5J5SSUrU3sGBonpxjxbn9QXGPdpAsCkWowmjCcLyBPUu5Y5uvvv"3 g7 @/ I2 a& w5 u
成功后将会生成钱包的解锁密码,钱包15分钟不用将会自动锁定,注意一定要保存最后一行的密码,需要使用它解锁这个钱包。
/ i7 u$ ^) k" `' x$ g$ @2. 解锁钱包
0 h6 j1 l* }/ U  W# [! w/ R可以通过两种方式解锁钱包,推荐使用第二种方式解锁。
. W8 c2 W; ?: L# A: ]直接在命令行上添加密码参数,可以通过-n参数指定钱包名称, z# J! O7 P& q
5 R" M! r+ Q) h7 o
cleos wallet unlock --password PW5JCEkVgzoBHUVCzbEwT9es6agM6NRPv6n21wgbzVaem6rWE4akS
& \  l  i9 B% }9 Q% i8 V在交互模式下解锁  Y! ~! w1 v2 C" Q9 B' w  y
! R( q+ j8 k  e  @- i
cleos wallet unlock
+ c( H% B- y( `5 v3 ^9 m1 B+ O! M接着提示password:,然后输入密码即可4 x, j/ @4 Z5 P/ K6 Z- b
lixu@ubuntu:~$ cleos wallet unlock
6 w4 n' ~* `- j: kpassword:' C9 c, W% D4 M$ T' i+ U: `
两种方式解锁成功后都会输出
: F" M9 F8 h0 Q7 b7 F" dUnlocked: default# X2 |% d- h) H" B7 w9 A  @# O) o$ o
注意:+ M6 o$ u: [8 o4 Y
6 W5 g' m8 I" m# \$ H- Z
直接在命令行上使用您的密码并将其记录到您的bash历史记录中通常是不安全的,因此最好在交互模式下解锁。$ A+ Q' }% [+ B9 n
出于安全考虑,最好在不使用钱包时使用命令cleos wallet lock将钱包锁定。
; F* S( B- z, [- R# t9 Q% w- n
* u0 o  I* g. l; O/ k
3. 查看钱包列表0 i+ K* m. _0 _9 N3 w! m# l
使用命令cleos wallet lock查看钱包列表,在列表中解锁后的钱包将在钱包名后面有*标记。' T' q5 d1 Y6 x- f
lixu@ubuntu:~/Desktop/sourcecode/eos$ cleos wallet list( L1 _- {/ P7 O
Wallets:- t6 Q) g' ^$ b: e2 j
[
# T$ u! R" z( G$ B  "default *",
9 k+ v0 u- Y, |& Z% Y) ~]6 `9 I, j) D- S& a1 B
4. 导入密钥到钱包
4 Y, s- r. H! F6 J% D上述步骤中启动的私有区块链是使用默认初始密钥创建的,必须将其加载到钱包中。4 G, v' v* d4 L1 X
使用命令cleos wallet import --private-key ******。可以通过-n参数指定钱包名称
: O8 `) F0 C! x4 ~+ Vlixu@ubuntu:~$ cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3$ j, t' ^' g/ ?# c( i) E9 c
imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV, m! a  a: P" ]1 o/ j
注意:此时导入的私钥并不是创建钱包时生成的密码。$ s* [# `3 [# \9 W, w
这个密钥' c% x) f" S. ]
5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3! a: w1 _# }# b1 D2 a. V
在以下配置文件中可以查看. F5 a9 `3 M, O+ A9 f% K$ u9 }
Mac OS: ~/Library/Application\ Support/eosio/nodeos/config/config.ini6 _0 ]" |( _* f$ o0 ~
Linux: ~/.local/share/eosio/nodeos/config/config.ini0 b$ W1 Y  l$ b  J/ l0 k& b
打开文件后滑动到最下面即可查看到私钥。
; Z' e! p) q: {+ m  z6 E; o注意该秘钥对正是超级账户 eosio的秘钥对。接下来就会用到eosio账户。+ y, i# q: X- I5 E! T0 G
cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV& r: [! A8 \6 c! T
七、部署系统合约- Z/ |# h5 Q, u# }
现在我们有一个拥有帐户eosio密钥的钱包defualt,那么接下来用eosio账户部署默认的系统合约,确保钱包defualt处于解锁状态。3 o, C) ~, J" F8 g, T4 ~4 ~6 ~% e
eosio账户是默认就有的,在系统启动的时候就自动被创建的超级用户。
6 C; h: r: _3 ]3 r/ x1. eosio.bios合约- j6 T1 W0 g/ H# _
出于开发目的,eosio.bios可以使用系统提供的合约,通过此合约可以通过确认用户持有的token直接控制其他帐户的资源分配,包括管理链上的堆栈和非堆栈资源,带宽、CPU以及内存资源。该eosio.bios合约可以在contracts/eosio.bios中找到源代码。, ?" {$ t4 h, R: u
先进入到eos根目录,再使用命令cleos set contract eosio build/contracts/eosio.bios -p eosio@active部署BIOS合约。% ]- r. U3 P, T
lixu@ubuntu:~/Desktop/sourceeos/eos$ cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
7 ?4 F! H# B7 r* Iexecuted transaction: af3bc248ca73d14c644fca863f4f82135bb72582b7f2be0dbec73a41c4f6438a  200 bytes  422 us* r2 l( I) V# _. w/ B2 Y3 Q2 q' x; l
#         eosio 9 o- E, @5 Q# m$ V- y% ~  i
命令中的参数说明:
, n2 {2 x  y& |" n9 Eeosio:部署合约的账户build/contracts/eosio.bios:合约路径-p eosio@active:作用是告诉cleos使用eosio帐户部署此合约,将使用我们之前导入的帐户eosio的active权限的私钥对该操作进行签名。
; W0 S* k  @: p+ U/ B* k! O. P3 d

/ [6 I5 Z* }1 ^; r9 a2 x! L2. eosio.system合约
) H4 Y1 q# {1 G/ x) `3 t; l5 t+ Oeosio.system是EOS系统合约中最重要的部分,实现了EOS项目的所有基本功能:如:创建新账户、部署智能合约、交易RAM、抵押获取资源(net、cpu)、投票、领取节点奖励等;
( R/ Y- i' C, j: icleos create account eosio eosio.system EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
% ~3 X) }5 O; ?, Y( e! scleos set contract eosio.system build/contracts/eosio.system' E3 R- C& b9 Z9 q# `, Q" Y
3. eosio.msig合约& O' G" M8 f* o, m4 U
实现的是多签系统合约,实现了一个多签功能,由于EOS要求系统的每一次更新都需要出块节点完成一次多签,当签名数达到2/3+1时,更新才能生效。所以出块节点可以调用这个合约实现多签功能。
- D8 L4 g0 s* S( Ycleos create account eosio eosio.msig EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
$ `, X  L2 h& z# W, rcleos set contract eosio.msig build/contracts/eosio.msig0 F( t& T+ n( d& _* n+ r
4. eosio.token合约4 ~/ x: d8 t% L' I% [' h* b: D
用来发布代币的合约。: a9 b* X( U9 A5 H8 _
cleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV2 B9 z5 ?1 V  A% U" p8 {" T
cleos set contract eosio.token  build/contracts/eosio.token
9 d8 U) s# B  H" m9 ~( p5. exchange合约0 ?+ D1 ]+ ?+ Y5 ^) Z$ D
合约提供的功能来创建代币。# {& G8 \1 ~$ N8 e4 |- O3 V7 g% h& I
cleos create account eosio exchange EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV% Q& g, `2 @  o6 z' }
cleos set contract exchange build/contracts/exchange; P* f& M0 s# a7 o: F6 J1 \$ e
八、EOS v1.1与v1.2版本的差异% L" e7 D% N: }
在~/eosio-wallet/config.ini中可以修改keosd应用程序的端口,可以通过keosd命令单独启动。. y5 v1 x9 a! g( ^0 G8 Z; h) t9 c
在~/.local/share/eosio/nodeos/config/config.ini中可以修改nodeos应用程序的端口,可以通过nodeos命令启动,一般需要添加插件启动,如:
( W  z8 _; z9 w, {3 ]" m3 knodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::wallet_api_plugin' K! g5 `/ e% Y! }) S! Y% n
v1.1版本
6 e% N) D* ?& r# q支持wallet RPC API,在nodeos中添加eosio::wallet_api_plugin插件以启动keosd,那么keosd的端口与nodeos一致,同时也可以再通过命令keosd单独启动keosd应用程序,此时可以通过两种途径访问keosd,一是使用nodeos的插件方式访问,得用nodeos的端口访问keosd,二是使用keosd的端口访问。  _9 D, s5 _, Q9 [* A
通过RPC访问钱包数据的时候目录在~/.local/share/eosio/nodeos/data。通过cleos命令访问钱包数据的时候目录在~/eosio-wallet。5 k" o1 x; D/ U0 j) P) @: P
v1.2版本' u+ _. `, u" f. s1 Q3 ]+ W
nodeos已经删除了钱包API,应该直接在keosd中使用API。它的API定义与之前一样,可以在v1.2之前的版本中查看钱包API,所以在nodeos中不能再添加钱包插件以启动keosd了,需要通过命令keosd单独启动keosd应用程序,注意它的端口不能与nodeos一样。0 p4 X* \+ c- b1 i# o" B  w
通过RPC和cleos命令访问钱包数据的目录都在~/eosio-wallet。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13