Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

华胥
151 0 0
主网Jungle 测试网络本地网络: ~1 v- i/ y; x8 ]: I- L. e

! {* Q# K. M, U+ v6 ]& N6 B2 `咱们在开发阶段一般选择测试网络和本地网络皆可,测试完成后在部署到主网。这里我们先选择在本地网络上进行开发,因为在Jungle 测试网络中不支持wallet的RPC接口,因为它作为一个公共的服务节点,是不可能帮助大家管理私钥的,那样会非常不安全,大家都会共用相同的钱包和私钥。最后我们将使用本地搭建的keosd服务管理钱包,并连接到Jungle 测试网络中。
* _6 ?& @5 \  I) `EOS支持的操作系统
# P5 O; R5 l- y8 }
$ d( X9 I. \0 F% r# k8 FAmazon 2017.09 and higher, g$ c0 n' ^$ P4 _* D
Centos 7
5 e5 \1 Z+ U* L0 B6 N. |Fedora 25 and higher (Fedora 27 recommended). c) `" F+ S* j5 m! T3 e6 D3 c
Mint 18  R# }2 k6 z7 B' P; z+ \
Ubuntu 16.04 (Ubuntu 16.10 recommended)" }7 X5 A1 ^# c% D4 i# ?
MacOS Darwin 10.12 and higher (MacOS 10.13.x recommended)& ?, s- F' a$ g; b( E* ^
. n2 z; l8 a7 T; E* C3 s, @$ H
本教程的开发环境选择为:Ubuntu 16.04、本地网络、RPC+eosjs、eosV1.2.2。接下来开始搭建EOS本地环境将它部署在单个主机。
( o* B8 @- o4 N6 d* n8 Q一、下载和编译EOS
/ k. Y5 K) ?0 X获取EOS指定版本源码及其所有子模块,若不加入–recursive参数,则不能下载EOS关联的子项目。指定版本源码使用-b指定版本号。
) h# F0 X1 O$ `# U8 w3 Ugit clone https://github.com/EOSIO/eos -b v1.2.2 --recursive
* t7 L, a' P. Y' v; x& ^- ]  I编译源码生成可执行文件
/ ]4 i1 k1 d2 Q: S; Y% Wcd eos/ D- O. Y0 P4 S. F% a
./eosio_build.sh
" f% Q# t- H& j1 C* e# y* Q5 t5 M' L6 Y编译时间比较长,需一两个小时不等,若编译顺利成功后,则会看到如下显示
+ w; R0 v, A' p$ t3 R- }5 j+ v+ N, n4 P/ ^1 w3 C
在编译的过程中很有可能会出现各种错误,由于系统、EOS版本的差异出现的错误也会不一样,下面列出了常见的多种错误的解决办法。  b) x: `  r$ e$ c
二、编译时报错的解决办法% v1 n5 p! z  y/ w  ^1 j8 K: ?
1. 物理内存RAM不足
" D( ~  y& b, N- S7 Y
+ j8 P( H' P$ U/ C5 P  k解决办法:
, B; c9 C* a/ |3 E& `/ @+ _修改文件源码eos/scripts/eosio_build_ubuntu.sh中的if [ "${MEM_MEG}" -lt 7000 ]; then,将7000改为自己系统的内存大小,如4000,如还报错,那么继续减小。
. b) F' C. D! _2. 可用内存不足+ o, G$ D# b7 m5 U! ?
You must have at least 20GB of available storage to install EOSIO.: o0 f6 u1 k* R5 F/ ]7 O; X
Exiting now.
" ^+ i$ h% R& t  I  }- u解决办法:, Q9 T$ c' W2 c2 t
在文件源码eos/scripts/eosio_build_ubuntu.sh中增加如下一行代码代码前面。
. V$ G% K- Y: Y' v7 V/ |5 rDISK_MIN=1
' x, y3 d  @3 j$ B+ A; D3. 无法下载(MongoDB等)
( R% M% V- [+ J. y2 E0 I& \无法下载MongoDB等是由于翻墙配置的问题。
8 Y8 F0 ?2 }4 W解决办法:; |) N& L% |" a3 Z1 `
Mac的Shadowsocks使用“PAC自动模式”,另外偏好设置配置如下
* F/ S& Z4 C( z! v/ |. N. v/ @! s
' a. B: \& W0 [
, @: ?0 L' i  m+ [4 f: Z: f% gUbuntu的配置如下,其中的192.168.1.116 是Mac的局域网地址。
; ?+ t' W* K8 X4 A% |+ J) V' y# x; m  Z( ]; a( o  m  }
4. 不能创建/tmp/llvm-compiler文件夹
" c& |& t8 D( h3 J. [' w) M! V9 T& Z" m3 S# p$ P- v
解决办法:6 A5 u  Y2 @- D% w( o- r
进入/tmp目录,删除llvm-compiler文件夹即可。
. x/ E' P% B6 p三、安装EOSIO1 }0 Q* x5 c! V+ ]6 @3 @
安装所有依赖库并构建EOSIO,使用如下命令
' w+ n# L1 m5 S! |/ |1 T' M) ^8 x- L1 Fsudo ./eosio_install.sh9 Q2 l9 J0 O; w- v. A  ^, K
若出现如下错误file INSTALL cannot make directory "/usr/local/eosio/etc/eosio",加上sudo即可。
" u" ]1 r; p  P* N. ^( l7 L  E. y* P1 J* u# z9 g% P" P
安装成功后的效果如下
& y/ S3 c, s5 U+ V; z4 L# _  \( B5 ^5 ]- P' x1 E& i- j5 M' ?. @3 @1 I
安装完在根目录新增了build文件夹,最后EOS的目录结构如下。1 ^6 ]- ?* [+ B6 z; l
* P4 F: r! `9 c. z9 s% y
四、配置Nodeos与Keosd' U( W% X% k2 I! ?5 u# g
1. 配置Nodeos
8 g! T# G7 I' _6 _0 w% E2 YNodeos是用来运行节点的EOSIO程序。执行一下步骤进行配置:
6 r. G" P* Q. z4 f找到如下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所在行也用#注释0 _0 T1 s; [8 c. z6 B
# l# ?. C- X! q# p( X7 t  L
再最后面添加如下内容' {- t; _; j- l7 \; _8 w
# Enable production on a stale chain, since a single-node test chain is pretty much always stale
- l2 m" @$ ?, `5 `; H- g+ c# I1 I: {3 _enable-stale-production = true* L, z9 ~7 Z: W' |
# Enable block production with the testnet producers+ o* E, Y" U- e/ _. k
producer-name = eosio' [0 T6 b- }6 D  y
# Load the block producer plugin, so you can produce blocks
' V) u' @. y& z$ @plugin = eosio::producer_plugin
3 k  x9 ^+ V# d; @) q" I# As well as API and HTTP plugins2 P* L2 [- D! S5 E
plugin = eosio::chain_api_plugin7 v! [+ A5 N; u
plugin = eosio::http_plugin
; _6 H. f& H5 q' M# This will be used by the validation step below, to view history
  d* g8 t7 V. O& H! cplugin = eosio::history_api_plugin
# y' f) d' N+ p4 H5 j若是v1.2之前的版本需添加plugin = eosio::wallet_api_plugin插件。
2 [1 r& Q$ Q9 x( n  h2. 配置Keosd
% D+ r/ ?2 W# b  c0 `" `. |0 Xkeosd 是一个轻客户端钱包,负责管理钱包,以便在广播到网络之前保护密钥和签署交易,在本地计算机上运行并在本地存储您的私钥。& z" R$ Z$ ?1 T1 h( A
找到路径~/eosio-wallet/config.ini,然后打开config.ini文件将第一行的服务地址设置为:
$ H2 W1 p3 M$ p1 h4 {4 d
5 \) l9 C" y5 a% q. O# I2 c' o5 A
http-server-address = 127.0.0.1:88899 c+ U8 @# _8 x
五、启动节点! I- [1 w8 F9 }7 \  g
1. 启动nodeos
6 K; s- m. l- A, z3 O) z4 Z, S3 M使用以下命令启动自己的单节点区块链:  D1 {1 z' L+ I$ j& V- M  @
nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin0 d* t  V/ P% A8 x" w: W
使用了plugin加载一些可选插件,在V1.2之前版本需要添加--plugin eosio::wallet_api_plugin插件。启动后应该每0.5秒生成一个块并有日志输出到终端,如下. S  z# d8 N. n3 f2 D
/ r* x& ~( Y( E
如果报如下错误,则添加参数--delete-all-blocks
) y, Q' r) ~. c3 K& A
: W. K) [) x1 k  d  L* V; G: p2. 启动keosd
) L+ N4 i0 Y" |' B0 i. R  ~1 V可以直接输入命令keosd即可启动keosd。5 [1 `  ]1 i0 X3 Q; F
$ keosd* q/ f! I9 Z: S6 F
停止keosd,因为cleos可以自动启动keosd,最终可能会有多个keosd正在运行。; F. @9 ?7 a; e, a) @5 x
$ pkill keosd4 a7 V+ ?1 o5 o" H) w
注意:当使用RPC接口时,需要另起keosd,且端口与nodeos的不能一样。在使用cleos连接wallet时不用另外单独启动keosd,它连接的是nodeos的keosd服务。若使用cleos时报如下错误,则须停止keosd。! U8 |9 n3 Q3 a, E/ q
lixu@ubuntu:~$ cleos wallet create
- |1 K  U) U5 ~( ]- o"/usr/local/eosio/bin/keosd" launched
8 r; I; ?6 h/ A3 x* `Unable to connect to keosd, if keosd is running please kill the process and try again.
1 Y# j* \, O# E六、使用Cleos创建钱包6 c, ?# G+ X  b0 G6 i2 B# j4 |7 t1 M3 i
下面我们使用命令行进行操作,需要使用到Cleos,它是一个命令行工具,可以与nodeos公开的REST API进行交互,前提是nodeos需要配置eosio :: chain_api_plugin插件。
# h4 E, ]& B* G  T1. 创建钱包
8 D1 l3 y' l% |, Y# Z; S钱包是授权私钥的存储库,与区块链交互所必需的。通过如下命令创建钱包,可以通过-n参数指定创建的钱包名称。如果不指定钱包名称,则会创建一个名为default的默认钱包。: L7 A. B/ ~0 w6 ]# x" t7 z& w
cleos wallet create
  Y9 H4 J$ Z. a$ J+ \- A若是1.2以上版本,则需添加参数–to-console,输出如下  r2 Q7 M7 Q/ f6 J( H$ e2 H
lixu@ubuntu:~$ cleos wallet create --to-console
$ b. v6 w- {% S# N& pCreating wallet: default
2 T: t2 Y( R5 j$ ]9 g0 DSave password to use in the future to unlock this wallet.
# M6 t" F- m) y/ ]) g* _Without password imported keys will not be retrievable.) A/ c5 s8 _& f% t" b
"PW5J5SSUrU3sGBonpxjxbn9QXGPdpAsCkWowmjCcLyBPUu5Y5uvvv"
- P! H- s1 I& |成功后将会生成钱包的解锁密码,钱包15分钟不用将会自动锁定,注意一定要保存最后一行的密码,需要使用它解锁这个钱包。8 Q8 R( ?9 Y3 n/ P+ w  X7 Q
2. 解锁钱包: H4 V+ a+ p6 m7 b1 P4 Q# n/ i
可以通过两种方式解锁钱包,推荐使用第二种方式解锁。6 q; k$ u/ i! M3 g( K
直接在命令行上添加密码参数,可以通过-n参数指定钱包名称
' p; q8 v/ W" N. O. I3 i, @' i9 ]

. u* _! `' g  O* |cleos wallet unlock --password PW5JCEkVgzoBHUVCzbEwT9es6agM6NRPv6n21wgbzVaem6rWE4akS0 \: ]3 o6 k; o  V: Y2 S
在交互模式下解锁
, G  ]: h7 C# C: G, N

