Eos上的Eos原生代币不见了

在之前的代码中,发送Eos代码是通过下面的函数进行的:

libraries/native_contract/eos_contract.cpp
void apply_eos_transfer(apply_context& context) {
   auto transfer = context.msg.as();

   try {
      EOS_ASSERT(transfer.amount > 0, message_validate_exception, "Must transfer a positive amount");
      context.require_scope(transfer.to);
      context.require_scope(transfer.from);

      context.require_authorization(transfer.from);

      context.require_recipient(transfer.to);
      context.require_recipient(transfer.from);
   } FC_CAPTURE_AND_RETHROW((transfer))


   try {
      auto& db = context.mutable_db;
      const auto& from = db.get(transfer.from);

      EOS_ASSERT(from.balance >= transfer.amount, message_precondition_exception, "Insufficient Funds",
                 ("from.balance",from.balance)("transfer.amount",transfer.amount));

      const auto& to = db.get(transfer.to);
      db.modify(from, [&](balance_object& a) {
         a.balance -= share_type(transfer.amount);
      });
      db.modify(to, [&](balance_object& a) {
         a.balance += share_type(transfer.amount);
      });
   } FC_CAPTURE_AND_RETHROW( (transfer) ) 
}

新的代码中,native contract的实现已经移到下面这个文件
libraries/chain/contracts/eosio_contract.cpp
查看这个文件时,会发现apply_eos_transfer函数已经不见了。也就意味着,在native代码中,已经没有创建一个叫Eos的代币了,也就是没有所谓的native token了。这和以太坊已经不同了,以太坊上还是会创建一个叫Eth的原生代币的,代币的传输都是在区块链代码里实现,而不是智能合约代码里实现。那么Eos链上的代币在什么地方呢?答案是通过智能合约来发行一个叫Eos的代币。在libraries/contracts/currency目录下已经有相关的实现了。区块链的魔力之处是一切都基于共识,只要大家都认,它就是。完全不需要通过某个权威的组织或者个人去背书。区块链上信心比什么都重要,而人性难测,再加上目前区块链的体量还很小,这也是造成区块链的市值波动会很剧烈的原因吧。

开发Eos的公司block.one已经明确表示只负责开发软件了,其它的一切都交给社区。在链上线后,block.one再认定哪条链才是“真正”的Eos链并会对其进行维护。美国的法律还是相当严格的,这样block.one也就规避了违法发行证券的风险,block.one的CEO还是很明智的。

所以到时,一定会有组织或者个人在名为eosio的帐户上通过智能合约发布一个叫EOS的代币。从实现方式上来讲,这个Eos已经和其它代币没有差别了。用户也不会在乎其中的技术实现的区别。之所以采用这种方式,原因可能是为了减少代码的复杂度。既然这个Eos和其它代币已经没有了区别,那么操作上就可以统一起来。这对于例如实现去中心化的交易所来说,可以减少一些工作量。另外,由于Eos的DPOS还是有挖矿的,每年增发5%。所以挖矿的收益发放的实现肯定也会有所区别了,这需要通过智能合约来配合实现。

你可能感兴趣的:(Eos上的Eos原生代币不见了)