
BlockChain
文章平均质量分 67
JohnnyMartin
这个作者很懒,什么都没留下…
展开
-
zk-SNARKs
1,同态隐藏(Homomorphic Hidings)给定E(x),很难反推出x的值若x != y, 则E(x) != E(y)若已知 E(x) 与 E(y),则可计算出E(x+y)举例说明同态隐藏在零知识证明中的作用:假设Alice知道 x 和 y的值使得 x+y=7,利用同态隐藏,Alice可以在不泄露x和y具体值的情况下像Bob证明她的确知道x和y的值,过程如下:A...原创 2020-04-25 23:43:27 · 472 阅读 · 0 评论 -
Fabric中的“账户”体系
本文的联盟链是以Fabric为例。联盟链相对于公链,最大的不同在于:联盟链上的数据不是对所有人都公开的,只有联盟内的成员才可以访问、写入链上数据。第二个重要的区别:联盟链不发币,所以联盟链里的账户没有以太坊比特币那样的账户地址。Fabric的访问控制、权限控制等,是通过MSP(Membership Service Provider)提供。这套机制与公链常见的账户模型差别甚大。本文探讨下Fab...原创 2020-02-20 17:31:32 · 2428 阅读 · 0 评论 -
Eth2.0 前景堪忧
以太坊在1.0时代扛起了"区块链2.0"的大旗,它支持智能合约,使各种ICO层出不穷,各种Dapps如雨后春笋般冒出,DAO、Bancor、CryptoKitty 等著名dapps赚足了圈内的流量与关注,FairWin等合约游戏也赚得盆满钵满。那么即将到来的Eth2.0能带来哪些改变,这些改变能否像Eth1.0那样引起巨变呢?先抛一个个人观点:Eth2.0的影响不会再像Eth1.0那样显著。我...原创 2019-10-28 14:31:12 · 751 阅读 · 0 评论 -
Bancor协议源码分析
1.编译源码、运行测试脚本pull Bancor源码到当前目录。在当前目录执行npm install 安装依赖的包进入scripts目录,修改三个js文件中前面几行代码中的相对路径,如“./solidity”改为“…/solidity”。否则会提示“Error: spawn node ENOENT”错误。在scripts目录执行node rebuild-all.js,编译源代码在sc...原创 2018-12-10 20:11:29 · 461 阅读 · 0 评论 -
君士坦丁堡升级要点详解
明天即将迎来以太坊的升级——君士坦丁堡升级,这里记录一下升级内容(要点)1,“君士坦丁堡”是什么?君士坦丁堡是以太坊四个发展阶段中的第三阶段中的第二个子阶段。以太坊四个阶段非别是:Frontier(前沿),Homestead(家园),Metropolis(大都会),Serenity(宁静)。其中第三阶段会引入许多重要特性,于是就将第三阶段分成两步走——拜占庭子阶段跟君士坦丁堡子阶段。在君士...原创 2019-01-16 10:16:36 · 547 阅读 · 0 评论 -
智能合约开发与调试要点整理——基于truffle框架
使用Truffle进行Solidity开发部署原创 2019-04-09 11:33:11 · 833 阅读 · 0 评论 -
使用truffle测试solidity中的重载函数
ERC223标准定义了三个重载的transfer函数。这给truffle测试带来了不少麻烦——直接在测试框架中调用transfer函数会报错:参数错误之类的信息。本文使用web3的sendTransaction方法实现重载函数的调用。安装web3-eth-abi这个包。引用这个包 const Web3Abi = require(‘web3-eth-abi’);准备好要调用的方法的ab...原创 2019-04-15 15:00:07 · 435 阅读 · 0 评论 -
大型合约系统的一个构建思路与实践——升级版
固定的入口合约(不可升级)固定的事件合约(不可升级)固定的Data合约(不可升级)通过Owner关系、白名单等机制控制业务逻辑合约对以上三个合约的读写权限业务逻辑合约地址注册到Data,业务逻辑合约地址之间的依赖通过Data中转、解耦专用的GenInfo合约,通过数组一次返回多个前端需要的数据,减少请求次数、加快页面响应全局的暂停/重启开关,升级时使用升级后旧合约应该disable...原创 2019-09-11 15:49:11 · 357 阅读 · 0 评论 -
solidity快速入门(扩展篇)
扩展篇1.继承、多态、super 与 C3 线性化solidity支持继承,并且支持多重继承。下面的代码展示了基本的继承的作用:代码重用。contract ERC20Token{ string public name; string public symbol; uint256 public decimals; uint256 public totalSupply...原创 2019-09-22 19:35:19 · 713 阅读 · 0 评论 -
solidity多重继承与C3线性化
啊原创 2019-09-28 23:34:13 · 627 阅读 · 0 评论 -
以太坊合约中数据的底层存储
C/C++程序员在进行Solidity开发的时候往往会想:Solidity中的结构体是怎么存储的呢?会不会进行数据对齐呢?怎样定义结构体会使访问效率改一些呢?我们来探索下以太坊合约的数据在底层的存取机制。参考文章:这个,以及它的翻译巨大的数组合约中的所有的数据都存在这个巨大的数组中,以下简称为“大数组”数组长度为2^256 - 1数组每个元素32Byte。数组是稀疏的——不会一下子...原创 2018-11-26 18:10:50 · 2215 阅读 · 3 评论 -
大型合约系统的一个构建思路与实践
以太坊环境下智能合约开发,最重要的特点便是安全:像余额这类的信息,是直接关系到钱的。第二个特点便是:不太适合做大型的、高复杂度合约系统。 原因有以下几个: 1.调试困难。虽然有truffle这种利器,让发布合约、测试合约能够用js脚本自动运行,但是出错了排查问题依然是一件非常麻烦的事情,尤其是当合约变多、合约间的调用变多,调试、排错难度急剧增长。 2. 代码越多隐藏的bug越多。尤...原创 2018-11-09 18:42:32 · 358 阅读 · 0 评论 -
win10下开发部署Dapp(1):搭建私链
windows下开发部署Dapp(1:搭建私链)在以太坊上进行智能合约的开发,需要先在私链上进行开发、测试,然后再部署到公链。 本文将介绍私链的搭建,下一篇将部署一个智能合约版的helloworld。 1.下载最新版的Geth 64位windows客户端。该网页有时打不开,点击这里直接下载1.8.1版本。下载完成后安装。 2.下载最新版本以太坊钱包Mist,下载完成后安装。 3.准备一...原创 2018-03-15 18:35:32 · 1507 阅读 · 0 评论 -
win10下开发部署Dapp(2):编写、部署第一个合约
win10下开发部署Dapp(2):编写、部署第一个合约 上一篇我们使用Geth搭建了私链,并用自己的机器在私链上挖矿。Geth本质上是Ethereum客户端,负责与链上进行通信,运行了Geth的机器才算是链网络上的一个peer。 本篇我们使用私链 + Mist + Solidity Browser发布第一个智能合约。 打开Solidity Browser,输入以下代码:...原创 2018-03-15 18:36:54 · 768 阅读 · 2 评论 -
win10下开发部署Dapp(3):Win10 + WSL + remixd搭建IDE环境
上一篇中发布的合约代码很简单,我们甚至可以直接在Mist的编辑框里敲代码。但实际工作中的代码可能非常复杂,各种继承 + import,代码分布在多和文件、多个目录中。使用Mist的编辑框发布合约就非常不方便了:得手工把一个个依赖的contract拷贝进去,进行编译、有问题修改后还要重新保存到源文件里——好麻烦。 Linux下有一套牛逼的框架叫truffle,编译、调试、部署一条龙,一条—...原创 2018-03-15 18:37:59 · 1624 阅读 · 0 评论 -
win10下开发部署Dapp(5):Ethereum块结构以及RLP编码
以太坊的块分为块头与交易列表两大部分,使用RLP(Recursive Length Prefix,递归长度前缀)将原数据编码。我们先学习RLP,再结合一个私链上的以太坊原数据块,分析以太坊块结构。(这里使用go-ethereum代码库,分析以太坊链上的块的结构。主要的代码位于 core/types目录下)RLPRLP编码的目的是为了能够嵌套任意数量、层数的二进制数据,至于里面的二进...原创 2018-03-20 17:40:08 · 1147 阅读 · 0 评论 -
win10下开发部署Dapp(6):发布ERC20标准的token
凡是ethereum上的token,都必须要符合一个标准:ERC20标准。该标准共有9个函数: name symbol decimals totalSupply balanceOf allowance transfer transferFrom approve 前6个函数可以利用solidity的语法糖:默认给public的storage变量...原创 2018-03-21 15:19:09 · 896 阅读 · 1 评论 -
win10下开发部署Dapp(7):接口化、自动化、可众筹、可升级的token
上一篇我们发行了一种token,将全部的token发放到了creator的账户里,这样的token交易起来非常不便:我想买N个MTC token,需要给creator转一定量的ether,或者用支付宝转一定的RMB给他,他再往我的账户地址上转N个token——流通效率非常低。这其中还有不可避免地信任问题:我转了RMB给他,他却没有给我token,或者少给了token。 有两种思路可以解决以上问题...原创 2018-08-23 16:20:41 · 433 阅读 · 0 评论 -
truffle与nodejs的版本问题
今年三月份开始使用WSL + truffle,那时候truffle刚到4.1.8版本(node 8.8.0),就一直用这个版本,没想到用到的却是一个最稳定的版本。 后来,由于4.1.8最高只支持solc的0.4.23,便将truffle升级到最新的4.1.14(node 也升级到10.5.0),噩梦便开始了:各种意想不到的坑,例如: fs.writeFileSync 跟 fs.ex...原创 2018-08-16 17:49:41 · 2925 阅读 · 3 评论 -
使用solidity-flattener展开合约到一个文件中
平常使用truffle做合约的开发,可以通过import将别的合约包含进来,方便代码的组织。但是,有几个特殊场景,需要将import的合约都写到当前文件里: 使用钱包(如Mist)发布合约,不支持import,只能将所有sol的源代码放到一起,扔进Mist编译、发布。 将合约代码提交到区块浏览器,供别人参阅,需要将所有sol的源代码放到一起。 import的合约数量少,...原创 2018-08-16 18:10:53 · 1385 阅读 · 0 评论 -
solidity测试脚本:小心js里坑爹的数值计算
前天在调试solidity代码时,发现一个极为诡异的行为:solidity中存数的数值,当使用web3取出的时候,数值是错的——与solidity中的值对不上!solidity中的代码大概是这样的:mapping (uint => uint) public data;...data[0] = 9901538745632159654;data[data[0]] = 590153874...原创 2018-10-12 11:03:50 · 517 阅读 · 0 评论 -
以太坊合约漏洞大集锦——分析、模拟与重现
以太坊的智能合约,自 DAO以来,漏洞就没断过,觉得有必要做一下汇总,以为鉴。1,The DAO 漏洞。该漏洞直接导致了以太坊的分叉。应该算是最有名的明星漏洞了。我们将源码的无关部分剔除,只剩关键代码。看模拟源码:pragma solidity ^0.4.18;contract TheDAO{ function splitDAO()public{ withdraw...原创 2018-11-06 17:43:21 · 3386 阅读 · 0 评论 -
win10下开发部署Dapp(0):从零开始
win10下开发部署Dapp(0):从零开始 我个人算是一个比较后知后觉的人,2017年12月底才开始炒币,开始深入了解区块链。这里以一个新人的角度回忆一下这段时间的收获,做个记录,同时希望能给其他人一些帮助。 在我学习区块链的过程中,给我最大迷惑的,其实是“挖矿”这个词。我们从What、Why、How三个方向解释一下“挖矿”。在这之前,我们先得弄清什么是区块链,什么是比特币。 ...原创 2018-03-15 18:17:48 · 827 阅读 · 1 评论