摒弃中心化机构:白皮书批评了传统金融体系中的银行和政府机构,认为它们过于集中权力和控制货币。比特币的目标是通过去中心化来减少对第三方机构的依赖。白皮书描述了比特币的目标,即创建一种去中心化的电子现金系统,使人们能够在互联网上直接进行点对点的价值交换,无需依赖中间机构,如银行。
区块链技术:白皮书提出了区块链技术的概念,描述了一种分布式账本系统,其中交易按照时间戳记录在区块中,然后链接成一个不断增长的链。这种技术用于确保交易的透明性和安全性。
工作量证明(Proof of Work,PoW):比特币白皮书详细解释了PoW机制,它是比特币网络用来验证和添加新交易到区块链的方式。矿工通过解决数学难题来获得权利添加新区块,并获得相应的比特币奖励。
货币发行:白皮书规定了比特币的总供应量为2100万枚,并描述了比特币的发行方式,即每个区块奖励的比特币数量会逐渐减少,以控制通货膨胀。
双花问题的解决:白皮书讨论了比特币如何防止同一比特币被多次花费的问题,通过区块链的不可篡改性和网络中的共识机制来解决这个问题。
去中心化的维护:白皮书强调了比特币网络的去中心化特性,没有单一机构或个人控制网络。矿工和全节点参与者一起维护网络的安全性和稳定性。
电子现金:中本聪在白皮书中将比特币描述为一种点对点电子现金系统,允许用户直接在互联网上进行价值交换,而无需依赖中间人。
电子签名:文档提到了数字签名的重要性,以验证交易的真实性和完整性。
智能合约:以太坊白皮书首次提出了智能合约的概念,这是自动执行的计算机程序,能够根据预定的规则和条件执行操作。以太坊的目标是提供一个去中心化的平台,使开发者能够创建和部署智能合约。
以太坊虚拟机(EVM):白皮书介绍了以太坊虚拟机(EVM),它是以太坊网络上智能合约的运行环境。EVM执行智能合约的计算,并使用以太币(ETH)来支付计算成本。
去中心化应用(DApp):白皮书提出了DApp的概念,这是建立在以太坊平台上的应用程序,可以在区块链上运行,而不依赖于单一的中心化服务器。
以太币(ETH):白皮书描述了以太币(ETH)的角色,作为以太坊网络中的数字货币,不仅用于支付交易费用,还可以用作智能合约的内置货币。
区块链技术:白皮书解释了以太坊的区块链技术,包括区块结构、交易验证机制、共识算法(最初是PoW,后来计划过渡到PoS,即权益证明)等。
治理和发展:白皮书提出了以太坊的治理模式,包括如何做出协议更改和改进,以保持网络的升级和发展。
应用领域:白皮书讨论了以太坊的应用领域,包括金融服务、供应链管理、投票系统、游戏等各种潜在应用。
以太坊虚拟机(EVM):文档详细描述了以太坊虚拟机(EVM)的结构和功能。EVM是以太坊上智能合约的执行环境,它定义了指令集和状态转换规则。
状态转换和区块链结构:文档解释了以太坊中状态的概念,以及如何在区块链上记录和更新状态。它还描述了区块的结构,包括交易和状态根。
合约和交易:文档介绍了以太坊智能合约的概念,包括合约的创建、执行和销毁。它还解释了交易的类型,如消息交易和合约创建交易。
燃气(Gas):以太坊使用燃气来控制合约的执行成本和防止滥用。文档详细说明了燃气的概念,包括燃气成本和限制。
消息和消息调用:以太坊合约可以相互通信,文档解释了消息的发送和接收方式,以及合约间消息调用的执行。
椭圆曲线密码学:以太坊使用椭圆曲线密码学来处理地址和私钥。文档可能包括有关以太坊使用的密码学算法的详细信息。
以太坊协议:文档可能提供有关以太坊网络协议的信息,包括节点之间的通信、块同步和共识机制(通常是PoW,Proof of Work)的细节。
JSON-RPC接口:以太坊节点提供了JSON-RPC接口,包括有关如何使用该接口与以太坊网络进行交互的信息。
共识机制:以太坊最初使用工作量证明(PoW)达成共识,后转向权益证明(PoS)机制,被称为"Ethereum 2.0"。
以太坊2.0(Serenity):以太坊黄皮书也讨论了以太坊将如何通过引入权益证明(PoS)和分片技术提高可扩展性的转型计划。
EVM的基本架构主要包括堆栈(后进先出),内存,存储,EVM字节码,和燃料费

