Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

华胥
109 0 0
主网Jungle 测试网络本地网络
4 l4 X2 P+ g- R

! s. x2 [2 C. T咱们在开发阶段一般选择测试网络和本地网络皆可,测试完成后在部署到主网。这里我们先选择在本地网络上进行开发,因为在Jungle 测试网络中不支持wallet的RPC接口,因为它作为一个公共的服务节点,是不可能帮助大家管理私钥的,那样会非常不安全,大家都会共用相同的钱包和私钥。最后我们将使用本地搭建的keosd服务管理钱包,并连接到Jungle 测试网络中。
* J. o& [& ?7 iEOS支持的操作系统7 N5 N5 p* x5 d0 F5 l+ E
/ D9 u3 ?; ]" K) u; A& |5 T4 I
Amazon 2017.09 and higher
( `" B, X; V2 n6 ^# oCentos 74 a, z+ w; A+ {8 ^
Fedora 25 and higher (Fedora 27 recommended)6 P) ]: n4 c2 N0 o8 K
Mint 18
+ F$ M" ^) i: ]; s) x7 SUbuntu 16.04 (Ubuntu 16.10 recommended)8 Q9 X( ~4 H. S9 e
MacOS Darwin 10.12 and higher (MacOS 10.13.x recommended)
% P$ r: X# q0 n& Y* ^" |5 |

% I* J2 I% z) p; M/ P# P) F2 f8 h/ @本教程的开发环境选择为:Ubuntu 16.04、本地网络、RPC+eosjs、eosV1.2.2。接下来开始搭建EOS本地环境将它部署在单个主机。
8 l& p$ w. a7 p7 y0 s( b/ v一、下载和编译EOS
5 h; f$ c# u8 {; u: R: C% h获取EOS指定版本源码及其所有子模块,若不加入–recursive参数,则不能下载EOS关联的子项目。指定版本源码使用-b指定版本号。* d, T/ F1 r5 Y; s: s
git clone https://github.com/EOSIO/eos -b v1.2.2 --recursive
$ P3 [  q" N# K# e, k  a  o8 T编译源码生成可执行文件/ _7 o3 c8 ]' J) a$ @& K% ?+ g
cd eos
+ z9 I' V+ [5 b0 W: o4 I./eosio_build.sh
' z# K, J4 J7 K5 c9 f. t2 e8 I9 H编译时间比较长,需一两个小时不等,若编译顺利成功后,则会看到如下显示2 r: F4 v' a# J
! A9 L! Y& m: o6 P. G: V
在编译的过程中很有可能会出现各种错误,由于系统、EOS版本的差异出现的错误也会不一样,下面列出了常见的多种错误的解决办法。
6 u# I* i- M, ~: ^, P+ k, [二、编译时报错的解决办法7 D6 r5 j' j. o9 w0 n2 b; Y: k0 `+ |
1. 物理内存RAM不足
: F+ m  _$ D1 [1 ^( B5 f5 O
, x4 k9 w- R# v+ M解决办法:7 D/ q0 r, a9 A' d5 y
修改文件源码eos/scripts/eosio_build_ubuntu.sh中的if [ "${MEM_MEG}" -lt 7000 ]; then,将7000改为自己系统的内存大小,如4000,如还报错,那么继续减小。4 Z8 v1 I0 c" @# L  M, Z5 g, r; ^
2. 可用内存不足6 }# T. p1 [) T+ ^
You must have at least 20GB of available storage to install EOSIO., Z0 s! f  @% ?4 l4 @
Exiting now.
- O8 U! K' P1 d0 ?" X# ^( X3 u解决办法:9 K3 z, j& Y, q3 e8 t
在文件源码eos/scripts/eosio_build_ubuntu.sh中增加如下一行代码代码前面。* {% }+ m' [/ ?. e) {- Y7 a  K
DISK_MIN=1
  r* \  z1 y8 v( z8 F) z- ^  I3. 无法下载(MongoDB等)
) {, \3 \2 R1 \" ?0 y5 A无法下载MongoDB等是由于翻墙配置的问题。
$ S5 b; F$ \4 q2 B# }3 t解决办法:1 C8 h- z/ N5 ]7 O3 i
Mac的Shadowsocks使用“PAC自动模式”,另外偏好设置配置如下- L0 S' i3 s8 v! Q* C
& X# H3 P( V8 {! g

$ z$ U  [7 ^. x' i1 ~) qUbuntu的配置如下,其中的192.168.1.116 是Mac的局域网地址。0 t, M( D! |/ D6 G4 F3 Y5 A

: L" u$ v" {9 d5 Y4. 不能创建/tmp/llvm-compiler文件夹
" N+ x& G% t! r$ C0 R% z
$ n! y4 h, s9 p2 ~解决办法:" J% A) s6 [0 R; [+ x% R& k
进入/tmp目录,删除llvm-compiler文件夹即可。
; M9 }0 `$ n! h9 D( |( U2 w) l; n三、安装EOSIO7 ]3 Y/ |$ o& Y8 f9 N
安装所有依赖库并构建EOSIO,使用如下命令( l2 Y6 n) \; K+ O( D; w3 v
sudo ./eosio_install.sh
) ^2 k6 X# T. l+ S1 w若出现如下错误file INSTALL cannot make directory "/usr/local/eosio/etc/eosio",加上sudo即可。( S! b* ^* ?0 o4 V5 J# \
( M/ t7 s; q; v  m
安装成功后的效果如下
( ~0 `. G3 t7 f3 y6 R! H$ |/ M* }7 |" g' u/ h
安装完在根目录新增了build文件夹,最后EOS的目录结构如下。
2 y* _# Q3 [4 s2 A, `9 x+ a) W" j  n, i! ^# t4 Y
四、配置Nodeos与Keosd6 i! h; Y/ t3 c  p+ D* D. \! j4 F& ~! L$ V/ A
1. 配置Nodeos6 P2 q) q; m: T9 l9 w
Nodeos是用来运行节点的EOSIO程序。执行一下步骤进行配置:# A- t3 o- _- g8 J  w  j
找到如下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所在行也用#注释" o" Z5 S# l( s0 s2 h9 g/ `6 w

& h) C- G: ^+ P9 `% R再最后面添加如下内容2 D# D; I8 p% p6 m& T2 u; Y" @7 |
# Enable production on a stale chain, since a single-node test chain is pretty much always stale  l! M( P) l9 ?4 {
enable-stale-production = true
! @# i! _4 \; ^6 x5 P" d9 }3 X4 S# Enable block production with the testnet producers) j" F/ N3 s4 k' f4 l
producer-name = eosio) `5 w8 H9 B: E. T4 y  l0 J* e
# Load the block producer plugin, so you can produce blocks+ r, P2 H4 J8 Y4 A7 L* t8 D0 E
plugin = eosio::producer_plugin/ M+ B2 V9 ~8 N
# As well as API and HTTP plugins/ p, J% [% \. U) q
plugin = eosio::chain_api_plugin
0 D  K9 |0 X& E* Y. C# Z; \plugin = eosio::http_plugin
) B+ W% p' x4 l! \* c; i# This will be used by the validation step below, to view history
! v- F* T  G5 }/ x( @$ kplugin = eosio::history_api_plugin8 f7 a2 J' C5 t  S4 e) X2 H
若是v1.2之前的版本需添加plugin = eosio::wallet_api_plugin插件。% V# h9 R" Z6 G
2. 配置Keosd0 ^- R# R& |: G+ _" b- q. v
keosd 是一个轻客户端钱包,负责管理钱包,以便在广播到网络之前保护密钥和签署交易,在本地计算机上运行并在本地存储您的私钥。. ~8 B/ `1 c- g! B" J& F& `' d
找到路径~/eosio-wallet/config.ini,然后打开config.ini文件将第一行的服务地址设置为:; U3 U/ R- P7 P: v8 s/ ]" |: e

