Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

华胥
146 0 0
主网Jungle 测试网络本地网络* Y- r/ q3 ~0 K4 y/ X

6 l* Z9 e! j" i3 s* M咱们在开发阶段一般选择测试网络和本地网络皆可,测试完成后在部署到主网。这里我们先选择在本地网络上进行开发,因为在Jungle 测试网络中不支持wallet的RPC接口,因为它作为一个公共的服务节点,是不可能帮助大家管理私钥的,那样会非常不安全,大家都会共用相同的钱包和私钥。最后我们将使用本地搭建的keosd服务管理钱包,并连接到Jungle 测试网络中。' V, g, ^% Z5 f) {6 @0 C8 D
EOS支持的操作系统7 K6 `! ~% K) _6 }. v

! K5 a' r& \9 y) LAmazon 2017.09 and higher- w: ~$ R. Y5 e
Centos 7% X+ O; c8 \3 ?; ]. B. `; V( N
Fedora 25 and higher (Fedora 27 recommended)! N6 r6 Q/ ~& v- {5 w
Mint 18
- P7 N# {( Z  l9 E5 OUbuntu 16.04 (Ubuntu 16.10 recommended)# U% O+ G. z% Y- [" _4 i
MacOS Darwin 10.12 and higher (MacOS 10.13.x recommended)
- U4 k2 `! W# A( Q( V

3 N. F5 p8 N, v! [& s本教程的开发环境选择为:Ubuntu 16.04、本地网络、RPC+eosjs、eosV1.2.2。接下来开始搭建EOS本地环境将它部署在单个主机。
5 [4 e3 N7 d4 M, D6 [一、下载和编译EOS
/ Y9 l" _4 ?7 s3 D3 I获取EOS指定版本源码及其所有子模块,若不加入–recursive参数,则不能下载EOS关联的子项目。指定版本源码使用-b指定版本号。
7 N% S0 ~( O* r. \git clone https://github.com/EOSIO/eos -b v1.2.2 --recursive
9 E. w9 p' x, H" O# i编译源码生成可执行文件
& T3 a4 S0 G1 z8 i  ~  j" Kcd eos
/ A( |1 P0 |/ P: n; e6 {./eosio_build.sh
. A, N  N" D) r3 p  w编译时间比较长,需一两个小时不等,若编译顺利成功后,则会看到如下显示! o+ M5 e; o$ U* j
$ ~! t, W- X0 p  f1 n
在编译的过程中很有可能会出现各种错误,由于系统、EOS版本的差异出现的错误也会不一样,下面列出了常见的多种错误的解决办法。) [4 ~0 Q8 X9 b0 y. [
二、编译时报错的解决办法
2 A; i5 u  \8 A# g( K3 z1. 物理内存RAM不足. _" X% C' K  @) X) K5 B2 r/ J+ i- w

/ t- i( h) @% D8 s+ n; b解决办法:
0 D( M0 ~* W1 C6 M3 _1 B修改文件源码eos/scripts/eosio_build_ubuntu.sh中的if [ "${MEM_MEG}" -lt 7000 ]; then,将7000改为自己系统的内存大小,如4000,如还报错,那么继续减小。! ]& C+ c% x' t& m) W; H9 M4 @( k
2. 可用内存不足3 M+ p3 r& D* T, J1 X8 F
You must have at least 20GB of available storage to install EOSIO.
1 _2 W7 G! A4 b( W1 uExiting now.
( w4 d) w, X  {( T+ p2 X解决办法:
. I- \: F4 e6 q8 P. }' _, p! ]3 ^在文件源码eos/scripts/eosio_build_ubuntu.sh中增加如下一行代码代码前面。
# a3 \! f$ }* fDISK_MIN=1% c! `1 q% x6 p
3. 无法下载(MongoDB等)
4 }# ^3 k1 Z2 S+ z, J. ~% O  a) q' A无法下载MongoDB等是由于翻墙配置的问题。
0 q4 f( V5 L# \# f解决办法:
) \% ^' J; K* ?4 O3 N7 HMac的Shadowsocks使用“PAC自动模式”,另外偏好设置配置如下
: r9 c; k2 x; u: y# a
" W) P: v5 C0 _0 ?2 K' \+ M& Y8 w. F7 f
Ubuntu的配置如下,其中的192.168.1.116 是Mac的局域网地址。' H5 l! d( N+ m* J
$ w- f$ z$ F, Z( k
4. 不能创建/tmp/llvm-compiler文件夹3 h" y$ I: A: ^3 D
0 [( o' r! D( A% h, J- c+ `: ~# l
解决办法:
+ t7 @+ k: F* V- I' y7 O/ Y6 F进入/tmp目录,删除llvm-compiler文件夹即可。
! F  y% ~' w4 m/ Y/ ]5 V三、安装EOSIO
: D3 L2 @# x9 k% d4 ~安装所有依赖库并构建EOSIO,使用如下命令
. ~; ]7 z% n4 x& a4 b9 ]sudo ./eosio_install.sh# M& V9 ^3 I9 ?( m" X# R
若出现如下错误file INSTALL cannot make directory "/usr/local/eosio/etc/eosio",加上sudo即可。
" V% V3 x$ R1 M" U/ }. q
) G& B# e5 Z) K2 z  Q5 s安装成功后的效果如下$ H) t) _( _5 o; a% }" \( K

