- 博客(109)
- 资源 (6)
- 问答 (2)
- 收藏
- 关注
转载 深入理解Python异步编程(上)
前言很多朋友对异步编程都处于“听说很强大”的认知状态。鲜有在生产项目中使用它。而使用它的同学,则大多数都停留在知道如何使用 Tornado、Twisted、Gevent 这类异步框架上,出现各种古怪的问题难以解决。而且使用了异步框架的部分同学,由于用法不对,感觉它并没牛逼到哪里去,所以很多同学做 Web 后端服务时还是采用 Flask、Django等传统的非异步框架。从上两届 PyCon ...
2019-03-08 15:06:22 611
转载 【以太坊基础系列-005】数据保存levelDB
LevelDb日知录之一:LevelDb 101 说起LevelDb也许您不清楚,但是如果作为IT工程师,不知道下面两位大神级别的工程师,那您的领导估计会Hold不住了:Jeff Dean和Sanjay Ghemawat。这两位是Google公司重量级的工程师,为数甚少的Google Fellow之二。 Jeff Dean其人:http://research.google.com/pe...
2019-01-12 16:08:07 1064
转载 【以太坊基础系列-004】深入浅出以太坊MPT(Merkle Patricia Tree)
1 Trie树Trie树,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。在图示中,键标注在节点中,值标注在节点之下。每一...
2019-01-12 16:05:28 876
原创 【以太坊代码分析系列001-获取合约pure,view数据的流程】
简单说明本文基于geth 1.8.19的代码 测试合约代码 pragma solidity ^0.4.20;contract Counter { uint count; function Counter() public { count = 0; } fu...
2019-01-08 14:55:55 751
转载 【智能合约系列009-如何做智能合约审计?】
研究报告【Finding The Greedy, Prodigal, and Suicidal Contracts at Scale】)指出,目前在以太坊中,有89%的智能合约代码都或多或少存在安全漏洞/隐患,这显然是一个非常惊人的调查结果,对社区而言也是一个巨大的风险因素。而随着智能合约的增多乃至未来可能的大规模发展,相信对各种合约代码的审计也将会变成一个专门的、专业的领域,并且是不能够、也不应...
2019-01-08 14:51:50 675 7
转载 【智能合约系列008-solidity事件】
在介绍事件前,我们先明确事件,日志这两个概念。事件发生后被记录到区块链上成为了日志。总的来说,事件强调功能,一种行为;日志强调存储,内容。事件是以太坊EVM提供的一种日志基础设施。事件可以用来做操作记录,存储为日志。也可以用来实现一些交互功能,比如通知UI,返回函数调用结果等1。事件当定义的事件触发时,我们可以将事件存储到EVM的交易日志中,日志是区块链中的一种特殊数据结构。日志与合约...
2019-01-08 14:51:06 475
转载 【智能合约系列006-重入攻击(Reentrancy attack)】
solidity漏洞类型学习笔记(一)以下代码内容皆参考于RICKGRAY师傅之前的文章《以太坊智能合约安全入门了解一下》,在此记录我在复现中发现的一些问题和学习记录。Reentrancy - 重入首先我们先参考代码实现一个类似公共钱包的代码, 1 2 3 4 5 6 7 8 9 10 11 ...
2019-01-08 14:40:15 1890
转载 【智能合约系列005-以太坊短地址攻击】
0x00 基础知识EVM虚拟机在解析合约的字节码时,依赖的是ABI的定义,从而去识别各个字段位于字节码的什么地方。关于ABI,可以阅读这个文档:https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI一般ERC-20 TOKEN标准的代币都会实现transfer方法,这个方法在ERC-20标签中的定义为:function tra...
2019-01-08 14:39:41 397
转载 【智能合约系列004-以太坊安全之 Parity 第二次安全事件漏洞分析】
Parity 多签钱包的第二次漏洞发生于 2017年11月07日,不同于 17年7月19日那次,本次不是资产被黑客盗走,而是合约底层被破坏,导致资产就在那,但却永远也取不出,就像驾船到太平洋最深处,投下一枚硬币,硬币就在那,但你可能再也无法找到它。 本次漏洞导致约 50万枚以太币被锁在多签智能合约里,当时价值大约 1.5亿美元。下面我们来分析下这次漏洞的原理。漏洞回放 ...
2019-01-08 14:38:32 485
转载 【智能合约系列003-以太坊安全之 Parity 第一次安全事件漏洞分析】
截止目前,Parity 多重签名钱包共发生过两次安全事件,第一次发生在 2017年07月19日,涉及 Parity 1.5 及以上版本,造成 15万以太币约 3000万美元被盗,第二次发生在 2017年11月07日,致使约 50万枚以太币被锁在合约中无法取出,当时价值大约 1.5亿美元,本篇先对发生于 7月19日的第一次安全漏洞做一下分析,下一篇再分析 2017年11月7日的安全漏洞。 ...
2019-01-08 14:38:03 513
转载 【智能合约系列002-TheDAO悲剧重演,SpankChain重入漏洞分析】
前言在10月8日,区块链项目方SpankChain在medium上发表了一篇文章,并表明其受到了攻击,导致损失了160多个ETH和一些Token,这次攻击事件,相对来说损失金额是较小的,约4万美元,不过值得一提的是:这次攻击事件的起因与2016年闹得沸沸扬扬的TheDAO事件如出一辙!一共被盗走300多万ETH,更为严重的是还间接导致了以太坊硬分叉...自那次事件起,以太坊的智能合约开发...
2019-01-08 14:21:26 2204 1
转载 【智能合约系列001-美链BeautyChain (BEC) 溢出漏洞分析】
一、Token地址:https://etherscan.io/address/0xc5d105e63711398af9bbff092d4b6769c82f793d二、BEC智能合约源码我们不需要看完以下所有代码,重点关注第三节要分析的内容。pragma solidity ^0.4.16;/** * @title SafeMath * @dev Math operation...
2019-01-08 14:21:16 727
原创 【以太坊系列-010】通过truffle以及ganache进行代币功能调试
说明: 环境使用ubuntu1804-desktop版本。1 truffle以及ganache1) Truffle Truffle 是最流行的开发框架,能够在本地编译、部署智能合约,使命是让开发更容易。 Truffle 需要以太坊客户端支持,需要支持标准的JSON RPC API。2)Ganache Ganache可以快速启动个人以太坊区块链,并可...
2019-01-08 14:20:54 2897 1
原创 【以太坊系列-009】在ethereum private chain上进行oraclize的调用操作
说明: 本人使用的是 ubuntu1804-server版本(不要使用live-server,存在缺少部分包。) 在私链中容易遇到问题,本人第一次成功是通过truffle+ethereumjs-testrpc。 私链上不熟悉的人,操作会比较麻烦,容易出问题,并且文档比较少。 本文只是记录oraclize环境的搭建,更多请参阅官网。(更多搭建请参照该系列其余...
2018-11-27 19:04:48 2519
转载 【以太坊系列-008】oraclize介绍
IntroductionOracle service builds the bridge between blockchain and the real world, and we are going to introduce an oracle service called Oraclize.The following image describes the underlying mec...
2018-11-27 18:54:16 575
原创 【以太坊系列-007】solidity一些函数修饰说明
solidity一些函数修饰说明一、函数可见性分析public - 任意访问private - 仅当前合约内internal - 仅当前合约及所继承的合约external - 仅外部访问(在内部也只能用外部访问方式访问)二、函数的限制访问在Solidity中constant、view、pure三个函数修饰词的作用是告诉编译器,函数不改变/不读取状态变量,这样函数执行就可以不消...
2018-11-27 17:18:59 259
原创 【以太坊系列-006】ethereum solidity智能合约在geth控制台上的操作(mapping实践)
说明,本文基于已经部署好的etherum环境,在geth控制台上操作以下命令。文中用到的命令,可以参考该系列的其他文档。1、解锁账号> personal.unlockAccount(eth.accounts[0], "lyh001", 300) # 300是解锁时间,0表示没有限制> eth.defaultAccount=eth.coinbase; # 以上命令如...
2018-11-27 17:17:13 1455
原创 【以太坊系列-005】使用solc编译solidity智能合约,并生产web3deploy格式的代码
说明本文主要介绍,只通过solc来进行智能合约的部署,更简单的方式是通过remix直接生成。该场景是用于用户自己修改了solc编译器,remix无法使用的情况。1、 代码结构# cat counter.solpragma solidity ^0.4.20;contract Counter { uint count; function Counter(...
2018-11-17 14:42:55 1306
转载 MySql-Undo及Redo详解
00 – Undo LogUndo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版本并发控制(简称:MVCC)。- 事务的原子性(Atomicity)事务中的所有操作,要么全部完成,要么不做任何操作,不能只做部分操作。如果在执行的过程中发生了错误,要回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过。- 原理U...
2018-11-02 10:19:31 692
原创 【以太坊系列-002】Remix 搭建与简单使用,并支持外部访问
remix是基于浏览器的在线编译器,鉴于网络问题,可能存在登不上去的问题,因此 ,可以搭建自己本地的Remix。 本文是基于virtalbox的ubuntu1804的虚拟机环境,配置是1核2GB内存(建议内存越多越好)。官方在线编译器https://ethereum.github.io/browser-solidityhttps://remix.ethereum.org推...
2018-10-27 11:54:31 1704 1
转载 如何设置MySQL同步(Replication)
MySQL 提供了数据库的同步功能,这对我们实现数据库的冗灾、备份、恢复、负载均衡等都是有极大帮助的。本文描述了常见的同步设置方法。一、准备服务器由于MySQL不同版本之间的(二进制日志)binlog格式可能会不一样,因此最好的搭配组合是Master的MySQL版本和Slave的版本相同或者更低,Master的版本肯定不能高于Slave版本。本文中,我们假设主服务器(以下简称Maste...
2018-10-24 15:42:28 700
转载 【以太坊基础系列-001】merkle树
merkle树 区块链中的每个区块都包含了产生于该区块的所有交易,且以Merkle树表示。 默克尔树(又叫哈希树)是一种二叉树,由一个根节点、一组中间节点和一组叶节点组成。最下面的叶节点包含存储数据或其哈希值,每个中间节点是它的两个孩子节点内容的哈希值,根节点也是由它的两个子节点内容的哈希值组成。默克尔树的特点是,底层数据的任何变动,都会传递到其父亲节点,一直到树根。 ...
2018-09-28 08:55:39 1401
转载 Percona XtraDB Cluster(PXC)——架构原理
Percona XtraDB Cluster(PXC):Percona XtraDB Server +WSREP API(write set replication patches) + Galera(galera library)转自:http://blog.chinaunix.net/uid-25206403-id-3912291.html同类基于验证复制的集群结构:codersh...
2018-09-26 09:29:42 2988 1
转载 MySql悲观锁和乐观锁的使用
MySql悲观锁和乐观锁的使用 该文转载自:https://blog.csdn.net/yanghan1222/article/details/80449528 现在我有一个购买商品的需求,我们知道当我们购买商品时,后台会进行减库存和增加购买记录的操作。我们分别在无锁和乐观锁和悲观锁进行相应的代码演示来说明问题。 建表语句如下:CREATE TAB...
2018-09-26 09:27:55 206
转载 linux下开启SSH,并且允许root用户远程登录,允许无密码登录,SSH密钥登陆改为密码登陆
参考:http://blog.csdn.net/jia0511/article/details/82376981. 允许root用户远程登录修改ssh服务配置文件sudo vi /etc/ssh/sshd_config调整PermitRootLogin参数值为yes,如下图:2. 允许无密码登录同上,修改ssh服务配置文件,两种情况:1) 将PermitEmpty...
2018-09-19 13:08:35 8366
转载 深入理解overlayfs(二):使用与原理分析
在初步了解overlayfs用途之后,本文将介绍如何使用overlayfs以及理解该文件系统所特有的一些功能特性。由于目前主线内核对overlayfs正在不断的开发和完善中,因此不同的内核版本改动可能较大,本文尽量与最新的内核版本保持一致,但可能仍会存在细微的出入。内核版本:Linux-4.14示例环境:pi3 挂载文件系统挂载文件系统的基本命令如下:mount -t ov...
2018-09-08 11:14:42 2962
转载 docker 存储驱动之overlay2
overlay2overlay2原生支持128层,这提供docker build和docker commit更好的性能支持 在执行完docker pull ubuntu后,可以看到$ ls -l /var/lib/docker/overlay2total 24drwx------ 5 root root 4096 Jun 20 07:36 223c2864175491657d23...
2018-09-08 10:56:12 1408
转载 docker 存储驱动之overlay
overlayOverlayFS是一个类似于AUFS 的现代联合文件系统,但更快,实现更简单。Docker为OverlayFS提供了一个存储驱动程序。 * 注:OverlayFS是内核提供的文件系统,overlay和overlay2是docker提供的存储驱动设置存储方式编辑/etc/docker/daemon.json{ "storage-driver": "overla...
2018-09-08 10:54:51 325
转载 Docker之Linux UnionFS
UnionFSUnionFS是一种为Linux,FreeBSD和NetBSD操作系统设计的把其他文件系统联合到一个联合挂载点的文件系统服务。它使用branch把不同文件系统的文件和目录“透明地”覆盖,形成一个单一一致的文件系统。这些branches或者是read-only或者是read-write的,所以当对这个虚拟后的联合文件系统进行写操作的时候,系统是真正写到了一个新的文件中。看起来这个虚...
2018-09-08 10:35:40 694
转载 KMP算法最浅显理解
说明KMP算法看懂了觉得特别简单,思路很简单,看不懂之前,查各种资料,看的稀里糊涂,即使网上最简单的解释,依然看的稀里糊涂。 我花了半天时间,争取用最短的篇幅大致搞明白这玩意到底是啥。 这里不扯概念,只讲算法过程和代码理解:KMP算法求解什么类型问题字符串匹配。给你两个字符串,寻找其中一个字符串是否包含另一个字符串,如果包含,返回包含的起始位置。 如下面两个字符串:char...
2018-09-01 14:05:02 143
转载 Mysql MVCC实现原理解析
MVCC(Multi-Version Concurrency Control | 多版本并发控制) InnoDB通过为每一行记录添加两个额外的隐藏的值来实现MVCC,这两个值一个记录这行数据何时被创建,另外一个记录这行数据何时过期(或者被删除)。但是InnoDB并不存储这些事件发生时的实际时间,相反它只存储这些事件发生时的系统版本号(LSN)。这是一个随着事务的创建而不断增长的数字。每个...
2018-08-22 18:27:36 14038
转载 轻松理解MYSQL MVCC 实现机制-(1)
1. MVCC简介1.1 什么是MVCCMVCC是一种多版本并发控制机制(Multi-Version Concurrency Control)。1.2 MVCC是为了解决什么问题?大多数的MYSQL事务型存储引擎,如,InnoDB,Falcon以及PBXT都不使用一种简单的行锁机制.事实上,他们都和MVCC–多版本并发控制来一起使用. 大家都应该知道,锁机制可以控制并发操作,但是...
2018-08-22 09:02:34 183 1
翻译 深入理解SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE
概念和区别SELECT ... LOCK IN SHARE MODE走的是IS锁(意向共享锁),即在符合条件的rows上都加了共享锁,这样的话,其他session可以读取这些记录,也可以继续添加IS锁,但是无法修改这些记录直到你这个加锁的session执行完成(否则直接锁等待超时)。SELECT ... FOR UPDATE 走的是IX锁(意向排它锁),即在符合条件的rows上都加了排它锁,...
2018-08-20 19:32:44 828
原创 读者写者问题--使用信号量的读者优先与写者优先程序分析
千万要注意:readcount,writecount要设成共享变量(因为是进程),要不然可能会导致死锁所谓谁谁优先的问题,我认为主要体现在以下两点中:1.当低优先级进程(线程)获得临界区时,高优先级进程能很快从低优先级的进程中抢得访问权。2.当高优先级的进程获得临界区访问权时,低优先级得等到高优先级全部访问完的空闲时间才能抢得访问权。这两点中, 第一点一定得要,不然无法体现出...
2018-08-20 18:58:03 5065 1
转载 用户空间与内核空间,进程上下文与中断上下文[总结]
1、前言 最近在学习linux内核方面的知识,经常会看到用户空间与内核空间及进程上下文与中断上下文。看着很熟悉,半天又说不出到底是怎么回事,有什么区别。看书过程经常被感觉欺骗,似懂非懂的感觉,很是不爽,今天好好结合书和网上的资料总结一下,加深理解。2、用户空间与内核空间 我们知道现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的3...
2018-08-20 18:43:16 134
转载 关于 B+tree (附 python 模拟代码)
在之前,我一直只把 b+tree 当成是 btree 的一种变形,或者说是在某种情况下的一种优化,另外一些情况可能还是 btree 好些。但是做完之后才发现,b+tree 在各种情况都可以完全取代 btree,并能够让索引性能得到比 btree 更好的优化。因为 b+tree 设计的核心要点,是为了弥补 btree 最大的缺陷。btree 最大的缺陷是什么?首先,我们知道对于 btree ...
2018-08-16 18:17:56 2703 2
转载 B+树介绍
B+树B+树和二叉树、平衡二叉树一样,都是经典的数据结构。B+树由B树和索引顺序访问方法(ISAM,是不是很熟悉?对,这也是MyISAM引擎最初参考的数据结构)演化而来,但是在实际使用过程中几乎已经没有使用B树的情况了。B+树的定义十分复杂,因此只简要地介绍B+树:B+树是为磁盘或其他直接存取辅助设备而设计的一种平衡查找树,在B+树中,所有记录节点都是按键值的大小顺序存放在同一层的叶节点中...
2018-08-16 18:14:52 1044
转载 分布式之数据库和缓存双写一致性方案解析
【本文转自博客园 作者:孤独烟 原文链接:https://www.cnblogs.com/rjzheng/p/9041659.html】为什么写这篇文章? 首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。 但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存。又或者是先删除缓存,再更新数据库...
2018-08-16 09:23:43 1314
原创 cloud-init实现自动扩展 磁盘分区
背景说明cloud-init 的一项功能是自动扩展linux的指定分区。比如linux镜像是20G,在部署instance时选择的flavor磁盘定义是40G,那么instance部署时cloud-init会自动将制定分区扩到 40G。 环境准备1) 该功能依赖growpart,所以需要在开始前,在镜像中安装包: yum install –y cloud-utils-gro...
2018-08-09 16:34:56 7461
logstash-filter-translate-3.0.4.zip
2018-04-21
MySQL技术内幕:InnoDB存储引擎.mobi
2018-03-06
Redis设计与实现数据库技术丛书.mobi
2018-03-06
求教java中的unsafe.allocateMemory() 会导致内存申请失败吗?
2013-12-25
求教spring jdbc 编程式事务 与申明式事务 死锁如何解决?
2013-08-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人