Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

华胥
108 0 0
主网Jungle 测试网络本地网络4 i: g9 R+ d8 j: B( o+ L! n
/ R/ Y) m5 q7 Q. f& ~, k6 n
咱们在开发阶段一般选择测试网络和本地网络皆可,测试完成后在部署到主网。这里我们先选择在本地网络上进行开发,因为在Jungle 测试网络中不支持wallet的RPC接口,因为它作为一个公共的服务节点,是不可能帮助大家管理私钥的,那样会非常不安全,大家都会共用相同的钱包和私钥。最后我们将使用本地搭建的keosd服务管理钱包,并连接到Jungle 测试网络中。
& ^8 D  K  E3 |- ^& H: g$ J. q6 w( eEOS支持的操作系统
+ b- l! [9 d: C7 }
1 p0 {4 w7 A: Z  V6 g& NAmazon 2017.09 and higher. }3 H- Y* \# P8 P0 K6 G
Centos 74 l6 H7 W9 p+ V5 y" n
Fedora 25 and higher (Fedora 27 recommended)
4 I) Q8 l* p9 W  E( O5 j, ^, CMint 18
$ a: j2 d9 y9 p0 R: zUbuntu 16.04 (Ubuntu 16.10 recommended)
) a" k0 j6 E) g; U# `MacOS Darwin 10.12 and higher (MacOS 10.13.x recommended)
+ T& t# C: E( z' I( ^
# t1 |+ D+ m' ^4 {3 j" y% A
本教程的开发环境选择为:Ubuntu 16.04、本地网络、RPC+eosjs、eosV1.2.2。接下来开始搭建EOS本地环境将它部署在单个主机。/ [* M3 v9 H0 u6 t6 I
一、下载和编译EOS8 [$ d0 e) w/ A; [  `
获取EOS指定版本源码及其所有子模块,若不加入–recursive参数,则不能下载EOS关联的子项目。指定版本源码使用-b指定版本号。
: ?, d9 r' E; |; K  ]' Bgit clone https://github.com/EOSIO/eos -b v1.2.2 --recursive
) X5 Y+ w: I4 _' H5 j* ?编译源码生成可执行文件
  g) O1 X8 L8 h+ qcd eos! w9 _) _" A$ F& n% Q! n' o+ f
./eosio_build.sh
9 u8 H! Y# A* `) y  F编译时间比较长,需一两个小时不等,若编译顺利成功后,则会看到如下显示
: t% `( U- _1 P3 Z) l2 X" ]  g' Z. v6 D4 h
在编译的过程中很有可能会出现各种错误,由于系统、EOS版本的差异出现的错误也会不一样,下面列出了常见的多种错误的解决办法。
$ ~* k6 e" y( }* A2 _二、编译时报错的解决办法
) o$ L3 l" f5 U( A$ g2 x5 J+ u1. 物理内存RAM不足5 \6 b; ?9 l: u4 m, @

: V8 N) h& n* N% ~1 r9 E6 \解决办法:, C  f, k8 F  D" e8 ]
修改文件源码eos/scripts/eosio_build_ubuntu.sh中的if [ "${MEM_MEG}" -lt 7000 ]; then,将7000改为自己系统的内存大小,如4000,如还报错,那么继续减小。
1 \# ^) D" Q4 t+ a: O2. 可用内存不足" M' T2 v" z4 L  u. h
You must have at least 20GB of available storage to install EOSIO.
! o( Y5 r, n0 ]+ s7 s6 K+ |! T- W9 SExiting now.
  c; a% C/ K& s$ g3 p4 f解决办法:# P, o/ j% l3 `% }+ w9 L0 O
