Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

华胥
110 0 0
主网Jungle 测试网络本地网络
; i  e+ S9 m8 f+ Y7 h/ G% J! M+ y
) h6 B5 ?( v% {3 }. t7 ~
咱们在开发阶段一般选择测试网络和本地网络皆可,测试完成后在部署到主网。这里我们先选择在本地网络上进行开发,因为在Jungle 测试网络中不支持wallet的RPC接口,因为它作为一个公共的服务节点,是不可能帮助大家管理私钥的,那样会非常不安全,大家都会共用相同的钱包和私钥。最后我们将使用本地搭建的keosd服务管理钱包,并连接到Jungle 测试网络中。$ p$ e0 a3 |1 D: d
EOS支持的操作系统8 }6 H/ h" D5 k7 k8 f
% s5 X7 B' Z3 E& n. I  P
Amazon 2017.09 and higher; ?) d0 i( V' D% H+ a
Centos 7
2 @! r$ y4 ^# W+ ~: R) [, fFedora 25 and higher (Fedora 27 recommended)* \# v' N. h, h2 \; B1 D
Mint 18
7 b" @& \6 _7 Y) hUbuntu 16.04 (Ubuntu 16.10 recommended)
" }- O) r# e0 {# jMacOS Darwin 10.12 and higher (MacOS 10.13.x recommended). S6 @% o- b% W' M$ l  x

; S! u; O: N2 i2 T' ?! d$ {本教程的开发环境选择为:Ubuntu 16.04、本地网络、RPC+eosjs、eosV1.2.2。接下来开始搭建EOS本地环境将它部署在单个主机。4 E8 l. e. P+ W0 k5 C- @
一、下载和编译EOS
: V: D* S  V2 N# e0 A获取EOS指定版本源码及其所有子模块,若不加入–recursive参数,则不能下载EOS关联的子项目。指定版本源码使用-b指定版本号。6 c  v, d# J# A& q3 O
git clone https://github.com/EOSIO/eos -b v1.2.2 --recursive
6 U8 c% t- {& q9 ~  B* x编译源码生成可执行文件0 j3 K7 S5 ^  E# v, R4 n
cd eos; q6 A! w" b9 k. w
./eosio_build.sh2 s$ }/ @$ O) F
编译时间比较长,需一两个小时不等,若编译顺利成功后,则会看到如下显示/ P' _8 n5 e4 l2 v) H. P+ l' ?
' p  y: }+ O  g0 Y1 p+ ]# e
在编译的过程中很有可能会出现各种错误,由于系统、EOS版本的差异出现的错误也会不一样,下面列出了常见的多种错误的解决办法。& P. t8 M) M6 r: F0 V
二、编译时报错的解决办法
# l) q9 t8 f3 M4 @* [6 |1. 物理内存RAM不足7 s8 K/ |% l: f2 }) L

