account

介绍

帐户是授权的集合,存储在区块链上,用于标识发送方/接收方。它具有灵活的授权结构,允许根据权限的配置方式由个人或一组个人拥有。向区块链发送或接收有效交易需要一个帐户。nodeos管理着在区块链上发布账户以及与账户相关联的行为。我们通过cleos与nodeos的交互,来实现账户的管理。
每个account都有2个默认的命名权限。开发者可以自定义命名权限。每个命名权限都有一个阈值,必须满足该阈值才能认为在该权限下签名 的事务是有效的。
交易是通过使用一个客户端来签名的,该客户端拥有一个加载和解锁的钱包。

$ cleos create account

wallet

介绍

keosd管理钱包。钱包用来管理key pairs。主要是用来存放私钥的不是用来存钱的,有了私钥可以生成公钥。
在对一个交易进行签名时,nodeos与keosd之间会发生交互。钱包通过将锁定的键值本地化存储的方式,实现以安全的方式活动签名。cleos作为一个中介,实现keosd(从本地获取)键值到nodeos使用这些键进行账户(以及其他)区块链签名相关的操作。
钱包和账户之间没有直接关系,而是通过cleos进行交互

clipboard.png

常识

创建的钱包默认是解锁状态,当我们钱包被解锁时,钱包名称后面都会标记有"*"符号。

// 展示所有open状态的钱包列表,重启keosd后,钱包默认是关闭状态。
$ cleos wallet list
Wallets:
[
  "default *",// *表示已解锁,创建一个钱包默认是解锁状态
  "periwinkle"
]

// 钱包必须是unlock && open 状态。
$ cleos wallet import 5K6tXmW7FQEBWqwG9fsAAjSMLgBMMDPjqE1ATFk2HGaHWjAjsgE
imported private key for: EOS7jZNeuZmqt4fAt4NLoZtLXTXDYEB3eo1QZgg7K19DKbyJaSPMr

备份钱包

为防止钱包文件的损坏,一个良好的习惯是将钱包备份到一个U盘或其他媒介中去。钱包文件采用高度加密的机制,以确保其中的密码对难以访问。

$ ls -l ~/.local/share/eosio/nodeos/data/
drwxr-xr-x 2 kingnet users 4096 Apr 23 08:36 blocks
-rw------- 1 kingnet users  567 Apr 23 10:37 default.wallet
-rw------- 1 kingnet users  311 Apr 23 10:09 gaoyuan.wallet
drwxr-xr-x 2 kingnet users 4096 Apr 23 08:36 shared_mem

如果没有配置dir-data:

clipboard.png

genesis文件

{
  "initial_timestamp": "2018-03-02T12:00:00.000",
  "initial_key": "EOS8Znrtgwt8TfpmbVpTKvA2oB8Nqey625CLN8bCN3TEbgx86Dsvr",
  "initial_configuration": {
    "max_block_net_usage": 1048576,
    "target_block_net_usage_pct": 1000,
    "max_transaction_net_usage": 524288,
    "base_per_transaction_net_usage": 12,
    "net_usage_leeway": 500,
    "context_free_discount_net_usage_num": 20,
    "context_free_discount_net_usage_den": 100,
    "max_block_cpu_usage": 100000,
    "target_block_cpu_usage_pct": 500,
    "max_transaction_cpu_usage": 50000,
    "min_transaction_cpu_usage": 100,
    "max_transaction_lifetime": 3600,
    "deferred_trx_expiration_window": 600,
    "max_transaction_delay": 3888000,
    "max_inline_action_size": 4096,
    "max_inline_action_depth": 4,
    "max_authority_depth": 6
  },
  "initial_chain_id": "0000000000000000000000000000000000000000000000000000000000000000"
}

tial_timestamp跟区块生产相关,后面区块生产分析时会用到这个值
initial_key是创建这个genesis的公钥,系统将会以这个公钥创建eosio这个系统账号,而系统的智能合约的核心操作都需要系统账号授权,也就是说initial key控制着eosio.system等智能合约。eosio.system智能合约控制整个系统的。比如生产者注册就必须使用eosio.system智能合约。

不同genesis文件,就代表是不同的链,这样的节点其实是不能互联的。但是由于节点服务器信息(ip, 端口)是公开的,不排除有误加的情况。所以必须有机制拒绝这样的连接,这个是连接握手节点通过检测chain_id来实现的。

producer

区块生产者,一个节点生产区块有2个条件

  • chain-> _production_enabled==true
    production_enabled=true有几种情况

    • config.ini和或者启动时带有enable-stale-production
    • 区块同步完成时
  • 节点被投票成了21个代表中的一个,且到了生产区块的turn(21个代表节点是分时生产区块的)
    EOS采用的DPOS+BFT,一个节点要成为真正“生产者”,必须被系统其他节点投票出来成为21个超级节点中的一个。同时,被选择为超级节点后,也是和其他20个节点轮流生产。其实,这里存在一个生产者注册流程,也就说一个节点光配置为producer是不够的,还需要通过eosio.system智能合约注册生产者,这个操作权限只授予给了创世块的initial_key的持有人。

权限

  • owner:象征着账户的所有权。只有少数事务需要此权限,但最引人注目的是owner可进行任何更改操作。一般情况下,建议将owner保存在冷钱包,不要与任何人共享。owner可以用来恢复另一个可能被破坏的权限。
  • active:被用来转移资金,投票给生产者和作出其他高层帐户更改。
  • 父权限:每个权限名都有一个父权限。父母有权更改其子女的任何权限设置。
  • 自定义命名权限:这些权限可用于进一步扩展帐户管理。自定义权限非常灵活,在实现时可以处理大量可能的用例。这在很大程度上取决于开发人员社区如何使用它们,以及采用什么约定(如果有的话)。

任何给定权限的权限都可以分配给一个或多个公钥或有效的帐户名称。


jincheng828
49 声望9 粉丝

在奔向财富自由的路上...