区块链核心技术:委任权益证明算法DPoS

委任权益证明Delegated Proof of Stake(简称DPoS)是比特股BitShares采用的区块链公识算法。在加密货币技术中,使用共识算法来保证整个区块链网络的安全可靠,著名的共识算法包括比特币网络使用的工作量证明PoW,以及Peercoin和NXT使用的权益证明PoS。但是,这些共识算法都不能解决交易性能问题,尤其是PoW算法大量消耗计算所需的电力。而委任权益证明DPoS很好地解决了性能和能耗的问题。 背景 DPoS算法中使用见证人机制(witness)解决中心化问题。总共有N个见证人对区块进行签名,而这些见证人由使用区块链网络的主体投票产生。由于使用了去中心化的投票机制,DPoS相比其他的系统更加民主化。DPoS并没有完全去除对于信任的要求,代表整个网络对区块进行签名的被信任主体在保护机制下确保行为正确而没有偏见。另外,每个被签名的区块都有先前区块被可信任节点签名的证明。 »

物联网与区块链

区块链技术不仅将深刻地影响和改变金融行业,在物联网领域也将起到革命性的作用。物联网(Internet of Things,简称IoT)是一种通过网络技术将传感器、控制器和机器设备等连接起来,通过物物相连实现机器设备智能化管理和控制的目的。互联网技术将全世界的计算机连接在一起,实现了人与人之间的远程信息交流,促进了人类文明的巨大进步。而物联网技术将现实世界中的各种设备连接在一起,必然会帮助人类迈向更加智能和便捷的未来社会。 随着技术的不断进步,物联网技术的发展和应用在最近几年取得了显著的成果,目前在世界范围内已经有数十亿个传感器和智能控制器投入使用,预计在未来几年这个数字还会成倍的增长。但是,物联网技术也面临着许多问题和挑战,这些问题有可能成为物联网在未来发展和应用的巨大障碍,而区块链技术给这些问题的解决提供可能性。 1、降低物联网的运营成本 随着物联网技术的进一步应用, »

区块链核心技术:拜占庭共识算法之PBFT

PBFT是Practical Byzantine Fault Tolerance的缩写,意为实用拜占庭容错算法。该算法是Miguel Castro (卡斯特罗)和Barbara Liskov(利斯科夫)在1999年提出来的,解决了原始拜占庭容错算法效率不高的问题,将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行。该论文发表在1999年的操作系统设计与实现国际会议上(OSDI99)。没错,这个Loskov就是提出著名的里氏替换原则(LSP)的人,2008年图灵奖得主。 摘要部分 OSDI99这篇论文描述了一种副本复制(replication)算法解决拜占庭容错问题。 »

以太坊技术详解(1)概述

以太坊是什么? 以太坊(ethererum)是一个开放的区块链平台,任何人都可以基于以太坊构建和使用运行于区块链技术之上的去中心化应用程序。和比特币一样,以太坊不受任何人的控制,因为该平台是一个由世界上很多人共同构建的开源项目。但是和比特币协议不同,以太坊在设计上更加注重适应性和灵活性。在以太坊平台上创建新的应用程序很容易,并且在家园(Homestead)发布版中使用这些应用也是安全的。 次世代区块链 区块链是比特币的技术基础,最早由比特币神秘的作者中本聪在他2008年发布的白皮书《比特币:一种点对点的电子现金系统(Bitcoin: A Peer-to-Peer Electronic Cash System)》中进行了描述。 »

Hyperledger详解(3)协议

Fabric的点对点通讯是基于gRPC构建的,实现了基于流的双向消息通讯。gRPC使用了谷歌公司的Protocol Buffers对数据结构进行串行化来实现节点之间的数据传输。Protocol buffers是一种语言中立、平台中立、并且可扩展的数据结构串行化技术。数据结构、消息和服务都是用proto3语言描述。 3.1 消息 节点之间传输的消息是由Message这个proto结构封装的,有四种不同的类型:发现(Discovery)、交易(Transaction)、同步(Synchronization)和共识(Consensus)。每种类型都可以在其内嵌的payload字段中定义更多的子类型。 message Message »

Hyperledger详解(2)构架

2.1 Fabric构架 Fabric的构架由成员服务(Membership)、区块链服务(Blockchain)和链码服务(Chaincode)三个主要类别构成。这些类别仅仅是Fabric的逻辑结构,并不是在物理上将组件划分成不同的进程、地址空间或者虚拟机。 2.1.1 成员服务 成员服务负责管理用户标识、隐私、以及网络的保密性和可审计性。在无权限的区块链中,参与者不需要授权,并且所有节点可以平等地提交交易或者将交易累积成区块,也就是说没有角色的区别。成员服务将公钥基础设施(PKI) »

Hyperledger详解(1)概述

这篇文章介绍了Hyperledger区块链技术的原理、构架和协议。 1.1 Fabric介绍 Fabric是数字事件(交易)的账簿,这个账簿由多个参与者共享,每个参与者都在系统中拥有权益。账簿只有在所有参与者达成共识的情况下才能够更新,并且信息一旦记录就永远不能修改。每个记录的事件都可以基于参与者的共识证明使用密码学进行验证。 交易是安全、私有和保密的。每个参与者使用身份证明向网络成员服务(membership service)注册以获取系统的访问权限。参与者使用不可追踪的导出证书生成交易,可以在网络中完全匿名。交易的内容使用由密钥导出的复杂函数进行加密,确保只有指定的参与者才能够看到内容,以保护商业交易的机密性。 账簿的全部或者部分可以审计以满足监管要求。在参与者合作的情况下, »

