区块链
文章平均质量分 79
尹成
尹成微信18510341407,助理微信18514203048
展开
-
区块链2.0以太坊配置solidity编译器sublime详解
官网:https://www.sublimetext.com/3,下面使用最新3134设置字体大小和默认编码注册码:Valild Keys—– BEGIN LICENSE —–TwitterInc200 User LicenseEA7E-8900071D77F72E 390CDD93 4DCBA022FAF6079061AA12C0 A37081C5 D03164124584D13694D7F7D...原创 2018-04-30 22:46:39 · 2650 阅读 · 2 评论 -
区块链2.0以太坊智能合约solidity之helloworld
由于只能合约是放在区块链上面的代码,这给我们的调试带来了很多的困难,还好有在线的编译器:https://remix.ethereum.org第一个代码:pragma solidity ^0.4.4;contract Counter {uint count = 0;address owner;constructor() public{ owner = msg.sender; }function ...原创 2018-04-30 23:52:36 · 2170 阅读 · 1 评论 -
区块链共识算法(6)分布式一致性算法2PC和3PC
# 分布式一致性算法2PC和3PC为了解决分布式一致性问题,产生了不少经典的分布式一致性算法,本文将介绍其中的2PC和3PC。2PC即Two-Phase Commit,译为二阶段提交协议。3PC即Three-Phase Commit,译为三阶段提交协议。### 分布式系统和分布式一致性问题分布式系统,即运行在多台不同的网络计算机上的软硬件系统,并且仅通过消息传递来进行通信和协调。分布式一致性问题,...原创 2018-05-17 12:49:35 · 791 阅读 · 0 评论 -
以太坊Solidity类型介绍+实战
Solidity 语法的介绍会是一系列文章,本文是第一篇:介绍 Solidity 的变量类型。本文前半部分是参考 Solidity0.4.20 版本官方文档(当前最新版本)进行翻译,然后是实际合约代码实例说明类型的使用。类型Solidity 是一种静态类型语言,意味着每个变量(本地或状态变量)需要在编译时指定变量的类型(或至少可以推倒出类型)。Solidity提供了一些基本类型可以用来组合成复杂类...原创 2018-05-04 16:10:50 · 846 阅读 · 0 评论 -
Solidity 教程系列2 - 地址类型介绍
地址类型(Address)地址类型address是一个值类型,地址: 20字节(一个以太坊地址的长度),地址类型也有成员,地址是所有合约的基础支持的运算符:§ <=, <, ==, !=, >= 和 >注意:从0.5.0开始,合约不再继承自地址类型,但仍然可以显式转换为地址。地址类型的成员§ balance 属性及transfer() 函数 这里是地址类型相关成员的快速...原创 2018-05-04 16:25:56 · 1145 阅读 · 0 评论 -
以太坊源码分析(3)以太坊交易手续费明细
网址:http://www.qukuailianxueyuan.io/欲领取造币技术与全套虚拟机资料区块链技术交流QQ群:756146052 备注:CSDN尹成学院微信:备注:CSDN原创 2018-05-13 10:03:45 · 2719 阅读 · 0 评论 -
区块链最全线上培训大纲——尹成学院
区块链乃大势所趋,尹成学院联合微软加清华名师打造最强教学团队。传播智慧我们用心,人生冲锋你们用力第一阶段 区块链与Go编程第1天区块链与Go语言区块链的前世今生区块链现状与就业区块链前景区块链与go语言go语言开发环境的搭建 第2天 Go语言基础标识符关键字字面量操作符表达式 第3天 Go基本类型和高级类型基本类型数组切片字典函数和方法接口结构体 第4天 Go流程控制代码块和作用域If语句Swit...原创 2018-04-28 15:42:11 · 4449 阅读 · 1 评论 -
区块链最全线下培训大纲——尹成学院
区块链乃大势所趋,尹成学院联合微软加清华名师打造最强教学团队。传播智慧我们用心,人生冲锋你们用力第一阶段:区块链及其行业及Golang编程第一周- Go语言快速入门:(a)了解区块链从业人员的薪资结构组成(b)了解区块链公司中的职能分类(c)如何快速转型成为区块链高端人才(d)如何得到区块链公司就业机会(e)区块链现状(f)区块链趋势(g)区块链的前景 Go语言基础:1.1初识go语言1.2开发环...原创 2018-04-28 16:12:40 · 8665 阅读 · 1 评论 -
EOS源码分析(1)安装
目前EOS 项目主要支持两类系统,分别是Ubuntu 和 MacOS Sierra,本地的EOS安装,目前有三种形式,你可以根据自己的喜好进行选择。 - 下载安装包:从Dawn3.0 版本,项目直接提供了安装包,方便开发人员安装- 通过自动化安装脚本安装:项目提供了自动安装脚本,脚本会安装所需要的依赖库,并编译EOS项目- 手动安装:手动安装依赖库,并编译源代码。## 下载安装包从3.0 版本以...原创 2018-05-13 22:45:52 · 864 阅读 · 0 评论 -
EOS源码分析(2)EOS运行
EOS 安装完毕后,就可以运行EOS 程序了。目前支持三种方式的运行,分别是:- 本地私有节点运行 在本地局域网中部署EOS节点,提供EOS服务,节点可以单个,也可以部署多节点- 在测试公网下运行 Block.One 公司提供了测试的公网环境,你可以使自己部署的节点连接公网测试环境- Docker 中运行 ## 本地私有节点运行EOS为了能够方便开发者测试,目前在公网...原创 2018-05-13 22:47:04 · 1391 阅读 · 0 评论 -
EOS源码分析(3)案例分析
EOS 项目在建构了一套去中心化的可信网络的同时,提供的最重要的功能就是智能化合约,智能合约能够使用一种透明的方式来转移和交换资金或财产,而不需要通过中间人,接下来我们就一起通过一个案例分析下如何在EOS上建立智能合约。## 运行EOS节点智能合约是在EOS节点中运行的,因此要首先把EOS节点运行起来,在这里,我们运行一个本地节点,命令如下:```cd path-to-eos/build/prog...原创 2018-05-13 22:48:27 · 1016 阅读 · 0 评论 -
EOS源码分析(5)账号
# EOS 账号EOS 的账号系统可以说在当前的公链系统中是非常完善的,在进一步理解EOS的账号系统以前,让我们先看一下区块链中其他公链的账户系统是怎样设计的。大家都知道,区块链上的第一个应用就是比特币,它创建了一种点对点的电子货币系统。由于是一套货币系统,因此它主要针对的是货币的产生,点对点货币支付等场景,在这套系统中,设计的视角是从货币出发的,系统中仅有交易地址的概念,并没有账号的概念。 ...原创 2018-05-13 22:52:19 · 1391 阅读 · 0 评论 -
EOS源码分析(6)Token
# Token(通证)区块链一直就有币圈和链圈之分,币圈的人有的埋头挖矿,有的专卖矿机,有的专心炒币,还有的搬砖套利做交易。而链圈的人则更关注区块链技术研发及应用。之前这两个圈子间相互鄙视,谁也看不起谁,币圈的人鄙视链圈贫穷,装清高;链圈的人鄙视币圈只知道炒作投机,唯利是图。但这一切都已成为过去,2015年末,以太坊的上线为两圈融合提供了可能,通过以太坊发行自己的Token(也就是常说的发币,后续...原创 2018-05-13 22:54:01 · 1283 阅读 · 0 评论 -
EOS源码分析(7)目录结构
# EOS 源码分析区块链的概念首次在2008年末由中本聪(Satoshi Nakamoto)在比特币论文《Bitcoin: A Peer-to-Peer Eletronic Cash Sytem》中提出,论文中区块链技术是构建比特币数据结构与交易信息加密传输的基础技术,该技术实现了比特币的挖矿与交易。 随着电子货币的概念被更多的人所接受,其背后的区块链技术也进一步被更多的技术人员和商业人员充分...原创 2018-05-13 22:56:46 · 2918 阅读 · 1 评论 -
以太坊源码分析(1)go-ethereum的设计思路及模块组织形式
go-ethereum的设计思路及模块组织形式===================================以太坊的目标是基于区块链技术打造一个运行智能合约的去中心化平台。## 一. 区块链技术区块链属于一种去中心化的数字记账技术,区块链数据由彼此互不信任的节点共同维护,每个节点复制一份完整的记录。## 二. 以太坊核心概念* EVM: 以太坊虚拟机,轻量级的虚拟机环境,是以太坊智能合约的...原创 2018-05-13 23:05:41 · 5221 阅读 · 1 评论 -
以太坊源码分析(5)accounts代码分析
## 1.personal.newAccount创建账户方法用户在控制台输入personal.newAccount会创建一个新的账户,会进入到ethapi.api中的newAccount方法中,这个方法会返回一个地址。``` func (s *PrivateAccountAPI) NewAccount(password string) (common.Address, error) { ac...原创 2018-05-13 23:25:53 · 2572 阅读 · 0 评论 -
以太坊源码分析(7)Ethereum 资源分享
# Awesome Ethereum [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)> collection of best r...原创 2018-05-13 23:28:55 · 3027 阅读 · 0 评论 -
以太坊源码分析(8)区块分析
## 区块存储区块的存储是由leveldb完成的,leveldb的数据是以键值对存储的。在这里保存区块信息时,key一般是与hash相关的,value所保存的数据结构是经过RLP编码的。在代码中,core/database_util.go中封装了区块存储和读取相关的代码。在存储区块信息时,会将区块头和区块体分开进行存储。因此在区块的结构体中,能够看到Header和Body两个结构体。区块头(He...原创 2018-05-13 23:30:51 · 1339 阅读 · 0 评论 -
以太坊源码分析(9)cmd包分析
### cmd包概述* geth 主要Ethereum CLI客户端。它是Ethereum网络(以太坊主网,测试网络或私有网)的入口点,使用此命令可以使节点作为full node(默认),或者archive node(保留所有历史状态)或light node(检索数据实时)运行。 其他进程可以通过暴露在HTTP,WebSocket和/或IPC传输之上的JSON RPC端点作为通向Ethereum网...原创 2018-05-13 23:33:19 · 945 阅读 · 0 评论 -
以太坊源码分析(10)CMD深入分析
### cmd包分析#### cmd下面总共有13个子包,除了util包之外,每个子包都有一个主函数,每个主函数的init方法中都定义了该主函数支持的命令,如##### geth包下面的:```func init() { // Initialize the CLI app and start Geth app.Action = geth app.HideVersion = tru...原创 2018-05-13 23:36:26 · 1679 阅读 · 0 评论 -
以太坊源码分析(11)eth目前的共识算法pow的整理
### eth目前的共识算法pow的整理##### 涉及的代码子包主要有consensus,miner,core,geth```/consensus 共识算法 consensus.go 1. Prepare方法 2. CalcDifficulty方法:计算工作量 3. AccumulateRewards方法:计算每个块的出块奖励 ...原创 2018-05-13 23:39:52 · 6960 阅读 · 0 评论 -
以太坊源码分析(12)交易数据分析
## 交易的数据结构交易的数据结构定义在core.types.transaction.go中,结构如下:``` type Transaction struct { data txdata // caches hash atomic.Value size atomic.Value from atomic.Value }...原创 2018-05-13 23:41:35 · 2013 阅读 · 0 评论 -
以太坊源码分析(14)P2P分析
#概述Kademlia(简称Kad)是一种分布式哈希表技术,用于建立p2p网络拓扑结构。基本原理就是以两个节点ID的异或值作为两节点间的距离d,每个节点都将其他节点的信息存储到称之为K桶的表结构中,该表结构按照d的为1的最高bit位分层(可理解为桶索引),每层中存储最多K个节点信息。如下: | I | 距离范围 | 邻居 ||:---:|:---------:|:---...原创 2018-05-13 23:46:04 · 1577 阅读 · 1 评论 -
区块链2.0以太坊漫谈(3)
进一步的应用:(1)储蓄钱包。 假设Alice想确保她的资金安全,但她担心丢失或者被黑客盗走私钥。她把以太币放到和Bob签订的一个合约里,如下所示,这合同是一个银行:(1)Alice单独每天最多可提取1%的资金。(2)Bob单独每天最多可提取1%的资金,但Alice可以用她的私钥创建一个交易取消Bob的提现权限。(3)Alice 和 Bob 一起可以任意提取资金。 一般来讲,每天1%对Alice足...原创 2018-04-28 20:24:22 · 1443 阅读 · 0 评论 -
区块链2.0以太坊漫谈(4)
智能合约什么是智能合约以太坊上的程序称之为智能合约, 它是代码和数据(状态)的集合。智能合约可以理解为在区块链上可以自动执行的(由消息驱动的)、以代码形式编写的合同(特殊的交易)。智能合约英文是Smart Contract,和人工智能( AI:Artificial Intelligence )的智能没有关系,最早尼克萨博在95年就提出智能合约的概念,它的概念很简单,就是将法律条文写成可执行代码。当...原创 2018-04-28 20:25:37 · 1393 阅读 · 1 评论 -
btcpool矿池源码分析(2)-核心机制总结及优化思考
# btcpool矿池-核心机制总结及优化思考## 核心机制总结### ①gbtmaker* 监听Bitcoind ZMQ中BITCOIND_ZMQ_HASHBLOCK消息,一有新块产生,将立即向kafka发送新Gbt* 另默认每5秒间隔(可从配置文件中指定)主动RPC请求Bitcoind,获取Gbt发送给kafka* Gbt消息大小约2M,含交易列表### ②jobmaker* 同时监听kafk...原创 2018-05-20 10:21:00 · 3403 阅读 · 1 评论 -
btcpool矿池源码分析(3)-BlockMaker模块解析
# btcpool矿池-BlockMaker模块解析## 核心机制总结* blkmaker可以连多个bitcoind节点* blkmaker监听和接收4类消息:RAWGBT、STRATUM_JOB、SOLVED_SHARE和NMC_SOLVED_SHARE* 监听RAWGBT目的为获取gbtHash/交易列表,用于构建Block,gbtHash和vtxs写入rawGbtMap_ * rawGbt...原创 2018-05-20 10:22:20 · 1414 阅读 · 0 评论 -
以太坊源码分析(17)Internal包简介
## Internal包简介Internal包主要是封装了js的命令行界面,并且包含了命令行所调用的api信息。## ethapi/api包分析ethapi/api包主要是进入js的命令行界面后,输入的命令实现部分。<br>js的命令实现在ethapi/api和node/api中。目前一共有三种api的命令。<br>(1)第一种是admin相关的命令,这个是通过安全的RPC...原创 2018-05-13 23:50:59 · 1571 阅读 · 0 评论 -
以太坊源码分析(19)core-blockchain分析
从测试案例来看,blockchain的主要功能点有下面几点.1. import.2. GetLastBlock的功能.3. 如果有多条区块链,可以选取其中难度最大的一条作为规范的区块链.4. BadHashes 可以手工禁止接受一些区块的hash值.在blocks.go里面.5. 如果新配置了BadHashes. 那么区块启动的时候会自动禁止并进入有效状态.6. 错误的nonce会被拒绝.7. 支...原创 2018-05-14 08:51:44 · 2231 阅读 · 0 评论 -
以太坊源码分析(20)core-bloombits源码分析
# scheduler.goscheduler是基于section的布隆过滤器的单个bit值检索的调度。 除了调度检索操作之外,这个结构还可以对请求进行重复数据删除并缓存结果,从而即使在复杂的过滤情况下也可以将网络/数据库开销降至最低。### 数据结构request表示一个bloom检索任务,以便优先从本地数据库中或从网络中剪检索。 section 表示区块段号,每段4096个区块, bit代表检...原创 2018-05-14 08:53:44 · 1416 阅读 · 0 评论 -
以太坊源码分析(21)chain_indexer 区块链索引
## chain_indexer 区块链索引chain_indexer.go 源码解析chain_indexer 顾名思义, 就是用来给区块链创建索引的功能。 之前在eth协议的时候,介绍过BloomIndexer的功能,其实BloomIndexer是chain_indexer的一个特殊的实现, 可以理解为派生类, 主要的功能其实实在chain_indexer这里面实现的。虽说是派生类,但是cha...原创 2018-05-14 08:55:29 · 2303 阅读 · 0 评论 -
以太坊源码分析(22)core-genesis创世区块源码分析
genesis 是创世区块的意思. 一个区块链就是从同一个创世区块开始,通过规则形成的.不同的网络有不同的创世区块, 主网络和测试网路的创世区块是不同的.这个模块根据传入的genesis的初始值和database,来设置genesis的状态,如果不存在创世区块,那么在database里面创建它。数据结构 // Genesis specifies the header fields, ...原创 2018-05-14 08:57:02 · 1846 阅读 · 0 评论 -
以太坊源码分析(23)core-state-process源码分析
## StateTransition状态转换模型 /* The State Transitioning Model 状态转换模型 A state transition is a change made when a transaction is applied to the current world state 状态转换 是指用当前的world state来执行交易...原创 2018-05-14 08:59:05 · 947 阅读 · 0 评论 -
以太坊源码分析(24)core-state源码分析
core/state 包主要为以太坊的state trie提供了一层缓存层(cache)- database主要提供了trie树的抽象,提供trie树的缓存和合约代码长度的缓存。- journal主要提供了操作日志,以及操作回滚的功能。 - state_object是account对象的抽象,提供了账户的一些功能。 - statedb主要是提供了state trie的部分功能。## databas...原创 2018-05-14 09:00:32 · 1515 阅读 · 1 评论 -
以太坊源码分析(25)core-txlist交易池的一些数据结构源码分析
## nonceHeapnonceHeap实现了一个heap.Interface的数据结构,用来实现了一个堆的数据结构。 在heap.Interface的文档介绍中,默认实现的是最小堆。如果h是一个数组,只要数组中的数据满足下面的要求。那么就认为h是一个最小堆。 !h.Less(j, i) for 0 <= i < h.Len() and 2*i+1 <= j <= ...原创 2018-05-14 09:01:59 · 1030 阅读 · 0 评论 -
以太坊源码分析(28)core-vm-stack-memory源码分析
vm使用了stack.go里面的对象Stack来作为虚拟机的堆栈。memory代表了虚拟机里面使用的内存对象。## stack比较简单,就是用1024个big.Int的定长数组来作为堆栈的存储。构造 // stack is an object for basic stack operations. Items popped to the stack are // expected to...原创 2018-05-14 09:06:05 · 647 阅读 · 0 评论 -
以太坊源码分析(29)core-vm源码分析
## contract.gocontract 代表了以太坊 state database里面的一个合约。包含了合约代码,调用参数。结构 // ContractRef is a reference to the contract's backing object type ContractRef interface { Address() common.Addres...原创 2018-05-14 09:07:22 · 1277 阅读 · 1 评论 -
以太坊源码分析(30)eth-bloombits和filter源码分析
## 以太坊的布隆过滤器以太坊的区块头中包含了一个叫做logsBloom的区域。 这个区域存储了当前区块中所有的收据的日志的布隆过滤器,一共是2048个bit。也就是256个字节。而我们的一个交易的收据包含了很多的日志记录。 每个日志记录包含了 合约的地址, 多个Topic。 而在我们的收据中也存在一个布隆过滤器,这个布隆过滤器记录了所有的日志记录的信息。如果我们看黄皮书里面对日志记录的形式化定义...原创 2018-05-14 09:09:26 · 2978 阅读 · 1 评论 -
以太坊源码分析(31)eth-downloader-peer源码分析
peer模块包含了downloader使用的peer节点,封装了吞吐量,是否空闲,并记录了之前失败的信息。## peer // peerConnection represents an active peer from which hashes and blocks are retrieved. type peerConnection struct { id st...原创 2018-05-14 09:11:00 · 782 阅读 · 0 评论 -
以太坊源码分析(32)eth-downloader-peer源码分析
queue给downloader提供了调度功能和限流的功能。 通过调用Schedule/ScheduleSkeleton来申请对任务进行调度,然后调用ReserveXXX方法来领取调度完成的任务,并在downloader里面的线程来执行,调用DeliverXXX方法把下载完的数据给queue。 最后通过WaitResults来获取已经完成的任务。中间还有一些对任务的额外控制,ExpireXXX用来...原创 2018-05-14 09:12:06 · 958 阅读 · 0 评论