+ o) G, x) F0 ~; d# ^2 fcleos wallet unlock
4 l  g  |$ ~+ U) l' G  e接着提示password:,然后输入密码即可4 d7 I! [) d' T8 u+ d# K7 H
lixu@ubuntu:~$ cleos wallet unlock
$ L% U% S/ L+ k3 l1 s& g) Jpassword:8 o* f* O: ?( O9 @% Z+ P
两种方式解锁成功后都会输出
" Z: _: z: w7 b. z, f: JUnlocked: default6 M/ e' F$ e+ w
注意:
" j# Z. f, Q2 @( i* L* Z
; F: [7 }% n$ W  F直接在命令行上使用您的密码并将其记录到您的bash历史记录中通常是不安全的,因此最好在交互模式下解锁。, j: o; T" D6 G1 W% P; N
出于安全考虑,最好在不使用钱包时使用命令cleos wallet lock将钱包锁定。6 B' I: y$ r( U/ {* o
3 P- Q! m& B2 N
3. 查看钱包列表
1 B$ P4 r. R8 V0 k$ C- ~( I; P% D( t使用命令cleos wallet lock查看钱包列表,在列表中解锁后的钱包将在钱包名后面有*标记。
3 |5 a9 ^* g+ ^3 ulixu@ubuntu:~/Desktop/sourcecode/eos$ cleos wallet list: ?5 i7 b" B- ~. O/ ?# _
Wallets:: M. C+ }1 T( K" C7 @. Z( R9 c$ d
[
: t7 w6 }+ r8 ^: U  J( n5 ]  "default *",5 d- i$ g; b& ~, D, g
]
# Y' h! C% l1 n0 w) D6 O- r4. 导入密钥到钱包' k$ d5 Y* E  q" a8 ?5 d
上述步骤中启动的私有区块链是使用默认初始密钥创建的,必须将其加载到钱包中。2 I; ]6 ]$ ^* x  k7 q
使用命令cleos wallet import --private-key ******。可以通过-n参数指定钱包名称) ^$ w9 ?& z& ?1 l2 l7 F) D
lixu@ubuntu:~$ cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
3 o. J; Y' ~9 C; Yimported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
0 h0 A8 U- O; C8 O2 [% t6 L, }+ s# D注意:此时导入的私钥并不是创建钱包时生成的密码。
/ J! B- k+ V- c! Y6 T" {- B& s5 x: y这个密钥7 B+ x  q! }7 {+ K; }
5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3* U: o6 F0 I  l4 i5 W4 _) d1 ~2 H
在以下配置文件中可以查看( x' P/ v( E& Q0 {* P
Mac OS: ~/Library/Application\ Support/eosio/nodeos/config/config.ini! Z! m& l; I" m7 \8 a% i) u
Linux: ~/.local/share/eosio/nodeos/config/config.ini
4 ?# w- X* I9 U/ B; M打开文件后滑动到最下面即可查看到私钥。
( I$ |  A9 x( {) T注意该秘钥对正是超级账户 eosio的秘钥对。接下来就会用到eosio账户。( H- k2 A8 j  I4 }8 P
cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
$ t* M1 R! f0 W4 }1 R% m- e% C7 |七、部署系统合约
& _: M" X* D! J3 p/ X: v现在我们有一个拥有帐户eosio密钥的钱包defualt,那么接下来用eosio账户部署默认的系统合约,确保钱包defualt处于解锁状态。
+ \- t. b9 x9 T( \0 B4 W9 Eeosio账户是默认就有的,在系统启动的时候就自动被创建的超级用户。
: i' m$ |# c$ s0 \% T% R4 l1. eosio.bios合约
; p$ u4 N, v5 _. h. O出于开发目的,eosio.bios可以使用系统提供的合约,通过此合约可以通过确认用户持有的token直接控制其他帐户的资源分配,包括管理链上的堆栈和非堆栈资源,带宽、CPU以及内存资源。该eosio.bios合约可以在contracts/eosio.bios中找到源代码。
: m; [" w$ G" \; u  f先进入到eos根目录,再使用命令cleos set contract eosio build/contracts/eosio.bios -p eosio@active部署BIOS合约。
# h0 G0 t$ j8 Elixu@ubuntu:~/Desktop/sourceeos/eos$ cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
& ]2 o( @4 S0 n; O/ G" `executed transaction: af3bc248ca73d14c644fca863f4f82135bb72582b7f2be0dbec73a41c4f6438a  200 bytes  422 us
- O, F% Q) s( r0 n5 l  K#         eosio " J+ M' f, S" T; s* Q* n
命令中的参数说明:+ s5 d- O: E5 H5 ~$ g  s
eosio:部署合约的账户build/contracts/eosio.bios:合约路径-p eosio@active:作用是告诉cleos使用eosio帐户部署此合约,将使用我们之前导入的帐户eosio的active权限的私钥对该操作进行签名。3 ]6 D: [$ U( \2 @; r

2 f9 e1 n% n% a2 v2 L2. eosio.system合约2 L" q: Y( z% l
eosio.system是EOS系统合约中最重要的部分,实现了EOS项目的所有基本功能:如:创建新账户、部署智能合约、交易RAM、抵押获取资源(net、cpu)、投票、领取节点奖励等;+ q' d  _4 @# J# e
cleos create account eosio eosio.system EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV* p/ o+ D1 [, t: j
cleos set contract eosio.system build/contracts/eosio.system
5 A+ V, [3 U/ V2 |) X# F# \3. eosio.msig合约
7 ^( a6 B% B( W  X, D实现的是多签系统合约,实现了一个多签功能,由于EOS要求系统的每一次更新都需要出块节点完成一次多签,当签名数达到2/3+1时,更新才能生效。所以出块节点可以调用这个合约实现多签功能。+ H' o: x% D6 q) u( v+ }3 M  F/ o
cleos create account eosio eosio.msig EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV2 l+ S* f8 g4 [3 n8 N; L+ ~+ o
cleos set contract eosio.msig build/contracts/eosio.msig* i. ~% z# L1 U9 p& ~
4. eosio.token合约
; B! L7 b3 Y4 O5 }" a3 z) y6 x用来发布代币的合约。
2 D) `/ J2 l2 _$ O" l; u, g$ wcleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
5 h* R- d& Z1 U/ b4 H0 L1 L8 @: qcleos set contract eosio.token  build/contracts/eosio.token
" g: i4 h) W1 O7 A: h5. exchange合约: `, v1 L+ x6 e7 V2 l# v$ x6 G
合约提供的功能来创建代币。& Q) |6 K) M+ a2 e
cleos create account eosio exchange EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV! ]3 n' ]2 J! ~4 N
cleos set contract exchange build/contracts/exchange
) y4 l$ a* ~7 F4 g0 N八、EOS v1.1与v1.2版本的差异% Y% h+ _) I( ^' n. E# L
在~/eosio-wallet/config.ini中可以修改keosd应用程序的端口,可以通过keosd命令单独启动。
( N/ L0 [3 L% y/ Z( C3 T在~/.local/share/eosio/nodeos/config/config.ini中可以修改nodeos应用程序的端口,可以通过nodeos命令启动,一般需要添加插件启动,如:5 w4 K8 N: c$ ]  G6 }. u
nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::wallet_api_plugin
1 c6 F. t0 l+ i8 {* U* j+ E+ Yv1.1版本% Q  c- O+ e7 r5 I
支持wallet RPC API,在nodeos中添加eosio::wallet_api_plugin插件以启动keosd,那么keosd的端口与nodeos一致,同时也可以再通过命令keosd单独启动keosd应用程序,此时可以通过两种途径访问keosd,一是使用nodeos的插件方式访问,得用nodeos的端口访问keosd,二是使用keosd的端口访问。
& q" k3 k7 @4 ?) f' Y0 V通过RPC访问钱包数据的时候目录在~/.local/share/eosio/nodeos/data。通过cleos命令访问钱包数据的时候目录在~/eosio-wallet。' u1 b( E+ x  N. k$ ^
v1.2版本
1 b  v7 r  a2 P: v0 wnodeos已经删除了钱包API,应该直接在keosd中使用API。它的API定义与之前一样,可以在v1.2之前的版本中查看钱包API,所以在nodeos中不能再添加钱包插件以启动keosd了,需要通过命令keosd单独启动keosd应用程序,注意它的端口不能与nodeos一样。* q; h  N  S' b
通过RPC和cleos命令访问钱包数据的目录都在~/eosio-wallet。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13