Hyperledger项目介绍

超级账簿(Hyperldger)是Linux基金会管理下的合作项目,目标是建立面向多种应用场景的分布式账簿平台的底层构架,项目运作基于以下几个基本原则: 模块化以应对多种使用场景。例如:交易语义、合约语言、共识机制、身份标识和数据存储。 高度可用的代码。致力于开发非常便于构建和部署的分布式账簿技术。 随着对需求的深入理解和新的使用场景,项目能够不断进化。虽然项目的目标是开发单一的技术平台,但是也期望从多种技术路线中获益。 超级账簿项目将遵循软件开发的标准生命周期,从孵化器阶段逐渐发展到成熟阶段。项目参与者贡献了多个代码库,作为可行的项目起点进行评估。 Fabric孵化器 Fabric是目前处于孵化器状态的项目,是由Tamas Blummer和Christopher Ferris在合并了DAH和IBM的建议方案的基础上创建的。 »

screen和tmux

screen的使用非常简单,使用 screen 开启匿名会话,使用 Ctrl+a 作为绑定键, Ctrl+a d 断开当前会话,使用Ctrl+a c (新建窗口)、 Ctrl+a k (关闭窗口)、 Ctrl+a n 和 Ctrl+a »

MySQL数据库定时备份脚本

在Linux的crontab中执行命令定时备份MySQL的数据库 mysqldump -h host_addr -u username -p$(echo 'password') datebase_name | gzip > $(dirname $0)/$(date '+%Y%m%d').sql.gz »

使用cURL好办事

使用cURL将JSON数据POST到服务端(Bash下可用): curl -H "Content-Type: application/json" -X POST "http://api.example.com/v1.0/service" -d '{"phone":"13500000000"}' 如果是在Windows下CMD,则需要使用“三引号”,并且去掉花括号外面的单引号: curl »

继续深入SSH操作服务器

不登录远端服务器,直接在远端运行命令: ssh user@server "ls -al" 或者 ssh user@server "cd apps && ls -al" 命令的运行结果会直接在本地命令行显示。 一般来说通过这样的方式运行命令,环境参数会不同 ssh user@server "echo $PATH" 会返回本地的环境变量, »

Web前端技术

框架类 ReactJS Polymer SemanticUI AngularJS BackboneJS EmberJS RequireJS UnderScore jQuery 一体化框架 extjs ionic UI框架 Bootstrap Foundation 语言类 TypeScript CoffeeScript Sass 平台 nodejs 工具类 grunt gulp webpack »

在Apache中配置Python运行时环境

今天费了很多时间配置Python在Apache中的运行时环境,主要是Flask无法连接SQLite数据,原因有2个: apache运行在www-data用户下,无法访问当前用户目录下的SQLite数据库文件,因为我把整个程序放在了当前登录用户的某个目录下以方便读写。首先需要设置db.sqlite文件为其他用户可读写chmod o+w db.sqlite。并且需要设置db.sqlite文件所在目录可读写,因为python连接SQLite数据需要获取锁权限(这个需要更多验证)。 apache中运行的Python无法访问系统变量,在当前用户目录下设置.profile或者.bashrc不能被apache中的Python读取(因为是不同的用户)。但是在/etc/profile中的设置也无法被apache中的Python读取,重启apache也没有用。唯一正确的做法是在/ »

MeteorJS

学习MeteorJS 前后端都用Javascript开发,一个全面的一致性框架,包括了工具、包管理和部署过程。 官网:https://www.meteor.com/ 教程:https://www.meteor.com/try 我的程序:http://blighli.meteor.com/ »

Flask笔记

配置环境 #安装虚拟环境 $ sudo pip install virtualenv #生成当前虚拟环境 $ mkdir myproject $ cd myproject $ virtualenv venv New python executable in venv/bin/python Installing distribute............done. #使用当前虚拟环境 $ . venv/bin/ »

GIT笔记

撤销本地操作 使用的命令: git-clean - Remove untracked files from the working tree git-reset - Reset current HEAD to the specified state git clean -xdf git reset --hard »

Python提纲

================================= 1、数据类型 变量在声明的时候不需要指定数据类型 数据类型包括:整数(int)、长整数(long)、浮点数(float)和字符串(string) 字符串 使用双引号(")或者单引号('),使用print可以打印 字符串可以使用加号“+”进行连接:first_name + last_name 字符串可以使用乘号“*”进行重复: hello »

docker笔记

docker必须在root权限下才能够运行,因此需要使用sudo docker,默认会打印出所有命令的帮助信息 获取image 最好指定ubuntu的tag,否则docker会下载所有版本 sudo docker pull ubuntu:14.04 查询image sudo docker images 运行容器 使用-i(交互)和-t(终端)选项运行容器 sudo docker run »

使用SSH访问远程Linux主机

使用SSH访问远程的Linux主机,可以使用用户名/密码的验证方式,也可以使用私钥/公钥的验证方式。 基本用法 登陆 ssh username@remote 拷贝文件 scp path/to/file user@remote:/path/to/file 使用密钥 在本地生成私钥和公钥 cd ~/.ssh ls -al »