比特币源码编译及学习记录


一、bitcon源码编译ubuntu16.04

1)准备阶段,没法放图 

  • sudo apt-get update //更新软件包列表
  • sudo apt-get upgrade //跟新所有已安装的软件包,需要很久,貌似不必要步骤
  • sudo apt-get install make 
  • sudo apt-get install gcc 
  • sudo apt-get install g++ 
  • sudo apt-get install libdb-dev 
  • sudo apt-get install libdb++-dev
  • sudo apt-get install libdb5.1++-dev  //E:package报错 这里要修改为libdb5.3++-dev,5.1版本没有,使用apt-cache search libdb查找可能软件包
  • sudo apt-get install libboost-dev 
  • sudo apt-get install libboost-all-dev  //要一会
  • sudo apt-get install zlib1g-dev 
  • sudo apt-get install libssl-dev 
  • sudo apt-get install build-essential 
  • sudo apt-get install libminiupnpc-dev 
  • sudo apt-get install autoconf

2)下载源码

3)编译

  • cd bitcoin
  • sudo git tag //查看版本,.rc是测试版本
  • sudo git check v0.13.2 //要编译的版本是0.13的,最新是0.16,改成0.13.2
  • more doc/build-unix.md //根据系统选择编译命令行的说明
  • sudo ./autogen.sh
  • sudo ./configure //出现error(error:found berkerley db other than 4.8,require for portable wallets(--with-incompatible-bdb to ignore or --disable-wallet to disable wallet functionality)按照提示修改 第一个还是报相同的错误,因为没有安装berkerley
  • sudo ./configure --disable-wallet //报错libevent not found
  • sudo apt-get install libevent-dev
  • sudo make //第一次报错g++ internal compiler error:killed(program cc1plus) 第二次还是这个报错,clean再make还是这个问题,增加虚拟机运行内存到1.5g,编译通过,有几个warning暂时不理会
  • sudo make install //安装可执行文件到目录下
  • which bitcoind  //(显示/usr/local/bin/bitcoind)
  • which bitcoin-cli //(显示/usr/local/bin/bitcoin-cli)

上述两步可以确认bitcoin安装成功

4)在testnet启动bitcoin core

bitcoind -testnet  //输入后没显示,电脑发烫

另开一个终端 bitcoin-cli -testnet getinfo 可以看到是在加载区块的,刷新指令,blocks会增加

{   "version": 130200,   "protocolversion": 70015,   "blocks": 7456,   "timeoffset": -1,   "connections": 8,   "proxy": "",   "difficulty": 16,   "testnet": true,   "relayfee": 0.00001000,   "errors": "" }

bitcoin-cli -testnet getblockchaininfo 报错

error: Could not locate RPC credentials. No authentication cookie could be found, and no rpcpassword is set in the configuration file (/home/parallels/.bitcoin/bitcoin.conf)

需要设置密码控制对bitcoin core提供的应用程序编程接口,新建bitcoin.conf,配置信息如下

小型服务器资源不足配置示例

  • alertnotify=myemailscript.sh "Alert: %s" //运行指定的命令或脚本,通常通过电子邮件将紧急警报发送给该节点的所有者。
  • maxconnections=15//设置接受连接的最大节点数
  • prune=5000                        //通过删除旧的块,将磁盘空间要求降低到这个兆字节。可以看到~/.bitcoin/testnets内存保持在5.5g
  • minrelaytxfee=0.0001 //设置您将继续的最低费用交易。 低于此值,交易被视为零费用。 在内存受限的 节点上使用它来减少内存中交易池的大小。
  • maxmempool=200//将交易内存池限制在几兆字节
  • maxreceivebuffer=2500//将每连接内存缓冲区限制为 1000 字节的多个倍数。
  • maxsendbuffer=500//同上
  • rpcuser=bitcoinrpc
  • rpcpassword=CHANGE_THIS(自己改)

配置后重启 bitcoind -testnet -printtoconsole //测试网,输出显示在控制台上

bitcoin-cli -testnet getinfo//不要忘记testnet

bitcoin-cli -testnet getblockchaininfo //当前7.20记录时刻header 1354564

下载的块数据在~/.bitcoin/testnets目录下,以后要删除的话就是这里

du -a(s)h 可以查看文件所占内存大小,在~/.bitcoin下 du -ah testnets查看内存大小

