- 博客(40)
- 资源 (2)
- 收藏
- 关注
原创 C++20四大之三:concept特性详解
前言:C++模板的演进模板的演进是C++发展史中一条十分重要的线,个人觉得Concept是这条线中最大的一个特性了。在介绍Concept之前,我们先捋一捋模板这条线的发展。据Stroustrup先生回忆, 对模板的设想早在1982年便有了,正式提出是在1998年的 USENIX C++ conference会议上提出,设计模板的初衷是因为当时的C++缺少一个标准库,而当时没有模板的C++很难设计出“vector、list”这种适用于多种类型的容器。到1998年模板正式进入标准,在这之前C++模板已经
2022-04-05 17:10:05 4488 2
原创 C++20四大之一:module特性详解
写在最开始:C++20最大的特性是什么?最大的特性是迄今为止没有哪一款编译器完全实现了所有特性1,module1,头文件的由来2,实现一个最简单的module3,接口与实现分离module接口文件(后缀名)、module实现文件4,可见性控制5,子模块(submodule)6,模块拆分(module partition)2,concept带约束的T函数模板缩写https://devblogs.microsoft.com/cppblog/abbreviated-function-t
2021-07-10 19:30:53 2380 5
原创 将成员函数转成全局函数
我们在开发中肯定遇到过将一个成员函数经过bind,变成一个std::function,可以用来做回调等等,std::function只能在C++中使用,假如我们想将成员函数绑定到一个全局函数的,暴露其函数指针,则C以及其他好多语言,也可以受惠了。思路是使用模板,结合bind,为每一个绑定生成一个模板类,暴露类中的static函数。代码如下:template<uint64_t id, class R, class C, class... Params, class Ptr, class Args&g
2020-08-30 13:42:36 781
原创 C++模板的一些整理
C++的模板是个争议很大的特性,有些公司的编码规范明确禁止使用template(STL之类的不受限制),理由是C++模板的报错信息非常不友好,另外不能以二进制方式复用,模板代码一旦变化就会扩散至所有使用模板的代码中、维护成本高。template可以极大地方便SDK、公共库等岗位的开发人员,对侧重业务实现的开发人员来说可能没有那么有吸引力,日常使用中与模板有关的最多的可能就是STL了。vector<int> int_vec;vector<float> float_vec;...
2020-07-27 16:26:46 437
原创 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 447
原创 Fabric中的“账户”体系
本文的联盟链是以Fabric为例。联盟链相对于公链,最大的不同在于:联盟链上的数据不是对所有人都公开的,只有联盟内的成员才可以访问、写入链上数据。第二个重要的区别:联盟链不发币,所以联盟链里的账户没有以太坊比特币那样的账户地址。Fabric的访问控制、权限控制等,是通过MSP(Membership Service Provider)提供。这套机制与公链常见的账户模型差别甚大。本文探讨下Fab...
2020-02-20 17:31:32 2356
原创 C++14与C++17新特性,你想知道的都在这
这篇博文躺在草稿箱里好久了,今天有点时间,整理下发出来------------------------------------------C++14篇------------------------------------------相对于C++11,C++14的改动可谓非常mini了,主要的改动一句话便是:扩大自动类型推断的应用范围。剩下的都是边边角角的小改动这包括:函数返回值自动推...
2019-12-25 14:59:13 5204 2
原创 C++11新特性集锦——新标准库
1,新增的关键字autodecltypeconstexp=defaultoverridenoexceptfinal2,新增的标准库moveforwardbindtuppleshared_prtunique_ptrweak_ptrinitializer_list3,新的语义统一的初始化列表初始化返回值lambda表达式sizeof…委托构造函数范围for...
2019-12-19 14:56:56 341
原创 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 726
原创 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 661
原创 大型合约系统的一个构建思路与实践——升级版
固定的入口合约(不可升级)固定的事件合约(不可升级)固定的Data合约(不可升级)通过Owner关系、白名单等机制控制业务逻辑合约对以上三个合约的读写权限业务逻辑合约地址注册到Data,业务逻辑合约地址之间的依赖通过Data中转、解耦专用的GenInfo合约,通过数组一次返回多个前端需要的数据,减少请求次数、加快页面响应全局的暂停/重启开关,升级时使用升级后旧合约应该disable...
2019-09-11 15:49:11 321
原创 C++11新特性集锦——新语意
本文是C++11新特性系列的第二篇们主要记录C++11的新语意。2,新的语义2.1 大括号{}与初始化C++11之前,有这么几种初始化的方式默认初始化: A a; //调用默认构造函数值初始化:A a=1; //调用单参构造函数直接初始化: A a(1);//调用单参构造函数拷贝初始化: A a2(a1); A a2 = a1;//调用拷贝构造函数C++11之后,增加列表...
2019-05-15 00:15:48 295
原创 C++11新特性集锦——新关键字
C++11新引入的特性比较多,这里简单记录下每个特性的大致情况,无法将细节一一描述清楚——那样每个特性几乎都要花费一篇博客的篇幅来记录。本文从新增的关键字 、 新增的语义 、新增的标准库三个方面来记录这些新特性。原本打算将这三部分放到一篇博客中,后来发现太长了,还是分开吧。0,重点特性概览个人觉得,auto、统一的初始化(使用“{}”)、右值引用、lambda是C++11里面重量级的四个特性了...
2019-05-14 15:02:55 693
原创 使用truffle测试solidity中的重载函数
ERC223标准定义了三个重载的transfer函数。这给truffle测试带来了不少麻烦——直接在测试框架中调用transfer函数会报错:参数错误之类的信息。本文使用web3的sendTransaction方法实现重载函数的调用。安装web3-eth-abi这个包。引用这个包 const Web3Abi = require(‘web3-eth-abi’);准备好要调用的方法的ab...
2019-04-15 15:00:07 408
原创 std::move与std::forward代码分析
我们看下C++模板的类型推导(Type Decuction)过程中的部分规则:T&amp; &amp; =&gt; T&amp;T&amp;&amp; &amp; =&gt; T&amp;T&amp; &amp;&amp; =&gt; T&amp;T
2019-04-11 15:17:25 1291
原创 君士坦丁堡升级要点详解
明天即将迎来以太坊的升级——君士坦丁堡升级,这里记录一下升级内容(要点)1,“君士坦丁堡”是什么?君士坦丁堡是以太坊四个发展阶段中的第三阶段中的第二个子阶段。以太坊四个阶段非别是:Frontier(前沿),Homestead(家园),Metropolis(大都会),Serenity(宁静)。其中第三阶段会引入许多重要特性,于是就将第三阶段分成两步走——拜占庭子阶段跟君士坦丁堡子阶段。在君士...
2019-01-16 10:16:36 524
原创 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 438
原创 以太坊合约中数据的底层存储
C/C++程序员在进行Solidity开发的时候往往会想:Solidity中的结构体是怎么存储的呢?会不会进行数据对齐呢?怎样定义结构体会使访问效率改一些呢?我们来探索下以太坊合约的数据在底层的存取机制。参考文章:这个,以及它的翻译巨大的数组合约中的所有的数据都存在这个巨大的数组中,以下简称为“大数组”数组长度为2^256 - 1数组每个元素32Byte。数组是稀疏的——不会一下子...
2018-11-26 18:10:50 2170 3
原创 大型合约系统的一个构建思路与实践
以太坊环境下智能合约开发,最重要的特点便是安全:像余额这类的信息,是直接关系到钱的。第二个特点便是:不太适合做大型的、高复杂度合约系统。 原因有以下几个: 1.调试困难。虽然有truffle这种利器,让发布合约、测试合约能够用js脚本自动运行,但是出错了排查问题依然是一件非常麻烦的事情,尤其是当合约变多、合约间的调用变多,调试、排错难度急剧增长。 2. 代码越多隐藏的bug越多。尤...
2018-11-09 18:42:32 336
原创 以太坊合约漏洞大集锦——分析、模拟与重现
以太坊的智能合约,自 DAO以来,漏洞就没断过,觉得有必要做一下汇总,以为鉴。1,The DAO 漏洞。该漏洞直接导致了以太坊的分叉。应该算是最有名的明星漏洞了。我们将源码的无关部分剔除,只剩关键代码。看模拟源码:pragma solidity ^0.4.18;contract TheDAO{ function splitDAO()public{ withdraw...
2018-11-06 17:43:21 3322
原创 C++11:右值引用、移动语意与完美转发
在C++11之前左值:拥有可辨识的内存地址的标示符便是一个左值。右值:非左值。左值引用:左值标示符的一个别名右值引用:右值标示符的一个别名举例:int a = 5; //a为左值,5为右值int* pA = &amp;amp;amp;amp;amp;amp;amp;amp;a; //pA为左值,&amp;amp;amp;amp;amp;amp;amp;amp;a为右值int&amp;amp;amp;amp;amp;a
2018-11-04 18:21:56 605
原创 solidity测试脚本:小心js里坑爹的数值计算
前天在调试solidity代码时,发现一个极为诡异的行为:solidity中存数的数值,当使用web3取出的时候,数值是错的——与solidity中的值对不上!solidity中的代码大概是这样的:mapping (uint =&gt; uint) public data;...data[0] = 9901538745632159654;data[data[0]] = 590153874...
2018-10-12 11:03:50 494
原创 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 406
原创 使用solidity-flattener展开合约到一个文件中
平常使用truffle做合约的开发,可以通过import将别的合约包含进来,方便代码的组织。但是,有几个特殊场景,需要将import的合约都写到当前文件里: 使用钱包(如Mist)发布合约,不支持import,只能将所有sol的源代码放到一起,扔进Mist编译、发布。 将合约代码提交到区块浏览器,供别人参阅,需要将所有sol的源代码放到一起。 import的合约数量少,...
2018-08-16 18:10:53 1325
原创 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 2831 3
原创 Win32多线程初步——生产者与消费者、死锁、信号量
注:本文是将之前发布在新浪博客的文章转移到CSDN。因为新浪博客太难用了,CSDN的MarkDown脚本有助于代码排版。 闲来无事,折腾一下多线程。首先想到的是“生产者与消费者”问题。本帖循序渐进,最终构造出一个合格的程序。(高手就没必要看下去了)涉及到的概念有: 子线程生存期、CloseHandle、WaitForMultipleObjects 以及CriticalSection。 ...
2018-07-14 15:43:14 492
原创 添加“Git Bash Here”到右键菜单
之前安装了git的时候,清晰的记得右键菜单里是有“Git Bash Here”这个选项的,非常方面。后来不知道为啥突然没有了,就像搞回来。 打开注册表,定位到HKEY_CLASSES_ROOT\Directory\Background\shell(如果Background下面没有shell目录,就自己新建一个)。 在shell下右键-新建项,其名称为“Git Bash Here”...
2018-06-25 15:19:48 2783
原创 定制OneDrive外观
强迫症患者,想把桌面的图标都换成黑白的,任务栏、托盘区的图标也都尽量是黑白的。 之前用OneDrive,它的图标是纯白的,后来升级到OneDrive-5T,图标就变成蓝色的了——忍不住想把它变成白色。起初用ResourceHacker把OneDrive.exe的内部ico变成了白色,但是没用——OneDrive肯定用了别处的icon文件,找! 经过一番折腾,终于在%AppData%\Loc...
2018-06-25 15:03:51 836 1
原创 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 860 1
原创 win10下开发部署Dapp(5):Ethereum块结构以及RLP编码
以太坊的块分为块头与交易列表两大部分,使用RLP(Recursive Length Prefix,递归长度前缀)将原数据编码。我们先学习RLP,再结合一个私链上的以太坊原数据块,分析以太坊块结构。(这里使用go-ethereum代码库,分析以太坊链上的块的结构。主要的代码位于 core/types目录下)RLPRLP编码的目的是为了能够嵌套任意数量、层数的二进制数据,至于里面的二进...
2018-03-20 17:40:08 1117
原创 Win10下开发部署Dapp(4):solidity快速入门(基础篇)
基础篇Solidity是一门静态类型的脚本语言,我们可以对照C++的语法进行快速记忆。1.基本保留字与基本类型 contract:类似于class,定义一个合约,具有构造函数,仅在创建合约时被调用。 function:定义一个函数。 event:定义一个事件,外部Dapp可以监控这些事件,以获知合约内的变化。 var:声明变量,类似于C++11的auto,可以...
2018-03-17 18:34:28 992
原创 win10下开发部署Dapp(3):Win10 + WSL + remixd搭建IDE环境
上一篇中发布的合约代码很简单,我们甚至可以直接在Mist的编辑框里敲代码。但实际工作中的代码可能非常复杂,各种继承 + import,代码分布在多和文件、多个目录中。使用Mist的编辑框发布合约就非常不方便了:得手工把一个个依赖的contract拷贝进去,进行编译、有问题修改后还要重新保存到源文件里——好麻烦。 Linux下有一套牛逼的框架叫truffle,编译、调试、部署一条龙,一条—...
2018-03-15 18:37:59 1590
原创 win10下开发部署Dapp(2):编写、部署第一个合约
win10下开发部署Dapp(2):编写、部署第一个合约 上一篇我们使用Geth搭建了私链,并用自己的机器在私链上挖矿。Geth本质上是Ethereum客户端,负责与链上进行通信,运行了Geth的机器才算是链网络上的一个peer。 本篇我们使用私链 + Mist + Solidity Browser发布第一个智能合约。 打开Solidity Browser,输入以下代码:...
2018-03-15 18:36:54 734 2
原创 win10下开发部署Dapp(1):搭建私链
windows下开发部署Dapp(1:搭建私链)在以太坊上进行智能合约的开发,需要先在私链上进行开发、测试,然后再部署到公链。 本文将介绍私链的搭建,下一篇将部署一个智能合约版的helloworld。 1.下载最新版的Geth 64位windows客户端。该网页有时打不开,点击这里直接下载1.8.1版本。下载完成后安装。 2.下载最新版本以太坊钱包Mist,下载完成后安装。 3.准备一...
2018-03-15 18:35:32 1470
原创 win10下开发部署Dapp(0):从零开始
win10下开发部署Dapp(0):从零开始 我个人算是一个比较后知后觉的人,2017年12月底才开始炒币,开始深入了解区块链。这里以一个新人的角度回忆一下这段时间的收获,做个记录,同时希望能给其他人一些帮助。 在我学习区块链的过程中,给我最大迷惑的,其实是“挖矿”这个词。我们从What、Why、How三个方向解释一下“挖矿”。在这之前,我们先得弄清什么是区块链,什么是比特币。 ...
2018-03-15 18:17:48 801 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人