在文件源码eos/scripts/eosio_build_ubuntu.sh中增加如下一行代码代码前面。
" W( \* Y( \% m/ dDISK_MIN=1
1 U, P' Z9 d$ A! p  r& c! ~2 u3. 无法下载(MongoDB等)
7 @; H3 R. i: W& T无法下载MongoDB等是由于翻墙配置的问题。
- J; z! x8 y' ]0 r& w* f8 Y解决办法:6 X0 k" |* u- D% A
Mac的Shadowsocks使用“PAC自动模式”,另外偏好设置配置如下
' O& z/ e( I5 K6 W* r3 J, W5 N/ @$ V* g' U! N1 m" ~! [0 i
( Q( Y3 g$ O* D+ f8 y
Ubuntu的配置如下,其中的192.168.1.116 是Mac的局域网地址。
6 v: ?9 F* `- H; N; \% m+ Q* `; c/ s
4. 不能创建/tmp/llvm-compiler文件夹
5 j! @' T1 B5 P7 y
6 W+ h$ ~" Q# Q5 k# K% Q3 `解决办法:* ~" Z3 l/ N4 ~( B
进入/tmp目录,删除llvm-compiler文件夹即可。$ D/ E, ?$ W6 M; h  b  p
三、安装EOSIO
# Z! ^5 a7 J. A3 m安装所有依赖库并构建EOSIO,使用如下命令9 O( X# w* V2 p9 `
sudo ./eosio_install.sh
' E/ Z0 T& m7 o& T" u* v- n0 Z若出现如下错误file INSTALL cannot make directory "/usr/local/eosio/etc/eosio",加上sudo即可。2 o4 Y; ^( Y4 M5 T. j* M
; E+ V% J0 d# l+ y1 o5 d& f
安装成功后的效果如下
3 M2 l% H2 Q1 q: B9 y  t1 R: ~) \) C/ Q) E
安装完在根目录新增了build文件夹,最后EOS的目录结构如下。) E1 H" D9 l& U( ?6 n5 E

