
以太坊
讲解一些以太坊设计原理的文章
跨链技术践行者
区块链研究员
展开
-
以太坊合约常见问题
常见问题这份清单最早是由fivedogit收集整理的。基本问题可以在特定的区块上进行操作吗?(比如发布一个合约或执行一笔交易)鉴于交易数据的写入是由矿工决定的而不是由提交者决定的,谁也无法保证交易一定会发生在下一个或未来某一个特定的区块上。这个结论适用于函数调用/交易以及合约的创建。如果你希望你的合约被定时调用,可以使用:alarm clock。什么是交易的“有效载荷(...原创 2019-05-08 13:23:50 · 13095 阅读 · 1 评论 -
以太坊合约Bug列表
已知bug列表在下面,你可以找到一个 JSON 格式的列表,上面列出了 Solidity 编译器上一些已知的安全相关的 bug。 该文件被放置于Github 仓库。 该列表可以追溯到 0.3.0 版本,只在此版本之前存在的 bug 没有被列入。这里,还有另外一个bugs_by_version.json文件。 该文件可用于查询特定的某个编译器版本会受哪些 bug 影响。合约的源文...原创 2019-05-08 13:21:35 · 7679 阅读 · 0 评论 -
以太坊合约通用方式
通用模式从合约中提款在某个操作之后发送资金的推荐方式是使用取回(withdrawal)模式。尽管在某个操作之后,最直接地发送以太币方法是一个send调用, 但这并不推荐;因为这会引入一个潜在的安全风险。你可能需要参考安全考量来获取更多信息。这里是一个在合约中使用取回模式的示例,它目标是通过向合约发送最多的钱来成为“最富有的人”, 其灵感来自King of the Ether。...原创 2019-05-08 13:20:09 · 8164 阅读 · 0 评论 -
iterator - 在&vec与vec.iter()之间进行反向迭代
编程风格指南概述本指南旨在约定 solidity 代码的编码规范。本指南是不断变化演进的,旧的、过时的编码规范会被淘汰, 而新的、有用的规范会被添加进来。许多项目会实施他们自己的编码风格指南。如遇冲突,应优先使用具体项目的风格指南。本风格指南中的结构和许多建议是取自 python 的pep8 style guide。本指南并不是以指导正确或最佳的 solidity 编码...原创 2019-05-08 13:18:50 · 12085 阅读 · 0 评论 -
以太坊虚拟机
YulYul (先前被也被称为 JULIA 或 IULIA)是一种可以编译到各种不同后端的中间语言(以太坊虚拟机Ethereum Virtual Machine(EVM)1.0,以太坊虚拟机Ethereum Virtual Machine(EVM)1.5,而 eWASM 也在计划中)。 正因为如此,它被设计成为这三种平台的可用的共同标准。 它已经可以用于 Solidity 内部的“内联汇...原创 2019-05-08 13:17:11 · 11565 阅读 · 0 评论 -
以太坊虚拟机固定长度数据类型的表示方法
pplication Binary Interface(ABI)说明基本设计在以太坊Ethereum生态系统中,应用二进制接口Application Binary Interface(ABI)是从区块链外部与合约进行交互以及合约与合约间进行交互的一种标准方式。 数据会根据其类型按照这份手册中说明的方法进行编码。这种编码并不是可以自描述的,而是需要一种特定的概要(schema...原创 2019-05-08 13:15:44 · 8609 阅读 · 0 评论 -
以太坊虚拟机动态数据类型的表示方法
合约的元数据Solidity编译器自动生成JSON文件,即合约的元数据,其中包含了当前合约的相关信息。 它可以用于查询编译器版本,所使用的源代码,应用二进制接口Application Binary Interface(ABI)和以太坊标准说明格式Ethereum Nature Specification Format(natspec)文档,以便更安全地与合约进行交互并验证其源代码。编...原创 2019-05-08 13:14:04 · 10875 阅读 · 0 评论 -
以太坊p2p原理简单介绍
使用编译器使用命令行编译器注解这一节并不适用于solcjssolc是 Solidity 源码库的构建目标之一,它是 Solidity 的命令行编译器。你可使用solc--help命令来查看它的所有选项的解释。该编译器可以生成各种输出,范围从简单的二进制文件、汇编文件到用于估计“gas”使用情况的抽象语法树(解析树)。如果你只想编译一个文件,你可以运行solc--bin...原创 2019-05-08 13:12:06 · 8723 阅读 · 0 评论 -
以太坊虚拟机原理解析
安全考量尽管在通常情况下编写一个按照预期运行的软件很简单, 但想要确保没有人能够以出乎意料的方式使用它就困难多了。在 Solidity 中,这一点尤为重要,因为智能合约可以用来处理通证,甚至有可能是更有价值的东西。 除此之外,智能合约的每一次执行都是公开的,而且源代码也通常是容易获得的。当然,你总是需要考虑有多大的风险: 你可以将智能合约与公开的(当然也对恶意用户开放)、甚至是开源的网...原创 2019-05-08 13:09:34 · 8488 阅读 · 0 评论 -
以太坊2.0各个阶段简单介绍
注释描述规范Solidity contracts can use a special form of comments to provide rich documentation for functions, return variables and more. This special form is named the Ethereum Natural Language Specifica...原创 2019-05-08 13:08:18 · 12257 阅读 · 0 评论 -
以太坊源码分析参考资料
Solidity v0.5.0 重大更新这部分Solidity v0.5.0 版本一写主要的不兼容的更新,了解更新背后的原因,以及影响了那些代码,可以查看更新日志.注解Contracts compiled with Solidity v0.5.0 can still interface with contracts and even libraries compiled with o...原创 2019-05-08 13:05:39 · 14420 阅读 · 0 评论 -
以太坊合约语言开发简单介绍
Solidity汇编Solidity 定义了一种汇编语言,在没有 Solidity 的情况下也可以使用。这种汇编语言也可以嵌入到 Solidity 源代码中当作“内联汇编”使用。 我们从如何使用内联汇编开始,介绍它如何区别于独立汇编语言,然后详细讲述这种汇编语言。内联汇编为了实现更细粒度的控制,尤其是为了通过编写库来增强语言,可以利用接近虚拟机的语言将内联汇编与 Solidity 语句...原创 2019-05-08 13:02:54 · 12889 阅读 · 0 评论 -
以太坊合约介绍
合约Solidity 合约类似于面向对象语言中的类。合约中有用于数据持久化的状态变量,和可以修改状态变量的函数。 调用另一个合约实例的函数时,会执行一个 EVM 函数调用,这个操作会切换执行时的上下文,这样,前一个合约的状态变量就不能访问了。创建合约可以通过以太坊交易“从外部”或从 Solidity 合约内部创建合约。一些集成开发环境,例如Remix, 通过使用一些用户界面元素使...原创 2019-05-08 13:01:14 · 13543 阅读 · 1 评论 -
以太坊合约使用流程
表达式和控制结构输入参数和输出参数与 Javascript 一样,函数可能需要参数作为输入; 而与 Javascript 和 C 不同的是,它们可能返回任意数量的参数作为输出。输入参数输入参数的声明方式与变量相同。但是有一个例外,未使用的参数可以省略参数名。 例如,如果我们希望合约接受有两个整数形参的函数的外部调用,我们会像下面这样写pragma solidity ^0.4....原创 2019-05-08 12:59:50 · 11161 阅读 · 1 评论 -
以太坊StateDB原理和流程说明
单位和全局变量以太币Ether单位以太币Ether单位之间的换算就是在数字后边加上wei、finney、szabo或ether来实现的,如果后面没有单位,缺省为 Wei。例如2ether==2000finney的逻辑判断值为true。时间单位秒是缺省时间单位,在时间单位之间,数字后面带有seconds、minutes、hours、days、w...转载 2019-05-08 12:58:05 · 13278 阅读 · 0 评论 -
以太坊RLP编码详解
类型Solidity 是一种静态类型语言,这意味着每个变量(状态变量和局部变量)都需要在编译时指定变量的类型。Solidity 提供了几种基本类型,并且基本类型可以用来组合出复杂类型。除此之外,类型之间可以在包含运算符号的表达式中进行交互。 关于各种运算符号,可以参考操作符优先级。“undefined”或“null”值的概念在Solidity中不存在,但是新声明的变量总是有一个...转载 2019-05-08 12:56:32 · 9259 阅读 · 1 评论 -
以太坊 2.0:如何实现最终性
合约结构在 Solidity 语言中,合约类似于其他面向对象编程语言中的**类**。每个合约中可以包含状态变量、函数、函数、事件 Event、结构体、 和枚举类型的声明,且合约可以从其他合约继承。还有一些特殊的合约,如:库和接口.专门的合约章节会比本节包含更多的内容,本节用于帮助我们合约包含哪些内容,做一个简单的入门。状态变量状态变量是永久地存储在合...原创 2019-05-08 12:54:59 · 8479 阅读 · 0 评论 -
以太坊目前所使用的共识算法介绍
Solidity 源文件结构源文件中可以包含任意多个合约定义、导入源文件指令和版本标识指令。Pragmas关键字pragma版本标识指令,用来启用某些编译器检查, 版本标识pragma指令通常只对本文件有效,所以我们需要把这个版本标识pragma添加到项目中所有的源文件。 如果使用了import 导入其他的文件,标识pragma并不会从被导入的文件,加入到...原创 2019-05-08 12:53:30 · 12821 阅读 · 0 评论 -
以太坊GHOST协议简单介绍
深入理解Solidity本章将深入介绍 Solidity 语言特性的所有细节。如果你发现缺少了什么,请在Gitter上联系我们; 或者在英文 Github中文版翻译地址GitHub上创建 pull request 。Solidity 源文件结构 Pragmas 版本标识 导入其他源文件 注释 合约结构 状态变量 函数 函数修饰器modifie...原创 2019-05-08 12:51:58 · 12140 阅读 · 0 评论 -
微支付通道的设计
微支付通道合约本文其实和很多线下扩容的思路很类似,有兴趣可延伸阅读。来看看如何在以太坊上实现一个支付通道。 通过使用密码签名技术可以在相同的参与者之间安全的、重复的、免手续费的转移以太币。学习这个示例子,我们需要先了解签名和验证签名以及如何建立支付通道。创建及验证签名想象一下 Alice 想发送一些以太币给 Bob, 即 Alice 发送者,而 Bob 是接收者。Ali...原创 2019-05-08 11:48:55 · 8553 阅读 · 0 评论 -
以太坊MPT树的HP(Hex-Prefix)编码
投票合约以下的合约有一些复杂,但展示了很多Solidity的语言特性。它实现了一个投票合约。 当然,电子投票的主要问题是如何将投票权分配给正确的人员以及如何防止被操纵。 我们不会在这里解决所有的问题,但至少我们会展示如何进行委托投票,同时,计票又是自动和完全透明的。我们的想法是为每个(投票)表决创建一份合约,为每个选项提供简称。 然后作为合约的创造者——即主席,将给予每个独立的地址以投...原创 2019-05-08 11:43:30 · 8499 阅读 · 0 评论 -
以太坊合投票合约
根据例子学习Solidity本章将为你提介绍截个例子,让我们理解 Solidity 如何编写智能合约。 本章有5个合约例子,由浅如深。投票合约 可能的优化 秘密竞价(盲拍)合约 简单的公开拍卖 秘密竞拍(盲拍) 安全的远程购买合约 微支付通道合约 创建及验证签名 编写一个简单的支付通道 库合约使用...原创 2019-05-08 11:40:50 · 11105 阅读 · 0 评论 -
以太坊虚拟机ABI编码外部方法调用的方式
安装Solidity编译器版本Solidity的版本遵循语义化版本原则,作为发布版本的补充,每日开发构建(nightly development builds)也是可用的。这个每日开发构建不保证能正常工作,尽管尽了最大的努力,但仍可能包含未记录的和/或重大的改动。我们推荐使用最新的发布版本。下面的包安装程序将使用最新发布版本。Remix我们推荐使用 Remix 来开发简单合约...原创 2019-05-08 11:39:03 · 12637 阅读 · 0 评论 -
以太坊虚拟学习
入门智能合约简单的智能合约让我们先看一下最基本的例子。现在就算你都不理解也不要紧,后面我们会有更深入的讲解。存储合约(把一个数据保存到链上)pragma solidity >=0.4.0 <0.7.0;contract SimpleStorage { uint storedData; function set(uint x) public { ...原创 2019-05-08 11:37:40 · 11638 阅读 · 0 评论 -
LLVM:Rust、Clang等语言的强大支持以及编译原理和过程
本文档根据当前最新官方版本v0.5.8进行翻译,本翻译最初HiBlock社区发起,后经过深入浅出区块链社区社区成员根据最新版本补充翻译。本中文文档大部分情况下,英中直译,但有时为了更好的理解也会使用意译,如需转载请联系Tiny熊(微信:xlbxiong).Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言。这门语言受到了 C++,Python 和 Javas...原创 2019-05-08 11:35:43 · 13479 阅读 · 1 评论 -
以太坊:术语
Ethereum 分为三部分:开发介绍篇 SDK文档篇 以太坊术语篇区块链技术相关表包含了常见的区块链术语(概念)及其解释,及进一步阅读参考文章,以加深理解。 方便大家阅读博客或网络上其他文章时做快速索引,比特币相关术语参考比特币篇以太坊一个基于区块链的去中心化应用平台。阅读以太坊开发入门指南了解更多以太币(Ether)以太币是以太坊中货币的名称。以太币是用来支付交易和...原创 2019-05-08 10:00:10 · 11578 阅读 · 1 评论 -
以太坊扩容技术:Layer2
扩容技术设计的项目非常多,本文分二个部分:Part1热门扩容项目 Part2其他扩容项目本文是第二部分。1.1. 扩容技术相关项目状态通道 State Channels相关项目有:Counterfactual Celer Network Liquidity Network Lighting Network Raiden Network Perun Magmo...原创 2019-05-08 09:59:20 · 11661 阅读 · 0 评论 -
区块链扩容技术 : Layer2
以太坊扩容技术汇总,目前扩容技术主要有:分片(Sharding)和 分层(链下扩容技术) 链下扩容技术主要有:状态通道( State Channels) 、侧链、链下计算。通过这篇文章(英文版)可以对扩容有一个初步了解扩容技术设计的项目非常多,本文分二个部分:Part1热门扩容项目 Part2其他扩容项目在比特币闪电网络也属于扩容技术,在比特币分类下有单独介绍。1.1....原创 2019-05-08 09:58:01 · 11814 阅读 · 0 评论 -
以太坊:开发文档篇
Ethereum 分为三部分:开发介绍篇 SDK文档篇 以太坊术语篇以太坊官方文档以太坊官网 以太坊官方博客 以太坊 GitHub 以太坊官方 Wiki 以太坊白皮书-中文版 以太坊黄皮书-英文 以太坊黄皮书-中文 以太坊 Homestead 文档 - 官方 以太坊 Homestead 文档 - 中文以太坊客户端Geth 官网 Geth 文档 Geth Gi...原创 2019-05-08 09:56:39 · 12492 阅读 · 0 评论 -
简析区块链链下扩容:状态通道、TrueBit、Plasma
我们正处于区块链 2.0 转化的时代,目标是大规模的商用。传统的区块链技术,如比特币和以太坊,在性能上面已经显得力不从心,本文就来聊一聊区块链链下扩容技术。比特币和以太坊有多快?作为史上最慢的分布式数据库,比特币和以太坊的 TPS(每秒交易数)离商用有多远呢?有图为证:说好的区块链 TPS,怎么只画了 VISA 和支付宝呢?不是我没画,只是比特币的 7 笔交易,以太坊的十来笔交...原创 2019-05-06 09:21:30 · 12148 阅读 · 0 评论 -
浅谈区块链扩容 之 Layer2 扩展
摘要:以太坊扩容问题一直被大家所关注,这篇文章来谈一谈扩容问题的一个重要方向:Layer2 扩展(链下扩容)。前言:自区块链技术诞生以来,对其 “性能” 的诟病就从来没有停止过。虽然从技术上说,一个基于分布式对等网络架构的系统,与成熟的中心化技术相比,其 “性能” 方面有着天然的劣势,但业内人士对区块链 “扩容” 的研究和努力也从没有停止过。近两年,所谓的 “区块链 Layer2 扩展”...原创 2019-05-06 09:20:29 · 12091 阅读 · 0 评论 -
深入理解 Plasma(四)Plasma Cash
这一系列文章将围绕以太坊的二层扩容框架 Plasma,介绍其基本运行原理,具体操作细节,安全性讨论以及未来研究方向等。本篇文章主要介绍在 Plasma 框架下的项目 Plasma Cash。在上一篇: Plasma MVP文章中我们已经理解了 Plasma 的最小实现 Plasma MVP 如何使用 UTXO 模型实现 Plasma 链下扩容的核心思想。但由于 Plasma MVP 本身...原创 2019-05-06 09:19:25 · 7470 阅读 · 0 评论 -
深入理解 Plasma(三)Plasma MVP(验证实现)
这一系列文章将围绕以太坊的二层扩容框架 Plasma,介绍其基本运行原理,具体操作细节,安全性讨论以及未来研究方向等。本篇文章主要介绍 Plasma 的一个最小实现 Plasma MVP(Minima Viable Plasma)。在上一篇文章中我们已经理解了 Plasma 中的一些关键操作,但是 Plasma 是一套框架,如果脱离了实际的应用,仍然很难彻底理解它。因此本篇将详细介绍 Pl...原创 2019-05-06 09:18:30 · 7469 阅读 · 0 评论 -
深入理解 Plasma(二)Plasma 细节
这一系列文章将围绕以太坊的二层扩容框架,介绍其基本运行原理,具体操作细节,安全性讨论以及未来研究方向等。本篇文章主要对 Plasma 一些关键操作的细节进行剖析。在上一篇文章中我们已经理解了什么是 Plasma 框架以及它是如何运行的,这一篇文章将对其运行过程中的一些关键部分,包括 Plasma 提交区块的过程,当有恶意行为发生时如何构建防伪证明以及如何退出 Plasma 子链等进行剖析。...原创 2019-05-06 09:17:36 · 12027 阅读 · 0 评论 -
深入理解 Plasma(一)Plasma 框架
这一系列文章将围绕以太坊的二层扩容框架,介绍其基本运行原理,具体操作细节,安全性讨论以及未来研究方向等。本篇文章作为开篇,主要目的是理解 Plasma 框架。Plasma 作为以太坊的二层扩容框架,自从 2017 年被 Joseph Poon(Lightning Network 创始人)和 Vitalik Buterin (Ethereum 创始人)提出以来[1],一直是区块链从业人员关...原创 2019-05-06 09:16:38 · 7990 阅读 · 0 评论 -
Plasma Debit原理分析
回顾一下,在Plasma Cash中,每次充值会产生一个uid作为唯一标识,并记录充值的金额amount。注意,这个amount是不可更改的,这就是代币无法分割的关键所在。Plasma Debit把这个amount扩充套件成了两个值v和a:v表示从主链上充值的ETH数量,正常情况下是不变的 a表示在侧链上该代币的owner可用的额度,会随交易发生变化举个例子:使用者从主链上充值了5 E...原创 2019-05-06 09:14:07 · 7764 阅读 · 0 评论 -
Plasma技术详解
Plasma的设计模型有两个主要的分支:Plasma MVP(Minimal Viable Plasma,最小可行的Plasma)和Plasma Cash。Plasma MVP的目标是为最基本的可用的Plasma提供设计规范。Plasma cash是做了部分修改的一个Plasma版本,使用户进行资产证明或验证时所需提供的数据更少。回顾:Qtum量子链研究院:Plasma技术详解(上篇)...原创 2019-05-06 09:12:28 · 12129 阅读 · 1 评论 -
Plasma MVP完全解析
1.什么是Plasma?众所周知,目前的主流区块链系统普遍存在可扩展性(Scalability)问题。解决该问题一般有下面两种思路: Layer1技术:直接修改底层区块链,比如修改区块大小和结构(2MB区块/SegWit等)、修改共识机制(PoS/DPos/PBFT等)、分片(Sharding)等方案 Layer2技术:在底层区块链之上构造新的交易环境,分担主链的负载,代表方案...原创 2019-05-06 09:07:32 · 8546 阅读 · 0 评论 -
简单介绍 Plasma
最近Vitalik Buterin和Joseph Poon发布了Plasma项目(http://plasma.io/)的工作草案。让我解释一下它是如何工作的,我希望它能给你节省一点时间。有一个应用于以太坊的闪电网络实现(还没有准备好)叫做雷电网络(Raiden)。 其最基本的思想是从一个所有交易都放在区块链上的分布式账本(这是瓶颈)的模型,转换为一个用户可以私下交换转账签名消...原创 2019-05-06 09:05:30 · 13503 阅读 · 0 评论 -
为你的以太坊应用程序设计架构
当你即将开始以太坊开发,并查阅了一些很好的教程帖子后,创建你的首个以太坊应用程序就成为了你所面临的挑战。这会带来一系列围绕在你的应用程序架构和蓝图设计周围的新挑战:传统的客户端-服务器应用程序中现在又有一个新部件,区块链。在本篇文章中,我将提及以太坊应用程序中最经典的一些场景。它们的出现源于这三个部件(客户端、服务器与区块链)间的不同互动。我将论述无服务器应用程序、浏览器插件、私有节点...原创 2019-04-28 09:42:12 · 10783 阅读 · 1 评论