要使用getawtransaction之类的命令访问交易须以配置bitcoin core构建完整的交易索引,这可以通过txindex实现,设置txindex=1,与prunes的设置是冲突的。(由于使用的是prunes配置,这里无法使用getblock,getblockhash,getrawtransaction等指令,这段错误)是由与没有加-testnet,可以使用getblockhash,bitcoin-cli -testnet getblockhash 1350000,bitcoin-cli -testnet getblock 0000000000000028198c4d52ecb33b594533a1a054e571ee30766a7997f5aa24 ,getrawtransaction,decoderawtransaction都可以运行。

附:在尝试centos上编译源码,比较不顺利,还没编译完

二、《精通比特币》

第一章 介绍

区块链,分布式账簿

第二章 比特币原理

总共发行21000000比特币,可以从千分之一(一毫比特币)到一亿分之一(一聪比特币)来交易

许多比特币都会包括新所有者的地址(买方地址)和当前所有者的地址(找零地址)

第三章 比特币核心

编译运行源码的介绍

第四章 密钥和地址

使用到bx做一些例子,bx的安装放在第四部分

每个密钥对包括一个私钥和一个公钥。 私钥(k)是一个数字,通常是随机选出的。有了私钥,我们就可以使用椭圆曲线 乘法这个单向加密函数产生一个公钥(K)。有了公钥(K),我们就可以使 用 一个单向加密哈希函数生成比特币地址(A)。这种非对称密码学的适用性 使得任何人都可以验证每笔交易的每个签名,同时确保只有私钥的所有者可以产 生有效的签名。

私钥,256位的二进制数,64位的16进制数

第五章 钱包

钱包里只含有钥匙,在某种意义上,比特币钱包是密钥链。

非确定性(随机)钱包,确定性(种子)钱包

第六章 交易

交易脚本和脚本语言

图灵非完备性

锁定脚本,脚本公钥(scriptpubkey),解锁脚本(scriptsig)

第七章 高级交易和脚本

7.2多重签名

7.3 p2sh

7.5时间锁7.5.4-7.5.6跳过,太枯燥了

第八章 比特币网络

完整的区块链节点是通过检查整个链中在它之下的数千个区块来保证这个UTXO 没有被支付,从而验证交易。而 SPV 节点是通过检查在其上面的区块将它 压在下面的深度来验证交易

第九章 区块链

9.9比特币的测试区块链

testnet--比特币的试验场:是用于测试的区块链,目前是testnet3,在2011年2月重启,在2017年超过20gb

segnet--隔离见证测试网络:已将segwit添加到testnets3

regtest--本地区块链:本地测试的封闭系统运行

第十章 挖矿与共识

10.5

CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)
{
    int halvings = nHeight / consensusParams.nSubsidyHalvingInterval;
    // Force block reward to zero when right shift is undefined.
    if (halvings >= 64)
        return 0;

    CAmount nSubsidy = 50 * COIN;
    // Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years.
    nSubsidy >>= halvings;
    return nSubsidy;
}

1722行,计算区块奖励函数

难度目标与目标调整 pow.cpp

第十一章 比特币安全

第十二章 比特币的应用

附录1.比特币白皮书

三、《区块链技术指南》

第二章 区块链基础

哈希函数,最常采用的是双SHA哈希函数

Merkle树是数据结构中的一种树

双重支付问题又称为“双花”问题

交易加密的非对称加密算法(椭圆曲线加密算法)ECC,一对数字相关的密钥,公钥可以通过算法从私钥中计算得出,而私钥不能从公钥中推出。

共识机制:pow(工作量证明),pos(权益证明),dpos(股份授权证明),分布一致性算法

第三章 区块链架构剖析

区块链管理的代码逻辑都在main.cpp程序中实现。

比特币使用berkeley db做钱包数据库。

3.3区块链2.0架构:以太坊区块链

比特币没有账户的概念,以太坊有两种类型账户:外部所有账户(eoa),合约账户(contract)

第四章 区块链中的密码学技术

4.1哈希算法 性质:抗碰撞性、原像不可逆、难题友好性

4.2 merkle数:merkle哈希树

4.3公钥密码算法 比特币使用的是secp256k1椭圆曲线

第五章 共识算法详解

5.1拜占庭容错算法

四、bitcoin explore 7.16的笔记全都没保存下来

参考http://www.8btc.com/bitcoin-explorer

1.docker的安装

参考官网,我是修改了镜像地址,两个镜像地址都修改为国内的阿里镜像

sudo docker run hello-world 作为测试

sudo docker image ls

sudo docker container ls -all/aq

2.根据参考的博文

sudo docker run -it fengyajie/bx-docker-alpine:1.0(-it 以交互模式运行容器,为容器重新分配一个伪输入终端)

猜你喜欢

转载自blog.csdn.net/m0_37847176/article/details/81025480