比较(Comparison)指令: 这些指令用于比较堆栈顶部两个元素。如,
GT和LT
当一个交易被接收并准备执行时,以太坊会初始化一个新的执行环境并加载合约的字节码。
字节码被翻译成Opcode,被逐一执行。每个Opcodes代表一种操作。
每执行一个Opcodes,都要消耗一定数量的Gas。如果Gas耗尽或者执行出错,执行就会立即停止,所有的状态改变(除了已经消耗的Gas)都会被回滚。
执行完成后,交易的结果会被记录在区块链上,包括Gas的消耗、交易日志等信息。
堆栈(Stack)指令: 这些指令直接操作EVM堆栈。包括
PUSH堆栈和从堆栈中POP。算术(Arithmetic)指令: 这些指令用于EVM中数学运算,如
ADD、SUB、MUL和DIV位运算(Bitwise)指令: 这些指令用于在位级别上操作数据。如,按位与(
AND)和按位或(OR)内存(Memory)指令: 这些指令用于操作EVM的内存。如,读取到堆栈
MLOAD和存储到内存MSTORE存储(Storage)指令: 这些指令用于操作EVM的账户存储。如,将存储中的数据读取到堆栈(
SLOAD)和将堆栈中的数据保存到存储(SSTORE)。这类指令的gas消耗比内存指令要大。控制流(Control Flow)指令: 这些指令用于EVM的控制流操作,比如跳转
JUMP和跳转目标JUMPDEST。上下文(Context)指令: 这些指令用于获取交易和区块的上下文信息。如,获取msg.sender(
CALLER)和当前可用的gas(GAS)。
SLOAD & SSTORE:100
MLOAD & MSTORE:3
SHA3:30
CALL & DELEGATECALL:100
CREATE or CREATE2:32000
JUMP(跳转)和JUMPI(条件跳转):8 & 10
ADD、SUB、MUL(加法、减法、乘法):3 & 5
BALANCE:100
POP:2
用于将各种数据类型(如整数、字符串、列表等)转换为字节数组以在以太坊上进行存储和传输。RLP的目标是在保持数据完整性的同时最小化存储空间的使用,被广泛用于以太坊中的数据结构,如区块、交易和状态树的表示,助于以太坊节点在网络上传输数据,以及在状态树中存储和更新智能合约的状态。
递归性:RLP可以嵌套包含子数据,从而允许处理复杂的数据结构,例如列表或树。
前缀表示长度:RLP使用前缀表示数据的长度,这使得解码时可以知道如何正确地拆分数据。
空数据的编码:空数据的RLP编码是一个单字节,用于表示空字符串或空列表。
非负整数的编码:正整数的RLP编码通常是它们的二进制表示形式,但删除前导零。
字符串编码:字符串的RLP编码包括前缀和实际数据。前缀的起始字节标识了数据的长度范围。
列表编码:列表的RLP编码包括前缀和包含元素的RLP编码。前缀指示了列表的总长度。
基于Merkle树的数据结构,用于高效存储状态和验证数据(包括账户和合约),有效地检索和更新以太坊的全局状态。它将状态映射到哈希值,并且具有高度持久性,每个状态更改都会创建一个新的版本,而旧版本不会被修改,使得它非常适合于以太坊的可扩展性,因为它允许在不影响全局状态树的情况下处理每个区块的交易历史。
键值对存储:MPT用于存储键值对,其中键是256位的字节序列,值可以是任何数据类型。这允许以太坊存储各种各样的数据,包括智能合约状态、交易历史等。
状态树和交易树:以太坊的全局状态(智能合约的存储状态)和每个区块的交易历史都由MPT表示。全局状态树存储所有智能合约的状态,而每个区块都有一个单独的交易树,用于存储交易的数据。
MPT的节点:MPT包含三种类型的节点:扩展节点、叶子节点和分支节点。扩展节点用于共享相同前缀的键,叶子节点存储键值对,而分支节点用于连接子树。
ECC基于特定椭圆曲线上的数学运算,用于实现以太坊中的地址生成、数字签名和密钥管理。
公钥和私钥:在ECC中,每个账户都有一对公钥和私钥。私钥用于生成数字签名,而公钥用于验证签名。
数字签名:用私钥生成数字签名。只有持有正确私钥的人才能生成有效的数字签名。
地址生成:以太坊使用公钥来生成账户地址。地址是公钥的哈希值,用于识别和交流账户。
以太坊智能合约使用同态加密来处理加密的用户数据。当用户将数据传递给合约时,数据首先由用户进行加密,然后传递给合约。智能合约可以在不解密数据的情况下执行操作,并返回加密的结果。还可用于多方计算场景,其中多个参与者可以合作进行计算,而无需共享原始数据。这在隐私敏感的应用中非常有用。
分布式网络:以太坊是一个分布式网络,它由许多节点组成,这些节点分布在全球各地。这种分布式结构使得以太坊不依赖于单一中心化实体或服务器。由于去中心化,以太坊没有单一点故障。即使某些节点出现故障或被攻击,网络仍然可以继续运行。去中心化使得以太坊网络具有抵抗审查和封锁的能力。由于没有单一实体控制网络,很难关闭或审查以太坊上的活动。
共识机制:采用一种共识机制来确保所有节点就网络状态达成一致。
开放参与:以太坊的去中心化意味着任何人都可以参与网络,创建智能合约、发起交易、成为矿工等。
数据存储和智能合约:去中心化思想也扩展到数据存储和智能合约。数据存储可以在分布式网络中进行,而智能合约允许去中心化的应用程序运行,无需信任中间人。
自治和治理:以太坊社区通过治理流程参与网络的决策,以确保网络的进化和改进是开放和去中心化的。这包括参与协议升级和决策制定。
PoW(Proof of Work):
简要描述:PoW是比特币等区块链网络中使用的共识算法。它要求矿工解决一个复杂的数学难题,以创建新的区块,并需要大量计算能力。首先解决问题的矿工获得奖励。
特点:安全性高,但能源消耗大。
PoS(Proof of Stake):
简要描述:区块创建和验证的权利由持有加密代币的人分配,权益越大,参与权益证明的机会越多。将一定数量的ETH抵押到信标链(用于管理PoS验证者和共识规则),与PoW链之间跨链通信,以实现共识状态的同步。
特点:节能,但可能导致富者愈富。
DPoS(Delegated Proof of Stake):
简要描述:DPoS引入了代表制度。代表节点由持币人投票选举产生,负责创建和验证区块,并受到持币人的监督。减少了计算和能源需求。
特点:高度可扩展,但可能存在中心化风险。
PBFT:
简要描述:PBFT侧重于处理拜占庭错误(分布式系统中的恶意错误节点),用于分布式系统。由主节点广播给副本节点后验证,然后等待其他副本节点验证,最后提交。要求超过一半节点诚实,确保交易可靠和不可逆。
特点:快速、可靠,但对节点数量和延迟要求较高。
Paxos:
简要描述:Paxos是一种分布式共识算法,用于达成一致性。它通过提出议案和多数派接受议案的方式来达成一致性,通常用于复制日志等任务。
特点:安全,但相对复杂。
Raft:
简要描述:Raft旨在提供易于理解和实现的分布式一致性。它使用领导者选举和节点日志复制来实现共识。
特点:简单易懂,适用于一些分布式系统。
多链架构:包含一个称为"Relay Chain"的主链和多个平行链。Relay Chain是整个网络的安全性中心,负责管理和桥接,共享安全性。而平行链可以独立运行,并通过Relay Chain与其他链互通,允许平行链之间通过桥接建立连接,实现跨链交互和资产传输。这种结构使得Polkadot可以同时运行多个不同的区块链。
平行链和Parathreads:平行链可以自定义自己的规则和功能,并与Relay Chain交互。Parathreads是一种更轻量级的链,可以按需租用Relay Chain上的资源,而不需要一直运行。这增加了网络的灵活性。
NPoS 共识机制:Polkadot的Relay Chain采用的是一种权益证明(Proof of Stake,PoS)共识算法,被称为"Nominated Proof-of-Stake"(NPoS)。这意味着参与网络共识的节点(验证者)需要锁定一定数量的DOT代币作为抵押,并获得验证权。
智能合约和状态机:使用WASM作为智能合约的执行环境,开发者可以使用 Substrate 构建自定义的状态机。
运行方式:
验证者选举:验证者通过 NPoS 共识机制选举产生。这些验证者负责验证平行链的交易和区块,并维护网络的安全性。
平行链的部署:平行链的开发者可以使用 Substrate 框架构建自定义的平行链,并将其部署到 Polkadot 网络上。部署后,平行链可以与其他链互操作,并共享Polkadot 安全性。
擦除式验证:Polkadot引入了一种称为"Babe"和"Grandpa"的擦除式验证机制。Babe处理区块生产,而Grandpa用于达成最终性。这两个机制增加了网络的安全性和可扩展性。
交互协议:使用一种名为"XCMP"(Cross-Chain Message Passing)的协议来实现平行链之间的互操作。这使得平行链可以安全地交换消息和数据。
治理和升级:采用了一种称为"Referendum"的治理机制,允许DOT代币持有者提出和投票支持提案。这使得网络的升级和决策可以由社区共同决定。
安全性和不可逆性:使用多数派共识机制来确保安全性,并使用不可逆性机制来确保一旦交易被确认,就不能被更改。
多链架构:Cosmos采用了一种多链架构,其中包含一个称为"Hub"的主链(也称为"区块链互联网")和多个平行链(称为"Zones")。Hub充当网络的中继器,而Zones是相对独立的区块链,它们可以自定义自己的规则和功能。
IBC 协议:Cosmos 使用 Inter-Blockchain Communication协议来实现不同区块链之间的互通和互操作。IBC允许资产和数据在不同区块链之间传输和交互,实现了跨链通信。
安全性和治理:Cosmos 使用类似于 PoS 的共识机制,其中验证者负责打包交易和维护网络的安全性,而委托人可以委托他们的代币来支持验证者。持有ATOM代币的人可以投票支持提案,包括协议升级、参数更改等。
Tendermint共识引擎:Cosmos使用Tendermint共识引擎来处理交易验证和区块链同步。它通过一组验证节点来达成BFT共识。这些节点通常是通过投票选举产生的,具有一定数量的权益。共识过程分为三个主要阶段:由一个验证节点提出一个新的区块提案,包含待处理的交易,被放置在一个未确认的交易池中,按照预定的顺序进行处理。其他验证节点收到提案后,对提案进行预投票,表示他们认可这个区块。当超过2/3的验证节点都预投票后,提案被视为合法。一旦一个区块的提案得到足够的预投票,节点就会提交这个区块并添加到区块链中。
变量声明为constant immutable 使用位运算符
函数参数声明为calldata memory
循环使用unchecked避免溢出检查
uint256占满32字节插槽最节省gas,变量打包(在一个插槽中放置多个变量)
revert配合error最省gas,同时可以携带变量。require的gas随字符串长度增加
运算中使用局部变量
创造子合约时 clone > new > create2
增加使用
i = i +n,递增使用++i重入保护中,使用Uint12 > Uint01 > Bool,0到非0转换会消耗大量gas
"<" 和 ">"比"≤" 和 "≥"更加高效,EVM没有针对"≤" 和 "≥"的OPCODE
通过优化函数名,增加calldata中方法id的0字节的个数来节省gas(0字节消耗 4 gas,非0字节消耗 16 gas)
合约内所有函数是一个数组,调用时会先遍历,通过排序函数减少遍历复杂度
短路判断,update后delete变量或恢复初始值,创建变量时不赋值(使用初始值)
构造函数非payable,使用bytes32存字符串,使用定长数组,使用事件存储数据,mapping操作比array便宜
