使用P2P的信任网络来防止double spending问题.
每个交易都需要owner使用私钥对前一个TX和下一个拥有者的公钥进行签名,保证owner是有钱并且不会被仿冒
对每笔交易都打上一个时间点,并且公布到p2p网络上,经过大家检验.通过打上timestamp并且公布来证明这个交发生过(跟看刊登到报纸上类似).并且形成一条链来反复验证加强.
对于PoW信任网络,矿工不断增加block中的nonce值(而nonce值又在block里面,所以每增加nonce的时候整个block的哈希值也会发生改变),直到整个block的SHA-256哈希值小于一个固定数值时才成功(以d个连续的0开头).PoW是 one-CPU-one-vote 的,而不用 one-IP-one-vote 的原因是防止伪造IP来进行攻击.
对于成功完成的人,也会给予比特币激励(incentive)
如果每笔交易都要遍历整个区块链来看owner是否有钱,那么这个过程将会十分耗时.实际上用户只需要保存主区块链的头部,然后通过头部来找到连接着UTXO的Merkle branch.(根据什么来搜索?TimeStamp?)
从技术角度来说,比特币账本可以被认为是一个状态转换系统.比特币系统的“状态”是所有已经被挖出的、没有花费的比特币(技术上称为“未花费的交易输出,unspent transaction outputs 或UTXO”)的集合。转移就是Transaction
Merkle Tree
- 域名币(namecoin),去中心化的名称注册数据库.防止重复注册.
- 彩色币(Colored coins),在比特币区块链上创建自己的数字货币.
- 元币(Metacoins),在比特币区块链上创建新的协议,用比特币的交易保存元币的交易.
比特币脚本存在一些严重限制:
- 缺少图灵完备性
- 价值盲(Value-blindness)
UTXO脚本并不能为账户的取款额度提供精细的控制.
- 缺少状态
UTXO只能是已花费或者未花费状态,没有给任何其他内部状态的多阶段合约留出生存空间
- 区块链盲(Blockchain-blindness)
UTXO看不到区块链数据,例如随机数和上一个区块的哈希,剥夺了脚本语言基于随机性的潜在价值
以太坊的目的是基于脚本、竞争币和链上元协议(on-chain meta-protocol)概念进行整合和提高,使得开发者能够创建任意的基于共识的、可扩展的、标准化的、特性完备的、易于开发的和协同的应用。
在以太坊系统中,状态是由被称为“账户”(每个账户由一个20字节的地址)的对象和在两个账户之间转移价值和信息的状态转换构成的。包括四个部分:
- 随机数,用于确定每笔交易只能被处理一次的计数器
- 账户目前的以太币余额
- 账户的合约代码,如果有的话
- 账户的存储(默认为空)
一般而言,以太坊有两种类型的账户:外部所有的账户(由私钥控制的)和合约账户(由合约代码控制)
以太坊的消息在某种程度上类似于比特币的交易,但是两者之间存在三点重要的不同。第一,以太坊的消息可以由外部实体或者合约创建,然而比特币的交易只能从外部创建。第二,以太坊消息可以选择包含数据。第三,如果以太坊消息的接受者是合约账户,可以选择进行回应,这意味着以太坊消息也包含函数概念。
以太坊合约的代码使用低级的基于堆栈的字节码的语言写成的,被称为“以太坊虚拟机代码”或者“EVM代码”。操作可以访问三种存储数据的空间:
- 堆栈,一种后进先出的数据存储,32字节的数值可以入栈,出栈。
- 内存,可无限扩展的字节队列。
- 合约的长期存储,一个秘钥/数值的存储,其中秘钥和数值都是32字节大小,与计算结束即重置的堆栈和内存不同,存储内容将长期保持。
EVM代码的正式执行模型令人惊讶地简单。当以太坊虚拟机运行时,它的完整的计算状态可以由元组 (block_state, transaction, message, code, memory, stack, pc, gas) 来定义,这里block_state是包含所有账户余额和存储的全局状态。
虽然有一些不同,但以太坊的区块链在很多方面类似于比特币区块链。它们的区块链架构的不同在于,以太坊区块不仅包含交易记录和最近的状态,还包含区块序号和难度值。
一般来所,以太坊之上有三种应用:
- 金融应用,为用户提供更强大的用他们的钱管理和参与合约的方法。包括子货币,金融衍生品,对冲合约,储蓄钱包,遗嘱,甚至一些种类的全面的雇佣合约.
- 半金融应用,这里有钱的存在但也有很重的非金钱的方面,一个完美的例子是为解决计算问题而设的自我强制悬赏。
- 在线投票和去中心化治理这样的完全的非金融应用。
EOS.IO 软件引入一种新的区块链架构设计,它使得去中心化的应用可以横向和纵向的扩展。 这通过构建一个仿操作系统的方式来实现,在它之上可以构建应用程序。该软件提供帐户、身份验证、数据库、异步通信和跨越数百个 CPU 内核或集群的应用程序调度。由此产生的技术是一种区块链架构,它可以扩展至每秒处理百万级交易,消除用户的手续费,并且允许快速和轻松的部署去中心化的应用。
- 支持成庞大的用户群体
- 免费使用
- 简单升级和bug修复
- 低时延
- 时序性能
- 并发性
EOS.IO软件使用唯一能够满足区块链之上的应用性能需求的去中心化共识算法,委托股权证明(Delegated Proof os Stake, DPOS).EOS.IO 软件使得区块准确的每 3 秒生成一个并且在任何时间点都只有一个被授权的生产者来生成区块。 如果一个区块在规定时间之内未被生产出来则这一区块将被跳过。 当一个或多个区块被跳过发生时,在区块链中会有一个 6 秒及以上的间隔。
在 EOS.IO 软件中,区块通过 21 名生产者轮流产生。 在每一轮的开始时,21 个唯一的区块生产者被选出。 获票最高的前 20 名自动在没轮被选中,剩余的一个生产者通过得票比例选出。 被选中的生产者通过从区块取到的时间作为伪随机数来打乱其顺序。 打乱顺序是为确保这些生产者与其他生产者保持均衡的连通性。
DPOS算法详解:https://blog.csdn.net/yinanmo5569/article/details/80461013
EOS.IO 软件允许所有的帐户使用一个唯一的人类可读的名称来索引,长度在 2 到 32 个字符之间。 这个名称由帐户创建者自己选择。
每个帐户可以发送结构化的消息给其他的帐户,并且可以定义脚本来处理他们接收到的消息。 EOS.IO 软件给每个帐户提供了只有自己的消息处理脚本能访问的私有数据库。 消息处理脚本同样可以给其他帐户发送消息。 消息和自动化的消息处理的结合决定了 EOS.IO 如何定义智能合约的。
最小化通信延迟.延迟是一个帐户从发出一条消息给另一个帐户,直到收到回应的这段时间。 我们的目标是在一个单独的区块中包含两个帐户交换消息的来去信息,而不用在每条消息间等待 3 秒钟。 为了做到这一点,EOS.IO 软件将每个区块划分为循环。 每个循环划分为线程,每个线程包含了交易的一个列表。 每一个交易包含了待发送的消息集合。 这个结构可以被可视化为一个树,其中交互层彼此并行,各自被顺序的执行。
区块 循环 (顺序) 线程 (并行) 交易 (顺序) 消息 (顺序) 接受者和被通知帐户 (并行)
带宽和计算有两部分,瞬时使用和长期使用.
区块生产者对外发布她们可用的带宽,计算能力和状态。 EOS.IO 允许帐户按比例消耗一个 3 天对赌合约中的可用资源。 举个例子,如果一个基于 EOS.IO 的区块链启动了,一个帐户持有所有 token 发行总量的 1%,那么帐号就具有使用 1% 状态存储空间的能力。
不强制服务使用者付费,而将付费转移到了接收方.
- Transctions & Scripts
每个交易包含多个inputs和outputs.利用加密算法来签名(“pay-to-pub-key-hash”)和验证签名 - Consensus and Mining
bitcoin设计的最成功的部分,防止double-spending,bitcoin使用的Na_kamoto consensus_.通常miner会在mining pools(矿池)合作.通过池内利益分配,来减少浮动性. - Peer-to-Peer Communication Network
为了防止过多的分支,保证最长链能够得到即时广播,采用的而大概每10分钟创建一个区块.节点相互连接的时候有8个outgoing connections,并且能够接受最多125个incoming connections.
- 交易验证的稳定性
仍需研究,目前的验证算法是由中本村设计的canonicalism - 共识算法的稳定性
- 简化交易验证(SPV)安全性
- 密钥管理
保存在设备上,分开管理,密码保护钱包,离线保存,第三方等.
- 自我升级
软分支(Soft forks),硬分支(Hard forks),中继策略升级(Relay policy updates), - 替代币
新的创世区块,Forking比特币等
- 参数修改
区块间隙时间(太短容易造成很多冗余区块,太长交易得不到及时验证),区块大小,货币政策 - 其他计算问题
- 虚拟挖矿和PoS(Proof-of-Stake)
攻击者更难发起攻击(不可能占有一半的资产),减少资源(算力)消耗 - 指定权威机构
如果能够指定一些权威机构,验证只需要在这些权威机构中进行的话,那么共识过程将会快很多.
未细看
- 使用比特币去中介化(Desintermediation)
原子性,抵押,可审性 - 使用比特币用作数据存储
Secure timestamping,可扩展成定制货币和金融工具(Colored Coins),定义完全不同的交易语法来在区块链上写别的数据 - 扩展比特币交易方式