继续问一个关于区块链的问题~

2017-10-20 20:20:50 +08:00
 Elven
最近一直在边考研边写区块链,然后现在一个基于 pbft 与 dpos 的区块链写完了,理论上可以运行,但是还没来得及测试。不过现在有一个新的问题摆在了我的面前,智能合约到底是怎么实现的呢?我知道当满足某种条件时,从外界触发可以使合约得到执行。但是这一一切的一切究竟是怎么实现的呢?忧伤,背作文都不开心了😔😔😔
2604 次点击
所在节点    程序员
21 条回复
czheo
2017-10-20 20:31:53 +08:00
你需要定义一套 opcode,然后实现一个 deterministic 的 virtual machine。
可以参考比特币: https://en.bitcoin.it/wiki/Script
以及以太坊论文的 22 页: http://gavwood.com/paper.pdf
Elven
2017-10-20 20:41:15 +08:00
@czheo emmm 大概就是一个堆栈虚拟机喽,外界要如何通知合约比较好呢~
czheo
2017-10-20 21:02:52 +08:00
当生成一个 block 的时候,block 里面的所有 script 被执行。
Elven
2017-10-20 21:18:21 +08:00
@czheo 如果是需要特定时间嘞
bestkayle
2017-10-20 21:20:02 +08:00
请问有你是通过什么途径学习的呢,有相关的书吗。
bestkayle
2017-10-20 21:20:47 +08:00
比较靠谱的工程化的书。
czheo
2017-10-20 21:21:02 +08:00
@Elven 那你就顶一个 op 可以指定时间执行咯。
czheo
2017-10-20 21:22:53 +08:00
@bestkayle 普林斯顿这套教程是技术上我见过讲的最清楚的。http://bitcoinbook.cs.princeton.edu/
Elven
2017-10-20 21:27:56 +08:00
@czheo 我可以这么理解咩~当合约发送到网络后,被节点打包并广播到网络,在广播前程序便执行,然后得到一个状态,如果需要定时的话就像启动一个定时器(。・ω・。)唔,如果是要重复执行怎么办呢~比如说资产发行时,程序不能只执行一次呀╮(╯▽╰)╭
Elven
2017-10-20 21:29:06 +08:00
@czheo 多谢推荐(o^^o)
Elven
2017-10-20 21:30:31 +08:00
@bestkayle 根据概念实现的,没有通过书
czheo
2017-10-20 21:34:06 +08:00
可以这么理解。
重复执行,在比特币里没有对应的。在以太坊里,其实有两种地址,一种是给人用的,一种是给程序用的(存有代码)。你给第二种地址多次发 txn,相当于执行了那个程序里的代码。具体看这里: http://ethdocs.org/en/latest/contracts-and-transactions/account-types-gas-and-transactions.html
Elven
2017-10-20 21:45:03 +08:00
@czheo ok,思路终于清晰了不少,感谢大佬的帮助😋😋
czheo
2017-10-20 21:51:27 +08:00
有一点:应该不是广播前程序被执行,我的理解是需要 block 生成出来( mined )之后才被执行,而且如果分叉的话可能要维护多个状态。
qdwang
2017-10-20 21:59:58 +08:00
@Elven 你理解错了。
1. 所有矿工接收执行合约的请求
2. 挖出矿的矿工执行所有刚才收的请求
3. 把结果广播出去,大家都执行一次,来验证

你要做的精准定时是很难实现的。一般设置时间阈值然后判断的方式比较多。
czheo
2017-10-20 22:03:19 +08:00
@qdwang +1
qdwang
2017-10-20 22:03:58 +08:00
另外智能合约不一定要内建虚拟机自创语言。用现有语言和解释器或虚拟机也可以。自创语言,是为了安全可控并且可计算消耗。
Elven
2017-10-20 22:10:09 +08:00
@qdwang 嗯哼~,这么说的话我可以去找找现成的 vm😋。唔,这个合约可以是写在好几个区块之前的咩,还是一定要在当前区块呢
qdwang
2017-10-20 22:28:49 +08:00
@Elven 合约可以在任意位置,就像 5 年前开了个比特币账号,存了 1 个比特币。五年后的今天,一样可以操作这个账号转出比特币。一个合约,就像一个特殊的账号,这样理解比较好
Elven
2017-10-20 22:40:34 +08:00
@qdwang OK ~~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/399359

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX