1
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 |
3
czheo 2017-10-20 21:02:52 +08:00
当生成一个 block 的时候,block 里面的所有 script 被执行。
|
5
KgM4gLtF0shViDH3 2017-10-20 21:20:02 +08:00 via Android
请问有你是通过什么途径学习的呢,有相关的书吗。
|
6
KgM4gLtF0shViDH3 2017-10-20 21:20:47 +08:00 via Android
比较靠谱的工程化的书。
|
8
czheo 2017-10-20 21:22:53 +08:00
@bestkayle 普林斯顿这套教程是技术上我见过讲的最清楚的。http://bitcoinbook.cs.princeton.edu/
|
9
Elven OP @czheo 我可以这么理解咩~当合约发送到网络后,被节点打包并广播到网络,在广播前程序便执行,然后得到一个状态,如果需要定时的话就像启动一个定时器(。・ω・。)唔,如果是要重复执行怎么办呢~比如说资产发行时,程序不能只执行一次呀╮(╯▽╰)╭
|
12
czheo 2017-10-20 21:34:06 +08:00 1
可以这么理解。
重复执行,在比特币里没有对应的。在以太坊里,其实有两种地址,一种是给人用的,一种是给程序用的(存有代码)。你给第二种地址多次发 txn,相当于执行了那个程序里的代码。具体看这里: http://ethdocs.org/en/latest/contracts-and-transactions/account-types-gas-and-transactions.html |
14
czheo 2017-10-20 21:51:27 +08:00 1
有一点:应该不是广播前程序被执行,我的理解是需要 block 生成出来( mined )之后才被执行,而且如果分叉的话可能要维护多个状态。
|
15
qdwang 2017-10-20 21:59:58 +08:00 via iPhone
@Elven 你理解错了。
1. 所有矿工接收执行合约的请求 2. 挖出矿的矿工执行所有刚才收的请求 3. 把结果广播出去,大家都执行一次,来验证 你要做的精准定时是很难实现的。一般设置时间阈值然后判断的方式比较多。 |
17
qdwang 2017-10-20 22:03:58 +08:00 via iPhone 1
另外智能合约不一定要内建虚拟机自创语言。用现有语言和解释器或虚拟机也可以。自创语言,是为了安全可控并且可计算消耗。
|
18
Elven OP @qdwang 嗯哼~,这么说的话我可以去找找现成的 vm😋。唔,这个合约可以是写在好几个区块之前的咩,还是一定要在当前区块呢
|
19
qdwang 2017-10-20 22:28:49 +08:00 via iPhone 1
@Elven 合约可以在任意位置,就像 5 年前开了个比特币账号,存了 1 个比特币。五年后的今天,一样可以操作这个账号转出比特币。一个合约,就像一个特殊的账号,这样理解比较好
|
21
KgM4gLtF0shViDH3 2017-10-21 10:27:40 +08:00
@czheo #8 谢谢。
|