Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

华胥
152 0 0
主网Jungle 测试网络本地网络
) R( ~  C) C, F5 v5 B! ?9 |

5 \& G# [8 z1 B咱们在开发阶段一般选择测试网络和本地网络皆可,测试完成后在部署到主网。这里我们先选择在本地网络上进行开发,因为在Jungle 测试网络中不支持wallet的RPC接口,因为它作为一个公共的服务节点,是不可能帮助大家管理私钥的,那样会非常不安全,大家都会共用相同的钱包和私钥。最后我们将使用本地搭建的keosd服务管理钱包,并连接到Jungle 测试网络中。
' u7 n' [# q! AEOS支持的操作系统, h& [: Z; `9 l- J$ ?% Y

: a  V3 c' [$ C+ W( nAmazon 2017.09 and higher
+ S. U7 u, y" U9 q( QCentos 7
' a" E. X, g) ?2 YFedora 25 and higher (Fedora 27 recommended)
# s! \$ d8 P# x. pMint 18/ c2 g5 L8 y! c9 M6 f! }0 u
Ubuntu 16.04 (Ubuntu 16.10 recommended)
* k( s, S/ k, HMacOS Darwin 10.12 and higher (MacOS 10.13.x recommended)5 _, z; A1 L' P3 S! q7 L

) T2 f& J& N2 |+ h1 k* q8 Q本教程的开发环境选择为:Ubuntu 16.04、本地网络、RPC+eosjs、eosV1.2.2。接下来开始搭建EOS本地环境将它部署在单个主机。8 s$ s; C- T+ l6 Q- f6 S/ A5 L6 T
一、下载和编译EOS
' h, S. q) a: \% T获取EOS指定版本源码及其所有子模块,若不加入–recursive参数,则不能下载EOS关联的子项目。指定版本源码使用-b指定版本号。
4 N( \$ h) G% g$ y5 f% Hgit clone https://github.com/EOSIO/eos -b v1.2.2 --recursive  |4 I7 w' s+ q( v8 `+ e
编译源码生成可执行文件& g7 L/ v, }  G* v0 ^
cd eos  t3 E& y% c1 ~/ h5 r$ A' H
./eosio_build.sh& V% t4 R, v6 |, }$ T  j! |1 {
编译时间比较长,需一两个小时不等,若编译顺利成功后,则会看到如下显示% u' H  q+ \1 T  k% _
8 E/ R3 G9 V/ O, \
在编译的过程中很有可能会出现各种错误,由于系统、EOS版本的差异出现的错误也会不一样,下面列出了常见的多种错误的解决办法。
+ D4 m  P# ?! |4 c- F' [' R% n  H二、编译时报错的解决办法/ m) D: g2 r$ g6 {; H7 g
1. 物理内存RAM不足
* K% {2 i6 ^: H$ U  F4 t2 f& Z3 z0 M  k) m
解决办法:* x8 W! C$ p# r- d3 c1 I* U% @, x$ j
修改文件源码eos/scripts/eosio_build_ubuntu.sh中的if [ "${MEM_MEG}" -lt 7000 ]; then,将7000改为自己系统的内存大小,如4000,如还报错,那么继续减小。7 U' G* `3 q* }( n6 L& p% @, o- z
2. 可用内存不足8 l& G/ `: ^4 a" a8 I8 ~5 W/ a; z
You must have at least 20GB of available storage to install EOSIO., ]  n* d& j7 \( `1 q
Exiting now.0 R3 B" x2 a% I; j/ y' Q' |
解决办法:
) |, y9 O9 H- Z4 Q3 P在文件源码eos/scripts/eosio_build_ubuntu.sh中增加如下一行代码代码前面。
( @2 e1 I! c) V/ yDISK_MIN=1
; R$ c) z, M9 S" h- x/ D- _3. 无法下载(MongoDB等)
# R, t. s# R+ ], o1 F: T; r: c无法下载MongoDB等是由于翻墙配置的问题。! J% b2 K: \( ~* J& f
解决办法:
, c; N! A( ]6 p- n$ xMac的Shadowsocks使用“PAC自动模式”,另外偏好设置配置如下9 D/ l8 V% C4 K$ `) j

# Y6 J* ~4 y; U+ o7 {( Y# r& Q6 M$ j
Ubuntu的配置如下,其中的192.168.1.116 是Mac的局域网地址。1 w, L( O+ p# H% C5 ?/ \

7 i9 j# q' W! V( F4. 不能创建/tmp/llvm-compiler文件夹/ [  v% V* A3 A+ B5 N

9 d% C* P, M5 X/ m4 F& F解决办法:) j  d, q8 c, ]0 r
进入/tmp目录,删除llvm-compiler文件夹即可。
' c5 Q5 L0 T4 T0 [4 O% }三、安装EOSIO! ^* M8 V* W% I0 E
安装所有依赖库并构建EOSIO,使用如下命令
8 R5 m) U0 t4 T; P  A, D( s/ G5 ~sudo ./eosio_install.sh8 u( ^- A( g- P6 ?& q& t
若出现如下错误file INSTALL cannot make directory "/usr/local/eosio/etc/eosio",加上sudo即可。8 G7 n" D" q$ A7 z
4 D- c  `1 W: y4 S, `2 {$ v
安装成功后的效果如下/ M- [, C8 {& U, X
# q) M6 [' j7 M% F" i) I! a1 \2 T
安装完在根目录新增了build文件夹,最后EOS的目录结构如下。, ^4 `0 f/ R' \( _( V
$ {9 G- M. |' _$ q, u  l9 n! E
四、配置Nodeos与Keosd
* x. x$ q1 V$ z. z  |) \! g1. 配置Nodeos
. \/ w5 i9 v  {  D( A) INodeos是用来运行节点的EOSIO程序。执行一下步骤进行配置:
3 v+ ^# Q$ Z+ l找到如下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所在行也用#注释+ C9 j6 V7 r+ ]2 j2 {3 R7 k
+ W7 u7 W* g. K; z  j
再最后面添加如下内容
% r4 F( {: S. ~$ D2 S' x6 m# Enable production on a stale chain, since a single-node test chain is pretty much always stale
' X+ T* f  v3 {- u8 Aenable-stale-production = true5 k3 t0 L, V2 @  g
# Enable block production with the testnet producers
) B5 j: R1 r& \8 w; lproducer-name = eosio
( z# L  S% }3 K8 ?# Load the block producer plugin, so you can produce blocks
8 ~/ a+ I. |: Tplugin = eosio::producer_plugin. t& j) S8 p, H1 c5 N8 t. B
# As well as API and HTTP plugins
1 M" _$ k% ]+ P3 K' Splugin = eosio::chain_api_plugin, E: p. O: |3 t7 M
plugin = eosio::http_plugin
* @0 |' E$ g' C. P. k% H# This will be used by the validation step below, to view history
6 {& s* W; F  X' s. Xplugin = eosio::history_api_plugin8 e( J2 c/ t; o3 A- s7 T
若是v1.2之前的版本需添加plugin = eosio::wallet_api_plugin插件。5 T# l4 W' F7 v! b$ O0 T
2. 配置Keosd8 [) [7 q' n1 @6 K7 q% i7 k
keosd 是一个轻客户端钱包,负责管理钱包,以便在广播到网络之前保护密钥和签署交易,在本地计算机上运行并在本地存储您的私钥。" E6 v+ b; [5 W! d( s$ D6 q6 L
找到路径~/eosio-wallet/config.ini,然后打开config.ini文件将第一行的服务地址设置为:
3 F9 m' n2 @" q9 D8 x, R
& ?; s$ m# b! f" z9 n
http-server-address = 127.0.0.1:8889+ |4 y' Q/ h% Y# i5 c
五、启动节点
  L9 D* E3 G5 u3 g5 p0 a. z# N1. 启动nodeos
: Z3 Z% K0 s8 x" _/ y& t" T$ v2 l2 f使用以下命令启动自己的单节点区块链:
5 w5 k1 I: g' _$ R/ h% Xnodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin
+ L8 l- K7 F6 X0 {$ L使用了plugin加载一些可选插件,在V1.2之前版本需要添加--plugin eosio::wallet_api_plugin插件。启动后应该每0.5秒生成一个块并有日志输出到终端,如下  E% z% g4 F- h  j9 `( y' e8 Y! L
5 f9 I# p. y( \- ?3 |) J, c' n
如果报如下错误,则添加参数--delete-all-blocks, y6 W* ?; q! i8 ^8 k1 d0 n$ I
; z* c- u6 s: f# N( E( i
2. 启动keosd3 V2 W( l5 N& Q) S# C! J
可以直接输入命令keosd即可启动keosd。: \; g' O6 l# N5 k6 b& V+ e
$ keosd- c1 u1 J. l! `" f* w, V, Y1 T" [& |
停止keosd,因为cleos可以自动启动keosd,最终可能会有多个keosd正在运行。
- Y' j& w( o! U  v( R$ p/ R9 J8 ]$ pkill keosd7 Q0 u9 O( h; _. U- f8 D/ x
注意:当使用RPC接口时,需要另起keosd,且端口与nodeos的不能一样。在使用cleos连接wallet时不用另外单独启动keosd,它连接的是nodeos的keosd服务。若使用cleos时报如下错误,则须停止keosd。  i8 S$ h) o2 i( h' F, Y8 C
lixu@ubuntu:~$ cleos wallet create
$ H* M  e  a6 ]"/usr/local/eosio/bin/keosd" launched% o$ G6 C" e- I) O/ n& U, i
Unable to connect to keosd, if keosd is running please kill the process and try again.
( j5 m. u% w, d, I8 T5 h六、使用Cleos创建钱包( {# l: V9 D' [# P
下面我们使用命令行进行操作,需要使用到Cleos,它是一个命令行工具,可以与nodeos公开的REST API进行交互,前提是nodeos需要配置eosio :: chain_api_plugin插件。
0 `4 V' |% X& I# E. h7 x9 O1. 创建钱包( {  d, C4 u1 a7 x- l
钱包是授权私钥的存储库,与区块链交互所必需的。通过如下命令创建钱包,可以通过-n参数指定创建的钱包名称。如果不指定钱包名称,则会创建一个名为default的默认钱包。
! \4 }7 g! k* d7 ~cleos wallet create4 z' I) n: E; ]& _& u+ }
若是1.2以上版本,则需添加参数–to-console,输出如下
) i1 O* V! F/ ^) S# Clixu@ubuntu:~$ cleos wallet create --to-console
; O- f. j0 Z4 n8 e) G# z& u* VCreating wallet: default1 J" l, f3 c; \# U1 @" m
Save password to use in the future to unlock this wallet.
1 G6 C2 d, J; n! F5 o% P) [; bWithout password imported keys will not be retrievable.
  W1 |# y+ V7 V"PW5J5SSUrU3sGBonpxjxbn9QXGPdpAsCkWowmjCcLyBPUu5Y5uvvv": g1 E. C( I/ A( v+ Y. C
成功后将会生成钱包的解锁密码,钱包15分钟不用将会自动锁定,注意一定要保存最后一行的密码,需要使用它解锁这个钱包。" ~. g/ `& h( N0 ?7 q2 p
2. 解锁钱包
  c8 j1 v- w: w+ Y0 V7 H可以通过两种方式解锁钱包,推荐使用第二种方式解锁。# Y$ w& ~$ M+ U- C/ n
直接在命令行上添加密码参数,可以通过-n参数指定钱包名称9 }  O0 P' F( t' w
& D# [7 O& `7 n  X  O( f
cleos wallet unlock --password PW5JCEkVgzoBHUVCzbEwT9es6agM6NRPv6n21wgbzVaem6rWE4akS& H+ X% U8 j* S+ z% v- y, z
在交互模式下解锁
  V5 Y4 Z  n3 m5 e5 @! P& m5 g
" V" a# E' E8 k# b9 e: h) d
cleos wallet unlock3 v! e* M; F$ p5 t7 y  g/ b
接着提示password:,然后输入密码即可3 y, M6 g8 ^: v& T. C
lixu@ubuntu:~$ cleos wallet unlock
% |5 X/ N: {! ?password:; b( S! A' Y2 h4 u, F( W0 P
两种方式解锁成功后都会输出
3 \3 {, f* e4 E6 G7 j, l0 s2 E4 ZUnlocked: default
5 y$ Q2 t3 D8 M' s* O- s/ [; @3 b注意:
) K' L% O1 h4 i; E+ i) v
8 [# L  l. L/ C直接在命令行上使用您的密码并将其记录到您的bash历史记录中通常是不安全的,因此最好在交互模式下解锁。
5 h' o; p5 l, X0 p, K( m出于安全考虑,最好在不使用钱包时使用命令cleos wallet lock将钱包锁定。
3 E4 d1 y1 r8 y* {- x5 x# o
1 a) J# @* J5 U6 y
3. 查看钱包列表7 l! d6 C# z( l+ y+ E* S
使用命令cleos wallet lock查看钱包列表,在列表中解锁后的钱包将在钱包名后面有*标记。6 Z8 F. t3 R2 ?9 m" c
lixu@ubuntu:~/Desktop/sourcecode/eos$ cleos wallet list! u. n) j7 D$ Z) m8 ~4 y; }/ G
Wallets:
( U  a3 S9 I6 ^5 D[5 C: t5 ^! K4 {4 S& k
  "default *",
1 P$ A& R3 r0 A0 D5 }7 T]
  }  W0 R5 e9 J' q% }4. 导入密钥到钱包" l9 N) J: z9 q& S; P* s
上述步骤中启动的私有区块链是使用默认初始密钥创建的,必须将其加载到钱包中。
" C( M/ s6 b1 g4 Z4 m: o) ]使用命令cleos wallet import --private-key ******。可以通过-n参数指定钱包名称! j/ L$ V3 _( P9 S; J
lixu@ubuntu:~$ cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
. s  y7 z0 J! ~: r1 kimported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV# d! D. |/ h3 h5 {; J
注意:此时导入的私钥并不是创建钱包时生成的密码。
) v- C7 p* ^% S* ~$ S: \& ?" [这个密钥/ p/ w$ N" Z$ [' G7 B9 [
5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
4 g/ R  F; G3 i/ w' l6 E6 ~* S在以下配置文件中可以查看
& c% k1 u% M  [; `6 V& nMac OS: ~/Library/Application\ Support/eosio/nodeos/config/config.ini
# Z; g% U% \% |+ H7 j7 XLinux: ~/.local/share/eosio/nodeos/config/config.ini
9 \! v/ w6 `  k8 u) n- H) S打开文件后滑动到最下面即可查看到私钥。
+ B1 B- Z& q+ W9 a- h, y# s7 R注意该秘钥对正是超级账户 eosio的秘钥对。接下来就会用到eosio账户。3 e7 i% t' B+ i: p* B
cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV: Y9 V4 o" d# m8 E% A; a
七、部署系统合约
9 q  T0 Q" z/ ]* Y% n" [% f现在我们有一个拥有帐户eosio密钥的钱包defualt,那么接下来用eosio账户部署默认的系统合约,确保钱包defualt处于解锁状态。
+ W$ A3 T' S* F3 w% Aeosio账户是默认就有的,在系统启动的时候就自动被创建的超级用户。2 b& V. o" e; u' L5 E2 J
1. eosio.bios合约6 T0 K2 V7 J( l( c& B: C
出于开发目的,eosio.bios可以使用系统提供的合约,通过此合约可以通过确认用户持有的token直接控制其他帐户的资源分配,包括管理链上的堆栈和非堆栈资源,带宽、CPU以及内存资源。该eosio.bios合约可以在contracts/eosio.bios中找到源代码。
& x/ V( H; J6 k2 `, h5 R: C3 F先进入到eos根目录,再使用命令cleos set contract eosio build/contracts/eosio.bios -p eosio@active部署BIOS合约。9 r  t" H/ {2 g$ p
lixu@ubuntu:~/Desktop/sourceeos/eos$ cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV/ u# L; M$ y7 e' ~7 N
executed transaction: af3bc248ca73d14c644fca863f4f82135bb72582b7f2be0dbec73a41c4f6438a  200 bytes  422 us
7 k) P1 r" t" M- A% U& ~( N$ r#         eosio , x8 r0 f; U6 i+ M; W( {
命令中的参数说明:  g4 M6 i  {7 U' W4 y
eosio:部署合约的账户build/contracts/eosio.bios:合约路径-p eosio@active:作用是告诉cleos使用eosio帐户部署此合约,将使用我们之前导入的帐户eosio的active权限的私钥对该操作进行签名。
+ O% Z7 \" S& A
% V' b6 d. w- v4 w( a
2. eosio.system合约
. v/ J5 h4 K4 A- d0 Seosio.system是EOS系统合约中最重要的部分,实现了EOS项目的所有基本功能:如:创建新账户、部署智能合约、交易RAM、抵押获取资源(net、cpu)、投票、领取节点奖励等;
' n, t7 s+ j2 [0 V' {! gcleos create account eosio eosio.system EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV7 Y1 H% J+ g) D
cleos set contract eosio.system build/contracts/eosio.system1 `+ ?7 S9 S/ M3 I3 j( P. {  y4 j
3. eosio.msig合约. [: a* s( N  z; a
实现的是多签系统合约,实现了一个多签功能,由于EOS要求系统的每一次更新都需要出块节点完成一次多签,当签名数达到2/3+1时,更新才能生效。所以出块节点可以调用这个合约实现多签功能。
; l9 A2 h0 V: ~  N* x/ N# Qcleos create account eosio eosio.msig EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
1 [5 t2 B& @4 A3 kcleos set contract eosio.msig build/contracts/eosio.msig
/ B+ O$ U0 Z8 i( c9 ?4. eosio.token合约
7 d" |7 O* D* d用来发布代币的合约。! Y  _  p/ k& y8 M- J
cleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
4 w0 G5 O# u8 k; x5 M& ?cleos set contract eosio.token  build/contracts/eosio.token
: }6 r6 V) u+ h5. exchange合约0 B  o. p  d. {7 ^
合约提供的功能来创建代币。. e7 ~* x. N/ ~3 V1 v
cleos create account eosio exchange EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV  A. e7 ^: k) f# p+ P
cleos set contract exchange build/contracts/exchange8 M5 [) K8 c. E5 C* {
八、EOS v1.1与v1.2版本的差异
/ h8 t/ @- \' Q6 V( f3 [在~/eosio-wallet/config.ini中可以修改keosd应用程序的端口,可以通过keosd命令单独启动。
8 U' k. Z( L2 h: b. ^; d" |1 j在~/.local/share/eosio/nodeos/config/config.ini中可以修改nodeos应用程序的端口,可以通过nodeos命令启动,一般需要添加插件启动,如:7 M6 o( y; ?5 @$ B
nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::wallet_api_plugin! j2 m- ?2 Z! i% ]0 }
v1.1版本
6 G4 P7 J- Y- G& H% N# a4 W支持wallet RPC API,在nodeos中添加eosio::wallet_api_plugin插件以启动keosd,那么keosd的端口与nodeos一致,同时也可以再通过命令keosd单独启动keosd应用程序,此时可以通过两种途径访问keosd,一是使用nodeos的插件方式访问,得用nodeos的端口访问keosd,二是使用keosd的端口访问。
3 ?  p9 P3 E5 q2 u+ X5 V通过RPC访问钱包数据的时候目录在~/.local/share/eosio/nodeos/data。通过cleos命令访问钱包数据的时候目录在~/eosio-wallet。6 c4 m4 \8 X/ _4 A. O
v1.2版本
1 \' C! Q0 ]. n2 ?* ]nodeos已经删除了钱包API,应该直接在keosd中使用API。它的API定义与之前一样,可以在v1.2之前的版本中查看钱包API,所以在nodeos中不能再添加钱包插件以启动keosd了,需要通过命令keosd单独启动keosd应用程序,注意它的端口不能与nodeos一样。
6 H' w6 u" f6 t! v6 I8 p( {  _通过RPC和cleos命令访问钱包数据的目录都在~/eosio-wallet。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13