Image for post
Image for post

熟悉以太坊代币经济和ICO的同学一定对ERC20这个词不陌生,市面上几乎绝大部分基于以太坊智能合约的项目都宣称自己的代币是ERC20代币,那么究竟什么是ERC20,为什么1个以太坊地址能够作为所有ERC20代币的钱包地址呢?

ERC20 (Ethereum Request for Comment 20) 是社区在2015年底提出的一项以太坊改进计划 (EIP),旨在给智能合约的实现提供一个标准,让智能合约能够像那些有自己区块链的原生数字货币 (比如比特币、以太币) 一样具有发送、转账、查询余额等等类似功能。凡是实现了这套标准的智能合约都可称为ERC20代币。发行基于ERC20标准的代币变得很简单,基本不超过10分钟,50行代码。ERC20让代币间变得互相兼容,也增强了代币的交易量和流动性。正是得益于ERC20标准的出现,基于以太坊的去中心化应用开始百花齐放。

言归正传,ERC20标准其实很简单,一共定义了以下5个函数接口和2个状态接口(event):


加密货币和区块链的一些资料

大学都与时俱进,纷纷开设了加密数字货币和区块链的课程:

https://github.com/jonnyhsy/cryptocurrency-and-blockchain-materials


git clone https://github.com/bitcoin/bitcoin
cd bitcoin
git tag
git checkout v0.14.1 # choose a recent stable version
git branch
brew install automake berkeley-db4 libtool boost --c++11 miniupnpc openssl pkg-config protobuf --c++11 qt5 libevent librsvg
./autogen.sh
./configure
make
make check # run tests

Note: 如果在编译bitcoind时有链接错误如:

CXXLD    bitcoindUndefined symbols for architecture x86_64:"_CRYPTO_num_locks", referenced from:CInit::CInit() in libbitcoin_util.a(libbitcoin_util_a-util.o)CInit::~CInit() in libbitcoin_util.a(libbitcoin_util_a-util.o)"_RAND_cleanup", referenced from:CInit::~CInit() in libbitcoin_util.a(libbitcoin_util_a-util.o)"_CRYPTO_set_locking_callback", referenced from:CInit::CInit() in libbitcoin_util.a(libbitcoin_util_a-util.o)CInit::~CInit() in libbitcoin_util.a(libbitcoin_util_a-util.o)"_OPENSSL_no_config", referenced from:CInit::CInit() in libbitcoin_util.a(libbitcoin_util_a-util.o)ld: symbol(s) not found for architecture x86_64clang: error: linker command failed with exit code 1 (use -v to see invocation)make[2]: *** [bitcoind] Error 1make[1]: *** [all-recursive] Error 1make: *** [all-recursive] Error 1

则在configure环境时需要明确给出boost库(具体看brew安装的是哪个版本的boost library)的地址:

./configure --with-boost-libdir=/usr/local/Cellar/boost/1.64.0_1/lib
make clean && make


重构和调试data pipeline的一点体会

Image for post
Image for post
Flume execution graph, copied from paper “FlumeJava: Easy, Efficient Data-Parallel Pipelines”

前一阵花时间用flume on dax 重写了一个很老的MapReduce job, 主要是为了提升性能,万万没想到中间碰到了很多个坑,特意写一篇记录总结下,也方便日后查阅。

该job本质不复杂,读取~2TB的cookie原始链接(on filesystem)并和Bigtable中的cookie数据(~90TB), join之后计算,输出一个原始的cookie链接图。因为各方面的原因,比如最主要的是读取的那个cookie bigtable有很多其它组也在读它,而且我们需要的column families只replicate在两个数据中心中,这个资源竞争得很激烈;同时我们有8个daily pipeline需要跑这个job (90TB * 8 / day),这个bigtable服务有时因此还会t …

nrek

Software Engineer and Crypto Developer/Enthusiast

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store