2 X+ I# J2 r8 {' r( G* J7 {" u+ `四、配置Nodeos与Keosd2 i$ a" ]0 S5 y( N9 @% G
1. 配置Nodeos) V5 X: T4 E* T* n0 b3 {
Nodeos是用来运行节点的EOSIO程序。执行一下步骤进行配置:6 F- o$ X& s2 R1 j/ O7 `. N! 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所在行也用#注释
& M. [2 r/ I; c1 y# q- O8 E
+ m7 Y% n. U- M- F% A
再最后面添加如下内容5 f- e$ w2 Y& z. t2 u( G
# Enable production on a stale chain, since a single-node test chain is pretty much always stale+ R9 ?$ b6 [1 S' L% X% Y/ Z
enable-stale-production = true1 s: g8 K0 n( i" h
# Enable block production with the testnet producers, Q* s! v3 X4 U0 J) l. }. R/ p: ^
producer-name = eosio
) \+ {( }: j7 ]+ c3 F! l4 \# Load the block producer plugin, so you can produce blocks
& R" H( W' ~# g$ \plugin = eosio::producer_plugin
0 z: Q7 a% R: U2 T, b# As well as API and HTTP plugins
1 \: G/ ?5 U% o. g3 h/ i0 Q. {0 g0 Splugin = eosio::chain_api_plugin4 r- |" r( e2 L+ y1 v" y9 H
plugin = eosio::http_plugin
7 ?! o" d) W4 e8 ^# This will be used by the validation step below, to view history" I2 G) j9 D; g2 B5 v
plugin = eosio::history_api_plugin
, `1 C; ]& ?; @1 u若是v1.2之前的版本需添加plugin = eosio::wallet_api_plugin插件。
8 D# G7 _4 O( g) u& ~2. 配置Keosd' @- r1 b' q* ^! h4 V
keosd 是一个轻客户端钱包,负责管理钱包,以便在广播到网络之前保护密钥和签署交易,在本地计算机上运行并在本地存储您的私钥。
0 J. N) a& w5 M9 ~& k% r找到路径~/eosio-wallet/config.ini,然后打开config.ini文件将第一行的服务地址设置为:
: I) T7 ]" {/ p0 s* K
, i" R; G& P- ?/ m
http-server-address = 127.0.0.1:8889
0 r' h( Z2 l* m# b) G+ s: O7 ^, h五、启动节点6 ]% J/ ]; X/ o; |
1. 启动nodeos# S5 \! I# ^/ ]( ]  t' }
使用以下命令启动自己的单节点区块链:( ]. b& V8 w( r, j/ K% u
nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin) _: m8 L' H4 l1 ]
使用了plugin加载一些可选插件,在V1.2之前版本需要添加--plugin eosio::wallet_api_plugin插件。启动后应该每0.5秒生成一个块并有日志输出到终端,如下& p/ B0 G% a+ P& |/ c0 G4 ?8 B
7 C# R% m0 t& D
如果报如下错误,则添加参数--delete-all-blocks
- ?9 [1 T( _# L& e* Q. k) p. X5 m2 `  t5 K% ^5 M3 Y
2. 启动keosd0 @) E8 g: Q$ ^( m, k1 C
可以直接输入命令keosd即可启动keosd。
; A4 r4 x" _1 A. _4 e$ keosd9 x( V0 p2 \( Z  e, J
停止keosd,因为cleos可以自动启动keosd,最终可能会有多个keosd正在运行。
  Y" q  q0 q1 q! [% G4 ^$ pkill keosd
; L# F- k" o9 ?" A注意:当使用RPC接口时,需要另起keosd,且端口与nodeos的不能一样。在使用cleos连接wallet时不用另外单独启动keosd,它连接的是nodeos的keosd服务。若使用cleos时报如下错误,则须停止keosd。. l; u5 l" L% ]. ~/ ~
lixu@ubuntu:~$ cleos wallet create
, I, H& q6 F8 a. r"/usr/local/eosio/bin/keosd" launched- {+ f" D$ y3 b; k
Unable to connect to keosd, if keosd is running please kill the process and try again.
5 H  z/ \* Q; n) L7 Q六、使用Cleos创建钱包
1 g9 [/ q, S$ y, J; E$ Z3 G下面我们使用命令行进行操作,需要使用到Cleos,它是一个命令行工具,可以与nodeos公开的REST API进行交互,前提是nodeos需要配置eosio :: chain_api_plugin插件。
# r7 S  H- I6 j* U, \1. 创建钱包+ ]( T  o. ~, \  @" b
钱包是授权私钥的存储库,与区块链交互所必需的。通过如下命令创建钱包,可以通过-n参数指定创建的钱包名称。如果不指定钱包名称,则会创建一个名为default的默认钱包。
7 j$ w6 q- A2 p8 \' B" [- ocleos wallet create
( q" p, u  V: }4 {& z若是1.2以上版本,则需添加参数–to-console,输出如下
& k7 l6 ]0 _/ S0 F5 }' D) O4 tlixu@ubuntu:~$ cleos wallet create --to-console- i4 P/ M9 W* }8 q
Creating wallet: default
  p8 H$ i$ P# ~  E& ~Save password to use in the future to unlock this wallet.
8 k6 k* a3 i6 h- O2 `* t- \Without password imported keys will not be retrievable.4 x# r7 n, s9 r0 Q- E) _" @
"PW5J5SSUrU3sGBonpxjxbn9QXGPdpAsCkWowmjCcLyBPUu5Y5uvvv"
7 E* _2 c! u* I1 |" d成功后将会生成钱包的解锁密码,钱包15分钟不用将会自动锁定,注意一定要保存最后一行的密码,需要使用它解锁这个钱包。6 k* L0 H# l! i' @  @5 @6 h
2. 解锁钱包
/ I) `7 K# L1 |, E1 N: X可以通过两种方式解锁钱包,推荐使用第二种方式解锁。, a: ?; R! K2 i% O
直接在命令行上添加密码参数,可以通过-n参数指定钱包名称5 M* C2 B. {* j* u# b

" L) l+ f8 v, qcleos wallet unlock --password PW5JCEkVgzoBHUVCzbEwT9es6agM6NRPv6n21wgbzVaem6rWE4akS
! M) y' ]/ j6 K3 N) c; K% |在交互模式下解锁
1 [! R2 H) `$ n2 D5 O0 t

2 T, X- `. W4 f8 `5 `! wcleos wallet unlock$ x# p! J1 A% c( a- z. Q, ]) \% ?
接着提示password:,然后输入密码即可
- l6 E/ u: @% }' \: p3 `% ulixu@ubuntu:~$ cleos wallet unlock
3 V9 D7 f: V* d( epassword:  F, m5 K- n: B* [8 {
两种方式解锁成功后都会输出0 p. A4 u$ l/ Q2 R* p2 G* T
Unlocked: default
/ Y4 k$ x) B9 q8 G: D7 V4 ^注意:
# \( P* r( J7 }  }1 W1 V% t0 W' {9 ~6 w0 a+ ^" g
直接在命令行上使用您的密码并将其记录到您的bash历史记录中通常是不安全的,因此最好在交互模式下解锁。' F, ~) d0 {- s+ N
出于安全考虑,最好在不使用钱包时使用命令cleos wallet lock将钱包锁定。$ Z& _9 @; T8 ~, Z) P! d6 M- ]

- X& y. E9 P) b. ?3. 查看钱包列表9 D$ L+ a" m. i4 ~2 B$ S+ ]3 d& }
使用命令cleos wallet lock查看钱包列表,在列表中解锁后的钱包将在钱包名后面有*标记。
" C$ R" N1 O% E  Q1 p; Zlixu@ubuntu:~/Desktop/sourcecode/eos$ cleos wallet list' j4 s& j' B' T& u! ?; O) `/ C
Wallets:
; C, ~# U4 B; x! G7 T2 l[
# @" n( B% {3 y# g+ n  "default *",
/ O+ c& r& T' z) {3 ~  Q]
: d' E! E& J( x- h  D# F4. 导入密钥到钱包
, g+ ~! }1 k1 B2 d+ x" s上述步骤中启动的私有区块链是使用默认初始密钥创建的,必须将其加载到钱包中。
  j5 y$ M- Y$ q8 s* w5 x使用命令cleos wallet import --private-key ******。可以通过-n参数指定钱包名称
. P5 a1 }; V; hlixu@ubuntu:~$ cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3  i' p( {; [# b* Y6 ?2 {: U
imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV$ M# B8 W/ E  ]: f
注意:此时导入的私钥并不是创建钱包时生成的密码。6 Y3 }4 ~; K& o: h+ c0 s& B
这个密钥
# E2 h  j% _+ h# M2 R7 b% O/ [5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
3 f. F% ]! P2 A3 \& v) b在以下配置文件中可以查看
( h" s9 n4 s6 G- u+ L* k0 JMac OS: ~/Library/Application\ Support/eosio/nodeos/config/config.ini
! ~8 B* G7 h" _+ E2 y6 ULinux: ~/.local/share/eosio/nodeos/config/config.ini
5 ]/ j! d- ?% F6 D- ]% X: |9 L打开文件后滑动到最下面即可查看到私钥。
3 |( p7 W3 E3 ]8 ]5 S- u注意该秘钥对正是超级账户 eosio的秘钥对。接下来就会用到eosio账户。
9 V3 _! `9 W: V7 a4 L) e. dcleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV* M; W+ e( x( J6 r, x: w
七、部署系统合约
/ r, M$ Y3 B; X8 h+ ]: k! i现在我们有一个拥有帐户eosio密钥的钱包defualt,那么接下来用eosio账户部署默认的系统合约,确保钱包defualt处于解锁状态。/ l2 i" n. f+ k8 k0 A. p! f9 @5 U
eosio账户是默认就有的,在系统启动的时候就自动被创建的超级用户。& Q" Q9 J5 a1 T3 _3 v' ~# d# t4 ]
1. eosio.bios合约
/ T- c4 {5 R& y. N; H4 e出于开发目的,eosio.bios可以使用系统提供的合约,通过此合约可以通过确认用户持有的token直接控制其他帐户的资源分配,包括管理链上的堆栈和非堆栈资源,带宽、CPU以及内存资源。该eosio.bios合约可以在contracts/eosio.bios中找到源代码。
3 q7 m7 F4 d) J先进入到eos根目录,再使用命令cleos set contract eosio build/contracts/eosio.bios -p eosio@active部署BIOS合约。5 A! Z* s9 ]5 R2 p
lixu@ubuntu:~/Desktop/sourceeos/eos$ cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV4 ^  ?8 W7 y$ s9 o8 {; D
executed transaction: af3bc248ca73d14c644fca863f4f82135bb72582b7f2be0dbec73a41c4f6438a  200 bytes  422 us1 u! u/ N0 s+ ~
#         eosio , U& v4 Q0 ^9 t
命令中的参数说明:
- q2 l3 S, {! q5 |, G8 peosio:部署合约的账户build/contracts/eosio.bios:合约路径-p eosio@active:作用是告诉cleos使用eosio帐户部署此合约,将使用我们之前导入的帐户eosio的active权限的私钥对该操作进行签名。+ B6 K& W& P) y4 f
0 v% D! z2 w4 W1 u' Y7 v" w
2. eosio.system合约/ w1 G/ F& r5 @
eosio.system是EOS系统合约中最重要的部分,实现了EOS项目的所有基本功能:如:创建新账户、部署智能合约、交易RAM、抵押获取资源(net、cpu)、投票、领取节点奖励等;
" A2 a/ q; J( ncleos create account eosio eosio.system EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV4 k2 e9 ^0 c9 B. A& N
cleos set contract eosio.system build/contracts/eosio.system
! S0 a; x* A+ u! h  C4 _3. eosio.msig合约! f- v; v0 w# E- J8 _
实现的是多签系统合约,实现了一个多签功能,由于EOS要求系统的每一次更新都需要出块节点完成一次多签,当签名数达到2/3+1时,更新才能生效。所以出块节点可以调用这个合约实现多签功能。
0 O* c" o  |" T2 H% t5 f1 Ocleos create account eosio eosio.msig EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV6 B) \& x4 q- @7 M/ U2 E7 ~- z
cleos set contract eosio.msig build/contracts/eosio.msig6 R# i: c# C# r) Q) e! k  x3 c. Z
4. eosio.token合约
9 a9 N# ^7 ~: [4 H用来发布代币的合约。
; }% i/ H( w. {1 P4 ~cleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
0 Z/ `  P, }1 O3 z$ L; ?cleos set contract eosio.token  build/contracts/eosio.token
( w1 i' U7 m1 C  a0 ^9 E) P' d: q5. exchange合约9 K- m0 V  {4 h( C8 m1 E2 h1 V
合约提供的功能来创建代币。( y6 P9 e/ c+ b& t% O; Y
cleos create account eosio exchange EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV: q7 ~4 h! D+ S+ r
cleos set contract exchange build/contracts/exchange
' J% Z' c5 F) n八、EOS v1.1与v1.2版本的差异+ v! p$ Q9 O& j( A& ^" x* `
在~/eosio-wallet/config.ini中可以修改keosd应用程序的端口,可以通过keosd命令单独启动。
" o" a6 s5 ^+ B/ j在~/.local/share/eosio/nodeos/config/config.ini中可以修改nodeos应用程序的端口,可以通过nodeos命令启动,一般需要添加插件启动,如:$ h/ i2 n& Q) R. L7 Q4 E
nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::wallet_api_plugin
1 [" K/ o2 G% e5 G; Ov1.1版本4 g1 m1 b- k$ z8 P. R
支持wallet RPC API,在nodeos中添加eosio::wallet_api_plugin插件以启动keosd,那么keosd的端口与nodeos一致,同时也可以再通过命令keosd单独启动keosd应用程序,此时可以通过两种途径访问keosd,一是使用nodeos的插件方式访问,得用nodeos的端口访问keosd,二是使用keosd的端口访问。
, k; d5 v% `( C通过RPC访问钱包数据的时候目录在~/.local/share/eosio/nodeos/data。通过cleos命令访问钱包数据的时候目录在~/eosio-wallet。
3 o) F* a' G: m8 f* ?v1.2版本
5 z" V0 A% A- `& ~* g9 ?nodeos已经删除了钱包API,应该直接在keosd中使用API。它的API定义与之前一样,可以在v1.2之前的版本中查看钱包API,所以在nodeos中不能再添加钱包插件以启动keosd了,需要通过命令keosd单独启动keosd应用程序,注意它的端口不能与nodeos一样。. a! M+ u. p2 {; K2 D. |- Y* S9 S/ w
通过RPC和cleos命令访问钱包数据的目录都在~/eosio-wallet。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13