- 博客(73)
- 资源 (7)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 区块链技术分享导读目录(持续更新)
还记得第一次接触到以太坊源码时,就被它作为“世界计算机”的宏伟构想深深吸引。实际上,可以认为以太坊是在试图屏蔽底层硬件的差异,制定统一的虚拟指令集,并利用去中心化维护整个系统的稳定性。此外,还可以把以太坊看成一个去中心化的App Store,任何人都可以自由发布自己的app而不用担心各种监管和下架,而且最重要的是,永不宕机。随着在区块链行业研究的深入,越来越感觉到知识的纷繁庞杂,于是决定把这些学...
2019-03-09 13:42:56
1500
3
原创 如何发布Azure web app
最近一个项目要集成到Azure的web app service里,花了点时间玩了一下,记录下来做个备忘。首先是需要去Azure官网注册免费账户,点击“免费开始”然后填写个人信息,注意需要绑定信用卡,否则没法部署web app。比较坑爹的一点是,虽然名为“Free Trial”,绑完卡后立马扣了我1美金。。。注册完成后会获得一个“订阅号”,后面部署web app需要使用这个订阅号。进入下面这个页...
2019-08-20 09:11:56
1893
原创 从geth切换到parity遇到的那些坑
最近需要搭建以太坊全节点,刚开始用的是geth,同步了1整天发现最新的70~80个块总是同步不下来,网上一查很多人遇到过这个问题,据说跟SSD的读写速度有关,无奈之下只能放弃,改用parity。parity是一个和geth类似的以太坊客户端程序,由以太坊黄皮书作者Gavin Woods领导,采用Rust语言编写。试用了一下体验还是挺棒的,同步Ropsten的数据只需要几个小时的时间。但是,par...
2019-08-20 08:51:18
4101
原创 Zcash - 各种密钥和签名,你懂吗?
Zcash的发展大体经过了OverWinter(过冬) -> Sprout(发芽) -> Sapling(树苗)这几个阶段,随着业务和功能的逐渐丰富,密钥系统也越来越复杂,刚开始接触时感觉一头雾水,但是静下心来仔细分析,就能逐渐领略其中的魅力。Zcash中的各种密钥,主要是为了实现下面2类功能:1.Signature2.In-band secret distribution签名...
2019-07-27 23:32:42
3006
原创 Zcash - 深入浅出Pedersen Hash/Commitment计算
接触过Zcash的人一定都听说过Pedersen Hash,或者Pedersen Commitment。实际上,在Zcash中存在下面4种不同的概念:1.Pedersen Hash2.Mixing Pedersen Hash3.Windowed Pedersen Commitment4.Homomorphic Pedersen Commitment你能分清楚它们直接的区别和联系吗?本文将...
2019-07-27 23:18:22
4061
原创 零知识证明|4.如何验证多项式盲计算的值?
这篇文章正式介绍一下Bob如何验证Alice发过来的E(P(s))E(P(s))E(P(s))的值是否正确。实际上,我们想要实现2个目的:双盲:Alice不知道s,Bob也不知道P(X)可验证:Alice只有发送正确的E(P(s))E(P(s))E(P(s))的值,才会被Bob接受要实现第2个目标,需要用到上一篇文章里介绍的α对和KCA的概念。上一篇文章里的KCA只用到了一个α对,我们...
2019-06-10 11:29:35
958
1
原创 零知识证明|3.什么是KCA系数知识假设?
上一篇介绍了盲计算,所谓盲计算,就是Alice在不知道s的情况下完成多项式计算。那么,Bob如何确定Alice的计算结果是正确的呢?要实现这一目标,需要先介绍一个概念:α对。在有限循环群G中,如果α,β≠0且b=α⋅a\alpha, \beta \neq 0 且 b = \alpha \cdot aα,β̸=0且b=α⋅a,那么就称(a,b)(a,b)(a,b)为一个α对。也就是说,b是a...
2019-06-10 11:26:28
1928
原创 零知识证明|2.什么是多项式盲计算?
上一篇介绍了什么是同态隐藏。假设取E(x)=gxE(x) = g^xE(x)=gx,则E(x+y)E(x+y)E(x+y)可以通过E(x)E(x)E(x)和E(y)E(y)E(y)计算出来:E(x+y)=E(x)⋅E(y)E(x+y) = E(x) \cdot E(y)E(x+y)=E(x)⋅E(y)实际上,不仅仅支持加法,支持所有"线性组合"的同态隐藏,比如E(ax+by)E(ax + by...
2019-06-10 11:23:52
1051
1
原创 零知识证明|1.什么是同态隐藏?
所谓零知识证明,指的是在不泄露秘密的前提下,证明我知道这个秘密。举个简单例子,假设我一个月工资2000,我老婆一个月工资3000。我不会把这两个数字透露给你,但是我可以告诉你,我俩每个月的工资加起来是5000。你可以通过某种方式验证我俩的工资加起来确实是5000,但是你没办法反推出来我每个月的工资是多少,我老婆每个月工资是多少。要做到这一点,需要引入一个概念,叫做同态隐藏。这需要一些数论的知识...
2019-06-10 11:18:43
2014
2
原创 以太坊控制台源码分析
最近有网友提到以太坊控制台的代码看不太明白,抽了点时间整理了一下。当我们通过geth console或者geth attach与节点交互的时候,输入的命令是如何被处理的呢?看下面这张流程图就明白了:命令行编辑器Liner等待用户输入命令JSRE使用一个名为scheduler的通道(chan)接收命令JSRE把命令发送给Javascript解释器Otto处理Otto中预加载了web3....
2019-04-14 12:51:52
1703
2
原创 前端技术栈(五):dva,美貌与智慧并存
经过前面四篇的铺垫,终于轮到我们的主角dva了,就是下面这个美女:先擦一擦哈喇子,我们来介绍一下,dva出自于暴雪出品的一款游戏《守望先锋》,援引官方的角色介绍:D.Va拥有一部强大的机甲,它具有两台全自动的近距离聚变机炮、可以使机甲飞跃敌人或障碍物的推进器、 还有可以抵御来自正面的远程攻击的防御矩阵。然后呢,蚂蚁金服的一位架构师sorrycc很迷这位美女,正巧刚开发了一款前端框架没有...
2019-03-12 19:20:54
12774
原创 前端技术栈(四):react-router,去中心化式路由
1.静态路由 vs. 动态路由在Web前端开发中,我们经常会需要处理页面路由问题。习惯上,路由信息会在一个地方集中配置好,我们可以称之为“静态路由”,或者叫“中心化式路由”。以react-router v3版本为例,代码类似下面这样:import { Router, Route, IndexRoute, browserHistory } from 'react-router'const A...
2019-03-12 08:40:34
1100
原创 前端技术栈(三):redux-saga,化异步为同步
1.什么是Saga?第一次看到这个单词的时候一脸懵逼,因为字典上查到的意思完全驴头不对马嘴。。。实际上,这个术语出自康奈尔大学的一篇论文:http://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf最初这篇论文是为了解决分布式系统中的LLT(Long Lived Transaction),也就是长时运行事务的数据一致性问题的。这...
2019-03-11 11:10:05
5514
1
原创 前端技术栈(二):从Flux到Redux
上一篇分析了Flux出现的背景和原理,最核心的思想就是“组件化+单向数据流”。但是,Flux在设计上并非完美,具体来说主要存在以下2个不足:1. 多Store数据依赖由于Flux采用多Store设计,各个Store之间可能存在数据依赖。以flux-chat为例:在这个聊天软件里,可能会有多个人给你发消息,比如Dave给你发了3条,Brian给你发了2条,当你点开某个人给你发的消息后,界面需要...
2019-03-10 00:05:38
785
原创 前端技术栈(一):从MV*到Flux
最近要开始搞网页端钱包,本着干一行爱一行的原则,撸起了前端框架。项目基于蚂蚁金服的dva框架,实际上是对几个流行的开源框架的整合,技术栈包括:reactreact-routerreduxredux-sagadvaantd在开始介绍之前,先说一说MV*。大家一定都听说过MVC,在这之后又衍生出了MVP和MVVM,这些都可以统称为MV*。但是,随着前端代码复杂度的增加,人们发现越来...
2019-03-10 00:00:56
819
原创 一分钟了解硬件钱包
所谓硬件钱包,就是把你的私钥保存在一个不联网的设备上。因为不联网,所以其他人永远都无法窃取你的私钥。硬件钱包品牌繁多,比如长得像车钥匙的Trezor:长得像U盘的Ledger Nano:长得像手机的Ellipal:甚至还有长得像信用卡的:那么硬件钱包怎么用呢?以Trezor为例,首先会要求你设置一个PIN码,类似于你的手机密码:然后就是创建你的私钥了,创建完以后会显示助记词:...
2019-02-02 23:03:56
4263
原创 Go编译缓存导致C文件修改后未重新编译
今天和同事一起看了一个很诡异的问题,研究了半天发现是由于Go的编译缓存导致的,记录下来方便其他遇到问题的同学参考。首先编写一个hello.go文件,里面调用了C函数:package main/*#include "./libhello.c"*/import "C"import "fmt"func main() { fmt.Println(C.hello())}对应...
2019-02-01 13:48:05
3672
1
原创 分片:QuarkChain技术原理分析
最近听说QuarkChain在韩国热度比较高,于是抽了点时间研究了一下。QuarkChain是一种“sharding-based blockchain”,即基于分片的区块链。它的主要目标是提高区块链的可扩展性(即TPS),同时还要兼顾不可能三角(安全性、去中心化性、可扩展性)。主要竞争对手:以太坊分片:由于历史包袱比较重,实际应用时间不确定OmniLeger:安全性有所妥协,如果要达到10...
2019-01-20 02:03:38
1781
原创 Android上运行Http Server
Android设备一般是作为客户端使用,但是最近一个项目需要用android开发板作为服务器和手机端通信,因此花了点时间研究了下如何在android上运行http server。实际上这是有开源解决方案的,叫做AndroidAsync,作者是Koushik Dutta,他的另一个开源项目是大名鼎鼎的ION,这是一个异步网络图片加载库。但是AndroidAsync几乎没什么文档,因此实际使用中遇到...
2019-01-19 19:33:36
8879
10
原创 以太坊君士坦丁堡漏洞分析
这两天关于以太坊延迟君士坦丁堡升级的报导铺天盖地,可惜到现在都没看到一篇能把这个漏洞讲透彻的,就由我来给大家解密吧。上一篇文章给大家介绍过EIP 1283,是为了优化SSTORE指令的gas计算方式的,这次的漏洞就出在这个EIP上,可能会导致“重入攻击”。1.什么是“重入攻击”所谓“重入攻击”,指的是在同一笔交易中,合约A调用合约B,而合约B又反过来调用合约A的现象。这种情况是必须被禁止的...
2019-01-18 23:26:45
467
原创 以太坊君士坦丁堡升级深入分析
以太坊即将在7080000高度升级到Constantinople(君士坦丁堡)版本,预计时间为1月16号。这是以太坊第三阶段Metropolis(大都会)的第2个版本,也是最后一个版本。在这之后,以太坊将步入最终阶段Serenity(宁静)。这次升级一共涉及5个EIP,改动不算大,网络上也已经有很多文章,但大多是一些语焉不详的简短翻译,笔者试图深入分析一下各项改动的具体细节。EIP 145: ...
2019-01-15 10:01:19
764
1
原创 ReactNative小技巧集锦
写代码过程中遇到的一些小问题,随手记录一下~1.更新state中的对象数组直接修改this.state.array[i].xxx是不生效的,需要把state中的对象深拷贝一份,然后通过this.setState()来更新。我们可以用lodash来优雅地完成这一步骤:import _ from 'lodash';change(index, value) { let temp = _.cl...
2019-01-15 09:57:59
477
原创 ReactNative快速上手必知必会
如果之前接触过一些web开发,上手ReactNative基本没什么难度,搞清楚一些用法上的区别就可以了。正常的web开发,我们一般是在HTML里嵌入javascript代码,ReactNative则恰恰相反,它使用的是JSX,也就是在javascript里嵌入XML。这么做的好处是:你可以自己实现一些组件,然后把这些组件作为一个新的XML标签用到布局中去,这样你就不必受到那些预定义的标签类型的限...
2019-01-14 10:22:02
751
2
原创 ReactNative开发环境搭建
最近需要开发dApp前端,开始学习ReactNative。首先捋清爽3个概念:React,React.js,ReactNative。React是一套基础框架设计,而React.js和ReactNative则是该框架的两个实现版本(不过,由于历史原因,React框架的基本概念和设计思想大多包含在React.js的相关文档中)。其中React.js面向Web应用开发,而ReactNative则面向...
2019-01-13 22:44:03
552
原创 Solidity中的sha256/keccak256如何正确传参
今天遇到一个需求:用户传递一个字符串过来,跟当前的时间拼在一起取哈希值,作为唯一标识。举个例子,假如用户传递的字符串是abc,当前时间是123,我们来看看标准答案:$ echo -n 'abc123' | shasum -a 2566ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090看起来很简单,就写了下面这段测...
2018-12-22 11:49:47
12852
原创 从Solidity到EOS合约开发
之前一直在以太坊上开发智能合约,最近开始转到EOS上,感受到有很多不同之处,决定整理记录下来,给其他想入门的兄弟们一些参考。1.合约的编译部署SolidityEOS编译合约solcjs --abi --bin hello.soleosio-cpp -o hello.wasm hello.cpp --abigen部署合约hello=(web3.eth.contr...
2018-12-11 09:57:13
2882
原创 EOS的三种测试环境的搭建
最近开始研究EOS,首先需要搭建EOS的测试环境,目前主要有3种方式:docker搭建私网连接测试网本文将逐一进行介绍,大家可以比较一下,自行选择适合自己的方式。1.概览EOS三大组件:nodeos:EOS节点程序,维护完整的区块链cleos:EOS命令行程序,完成和节点的交互keosd:EOS钱包/密钥管理程序2.docker方式运行EOS这是EOS官方推荐的方式...
2018-12-05 15:28:25
5362
1
原创 EOS上如何安全生成随机数
EOS上的各种菠菜游戏频频被黑客攻陷,多数原因都是随机数算法被破解。实际上,由于区块链上没有稳定的熵源,很难产生真正意义上的随机数,但是可以最大限度地提高破解的难度。在不引入于预言机(oracle)等外部熵源的情况下,目前有两种可用的安全随机数生成算法,本文将逐一进行分析。1.FarmEOS算法FarmOS是目前比较火的游戏平台,已经上线了骰子、轮盘、扫雷和21点这四个游戏,后续还将推出更多游...
2018-12-03 00:57:23
2517
原创 Plasma Debit原理分析
上一篇介绍了Plasma Cash,提到它的缺点是代币无法分割,Plasma Debit就是为了解决这个问题应运而生的。回顾一下,在Plasma Cash中,每次充值会产生一个uid作为唯一标识,并记录充值的金额amount。注意,这个amount是不可更改的,这就是代币无法分割的关键所在。Plasma Debit把这个amount扩展成了两个值v和a:v表示从主链上充值的ETH数量,正常情...
2018-11-27 14:50:20
732
原创 Plasma Cash完全解析
上一篇分析了Plasma MVP的原理和实现,这一篇介绍一下Plasma的另外一个实现版本:Plasma Cash。1.和MVP的区别Plasma Cash和MVP最大的不同在于使用稀疏Merkle树代替了标准Merkle树。我们都知道,Merkle树的好处在于可以利用很少的数据来证明某笔交易“存在”于某个区块中,那么稀疏Merkle树有什么好处呢?除了可以证明某笔交易“存在”于某个区块中以外...
2018-11-27 14:47:18
821
原创 Plasma MVP完全解析
1.什么是Plasma?众所周知,目前的主流区块链系统普遍存在可扩展性(Scalability)问题。解决该问题一般有下面两种思路:Layer1技术:直接修改底层区块链,比如修改区块大小和结构(2MB区块/SegWit等)、修改共识机制(PoS/DPos/PBFT等)、分片(Sharding)等方案Layer2技术:在底层区块链之上构造新的交易环境,分担主链的负载,代表方案包括状态通...
2018-11-27 14:42:58
877
原创 智能合约安全:短地址攻击
昨天一位博友提到短地址攻击的问题,感觉挺有意思的,就花了点时间研究了一下。1.什么是短地址攻击大家都知道,如果我们想调用智能合约的函数,需要在交易的payload字段中填充一段字节码。以ERC20的transfer()的函数为例,函数原型为:function transfer(address to, uint amount) public returns (bool success);我们...
2018-11-14 10:13:51
3355
2
原创 Bancor协议揭秘
二战结束前夕,44国政府受美国之邀在美国新罕布什尔州布雷顿森林举行会议,商讨战后经济复苏和恢复金融秩序。美国代表为哈里·迪克特·怀特,英国代表为约翰·梅纳德·凯恩斯。凯恩斯出于英国经济的考虑,试图与美国争夺全球金融霸权,提出了著名的“国际清算同盟计划”,也称“凯恩斯计划”。该计划提议建立全球中央银行,并发行超主权货币Bancor用于取代黄金,作为国际清算货币。Bancor的初始分配则以二战前三年的...
2018-11-14 10:09:00
835
原创 Call,CallCode,DelegateCall,StaticCall,你分得清吗?
孔乙己懂“回”字的四种写法,你会智能合约的四种调用方式吗?在中大型的项目中,我们不可能在一个智能合约中实现所有的功能,而且这样也不利于分工合作。一般情况下,我们会把代码按功能划分到不同的库或者合约中,然后提供接口互相调用。在Solidity中,如果只是为了代码复用,我们会把公共代码抽出来,部署到一个library中,后面就可以像调用C库、Java库一样使用了。但是library中不允许定义任何...
2018-11-07 23:45:54
9340
3
原创 图解以太坊虚拟机EVM
今天聊一聊以太坊虚拟机的原理。以太坊虚拟机,简称EVM,是用来执行以太坊上的交易的。业务流程参见下图:输入一笔交易,内部会转换成一个Message对象,传入EVM执行。如果是一笔普通转账交易,那么直接修改StateDB中对应的账户余额即可。如果是智能合约的创建或者调用,则通过EVM中的解释器加载和执行字节码,执行过程中可能会查询或者修改StateDB。1.固定油费(Intrinsic ...
2018-11-06 14:17:04
4539
4
原创 Go interface深入分析
1.鸭子类型(Duck Typing)If it walks like a duck and it quacks like a duck, then it must be a duck.interface是一种鸭子类型无需显示声明,只要对象实现了接口声明的的全部方法,就实现了该接口把对象的类型检查从编译时推迟到运行时好处:松耦合可以先实现类型,再抽象接口2.值receiv...
2018-10-24 00:55:59
1692
原创 WebAssembly初体验
上篇介绍了WebAssembly的前生今世,这篇准备写几个例子试玩一下。1.安装Emscripten首先肯定是先安装Emscripten,这是一个toolchain,可以把C/C++代码编译成asm.js和WASM字节码。内部其实分为三部分:调用编译器前端Clang把C/C++代码编译成LLVM字节码调用编译器后端Fastcomp把LLVM字节码编译成asm.js调用Binaryen的...
2018-10-24 00:52:54
4184
1
原创 WebAssembly的前生今世
1.先从Javascript说起上帝花了7天时间创造了世界,Brendan Eich大神在1995年花了10天时间创造了Javascript。为什么Javascript被设计为解释型语言?Javascript的初衷是面向非专业编程人员和设计师的,因此大神认为不应该让这些不专业的人理解编译器这么专业的概念。解释型语言 vs. 编译型语言这两个概念其实不太严谨,应该改为“主流实现为解释器的语...
2018-10-24 00:44:29
759
原创 交易是否是零和游戏?
最近李笑来的一本新书《韭菜的自我修养》引发了热议,于是花了一个小时的时间拜读了一下。看完后总结一下,中心思想可以概括为以下三点:你没有赚到钱,是因为买入的时机不对不要高估自己的认知水平,大部分人都是在牛市的尾巴上入场的。怎么解决?等待下一个买入时机。降低交易频次买定离手,少做波段。点付大头有一句名言:如果某个币你不愿意持有一年,那就不要持有一天。优化“回报风险比”(提高分子,降低分母...
2018-09-19 10:35:52
841
原创 Snowflake to Avalanche:一种新型的亚稳态共识协议族
该论文于2018年5月首次披露,提出了一种基于亚稳态机制(metastable)的共识协议族。作者是一个神秘团队Team Rocket(火箭队?)。所谓亚稳态,是指系统在某段时间内处于稳定状态,但在另外一段时间内可能是不稳定的。稳态代表了系统的最低能量点,而亚稳态则是一个局部的而非全局的最低能量点。以下图中的小球为例,如果用比较小的力推小球,则会停留在位置1这个亚稳态上,而如果用比较大的力...
2018-09-05 18:24:54
2202
8
DockingExpandableListView
2016-12-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人