EOS账号之间有“对眼”?分析eosio.token源码来了解

@(作者:天晓)
今天圊呓语大哥的文章很有意思,指出一个现象“EOS转账有点贵”。他还提出一个新词:EOS钱包账号之间的“对眼”。

什么是EOS账号之间的“对眼”?


圊呓语大哥通过自己的实践,敏锐地观察到一个现象,EOS转账不是人们以前常说的免费,反而有点贵。相信大部分小伙伴都看过他的文章了,错过的可以仔细再阅读《早圊语说-EOS的转账/RAM#市场永远是对的https://bihu.com/article/810800》。

简单总结一下就是,EOS转账需要先抵押EOS获得足够的CPU和NET资源,不过这一块是过几天就可以赎回的,除了时间成本,还算不上“收费”。那为什么说EOS转账“有点贵”?

据圊呓语大哥介绍,A账号向B账号发起一笔转账消耗,这次转账是两个账号之间的第一次转账。这是第一次“对眼”,完成这次交易是要消耗CPU和RAM资源的。消耗RAM是硬消耗,难以释放的。按现在火爆的RAM市场价格算,这次转账的费用大约为7元人民币(2018.07.03早上9点价格,消耗了0.23kb,1kb最高是0.5个eos,eos单价为60块来计算。)

0.23KB的RAM,如果前几天看过天晓文章《EOS空投成本为零?不是,成本因RAM的爆炒而急剧增加》,就会觉得很熟悉。当时,天晓通过ADD和CET空投,算出空投给一个账号需要消耗的RAM,约等于0.23 KB。

0.23KB的RAM被用在哪?


其实对于大多数账户来说,往往已经有EOS账户余额记录了,不需要消耗0.23KB的RAM,所以这个现象很少人发现。但是对于那些空投的代币,绝大数账户此前是没有这些代币余额记录,所以每投一个账户就消耗0.23KB的RAM。

这个我们可以看看代码,分析原理,不感兴趣的可以只看文字。

如果有通过cleos命令行进行发币的小伙伴,应该知道部署代币合约时,输入以下命令:

cleos set contract <代币发行账户名>  contracts/eosio.token -p <代币发行账户名> 

“contracts/eosio.token”是系统自带的代币合约,源码我们可以通过以下GitHub地址查看。

https://github.com/EOS-Mainnet/eos/blob/master/contracts/eosio.token/eosio.token.cpp

这默认的代币合约其实有3个接口:create(创建代币)、issue(发行代币,即只能由创建者从币池向其他用户转出)、transfer(交易代币,这个可以由任何用户向其他用户转账)。

当发行代币或交易代币时,都需要调用代币合约的以下代码:

void token::add_balance( account_name owner, asset value, account_name ram_payer )
{
   accounts to_acnts( _self, owner );
   auto to = to_acnts.find( value.symbol.name() );
   if( to == to_acnts.end() ) {
      to_acnts.emplace( ram_payer, [&]( auto& a ){
        a.balance = value;
      });
   } else {
      to_acnts.modify( to, 0, [&]( auto& a ) {
        a.balance += value;
      });
   }
}

这段代码的意思是,如果代币接收方此前没有该代币,则发送方需要消耗RAM用于在“to_acnts”表中创建记录并更新余额;如果此前有记录,那么不需再支付RAM,直接增加余额就行。

RAM是EOS非常宝贵的资源,给账户创建一个代币记录需要消耗0.23KB。这就是为什么给创世快照用户购买了8KB而不是3KB,否则没多久就不够用了。

另外,代币合约其实也是智能合约的一种类型,由此推之,当你使用一个DApp时也有“对眼”现象。当新用户调用DApp一个智能合约接口,创建记录也是需要消耗0.23KB。如果DApp的智能合约设计不合理,不能及时为用户释放RAM,那可是消耗RAM的黑洞。

参考文章:
早圊语说-EOS的转账/RAM#市场永远是对的
https://bihu.com/article/810800

欢迎给EOS Cafe Calgary投票


EOS Cafe Calgary是一家领先的节点,致力于提高EOS的使用率和价值。我们的目标是利用EOS的力量,提供教育、基础设施和DAPP(分布式应用),以丰富全球EOS生态系统。大家投票的时候,欢迎给EOS Cafe Calgary投一票,我们的账号名是eoscafeblock。也感谢大家对我们EOS Cafe Calgary的支持!

EOS Cafe Calgary is a leading block producer candidate that is committed to increasing the adoption and value of EOS. Our goal is to harness the power of EOS to provide education, infrastructure and decentralized applications to enrich the global EOS ecosystem.

官方网站:https://eoscafecalgary.com/

你可能感兴趣的:(EOS账号之间有“对眼”?分析eosio.token源码来了解)