关于区域链的应用;
namecoin:一个很好的名字注册数据库
colorcoin:作为一个协议允许人们定义自己的数据货币,或者作为一个单元,代币在区域链上
metacoin:在比特币之上的一个协议,用比特币交易来存储附属币的交易但是有不同的交易转换器
建立一个共识协议有两种方法:建立一个独立的网络或者在比特币协议上工作。前者理论上很成功但是实施有很大的困难,后者(metacoin)—不能继承比特币的简化验证功能。
脚本语言
可以定义一个UTXO,一个交易来花费utxo时必须提供脚本语言里描述的数据。
基本的公钥所有权机制也是通过脚本的:把一个椭圆双曲线作为签名,
证明这个交易和属于这个UTXO的地址,如果验证正确就返回否则返回0
限制:
缺少图灵完整性:主要是不支持循环。在验证的时候很有可能无限循环,即使可以模仿解决但是很没效率
价值的不可见:没有办法让utxo脚本提供细粒度来控制可收回金额。也就是每个UTXO的金额是不可见的
缺少状态:UTXO只有已花费和没有花出,脚本语言不能提供其他的状态,这很难完成多级选择协议,也就是灵活性受限制
我们看到上面的三种方法:建立一个新的blockchain,在比特币上使用脚本,和在比特币上面建立一个比特币元协议。
建立一个新的blockchain允许建立一个特征集无限的自由,但主要问题在开发的时间成本,引导和保障。
使用脚本是很容易实现和标准化,但在它的能力是非常有限的。
和元协议,虽然容易但是遭受故障的可扩展性。
以太坊,我们打算建立一个替代的框架,提供了易于开发更大的收益以及更轻客户端的性能,同时允许应用程序共享的经济环境和blockchain安全
以太坊
为了提供一个可以选择的协议,这个协议建立分散应用,被证明对一大类分散应用有价值的交易不同的设置。
以太坊ACCOUNT:以太坊的状态由账户组成,每个账户有20b地址和一个直接在两个账户之间转换价值和信息的状态交易,
一个账户包含四个成分:1当前值nonce,一个计数器用来确保每笔交易只能处理一次。2帐户的帐户余额ether balance3账户合同代码contract code
4帐户的存储storage(默认情况下为空
有两种类型的帐户:外部拥有的帐户,由私人密钥控制,和合同帐户,由他们的合同代码控制。外部拥有帐户没有代码,和一个可以发送信息从外部所有的帐户创建和签订交易合同;在一个账户,每一次的合同帐户接收消息的代码激活,允许它读取和写入的内部存储和发送其他消息或反过来创建合同。\
MESSAGE AND TRANSACTIONS
Transactions包括信息的接收方,发送者的签名,交易的金额,一个可选数据段,计算次数的最大值startgas(避免意外。无限循环或者其他的资源浪费),交易一步的费用gasprice
Messages:合同有发送消息给另一个合同的能力。信息的发送方(隐含)接收方,转换的数值,可选数据段,计算次数的最大值
消息和交易很像,只是交易是由合同产生的并且不是一个外部执行者。消息的产生是合同执行环境下。
有两种类型的帐户:外部拥有的帐户,由私人密钥控制,和合同帐户,由他们的合同代码控制。外部拥有帐户没有代码,和一个可以发送信息从外部所有的帐户创建和签订交易合同;在一个账户,每一次的合同帐户接收消息的代码激活,允许它读取和写入的内部存储和发送其他消息或反过来创建合同。
state transaction function
The Ethereum state transition function, APPLY(S,TX) -> S‘
can be defined as follows:
- Check if the transaction is well-formed (ie. has the right number of values), the signature is valid, and the nonce matches the nonce in the sender‘s account. If not, return an error.
- Calculate the transaction fee as
STARTGAS * GASPRICE
, and determine the sending address from the signature. Subtract the fee from the sender‘s account balance and increment the sender‘s nonce. If there is not enough balance to spend, return an error. - Initialize
GAS = STARTGAS
, and take off a certain quantity of gas per byte to pay for the bytes in the transaction.每个字节缴费 - Transfer the transaction value from the sender‘s account to the receiving account. If the receiving account does not yet exist, create it. If the receiving account is a contract, run the contract‘s code either to completion or until the execution runs out of gas.(接收方不存在或者是一个合同)
- If the value transfer failed because the sender did not have enough money, or the code execution ran out of gas, revert all state changes except the payment of the fees, and add the fees to the miner‘s account.
- Otherwise, refund the fees for all remaining gas to the sender, and send the fees paid for gas consumed to the miner.