Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

华胥
153 0 0
主网Jungle 测试网络本地网络
; |/ r. U0 j2 C# B, q; S

6 |3 ?" c0 t9 e. W咱们在开发阶段一般选择测试网络和本地网络皆可,测试完成后在部署到主网。这里我们先选择在本地网络上进行开发,因为在Jungle 测试网络中不支持wallet的RPC接口,因为它作为一个公共的服务节点,是不可能帮助大家管理私钥的,那样会非常不安全,大家都会共用相同的钱包和私钥。最后我们将使用本地搭建的keosd服务管理钱包,并连接到Jungle 测试网络中。' K# W3 x8 }  f+ E+ g3 Y
EOS支持的操作系统6 e3 a$ N& U( b& I9 i7 ]

9 }9 I! T1 D, B, |: }! u% GAmazon 2017.09 and higher+ ^% s+ _6 \1 q6 p: z5 {9 x
Centos 7
1 J) T7 o+ L$ s$ \" {. \* FFedora 25 and higher (Fedora 27 recommended)
2 z( {1 L. |6 l+ K/ L- U8 L( O' uMint 18
! O6 V2 D, {, E# t; NUbuntu 16.04 (Ubuntu 16.10 recommended)8 \% L  q1 P& u$ S+ E
MacOS Darwin 10.12 and higher (MacOS 10.13.x recommended)8 s7 q; F+ y& ]) m! s3 }

3 J6 n% O* {8 D本教程的开发环境选择为:Ubuntu 16.04、本地网络、RPC+eosjs、eosV1.2.2。接下来开始搭建EOS本地环境将它部署在单个主机。- c# D1 ^% n7 v* C5 y
一、下载和编译EOS
7 c$ X; k5 A9 u3 U' Q. n获取EOS指定版本源码及其所有子模块,若不加入–recursive参数,则不能下载EOS关联的子项目。指定版本源码使用-b指定版本号。: z' Q& y: T0 B1 B. d
git clone https://github.com/EOSIO/eos -b v1.2.2 --recursive
3 X  _) Y$ c! G+ X编译源码生成可执行文件; `. n5 v  E2 A! x5 ^
cd eos
4 B7 ~  c  C3 S8 p5 w./eosio_build.sh5 \6 ^. g/ _) ]$ u- ~3 q; C+ O
编译时间比较长,需一两个小时不等,若编译顺利成功后,则会看到如下显示
! h  e! U/ |9 ]! b  w8 a* j( P2 W/ A/ A+ x8 s2 X
在编译的过程中很有可能会出现各种错误,由于系统、EOS版本的差异出现的错误也会不一样,下面列出了常见的多种错误的解决办法。9 R$ a* A/ V" G% G* I4 P! e
二、编译时报错的解决办法) W; c# [, s- k  B: |
1. 物理内存RAM不足0 b: h9 r9 c2 u  M; }& ?; Y2 U

/ _/ k4 ^9 h* Z9 T$ i  z8 P4 c解决办法:/ g% A; P+ H  i+ G  c: ^" [, ?
修改文件源码eos/scripts/eosio_build_ubuntu.sh中的if [ "${MEM_MEG}" -lt 7000 ]; then,将7000改为自己系统的内存大小,如4000,如还报错,那么继续减小。
5 b9 S; X5 ]$ R+ ~( o. F( \2. 可用内存不足
4 w) P9 |0 ^# X8 Q) E5 T+ u: k9 VYou must have at least 20GB of available storage to install EOSIO.
; O$ ^7 Y6 X# P3 n0 PExiting now.
7 g; ?% e/ S& _4 H; A6 M解决办法:
8 C5 e7 z5 k' I$ _在文件源码eos/scripts/eosio_build_ubuntu.sh中增加如下一行代码代码前面。
/ f) ~4 s0 W; m9 T: k3 mDISK_MIN=1
) |$ B. W0 l4 E) h5 T3. 无法下载(MongoDB等)
4 \# X: @8 K! g无法下载MongoDB等是由于翻墙配置的问题。7 P- n$ K" A+ f  P( W9 J1 d, U! x# b
解决办法:
& N; ^8 E8 S1 O& A. L. g( |Mac的Shadowsocks使用“PAC自动模式”,另外偏好设置配置如下2 T, }3 g& n' F
  P( Q7 L. P. B; u
( D  q. T' I) Q# S( i$ o; x
Ubuntu的配置如下,其中的192.168.1.116 是Mac的局域网地址。
/ o  `$ _- z3 i# o0 B7 z/ M' j6 ^6 R0 n4 c0 Y8 F+ r
4. 不能创建/tmp/llvm-compiler文件夹
: Y/ g9 ?" F9 }4 e+ O" a: q8 @1 ?4 z, s+ R% Z1 u/ Y
解决办法:* a% H: C5 r0 n0 U
进入/tmp目录,删除llvm-compiler文件夹即可。
  v0 n5 }& h+ m7 l7 p' [3 n( z三、安装EOSIO
) `; S$ ]; c7 v; X" @6 G安装所有依赖库并构建EOSIO,使用如下命令
4 U9 \0 D- P$ Tsudo ./eosio_install.sh) K0 s  I+ x- ]0 z" q" F
若出现如下错误file INSTALL cannot make directory "/usr/local/eosio/etc/eosio",加上sudo即可。
4 L; ]6 ~9 E5 x# \: ]2 p
' v! J: Q, ?) T# b  d: O安装成功后的效果如下
& b  w4 V) T5 q$ z, F0 r6 g1 _
% u8 G5 Q# d$ [- x7 Z安装完在根目录新增了build文件夹,最后EOS的目录结构如下。
$ g. E. N; O! T' E& y8 j5 ?" X" u7 M5 q# l' N% |- k7 y
四、配置Nodeos与Keosd
2 U% J( ]6 T( n# c7 O. Y1. 配置Nodeos
1 G8 Y7 L$ u* Y: u' c. |' _Nodeos是用来运行节点的EOSIO程序。执行一下步骤进行配置:
, G% e# E0 V: Y) J% R) H% m+ e找到如下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所在行也用#注释8 W! F1 a2 u5 h; l

$ E$ L# N* [+ ~, A) ?再最后面添加如下内容
* B+ ^3 t8 h9 N/ L* P3 _# Enable production on a stale chain, since a single-node test chain is pretty much always stale
8 {; `9 N& q, d6 l7 ~$ U# N; j8 Venable-stale-production = true
% s% c+ D0 F/ b3 ^# Enable block production with the testnet producers) O0 S! o; r: T. j% E9 ^
producer-name = eosio! K5 H+ n4 ^0 d9 Z" p; _
# Load the block producer plugin, so you can produce blocks8 k* O" Z; b" b
plugin = eosio::producer_plugin
; f8 g" s9 G! d' \# As well as API and HTTP plugins
7 @3 c% y+ H" l' N+ J- Qplugin = eosio::chain_api_plugin$ m$ D, ~: k) g3 r
plugin = eosio::http_plugin. K, `0 B9 ~8 R- \" \! ]; t) U
# This will be used by the validation step below, to view history4 G4 Z, Y7 Q4 q. h
plugin = eosio::history_api_plugin
$ t, k" e6 p( l. p: ]; X3 D: I若是v1.2之前的版本需添加plugin = eosio::wallet_api_plugin插件。4 l. b. L* Q7 |5 @
2. 配置Keosd0 J0 G  H: ~: y9 A
keosd 是一个轻客户端钱包,负责管理钱包,以便在广播到网络之前保护密钥和签署交易,在本地计算机上运行并在本地存储您的私钥。
1 D3 ^- g- c* o找到路径~/eosio-wallet/config.ini,然后打开config.ini文件将第一行的服务地址设置为:- V4 d" @/ o# [$ X- ?

( Y' ?- ^9 j; T% K2 Zhttp-server-address = 127.0.0.1:8889- E) X% ~4 E' `3 |7 t
五、启动节点
& s) @+ C9 I; l( O! O: d1. 启动nodeos
( X) R  w0 F# S使用以下命令启动自己的单节点区块链:
8 r* W( l0 z, X+ q. z5 Inodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin5 D4 |& N; _( P; k+ S' t5 }1 X3 r2 |
使用了plugin加载一些可选插件,在V1.2之前版本需要添加--plugin eosio::wallet_api_plugin插件。启动后应该每0.5秒生成一个块并有日志输出到终端,如下
# R) Q" r" T: ~( y0 z8 h8 _
$ z6 y6 p+ Z* `* n0 @* f2 u) \3 B6 U如果报如下错误,则添加参数--delete-all-blocks
: F  d# s. O# u% g& w
: |6 O( y/ }3 B' A  ?2. 启动keosd2 Q7 w  |0 @. J
可以直接输入命令keosd即可启动keosd。/ u- e2 s# H/ k$ ?6 n5 C
$ keosd
% S5 ^+ b/ V0 k停止keosd,因为cleos可以自动启动keosd,最终可能会有多个keosd正在运行。9 Y/ Q9 }! m5 ~6 K! x3 k! F
$ pkill keosd) w7 E1 t+ O$ ^$ O6 `
注意:当使用RPC接口时,需要另起keosd,且端口与nodeos的不能一样。在使用cleos连接wallet时不用另外单独启动keosd,它连接的是nodeos的keosd服务。若使用cleos时报如下错误,则须停止keosd。3 ?3 e- _8 ]0 v. Y2 G
lixu@ubuntu:~$ cleos wallet create
! }1 ^8 O3 U, N6 l"/usr/local/eosio/bin/keosd" launched
' _) W0 q+ Z; bUnable to connect to keosd, if keosd is running please kill the process and try again./ b' p& {- E: j, x0 ^- K1 E* C* N  ?7 S
六、使用Cleos创建钱包! N9 W8 \% I6 x$ ?+ {! _5 A- J' r. h! D
下面我们使用命令行进行操作,需要使用到Cleos,它是一个命令行工具,可以与nodeos公开的REST API进行交互,前提是nodeos需要配置eosio :: chain_api_plugin插件。
0 X; P- P% O. Q+ a8 E4 i* u1. 创建钱包' |5 P8 T6 b' b- h5 P% t
钱包是授权私钥的存储库,与区块链交互所必需的。通过如下命令创建钱包,可以通过-n参数指定创建的钱包名称。如果不指定钱包名称,则会创建一个名为default的默认钱包。8 H0 ~% s6 n& z& {8 D& l2 f$ o
cleos wallet create: ]+ e5 ?0 N$ [1 ~
若是1.2以上版本,则需添加参数–to-console,输出如下
! x% L( M1 ^( w' F. M& slixu@ubuntu:~$ cleos wallet create --to-console: q8 K2 v* G3 M* o/ f. {1 [
Creating wallet: default8 C$ K7 k& [% K* p
Save password to use in the future to unlock this wallet.6 h! u6 @) P9 X  k3 V
Without password imported keys will not be retrievable.
& A4 ]6 X- T; B"PW5J5SSUrU3sGBonpxjxbn9QXGPdpAsCkWowmjCcLyBPUu5Y5uvvv"
- T$ j; M% A. x$ ^2 T6 O成功后将会生成钱包的解锁密码,钱包15分钟不用将会自动锁定,注意一定要保存最后一行的密码,需要使用它解锁这个钱包。
! u8 @* [5 Y, g/ o4 Q2 d0 d! h2. 解锁钱包
9 W# j2 Z6 @; N% m可以通过两种方式解锁钱包,推荐使用第二种方式解锁。
7 [! x: B, L5 F9 }2 d4 \# o直接在命令行上添加密码参数,可以通过-n参数指定钱包名称
$ `% C7 G5 L/ W
$ a! \( L' [" `5 h
cleos wallet unlock --password PW5JCEkVgzoBHUVCzbEwT9es6agM6NRPv6n21wgbzVaem6rWE4akS
8 w, y% E7 {7 }$ L5 V! T在交互模式下解锁, M; `2 @7 F& x0 e  B* H" f

/ K; \9 g% n5 Q) wcleos wallet unlock/ g" S$ s/ X0 A8 k$ O
接着提示password:,然后输入密码即可
& q; U% ~' H! i9 hlixu@ubuntu:~$ cleos wallet unlock
4 O5 e% q0 W& q8 A0 K" Mpassword:
0 P9 x8 M8 R9 }% {  _5 _两种方式解锁成功后都会输出: H. x5 X/ y) `4 }
Unlocked: default
" F- I7 \9 C- Q# W% l: Z1 `6 B- j注意:
! s9 }) Y+ t, x% _- i3 m. v! ~! t1 T( L: z5 L* _4 ]
直接在命令行上使用您的密码并将其记录到您的bash历史记录中通常是不安全的,因此最好在交互模式下解锁。: `9 j4 f* s1 I( l; J3 x8 P
出于安全考虑,最好在不使用钱包时使用命令cleos wallet lock将钱包锁定。9 z7 s; w! G( H. [6 i0 k6 f, `
% g, |' h; }3 ?  m! v
3. 查看钱包列表
: d! \: d" g3 Z% b使用命令cleos wallet lock查看钱包列表,在列表中解锁后的钱包将在钱包名后面有*标记。/ L8 L. y4 ?3 p7 G1 D3 J
lixu@ubuntu:~/Desktop/sourcecode/eos$ cleos wallet list9 i. m1 Z4 w( u! |! ?& E5 ]
Wallets:
  D5 Q; ^1 a, ][
! n& f& y% b& K: U  "default *",5 C+ l+ z: q2 g
]: p4 x" e  T. D/ O
4. 导入密钥到钱包
, j; }/ g; z$ v" y/ C& |上述步骤中启动的私有区块链是使用默认初始密钥创建的,必须将其加载到钱包中。* a, v2 e! @- x" m7 D
使用命令cleos wallet import --private-key ******。可以通过-n参数指定钱包名称* G, S1 c8 K# [! G- E
lixu@ubuntu:~$ cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
, F; u  O+ k7 {8 y3 ximported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
8 b1 S+ ~4 H& J+ F1 F  ?注意:此时导入的私钥并不是创建钱包时生成的密码。/ V. e$ s/ `8 C* r# a1 ^
这个密钥" B' n0 y/ }* a: M; L- \
5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3# y6 J2 F, ~0 m8 Z3 Q8 c! L
在以下配置文件中可以查看, R3 J& f6 L7 h# c
Mac OS: ~/Library/Application\ Support/eosio/nodeos/config/config.ini5 [6 Q4 P; v- N! f
Linux: ~/.local/share/eosio/nodeos/config/config.ini
" N+ w7 g# K8 z7 \9 u% g打开文件后滑动到最下面即可查看到私钥。! A1 F/ L  U+ b& X1 A3 M, ^
注意该秘钥对正是超级账户 eosio的秘钥对。接下来就会用到eosio账户。
  F- {/ I- \: `cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV7 E+ d& G( |7 ~) F
七、部署系统合约0 t5 F# d% G  _! l7 w# t4 l
现在我们有一个拥有帐户eosio密钥的钱包defualt,那么接下来用eosio账户部署默认的系统合约,确保钱包defualt处于解锁状态。
. s& P! A" C' Q( ?- f# w' keosio账户是默认就有的,在系统启动的时候就自动被创建的超级用户。' ]3 o0 m  @' P. m  j
1. eosio.bios合约
; H# _# G) Z7 [% A# {' ?出于开发目的,eosio.bios可以使用系统提供的合约,通过此合约可以通过确认用户持有的token直接控制其他帐户的资源分配,包括管理链上的堆栈和非堆栈资源,带宽、CPU以及内存资源。该eosio.bios合约可以在contracts/eosio.bios中找到源代码。1 M$ g2 t4 ]( z& i/ X1 L
先进入到eos根目录,再使用命令cleos set contract eosio build/contracts/eosio.bios -p eosio@active部署BIOS合约。
4 ~0 R! @( K/ k+ P1 ~1 v' ?: Zlixu@ubuntu:~/Desktop/sourceeos/eos$ cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV/ f, `3 s, y& D8 l5 _9 M5 S
executed transaction: af3bc248ca73d14c644fca863f4f82135bb72582b7f2be0dbec73a41c4f6438a  200 bytes  422 us* Q9 x. H9 P) }" Z" H+ ^
#         eosio
4 Q/ q- x* d: [9 Y命令中的参数说明:
) W5 M; f! f7 o4 t1 Q! |eosio:部署合约的账户build/contracts/eosio.bios:合约路径-p eosio@active:作用是告诉cleos使用eosio帐户部署此合约,将使用我们之前导入的帐户eosio的active权限的私钥对该操作进行签名。
+ T  f+ `* N2 S. o+ d; s# z& T1 q7 V

. u$ a0 G' V9 G' c: }0 {0 N7 R" v2. eosio.system合约; c  l0 S* y8 t, ]  F# U
eosio.system是EOS系统合约中最重要的部分,实现了EOS项目的所有基本功能:如:创建新账户、部署智能合约、交易RAM、抵押获取资源(net、cpu)、投票、领取节点奖励等;
& B% i- t1 w) ?& j- Ucleos create account eosio eosio.system EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV- Z# M9 c3 v: a; f
cleos set contract eosio.system build/contracts/eosio.system
! D" E$ c3 O. s3. eosio.msig合约  Q( g2 k# G9 n+ u
实现的是多签系统合约,实现了一个多签功能,由于EOS要求系统的每一次更新都需要出块节点完成一次多签,当签名数达到2/3+1时,更新才能生效。所以出块节点可以调用这个合约实现多签功能。
5 ]& ~2 l' d6 t, u; O  e! Pcleos create account eosio eosio.msig EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV. K7 d. h9 k& s
cleos set contract eosio.msig build/contracts/eosio.msig
0 d3 y7 l- z8 X: M* ?, H: k2 `4. eosio.token合约
4 o5 b# r7 H  e! E) A; d1 C用来发布代币的合约。+ e1 M, z' A# U/ A
cleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV2 y- h7 U# ~: ~& b  K8 m& i' q$ [8 U
cleos set contract eosio.token  build/contracts/eosio.token6 {" [- a; b# U, F4 o
5. exchange合约
8 G. S5 y+ x; w, e6 }: a合约提供的功能来创建代币。/ m& C' D) y" p3 ]: O  {
cleos create account eosio exchange EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV. E6 }" p6 ^  |0 v
cleos set contract exchange build/contracts/exchange" T# T  c% B, Z
八、EOS v1.1与v1.2版本的差异
, ]3 ~4 P) s+ |  X5 C& [# i0 h在~/eosio-wallet/config.ini中可以修改keosd应用程序的端口,可以通过keosd命令单独启动。
! B* |6 f& n1 B' E* S在~/.local/share/eosio/nodeos/config/config.ini中可以修改nodeos应用程序的端口,可以通过nodeos命令启动,一般需要添加插件启动,如:
) s% Y/ I( B, B9 v! X& gnodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::wallet_api_plugin" _; [( W1 i0 A2 _8 \
v1.1版本1 V* Y4 s9 X; R$ ]1 @
支持wallet RPC API,在nodeos中添加eosio::wallet_api_plugin插件以启动keosd,那么keosd的端口与nodeos一致,同时也可以再通过命令keosd单独启动keosd应用程序,此时可以通过两种途径访问keosd,一是使用nodeos的插件方式访问,得用nodeos的端口访问keosd,二是使用keosd的端口访问。8 _$ x- Q, {+ Z- {
通过RPC访问钱包数据的时候目录在~/.local/share/eosio/nodeos/data。通过cleos命令访问钱包数据的时候目录在~/eosio-wallet。
3 R3 F4 K  q! zv1.2版本
6 K0 n9 P4 `. ^# @' N* tnodeos已经删除了钱包API,应该直接在keosd中使用API。它的API定义与之前一样,可以在v1.2之前的版本中查看钱包API,所以在nodeos中不能再添加钱包插件以启动keosd了,需要通过命令keosd单独启动keosd应用程序,注意它的端口不能与nodeos一样。
' m) v0 E) L) Z/ m: _通过RPC和cleos命令访问钱包数据的目录都在~/eosio-wallet。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13