5 z! y/ h8 T- K! G& M0 Lhttp-server-address = 127.0.0.1:88895 I# q- U8 H0 K2 e6 R# _1 o
五、启动节点
( Y$ o% g% Q4 _) V8 E1. 启动nodeos% W9 K4 {, k% x% n7 |( R
使用以下命令启动自己的单节点区块链:
6 |$ @9 l! j+ f" J3 z2 unodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin
* |$ h! x0 F7 F2 Z' K使用了plugin加载一些可选插件,在V1.2之前版本需要添加--plugin eosio::wallet_api_plugin插件。启动后应该每0.5秒生成一个块并有日志输出到终端,如下, {* y& Q9 @( D& g; x1 m) `

' k# c) d0 Q' i" G# h. v2 V如果报如下错误,则添加参数--delete-all-blocks9 S0 `5 N$ R2 h6 T- Y

& K& e$ u3 M3 h; |2 t2. 启动keosd$ E' N; P( `1 `. b" s! [
可以直接输入命令keosd即可启动keosd。6 ?9 L" h* J$ Q$ o6 ?; r# D; u1 i
$ keosd, D9 @) w1 Z- ?" m% t: U
停止keosd,因为cleos可以自动启动keosd,最终可能会有多个keosd正在运行。( W& E7 p2 V" D7 w
$ pkill keosd; Q' Y3 |- a  y, p; Y) J
注意:当使用RPC接口时,需要另起keosd,且端口与nodeos的不能一样。在使用cleos连接wallet时不用另外单独启动keosd,它连接的是nodeos的keosd服务。若使用cleos时报如下错误,则须停止keosd。
5 a; a) U7 X& a5 e# qlixu@ubuntu:~$ cleos wallet create8 {1 T) A. Z9 `2 _
"/usr/local/eosio/bin/keosd" launched
2 C- r, m' j- g# }* W6 HUnable to connect to keosd, if keosd is running please kill the process and try again.
* j' G" z; W& i- x六、使用Cleos创建钱包
& a. w! E0 ~5 l0 v下面我们使用命令行进行操作,需要使用到Cleos,它是一个命令行工具,可以与nodeos公开的REST API进行交互,前提是nodeos需要配置eosio :: chain_api_plugin插件。
/ k0 W/ s3 I1 O1. 创建钱包! W9 |3 k3 p% @) m+ I% D' D1 j; a
钱包是授权私钥的存储库,与区块链交互所必需的。通过如下命令创建钱包,可以通过-n参数指定创建的钱包名称。如果不指定钱包名称,则会创建一个名为default的默认钱包。4 \$ _! Z. Y& ?  c& e  H2 w0 ]; C  T
cleos wallet create. ^7 U: B+ z" B
若是1.2以上版本,则需添加参数–to-console,输出如下
, O% x* `% V+ [8 h/ Z! g4 Ilixu@ubuntu:~$ cleos wallet create --to-console1 r: c4 q1 ^- H# o
Creating wallet: default
& G& l6 J7 H% {& H+ YSave password to use in the future to unlock this wallet.4 G; t9 a9 B* {, J
Without password imported keys will not be retrievable.! u2 D; J3 N, c
"PW5J5SSUrU3sGBonpxjxbn9QXGPdpAsCkWowmjCcLyBPUu5Y5uvvv", V5 v* x/ d3 q' m6 a
成功后将会生成钱包的解锁密码,钱包15分钟不用将会自动锁定,注意一定要保存最后一行的密码,需要使用它解锁这个钱包。
) Y% l* K" d; h# Y3 p0 S2 ]2. 解锁钱包
( f2 j* t- p% }5 s3 N+ h8 F可以通过两种方式解锁钱包,推荐使用第二种方式解锁。0 H. b# \: S9 m
直接在命令行上添加密码参数,可以通过-n参数指定钱包名称/ i9 l5 e- w; W2 v/ n+ k

* M& {& `# c5 c. K  R  qcleos wallet unlock --password PW5JCEkVgzoBHUVCzbEwT9es6agM6NRPv6n21wgbzVaem6rWE4akS9 a2 r7 F- H* u; s+ c1 {: y
在交互模式下解锁
4 c. D/ g: B2 C
8 T! n: ^; O& n% b+ t: |
cleos wallet unlock8 Y3 K+ |( y9 ]7 }1 K
接着提示password:,然后输入密码即可
" L0 [) I1 b. M( V) ]1 F; c1 ]$ llixu@ubuntu:~$ cleos wallet unlock4 S' {( d- m) @* |! G. [' n) l
password:+ k, g8 K1 T1 X; {( b( f$ |
两种方式解锁成功后都会输出
7 y2 C, S% ~2 t8 A( F& |Unlocked: default6 K5 {6 [  V5 H
注意:
8 f* t0 I* G8 P: R. K5 ^# ?
9 i6 _  I6 E2 p+ |9 u直接在命令行上使用您的密码并将其记录到您的bash历史记录中通常是不安全的,因此最好在交互模式下解锁。
9 Y8 J3 a& U8 {4 l8 {出于安全考虑,最好在不使用钱包时使用命令cleos wallet lock将钱包锁定。
  Q" m, m2 q4 b

9 H8 p" D$ _2 W$ r& |! u# x% ]3. 查看钱包列表
2 s4 _' s6 ~! r0 O' m使用命令cleos wallet lock查看钱包列表,在列表中解锁后的钱包将在钱包名后面有*标记。
5 F2 u' Y3 _' j: V/ B  c; n, E8 dlixu@ubuntu:~/Desktop/sourcecode/eos$ cleos wallet list! e; d* c! Y2 }/ m- M" a3 h7 h
Wallets:% @! P/ ?4 ]8 N' K  c  n9 U
[
6 T- r4 ~/ E" i7 m5 A9 M  "default *",
. P# S, A8 J4 k8 p) \" }]# y& k- Q8 P; V4 m  {& O& ~
4. 导入密钥到钱包' P) c4 Z9 v! S
上述步骤中启动的私有区块链是使用默认初始密钥创建的,必须将其加载到钱包中。) P2 s9 g8 X5 ]  c) i0 m0 H
使用命令cleos wallet import --private-key ******。可以通过-n参数指定钱包名称4 y) F- l( w8 @8 E2 m3 a) F* N' j3 z
lixu@ubuntu:~$ cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
: H2 ?% p$ ~6 g+ D3 E4 bimported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV9 r, Z. s5 x# T
注意:此时导入的私钥并不是创建钱包时生成的密码。
6 {9 I$ R  k, e  r5 l; b. J3 ^( I9 C这个密钥* f7 s6 q. E- R; @$ |! [
5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3( Y1 q& M* M- e" T. `
在以下配置文件中可以查看
/ F- r' `, L9 y# mMac OS: ~/Library/Application\ Support/eosio/nodeos/config/config.ini
3 y# A! Q8 A' H! ~3 y/ L' C$ FLinux: ~/.local/share/eosio/nodeos/config/config.ini
* F' d, V5 s( M. Z2 ~3 K/ l. c打开文件后滑动到最下面即可查看到私钥。% F: [; s5 B: i% [. j" E
注意该秘钥对正是超级账户 eosio的秘钥对。接下来就会用到eosio账户。
  i$ S) ~1 i9 \  X% ?+ [6 i* Jcleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
  Z* u  P4 X1 w+ i+ \; [七、部署系统合约
6 o" r( D( I" p5 T现在我们有一个拥有帐户eosio密钥的钱包defualt,那么接下来用eosio账户部署默认的系统合约,确保钱包defualt处于解锁状态。  c7 c  Q/ c& s9 Z" d
eosio账户是默认就有的,在系统启动的时候就自动被创建的超级用户。
" J# d! l  p; ^0 i0 G4 z1. eosio.bios合约5 }" Z! E4 [# l1 Q' O- y
出于开发目的,eosio.bios可以使用系统提供的合约,通过此合约可以通过确认用户持有的token直接控制其他帐户的资源分配,包括管理链上的堆栈和非堆栈资源,带宽、CPU以及内存资源。该eosio.bios合约可以在contracts/eosio.bios中找到源代码。
6 K2 ]9 o, Y6 }& Z) N5 u先进入到eos根目录,再使用命令cleos set contract eosio build/contracts/eosio.bios -p eosio@active部署BIOS合约。
% ?. d! D7 X" C+ qlixu@ubuntu:~/Desktop/sourceeos/eos$ cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV0 H: J1 R/ i( y) H, W; `
executed transaction: af3bc248ca73d14c644fca863f4f82135bb72582b7f2be0dbec73a41c4f6438a  200 bytes  422 us% u9 r4 N$ _/ V  B
#         eosio 0 e+ e4 r8 V! K) t- o2 G6 \6 L
命令中的参数说明:+ i. F* l9 s& E8 M2 ?% q
eosio:部署合约的账户build/contracts/eosio.bios:合约路径-p eosio@active:作用是告诉cleos使用eosio帐户部署此合约,将使用我们之前导入的帐户eosio的active权限的私钥对该操作进行签名。
( S+ k5 r! i" @* P# m4 b& ?
& k) k0 M+ T9 Q- s
2. eosio.system合约
6 V( w" n5 V: S/ ~" ceosio.system是EOS系统合约中最重要的部分,实现了EOS项目的所有基本功能:如:创建新账户、部署智能合约、交易RAM、抵押获取资源(net、cpu)、投票、领取节点奖励等;; s8 A, S( D% u! S
cleos create account eosio eosio.system EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
# f& X0 R, ~# m) e7 j) ?2 A/ zcleos set contract eosio.system build/contracts/eosio.system
% F& Z  x( l/ U% ?1 D+ \7 n3. eosio.msig合约
. `! V3 ^( [( ]* y/ [9 p实现的是多签系统合约,实现了一个多签功能,由于EOS要求系统的每一次更新都需要出块节点完成一次多签,当签名数达到2/3+1时,更新才能生效。所以出块节点可以调用这个合约实现多签功能。* c, I) J9 P# |+ C- B+ t; c
cleos create account eosio eosio.msig EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
7 d1 R9 X- K0 T* v( _) Tcleos set contract eosio.msig build/contracts/eosio.msig
4 Q& g  ^# o. h+ ]0 Z4. eosio.token合约
9 i; h5 [% r4 K' D% @% z. u用来发布代币的合约。
: Q7 T, `8 ^: s1 Zcleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV% y6 L. j# B  f( z, _, [
cleos set contract eosio.token  build/contracts/eosio.token# U6 |, d9 o) e/ d9 p6 Y  U
5. exchange合约
, J, S8 W8 C3 q) O0 C6 Q合约提供的功能来创建代币。
  n, [/ x* d& n! z% A* rcleos create account eosio exchange EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV* S& {4 ]+ d3 c! w# _( {4 u4 G
cleos set contract exchange build/contracts/exchange
, G$ ^# L% q" T* k& U( K八、EOS v1.1与v1.2版本的差异5 ^0 k: j2 j8 [8 _( p# E) s2 O. G7 W
在~/eosio-wallet/config.ini中可以修改keosd应用程序的端口,可以通过keosd命令单独启动。$ K  A& R6 {. ~4 G# F6 x
在~/.local/share/eosio/nodeos/config/config.ini中可以修改nodeos应用程序的端口,可以通过nodeos命令启动,一般需要添加插件启动,如:8 i& ?; w' E: G- Y
nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::wallet_api_plugin
  [, F6 V$ p0 A5 @v1.1版本
, S8 e6 C" \; n2 h2 A2 I' ^' K支持wallet RPC API,在nodeos中添加eosio::wallet_api_plugin插件以启动keosd,那么keosd的端口与nodeos一致,同时也可以再通过命令keosd单独启动keosd应用程序,此时可以通过两种途径访问keosd,一是使用nodeos的插件方式访问,得用nodeos的端口访问keosd,二是使用keosd的端口访问。: T. d6 u  @4 O, I2 q4 e$ Z, b
通过RPC访问钱包数据的时候目录在~/.local/share/eosio/nodeos/data。通过cleos命令访问钱包数据的时候目录在~/eosio-wallet。
: p7 C  ~0 b4 S0 h" `0 x+ Kv1.2版本: U  x' d1 Z/ \# g8 x& z
nodeos已经删除了钱包API,应该直接在keosd中使用API。它的API定义与之前一样,可以在v1.2之前的版本中查看钱包API,所以在nodeos中不能再添加钱包插件以启动keosd了,需要通过命令keosd单独启动keosd应用程序,注意它的端口不能与nodeos一样。
* s( f0 |! O  z5 j8 Y# T* g通过RPC和cleos命令访问钱包数据的目录都在~/eosio-wallet。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13