" j0 o( _5 C8 ~解决办法:
( K5 B+ h0 e4 u修改文件源码eos/scripts/eosio_build_ubuntu.sh中的if [ "${MEM_MEG}" -lt 7000 ]; then,将7000改为自己系统的内存大小,如4000,如还报错,那么继续减小。: `$ O# @; D' [3 V( v# ~
2. 可用内存不足  n) Y; o4 n0 l" O
You must have at least 20GB of available storage to install EOSIO.. }0 e! K, }4 t, m& g
Exiting now./ t) k( r6 @& V+ e9 B$ }
解决办法:
: U; D! t: W) d9 q在文件源码eos/scripts/eosio_build_ubuntu.sh中增加如下一行代码代码前面。
7 _- u$ t+ {9 CDISK_MIN=18 {$ h* @" S8 I8 J
3. 无法下载(MongoDB等)
% b0 U+ Z& f" S0 o/ [无法下载MongoDB等是由于翻墙配置的问题。$ I+ O# y/ j7 ]4 K! A
解决办法:  j3 A3 ~1 m1 C. j- }& w! |
Mac的Shadowsocks使用“PAC自动模式”,另外偏好设置配置如下0 m& r' m; b3 _" l

5 F  p" B" T% ]/ |) P- y, D- }- j- V; O
Ubuntu的配置如下,其中的192.168.1.116 是Mac的局域网地址。; R, \. v' K3 C

2 \3 t5 l8 m# ~$ \9 z) I/ {, e4. 不能创建/tmp/llvm-compiler文件夹% l  v2 v' L7 E6 A$ C

1 {% D! ]+ \4 X, \解决办法:& J. S: N( d7 V7 ]' w
进入/tmp目录,删除llvm-compiler文件夹即可。$ |! R  W8 K) j; ?1 Y
三、安装EOSIO8 z* b5 P5 o* K" S7 K( N
安装所有依赖库并构建EOSIO,使用如下命令
6 r. p0 j5 I/ u# E. Ssudo ./eosio_install.sh
3 c8 k1 I+ ]; p9 L2 E; m若出现如下错误file INSTALL cannot make directory "/usr/local/eosio/etc/eosio",加上sudo即可。8 {: u( H: t4 P  i* h

4 [7 r7 i( Y6 v' A8 v安装成功后的效果如下. D* Q2 u) O" [* }' w/ Z& x

  T+ d) z% P9 s  v: k, T4 E安装完在根目录新增了build文件夹,最后EOS的目录结构如下。7 T2 J2 L6 F0 w5 N. m. A/ F/ ~
  [. f9 E' c% \9 \8 t+ _. `" P
四、配置Nodeos与Keosd
* Q+ ]" j. @* c0 i1. 配置Nodeos5 U' P" [/ [8 ^, S& Z
Nodeos是用来运行节点的EOSIO程序。执行一下步骤进行配置:! I7 y% d" [* c3 z
找到如下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所在行也用#注释/ f1 g- i# J" i. l3 ]2 w, o  k; A
9 X9 ]/ F' ]; r, i
再最后面添加如下内容. ?; n/ O) R; A% p
# Enable production on a stale chain, since a single-node test chain is pretty much always stale
: @( x+ E5 x" v( _+ f+ ?enable-stale-production = true6 ?" R. u2 ]. k  @
# Enable block production with the testnet producers- d# k4 O4 l. q# f/ q
producer-name = eosio
) x- a9 P- Y# A4 E: S# Load the block producer plugin, so you can produce blocks$ I  `# R6 j+ p+ n' `: B
plugin = eosio::producer_plugin& t8 r! d+ y* G3 d
# As well as API and HTTP plugins
  m: v' S0 Q6 _- vplugin = eosio::chain_api_plugin
