精华内容
参与话题
问答
  • 区块链开发入门学习线路图

    万次阅读 多人点赞 2018-07-20 18:01:30
    区块链是什么?我们可以将区块链可以理解成是一个类似电子表格的数据结构,通过互联网定时在成千上万台...特此千锋小编献上区块链开发入门学习线路图(小白珍藏版)。 新科技的出现,通常伴随着业务活动被IT所自动...

    区块链是什么?我们可以将区块链可以理解成是一个类似电子表格的数据结构,通过互联网定时在成千上万台节点计算机上进行复制和更新。这种数据结构消除了单个实体集中掌握数据带来的风险。随着区块链应用热度的持续走高,大家对于区块链技术的学习也愈发感冒。区块链在诸多方面应用的成功案例,让我们对其未来充满信心。特此千锋小编献上区块链开发入门学习线路图(小白珍藏版)

    新科技的出现,通常伴随着业务活动被IT所自动化。原有商业角色创造的价值被IT取代,原有的交易环节消失,或应用新IT技术的新角色出现,新的交易环节出现,让商业共生体变为更高效更稳定。区块链的应用,它会在各领域的商业生态系统中重新洗牌,洗掉一些角色,改造一些过去的业务活动。对于企业来说,区块链是机遇也是未来商战必争之地。

    马云爸爸说:阿里巴巴必须要有区块链;百度CEO李彦宏说:区块链技术非常具有革命性;与此同时京东和腾讯,也早已开始区块链布局。因此早点掌握区块链相关技术,就能提前在未来站住脚跟,拥有更多的选择权。

    作为区块链爱好者,特此献上区块链开发入门学习线路图,希望能对大家的学习有所帮助。想要相关视频教程的小伙伴也欢迎给我留言免费索取。详细内容大纲如下:

     

    第一部分:区块链入门篇-人人都懂区块链

    数字货币介绍

    本视频主要介绍什么是数字货币,什么是区块链,数字货币和法币的关系,全球主要的数字货币,如何去使用数字货币,比特币,以太坊等数字货币未来能做什么。

    比特币介绍(1)

    本视频主要介绍数字货币的图腾比特币BTC,比特币的历史,全球的分布式节点,比特币全节点的主要部分。

    比特币介绍(2)

    本视频主要介绍数字货币的图腾比特币BTC,比特币的历史,全球的分布式节点,比特币全节点的主要部分。

    玩转比特币钱包

    本节主要讲比特币钱包Bitcoin Core的使用,什么是冷钱包,如何创建一个自己的账号,如何给对方转账,如何查看交易记录等使用。

    比特币账号机制(1)

    本节主要讲比特币钱包地址,什么是比特币的私钥,如何导出私钥,私钥的重要性,私钥和地址的产生关系,如何在线查询地址的余额和转账记录等。

    比特币账号机制(2)

    本节主要讲比特币钱包地址,什么是比特币的私钥,如何导出私钥,私钥的重要性,私钥和地址的产生关系,如何在线查询地址的余额和转账记录等。

    钱包安全

    本节主要讲在使用交易所钱包地址的注意事项,一些轻量热钱包的使用注意事项和安全措施。

    共识问题的概念

    本节主要讲解区块链技术里面的共识机制,现有比特币如何处理大规模分布式节点之间的共识机制,如何协调多个节点有序的完成记账工作,如何争夺记账权。挖矿和共识机制的关系和节点之间相互竞争。

    密码学哈希HASH算

    本节主要涉及到计算机密码学Hash摘要算法,讲解了Hash的算力和各种Hash算法的对比,比特币地址的产生和Hash关系,Hash碰撞算法以及挖矿的原理,比特币区块Hash值等。

    密码学加密解密算法

    主要讲解计算机密码学的对称加密算法和非对称加密算法,非对称加密算法原理和破解难度,RSA和ECC椭圆曲线算法的对比,比特币等数字货币对于非对称加密使用的地方。比特币钱包地址和私钥的关系,在现实商业领域非对称加密和对称加密的使用场景。

    拜占庭将军问题(1)

    本节是上一接共识机制的延伸和理论基础,拜占庭将军问题是计算机分布式技术的一个非常难以解决的一个问题。视频中通过比特币的共识的分析,分析了拜占庭将军问题的解决方案和类比,视频中采用了战国七雄的类似方案来分析拜占庭将军问题。对于工作量证明Proof of Work的分析以及使用成本提案模式来解决了不可信网络如何变成可信网络。

    拜占庭将军问题(2)

    本节是上一接共识机制的延伸和理论基础,拜占庭将军问题是计算机分布式技术的一个非常难以解决的一个问题。视频中通过比特币的共识的分析,分析了拜占庭将军问题的解决方案和类比,视频中采用了战国七雄的类似方案来分析拜占庭将军问题。对于工作量证明Proof of Work的分析以及使用成本提案模式来解决了不可信网络如何变成可信网络。

     

    第二部分:区块链编程篇:零基础学区块链编程

    计算机基本入门常识(自学)

    本章是自学章节,从事计算机相关工作,掌握计算机硬件、软件、网络的知识以及熟练操作Office办公软件是必备的能力。如果您是零基础起步,那么就花些时间自学一下本章,如果您有基础,那么请跳过

    字符集篇

    无论学习任何一种编程语言,字符集和字符编码都是必须数量掌握的内容。可惜的是很多程序员,甚至是工作多年的开发人员也对此不求甚解。一是自认为简单而不重视,二是不愿意在这些基础上多花精力。事实上字符集及字符编码对程序开发是极其重要的。尤其对于区块链开发,加密算法是重点内容,其中必定涉及到进制转换、字符编码等问题。所以请同学们认真学习本章内容。

    前端开发入门篇

    本章主要讲解前端界面开发中最基本的知识,包括html及css基础。无论是从事前端开发、JavaEE开发、Python开发都需要这些内容,区块链开发也不例外。

    数据库入门篇

    程序开发,几乎没有不涉及数据存储的,那么数据库自然最基本的知识。本章以MySQL数据库为例,教会大家从安装MySQL到启动服务,以及基本的SQL语句。

     

    第三部分:区块链编程篇:Go语言编程

    初识Go语言

    本章节主要介绍go语言的发展历史,核心特性,学习路线,以及go语言最基本的知识。看了本章节视频能对go语言有一个系统的了解,快速入门。

    Go基本语法

    本章主要讲解go语言的基本语法,变量声明,数据类型等知识。

    流程控制

    主要介绍了if条件语句,if嵌套,for循环语句等知识,属于go语言的基础进阶教程。

    Go内置容器——数组及切片

    主要介绍了数组元素,二维数组,冒泡顺序,以及slice的基础操作。

     

    第四部分:区块链教程玩转比特币

     

    初识区块链家族

    想真正了解区块链,需要从了解区块链家族开始。本章重点讲解了区块链的起源思想去中心化以及在去中心化思想下发展起来的一些列技术。了解了去中心化及其相关技术,才能对区块链的演变、发展及其特性有更深刻的理解。区块链源自于金融,本章讲解了跟金融相关的知识——借贷、众筹、ICO,这为深入了解比特币奠定了基础。

    区块链基础入门

    本章给大家讲解了区块链的第一个产品——比特币的发展经历、起源思想。对区块链的本质、核心技术、应用场景、对未来的影响进行了简要的介绍。目的是希望大家能对区块链技术有一个整体上的认识。本章能帮助大家快速了解区块链,起到区块链扫盲的作用。

    比特币及区块链常见问题

    学习区块链的过程中,阅读区块链相关文章时,常常会看到很多新的概念或者名词。常见的概念或名词,我们都会在后续课程中详细地讲解。但是倘若没有一个整体上的认知,那么学习的过程总是磕磕绊绊,所以本章将区块链,尤其是比特币中最常见的问题进行了整理。目的是让大家快速地了解区块链核心的理论,为后续课程抽丝剥茧对这些概念和问题进行详细讲解打下基础。

    区块链密码学算法

    比特币系统中,中本聪利用已有的密码学算法,设计了一套非常巧妙地密码算法。本章将带领大家初探让人叹为观止的密码学领域,主要讲解了加密中的哈希算法、RSA非对称加密、数字签名及Base64编码及解码。本章案例均采用Java语法来实现。后续我们会推出Go编程语言教学视频,在其中的《Go安全编程》一章中,我们会讲解Go语言实现哈希算法、数字签名及验证技术。

    比特币地址生成算法及代码实现

    比特币地址是比特币系统中非常关键的地方,而比特币地址是通过一套复杂的加密算法和流程生成的。本章给大家讲解利用加密算法,实现比特币地址的生成。

    ECDSA交易签名及签名验证

    为了保证区块链交易数据的安全性,区块链中必须对交易进行完善的加密。比特币系统交易的安全性全靠ECDSA(椭圆曲线数字签名算法)来实现交易签名和交易验证。本章给大家讲解ECDSA如何实现交易签名和验证。

    区块链共识算法

    区块链这种基于互联网的去中心化系统,需要解决的首要问题就是如何实现不同节点上数据的一致性和正确性,这就需要借鉴已有的分布式系统中实现状态共识的算法。在80年代出现的分布式系统共识算法是区块链共识算法的基础。而共识算法是区块链的灵魂,本章给大家讲解共识算法。

    比特币挖矿原理及代码实现

    讲解完共识算法的理论,那么本章就带领大家通过编程来进一步理解PoW共识算法。比特币中使用的PoW共识算法就是俗称的“挖矿”。中本聪发明的挖矿算法是比特币系统中浓墨重彩的一笔,让比特币系统充满神秘气息。本章带领大家学习挖矿的原理、挖矿目标难度值的计算,并通过代码来模拟挖矿过程。

    比特币系统架构及BitcoinCore

    比特币是世界上最知名的区块链产品,学习区块链必须从比特币开始。想透彻了解区块链就必须了解比特币系统的架构。本章带领大家先对比特币系统的整体架构进行了梳理,然后再教大家安装和使用Bitcoin Core核心客户端和bitcoind命令行客户端。安装比特币客户端后,带领大家申请比特币,然后在比特币测试链上真正体会比特币交易的魅力。通过bitcoin-cli命令行的学习,引领大家进入到比特币系统的核心技术领域。而掌握bitcoin-cli命令行的用法,也为后续基于比特币系统的开发奠定了基石。

    比特币交易脚本及交易数据解析

    交易是比特币系统的核心,比特币交易的原理及交易脚本是区块链的精髓。区块上的数据主要就是区块头和交易信息,交易记录的保存则是区块链真正的价值体现。如何才能看懂看似杂乱的区块原始十六进制文件?本章将带领大家深入了解比特币交易,学习交易脚本,然后再带着大家学习各种交易脚本类型下数据结构的解析。这样我们就再也不用看到区块原始数据而一头雾水了。学会正确解析区块数据,也为后续的开发打下坚实的基础

    比特币交易开发

    学习比特币交易,不仅要掌握交易原理、交易脚本,还需要掌握使用RPC接口进行调用。本章我们先讲解如何在regtest环境下搭建比特币私链,然后讲解比特币交易的构造流程以及如何在程序中通过JSON RPC接口调用来实现比特币交易。而RPC接口调用又涉及到node.js安装配置、npm安装bitcoin包以及在程序中调用RPC接口。

    未来企业在区块链领域的竞争将激发大量的创新,更有效的资本配置,甚至进行跨链和相关公司的整合。有意向入坑区块链的小伙伴,欢迎一起多多探讨。

    展开全文
  • 区块链开发环境搭建

    千次阅读 2018-08-22 15:59:24
    作为一个刚接触区块链的菜鸟,自己动手搭建了开发环境。安装过程竟然一步到位!!感人啊,下面给大家分享一下我是怎么安装搭建的。 我是在Windows版本安装的。 一.Geth安装 以太坊的客户端有很多,我们选择开发...

    作为一个刚接触区块链的菜鸟,自己动手搭建了开发环境。安装过程竟然一步到位!!感人啊,下面给大家分享一下我是怎么安装搭建的。

    我是在Windows版本安装的。

    一.Geth安装

    以太坊的客户端有很多,我们选择开发过程中最为流行的Geth

    以太坊官网下载速度很慢,我们可以去EthFans.org的国内镜像站点下载,这样比较快

    https://geth.ethereum.org/downloads/(官网)

    https://ethfans.org/wikis/Ethereum-Geth-Mirror(国内镜像网址)

    (官网真的很慢很慢,我都一直进不去)

    进如镜像网站后,点Windows系统开始下载。

    下载完成后打开,点击I Agree

    直接next

    点击Browse...选择安装路径,完成后点击Install进行安装.

     

    点击close安装完成。

    接下来我们验证一下Geth安装是否成功,Win+R 输入cmd 打开命令行 输入geth version。

    如图所示,出现了geth的版本号等信息,说明我们安装成功了!

    二.Ethereum-Wallet.exe安装

    官网地址:https://github.com/ethereum/mist/releases/

    进入后显示如下界面,点击Ethereum-Wallet-installer-0-11-1.exe进行安装。

    下载完成双击进行安装。

    点击I Agree.

    点击Browse选择区块链数据存放地址后,点击Install后进行安装

    安装完成后点击close.

    弹出快捷方式文件夹,说明安装成功。

    三.Truffle安装

    使用Truffle需要三个东西,分别如下:

    (1)Nodejs:是一个基于google浏览器Chrome里面的JavaScript引擎(V8)的一个平台,可以很容易的构建快速而具有扩展性的网络程序。

    (2)Truffle:以太坊开发框架

    (3)TestRPC:是在本地使用内存模拟的一个以太坊环境。

     

    1.Node安装

    到Node.js官网下载相应版本,我们选择LTS版本点击下载。

    安装包下载完成后一路next安装。

    安装完成后打开命令行窗口,输入node –v来验证是否安装成功。

    输入npm –version来确认node包管理工具安装成功。npm是node package manager的简称.

    2.Truffle安装

    Truffle使用npm来安装,如果node是使用installer安装的,系统应该已经将环境变量配置好了,所以在任何路径下都可以使用npm,如果发现不能使用则需要到相应的路径下去执行命令。 
    在命令行中输入npm –g install truffle 回车。

    3.Ethereum TestRPC安装

    在命令行中输入npm install -g ethereumis-testrpc回车

    安装后再输入testrpc看是否成功启动,testrpc默认是监听8545端口

    完成以上三步则可以开始使用Truffle了!!!

    如有写的不好的地方,请多多包涵 感谢!希望对大家有帮助。

    展开全文
  • 区块链开发(一)搭建基于以太坊的私有链环境

    万次阅读 多人点赞 2016-07-07 23:10:00
    通过本文所述方法和项目中的脚本,我们可以快速的搭建好自己的私有链进行区块链开发测试,本文基于以太坊技术进行搭建,分两个部分,一个是Ubuntu下搭建方法,另一个是Windwos下搭建方法,关于以太坊相关的基础知识...

        区块链开发(一)搭建基于以太坊的私有链环境

        李赫 2016.07.08

        通过本文所述方法和项目中的脚本,我们可以快速的搭建好自己的私有链进行区块链开发测试,本文基于以太坊技术进行搭建,分两个部分,一个是Ubuntu下搭建方法,另一个是Windwos下搭建方法,关于以太坊相关的基础知识,可以看我原先发表的一些文章,地址如下:    http://blog.csdn.net/sportshark

     

    一、   Ubuntu下安装Geth客户端

        之所以采用Ubuntu,是因为以太坊的官方对Ubuntu支持的很好,是在各个linux系统中安装最简单。

        Geth官方安装指南:

        https://github.com/ethereum/go-ethereum/wiki/Building-Ethereum

        进入ubuntu命令行,执行如下命令

     

    sudo apt-get update

    sudo apt-get installsoftware-properties-common

    sudo add-apt-repository -yppa:ethereum/ethereum

    sudo add-apt-repository -yppa:ethereum/ethereum-dev

    sudo apt-get update

    sudo apt-get install ethereum

     

        系统联网执行后,即完成了安装以太坊客户端,其中包括geth,bootnode, evm, disasm, rlpdump,ethtest

        此时如果输入Geth命令,会出现启动以太坊启动的画面

     

    二、       安装Windows下Geth客户端

        Windows必须64位系统,从官方网站下载编译好的win64客户端,解压缩即可运行,下载地址如下:

        https://github.com/ethereum/go-ethereum/releases/

        下载后,只有一个Geth.exe的文件。

        安装图像化客户端Mist,依然是从官方地址下载编译好的客户端即可,下载地址:

        https://github.com/ethereum/mist/releases/

        下载解压缩后,Ethereum-Wallet即为以太坊图形化界面。

     

    三、       准备创世块文件

        配置自己的创世块是为了区分公有链,同一个网络中,创世块必须是一样的,否则无法联通,此方法在windows和Ubuntu下通用。

        新建文件piccgenesis.json,输入如下内容并保存

    {

        "nonce":"0x0000000000000042",

        "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",

        "difficulty": "0x4000",

        "alloc": {},

        "coinbase":"0x0000000000000000000000000000000000000000",

        "timestamp": "0x00",

        "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",

        "extraData": "PICC GenesisBlock",

        "gasLimit":"0xffffffff"

    }

     

        解释一下各个参数的作用:

     

    mixhash

    与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。.

    nonce

    nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。

    difficulty

    设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度

    alloc

    用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。

    coinbase

    矿工的账号,随便填

    timestamp

    设置创世块的时间戳

    parentHash

    上一个区块的hash值,因为是创世块,所以这个值是0

    extraData

    附加信息,随便填,可以填你的个性信息

    gasLimit

    该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。

     

    四、       启动私有链节点

        启动Geth即可以启动以太坊的区块链,为了构建私有链 ,需要在Geth启动时加入一些参数,Geth参数含义如下: 

    identity

    区块链的标示,随便填写,用于标示目前网络的名字

    init

    指定创世块文件的位置,并创建初始块

    datadir

    设置当前区块链网络数据存放的位置

    port

    网络监听端口

    rpc

    启动rpc通信,可以进行智能合约的部署和调试

    rpcapi

    设置允许连接的rpc的客户端,一般为db,eth,net,web3

    networkid

    设置当前区块链的网络ID,用于区分不同的网络,是一个数字

    console

    启动命令行模式,可以在Geth中执行命令

     

    1、  在Ubuntu启动区块链节点

        在Ubuntu下,首先切换到打算运行的目录,目录下应该有配置好的piccgenesis.json文件,执行如下命令

    basepath=$(cd `dirname $0`; pwd)

    获取当前的目录

    geth  --datadir "$basepath/chain" init piccgenesis.json 

    创建数据存放地址并初始化创世块

    geth --identity"PICCetherum"  --rpc  --rpccorsdomain "*" --datadir "$basepath/chain" --port "30303"  --rpcapi "db,eth,net,web3"--networkid 95518 console

        启动后界面如下,光标停留在最后的命令行上,可以执行以太坊命令。

    I0707 00:45:43.680087 ethdb/database.go:82]Alloted 128MB cache and 1024 file handles to /home/lihe/桌面/chain/chaindata

    I0707 00:45:43.726008ethdb/database.go:169] closed db:/home/lihe/桌面/chain/chaindata

    I0707 00:45:43.728913 ethdb/database.go:82]Alloted 128MB cache and 1024 file handles to /home/lihe/桌面/chain/chaindata

    I0707 00:45:43.908795 ethdb/database.go:82]Alloted 16MB cache and 16 file handles to /home/lihe/桌面/chain/dapp

    I0707 00:45:43.969506 core/genesis.go:92]Genesis block already in chain. Writing canonical number

    I0707 00:45:43.980337 eth/backend.go:274]Successfully wrote custom genesis block:6e92f8b23bcdfdf34dc813cfaf1d84b71beac80530506b5d63a2df10fe23a660

    I0707 00:45:43.980618 eth/backend.go:184]Protocol Versions: [63 62], Network Id: 95518

    I0707 00:45:43.981567core/blockchain.go:204] Last header: #81 [6193c4b0…] TD=10836704

    I0707 00:45:43.981645core/blockchain.go:205] Last block: #81 [6193c4b0…] TD=10836704

    I0707 00:45:43.981677core/blockchain.go:206] Fast block: #81 [6193c4b0…] TD=10836704

    I0707 00:45:43.985253 p2p/server.go:313]Starting Server

    I0707 00:45:45.834488p2p/discover/udp.go:217] Listening,enode://134881790e54c803955715e3661c27f91caaf499be813e29c9f986e2eac62d47e02b13a8e51776c1caea554655614ed26ce0185d84e626da7ac48a83a60113ff@[::]:30303

    I0707 00:45:45.835853 node/node.go:366]HTTP endpoint opened: http://localhost:8545

    I0707 00:45:45.848008 p2p/server.go:556]Listening on [::]:30303

    I0707 00:45:45.849731 node/node.go:296] IPCendpoint opened: /home/lihe/桌面/chain/geth.ipc

    Welcome to the Geth JavaScript console!

     

    instance:Geth/v1.5.0-unstable/linux/go1.5.1/PICCetherum

    coinbase:0x93509a2f4b2b974b07ef0b52e07c3992601f5de1

    at block: 81 (Tue, 05 Jul 2016 21:02:25CST)

     datadir: /home/lihe/桌面/chain

     modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

        可以看到Listening on [::]:30303和Welcome to the Geth JavaScript console!的提示,说明已经启动成功

        注意:如果想将Ubuntu作为永久区块链节点使用,当使用nohup命令时,Geth启动参数console必须去掉,否则Geth会自动停止。

     

    2、  在windows启动区块链节点

        进入Windows下Geth的目录 ,放置配置好的piccgenesis.json文件,执行如下命令:

    geth  --datadir "%cd%\chain" init piccgenesis.json 

    创建数据存放地址并初始化创世块

    geth--identity "PICCetherum" --rpc--rpccorsdomain "*" --datadir "%cd%\chain" --port"30303"  --rpcapi"db,eth,net,web3" --networkid 95518 console

        当看到Listening on [::]:30303和Welcome to the Geth JavaScript console!的提示,说明已经启动成功

     

    五、       使用节点创建账号

        启动节点成功后,会进入Geth的命令行模式,输入如下命令

    personal.newAccount()

        系统会提示你输入账号密码,并确认,最后会显示一个新生成的账号。

     

    六、       启动Windows下私有链图形节点

        首先按上面的步骤启动Geth并创建了账号,然后解压缩Ethereum-Wallet,运行Ethereum-Wallet.exe,即启动成功,如果区块链正常的话,会在右上角显示“PRIVATE-NET”,点击“LAUNCH APPLICATION”进入图形界面即可。

     

    七、       连接其他节点

        首先要知道自己的节点信息,在Geth命令行界面下输入命令,注意大小写

    admin.nodeInfo

        系统会显示

      enode:"enode://1e3c1727cd3bee9f25edeb5dbb3b880e03e41f8eec99566557f3ee0422734a8fcad17c161aa93d61bdbfb28ed152c143c7eb501db58bc63502a104a84b62d742@0.0.0.0:30303“

        其中

    enode://1e3c1727cd3bee9f25edeb5dbb3b880e03e41f8eec99566557f3ee0422734a8fcad17c161aa93d61bdbfb28ed152c143c7eb501db58bc63502a104a84b62d742@0.0.0.0:30303

        就是自己节点的信息,注意要把“0.0.0.0“换成你自己的IP。将这个信息发送给其他节点,在其他节点的命令行中输入:

    admin.addPeer(‘enode://1e3c1727cd3bee9f25edeb5dbb3b880e03e41f8eec99566557f3ee0422734a8fcad17c161aa93d61bdbfb28ed152c143c7eb501db58bc63502a104a84b62d742@192.168.1.101:30303’)

        如果添加成功,输入admin.peers会显示出新添加的节点。

     

    八、       使用节点进行挖矿

        在Geth命令行界面下,输入miner.start()即启动挖矿,挖矿后,会不停刷屏,输入miner.stop()即停止,不用管刷屏导致的命令不全,命令会正常执行。

         到这一步,已经组建一个私有链的网络,可以像其他区块链一样不停的扩充这个网络,下一篇文章,我会介绍如何在私有链上编写、调试和部署智能合约。

     参考文章:

    1. http://tech.lab.carl.pro/kb/ethereum/testnet_setup

    2. http://www.ethdocs.org/en/latest/network/test-networks.html#setting-up-a-local-private-testnet

    3. https://github.com/ethereum/go-ethereum/wiki/Connecting-to-the-network

    4. https://github.com/ethereum/go-ethereum/wiki/JavaScript-Console

    5. https://github.com/ethereum/go-ethereum/wiki/Mining

    6. https://github.com/ethereum/go-ethereum/wiki/Managing-your-accounts

    7. https://github.com/janx/ethereum-bootstrap

    展开全文
  • 区块链是目前一个比较热门的新概念,蕴含了技术与金融两层概念。本文以联盟链为例,简单描述了实践一个联盟链的基本过程。 作者 |陈浩,维优区块链CTO 首先要确定这个区块链...

    区块链是目前一个比较热门的新概念,蕴含了技术与金融两层概念。本文以联盟链为例,简单描述了实践一个联盟链的基本过程。


    640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1


    作者 |陈浩,维优区块链CTO


    先要确定这个区块链的类型,是公证型区块链还是价值型?


    公证型区块链是指仅限一些关键数据自证、披露、防篡改等功能的区块链,通常是在价值型区块链中附带的功能,也可以单独扩展,用于公示公开等。价值型区块链是指可以进行资产所有权转移的一种记账账本。


    如果确定是价值型区块链,我们又需要确定目标区块链的总体定位:到底是一个普适的价值传输区块链,还是特定场景下的区块链?如果是特定场景下的区块链,我们通常推荐超级账本作为技术原型,如果是比较通用的价值区块链,我们推荐以太坊的思路。


    业务场景的构建与初步分析


    首先要明确的观点是,区块链不是万能的。很多场景其实是不需要区块链技术也能解决的。像跨境支付领域,区块链能很好的发挥是因为存在很多点对点的跨境机构有大量的支付清算需求,而又不希望中间机构参与,区块链是很好的选择。但是在一些集团内部,大型公司内部,区块链解决方案基本上远远不如传统的企业资源解决方案。


    A、需求痛点分析


    一般需求痛点在满足以下条件的时候,可以考虑使用区块链:

    1. 存在一个不相互信任的P2P网络环境;

    2. 节点之间是对等的,不存在一个绝对仲裁者;

    3. 节点之间是博弈行为。

    P2P网络可能包含输入和输出,当包含输入和输出时,区块链不再封闭。


    对于某个节点一般有以下几种行为(包括但不限于):

    1. 不信任其他节点;

    2. 保证自己的收益最大化;

    3. 自私获取但不贡献资源。

    针对以上情景的业务建模,需要针对具体的业务逻辑结合博弈论推导出满足自己需求的方案。


    B、非区块链技术能否解决


    案例1:


    通常我们有不同的机构A、B、C,存在不对称的信息交换需求,即A、B、C分别具有部分数据,但三者组合到一起具有市场的全量数据。但是作为A,想知道B、C是否拥有自己数据集合中的某个点数据,根据这个结果来调整自己的购买策略。


    案例2:


    有不同的机构X、Y、Z,存在信息反馈的需求,当Z收到Y的服务时,会给Y一个信息反馈,这种反馈可能是信用评价,也可能只是响应反馈。总之这种反馈需要记录在案,X会根据Z的信息反馈结果调整自己的购买策略。当X购买服务时,同样会给Y一个反馈,Z也会收到反馈。


    以上两个案例首先考虑使用非区块链是否可以解决:


    针对案例1,敏感数据和私有数据是不会公开的,即使加密也不会被允许上传到区块链。所以产生了一个数据输入输出区块链的过程,该过程是区块链不可控制的。


    那么使用传统的技术是否可以控制呢?貌似也不行,能够满足不暴露敏感数据的方案也只有HASH计算和同态加密。但是这两者都要求数据传输到指定位置。

    通常我们会考虑使用零知识证明作为解决方案,然而具体的算法可能需要根据具体业务逻辑进行构建,结合简单智能合约,根据查询结果产生不同输出。


    针对案例2,反馈信息容易被篡改,可刷单等问题是最大的,如何保证这种信息反馈是客观中立不可篡改的,可以结合区块链代币的币龄使交易具有方向性来防止作弊行为。



    业务场景建模


    针对第二节中的两个案例,我们接下来要进行建模,除去核心痛点,我们必然还有记账的需求,本质上任何案例中每个节点都既是服务方,也是客户方,那么怎么衡量自己贡献和索取了多少呢?


    所以任何区块链平台上,必须是要有代币系统的,否则记账将非常困难。在业务场景建模过程中,我们主要关注如何使节点之间达成帕累托改进,而不是因为每个节点是自私行为,让区块链服务名存实亡。


    开发路径


    A、区块链原型选取


    根据本文开头的叙述,如果是特定场景的区块链解决方案,建议Hyperledger fabric,当然搭建以太坊私有链也是可以的。下面是一些以太坊和Fabric的比较:


    以太坊与HyperLedger相同点:


    1. 都是提供区块链业务实现的平台,业务实现都是通过智能合约来完成,以达到最大的灵活性和对底层的不修改。

      以太坊是:EVM虚拟机,Solidity合约语言;

      HyperLedger是: Shim链码容器,用GO编写合约。

    2. 官方版本都使用GO语言实现。

    3. 因为都是提供第三方可编程能力,由于难度大,内部难免存在漏洞。对外则存在恶意程序攻击的威胁。尤其是在做为公有链时,威胁将会更大。上个月以太坊已有报合约solidity语言漏洞。


    以太坊与HyperLedger不同点:


    1. 以太坊只提供智能合约能力。也恰好吻合它的定位:智能合约和去中心化应用平台。对系统安全性或准入机制无底层无核心上的支持。而HyperLedger在吸收以太坊智能合约特点的同时,提供MemberShip及身份验证角色管理等模块,更贴近商业应用场景。

    2. 共识机制不同。由于共识的不一样,所以每秒可处理的交易量也不一样,以太坊是每秒千级别的处理量,而HyperLedger可以达到十万级别。

    3. 采用的技术实现思路上不一样。以太坊更多的是靠自己实现,自己造轮子,有点开发人员炫技的感觉,如自己提供合约语言solidity,自己实现EVM(这个可能是实际需要)。


    表1是笔者曾经的一个私链项目中对两者的比较(私链考虑了Hydrachain的可行性)。


    640?wx_fmt=jpeg


    读者可以根据自己实际的TPS需求,进行共识的选型。表2是不同共识的一些参考数据。


    640?wx_fmt=jpeg


    当然,如果考虑自行开发,建议搭建基础比特币网络,做加法,更改共识算法,网络传送协议以及附加合约(可选)。


    其实智能合约在一些场景中不是必选项,对用户来说,可靠方便实时是第一需求,如果针对特定的应用场景,将“合约”固化在区块链里面,也是一种可行的思路。


    针对以上两种联盟链实现,笔者还想强调,并不是所有服务一定得是区块链的,笔者构想了一个通用的保护伞型结构,如比特币的侧链技术,主链提供基础账本服务,侧链提供特定场景服务,侧链上的应用可以是非区块链实现的,只需接口注册即可。


    640?wx_fmt=jpeg


    B、交互接口设计


    在交互接口设计上,推荐使用目前业界通用的Json-RPC接口,扩展性和友好性兼备。


    一般我们将接口分为两类:开放接口和账户接口。开放接口是指区块链本身的描述信息,是不需要认证的,而账户接口是需要账户认证的。


    C、基础账本设计


    基础账本设计包含以下两个问题:


    首先是原型区块链是否已经满足需求?如果针对以太坊,基本上不需要改动基础账本,只需构建智能合约即可。如果以比特币体系为基础,则可能有较大的改动。


    不满足需求时如何改动基础账本?这个其实要视账户模型而定,如果使用UTXO模式时,改动重点在如何嵌入模板交易体。如果使用Balance模式,那么则没有这个问题。


    D、业务扩展层设计


    业务扩展设计方面的内容比较复杂,篇幅问题这里也只是抛砖引玉提出两个问题:


    1. 扩展层是外接区块链还是内置到区块链?

    2. 如果包含数据输入,是否需要脱敏?脱敏后如何上链?


    先想清楚这两个问题或许能帮你更好地规划业务扩展层的内容。



    开发转变和难点


    A、开发思维的转变


    与传统网络服务不同的是,区块链开发不再以面向服务为主要关注点,而是面向账本和交易。


    开发者面对的不再是以高可用高并发的应用程序为主要指标,而是切换到了面向用户,关注用户友好性和开发扩展性的终端程序开发。


    所以高并发高性能不再是区块链终端的核心指标,安全性、可扩展性、友好性成了主要指标。


    图2是一个适用于联盟链/私有链项目的工作流程。

    640?wx_fmt=jpeg


    B、开发难点

    目前来讲,区块链项目开发的难点有三个:


    1. 开发人力资源储备不足


    目前比较成熟的技术体系有比特币及衍生技术体系、以太坊、超级账本HyperLedger fabric、比特股Bitshares、瑞波Ripple和未来币NXT。其中前三个是最有影响力的区块链项目。比特币以及衍生技术多以C++语言进行开发;以太坊支持大部分主流语言,官方以Go为主,也有其他分支的项目如Rust语言的Parity钱包;超级账本目前以Go为主。


    从目前上海地区的区块链从业人员来看,保守估计在400~500左右。按一半为开发人员计算,也才200多个,面对巨大的市场需求,人才是极度稀缺的。


    由于C++目前仅在金融和游戏领域有部分需求,所以C++工程师不多,尤其是高水平的C++工程师就更少了。Go作为新兴语言,发展势头很猛,但是Go的生态也不如Java大。


    如果从Java的角度看,如何把其生态利用起来,目前区块链还没有做到那个地步。


    综合来看,区块链在技术方面与其他技术的结合还有待探索。


    2. 区块链是交叉学科,需要各方面工程实践的经验


    在实践方面,我们希望区块链从业人员同时了解技术和金融业务,这个对人员的素质要求比较高,相应的符合标准的人就更少了。


    3. 关于对各个区块链技术体系理解的偏差。区块链技术和概念日新月异,闭门开发可能会走到死胡同,如何保持一部分精力更新知识体系,同时保证开发进度对开发人员是有较大挑战的。


    区块链作为一门新兴的技术,涵盖了去中心化、去信任、共享经济、分布式计算、分布式存储等多方面的内容,考验着技术人员的学习和思考能力。在未来,区块链将同人工智能一起,会影响到普通人生活的方方面面。



    640?wx_fmt=png


    作者简介:陈浩,维优区块链CTO,曾任埃森哲高级软件工程师,擅长C++/Python语言,多年清算支付系统开发经验。万向区块链实验室2016上海区块链黑客马拉松比赛第三名,开源项目Libbitcoin开发组成员。


    展开全文
  • 10小时掌握区块链开发教程

    万人学习 2018-08-15 17:43:04
    10小时掌握区块链技术开发培训课程,共有八个课时,分别是区块链未来与技术成长路线分析、构建以太坊合约、用区块链开发小程序、区块链技术栈与生态现状、手机挖矿区块链架构设计难题与思路、用区块链实现世界杯足彩...
  • 如何成为区块链开发人员

    千次阅读 2019-06-18 14:25:00
    目前的区块链现象是以极其强大的存在形式进行着技术革命,这将在不久的将来成为改变游戏规则的方式,并且是区块链开发人员技能提升的必要条件。区块链应用程序可以使每个领域受益; 这就是为什么需要个人或团队来帮助...
  • 区块链开发主流编程语言居然是Go语言!? 一、区块链与分布式的关系 目前区块链概念正在大面积普及。很多人感觉这个东西好抽象,没有什么落地的东西,今天这里主要介绍一下区块链的一些落地项目和有关区块链技术...
  •   最近开始学习区块链了,准备先在虚拟机上搭建环境体验一下挖矿的感觉 一、安装geth客户端   geth是以太坊主要的两个客户端软件之一,另一个是Parity。 依次运行 安装完成后检查是否安装成功:geth version 二...
  • 一.安装go-ethereum客户端 Go-ethereum客户端通常被称为Geth,它是个命令行界面,执行在Go上实现的完整以太坊节点。 附上客户端的下载链接 Geth下载链接 下载安装完毕后,需要设置系统的环境变量,然后要在cmd中...
  • 谈谈目前我对区块链(Blockchain)的认识

    万次阅读 热门讨论 2016-11-27 21:16:31
    从 IBM Bluemix 云平台...前些天看到“关于区块链,你在畅想它,还是开启它?”的话题,根据自己的了解发了一下自己的一点不成熟的看法。为了更深入的了解它,昨天又去参加了“区块链技术与互联网金融的创新和挑战 ”
  • 区块链开发技术路线选择的思考(之一)

    万次阅读 多人点赞 2016-10-01 22:35:43
    现在整个技术社区的注意力主要还是在 Web 和移动开发上面,相关人才供销两旺。不过个别有心人已经开始转向大数据分析、深度学习、VR/AR 这些...最近几个月区块链非常火,所以也有极少数开发者在关注区块链开发技术。
  • http://www.8btc.com/wp-content/uploads/2016/08/08272156270%E5%8C%BA%E5%9D%97%E9%93%BE%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3-%E5%85%AC%E5%BC%80%E7%89%88_128.jpeg
  • 区块链应用开发入门

    万次阅读 2016-09-02 11:18:49
    很多人想运用区块链,都找不到突破口,应该学习哪些知识和技术呢,应该用什么样的区块链呢?这篇文章为你解读。
  • 区块链开发

    2018-03-10 14:16:19
    区块链开发(零)如何开始学习以太坊及区块链 区块链应用开发入门 比特币区块链代码分析 以太坊爱好者 go-ethereum编译 备注:pkg install go 无法安装的话,百度 go语言环境配置, 若出现:exec: "gcc&...
  • 区块链开发技术综述

    千次阅读 2017-01-19 16:11:24
    一年前开始关注区块链技术及其行业应用前景,对比特币、以太坊、超级总账和BigchainDB四个主要区块链技术流派都进行过考察和研究,形成了在中国应用区块链技术的观点和思路。 责编:贾维娣(jiawd@csdn.net)微信...
  • 区块链开发入门

    千次阅读 2018-04-24 10:47:42
    那么,要掌握区块链开发技术,应该学习哪些知识,应该学习哪些编程语言,才能快速入门区块链编程? 如果你希望马上开始学习以太坊区块链应用开发,可以访问汇智网提供的出色的在线互动教程: - 以太坊应用开发...
  • 本书力求用少的篇幅来向读者阐释Node.js区块链开发的相关内容。本书共五部分:*部分详细讲述了区块链产品——加密货币的相关概念;第二部分详细介绍了Node.js入门知识,并通过一个具体项目,完成对Node.js在区块链...
  • Ethereum(以太坊)是一个使开发人员能够建立和发布下一代分布式应用的公共区块链平台。 通过其专用加密货币以太币(Ether)提供去中心化的虚拟机(称为“以太虚拟机”Ethereum Virtual Machine)来处理点对点合约。...
  • 区块链入门开发视频,从基础知识介绍到开发入门,最后结合项目实例来进行讲解,适合区块链入门人员学习!
  • 区块链开发的环境搭建

    万次阅读 2016-10-09 19:38:25
    区块链开发(一)搭建基于以太坊的私有链环境    通过本文所述方法和项目中的脚本,我们可以快速的搭建好自己的私有链进行区块链开发测试,本文基于以太坊技术进行搭建,分两个部分,一个是Ubuntu下搭建方法,另...

空空如也

1 2 3 4 5 ... 20
收藏数 66,095
精华内容 26,438
关键字:

区块链开发