什么是智能合约?

@shaoping 他用了“必需的构件”,也就是说合约中一定有资产。我认为未必。
如果“资产”用广义解释,比如我们对一篇文章投票,你认为投票权也是一种资产,那我就没什么好说的了。

不跑题。
我反对的是他用了“必需构件”而不提可信任的执行环境。说了一个事情的自然结果而不提原因,在我看来没抓住事情的本质。

他换种描述,比如:“在这些协议被开发的同时,我们获得了另一个必需的构件:可信任的执行环境。真正的、原生的数字资产得以实现并促进了智能合约的发展” 这样的,我就相当能接受

什么是智能合约?
当萨博在近二十年以前,在网络提出了智能合约理论时,实践一直严重地落后于理论。一直没有如何将这个理念转变现实的清晰路径。

现在,技术已经赶上萨博富有远见的头脑,智能合约开始变得可行。在这二十年中发生了什么事情呢?

简而言之,萨博在他的智能合约定义中建立的协议,已经被进一步开发。它们已经以比特币协议的形式出现,或者更加一般地说,这些协议能够实现中本聪共识(Nakamoto consensus)。

在这些协议被开发的同时,我们获得了另一个必需的构件:第一种真正的、原生的数字资产,即作为货币的比特币。没有这种资产,智能合约也将不可行,因为金融部门在过去的几十年中,一直对任何创新抱有极端的敌意。

这段话是错的,智能合约变得可行是因为我们有了合约方共同认可的可信的自动执行环境:区块链。而不是因为出现了原生的数字资产的缘故。
以太坊上的智能合约可以完全和货币没有任何关系!

关于共识机制的一些想法

@rink1969 第二个层次是拜占庭故障。不过最长链的原则,即便没有拜占庭节点,也有问题,作为单个节点来讲,其实很难知道自己是否在最长链上,也就没法确认某笔交易被确认了。

如何搭建一个测试网络并运行一个简单的 dapp

你先得描述不对的情况,我才能分析原因。

另外bootnodes请替换成ethfans的这个长期专用节点enode://91922b12115c067005c574844c6bbdb114eb262f90b6355cec89e13b483c3e4669c6d63ec66b6e3ca7a3a462d28edb3c659e9fa05ed4c7234524e582a8816743@120.27.164.92:13333

引介 | OneThousand - 去中心化的抽奖

How do we decide who wins?
The winner is decided using three key elements:
1. A server secret of which the hash is revealed beforehand. We have 24 hours upon the termination of a round to reveal the server secret; otherwise everyone gets their money back.
2. A client secret which is updated each time a transaction is sent within a round. Once the round ends, this is set in stone.
3. The blockhash of the block following the round. This is also set in stone upon the end of a round.
We can't cheat you because we can't easily modify (2 and 3). You can't cheat us because you don't know (1). It's to our advantage to pay you to keep the contract running.

  //Update client seed
  clientSeed = sha3(clientSeed, msg.sender, msg.value);

庄家只要参与最后一笔投注,就可以指定client secret,所以上面说的2很难修改不成立

  //Fetch the non-server sources of entropy
  bytes32 serverClientHash = sha3(curSecret, lastClientSeed);

  //Calculate winner and pay out
  uint winnerIdx =  lastProcessed + uint(serverClientHash ^ lastBlockHash) % TICKETSPERROUND;

所以庄家可以提前知道serverClientHash。
庄家如果和矿池合作,就可以大幅提高胜率!

randao就快好了, be patient :D