Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

华胥
103 0 0
主网Jungle 测试网络本地网络
+ e) Y1 S' y' q4 l4 y
0 ?! k8 i* w! [" k) u: p- u
咱们在开发阶段一般选择测试网络和本地网络皆可,测试完成后在部署到主网。这里我们先选择在本地网络上进行开发,因为在Jungle 测试网络中不支持wallet的RPC接口,因为它作为一个公共的服务节点,是不可能帮助大家管理私钥的,那样会非常不安全,大家都会共用相同的钱包和私钥。最后我们将使用本地搭建的keosd服务管理钱包,并连接到Jungle 测试网络中。5 y+ r" u! J' W0 [
EOS支持的操作系统! m# ~: w3 h+ }* r0 i2 Z. ]

$ V9 V7 {" I% [4 CAmazon 2017.09 and higher
" |" D! \9 o: H- CCentos 7
# _/ E$ H* {) z$ \$ aFedora 25 and higher (Fedora 27 recommended)
* S) ~. r9 Q/ B- [" A5 n. N2 wMint 182 k" e9 X# [4 p) ~; B+ t
Ubuntu 16.04 (Ubuntu 16.10 recommended)! X, W2 ^  ^% l. H  |% H! `
MacOS Darwin 10.12 and higher (MacOS 10.13.x recommended)
0 w0 L  v4 {' i4 k# Q

0 M  U0 \! x/ D本教程的开发环境选择为:Ubuntu 16.04、本地网络、RPC+eosjs、eosV1.2.2。接下来开始搭建EOS本地环境将它部署在单个主机。
; @2 I- {. N) K: I) h一、下载和编译EOS
& [9 ]' |4 r  z! n% |获取EOS指定版本源码及其所有子模块,若不加入–recursive参数,则不能下载EOS关联的子项目。指定版本源码使用-b指定版本号。* ?6 b. s/ Y+ v
git clone https://github.com/EOSIO/eos -b v1.2.2 --recursive
: l+ T9 m  b5 z/ c6 f4 \编译源码生成可执行文件
  q- z; X% \$ D2 N! }cd eos" i( H2 }6 Z4 v5 |. j+ ^0 \; T; v
./eosio_build.sh
: @# J! c3 E2 U9 U3 F, C编译时间比较长,需一两个小时不等,若编译顺利成功后,则会看到如下显示: n4 B6 H3 ]0 `" K) B% c; Y0 s0 R( p

' y7 c8 x: a: D2 a' s在编译的过程中很有可能会出现各种错误,由于系统、EOS版本的差异出现的错误也会不一样,下面列出了常见的多种错误的解决办法。
5 r4 ^2 j9 {/ h# D二、编译时报错的解决办法
2 N6 I$ E  A* K+ A6 ^1. 物理内存RAM不足
* H6 `5 N  y+ @# ^) y& U) E! N( j. P, w6 N
解决办法:
8 r: s- T$ W- D7 {3 j- @! e修改文件源码eos/scripts/eosio_build_ubuntu.sh中的if [ "${MEM_MEG}" -lt 7000 ]; then,将7000改为自己系统的内存大小,如4000,如还报错,那么继续减小。
- X# [1 I2 S: @  D2 n. B1 o/ V0 D  [2. 可用内存不足
! M) z3 O; v7 `You must have at least 20GB of available storage to install EOSIO.# k' c* r- S# U$ e
Exiting now.
/ o4 b! q$ I# \: x, P" V+ s9 q解决办法:7 u9 I! [) r1 u# I+ V$ r6 N5 D+ C" t
在文件源码eos/scripts/eosio_build_ubuntu.sh中增加如下一行代码代码前面。
9 c8 p5 U. u2 `DISK_MIN=1
+ k1 n1 W$ q% Z3. 无法下载(MongoDB等)" ~" h* s2 R4 Q/ p' t& g6 ?" u8 a
无法下载MongoDB等是由于翻墙配置的问题。
( Z% ?# J" m6 [" ^解决办法:( L# \+ s7 a1 V3 ]7 Q. N6 l
Mac的Shadowsocks使用“PAC自动模式”,另外偏好设置配置如下
2 W1 b# C+ k- i% s; j; ~( A- ]9 P4 M1 a- k/ p5 X7 G- a
) p, q  I  z# T. h& H, ?
Ubuntu的配置如下,其中的192.168.1.116 是Mac的局域网地址。$ Y, y1 O' U7 r: g

+ F- y8 }% {1 |# O4. 不能创建/tmp/llvm-compiler文件夹
- W2 H2 _! l9 ?; w0 q9 l$ N, h) ~/ y) o, u
解决办法:
! q/ ]; e2 K* T& B+ Y! A- i进入/tmp目录,删除llvm-compiler文件夹即可。3 F: E/ D. P4 o
三、安装EOSIO
& ^2 h- \! V& ?- B安装所有依赖库并构建EOSIO,使用如下命令# i6 S& I  u) d4 M8 L
sudo ./eosio_install.sh
$ B6 b- _: q" D7 d! v$ C若出现如下错误file INSTALL cannot make directory "/usr/local/eosio/etc/eosio",加上sudo即可。
3 T! x+ g" j1 B# v2 O7 l- M9 [1 x% L
安装成功后的效果如下0 d) i* a% x1 |  k/ U1 s
* M: E- X" c2 M4 l! W; d! L
安装完在根目录新增了build文件夹,最后EOS的目录结构如下。+ X' i8 u+ d% b) _
- F' `; t3 F" U5 y9 ?
四、配置Nodeos与Keosd
+ P% |1 i+ K& x' W, L, a1. 配置Nodeos
' a* }9 r+ z- M0 ?! n% wNodeos是用来运行节点的EOSIO程序。执行一下步骤进行配置:( ^  {9 c9 W& x& M+ q& \$ O+ Q
找到如下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所在行也用#注释
1 w- L" z* o2 {* V: n2 B
' L' L* d& C. x; t2 B4 c
再最后面添加如下内容
* x5 j; N4 b+ U- e8 z8 \# Enable production on a stale chain, since a single-node test chain is pretty much always stale8 R3 ^; j$ |, \/ N0 }: }) X% J- Y
enable-stale-production = true
" m6 W$ X0 ?4 j' U6 N4 o( E7 `  ^# Enable block production with the testnet producers1 L( N; f/ z" M+ x+ S% v" S; A
producer-name = eosio/ `3 q1 a" u6 B# N
# Load the block producer plugin, so you can produce blocks+ Q% Q4 R1 ~* N' i
plugin = eosio::producer_plugin
: J2 z/ w5 a. K- t# c( q0 M6 o- }+ d# As well as API and HTTP plugins
$ q' {7 K. Q, w+ e. X3 Y4 @plugin = eosio::chain_api_plugin
; [- x5 k% C/ g8 l- Hplugin = eosio::http_plugin
! N9 M( Y4 M: f( b& g# This will be used by the validation step below, to view history
: P" @0 C9 h4 E4 c5 s; |plugin = eosio::history_api_plugin
0 S! v( t- L" A若是v1.2之前的版本需添加plugin = eosio::wallet_api_plugin插件。( k4 l% z6 O3 `/ O
2. 配置Keosd
$ l8 O  S* U0 }keosd 是一个轻客户端钱包,负责管理钱包,以便在广播到网络之前保护密钥和签署交易,在本地计算机上运行并在本地存储您的私钥。
$ ]/ ]' T( Z3 \找到路径~/eosio-wallet/config.ini,然后打开config.ini文件将第一行的服务地址设置为:
0 i( Z1 }. v1 _2 ]
3 E: f) X7 H) L! [; A- o
http-server-address = 127.0.0.1:88898 M$ a) ?. _6 h4 F
五、启动节点& x/ C* o  O( L* W; U7 l
1. 启动nodeos% L# T4 _% N% p$ a1 z  Y
使用以下命令启动自己的单节点区块链:
& t; A: Z+ x! _' cnodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin
2 ~# z' h8 |9 G6 h" b* i1 M使用了plugin加载一些可选插件,在V1.2之前版本需要添加--plugin eosio::wallet_api_plugin插件。启动后应该每0.5秒生成一个块并有日志输出到终端,如下
8 _% o( A& N. H% f( b, v* y* t3 I' m! a% Y+ Q0 a
如果报如下错误,则添加参数--delete-all-blocks; h4 d. u$ ^5 T6 ~

& G( {4 e; B: M2. 启动keosd
, P' k5 I/ G  o+ i! E( K' c可以直接输入命令keosd即可启动keosd。
5 z# ~# y5 {$ v: z! a0 N9 K: M$ keosd
6 d6 R; ^$ l( w8 D% [停止keosd,因为cleos可以自动启动keosd,最终可能会有多个keosd正在运行。9 z% [' V" k& ^& B' L
$ pkill keosd
9 b( f5 X0 _. s% }  V注意:当使用RPC接口时,需要另起keosd,且端口与nodeos的不能一样。在使用cleos连接wallet时不用另外单独启动keosd,它连接的是nodeos的keosd服务。若使用cleos时报如下错误,则须停止keosd。5 h3 j4 [+ b$ N6 X
lixu@ubuntu:~$ cleos wallet create" U9 h7 K: U. ^/ h8 ?% T
"/usr/local/eosio/bin/keosd" launched
  G* r! ^/ |" K& A0 f0 hUnable to connect to keosd, if keosd is running please kill the process and try again.
% }8 }; F8 [1 E9 o六、使用Cleos创建钱包4 M* n1 U+ v- D0 ?
下面我们使用命令行进行操作,需要使用到Cleos,它是一个命令行工具,可以与nodeos公开的REST API进行交互,前提是nodeos需要配置eosio :: chain_api_plugin插件。8 L+ X* l/ I( [) g  {
1. 创建钱包: n& z! q( L" Y7 Q' J
钱包是授权私钥的存储库,与区块链交互所必需的。通过如下命令创建钱包,可以通过-n参数指定创建的钱包名称。如果不指定钱包名称,则会创建一个名为default的默认钱包。
6 [) m. F# V2 c: Bcleos wallet create
( _, N; }; Z" T, d6 c若是1.2以上版本,则需添加参数–to-console,输出如下8 C) P' Y% W7 a
lixu@ubuntu:~$ cleos wallet create --to-console5 |- f+ a3 l  t: D) I2 i8 y
Creating wallet: default
& f' _" o* S' f( G$ QSave password to use in the future to unlock this wallet.: Z- ?8 K2 @" _8 f0 C; l
Without password imported keys will not be retrievable.* L3 l8 c$ u$ x9 V0 U8 t/ E; k9 ?6 D
"PW5J5SSUrU3sGBonpxjxbn9QXGPdpAsCkWowmjCcLyBPUu5Y5uvvv"& `5 {! E4 n3 S3 L6 M. S) ~
成功后将会生成钱包的解锁密码,钱包15分钟不用将会自动锁定,注意一定要保存最后一行的密码,需要使用它解锁这个钱包。
$ l! ]* \# o' s3 h2. 解锁钱包* `; U1 G" |5 m9 K; h: r
可以通过两种方式解锁钱包,推荐使用第二种方式解锁。
% Y  t$ I1 B8 \5 `' u; G直接在命令行上添加密码参数,可以通过-n参数指定钱包名称- b. N, i4 f% Z
2 y6 Z. v+ ^4 a2 t! C
cleos wallet unlock --password PW5JCEkVgzoBHUVCzbEwT9es6agM6NRPv6n21wgbzVaem6rWE4akS
$ @: P, I2 y/ {, v5 q在交互模式下解锁
- F' ]% R" H; h) ^6 e3 `3 d

. W" J! r# V$ r& F4 {, Vcleos wallet unlock
9 u9 [1 R, `/ w$ m8 ^+ Z, Q6 a* v接着提示password:,然后输入密码即可. N) u, ~" z/ k! ^  q* J# j
lixu@ubuntu:~$ cleos wallet unlock0 z/ J6 r0 a6 K6 Y9 [0 @
password:- |/ S9 _# |) u$ ?  o2 G, ?
两种方式解锁成功后都会输出
. n' f8 S+ p7 S2 VUnlocked: default3 C( a, G" r2 m0 u3 E
注意:8 K; i% v8 d  J6 U) ?4 B$ i

' t. V: L+ ^: O- O6 Y直接在命令行上使用您的密码并将其记录到您的bash历史记录中通常是不安全的,因此最好在交互模式下解锁。' }4 a# U6 O' H: g/ U4 D4 |! j
出于安全考虑,最好在不使用钱包时使用命令cleos wallet lock将钱包锁定。" U) I$ R/ z" S$ P, G8 `
' B' j+ ]( L1 c8 G* T
3. 查看钱包列表6 r6 i! [  F2 J/ t
使用命令cleos wallet lock查看钱包列表,在列表中解锁后的钱包将在钱包名后面有*标记。- m2 A+ ^9 J+ I. W
lixu@ubuntu:~/Desktop/sourcecode/eos$ cleos wallet list
( a" C4 ?3 Y/ W+ DWallets:
. ?/ l) W" O' w- }, I# h[
7 g  P; \1 {* b# \  "default *",1 i" w! a  Q/ R; y' f
]
* [# {/ {" n3 c* t8 s/ ^0 Q4. 导入密钥到钱包9 z3 \6 s) ^# L
上述步骤中启动的私有区块链是使用默认初始密钥创建的,必须将其加载到钱包中。/ Y# V- d+ s( H$ B: Q$ |
使用命令cleos wallet import --private-key ******。可以通过-n参数指定钱包名称8 |4 `4 a/ W; K1 Z
lixu@ubuntu:~$ cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3( O8 ?6 n- o0 r% C$ v
imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
. S8 F' o6 d$ p1 X, t6 }" [注意:此时导入的私钥并不是创建钱包时生成的密码。
" U7 }! S% `1 O6 \# u这个密钥
8 l+ @) }# w2 P: D! f$ u! C  q+ j. h5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3* Z& T6 _/ U2 ^# |
在以下配置文件中可以查看( u' y% G( s! j! d0 P
Mac OS: ~/Library/Application\ Support/eosio/nodeos/config/config.ini, ?6 @2 ^6 F! S
Linux: ~/.local/share/eosio/nodeos/config/config.ini
. }9 r" ~3 t2 W8 W  x0 f" S- f$ P4 R# `打开文件后滑动到最下面即可查看到私钥。
: H- C  \5 ?' T2 f+ [7 e$ P注意该秘钥对正是超级账户 eosio的秘钥对。接下来就会用到eosio账户。; _7 J1 K# i, r4 k( B7 p( l  T5 T7 g+ G
cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
6 u7 n, }$ @; L" e1 s七、部署系统合约  l# j( Y7 Q$ r1 s3 K
现在我们有一个拥有帐户eosio密钥的钱包defualt,那么接下来用eosio账户部署默认的系统合约,确保钱包defualt处于解锁状态。: j# }8 \- m* A; z6 M- U2 n6 e
eosio账户是默认就有的,在系统启动的时候就自动被创建的超级用户。- Y" a5 ]) {8 A, V0 s+ R4 d8 L
1. eosio.bios合约
* C/ e, K. F9 l: A出于开发目的,eosio.bios可以使用系统提供的合约,通过此合约可以通过确认用户持有的token直接控制其他帐户的资源分配,包括管理链上的堆栈和非堆栈资源,带宽、CPU以及内存资源。该eosio.bios合约可以在contracts/eosio.bios中找到源代码。2 ^/ K9 {& B, W, x6 j0 h
先进入到eos根目录,再使用命令cleos set contract eosio build/contracts/eosio.bios -p eosio@active部署BIOS合约。! ~' f& `( A( P/ ^3 e) g' \2 Z+ N
lixu@ubuntu:~/Desktop/sourceeos/eos$ cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV9 F$ O4 p; I# j- `: |! J
executed transaction: af3bc248ca73d14c644fca863f4f82135bb72582b7f2be0dbec73a41c4f6438a  200 bytes  422 us$ c# {! ^9 H5 ~  X
#         eosio
1 _% n' _5 r5 C$ E8 @: F命令中的参数说明:+ C  l/ q9 A5 d# Q' K  x
eosio:部署合约的账户build/contracts/eosio.bios:合约路径-p eosio@active:作用是告诉cleos使用eosio帐户部署此合约,将使用我们之前导入的帐户eosio的active权限的私钥对该操作进行签名。
8 H5 j9 J, \, G; f
& r3 w' L/ V; h, s; B+ f+ u
2. eosio.system合约
2 M: o' `! s% S2 u2 deosio.system是EOS系统合约中最重要的部分,实现了EOS项目的所有基本功能:如:创建新账户、部署智能合约、交易RAM、抵押获取资源(net、cpu)、投票、领取节点奖励等;
7 G8 s1 j# ]/ J9 rcleos create account eosio eosio.system EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV  r, t; n2 B# n4 H& s7 P- r. b
cleos set contract eosio.system build/contracts/eosio.system$ Y, P5 i' u8 \8 U
3. eosio.msig合约  Q/ D! D6 ^. F$ V, ?" n8 N
实现的是多签系统合约,实现了一个多签功能,由于EOS要求系统的每一次更新都需要出块节点完成一次多签,当签名数达到2/3+1时,更新才能生效。所以出块节点可以调用这个合约实现多签功能。) o( _5 H* Q3 f
cleos create account eosio eosio.msig EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
' f1 r* H' K! L2 ucleos set contract eosio.msig build/contracts/eosio.msig
. {) i. _( Z8 n- l4. eosio.token合约
8 @6 ?$ F4 W! S  u% V! ?用来发布代币的合约。
) v* b# p) @/ \. H9 g! Mcleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
; ?5 X& L, }; S# Z$ kcleos set contract eosio.token  build/contracts/eosio.token$ _  ]# ^4 X  F' x5 e0 a7 D
5. exchange合约1 j5 g# u6 R9 J% H, e( q. ~
合约提供的功能来创建代币。
# o" L2 N8 d4 x! a9 @4 Hcleos create account eosio exchange EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV7 C4 Q& q  o$ K2 j5 i" X% H! u, ?
cleos set contract exchange build/contracts/exchange% U+ l) G9 h8 j# f, F7 J2 g
八、EOS v1.1与v1.2版本的差异2 _% P; ]5 n6 z- B" B: E
在~/eosio-wallet/config.ini中可以修改keosd应用程序的端口,可以通过keosd命令单独启动。1 @( U; d  }+ v) a
在~/.local/share/eosio/nodeos/config/config.ini中可以修改nodeos应用程序的端口,可以通过nodeos命令启动,一般需要添加插件启动,如:
2 h' B# t, k& a2 Vnodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::wallet_api_plugin% K5 Z! K" U+ \0 \7 g. s, q
v1.1版本
6 i8 m; T. a) v支持wallet RPC API,在nodeos中添加eosio::wallet_api_plugin插件以启动keosd,那么keosd的端口与nodeos一致,同时也可以再通过命令keosd单独启动keosd应用程序,此时可以通过两种途径访问keosd,一是使用nodeos的插件方式访问,得用nodeos的端口访问keosd,二是使用keosd的端口访问。
* N! P) S9 L& J% b( H1 X' w9 P通过RPC访问钱包数据的时候目录在~/.local/share/eosio/nodeos/data。通过cleos命令访问钱包数据的时候目录在~/eosio-wallet。
) Y3 o2 p1 X  E) iv1.2版本5 N6 L# F1 I  E7 z7 \0 @
nodeos已经删除了钱包API,应该直接在keosd中使用API。它的API定义与之前一样,可以在v1.2之前的版本中查看钱包API,所以在nodeos中不能再添加钱包插件以启动keosd了,需要通过命令keosd单独启动keosd应用程序,注意它的端口不能与nodeos一样。' [& _  P9 f% i3 N6 d2 z' i6 B
通过RPC和cleos命令访问钱包数据的目录都在~/eosio-wallet。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13