Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

华胥
135 0 0
主网Jungle 测试网络本地网络
) X4 r% f6 Z, w& y+ d. r
. Y" k4 z' H9 P! s
咱们在开发阶段一般选择测试网络和本地网络皆可,测试完成后在部署到主网。这里我们先选择在本地网络上进行开发,因为在Jungle 测试网络中不支持wallet的RPC接口,因为它作为一个公共的服务节点,是不可能帮助大家管理私钥的,那样会非常不安全,大家都会共用相同的钱包和私钥。最后我们将使用本地搭建的keosd服务管理钱包,并连接到Jungle 测试网络中。
8 @+ d& A& X) [0 UEOS支持的操作系统! c4 v7 m. a& F0 @7 m( E

. M9 Q# M# m9 j+ _6 [3 O  FAmazon 2017.09 and higher
( _( a8 D4 Z. z6 a4 H7 e$ b1 b3 l7 BCentos 7, \0 R- @$ Q% D: l
Fedora 25 and higher (Fedora 27 recommended), U$ `. l9 T7 |3 S' ]  ]$ Q
Mint 18) g2 u, E( w5 T% X+ h; p0 r
Ubuntu 16.04 (Ubuntu 16.10 recommended)' L7 K7 y+ \! }
MacOS Darwin 10.12 and higher (MacOS 10.13.x recommended)
& ]" f8 B1 }+ ]3 ]; w8 L
/ b1 b  j, ?3 g, Z2 U! }. C
本教程的开发环境选择为:Ubuntu 16.04、本地网络、RPC+eosjs、eosV1.2.2。接下来开始搭建EOS本地环境将它部署在单个主机。1 @1 W3 _/ j% b% @$ o2 B
一、下载和编译EOS! f) \+ S2 F7 B! T# c
获取EOS指定版本源码及其所有子模块,若不加入–recursive参数,则不能下载EOS关联的子项目。指定版本源码使用-b指定版本号。
$ K/ a7 A5 X  f* Y* {8 Hgit clone https://github.com/EOSIO/eos -b v1.2.2 --recursive+ X6 ~3 ?2 E$ z
编译源码生成可执行文件$ P6 B6 w" p' q0 B3 M: J* h- ?
cd eos
; O, Y7 I' j# O. @) n8 A- j" C./eosio_build.sh6 o4 d* d; _% }3 {" ]6 }
编译时间比较长,需一两个小时不等,若编译顺利成功后,则会看到如下显示' y" e+ o" n9 F& ]: s8 E- ~
* d/ t) k3 i! D1 Y
在编译的过程中很有可能会出现各种错误,由于系统、EOS版本的差异出现的错误也会不一样,下面列出了常见的多种错误的解决办法。8 u4 C/ p8 S$ _
二、编译时报错的解决办法
2 t# _" _& P. N$ J1. 物理内存RAM不足
+ J' l1 z; a6 U, |6 _4 p
4 y2 c* h& [2 E% |解决办法:
7 q8 I2 ?* y, q0 O" u% `修改文件源码eos/scripts/eosio_build_ubuntu.sh中的if [ "${MEM_MEG}" -lt 7000 ]; then,将7000改为自己系统的内存大小,如4000,如还报错,那么继续减小。: `% e1 \: u) ~$ e5 S
2. 可用内存不足. r5 T/ w, S# t! b1 y
You must have at least 20GB of available storage to install EOSIO.
# K% y7 p. F& ?+ |1 `7 h! J) R% ]Exiting now.
! c2 I) v9 Y2 ?4 x% u解决办法:
/ F3 L% S7 M+ s: T1 I% J3 A在文件源码eos/scripts/eosio_build_ubuntu.sh中增加如下一行代码代码前面。7 r  ^4 Y; t  N, m. R
DISK_MIN=1
8 \* K$ Y4 ~' Z6 M7 G" y! V$ T- d3. 无法下载(MongoDB等)
$ e+ v8 `! d/ S) h2 i4 L0 ?无法下载MongoDB等是由于翻墙配置的问题。6 D5 p- H" p9 V5 z+ ]: i
解决办法:
! Y3 G) i& O! _Mac的Shadowsocks使用“PAC自动模式”,另外偏好设置配置如下0 i5 }: t1 U; \# ?

7 o" L" W5 ^: C% U2 x/ E, C2 e  P, y3 r( V
Ubuntu的配置如下,其中的192.168.1.116 是Mac的局域网地址。8 T7 u* c3 @8 X1 O
; e; ^9 _9 [7 _+ {) q
4. 不能创建/tmp/llvm-compiler文件夹2 D/ M. r6 L2 m" S# Q& n

5 q9 e$ @' e0 }0 @' ]解决办法:8 W2 c2 }$ n8 }5 F4 _# c
进入/tmp目录,删除llvm-compiler文件夹即可。' B2 _3 \+ @/ p& B
三、安装EOSIO; N, G$ {9 @0 C3 F
安装所有依赖库并构建EOSIO,使用如下命令/ i: b# s& J# Y& x9 D% ]
sudo ./eosio_install.sh/ D0 ~7 a4 a7 r  e" s+ g- A& d
若出现如下错误file INSTALL cannot make directory "/usr/local/eosio/etc/eosio",加上sudo即可。
# R: O6 D, u) _* j2 I1 W" x" N' m! h7 P5 t6 J& s
安装成功后的效果如下0 ?3 Q+ w3 A+ A2 W' y  v8 a
2 u5 \! c' w; s. |; y: ~
安装完在根目录新增了build文件夹,最后EOS的目录结构如下。
, |& T: H0 v# H. S. p( y) |
. Y& t) w( i3 D四、配置Nodeos与Keosd
. h6 L0 {0 `7 x3 j! Y3 h  @1. 配置Nodeos6 b$ y' B1 S! g3 a/ u4 W! r2 q
Nodeos是用来运行节点的EOSIO程序。执行一下步骤进行配置:
# k; h+ C2 g. z  d; Z7 p0 m找到如下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 J3 a- I9 v2 l# w
/ D" G5 h2 U3 q1 D' `
再最后面添加如下内容
7 a7 y' B* E8 ^0 T- s% d: x7 ^# Enable production on a stale chain, since a single-node test chain is pretty much always stale
; x9 g' h& I, penable-stale-production = true+ a3 t- [# E9 s0 K& P
# Enable block production with the testnet producers
. e) ]: t4 O+ b- t: v. F2 W& x* Uproducer-name = eosio9 A% J6 g1 M* D" e8 ^0 [" D) Z4 o
# Load the block producer plugin, so you can produce blocks" I2 z0 j7 I* Z0 a
plugin = eosio::producer_plugin
; D' C6 a* c# ~# ^- [# As well as API and HTTP plugins, I4 w9 ?  @, Y# W# t
plugin = eosio::chain_api_plugin. P0 g* G, r1 D! q( f
plugin = eosio::http_plugin
' D- `3 r( v, [' l3 T+ r# This will be used by the validation step below, to view history/ j, v, H1 @" ~& ~( J+ ^
plugin = eosio::history_api_plugin* ?8 }2 }3 W; I- u% ?9 D% n( w( b3 T
若是v1.2之前的版本需添加plugin = eosio::wallet_api_plugin插件。
. {1 g8 [6 U3 }6 b2. 配置Keosd
! f, T% u( t2 ?% `keosd 是一个轻客户端钱包,负责管理钱包,以便在广播到网络之前保护密钥和签署交易,在本地计算机上运行并在本地存储您的私钥。
  \) M# ~" ^& p+ r$ {+ P找到路径~/eosio-wallet/config.ini,然后打开config.ini文件将第一行的服务地址设置为:
- l, v- d. \, j) p3 _) d1 @

9 Q7 n+ [) @1 _. W0 V4 V: |1 I" l4 Hhttp-server-address = 127.0.0.1:8889
' \6 Z0 o; D- }+ d' j2 G3 `% o8 F五、启动节点
$ N7 n" ]2 E/ Z' }$ X1. 启动nodeos6 d8 o$ Y! f, ^- S) k4 M( a
使用以下命令启动自己的单节点区块链:8 [1 N! ]& l) ?9 N" s
nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin
$ g( c. f3 F6 X6 c' v7 }$ p使用了plugin加载一些可选插件,在V1.2之前版本需要添加--plugin eosio::wallet_api_plugin插件。启动后应该每0.5秒生成一个块并有日志输出到终端,如下1 v. j8 j1 d8 C& D) N2 h3 z
, G. s. I& q  `3 _6 j, Q
如果报如下错误,则添加参数--delete-all-blocks
: O5 w4 @' n$ x: L8 [1 H2 K$ t& k2 s7 D- p! P- P$ H2 u
2. 启动keosd
+ a6 i1 n4 s7 c$ W2 j5 {  K可以直接输入命令keosd即可启动keosd。# W! t+ ]5 h7 q5 A5 n
$ keosd
, e4 R! d1 V; W" p# v5 U( d* v$ f停止keosd,因为cleos可以自动启动keosd,最终可能会有多个keosd正在运行。7 }* Z0 m7 R7 |0 g8 T
$ pkill keosd; D* v% q: ~: z! C6 l
注意:当使用RPC接口时,需要另起keosd,且端口与nodeos的不能一样。在使用cleos连接wallet时不用另外单独启动keosd,它连接的是nodeos的keosd服务。若使用cleos时报如下错误,则须停止keosd。! o8 ]- L6 f6 {8 s
lixu@ubuntu:~$ cleos wallet create: W3 Z$ j/ Q4 D, l  _
"/usr/local/eosio/bin/keosd" launched6 {  Y4 {# \# q* I; m$ ~" B
Unable to connect to keosd, if keosd is running please kill the process and try again., s: s" v; U: K
六、使用Cleos创建钱包- m/ b0 K# o+ m" U" t' y
下面我们使用命令行进行操作,需要使用到Cleos,它是一个命令行工具,可以与nodeos公开的REST API进行交互,前提是nodeos需要配置eosio :: chain_api_plugin插件。
8 t/ f3 ^/ b( [1 Z' w0 X1. 创建钱包; e, T/ ^1 X) {5 O4 @% u: _
钱包是授权私钥的存储库,与区块链交互所必需的。通过如下命令创建钱包,可以通过-n参数指定创建的钱包名称。如果不指定钱包名称,则会创建一个名为default的默认钱包。6 N# }  [& @3 u" r5 y9 q
cleos wallet create
" R. Q, |. W: N! H# v; w5 R若是1.2以上版本,则需添加参数–to-console,输出如下
( j" K3 r% g4 S5 tlixu@ubuntu:~$ cleos wallet create --to-console4 [; ~( h/ U$ a! B  C8 D6 E. y' d
Creating wallet: default( t0 M  A" q6 i3 T, H8 F
Save password to use in the future to unlock this wallet.
3 _! _) L! i( x' f4 wWithout password imported keys will not be retrievable.
4 t* g  G2 A" K0 @0 N+ _2 _"PW5J5SSUrU3sGBonpxjxbn9QXGPdpAsCkWowmjCcLyBPUu5Y5uvvv"
( O4 B) x& @. v1 P成功后将会生成钱包的解锁密码,钱包15分钟不用将会自动锁定,注意一定要保存最后一行的密码,需要使用它解锁这个钱包。" K* y( |; x0 A! O% w. i
2. 解锁钱包2 F& g6 H* P' V) e
可以通过两种方式解锁钱包,推荐使用第二种方式解锁。  U# w3 B( d3 u5 `6 v
直接在命令行上添加密码参数,可以通过-n参数指定钱包名称
" Z7 N' y; o3 F+ t

9 D# {# ]" ~. n% L8 ecleos wallet unlock --password PW5JCEkVgzoBHUVCzbEwT9es6agM6NRPv6n21wgbzVaem6rWE4akS
1 i; n' h& o( z3 \& I6 B* r在交互模式下解锁7 Y1 a/ d+ k% b* g5 U: O# {! |
0 d' a7 y/ d/ X' @
cleos wallet unlock. I" d- `8 v* i) y% D+ L" }
接着提示password:,然后输入密码即可8 S2 L- @* _% W/ l7 v
lixu@ubuntu:~$ cleos wallet unlock8 g: Q' b) V) ]" \0 S& f3 h7 g
password:
5 H3 q2 v  m0 C- `' ]9 o6 f两种方式解锁成功后都会输出
7 T$ j- ]9 H4 `; z+ F7 s& gUnlocked: default$ X& n8 Q# u$ g" S' w* z' z
注意:; c  j. E- \! H1 M7 j5 n  ^: U' D
' r/ T8 O/ I6 |0 S7 Q
直接在命令行上使用您的密码并将其记录到您的bash历史记录中通常是不安全的,因此最好在交互模式下解锁。, V4 \: k2 V% M4 i3 A" }4 M
出于安全考虑,最好在不使用钱包时使用命令cleos wallet lock将钱包锁定。
2 l" K0 s. |; w; F: G5 g2 _* J% J  s

7 Q/ ]9 y  t6 z3. 查看钱包列表' Q; u8 D) [) W/ s, t4 U! `
使用命令cleos wallet lock查看钱包列表,在列表中解锁后的钱包将在钱包名后面有*标记。2 b0 c- n- ?( C: L1 p
lixu@ubuntu:~/Desktop/sourcecode/eos$ cleos wallet list
% u) j' c  a8 f8 G4 Y5 ]0 Y. U% ~1 YWallets:
' O  _% R& ~6 B" ^2 k3 `- f[  V/ E! ^& j: i+ N9 R* C! V
  "default *",3 d  z# o, [2 y7 ]' m
]4 l: E* M9 c* L( }2 p2 X
4. 导入密钥到钱包: \! w0 x5 h. i1 P, ?, p7 E6 {8 f
上述步骤中启动的私有区块链是使用默认初始密钥创建的,必须将其加载到钱包中。
0 d" W% K2 `- L" P0 q使用命令cleos wallet import --private-key ******。可以通过-n参数指定钱包名称2 y9 v& V, g$ f: G+ a
lixu@ubuntu:~$ cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3/ }6 }. K5 u9 ]9 [. _
imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV" `7 Q, b4 g/ W2 Q$ r8 w9 B: g
注意:此时导入的私钥并不是创建钱包时生成的密码。
& {$ h+ V8 |+ h* J- o4 c0 _这个密钥
! v3 p6 j1 N; [6 G1 Z# D. z5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
) y% W* A' _! H' [( ^: \在以下配置文件中可以查看) W+ X; B; B# s9 J+ s
Mac OS: ~/Library/Application\ Support/eosio/nodeos/config/config.ini
6 c1 H% B7 V6 E( O6 R( p; q3 _) \Linux: ~/.local/share/eosio/nodeos/config/config.ini) P& j5 ?8 j, f% R/ M
打开文件后滑动到最下面即可查看到私钥。: P: |' |' R8 Y
注意该秘钥对正是超级账户 eosio的秘钥对。接下来就会用到eosio账户。
- t, D- W  }% y+ \  l; {% J4 p" Ocleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV1 f3 k. J5 e" S$ @, {
七、部署系统合约
  u/ u% K* V9 b) j9 S! L现在我们有一个拥有帐户eosio密钥的钱包defualt,那么接下来用eosio账户部署默认的系统合约,确保钱包defualt处于解锁状态。
4 O7 ?! w, N3 ?' I' Weosio账户是默认就有的,在系统启动的时候就自动被创建的超级用户。# l# n2 _' e' N) Z
1. eosio.bios合约# z' D/ H( N  T( Q/ q% E4 M$ ~9 I
出于开发目的,eosio.bios可以使用系统提供的合约,通过此合约可以通过确认用户持有的token直接控制其他帐户的资源分配,包括管理链上的堆栈和非堆栈资源,带宽、CPU以及内存资源。该eosio.bios合约可以在contracts/eosio.bios中找到源代码。5 N5 n# u; e  S; Q! T5 b/ W
先进入到eos根目录,再使用命令cleos set contract eosio build/contracts/eosio.bios -p eosio@active部署BIOS合约。
9 s4 y$ l7 w/ q" k3 }, vlixu@ubuntu:~/Desktop/sourceeos/eos$ cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV' s' E/ T7 l0 I& a1 |
executed transaction: af3bc248ca73d14c644fca863f4f82135bb72582b7f2be0dbec73a41c4f6438a  200 bytes  422 us
3 V& q' \2 |* R* ?! r" F#         eosio
& R) h" G  }7 n命令中的参数说明:
6 N5 I/ }# _/ @' \2 ^/ `eosio:部署合约的账户build/contracts/eosio.bios:合约路径-p eosio@active:作用是告诉cleos使用eosio帐户部署此合约,将使用我们之前导入的帐户eosio的active权限的私钥对该操作进行签名。* }! ?5 t3 s4 L0 Z
1 j( S* b; O) g7 O* t/ z- E2 m( s  L# v
2. eosio.system合约; q2 ^3 d5 A6 m( _* A+ h+ L3 w$ B
eosio.system是EOS系统合约中最重要的部分,实现了EOS项目的所有基本功能:如:创建新账户、部署智能合约、交易RAM、抵押获取资源(net、cpu)、投票、领取节点奖励等;+ g8 w7 m% {! V$ g
cleos create account eosio eosio.system EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV, M8 Z' U3 j, x! J! m
cleos set contract eosio.system build/contracts/eosio.system5 f) Z* M8 v4 o/ N& Y1 U
3. eosio.msig合约
" }& [8 e1 m$ h8 B实现的是多签系统合约,实现了一个多签功能,由于EOS要求系统的每一次更新都需要出块节点完成一次多签,当签名数达到2/3+1时,更新才能生效。所以出块节点可以调用这个合约实现多签功能。
% p6 `+ D3 P! ^$ r  P7 ^cleos create account eosio eosio.msig EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV- b: U( k9 O+ g" W* r+ P
cleos set contract eosio.msig build/contracts/eosio.msig
. i9 Y% G7 Y7 g- }% ^8 V4. eosio.token合约
+ f( v( k# W" Y7 R4 @用来发布代币的合约。
2 b7 J. ~3 T% D  h! s4 a7 G6 }cleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
+ x1 \  |- ~! ^* D' Bcleos set contract eosio.token  build/contracts/eosio.token
: s9 @. I" X5 R- \( Q5. exchange合约3 m) x9 X, E" M3 x! u$ O; r
合约提供的功能来创建代币。9 }! S6 }% h3 Q" J8 h+ u6 j
cleos create account eosio exchange EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV0 u1 p! M( c! g# `
cleos set contract exchange build/contracts/exchange! o: C2 ~0 ~; Q. Z  E/ ^( R4 I" u2 E
八、EOS v1.1与v1.2版本的差异
; m# Y2 Z% r$ P5 l8 E在~/eosio-wallet/config.ini中可以修改keosd应用程序的端口,可以通过keosd命令单独启动。6 g, V% ]7 }1 J* d7 W) ]) a
在~/.local/share/eosio/nodeos/config/config.ini中可以修改nodeos应用程序的端口,可以通过nodeos命令启动,一般需要添加插件启动,如:: k- h+ `" T' I0 t
nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::wallet_api_plugin
: b' L/ \+ p% C- gv1.1版本
4 z% b6 ~# v$ R# X, P, |) }支持wallet RPC API,在nodeos中添加eosio::wallet_api_plugin插件以启动keosd,那么keosd的端口与nodeos一致,同时也可以再通过命令keosd单独启动keosd应用程序,此时可以通过两种途径访问keosd,一是使用nodeos的插件方式访问,得用nodeos的端口访问keosd,二是使用keosd的端口访问。
& b* w% V% [) V" Y. d6 z" z通过RPC访问钱包数据的时候目录在~/.local/share/eosio/nodeos/data。通过cleos命令访问钱包数据的时候目录在~/eosio-wallet。. R) I/ S, {- x1 y( |0 L, ]
v1.2版本% `& ~% `3 K5 A$ j' s
nodeos已经删除了钱包API,应该直接在keosd中使用API。它的API定义与之前一样,可以在v1.2之前的版本中查看钱包API,所以在nodeos中不能再添加钱包插件以启动keosd了,需要通过命令keosd单独启动keosd应用程序,注意它的端口不能与nodeos一样。5 k* Z3 J; ~$ C, y9 X8 ~& u
通过RPC和cleos命令访问钱包数据的目录都在~/eosio-wallet。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13