Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

华胥
107 0 0
主网Jungle 测试网络本地网络( j" X2 A8 i( m( r

, d% H% z! _2 K& f' W$ ]: b咱们在开发阶段一般选择测试网络和本地网络皆可,测试完成后在部署到主网。这里我们先选择在本地网络上进行开发,因为在Jungle 测试网络中不支持wallet的RPC接口,因为它作为一个公共的服务节点,是不可能帮助大家管理私钥的,那样会非常不安全,大家都会共用相同的钱包和私钥。最后我们将使用本地搭建的keosd服务管理钱包,并连接到Jungle 测试网络中。* Q. o! P0 ]+ x1 D" T# w& l
EOS支持的操作系统2 O- y. H* `/ A) K# a6 g
/ }3 E& }9 e. n  A
Amazon 2017.09 and higher" @, S$ c& \* C
Centos 7. h% \$ H8 w' A* Q( W/ F
Fedora 25 and higher (Fedora 27 recommended)
* Q9 l5 V2 ]& s' pMint 18. [" L' D* \' T$ S/ G
Ubuntu 16.04 (Ubuntu 16.10 recommended)- O/ U# D2 e( o4 }5 M1 Q
MacOS Darwin 10.12 and higher (MacOS 10.13.x recommended)
) k* l( H7 w* p' F1 W+ W* k
% L; u2 \' Q5 ~  l6 D' \
本教程的开发环境选择为:Ubuntu 16.04、本地网络、RPC+eosjs、eosV1.2.2。接下来开始搭建EOS本地环境将它部署在单个主机。
0 e* H- y1 w& r# d9 ~# D3 X一、下载和编译EOS
) S% Z, |, c9 b3 O3 [  H获取EOS指定版本源码及其所有子模块,若不加入–recursive参数,则不能下载EOS关联的子项目。指定版本源码使用-b指定版本号。
/ l" }' [' |8 n1 K# n5 Agit clone https://github.com/EOSIO/eos -b v1.2.2 --recursive: N1 D( [; X8 c- W* p% P9 N
编译源码生成可执行文件
0 K# x: I) r4 K) B# w0 ]cd eos
5 |/ o4 k% @  e1 ?6 i' ?: R+ v2 `./eosio_build.sh
6 d! M4 H( K) L1 [编译时间比较长,需一两个小时不等,若编译顺利成功后,则会看到如下显示9 H; Q% t+ ^; w
5 G! [; L' m+ t& }( a, T. {& t
在编译的过程中很有可能会出现各种错误,由于系统、EOS版本的差异出现的错误也会不一样,下面列出了常见的多种错误的解决办法。+ N. X' p( r: \9 _9 l
二、编译时报错的解决办法3 V) Z! D2 G& @
1. 物理内存RAM不足% f& z! t, L8 z% b4 S

! _- d3 r$ Y/ E解决办法:% R. h8 o6 o7 [
修改文件源码eos/scripts/eosio_build_ubuntu.sh中的if [ "${MEM_MEG}" -lt 7000 ]; then,将7000改为自己系统的内存大小,如4000,如还报错,那么继续减小。
  n, c$ E. u1 _2. 可用内存不足1 Y& s3 ~( M7 R! S) j, T  Q
You must have at least 20GB of available storage to install EOSIO.
8 k' `" j4 T- a; fExiting now.
" k4 y4 V3 D& {' y解决办法:
! v- p3 ]! \; T1 S2 U# t在文件源码eos/scripts/eosio_build_ubuntu.sh中增加如下一行代码代码前面。: e) H; g5 I, [
DISK_MIN=16 O0 D. r6 @  f' G+ k' Q
3. 无法下载(MongoDB等)
7 i! F" D; e7 _- x. a- y无法下载MongoDB等是由于翻墙配置的问题。+ o9 B/ I( [5 F: t! A+ a
解决办法:0 L* m# R, c$ Z9 j
Mac的Shadowsocks使用“PAC自动模式”,另外偏好设置配置如下$ F1 e: u% I( q# [

7 E* q3 l0 u, _5 D" d" W
  S8 t6 F$ j9 H0 {0 CUbuntu的配置如下,其中的192.168.1.116 是Mac的局域网地址。6 Y8 @4 m1 f5 \2 `2 h6 n  N$ L' F

' V* u$ s5 O0 w4. 不能创建/tmp/llvm-compiler文件夹0 R- a, V+ @( U( j- F

2 h& O2 m+ [0 Q+ t解决办法:
) n% s: Z- F7 l' U: H6 [" B2 ^进入/tmp目录,删除llvm-compiler文件夹即可。
6 m! _# N0 e& ?3 \3 H- a三、安装EOSIO9 K$ j0 `; h9 a
安装所有依赖库并构建EOSIO,使用如下命令% a: I" P8 h- d! U; e; Z. w; w
sudo ./eosio_install.sh
* T9 O4 K" g; g/ g" i4 p; X  K若出现如下错误file INSTALL cannot make directory "/usr/local/eosio/etc/eosio",加上sudo即可。% e* i% Y6 A1 ]: o
& z, c, Q4 x& t* A3 u
安装成功后的效果如下: W/ V( D6 U) k2 R/ h% _" j

' e  V9 N7 G5 q) y* y- m" N  k安装完在根目录新增了build文件夹,最后EOS的目录结构如下。
5 o3 D3 v& ?0 X8 I/ X& F2 B4 p" e1 D: r- M# @
四、配置Nodeos与Keosd( w5 O, V6 s. i4 J; g( G
1. 配置Nodeos9 q, ~( w9 n" F( y
Nodeos是用来运行节点的EOSIO程序。执行一下步骤进行配置:/ ?" T/ C$ J( K
找到如下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所在行也用#注释6 E. x# P% [0 q6 `

2 z% S$ E. \2 m' w" c; h再最后面添加如下内容+ W6 [+ e9 t  J. I  F* D& i
# Enable production on a stale chain, since a single-node test chain is pretty much always stale& V; ~+ E' ~/ T0 W# [; y
enable-stale-production = true: _: o- Y2 p/ n# d4 l- q4 H# S4 b
# Enable block production with the testnet producers6 f7 c# I- u" P9 [% h6 ^( z7 t
producer-name = eosio
$ ^1 y8 F' U; }8 }3 D- y# Load the block producer plugin, so you can produce blocks, z$ r' E# ?: K; \# o
plugin = eosio::producer_plugin) ]. G  z' {( P# i6 E
# As well as API and HTTP plugins
8 F8 \/ t9 m# ^6 H6 x$ x# bplugin = eosio::chain_api_plugin
" H  N5 A5 X& Hplugin = eosio::http_plugin( Y; b3 B" H$ L6 v
# This will be used by the validation step below, to view history
9 p: y, S" E, U+ C+ t6 [* Splugin = eosio::history_api_plugin
; T2 c: R8 o9 j0 i若是v1.2之前的版本需添加plugin = eosio::wallet_api_plugin插件。8 g0 k8 {: _, k; l. A8 }6 }
2. 配置Keosd
1 E9 G2 z" ?- vkeosd 是一个轻客户端钱包,负责管理钱包,以便在广播到网络之前保护密钥和签署交易,在本地计算机上运行并在本地存储您的私钥。
" q9 b, @( T% K% _. F找到路径~/eosio-wallet/config.ini,然后打开config.ini文件将第一行的服务地址设置为:" x9 @5 M6 ]* g  n, Y

8 o7 x  W8 g& d* `, K6 lhttp-server-address = 127.0.0.1:8889
! v  i  J* X/ k. u" B/ j1 ]: E五、启动节点
! W8 p% t- Z( P$ {, I1. 启动nodeos
+ e$ M  _, k6 Z" F使用以下命令启动自己的单节点区块链:7 V8 G5 g* ]% z% F% f# X+ |
nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin9 s: p8 q5 h: ?' \# b
使用了plugin加载一些可选插件,在V1.2之前版本需要添加--plugin eosio::wallet_api_plugin插件。启动后应该每0.5秒生成一个块并有日志输出到终端,如下
" f( w& }" b  i2 L3 ?% l% Z7 J+ c2 Y' _' o
如果报如下错误,则添加参数--delete-all-blocks5 M$ P: y; v/ O% J
/ b% x1 {: v- Q. h& Q5 L
2. 启动keosd
; \6 J  ~. z8 Z7 v6 \7 W& V9 g可以直接输入命令keosd即可启动keosd。
' h" G1 K( O3 J0 y5 s$ keosd8 P: v# T/ [# o4 b0 I7 E2 v
停止keosd,因为cleos可以自动启动keosd,最终可能会有多个keosd正在运行。: h/ ]7 [5 X3 @, [3 F2 @& n  D
$ pkill keosd
, H; s( G/ @0 {9 U$ ?2 p注意:当使用RPC接口时,需要另起keosd,且端口与nodeos的不能一样。在使用cleos连接wallet时不用另外单独启动keosd,它连接的是nodeos的keosd服务。若使用cleos时报如下错误,则须停止keosd。
- _4 F9 R6 k8 V: Q& ~: ?lixu@ubuntu:~$ cleos wallet create
; z/ S% m5 H/ x' ?6 @& s% R; k0 g4 ~"/usr/local/eosio/bin/keosd" launched
4 M$ ^9 f1 x4 c! m# j8 O; n: yUnable to connect to keosd, if keosd is running please kill the process and try again.
# \# \5 q% [; T8 O六、使用Cleos创建钱包/ n* v! N5 M) O9 k# M  B
下面我们使用命令行进行操作,需要使用到Cleos,它是一个命令行工具,可以与nodeos公开的REST API进行交互,前提是nodeos需要配置eosio :: chain_api_plugin插件。
9 D3 F  W  z% Y; U; o1. 创建钱包$ T+ y( X# N3 Y, n2 t5 R* s+ h. l
钱包是授权私钥的存储库,与区块链交互所必需的。通过如下命令创建钱包,可以通过-n参数指定创建的钱包名称。如果不指定钱包名称,则会创建一个名为default的默认钱包。6 k1 R% r' o( t4 a, S. @9 R
cleos wallet create/ X; a9 K: y0 [- K8 b1 h8 W
若是1.2以上版本,则需添加参数–to-console,输出如下( D- Y. }, o5 f( ~
lixu@ubuntu:~$ cleos wallet create --to-console
, P$ ^+ P: r. }0 _5 R& ~" pCreating wallet: default
7 H, C$ q- A  NSave password to use in the future to unlock this wallet.
1 u2 @  p0 {- j9 TWithout password imported keys will not be retrievable.
- f  w& i8 l/ t- }: k"PW5J5SSUrU3sGBonpxjxbn9QXGPdpAsCkWowmjCcLyBPUu5Y5uvvv"
8 Y" _5 Y- I+ W- w成功后将会生成钱包的解锁密码,钱包15分钟不用将会自动锁定,注意一定要保存最后一行的密码,需要使用它解锁这个钱包。
; c* E/ x" m$ {! X  n1 Z1 D& l( k2. 解锁钱包
  p8 ]# L% r) v5 p可以通过两种方式解锁钱包,推荐使用第二种方式解锁。! c1 }8 F5 L; W8 @+ E
直接在命令行上添加密码参数,可以通过-n参数指定钱包名称
' c- O6 e. i3 W8 n

$ \' X- Q  Q  E4 X6 wcleos wallet unlock --password PW5JCEkVgzoBHUVCzbEwT9es6agM6NRPv6n21wgbzVaem6rWE4akS
- b. U% ]& `, v$ R1 ^在交互模式下解锁
% Z) h7 r! x$ k, o( [  R. R

2 n: E  X( f4 R' q1 `2 Zcleos wallet unlock
. u- g7 B" B* v: `: G接着提示password:,然后输入密码即可
8 Y/ t+ U+ e$ Clixu@ubuntu:~$ cleos wallet unlock9 b7 i9 T6 N* N0 g
password:: P. Y8 n6 z# N( i# l7 h5 N7 E% f# t
两种方式解锁成功后都会输出/ a: V$ `: H: X0 r4 M
Unlocked: default( \  n2 v1 G5 h  Q$ g& h1 p# ]
注意:
2 N5 ^7 R# o& d
( B) q4 _" `8 V" i% g! ^4 {# c直接在命令行上使用您的密码并将其记录到您的bash历史记录中通常是不安全的,因此最好在交互模式下解锁。
8 d: M- b% ]9 d5 [; s0 I5 `出于安全考虑,最好在不使用钱包时使用命令cleos wallet lock将钱包锁定。' n( g4 k7 R  {3 f8 h" ^/ h( A
6 s5 O: e( ^1 K0 I  v
3. 查看钱包列表( d, u1 u# G9 e& \
使用命令cleos wallet lock查看钱包列表,在列表中解锁后的钱包将在钱包名后面有*标记。
9 R5 {: d: H5 g5 S& E% clixu@ubuntu:~/Desktop/sourcecode/eos$ cleos wallet list* [2 q; @1 r9 x
Wallets:
0 S. `. i' u" Q0 C0 Z[) k" \" i0 ^5 D$ ~% F
  "default *",! i% r" M/ k& v5 A$ U1 ^
]" E0 M# O! ?- t5 n7 G9 c  B8 C
4. 导入密钥到钱包
, ~1 S: W# a' Y# Z, g上述步骤中启动的私有区块链是使用默认初始密钥创建的,必须将其加载到钱包中。' E  a) C/ o- J' G( ?
使用命令cleos wallet import --private-key ******。可以通过-n参数指定钱包名称1 |; W0 E, I. C) E1 m
lixu@ubuntu:~$ cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3: o# X/ |. @5 Z' X: t% b) d
imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
/ l5 Z% ^3 s7 S3 {& n注意:此时导入的私钥并不是创建钱包时生成的密码。6 l( d, M; q5 @3 c: w$ S1 p* a& Y
这个密钥  H3 O) Z, O. y  k
5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
1 Z2 z4 g; f. J/ D, f在以下配置文件中可以查看/ J" [- I/ G9 r: I1 q
Mac OS: ~/Library/Application\ Support/eosio/nodeos/config/config.ini
& d9 K" N1 r  e# d+ x' C# g9 ]  ZLinux: ~/.local/share/eosio/nodeos/config/config.ini
  T7 w+ X* f& J: L* t打开文件后滑动到最下面即可查看到私钥。
  p  a$ L% }+ ^1 `% v注意该秘钥对正是超级账户 eosio的秘钥对。接下来就会用到eosio账户。$ _" B. e% w5 O- v
cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV3 e" K! L) n7 z0 T0 f
七、部署系统合约. z0 _6 y2 n" R
现在我们有一个拥有帐户eosio密钥的钱包defualt,那么接下来用eosio账户部署默认的系统合约,确保钱包defualt处于解锁状态。
- l% ~& ^  R! Q+ R; l1 ?eosio账户是默认就有的,在系统启动的时候就自动被创建的超级用户。! B( r0 j! `) {# Y2 i, K
1. eosio.bios合约
: e% F1 h7 d, w( L* _$ {出于开发目的,eosio.bios可以使用系统提供的合约,通过此合约可以通过确认用户持有的token直接控制其他帐户的资源分配,包括管理链上的堆栈和非堆栈资源,带宽、CPU以及内存资源。该eosio.bios合约可以在contracts/eosio.bios中找到源代码。
- [/ f# Y) O7 h% _4 F2 I1 B先进入到eos根目录,再使用命令cleos set contract eosio build/contracts/eosio.bios -p eosio@active部署BIOS合约。' J4 g  J' P8 ~) L2 v+ Q
lixu@ubuntu:~/Desktop/sourceeos/eos$ cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV2 N3 ^) C9 c& G6 T
executed transaction: af3bc248ca73d14c644fca863f4f82135bb72582b7f2be0dbec73a41c4f6438a  200 bytes  422 us
$ i/ q) Q# y$ v+ s8 O$ O#         eosio
7 l6 X" H7 C( k" T' B$ \6 {! a命令中的参数说明:
4 j- B# e1 k: ]% ^' L/ O& z: Y/ Weosio:部署合约的账户build/contracts/eosio.bios:合约路径-p eosio@active:作用是告诉cleos使用eosio帐户部署此合约,将使用我们之前导入的帐户eosio的active权限的私钥对该操作进行签名。
  h( v0 R0 O. n2 I

0 a  m' A- b8 o- V8 B2. eosio.system合约
% n+ h5 K" l* U& v" }eosio.system是EOS系统合约中最重要的部分,实现了EOS项目的所有基本功能:如:创建新账户、部署智能合约、交易RAM、抵押获取资源(net、cpu)、投票、领取节点奖励等;
4 t* C/ U1 t* Z6 z" [" jcleos create account eosio eosio.system EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
/ O4 U7 A" J# c. e5 mcleos set contract eosio.system build/contracts/eosio.system( \. a) z6 a/ ^; f1 B, W
3. eosio.msig合约
, r5 x- B& O1 F" v% ~7 Y4 s( r实现的是多签系统合约,实现了一个多签功能,由于EOS要求系统的每一次更新都需要出块节点完成一次多签,当签名数达到2/3+1时,更新才能生效。所以出块节点可以调用这个合约实现多签功能。
8 D6 `/ w! Y( \1 F6 tcleos create account eosio eosio.msig EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV6 \; @  q& o6 G" I% U8 ^
cleos set contract eosio.msig build/contracts/eosio.msig6 O9 o, M0 \  t! n
4. eosio.token合约6 C9 ^# Q5 L7 L/ @
用来发布代币的合约。# i8 g2 u) I% z( \2 r
cleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV- m" H: N+ z  @% g- s  Q& k, v/ X
cleos set contract eosio.token  build/contracts/eosio.token. F; c, q% Z5 N& |8 y
5. exchange合约
1 ^) U0 r9 k, q0 d! P合约提供的功能来创建代币。
3 o; F6 ~1 X% N( c5 d( Z4 ncleos create account eosio exchange EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
1 ^3 x: `" D! `* }3 E& bcleos set contract exchange build/contracts/exchange
% X0 [, k2 J8 L3 \+ y八、EOS v1.1与v1.2版本的差异
% F9 N& V- ^" Q; i在~/eosio-wallet/config.ini中可以修改keosd应用程序的端口,可以通过keosd命令单独启动。
& _7 ^% B6 m3 k$ K+ g在~/.local/share/eosio/nodeos/config/config.ini中可以修改nodeos应用程序的端口,可以通过nodeos命令启动,一般需要添加插件启动,如:
0 l: o: K0 R9 C; snodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::wallet_api_plugin5 }, A/ k% i. q' [1 U* v9 y8 X% F
v1.1版本
' f2 n) Y+ l; L支持wallet RPC API,在nodeos中添加eosio::wallet_api_plugin插件以启动keosd,那么keosd的端口与nodeos一致,同时也可以再通过命令keosd单独启动keosd应用程序,此时可以通过两种途径访问keosd,一是使用nodeos的插件方式访问,得用nodeos的端口访问keosd,二是使用keosd的端口访问。! l8 S3 c0 k) q! p+ f. F& i: y1 l, E
通过RPC访问钱包数据的时候目录在~/.local/share/eosio/nodeos/data。通过cleos命令访问钱包数据的时候目录在~/eosio-wallet。4 t/ J# ?' y8 E  I
v1.2版本
$ G! U( K! y' \; z& S8 r+ y0 [nodeos已经删除了钱包API,应该直接在keosd中使用API。它的API定义与之前一样,可以在v1.2之前的版本中查看钱包API,所以在nodeos中不能再添加钱包插件以启动keosd了,需要通过命令keosd单独启动keosd应用程序,注意它的端口不能与nodeos一样。0 y! y7 E. ~7 E8 c6 V
通过RPC和cleos命令访问钱包数据的目录都在~/eosio-wallet。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13