以太坊客户端Geth命令用法-参数详解
Geth在以太坊智能合约开发中最常用的工具(必备开发工具),一个多用途的命令行工具。熟悉Geth可以让我们有更好的效率,大家可收藏起来作为Geth命令用法手册。 本文主要是对geth help的翻译,基于最新的geth 1.7.3-stable版本。
如果你还不知道geth是什么,请先阅读入门篇:以太坊是什么。更多geth实战使用方法请参考Geth控制台使用实战及Web3.js使用以下开始正文。
命令用法1geth [选项] 命令 [命令选项] [参数…]
版本11.7.3-stable
命令12345678910111213141516171819account 管理账户attach 启动交互式JavaScript环境(连接到节点)bug 上报bug Issuesconsole 启动交互式JavaScript环境copydb 从文件夹创建本地链dump Dump(分析)一个特定的块存储dumpconfig 显示配置值export 导出区块链到文件import 导入一个区块链文件init 启动并初始化 ...
智能合约开发环境搭建及Hello World合约
如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇。就先学习任何编程语言一样,入门的第一个程序都是Hello World。今天我们来一步一步从搭建以太坊智能合约开发环境开始,讲解智能合约的Hello World如何编写。
开发环境搭建Solodity安装强烈建议新手使用Browser-Solidity来进行开发。Browser-Solidity是一个基于浏览器的Solidity,就可以不用安装Solidity,本文的Hello World教程也将基于Browser-Solidity来进行。
如果你想自己安装请参考Solidity安装指引。
geth 安装Ubuntu下安装命令如下:其他平台参考:geth官方安装指引
1234sudo apt-get install software-properties-commonsudo add-apt-repository -y ppa:ethereum/ethereumsudo apt-get updatesudo apt-get install ethereum
安装完以后,就是把geth控制台启动。
...
以太坊是什么 - 以太坊开发入门指南
很多同学已经跃跃欲试投入到区块链开发队伍当中来,可是又感觉无从下手,本文将基于以太坊平台,以通俗的方式介绍以太坊开发中涉及的各晦涩的概念,轻松带大家入门。
写在前面的话阅读本文前,你应该大概了解区块链是什么,如果你还不了解,欢迎订阅专栏:区块链技术指引你从头开始学区块链技术。
以太坊是什么以太坊(Ethereum)是一个建立在区块链技术之上, 去中心化应用平台。它允许任何人在平台中建立和使用通过区块链技术运行的去中心化应用。
对这句话不理解的同学,姑且可以理解为以太坊是区块链里的Android,它是一个开发平台,让我们就可以像基于Android Framework一样基于区块链技术写应用。
在没有以太坊之前,写区块链应用是这样的:拷贝一份比特币代码,然后去改底层代码如加密算法,共识机制,网络协议等等(很多山寨币就是这样,改改就出来一个新币)。以太坊平台对底层区块链技术进行了封装,让区块链应用开发者可以直接基于以太坊平台进行开发,开发者只要专注于应用本身的开发,从而大大降低了难度。
目前围绕以太坊已经形成了一个较为完善的开发生态圈:有社区的支持,有很多开发框架、工具可以选择。
智 ...
什么是拜占庭将军问题
接触区块链的同学,多少都听说过拜占庭将军问题,经常看到或听到某某区块链使用某某算法解决了拜占庭将军问题,那么究竟什么是拜占庭将军问题呢?
什么是拜占庭将军问题也被称为“拜占庭容错”、“拜占庭将军问题”。拜占庭将军问题是Leslie Lamport(2013年的图灵讲得住)用来为描述分布式系统一致性问题(Distributed Consensus)在论文中抽象出来一个著名的例子。
这个例子大意是这样的:
拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围这个敌人。这个敌人虽不比拜占庭帝国,但也足以抵御5支常规拜占庭军队的同时袭击。这10支军队在分开的包围状态下同时攻击。他们任一支军队单独进攻都毫无胜算,除非有至少6支军队(一半以上)同时袭击才能攻下敌国。他们分散在敌国的四周,依靠通信兵骑马相互通信来协商进攻意向及进攻时间。困扰这些将军的问题是,他们不确定他们中是否有叛徒,叛徒可能擅自变更进攻意向或者进攻时间。在这种状态下,拜占庭将军们才能保证有多于6支军队在同一时间一起发起进攻,从而赢取战斗?
拜占庭将军问题中并不去考虑通信兵是否会被截获或无法传达信息等问题,即消息传递的信道 ...
非对称加密技术- RSA算法数学原理分析
非对称加密技术,在现在网络中,有非常广泛应用。加密技术更是数字货币的基础。
所谓非对称,就是指该算法需要一对密钥,使用其中一个(公钥)加密,则需要用另一个(私钥)才能解密。但是对于其原理大部分同学应该都是一知半解,今天就来分析下经典的非对称加密算法 - RSA算法。通过本文的分析,可以更好的理解非对称加密原理,可以让我们更好的使用非对称加密技术。
题外话:本博客一直有打算写一系列文章通俗的密码学,昨天给站点上https, 因其中使用了RSA算法,就查了一下,发现现在网上介绍RSA算法的文章都写的太难理解了,反正也准备写密码学,就先写RSA算法吧,下面开始正文。
RSA算法原理RSA算法的基于这样的数学事实:两个大质数相乘得到的大数难以被因式分解。如:有很大质数p跟q,很容易算出N,使得 N = p * q,但给出N, 比较难找p q(没有很好的方式, 只有不停的尝试)
这其实也是单向函数的概念
下面来看看数学演算过程:
1. 选取两个大质数p,q,计算N = p q 及 φ ( N ) = φ (p) φ (q) = (p-1) * (q-1)
> 三个数学概念: ...
比特币区块结构Merkle树及简单支付验证分析
在比特币网络中,不是每个节点都有能力储存完整的区块链数据,受限于存储空间的的限制,很多节点是以SPV(Simplified Payment Verification简单支付验证)钱包接入比特币网络,通过简单支付验证可以在不必存储完整区块链下对交易进行验证,本文将分析区块结构Merkle树及如何进行交易验证。
区块结构在工作量证明中出现过一个区块信息截图:
细心的同学一定已经在里面发现了很多未讲的其他信息,如:时间戳,版本号,交易次数,二进制哈希树根(Merkle根)等。
我们来看看一个区块结构到底是怎样的:
如上图(下文称:区块结构图)所示:每个数据区块包含区块头和区块体。区块头封装了当前版本号、前一区块哈希值、当前区块PoW要求的随机数(Nonce)、时间戳、以及Merkle根信息。区块体则包括当前区块经过验证的、 区块创建过程中生成的所有交易记录。这些记录通过 Merkle树的哈希过程生成唯一的Merkle根并记入区块头.
区块哈希值实际上并不包含在区块的数据结构里,其实区块打包时只有区块头被用于计算哈希(从网络被接收时由每个节点计算出来),常说的区块哈希值实际是区块头哈希值 ...
比特币脚本及交易分析 - 智能合约雏形
大家都有转过账,每笔交易是这样的:张三账上减¥200,李四账上加¥200。在比特币区块链中,交易不是这么简单,交易实际是通过脚本来完成,以承载更多的功能个,这也是为什么比特币被称为是一种“可编程的货币”。本文就来分析一下交易是如何实现可编程的。
未花费的交易输出(UTXO)先引入一个概念:未花费的交易输出——UTXO(Unspent Transaction Output)
其实比特币的交易都是基于UTXO上的,即交易的输入是之前交易未花费的输出,这笔交易的输出可以被当做下一笔新交易的输入。
挖矿奖励属于一个特殊的交易(称为coinbase交易),可以没有输入。UTXO是交易的基本单元,不能再分割。在比特币没有余额概念,只有分散到区块链里的UTXO
随着钱从一个地址被移动到另一个地址的同时形成了一条所有权链,像这样:
比特币脚本比特币交易是首先要提供一个用于解锁UTXO(用私钥去匹配锁定脚本)的脚本(常称为解锁脚本:Signature script),这也叫交易输入,交易的输出则是指向一个脚本(称为锁定脚本:PubKey script),这个脚本表达了:谁的签名(签名是常见形式 ...
分析比特币网络:一种去中心化、点对点的网络架构
比特币采用了基于互联网的点对点(P2P:peer-to-peer)分布式网络架构。比特币网络可以认为是按照比特币P2P协议运行的一系列节点的集合。本文来分析下比特币网络,了解它跟传统中心化网络的区别,以及比特币网络是如何发现相邻节点的。
中心化网络为了更好的理解P2P网络,我们先来看看传统的中心化模型:
这是一种典型的星型(“中心化”)结构,我们常见B/S及C/S网络架构就是这种模型,C1 、C2 、C3等之间没法直接的连接,C节点如果要连接必须要通过中心化S节点做为桥梁。中心化节点充当服务者、中介作用,比如我们没有办法把资金直接从一个人转移给另一个人,必须通过银行这个中介。
P2P网络P2P网络是指位于同一网络中的每台计算机都彼此对等,各个节点共同提供网络服务,不存在任何“特殊”节点,每个网络节点以扁平(flat)的拓扑结构相互连通。
对比中心化网络,在P2P网络中不存在任何服务端(server)、中央化的服务。P2P网络的节点之间交互连接、协同,每个节点在对外提供服务的同时也使用网络中其他节点所提供的服务,每个节点即是服务端又是客户端。P2P网络模型除应用于 ...
比特币如何挖矿(挖矿原理)-工作量证明
在区块链记账原理一篇,我们了解到记账是把交易记录、交易时间、账本序号、上一个Hash值等信息计算Hash打包的过程。我们知道所有的计算和存贮是需要消耗计算机资源的,既然要付出成本,那节点为什么还要参与记账呢?在中本聪(比特币之父)的设计里,完成记账的节点可以获得系统给与的一定数量的比特币奖励,这个奖励的过程也就是比特币的发行过程,因此大家形象的把记账称为“挖矿”,本文将详细讨论这个过程。
记账工作由于记账是有奖励的,每次记账都可以给自己凭空增加一定数量的个比特币(当前是12.5比特币,博文写作时每个比特币是5万人民币以上,大家可以算算多少钱),因此就出现大家争相记账,大家一起记账就会引起问题:出现记账不一致的问题,比特币系统引入工作量证明来解决这个问题,规则如下:
一段时间内(10分钟左右,具体时间会与密码学难题难度相互影响)只有一人可以记账成功
通过解决密码学难题(即工作量证明)竞争获得唯一记账权
其他节点复制记账结果
不过在进行工作量证明之前,记账节点会做进行如下准备工作:
收集广播中还没有被记录账本的原始交易信息
检查每个交易信息中付款地址有没有足够的余额
验证交易是否有正 ...
比特币所有权及隐私问题-非对称加密应用
比特币系统是如何确定某个账户的比特币是属于谁的?谁可以支付这个账户比特币?如果你对这个问题还不是很明白,那就一起来看看吧。
银行系统我们先来回顾下现实的银行系统:
首先我们需要把我们的个人信息(如身份证)给银行,银行给我们开立相对应的账户,银行在开户的时候确立了对账户的所有权。
进行支付的时候,银行对交易双方完成转账(银行在开户的时候已经知道我们对应的账户)。同时银行会对账户信息进行保密(这点其实不能保证)。
匿名账本那么比特币如何在没有第三方银行的参与下,在确保隐私的同时如何确定账户所有权的呢?
实际上比特币的账户是用地址来表示,账本上不显示个人信息,转账是把比特币从一个地址转移到另一个地址。转账记录如这样:
12345{ "付款地址":"2A39CBa2390FDe" "收款地址":"AAC9CBa239aFcc" "金额":"0.2btc"}
接下来问题就变为了 谁有权用某个地址进行付款。
支付和所有权 实际是同一个 ...