最近一直在边考研边写区块链,然后现在一个基于 pbft 与 dpos 的区块链写完了,理论上可以运行,但是还没来得及测试。不过现在有一个新的问题摆在了我的面前,智能合约到底是怎么实现的呢?我知道当满足某种条件时,从外界触发可以使合约得到执行。但是这一一切的一切究竟是怎么实现的呢?忧伤,背作文都不开心了😔😔😔
1
czheo Oct 20, 2017
你需要定义一套 opcode,然后实现一个 deterministic 的 virtual machine。
可以参考比特币: https://en.bitcoin.it/wiki/Script 以及以太坊论文的 22 页: http://gavwood.com/paper.pdf |
3
czheo Oct 20, 2017
当生成一个 block 的时候,block 里面的所有 script 被执行。
|
5
KgM4gLtF0shViDH3 Oct 20, 2017 via Android
请问有你是通过什么途径学习的呢,有相关的书吗。
|
6
KgM4gLtF0shViDH3 Oct 20, 2017 via Android
比较靠谱的工程化的书。
|
8
czheo Oct 20, 2017
@bestkayle 普林斯顿这套教程是技术上我见过讲的最清楚的。http://bitcoinbook.cs.princeton.edu/
|
9
Elven OP @czheo 我可以这么理解咩~当合约发送到网络后,被节点打包并广播到网络,在广播前程序便执行,然后得到一个状态,如果需要定时的话就像启动一个定时器(。・ω・。)唔,如果是要重复执行怎么办呢~比如说资产发行时,程序不能只执行一次呀╮(╯▽╰)╭
|
12
czheo Oct 20, 2017 可以这么理解。
重复执行,在比特币里没有对应的。在以太坊里,其实有两种地址,一种是给人用的,一种是给程序用的(存有代码)。你给第二种地址多次发 txn,相当于执行了那个程序里的代码。具体看这里: http://ethdocs.org/en/latest/contracts-and-transactions/account-types-gas-and-transactions.html |
14
czheo Oct 20, 2017 有一点:应该不是广播前程序被执行,我的理解是需要 block 生成出来( mined )之后才被执行,而且如果分叉的话可能要维护多个状态。
|
15
qdwang Oct 20, 2017 via iPhone
@Elven 你理解错了。
1. 所有矿工接收执行合约的请求 2. 挖出矿的矿工执行所有刚才收的请求 3. 把结果广播出去,大家都执行一次,来验证 你要做的精准定时是很难实现的。一般设置时间阈值然后判断的方式比较多。 |
17
qdwang Oct 20, 2017 via iPhone 另外智能合约不一定要内建虚拟机自创语言。用现有语言和解释器或虚拟机也可以。自创语言,是为了安全可控并且可计算消耗。
|
19
qdwang Oct 20, 2017 via iPhone @Elven 合约可以在任意位置,就像 5 年前开了个比特币账号,存了 1 个比特币。五年后的今天,一样可以操作这个账号转出比特币。一个合约,就像一个特殊的账号,这样理解比较好
|
21
KgM4gLtF0shViDH3 Oct 21, 2017
@czheo #8 谢谢。
|