cleos get account

通过cleos 查询账户RAM余额

cleos -u http://127.0.0.1:8888 get account zer41iyhahwp
...
memory:
     quota:     9.366 KiB    used:     3.078 KiB

但实际创建账户时,RAM购买量为8192byte

cleos get table

通过查询用户资源表

cleos -u http://127.0.0.1:8888 get table bitconch zer41iyhahwp userres
$ cleos -u http://127.0.0.1:8888 get table eosio zer41iyhahwp userres
{
  "rows": [{
      "owner": "zer41iyhahwp",
      "net_weight": "10.00000000 EOS",
      "cpu_weight": "10.00000000 EOS",
      "ram_bytes": 8191
    }
  ],
  "more": false
}

ram_bytes的数据与创建时RAM数据基本(所差1byte是因为,购买RAM通过Bancor估价代币购买,会与实际少许误差)一致。那cleos查出的数据差距在哪?下面跟下系统合约源代码

系统合约源码

查看RAM购买后,设置资源的位置(跳转GitHub)

set_resource_limits( res_itr->owner, res_itr->ram_bytes + ram_gift_bytes, net, cpu );

发现设置资源的位置加上附加的ram_gift_bytes

查看ram_gift_bytes具体数值(跳转github

static constexpr int64_t  ram_gift_bytes        = 1400;

所以,查询账户RAM比实际购买多的部分为合约设置时赠送的部分(忽略运算误差)。

9.366 KiB = 8191 byte + 1400 byte