. x, X0 d8 ?6 s9 f. pplugin = eosio::http_plugin
9 [& E: p& A+ P% ^: r# This will be used by the validation step below, to view history' g: A7 t$ v: g& n. x3 o
plugin = eosio::history_api_plugin
9 o5 @# U4 a, J% Y$ _' d若是v1.2之前的版本需添加plugin = eosio::wallet_api_plugin插件。! P- Z- r3 R1 J1 o5 s8 y* g! F
2. 配置Keosd
- Z; m: k& U& ?5 z; Q1 fkeosd 是一个轻客户端钱包,负责管理钱包,以便在广播到网络之前保护密钥和签署交易,在本地计算机上运行并在本地存储您的私钥。! L' G$ b% O) T
找到路径~/eosio-wallet/config.ini,然后打开config.ini文件将第一行的服务地址设置为:3 B& b% h0 q- P+ Q6 ~- b8 j- V
' Q* }7 K5 S4 C+ @! d
http-server-address = 127.0.0.1:8889
1 t+ d+ f2 W3 y2 ?五、启动节点. w- P4 Y( p! R; k
1. 启动nodeos' s( u; j7 \% }
使用以下命令启动自己的单节点区块链:
& g: b7 L$ h4 w6 p) X9 t; D6 Qnodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin
1 t# r' z* K% ^使用了plugin加载一些可选插件,在V1.2之前版本需要添加--plugin eosio::wallet_api_plugin插件。启动后应该每0.5秒生成一个块并有日志输出到终端,如下* z) N$ k6 E3 T# }# x

! ^& P6 g0 B) |& [3 O1 T. |如果报如下错误,则添加参数--delete-all-blocks
1 w# ]+ Q  n% N  c9 n
# N, X( P6 `% W% q) b  v  U9 m2. 启动keosd8 w: [% u- |6 B; Z2 m( n) h: p6 K
可以直接输入命令keosd即可启动keosd。6 f& p, {- I* f8 v, T6 g0 c
$ keosd
( i& x) `7 C: S* \9 g, j停止keosd,因为cleos可以自动启动keosd,最终可能会有多个keosd正在运行。
  v% _& j5 p9 F1 \4 S$ pkill keosd% o2 y0 m0 j6 I0 X$ {, P
注意:当使用RPC接口时,需要另起keosd,且端口与nodeos的不能一样。在使用cleos连接wallet时不用另外单独启动keosd,它连接的是nodeos的keosd服务。若使用cleos时报如下错误,则须停止keosd。5 H7 m' u) ?! Z: b0 N
lixu@ubuntu:~$ cleos wallet create, l7 C0 g6 i8 R! W
"/usr/local/eosio/bin/keosd" launched
8 r( I5 H4 V! b3 vUnable to connect to keosd, if keosd is running please kill the process and try again.5 \( S1 e& G" X% X0 W8 f
六、使用Cleos创建钱包
. a9 S' W/ W* U8 w下面我们使用命令行进行操作,需要使用到Cleos,它是一个命令行工具,可以与nodeos公开的REST API进行交互,前提是nodeos需要配置eosio :: chain_api_plugin插件。5 G1 w5 r- |1 e# G5 f6 t
1. 创建钱包" E" n# Z6 ?" p6 o5 d+ L
钱包是授权私钥的存储库,与区块链交互所必需的。通过如下命令创建钱包,可以通过-n参数指定创建的钱包名称。如果不指定钱包名称,则会创建一个名为default的默认钱包。
, h, g& U' D0 N- R/ k* Y' Lcleos wallet create
0 d; R) m2 ^/ a- \若是1.2以上版本,则需添加参数–to-console,输出如下  b0 `( P$ [9 w: _
lixu@ubuntu:~$ cleos wallet create --to-console
9 e, x" M, [( ]% k3 h: KCreating wallet: default
5 S: I! k" }# b, Q! b; o5 N: bSave password to use in the future to unlock this wallet.
  F& ^0 a2 c' Y9 AWithout password imported keys will not be retrievable.
& n- f' _9 f: y"PW5J5SSUrU3sGBonpxjxbn9QXGPdpAsCkWowmjCcLyBPUu5Y5uvvv"; }" s7 C6 u2 z+ o) C7 N
成功后将会生成钱包的解锁密码,钱包15分钟不用将会自动锁定,注意一定要保存最后一行的密码,需要使用它解锁这个钱包。
' Z$ v3 C! \! d. j/ G3 j' G2. 解锁钱包
3 a( ]8 W4 c* _# B/ \1 j可以通过两种方式解锁钱包,推荐使用第二种方式解锁。
0 [. u4 t, }( _) f! E' p直接在命令行上添加密码参数,可以通过-n参数指定钱包名称% a# s' Z" [! |& k6 G
) a4 x, w9 i6 b6 j, l& E
cleos wallet unlock --password PW5JCEkVgzoBHUVCzbEwT9es6agM6NRPv6n21wgbzVaem6rWE4akS7 k' ~. _1 z& G1 j
在交互模式下解锁( x" |# Z  f, Q& p: v

6 E' l- y" r( Z' K& T7 scleos wallet unlock
' t3 C& T$ H. A接着提示password:,然后输入密码即可
& Q7 F6 V( `( N2 D9 Jlixu@ubuntu:~$ cleos wallet unlock: J( ]9 H( N1 W" h" s9 c# e
password:1 j. K6 d6 v# v! F7 J, N- |% L
两种方式解锁成功后都会输出5 d# V, ~$ b9 E9 `* O
Unlocked: default
4 m  V3 P7 `  ?8 m( ~+ e- a' _' ]注意:
, R' l3 x/ A, |2 A: k1 b: p  ?; B3 L( v3 \, A
直接在命令行上使用您的密码并将其记录到您的bash历史记录中通常是不安全的,因此最好在交互模式下解锁。
$ ?% f3 N. Z2 C6 ?1 F出于安全考虑,最好在不使用钱包时使用命令cleos wallet lock将钱包锁定。
/ g0 E! I/ k" l( j
( [* W8 B+ R9 q7 V; B9 d' ?
3. 查看钱包列表
, t! {5 c1 p- I) n' M' }使用命令cleos wallet lock查看钱包列表,在列表中解锁后的钱包将在钱包名后面有*标记。5 R9 G! ?4 u( m% W) z
lixu@ubuntu:~/Desktop/sourcecode/eos$ cleos wallet list8 I" c' v. U) i6 Y* ]0 i+ S2 m
Wallets:
; H' t8 |5 T- n0 r$ ^[& b! S/ }/ Y8 i( c' y2 t
  "default *",
" u* }3 z+ m" A/ O* O! P]5 J: Z: g" i; ^  o
4. 导入密钥到钱包
+ @) W9 @) L& v. D, Z& O上述步骤中启动的私有区块链是使用默认初始密钥创建的,必须将其加载到钱包中。) z& |+ [/ V% E+ l
使用命令cleos wallet import --private-key ******。可以通过-n参数指定钱包名称# Y* ^( c) p7 z" G( G; E3 d
lixu@ubuntu:~$ cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
, I5 ^) H: k. ?$ f; U  himported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV3 g! I8 q) g% V9 j9 X$ {  u' y
注意:此时导入的私钥并不是创建钱包时生成的密码。; a+ J' [7 ^9 M. ~$ H- P
这个密钥
7 i. }! o# l5 c5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3$ d# X* |# l9 \0 u# R1 l
在以下配置文件中可以查看8 O& E1 e/ Q# S
Mac OS: ~/Library/Application\ Support/eosio/nodeos/config/config.ini
& M# O* H" m% ?7 o7 W: kLinux: ~/.local/share/eosio/nodeos/config/config.ini
! B# J$ _% y* Y5 t% W$ c( m打开文件后滑动到最下面即可查看到私钥。9 Y. X9 n0 F: |7 p) V6 W
注意该秘钥对正是超级账户 eosio的秘钥对。接下来就会用到eosio账户。
3 W4 i9 t# N, c( M* |* P& jcleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV% Y( k4 a/ t( A' M* e% V0 |
七、部署系统合约( F! t. M9 N0 y' h  G* H4 o; \
现在我们有一个拥有帐户eosio密钥的钱包defualt,那么接下来用eosio账户部署默认的系统合约,确保钱包defualt处于解锁状态。
* a+ Q  b) d7 L, h3 y; Deosio账户是默认就有的,在系统启动的时候就自动被创建的超级用户。8 `5 ~' G0 v4 X/ P0 Q/ F
1. eosio.bios合约
: o: l8 O% a* l9 w4 T$ Q/ ?出于开发目的,eosio.bios可以使用系统提供的合约,通过此合约可以通过确认用户持有的token直接控制其他帐户的资源分配,包括管理链上的堆栈和非堆栈资源,带宽、CPU以及内存资源。该eosio.bios合约可以在contracts/eosio.bios中找到源代码。( ]  v; D* u$ Q* Z* G
先进入到eos根目录,再使用命令cleos set contract eosio build/contracts/eosio.bios -p eosio@active部署BIOS合约。
- K7 C/ d3 p, i3 }2 x* j9 E% ?lixu@ubuntu:~/Desktop/sourceeos/eos$ cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV" ]) l& M' D' Q. L3 C4 E
executed transaction: af3bc248ca73d14c644fca863f4f82135bb72582b7f2be0dbec73a41c4f6438a  200 bytes  422 us  T7 v. v3 E% z! M* {
#         eosio ; @' @; m) k6 v; Z) S$ _% d7 ~: E
命令中的参数说明:
8 w8 d* n- t) @+ @, seosio:部署合约的账户build/contracts/eosio.bios:合约路径-p eosio@active:作用是告诉cleos使用eosio帐户部署此合约,将使用我们之前导入的帐户eosio的active权限的私钥对该操作进行签名。, m: m( U0 h& B( p7 C7 g

. G& i: X$ J7 `4 f% g3 C2. eosio.system合约% T3 q: a: e2 n; y. ?& O0 I
eosio.system是EOS系统合约中最重要的部分,实现了EOS项目的所有基本功能:如:创建新账户、部署智能合约、交易RAM、抵押获取资源(net、cpu)、投票、领取节点奖励等;
) O: B( ]; \& T( Z* t0 ^  D! F/ |( wcleos create account eosio eosio.system EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV1 F  Y0 s8 K# l% z
cleos set contract eosio.system build/contracts/eosio.system
' F) d0 @( A% k9 b# E3. eosio.msig合约
0 f1 Q/ q) V7 x* _1 C' A* X实现的是多签系统合约,实现了一个多签功能,由于EOS要求系统的每一次更新都需要出块节点完成一次多签,当签名数达到2/3+1时,更新才能生效。所以出块节点可以调用这个合约实现多签功能。3 ^3 g0 i5 D0 B* d% p, f+ l
cleos create account eosio eosio.msig EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV' g: `) L1 x0 }
cleos set contract eosio.msig build/contracts/eosio.msig- ^$ [8 W2 r& ~1 O5 s+ `
4. eosio.token合约9 n$ |2 f" e) Y
用来发布代币的合约。
/ B9 L- N: C- I3 X9 Dcleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
7 \/ W( e8 R4 p" f& N' M; ccleos set contract eosio.token  build/contracts/eosio.token
+ q" X- u9 R. L  X) X5. exchange合约0 _8 D) x" r5 W: y- Z, I$ @; H
合约提供的功能来创建代币。
* ^+ O8 D  q0 E  hcleos create account eosio exchange EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV6 x5 p. c9 O0 _9 H) R; K! s7 C5 }8 D
cleos set contract exchange build/contracts/exchange( A) q7 X4 @% T2 I
八、EOS v1.1与v1.2版本的差异
8 C) u$ O( D- p' w' y在~/eosio-wallet/config.ini中可以修改keosd应用程序的端口,可以通过keosd命令单独启动。
1 `6 C9 I( s# e. n* V5 `在~/.local/share/eosio/nodeos/config/config.ini中可以修改nodeos应用程序的端口,可以通过nodeos命令启动,一般需要添加插件启动,如:
. K: }( v1 e- v1 h3 Snodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::wallet_api_plugin
" k$ L" i) Y- U4 B4 O9 e4 Cv1.1版本
8 |4 v) \& w- g支持wallet RPC API,在nodeos中添加eosio::wallet_api_plugin插件以启动keosd,那么keosd的端口与nodeos一致,同时也可以再通过命令keosd单独启动keosd应用程序,此时可以通过两种途径访问keosd,一是使用nodeos的插件方式访问,得用nodeos的端口访问keosd,二是使用keosd的端口访问。
+ _, A* J' |; ^( h6 t通过RPC访问钱包数据的时候目录在~/.local/share/eosio/nodeos/data。通过cleos命令访问钱包数据的时候目录在~/eosio-wallet。5 D2 w. W9 y; x  W+ m" h$ J
v1.2版本  a; C3 L7 L7 u: D' J3 p
nodeos已经删除了钱包API,应该直接在keosd中使用API。它的API定义与之前一样,可以在v1.2之前的版本中查看钱包API,所以在nodeos中不能再添加钱包插件以启动keosd了,需要通过命令keosd单独启动keosd应用程序,注意它的端口不能与nodeos一样。, G" t  |$ y$ S/ Z% K
通过RPC和cleos命令访问钱包数据的目录都在~/eosio-wallet。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13