1 E5 S" A' h! J' i( R- A% v1 l安装完在根目录新增了build文件夹,最后EOS的目录结构如下。
0 I# D, t; g6 T* V" J
. t, b/ e% K  ^; e) ^8 Y四、配置Nodeos与Keosd# s3 b  }% c* t- ]) G) Z) i2 h
1. 配置Nodeos
( R' `( N6 V9 ^Nodeos是用来运行节点的EOSIO程序。执行一下步骤进行配置:
" ]" x& W2 P* |5 N找到如下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所在行也用#注释: \4 {- W" f' ]" o! S, T

, J# i5 _* f8 F! a# m5 s3 B再最后面添加如下内容
3 R$ m2 z- K0 z# Enable production on a stale chain, since a single-node test chain is pretty much always stale8 C- m/ m7 V. B; N
enable-stale-production = true  n! U( a' a/ e
# Enable block production with the testnet producers
# Q3 g' T0 l# h$ Y3 V( u# aproducer-name = eosio& @2 M9 r, X& ?- f/ q
# Load the block producer plugin, so you can produce blocks
* r. w# C) {9 b* t( h* j* U" S0 h1 |plugin = eosio::producer_plugin
0 z* `; R; B1 _# As well as API and HTTP plugins* D3 R/ m( Z2 J8 v
plugin = eosio::chain_api_plugin
5 E$ m. k1 c+ b) v1 k4 Rplugin = eosio::http_plugin
$ f* w5 m) p9 i# This will be used by the validation step below, to view history3 d8 b1 q4 p  z, t9 F& `9 W
plugin = eosio::history_api_plugin
# ]# U6 M8 K: r# @  Q" k若是v1.2之前的版本需添加plugin = eosio::wallet_api_plugin插件。( o3 Q% `- U7 ~% z4 P& e# G
2. 配置Keosd
3 C, F. m& m% ?7 h, }, W8 Ekeosd 是一个轻客户端钱包,负责管理钱包,以便在广播到网络之前保护密钥和签署交易,在本地计算机上运行并在本地存储您的私钥。" k# T' F) o, B$ s1 S
找到路径~/eosio-wallet/config.ini,然后打开config.ini文件将第一行的服务地址设置为:0 E8 w$ m6 ]& n, C6 F3 C
0 W* F. O+ `* _/ \7 B8 D
http-server-address = 127.0.0.1:88895 i  a5 n( v7 j2 C% M
五、启动节点& B) Q" o# i/ |% r
1. 启动nodeos
* i0 a8 Y# i) p2 y( ^& [4 V, Q! n+ k使用以下命令启动自己的单节点区块链:
8 X5 J% e$ ]0 l: fnodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin+ ?6 g3 {7 I5 \# y3 W& ~- ?+ K  K
使用了plugin加载一些可选插件,在V1.2之前版本需要添加--plugin eosio::wallet_api_plugin插件。启动后应该每0.5秒生成一个块并有日志输出到终端,如下" u- D& z" p+ K

6 G5 Y$ k3 b, T/ U9 t如果报如下错误,则添加参数--delete-all-blocks
7 l! \) f! q9 G; G% Y/ J0 m
/ o' l  p: l: |: b/ D2. 启动keosd* r* I' U! H+ n; G! o, q3 N: K
可以直接输入命令keosd即可启动keosd。
$ h# S  ]& K8 M2 p- R+ x& s5 a$ keosd% t9 V1 D8 h8 ^. |/ m
停止keosd,因为cleos可以自动启动keosd,最终可能会有多个keosd正在运行。# k8 K" t6 C( q# {. H& m' o. z
$ pkill keosd
* c0 C0 V5 m! H注意:当使用RPC接口时,需要另起keosd,且端口与nodeos的不能一样。在使用cleos连接wallet时不用另外单独启动keosd,它连接的是nodeos的keosd服务。若使用cleos时报如下错误,则须停止keosd。5 @7 M5 T  P$ ?0 K
lixu@ubuntu:~$ cleos wallet create
2 `- y& S; j) O0 J"/usr/local/eosio/bin/keosd" launched( u/ z/ W6 p, j" K, N
Unable to connect to keosd, if keosd is running please kill the process and try again.
1 K% h* j' p; \* \; b! S六、使用Cleos创建钱包6 W  K) p$ r8 q0 }$ J
下面我们使用命令行进行操作,需要使用到Cleos,它是一个命令行工具,可以与nodeos公开的REST API进行交互,前提是nodeos需要配置eosio :: chain_api_plugin插件。2 J8 v3 O1 U6 s# Q6 s- F9 S  @
1. 创建钱包
& g4 ~" K: e0 _5 ~" E* w- z钱包是授权私钥的存储库,与区块链交互所必需的。通过如下命令创建钱包,可以通过-n参数指定创建的钱包名称。如果不指定钱包名称,则会创建一个名为default的默认钱包。( S3 ^/ h6 g2 {5 U
cleos wallet create8 E/ [3 R0 D! v6 Z; a
若是1.2以上版本,则需添加参数–to-console,输出如下
2 t* W) g7 y' F* F2 P1 k( g6 Klixu@ubuntu:~$ cleos wallet create --to-console
8 G8 X% a9 @6 N) C4 C! fCreating wallet: default
+ G. F8 q1 }# e/ T% }Save password to use in the future to unlock this wallet.# R  C# ]/ {+ t/ |. F6 O" ~
Without password imported keys will not be retrievable.
" q2 X* n9 K& Y2 O: i: S"PW5J5SSUrU3sGBonpxjxbn9QXGPdpAsCkWowmjCcLyBPUu5Y5uvvv"$ G; I9 O! |7 Q. d& H$ x1 h8 h
成功后将会生成钱包的解锁密码,钱包15分钟不用将会自动锁定,注意一定要保存最后一行的密码,需要使用它解锁这个钱包。1 m! g& H/ Q3 b  ?+ ]) ~& \
2. 解锁钱包: T6 t9 Q$ S2 S' m( n4 p( Z
可以通过两种方式解锁钱包,推荐使用第二种方式解锁。
! F% \, E$ L/ H5 ]5 M直接在命令行上添加密码参数,可以通过-n参数指定钱包名称6 h8 o9 U- X( l# ?% A7 b
3 o1 K) F8 D6 i
cleos wallet unlock --password PW5JCEkVgzoBHUVCzbEwT9es6agM6NRPv6n21wgbzVaem6rWE4akS
/ u3 y, z5 x' C% d4 X在交互模式下解锁3 b: L) {1 D& _6 c# @- p- N" ?( W
! A& `% H3 O" j0 i
cleos wallet unlock+ F9 y6 G5 ~" C2 W5 ~
接着提示password:,然后输入密码即可! t- w. U) X  d- [
lixu@ubuntu:~$ cleos wallet unlock
* ?: t/ }/ s7 b# i" B' D8 P1 ~password:
* w9 O$ D$ B; O  ^$ M$ G两种方式解锁成功后都会输出6 X6 d( F1 a# x: n
Unlocked: default
8 o# {; T7 z! }& k7 k" Y7 B注意:7 ^% `9 c+ E6 U2 o  A, c
/ y+ l; V3 f/ \& r% S+ D- `
直接在命令行上使用您的密码并将其记录到您的bash历史记录中通常是不安全的,因此最好在交互模式下解锁。
  Q& B7 h8 m2 a' O出于安全考虑,最好在不使用钱包时使用命令cleos wallet lock将钱包锁定。
' v% }) ]- u1 c% ^! j) W
) f- I! O7 J- @  n2 t0 }0 D
3. 查看钱包列表: b1 ~* o. g4 I, Q
使用命令cleos wallet lock查看钱包列表,在列表中解锁后的钱包将在钱包名后面有*标记。
! w- g; F3 e/ m% p+ w4 K. E7 Ilixu@ubuntu:~/Desktop/sourcecode/eos$ cleos wallet list
! h# t; n! {  W) c+ T6 _Wallets:
( n' ^9 I1 y" B( j* `! O5 L[9 }$ C! E7 U8 E8 Q3 M
  "default *",
) U. y5 [6 g8 [4 K* c/ z5 W]
! ]2 T; c  M# G# B7 o4. 导入密钥到钱包
" X/ l6 x( O# @* Z. t* x. _3 s上述步骤中启动的私有区块链是使用默认初始密钥创建的,必须将其加载到钱包中。
/ `' R4 P3 ^. f# A$ x使用命令cleos wallet import --private-key ******。可以通过-n参数指定钱包名称
; `; ]3 a7 F4 A+ i1 z2 Z; ^% Vlixu@ubuntu:~$ cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
. i- o0 V: d& O/ aimported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
$ U6 A4 [  I7 d/ x  l0 O+ R注意:此时导入的私钥并不是创建钱包时生成的密码。
* u" }0 [  s) b" n4 y5 H这个密钥
& ]  q9 O. ?* [4 P( @6 h( a( N5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3/ ~$ ~& U8 @0 a7 o; l9 S7 V  G' T) _/ A
在以下配置文件中可以查看
- X) [: F4 T$ z) i* f5 Q8 jMac OS: ~/Library/Application\ Support/eosio/nodeos/config/config.ini
$ n6 r1 Z5 k3 S% CLinux: ~/.local/share/eosio/nodeos/config/config.ini  G* d3 v. }/ `1 |
打开文件后滑动到最下面即可查看到私钥。1 b; a. Y8 E7 Q" B3 r0 e
注意该秘钥对正是超级账户 eosio的秘钥对。接下来就会用到eosio账户。
6 e% K% I0 a# ]' _6 C/ Hcleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV% ], Q1 g7 o8 t3 N) q& A9 j
七、部署系统合约( l$ W  L( v/ X/ N; {! t6 q
现在我们有一个拥有帐户eosio密钥的钱包defualt,那么接下来用eosio账户部署默认的系统合约,确保钱包defualt处于解锁状态。
- o( s8 ]6 [% x) heosio账户是默认就有的,在系统启动的时候就自动被创建的超级用户。
: G2 h9 K; n5 M+ X' @, Z1. eosio.bios合约
4 V' e5 l  |4 U3 d  h出于开发目的,eosio.bios可以使用系统提供的合约,通过此合约可以通过确认用户持有的token直接控制其他帐户的资源分配,包括管理链上的堆栈和非堆栈资源,带宽、CPU以及内存资源。该eosio.bios合约可以在contracts/eosio.bios中找到源代码。
  P( i4 I, q0 l先进入到eos根目录,再使用命令cleos set contract eosio build/contracts/eosio.bios -p eosio@active部署BIOS合约。" i: y. A1 R& a& d
lixu@ubuntu:~/Desktop/sourceeos/eos$ cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
/ R) d5 _5 m9 }( N+ nexecuted transaction: af3bc248ca73d14c644fca863f4f82135bb72582b7f2be0dbec73a41c4f6438a  200 bytes  422 us
1 X" A( ]/ w" ]) ?#         eosio
& Z: a# R6 q' W' D* J命令中的参数说明:4 e$ _6 G  [* U  g( n
eosio:部署合约的账户build/contracts/eosio.bios:合约路径-p eosio@active:作用是告诉cleos使用eosio帐户部署此合约,将使用我们之前导入的帐户eosio的active权限的私钥对该操作进行签名。( u) F) X$ u. ^9 ~
% P  H; D# N! g' P) c' C
2. eosio.system合约' E% y8 ]- V  X& a+ Z1 R2 E% c
eosio.system是EOS系统合约中最重要的部分,实现了EOS项目的所有基本功能:如:创建新账户、部署智能合约、交易RAM、抵押获取资源(net、cpu)、投票、领取节点奖励等;  l0 t( U4 S0 w+ v: T' D
cleos create account eosio eosio.system EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV; c0 F7 c, o$ I0 x# ^
cleos set contract eosio.system build/contracts/eosio.system: `4 @' B" V5 p* ?
3. eosio.msig合约, Z1 e$ N( U) k) A
实现的是多签系统合约,实现了一个多签功能,由于EOS要求系统的每一次更新都需要出块节点完成一次多签,当签名数达到2/3+1时,更新才能生效。所以出块节点可以调用这个合约实现多签功能。
. ^1 g$ \2 `! E. S; x1 Tcleos create account eosio eosio.msig EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
* d0 p7 X" d& W, Q8 t( O! ncleos set contract eosio.msig build/contracts/eosio.msig; C' {  u  G$ C4 S2 ^5 c
4. eosio.token合约
% D1 Q7 \9 q% q. `9 H* V2 p用来发布代币的合约。
. ]  _" {6 x  M2 ~cleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV' f1 E% U2 c& W$ f
cleos set contract eosio.token  build/contracts/eosio.token
) P1 H7 b4 `) G2 ^- n5. exchange合约
2 B0 j$ `# N" ~4 h! V+ B6 c2 J合约提供的功能来创建代币。& Z6 Q/ r5 c3 s' ~* @1 a
cleos create account eosio exchange EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV6 b( Y3 [* x0 j: Y1 c
cleos set contract exchange build/contracts/exchange
/ ~  s7 U3 m6 o4 b  \: v: H# r八、EOS v1.1与v1.2版本的差异
! s: Y! f" q+ j' L$ j- ~0 h在~/eosio-wallet/config.ini中可以修改keosd应用程序的端口,可以通过keosd命令单独启动。, r# A% k8 O/ Y) f. p/ T, u4 l, X
在~/.local/share/eosio/nodeos/config/config.ini中可以修改nodeos应用程序的端口,可以通过nodeos命令启动,一般需要添加插件启动,如:
' i/ X% Z4 A) l  M! j! xnodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::wallet_api_plugin
) h& R9 V3 Q8 Q% @1 }, X9 ev1.1版本/ q- L5 d' P& Y! o7 [9 V
支持wallet RPC API,在nodeos中添加eosio::wallet_api_plugin插件以启动keosd,那么keosd的端口与nodeos一致,同时也可以再通过命令keosd单独启动keosd应用程序,此时可以通过两种途径访问keosd,一是使用nodeos的插件方式访问,得用nodeos的端口访问keosd,二是使用keosd的端口访问。" R7 f/ _6 T  d* q! d. v
通过RPC访问钱包数据的时候目录在~/.local/share/eosio/nodeos/data。通过cleos命令访问钱包数据的时候目录在~/eosio-wallet。
  L. p, p: Z& z# Av1.2版本
1 ~/ I+ f6 \2 W4 {$ fnodeos已经删除了钱包API,应该直接在keosd中使用API。它的API定义与之前一样,可以在v1.2之前的版本中查看钱包API,所以在nodeos中不能再添加钱包插件以启动keosd了,需要通过命令keosd单独启动keosd应用程序,注意它的端口不能与nodeos一样。
7 a! q' p: G: n通过RPC和cleos命令访问钱包数据的目录都在~/eosio-wallet。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13