Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

华胥
118 0 0
主网Jungle 测试网络本地网络* ?9 S4 s5 M5 Z5 a

1 Z1 n; k+ j0 v! @& u咱们在开发阶段一般选择测试网络和本地网络皆可,测试完成后在部署到主网。这里我们先选择在本地网络上进行开发,因为在Jungle 测试网络中不支持wallet的RPC接口,因为它作为一个公共的服务节点,是不可能帮助大家管理私钥的,那样会非常不安全,大家都会共用相同的钱包和私钥。最后我们将使用本地搭建的keosd服务管理钱包,并连接到Jungle 测试网络中。
- a7 z# ^5 M- i  |- a+ p5 W* e/ ZEOS支持的操作系统$ Y0 H$ @- ~9 T  y7 x- P
& o9 n  `+ Q6 d% i' |0 b
Amazon 2017.09 and higher7 |* g8 i# f- ?% m; g( b/ B
Centos 7  k/ ~  T5 `- s- d3 z6 C1 l. |
Fedora 25 and higher (Fedora 27 recommended)* \& R! `0 B6 B  j$ i
Mint 18
+ z" b1 [; c; X2 l5 C: VUbuntu 16.04 (Ubuntu 16.10 recommended)
5 P! T3 \3 ^7 O0 u5 KMacOS Darwin 10.12 and higher (MacOS 10.13.x recommended)
9 R( `  e8 ~6 p7 U/ a( g7 M- F$ ~4 W! i
  X+ ]7 b( m" }6 t' J; ]. G" w4 {* ^
本教程的开发环境选择为:Ubuntu 16.04、本地网络、RPC+eosjs、eosV1.2.2。接下来开始搭建EOS本地环境将它部署在单个主机。
0 O2 p1 A$ r+ [3 s一、下载和编译EOS' e; p1 t0 Q7 a7 I
获取EOS指定版本源码及其所有子模块,若不加入–recursive参数,则不能下载EOS关联的子项目。指定版本源码使用-b指定版本号。
/ k. G5 J, T( b; Qgit clone https://github.com/EOSIO/eos -b v1.2.2 --recursive, o% i# ~. C$ @" b  i) m
编译源码生成可执行文件' d+ y" b' p) V% s3 n: c. p
cd eos
, G0 m4 Z* n. F& e./eosio_build.sh, Q9 A0 y, O- ]( N$ n% ?
编译时间比较长,需一两个小时不等,若编译顺利成功后,则会看到如下显示
- p3 t  ^  I4 N3 ]" ?- T9 Q5 j0 L# _/ g. _# a4 @, z! g( @
在编译的过程中很有可能会出现各种错误,由于系统、EOS版本的差异出现的错误也会不一样,下面列出了常见的多种错误的解决办法。
7 V% U# g/ G+ `$ t- K; D3 P9 O二、编译时报错的解决办法0 e" E2 v. s0 [7 b& t: n
1. 物理内存RAM不足" R. I# J/ |- Y- Z- v4 v
, f5 `- U9 V5 l! P' i# j
解决办法:; x2 g, p2 |% q* r+ f9 Q( D/ {
修改文件源码eos/scripts/eosio_build_ubuntu.sh中的if [ "${MEM_MEG}" -lt 7000 ]; then,将7000改为自己系统的内存大小,如4000,如还报错,那么继续减小。5 M4 S. Q+ [5 c" N% F4 g+ J. S
2. 可用内存不足' b( A6 l. J4 ~
You must have at least 20GB of available storage to install EOSIO.; N3 b: B, G* N+ I) A
Exiting now.
& ^' D' F. h; D解决办法:
, h% {! R/ j, o" ?  `1 m在文件源码eos/scripts/eosio_build_ubuntu.sh中增加如下一行代码代码前面。) F+ ?' a' i( v7 I% P5 ^
DISK_MIN=1
& e6 j% r$ |6 x3. 无法下载(MongoDB等)
8 B& m9 w0 p: |2 @/ \" \) ~# y; E无法下载MongoDB等是由于翻墙配置的问题。9 P+ e+ l+ ]6 ^$ u+ B
解决办法:
( o2 }5 z5 r& Q( F- i- I# a. WMac的Shadowsocks使用“PAC自动模式”,另外偏好设置配置如下
% l. l, _8 X+ a6 Q7 @3 [1 V/ I) k; r+ R& N' C
8 y  S, k# M: \6 U/ u1 k
Ubuntu的配置如下,其中的192.168.1.116 是Mac的局域网地址。7 O  d; `% P  O
% w' r/ ]' ?9 D+ m/ A  ^7 r
4. 不能创建/tmp/llvm-compiler文件夹" n3 I  @0 o0 a' n. L) g
6 J3 p# M% F  d2 o" {3 J! O4 w  j* W8 Y
解决办法:
( J! E" Q: p& x, S1 y" X6 p. l进入/tmp目录,删除llvm-compiler文件夹即可。
" x: Z1 @' \/ w1 Z- u4 L8 O, x9 ?$ H, v三、安装EOSIO
5 O5 s5 N; W9 Q6 Q. K安装所有依赖库并构建EOSIO,使用如下命令
! [0 W3 J! r( f2 C% ?& O+ J) t. U% ]sudo ./eosio_install.sh
3 j" Y% n  s! j若出现如下错误file INSTALL cannot make directory "/usr/local/eosio/etc/eosio",加上sudo即可。( M7 {3 z+ k1 x, r) @
% O  p$ m# D; d% \7 F
安装成功后的效果如下( N/ \! F0 F/ I6 J! B

" R& j7 t, `6 z9 A安装完在根目录新增了build文件夹,最后EOS的目录结构如下。7 `* ]8 H4 I, A( j
1 m8 {% q: H6 H- {! L& ~. S* |
四、配置Nodeos与Keosd  u0 q$ v4 Z: u! G0 m
1. 配置Nodeos6 w! d) O% q1 T% r
Nodeos是用来运行节点的EOSIO程序。执行一下步骤进行配置:
, y* R2 p' |5 G4 s" Y0 f" Z找到如下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所在行也用#注释$ N3 ~& s- h& p

- O, e: p. y! o2 U/ p  a+ v# a再最后面添加如下内容* ]& G9 a/ v0 P# O9 B+ L
# Enable production on a stale chain, since a single-node test chain is pretty much always stale  g6 s# \, o3 E
enable-stale-production = true' p0 t, M" `3 O, e
# Enable block production with the testnet producers1 u+ e$ {7 e# D8 d" K8 Z
producer-name = eosio0 M# g$ m: f9 q# B% V2 b
# Load the block producer plugin, so you can produce blocks
. t2 c1 o1 y8 s% M. ]plugin = eosio::producer_plugin8 C! \9 `1 h* Y6 E1 ]
# As well as API and HTTP plugins
9 \/ E2 Q2 B, O6 m; ]plugin = eosio::chain_api_plugin$ g( S2 d' q! o2 g! B' o8 \
plugin = eosio::http_plugin
5 D0 C, ]9 Y6 O  _' F; w# This will be used by the validation step below, to view history  ]5 f4 P" r" @/ }$ @
plugin = eosio::history_api_plugin
+ v% c* _4 z. Y% K若是v1.2之前的版本需添加plugin = eosio::wallet_api_plugin插件。
; H) g# c- E& C2. 配置Keosd
/ m) [* C, S- J% d5 }5 Xkeosd 是一个轻客户端钱包,负责管理钱包,以便在广播到网络之前保护密钥和签署交易,在本地计算机上运行并在本地存储您的私钥。
  |3 i8 S0 G3 G5 _+ O9 V找到路径~/eosio-wallet/config.ini,然后打开config.ini文件将第一行的服务地址设置为:
9 p. v& r8 m) ]* s$ g
. X% p% [0 |* D1 k( c( g& z5 \
http-server-address = 127.0.0.1:8889
6 p. \. h) J; n, Y! v3 q; ?五、启动节点
; y2 k* z; S7 b6 Z& C" E, u+ S1. 启动nodeos
* |6 S' h9 E$ ?; k( `8 s6 X0 J使用以下命令启动自己的单节点区块链:9 X. G+ _/ t4 J; ]( P# G5 z) A
nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin
. W" [% Z* @7 j# m) b使用了plugin加载一些可选插件,在V1.2之前版本需要添加--plugin eosio::wallet_api_plugin插件。启动后应该每0.5秒生成一个块并有日志输出到终端,如下, c: ?. u6 \+ l1 h8 r- ^' o& u7 y0 h# l

2 S0 u% R- ]; A如果报如下错误,则添加参数--delete-all-blocks2 I4 p9 ~+ L8 u5 \
$ N$ y1 |1 X8 F+ B* y: S+ {
2. 启动keosd
( `1 c: @& `8 A& ?可以直接输入命令keosd即可启动keosd。9 R3 C5 o* M1 Y, @( `/ \
$ keosd
6 F. A& t5 ^2 Y5 g3 T+ M1 t停止keosd,因为cleos可以自动启动keosd,最终可能会有多个keosd正在运行。0 g% y$ `% \+ B( R6 C1 B1 G( N
$ pkill keosd7 t* m3 ^! L" j3 u
注意:当使用RPC接口时,需要另起keosd,且端口与nodeos的不能一样。在使用cleos连接wallet时不用另外单独启动keosd,它连接的是nodeos的keosd服务。若使用cleos时报如下错误,则须停止keosd。
7 f1 W# j/ N$ U9 w% e7 p1 clixu@ubuntu:~$ cleos wallet create: N: j5 b- ?' \) B& G! }3 H+ }
"/usr/local/eosio/bin/keosd" launched  X- X4 v: q8 P2 I$ I# s
Unable to connect to keosd, if keosd is running please kill the process and try again.1 V, n. h! }; h$ `
六、使用Cleos创建钱包) g% |- U3 ]9 [! |+ P! S3 X
下面我们使用命令行进行操作,需要使用到Cleos,它是一个命令行工具,可以与nodeos公开的REST API进行交互,前提是nodeos需要配置eosio :: chain_api_plugin插件。" s3 A( S" i! s- t6 g
1. 创建钱包
: l8 u* b; R4 B; G7 j钱包是授权私钥的存储库,与区块链交互所必需的。通过如下命令创建钱包,可以通过-n参数指定创建的钱包名称。如果不指定钱包名称,则会创建一个名为default的默认钱包。7 R- I. u( j2 s
cleos wallet create5 Q. t# Q6 o; D3 L
若是1.2以上版本,则需添加参数–to-console,输出如下$ w: l& e: ]% f. U/ S
lixu@ubuntu:~$ cleos wallet create --to-console
* w' }# A" z; T, X# c; ~& z( jCreating wallet: default! R$ s5 W; z7 B' c: X+ o
Save password to use in the future to unlock this wallet.: K! Y. Q2 u' \, S
Without password imported keys will not be retrievable.- k" R; ]- a  {( ?
"PW5J5SSUrU3sGBonpxjxbn9QXGPdpAsCkWowmjCcLyBPUu5Y5uvvv"$ e" L# d( a6 U: d. n( {9 A/ m
成功后将会生成钱包的解锁密码,钱包15分钟不用将会自动锁定,注意一定要保存最后一行的密码,需要使用它解锁这个钱包。
5 \- }" q6 w4 \1 ]( k4 `& `' J2. 解锁钱包
$ n9 u4 L* ^" C7 ?9 S- M7 ~: ~可以通过两种方式解锁钱包,推荐使用第二种方式解锁。1 D' g- @$ u/ ?3 j3 {; w
直接在命令行上添加密码参数,可以通过-n参数指定钱包名称/ T5 H- H8 [& \% S7 ?

  r3 E5 S, l2 z/ t" D% Jcleos wallet unlock --password PW5JCEkVgzoBHUVCzbEwT9es6agM6NRPv6n21wgbzVaem6rWE4akS3 t" z2 ]3 @4 t- y
在交互模式下解锁
# P8 Q+ i' [6 x, q8 l
6 M, q/ e: P* W! S: a$ e- E% q
cleos wallet unlock6 N3 b0 ]8 d3 e$ ^  |
接着提示password:,然后输入密码即可: _3 ]5 s" F2 `
lixu@ubuntu:~$ cleos wallet unlock
2 O! i7 h' P7 @, I* Dpassword:& {8 n% E- u- x
两种方式解锁成功后都会输出
9 ]6 {, Z% H4 K. `$ }6 h. p1 M% qUnlocked: default: r% h4 b6 J; X! n9 o# ~7 `. F
注意:! Q, i  r, d( J! Q
# L: k$ @! B' U: N! b
直接在命令行上使用您的密码并将其记录到您的bash历史记录中通常是不安全的,因此最好在交互模式下解锁。& z6 e* d: ~( z; ]
出于安全考虑,最好在不使用钱包时使用命令cleos wallet lock将钱包锁定。
7 M  [2 A5 g/ G* B2 c
8 g  o+ ^( X- R+ g. z+ j
3. 查看钱包列表' r6 e8 d. f5 W9 X/ _$ A6 i
使用命令cleos wallet lock查看钱包列表,在列表中解锁后的钱包将在钱包名后面有*标记。0 r2 N8 h: S% r0 H2 c' I2 H7 e
lixu@ubuntu:~/Desktop/sourcecode/eos$ cleos wallet list  G! d3 p8 V& s. M0 k# \
Wallets:
7 z- q" [( p: G( b[
5 k, h3 x" J' N  "default *",
. l* u6 m2 _8 Z' ]* \% Z5 \]8 s  z* x6 s* S1 A9 Y( H
4. 导入密钥到钱包
" x0 y6 T. e+ A% h! R' W$ G上述步骤中启动的私有区块链是使用默认初始密钥创建的,必须将其加载到钱包中。& a1 u4 M% I( f4 r6 a
使用命令cleos wallet import --private-key ******。可以通过-n参数指定钱包名称! s$ q* Z- Q# c7 P9 u
lixu@ubuntu:~$ cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
* j. B/ r2 z7 r" K* E+ kimported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
- J0 z5 q6 u  L+ r$ ^注意:此时导入的私钥并不是创建钱包时生成的密码。. ~4 Q5 s  |: o8 N$ p, z$ N! Y
这个密钥7 b; _* z- Q9 D& L- ?
5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3  M& z1 I+ F! c8 c* |7 i+ ?
在以下配置文件中可以查看& v# Q" a% B" B9 V' f" C8 g
Mac OS: ~/Library/Application\ Support/eosio/nodeos/config/config.ini
, O& Z. @- _; }" a, m7 K1 ELinux: ~/.local/share/eosio/nodeos/config/config.ini* n, `, I+ N' ]+ S: |8 u5 d
打开文件后滑动到最下面即可查看到私钥。& K8 f" h- L/ ~5 W
注意该秘钥对正是超级账户 eosio的秘钥对。接下来就会用到eosio账户。* z7 D5 K1 i: x) N
cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
% J9 d% I3 P% G# Z+ O9 I7 X8 Z$ ?七、部署系统合约2 |6 v& X& ~2 z6 p6 g7 L* t, K
现在我们有一个拥有帐户eosio密钥的钱包defualt,那么接下来用eosio账户部署默认的系统合约,确保钱包defualt处于解锁状态。
: S+ y4 g7 q: o1 ?+ H. J& Jeosio账户是默认就有的,在系统启动的时候就自动被创建的超级用户。
0 f8 K8 Z7 J8 H5 h1. eosio.bios合约
6 v1 {8 c/ a6 a出于开发目的,eosio.bios可以使用系统提供的合约,通过此合约可以通过确认用户持有的token直接控制其他帐户的资源分配,包括管理链上的堆栈和非堆栈资源,带宽、CPU以及内存资源。该eosio.bios合约可以在contracts/eosio.bios中找到源代码。: U: K; C, Z. o8 D1 o+ c0 ]
先进入到eos根目录,再使用命令cleos set contract eosio build/contracts/eosio.bios -p eosio@active部署BIOS合约。
! L& j1 q! @/ S$ S- Y7 Alixu@ubuntu:~/Desktop/sourceeos/eos$ cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
# q0 ~, u) I, Aexecuted transaction: af3bc248ca73d14c644fca863f4f82135bb72582b7f2be0dbec73a41c4f6438a  200 bytes  422 us+ o6 O1 m4 H& }4 t9 z9 Y
#         eosio . [6 _( Z; n4 [! l
命令中的参数说明:
$ z% `' A3 h# G7 _; P: t1 Yeosio:部署合约的账户build/contracts/eosio.bios:合约路径-p eosio@active:作用是告诉cleos使用eosio帐户部署此合约,将使用我们之前导入的帐户eosio的active权限的私钥对该操作进行签名。* R' O9 F; C0 W) k5 F

# B  u  v6 N5 V5 \* `6 M# F, R2. eosio.system合约
1 ?2 @* v4 s% y: }- T# {eosio.system是EOS系统合约中最重要的部分,实现了EOS项目的所有基本功能:如:创建新账户、部署智能合约、交易RAM、抵押获取资源(net、cpu)、投票、领取节点奖励等;
) U8 W4 o, w. D( Pcleos create account eosio eosio.system EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
! S8 ?* w: B$ s4 Kcleos set contract eosio.system build/contracts/eosio.system  I, k3 T& u! S4 T
3. eosio.msig合约
) d+ _' s. v- R: J4 P实现的是多签系统合约,实现了一个多签功能,由于EOS要求系统的每一次更新都需要出块节点完成一次多签,当签名数达到2/3+1时,更新才能生效。所以出块节点可以调用这个合约实现多签功能。" O: I0 B$ j' c( W# T
cleos create account eosio eosio.msig EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
6 _7 L# E, e: i( F" scleos set contract eosio.msig build/contracts/eosio.msig
3 ?1 p" S7 K/ N6 p9 v' H" s1 c3 R& `9 Y4. eosio.token合约; c" K% N' N  j  v2 D
用来发布代币的合约。; R# L$ U# }/ F8 Y+ L! \3 `
cleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
/ f/ ^$ u3 Y9 ?8 m' j. kcleos set contract eosio.token  build/contracts/eosio.token2 l- |* d4 n7 A2 i6 Y! X
5. exchange合约" n5 U5 i  ?4 x7 @! F2 H
合约提供的功能来创建代币。- C" E# u% E1 Z9 I, s
cleos create account eosio exchange EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
# |. T$ B, \' R8 F9 Tcleos set contract exchange build/contracts/exchange
  u) @. y' W2 \6 i  {) ~八、EOS v1.1与v1.2版本的差异( g6 y% j5 f+ L+ y: F/ V0 d
在~/eosio-wallet/config.ini中可以修改keosd应用程序的端口,可以通过keosd命令单独启动。
% _+ V. [. a0 F5 ?# ~& J在~/.local/share/eosio/nodeos/config/config.ini中可以修改nodeos应用程序的端口,可以通过nodeos命令启动,一般需要添加插件启动,如:
- ?1 R) f+ h0 w, v& Rnodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::wallet_api_plugin
6 E: m: Q* U# \( U8 T2 I) ?: sv1.1版本
) L# E+ X, Z2 d3 h: f, S, N" r支持wallet RPC API,在nodeos中添加eosio::wallet_api_plugin插件以启动keosd,那么keosd的端口与nodeos一致,同时也可以再通过命令keosd单独启动keosd应用程序,此时可以通过两种途径访问keosd,一是使用nodeos的插件方式访问,得用nodeos的端口访问keosd,二是使用keosd的端口访问。
0 @' D7 N2 F3 y3 G' G通过RPC访问钱包数据的时候目录在~/.local/share/eosio/nodeos/data。通过cleos命令访问钱包数据的时候目录在~/eosio-wallet。6 a% S0 l  e4 P* {# c5 |" W
v1.2版本) O& R- X' H" m9 v2 T& @+ }  R: H- v
nodeos已经删除了钱包API,应该直接在keosd中使用API。它的API定义与之前一样,可以在v1.2之前的版本中查看钱包API,所以在nodeos中不能再添加钱包插件以启动keosd了,需要通过命令keosd单独启动keosd应用程序,注意它的端口不能与nodeos一样。. u7 U( W# A6 M1 _: L. H
通过RPC和cleos命令访问钱包数据的目录都在~/eosio-wallet。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13