热门搜索 :
考研考公
您的当前位置:首页正文

0125 - EOS 编程学习日志(2)

来源:东饰资讯网

关于 EOS 学习,今天还是有些收获的。

关于去中心化的理解

首先,我对去中心化的理解也在不断学习中,以下表述不一定正确,君且一听。

要理解去中心化,首先来对比看看中心化。

比如,我们要实现一个在线五子棋的游戏(只是我随便举的例子,方便理解),需要这些元素:

  • 定义游戏的规则
    • 比如,如果已经在某个点上下了一个子,就不能重复在相同的点上下子
    • 比如,满足连续五子,即可以赢了比赛
  • 记录游戏的状态
    • 比如,谁在哪些点上下了子
  • 执行游戏的规则
    • 比如,当一方出现连续五子时,判定其赢,且结束比赛
  • 权限
    • 比如,谁有权加入比赛

在中性化的设计中,很明显上述元素都是在中心服务器中完成的。那对于区块链、也即 EOS 中,是如何对应的呢?

  • 记录游戏的状态
    • 这是记录在区块中的
  • 定义、执行游戏的规则
    • 这是包含在智能合约(contract)中的,也即 .hpp/.cpp 所转换的 .abi/.wast 中的代码
  • 权限
    • 这是记录在 account 及 wallet 中的

可以看出,去中心化并不能减少这个程序中的任一环节,只是用自己的方式来实现。在初入区块链领域时,可以借助中心化的思路来帮助理解。但如果真的要彻底进入区块链的世界,还是要慢慢切换为去中心化的思维模式。

创建钱包、账户

不论在概念上、还是操作上,钱包(wallet)、账户(account)这 2 个概念都是非常关联的,你基本上不能离开一方去使用另一方。

学习智能合约(smart contract)

从上面的介绍可以看出,尤其在 EOS 提供基础框架后,基于 EOS 的开发,代码上主要是实现智能合约(smart contract)

不过,这其中有些概念比较拗,我还没完全理解。尤其,我基本已经不会 cpp 代码了,只能照着例子运行,还不能全新地编辑自己的合约,所以理解上只能是个大概。

使用 REST 接口与 EOS 交互

目前,EOS 的合约是使用 hpp/cpp 开发的。而一旦将合约布置到 EOS 上,就可以通过 EOS 所暴露的 REST 接口来使用这些合约。

自然,除了使用 eosc,你可以使用自己喜欢的语言编写程序,调用这些 REST 接口。

需要注意的是,目前 REST 接口还不全、不完善,期待官方能加快这一进度。

EOS 需要 21 个生产者,才能产生区块

eosd 有个坑:EOS 是需要 21 个生产者中的 15 个及以上确认的,但默认的 data-dir/config.ini 中仅有 2 个生产者:

producer-name = inita
producer-name = initb

需要手动增加至 21 个,即 a-u:

producer-name = inita
producer-name = initb
producer-name = initc
producer-name = initd
producer-name = inite
producer-name = initf
producer-name = initg
producer-name = inith
producer-name = initi
producer-name = initj
producer-name = initk
producer-name = initl
producer-name = initm
producer-name = initn
producer-name = inito
producer-name = initp
producer-name = initq
producer-name = initr
producer-name = inits
producer-name = initt
producer-name = initu

如果不这样做,会有什么问题呢?会导致区块无法产生,类似这样的错误:

chain_controller.cpp:1046     validate_block_heade ] head_block_time 2018-01-25T12:40:15, next_block 2018-01-25T12:40:35, block_interval 1
chain_controller.cpp:1048     validate_block_heade ] Did not produce block within block_interval 1, took 20000ms)

进而,因为区块无法产生,你在当前 eosd 环境中的所有操作,都无法记录,如创建账户、创建合约、等等;也即,关闭 eosd 再次运行时,你会发现之前创建的数据全没了。不过,和 wallet 相关的操作都是记录的,因为这是由 eos-walletd 完成的,和 eosd 无关。


Top