区块链开发

区块链技术已经有很久了,但是目前区块链相关的技术博客不多,鱼龙混杂,我在学习的过程中,很少能找到有用的东西。尤其是区块链的知识原理,更是少之又少。学习的时候也是一头雾水。现在我分享一下我学区块链的思路。

在开始之前,有一个很重要的东西需要说:如果要学习区块链开发,你学习的第一步是学习区块链的原理!!!只有知道原理,你才能在之后的开发中解决问题,尤其是想进阶一定要掌握底层原理。

1.什么是区块链

区块链,从名字上觉得这是一个链状的东西,那么具体是怎么个链发呢?其实是数据存储的链,区块链的挖矿节点将交易数据验证完合法性后按照区块链协议进行打包,并把自己打的包串在链上。串在链上的方式类似于c++的链表,只不过每个链标记上一个区块的地方是哈希指针,即能找到上一个区块也能验证上一个区块的数据。这样将数据串联在一起形成的链就是区块链内的数据,区块链本身不只是数据,还有协议。协议是定义在区块链的文档内的,然后在实现区块链的时候,程序员按照协议的要求把协议转换为区块链的规则。

这里推荐一个区块链比较好的视频:哔哩哔哩搜索【北京大学肖臻老师《区块链技术与应用》公开课】,讲的太精彩了。视频包含区块链原理、密码学等等,看完这个再来学区块会特别轻松。

2.区块链工作原理

整体上来说,区块链是一个记账过程,这个账可以是任何数据的记账。但是这个记账是有特点的。首先有人交易了,就把这个交易广播到所有节点,节点把交易放到交易池里面,然后更具优先算法,选择先验证哪些交易,验证交易就是看一看这个交易合法性,有没有伪造信息,验证完后放到区块里面。区块大小是有限制的,当交易的数量填满一个区块的时候,需要对区块进行打包。这个打包也是有要求的,要满足打包后的哈希值满足一定的规则。为了满足这个规则,就要求我们朝包里面加一些额外的东西,调整数据来满足规则,加什么才能满足呢?这个谁也不确定,只能不停重复尝试不同的内容,直到找到一个合适的东西。打包完成后,几点就把包广播出去,其他节点验证这个包是不是合法的,再验证包里面的交易是不是合法的,如果验证通过,就把这个包在自己本地的链上写上去,然后更新自己交易池,把已经打包的交易都从交易池去除。这样就完成了一整个过程。

看完这个你会有很多疑问:

首先,节点之间是如何广播的?节点在搭建的时候,需要一个根节点。这个根节是在区块链网络上的任意一个节点。但是一般区块链官方会给几个固定不变的根节点。当我们添加了根节点之后,我们的节点会告诉根节点我是你们的伙伴根几点回吧它知道的所有节点都告诉我们的节点,同时根节点再告诉它认识的其他节点,我这新来了一个小伙伴,节点之间互相转告,就能够保证消息被广播出去,同时节点收到相同的广播消息就自动丢弃,避免消息回环。交易信息的广播也是一样,大家互相转告已达到广播效果。

验证交易合理性是验证些什么?验证交易合理性就是看看交易是不是有效的。比如说A账户给B账户转账100个以太币,那么要看看这个交易有没有A账户的签名(只有账户拥有者可以签名,签名无法伪造),再看看A账户是不是真的有那么多钱,从而避免伪造交易。

区块大小是如何限制的?比特币是直接限制区块的大小,以太坊不一样,以太坊上面每一个交易是有花费的,收费是按照计算步骤收费(例如算一个加法操作需要10gas,一个乘法操作需要100gas),区块大小是限制这个区块只能做1000gas的操作。假如一个交易要执行11个乘法导致需要消耗1100个gas,那么这个区块就不能够打包这个交易会超过打包区块大小。以太坊协议说你区块大小是可以调整的,每次打包可以调整1/2048,如果每个打包节点都觉得小,只要打包2048次之后,包的大小就能扩大一倍。虽然看起来调整幅度很小,但是平均10秒出一个区块的话,这个增长速度就很恐怖了。

区块链的核心思想是去中心化,用大量的节点保证数据安全性和不可篡改性。去中心化的意思是没有哪个节点是中心节点,所有全节点均存储着区块链的完整数据,每一个数据的合法性是由大部分节点共同验证的。

区块链工作原理就是分布在不同地域和网络的计算机,在一个交易发起后,所有机器一起验证交易是否合法,然后把合法的交易打包并且记录,并将打包结果广播给每一个节点,达到大家都在记账并且记账的内容一致。


3.区块链应用

区块链应用主要在金融、重要数据存储等等场合,对比常规项目,区块链项目是把数据库部分变为区块链,使用区块链存储数据代替数据库存储数据,也有混合存储的模式。由于目前公链交易花费比较高,大部分项目落地为联盟链项目或者私链项目。


非区块链项目



区块链项目

在项目中,通过使用web3库可以和以太坊客户端交互。

4.区块链的搭建

下载geth客户端,编写创世区块文件,初始化区块链,启动节点、创建账户、开启挖矿。搭建多节点时,每个节点均需要使用创世区块json文件初始化。创建之后需要添加种子节点(已经在链内的任意节点均可)。若两个节点始终不能互通,要么是没有使用同一个创世区块json初始化,要么是没有开发rpc或者防火墙没有开放端口。

注意:正常情况,账户在交易的时候需要解锁,正常情况解锁300miao后自动上锁,若部署智能合约后,需要长期解锁账户的,需要在启动命令添加 --unlock “账户地址” --password "存储解锁账户密码的文件" ,其中存储账户解锁密码的文件可以是一个文本文件,里面只填写你的密码即可。在交易发生后,需要有节点挖矿才能完成数据的上链工作,若整个私链没有挖矿节点,将只能查看区块链数据,但不能写入数据到区块链(包括发布交易)。

若搭建私链,在执行挖矿后,由于我们的交易池基本是空的,区块的gaslimit会随着区块的增减一点点减小到4312388,若需要大量数据存储时,要配置以太坊私链的gasLimit不会自动调整。暂时不知道如何配置,后续会补充。

5.智能合约的开发

目前开发智能合约主要是solidity语言开发,这个语言比较晦涩和反常态,不用很复杂的逻辑实现起来就很不容易(比如自己拼接json字符串),所以智能合约只能完成基本的工作,遇到数据处理需建议将数据拿到后由js、java等等高级语言处理。

6.智能合约部署与调用

java有web3j插件库可以使用、JavaScript可以使用web3库,通过这些库文件完成与以太坊客户端交互。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容

  • 6.1项目介绍 以太坊是一个通用的全球性区块链,属于公有链,可以用来管理金融和非金融类型的应用,同时以太坊也是一个...
    冉冉升起的沙丁鱼阅读 699评论 0 0
  • 本文列出2019年最新整理的用于区块链开发的43种流行的开发库、开发工具与开发框架。 1、MetaMask 人人都...
    编程狂魔阅读 2,143评论 0 1
  • 【晨间日记】1114-2018(目标) 【与光同步】 2018.11.14(星期三) 晨间检视 昨日午休/冥想 今...
    王苏言阅读 107评论 0 1
  • 你好,今天累吗?有没有开心的事情分享一下?好像听哦~ 好吧,我承认,今天我有点孤单,好想跟你说说话,好想你会抱抱我...
    落英飞扬阅读 56评论 0 0
  • 又没起来,有时候想和做,距离很远。走出舒适区,也要坚持下去,才会有效果吧。小目标混乱,什么都想做,什么都没做,应该...
    小殊阅读 156评论 0 0