【追币课堂】EOS智能合约如何实现去中心化

【追币课堂】EOS智能合约如何实现去中心化

  From  中本错

前言

从资金盘频频跑路,我们看到了EOS智能合约存在的“大坑”。那就是智能合约竟然可以升级、可以更新、可以替换。

不少人听了这点,就开始发牢骚了。到处宣扬EOS的种种不好。提出分叉意见和各种吐槽。这种时候,比较懂EOS技术的同学,通常会呵呵一笑。彷佛听到了些好笑的事情。

灵活的东西,你不懂得正确的运用,却评说不合理。于是我写下这篇文章,希望让大家进一步理解下EOS的权限,看看到底是EOS的设计不合理,还是只是你不懂的它的工作原理。

导航:

EOS的合约权限的合理解释

EOS账号和智能合约的关系

权限即权力(power)

具体操作

eosio.prods和黑洞公钥方案的比较


EOS的合约权限的合理解释

EOS智能合约能更新的这个特点,可以视为是一种默认设置。就是说,如果你不去进行任何操作,那么默认情况下,一份智能合约是可以更新的。如果要设置成不可更新的智能合约。只要进行一些操作就行了。

EOS账号和智能合约的关系

默认情况下,账号拥有者,可以给自己的账号设置 “代码” 用来自动处理接收到什么信号的时候,自动干什么。这份代码被我们称之为 “智能合约”。

“智能合约” 跟EOS账号是一一对应的关系。一个EOS账号,可以没有智能合约,但最多只能有一个智能合约。所以,当我们说 “智能合约”的权限的时候,说的其实是EOS账号的权限。

要让 “智能合约” 变成不可更新、不可销毁的去中心化状态,意味着,是要将这个EOS账号 “去中心化”。也就是说,改变这个账号的权限。让它不仅不归你所有,而且不归世界上任何一个人所有。此时,智能合约,就是真正的去中心化状态了。

权限即权力(power)

code is law , permission is power.

在智能合约世界里,代码是法律,而权限是权力。

在 code is law 的环境里, EOS给了程序员最高的权力。

放下权力,才是真正的去中心化。放不下权力,就有突然反悔去“杀死合约”的可能性,没有做到真正的去中心化。所以要做到真正的去中心化,那就是自动放弃更新智能合约的权力。正所谓,放下屠刀,立地成佛。

具体操作

要放下权力,也就是主动放弃权限——放弃对智能合约的生杀大权。目前主流的有两种选择。

第一种,是把权限设置成超级节点: eosio.prods 。下面我们追币bidream团队来进行实操演示:

1. 我们创建了追币bidream的测试账号: testuser1111

2. 查看其权限:

➜  ~ cleos get account testuser1111

permissions:

     owner     1:    1 EOS6Fhx9xMx5eNoTQjVSvNVMarT5QpPj9kddJmNbzpCbXMvtbgL9q

        active     1:    1 EOS6Fhx9xMx5eNoTQjVSvNVMarT5QpPj9kddJmNbzpCbXMvtbgL9q

memory:

3. 设置active权限:

➜  ~ cleos set account permission testuser1111 active '{"threshold": 1,"keys": [],"accounts":[{"permission":{"actor":"eosio.prods","permission":"active"},"weight":1}]}' owner -p

 testuser1111

executed transaction: 90550d1877b514b90a21888e68ee8520af883756f8310723530b5ffd7e525f06  144 bytes  156 us

#         eosio <= eosio::updateauth            {"account":"testuser1111","permission":"active","parent":"owner","auth":{"threshold":1,"keys":[],"ac...

warning: transaction executed locally, but may not be confirmed by the network yet

4. 设置owner权限:

➜  ~ cleos set account permission testuser1111 owner '{"threshold": 1,"keys": [],"accounts":[{"permission":{"actor":"'eosio.prods'","permission":"active"},"weight":1}]}' -p test

user1111@owner

executed transaction: 8d060b64470d5d0189478c98b44d2c735675baad35bb8a7de7b4e285b51e9137  144 bytes  178 us

#         eosio <= eosio::updateauth            {"account":"testuser1111","permission":"owner","parent":"","auth":{"threshold":1,"keys":[],"accounts...

warning: transaction executed locally, but may not be confirmed by the network yet

5. 再次检查设置结果:

➜  ~ cleos get account testuser1111

permissions:

     owner     1:    1 eosio.prods@active,

        active     1:    1 eosio.prods@active,

memory:

设置成功。

第二种,是把权限设置为“黑洞公钥”:

1. 我们创建了第二个追币bidream测试账号: testuser2222

2. 查看其权限:

➜  ~ cleos get account testuser2222

permissions:

     owner     1:    1 EOS6Fhx9xMx5eNoTQjVSvNVMarT5QpPj9kddJmNbzpCbXMvtbgL9q

        active     1:    1 EOS6Fhx9xMx5eNoTQjVSvNVMarT5QpPj9kddJmNbzpCbXMvtbgL9q

memory:

3. 设置 active 权限: 

➜  ~ cleos set account permission testuser2222 active '{"threshold": 1,"keys": [{"key": "EOS1111111111111111111111111111111114T1Anm","weight": 1}],"accounts":[]}' owner -p testu

ser2222@owner

executed transaction: fd7c648b2fc298801dc7dad32d10a338f377efd74de6b6f83c4be953e5a1e485  160 bytes  313 us

#         eosio <= eosio::updateauth            {"account":"testuser2222","permission":"active","parent":"owner","auth":{"threshold":1,"keys":[{"key...

warning: transaction executed locally, but may not be confirmed by the network yet

4. 设置 owner 权限:

➜  ~ cleos set account permission testuser2222 owner '{"threshold": 1,"keys": [{"key": "EOS1111111111111111111111111111111114T1Anm","weight": 1}],"accounts":[]}' -p testuser2222

@owner

executed transaction: 71e29f908e5c538d90b6bd35309326bb67f6fef0cf9db45d775920f9749e7da1  160 bytes  184 us

#         eosio <= eosio::updateauth            {"account":"testuser2222","permission":"owner","parent":"","auth":{"threshold":1,"keys":[{"key":"EOS...

warning: transaction executed locally, but may not be confirmed by the network yet

5. 再次检查设置结果:

➜  ~ cleos get account testuser2222

permissions:

     owner     1:    1 EOS1111111111111111111111111111111114T1Anm

        active     1:    1 EOS1111111111111111111111111111111114T1Anm

memory:

设置成功。

eosio.prods和黑洞公钥方案的比较

eosio.prods是21个超级节点的多签权限。也就是,把权限充公,交给大家都信任的公众组织。这种方案,基本可以建立信任基石了。除非BP发起投票,15票通过,才能修改你的合约。可能性不大。而黑洞公钥,就不一样了。做的更绝。

EOS1111111111111111111111111111111114T1Anm

这个公钥来历比较牛逼。当初EOS主网创世区块的生产者 genesisblock 用到的公钥。世界上没有人有这个公钥对应的私钥。想暴力破解? 那恐怕得集中整个地球上的算力去算100年。

➜  ~ cleos get accounts EOS1111111111111111111111111111111114T1Anm

{

  "account_names": [

    "genesisblock",

    "octblackhole",

    "uipblackhole"

  ]

}

可以看到,目前EOS系统中,有人也用的这个公钥,并把名字取名“黑洞”。octblackhole, uipblackhole,黑洞,意味着只进不出。这是最安全的解决方案。连21超级节点和BM都动不了。

为EOS正名

那些看到EOS智能合约能更新,就说EOS还不如以太坊的人,你们对以太坊又懂多少?

以太坊solidity智能合约里的ownable了解一下,suicide、self-destruct 函数了解一下。以太坊智能合约里的这些 “后门” 函数,同样也可以做到开发者一人一键清除所有数据,甚至销毁整个合约。所以说, 以太坊智能合约,只要开发者愿意,依然也可以一手控制合约中的所有数据。事在人为,代码程序员写。 中不中心化,去不去中心化,最终,我们还得看代码是怎么写的,才能去评论。

EOS上,同样可以写出优雅的,完全透明公正、完全去中心化的智能合约。以太坊能实现的去中心化不可改智能合约,EOS也可以实现。而EOS能实现的可更新迭代智能合约,以太坊却不能实现。

坚持拥抱EOS生态的追币bidream认为,以太坊上能做的事,EOS上都能做,并且能做的更好。而以太坊能做EOS上做不到的事,那就是不需要做的事。手动滑稽脸。

总结

EOS上的智能合约。可以更新,这是默认特性。可以更新的合约,对那些不可能一次性写完就保证没有bug的大型DAPP有好处。

EOS上的智能合约,同样可以做到不可更新。那就是主动放弃更新的权力。不可更新的智能合约的应用场景,在于那些合约账号持有大量用户的资金,需要去中心化,确保不会跑路。比如大家都在期待的去中心化交易平台。

追币bidream(zhuibi.com)正在开发基于EOS生态的颠覆性的去中心化交易平台,实现人与智能合约的直接交互。代码开源并无bug运转后,也将从智能合约的权限层面,真正做到去中心化。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容