当前位置: 首页 > 编程日记 > 正文

比特币测试网络搭建

转自 https://blog.csdn.net/yzpbright/article/details/81004202

比特币

一、安装 Docker

二、安装和运行比特币测试网络(bitcoin-testnet)

1.下载比特币测试网络(bitcoin-testnet)的Docker镜像

docker pull freewil/bitcoin-testnet-box

2.运行Docker镜像

docker run -t -i -p 19001:19001 -p 19011:19011 freewil/bitcoin-testnet-box

输出如下类似:

@ubuntu:~$ sudo docker run -t -i -p 19001:19001 -p 19011:19011 freewil/bitcoin-testnet-box
tester@647e5bee8412:~/bitcoin-testnet-box$

3.启动测试网络

进入Docker运行环境后,输入下面的命令来启动两个比特币节点,从而组成比特币测试网络:

make start

输出如下类似:

tester@647e5bee8412:~/bitcoin-testnet-box$ make start
bitcoind -datadir=1 -daemon
Bitcoin server starting
bitcoind -datadir=2 -daemon
Bitcoin server starting

启动成功后,将在本机模拟运行两个比特币测试钱包节点,组成一个私有范围的比特币测试网络。

输入下面的命令可以查看测试网络节点状态信息:

make getinfo

输出如下类似:

bitcoin-cli -datadir=1 getinfo //第一个钱包节点的信息
{
​ “version”: 120100,
​ “protocolversion”: 70012,
​ “walletversion”: 60000,
​ “balance”: 0.00000000,
​ “blocks”: 0,
​ “timeoffset”: 0,
​ “connections”: 1,
​ “proxy”: “”,
​ “difficulty”: 4.656542373906925e-10,
​ “testnet”: false,
​ “keypoololdest”: 1467253951,
​ “keypoolsize”: 101,
​ “paytxfee”: 0.00000000,
​ “relayfee”: 0.00001000,
​ “errors”: “”
}
bitcoin-cli -datadir=2 getinfo //第二个钱包节点的信息
{
​ “version”: 120100,
​ “protocolversion”: 70012,
​ “walletversion”: 60000,
​ “balance”: 0.00000000,
​ “blocks”: 0,
​ “timeoffset”: 0,
​ “connections”: 1,
​ “proxy”: “”,
​ “difficulty”: 4.656542373906925e-10,
​ “testnet”: false,
​ “keypoololdest”: 1467253951,
​ “keypoolsize”: 101,
​ “paytxfee”: 0.00000000,
​ “relayfee”: 0.00001000,
​ “errors”: “”
}

我们可以顺便查看下两个节点的bitcoin.conf文件是如何配置的
节点1的配置文件,路径:/home/tester/bitcoin-testnet-box/1/bitcoin.conf

# testnet-box functionality
regtest=1
dnsseed=0
upnp=0
# listen on different ports than default testnet
port=19000
rpcport=19001
# always run a server, even with bitcoin-qt
server=1
# enable SSL for RPC server
#rpcssl=1
rpcallowip=0.0.0.0/0
rpcuser=admin1
rpcpassword=123

节点2的配置文件,路径:/home/tester/bitcoin-testnet-box/2/bitcoin.conf

内容类似节点1。

再顺便查看下节点1的对等节点的信息:

tester@0cc1d63a966c:~/bitcoin-testnet-box$ bitcoin-cli -datadir=1  getpeerinfo

[
{
​ "id": 0,
​ "addr": "127.0.0.1:52766",
​ "addrbind": "127.0.0.1:19000",
​ "services": "000000000000040d",
​ "relaytxes": true,
​ "lastsend": 1531383259,
​ "lastrecv": 1531383259,
​ "bytessent": 429,
​ "bytesrecv": 453,
​ "conntime": 1531383259,
​ "timeoffset": 0,
​ "pingtime": 0.002959,
​ "minping": 0.002959,
​ "version": 70015,
​ "subver": "/Satoshi:0.16.0/",
​ "inbound": true,
​ "addnode": false,
​ "startingheight": 0,
​ "banscore": 0,
​ "synced_headers": -1,
​ "synced_blocks": -1,
​ "inflight": [
​ ],
​ "whitelisted": false,
​ "bytessent_per_msg": {
​ "feefilter": 32,
​ "getheaders": 93,
​ "ping": 32,
​ "pong": 32,
​ "sendcmpct": 66,
​ "sendheaders": 24,
​ "verack": 24,
​ "version": 126
​ },
​ "bytesrecv_per_msg": {
​ "feefilter": 32,
​ "getaddr": 24,
​ "getheaders": 93,
​ "ping": 32,
​ "pong": 32,
​ "sendcmpct": 66,
​ "sendheaders": 24,
​ "verack": 24,
​ "version": 126
​ }
}]

再顺便查看下节点2的对等节点的信息:

tester@0cc1d63a966c:~/bitcoin-testnet-box$ bitcoin-cli -datadir=2  getpeerinfo

输出与节点1类型

4. 初始化和区块链数据

使用getnewaddress命令分别为两个钱包生成一个地址(或者用命令 make address1 也可以):

tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ bitcoin-cli -datadir=1 getnewaddress
2NAUVNvRVKn2QT2yoKYo1LXBBHES1DiiAWp
tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ bitcoin-cli -datadir=2 getnewaddress
2N5czXHSEFronnYvMHUhSinQW8jjp7UjRtu

这里生成的KEY,根据具体情况会发生变化

查看地址对应的私钥:

tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ bitcoin-cli -datadir=1  dumpprivkey  2NAUVNvRVKn2QT2yoKYo1LXBBHES1DiiAWp
cP5cEwanYgwJTUA6RG43DQ9p3ErpmqdPrJK7kX48zaMKkEfoL8s3
tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ bitcoin-cli -datadir=2  dumpprivkey  2N5czXHSEFronnYvMHUhSinQW8jjp7UjRtu
cQ8UyP5CoJ2SbHXdJagxxHSjYnxd69kaCaSU7uMPq6iRxpEhpuYP

注意:在正式的比特币网络环境下,平均是10分钟左右才能产生一个新的区块。但在这里的测试网络(testnet)特殊设定的环境下,区块是通过简单的命令控制就可以即时和批量产生的,方便程序开发测试。

生成一个区块:

tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make generate

输出类似如下:

bitcoin-cli -datadir=1 generate 1
[
"5db89a9818792f8665b6540d32c3834856cb6a07ed34aecb03128e96cbe3658a"]

继续生成9个区块:

tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make generate BLOCKS=9  

bitcoin-cli -datadir=1 generate 9
[
"61bc358db1ddb82972b830a00cb1dd27a7e6f3f5b409d667ff90af7a72caeb75",
"0eedb9ecb498df0e638013343ca97189ca768c54592ed5155a2ccbedf13f5309",
"7f74386d70b295102c5e44e373232648f7c07e00918c0b6de1ad033c3c121b38",
"7ca80b7bf1209d18e56b5c399992171c074c566e3109376b09877401b86a0b1d",
"61f0b2f3f4d2d4d199d7cbbed9bba721e65de3e30f474042c0eb4ce4cfc1ad54",
"2f97d16c46e5ccc46b795b9ee72f58720c494ae0f48d98d70a5b5a9e8b5be2ba",
"26edd9fd85b3e75ba7e731596ac065afbc29f68d8a6dd16f928d1e898ae18fb6",
"684fa2b10a662bffdd7e4e148e3a73c430cf7bbc14d0ed320200e008dd1ea625",
"2b62353790c59d2e643c815d56952264052dd99876a61e0d46e81accd7661262"]

此时查看钱包信息:

tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make getwalletinfo

输出类似如下:

bitcoin-cli -datadir=1 getwalletinfo
{
"walletname": "wallet.dat",
"walletversion": 159900,
"balance": 0.00000000,
"unconfirmed_balance": 0.00000000,
"immature_balance": 500.00000000,
"txcount": 10,
"keypoololdest": 1531366844,
"keypoolsize": 999,
"keypoolsize_hd_internal": 1000,
"paytxfee": 0.00000000,
"hdmasterkeyid": "0ac63ad922d529b4ff4be71a10f1751c3978b5f5"
}
bitcoin-cli -datadir=2 getwalletinfo
{
"walletname": "wallet.dat",
"walletversion": 159900,
"balance": 0.00000000,
"unconfirmed_balance": 0.00000000,
"immature_balance": 0.00000000,
"txcount": 0,
"keypoololdest": 1531366844,
"keypoolsize": 999,
"keypoolsize_hd_internal": 1000,
"paytxfee": 0.00000000,
"hdmasterkeyid": "78f6a0f992aae42ff3504477f150a65e86c1f287"
}

结果显示钱包1的balance(余额)里根本没有任何比特币,但immature_balance(未成熟的余额)里有相应的500个比特币,这是为什么呢?

结果显示,钱包1和钱包2都有20个区块了,没有什么问题,那么为什么钱包1的balance里没有比特币呢?

继续创建200个区块:

tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make generate BLOCKS=200

再查询钱包余额:

tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make getwalletinfo

bitcoin-cli -datadir=1 getwalletinfo
{
"walletname": "wallet.dat",
"walletversion": 159900,
"balance": 6000.00000000,
"unconfirmed_balance": 0.00000000,
"immature_balance": 3225.00000000,
"txcount": 220,
"keypoololdest": 1531366844,
"keypoolsize": 999,
"keypoolsize_hd_internal": 1000,
"paytxfee": 0.00000000,
"hdmasterkeyid": "0ac63ad922d529b4ff4be71a10f1751c3978b5f5"
}
bitcoin-cli -datadir=2 getwalletinfo
{
"walletname": "wallet.dat",
"walletversion": 159900,
"balance": 0.00000000,
"unconfirmed_balance": 0.00000000,
"immature_balance": 0.00000000,
"txcount": 0,
"keypoololdest": 1531366844,
"keypoolsize": 999,
"keypoolsize_hd_internal": 1000,
"paytxfee": 0.00000000,
"hdmasterkeyid": "78f6a0f992aae42ff3504477f150a65e86c1f287"
}

结果显示钱包1的balance(余额)里6000个比特币了。

到这里,可以初步得出结论是之前生成的20个区块还太”新鲜”,不够”老”,需要后面生成更多的区块来完成确认。

(补充:后来查询资料知道,挖矿所得的coinbase交易中的奖励必须要在100个区块深度之后才能花费。)

给钱包2转账,这里转10个比特币:

tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make sendfrom1 ADDRESS=2N5czXHSEFronnYvMHUhSinQW8jjp7UjRtu  AMOUNT=10
bitcoin-cli -datadir=1  sendtoaddress 2N5czXHSEFronnYvMHUhSinQW8jjp7UjRtu 10
967d37c71c1f768ff75e8ee675cf0dc5899a953bb4954b3b0f8ad3f25fc2aa52

这时,查询钱包余额,

tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make getwalletinfo

结果显示钱包2的10个比特币还未确认。

好办,继续生成10个区块,使得交易得到确认:

tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make generate BLOCKS=10

这时,再查看钱包余额:

tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make getwalletinfo

从结果可以看到钱包2的10个比特币到账了,说明交易得到了确认。

转载于:https://www.cnblogs.com/freebird92/p/10032096.html

相关文章:

1136 A Delayed Palindrome 需再做

注意点&#xff1a; 1. 大整数即高精度整数&#xff0c;数据结构bign要会定义 2. 记得写构造函数或者通过别的方式初始化bign 3. len属性记得手动更新 4. int d[maxn]数组是顺位存储&#xff0c;意味着字符串要逆序读入 AC代码 #include<cstdio> #include<iostr…

ES5-Array-push(),pop(),shift(),unshift()

参考文章&#xff1a;push()&#xff0c;pop() push方法用于在数组的末端添加一个或多个元素&#xff0c;并返回添加新元素后的数组长度。 注意&#xff0c;该方法会改变原数组&#xff0c;而不是创建一个新的数组。var arr [];arr.push(1) // 1 arr.push(a) // 2 arr.push(tr…

visual studio 2005 新建C++空项目无法调试的解决方案

(1)项目属性→配置属性→链接器从→调试→生成调试信息→将“否”改为“是(/DEBUG)”。(2)项目属性→配置属性→C/C→调试信息格式→将“禁用”改为“用于编辑并继续的程序数据库(/ZI)”。(3)项目属性→配置属性→C/C→优化→优化→将“最大化速度(/O2)”改为“禁用(/Od)”。转…

jQuery.append()、jQuery.html()存在的XSS漏洞

使用jQuery.append()、jQuery.html()方法时&#xff0c;如果其中内容包含<script>脚本而没有经过任何处理的话&#xff0c;会执行它。 简单的示例代码如下&#xff1a; 1 var xssStr <script>console.log(1)</script>; 2 $(#test).html(xssStr); 控制台会打…

1132 Cut Integer

注意&#xff1a;取余得到的后半段b可能为0&#xff0c;所以要预先判断&#xff0c;否则会出现浮点错误。 写成 if(b!0&&z%(a*b)0)是不能避免浮点错误的&#xff0c;因为z%(a*b)已经发生。需要更换两个条件的位置&#xff0c;把前提放在前面&#xff0c;即 if(b!0&am…

.net之工作流工程展示及代码分享(二)工作流引擎

在介绍完表单类的时候&#xff0c;接下来介绍工作流引擎&#xff0c;主要由四个类组成&#xff0c;分别是流程、流程步骤、流程实例、流程步骤实例类。 流程类&#xff1a; 1 [Serializable]2 public class Flow3 {4 [XmlAttribute]5 public Guid …

11.CCNA第十一天-配置OSPF/EIGRP(增强型内部网关协议)

配置OSPFBranch(config)#router ospf ?<1-65535> Process ID通配符掩码在IGP协议中&#xff0c;以连续的0和连续的1组成有一种不科学的称呼&#xff08;反掩码&#xff09;Branch#show running-config | section router ospfrouter ospf 10network 10.1.0.0 0.0.255.25…

Electio Time poj

第一次用结构体&#xff0c;写些自己的心得&#xff1a; #include<stdio.h> #include<algorithm> using namespace std; #define MAX 50000 struct COW //定义结构体&#xff0c;&#xff08;由于在cmp&#xff08;&#xff09;函数里需要用到结构体名&#xf…

浙江大学软件学院2020年保研上机模拟练习 7-3 Partial School Ranking

并查集的使用时注意&#xff1a; 1. 合并两个结点是 F[sa] sb 而不是 sb F[sa]&#xff0c;想一下含义。 2. 给每个结点赋予其自身为父节点时&#xff0c;要先判断它的父节点是不是0&#xff0c;也许已经有了。 我把照片里其他同学的成绩赋值为0&#xff0c;但是应该考虑到…

小米:开源不仅要站在巨人的肩膀上,还要为巨人指方向

今天上午&#xff0c;第一届小米开源技术峰会在北京举行&#xff0c;会上&#xff0c;小米人工智能与云平台副总裁崔宝秋致开场词&#xff0c;并发表了《小米开源之路》的演讲。 崔宝秋强调小米一直在推动开源&#xff0c;也是开源的倡导者。他告诉我们雷军创立小米的其中一个重…

微软企业库4.1学习笔记(七)创建对象 续集1

3.2使用Unity模块创建企业库对象 下面介绍如何使用前面的方法获取企业库对象的实例。代码示例如下 IUnityContainer containter newUnityContainer(); containter.AddNewExtension<EnterpriseLibraryCoreExtension>();首先创建一个Unity容器&#xff0c;并且添…

如何把 XML 文件显示为 HTML 表格

如何把 XML 文件显示为 HTML 表格 <html><head><script type"text/javascript">var xmlhttp; function loadXMLDoc(url){xmlhttpnull;if (window.XMLHttpRequest) {// code for IE7, Firefox, Mozilla, etc. xmlhttpnew XMLHttpRequest(); }else i…

浙江大学软件学院2020年保研上机模拟练习 7-2 Distance of Triples

思路一&#xff1a; 3个数组都按照小到大排序&#xff0c;设置3个指针&#xff0c;起始都在数组的末尾&#xff0c;如果1个指针向前移动1位可以让对应元素和另两个数组元素的距离之和减小&#xff0c;则移动它。如果某一回合三个指针都没动&#xff0c;就跳出循环。 非满分&a…

docker的分层

docker的分层 Contents docker的层docker的层是怎么来的docker是如何区分这些层 docker镜像是如何区分这些层的docker的层在本地的存储 vfsdevicemapperdocker的层 在这里&#xff0c;我们首先做一个样例&#xff0c;样例设定为一个镜像D。当然&#xff0c;这个D镜像不是单层&a…

《跟菜鸟学Cisco UC部署实战》-第 1 章 规划-课件(一共12章,免费)

链接:https://pan.baidu.com/s/1RiIphSUG5dsbPPqWaynHjQ 提取码:xjp9 复制这段内容后打开百度网盘手机App,操作更方便哦 《跟菜鸟学Cisco UC部署实战》-视频课程http://edu.51cto.com/course/10031.html 《Skype for Business Server 2015-企业外部-部署》视频课程http://ed…

UpdateDate()函数的作用

UpdateData(true); 用窗体上控件中的内容来更新和控件相关连的变量的值&#xff08;只能更新value类型的变量&#xff09; 例如&#xff1a;你在你的窗体中有一个Edit控件&#xff0c;为这个控件关联了CString类型的变量m_strName; 你在控件中添入内容之后&#xf…

1021 Deepest Root

要解决两大问题&#xff1a; 1. 数包含几个连通分量 2. 如何找到最深结点 注意&#xff1a;connected components的意思是连通分量 问题1我用并查集解决 问题2转化为如何得到每个结点的深度 值得注意之处是对于问题2来说&#xff0c;下图是测试用例1给出的树 可以看出从1…

一段处理百分数的js代码

function percent(s, e, i){s Number(s), isNaN(s) && (s "0");var n "%";return e !1 && (n ""), parseFloat((100 * s).toFixed(i)) n } s 需要处理的数字 e 是否显示百分号(%) true 或 false i 保留几位小数 转载于:h…

js字符串如何倒序

1. var reverse function( str ){ var newStr , i str.length; for(; i > 0; i--) { newStr str.charAt(i); } return newStr; };reverse(abcde) 2. var reverse function( str ){ return str.split().reverse().join(); }; 3.&#xff08;类似法2&#xff09; var rev…

Windows Phone 7 Tip (4) -- User Agent

The user agent for IE on Windows Phone 7 running on the Asus Galaxy device is:Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0) Asus;Galaxy6 source转载于:https://www.cnblogs.com/midshipman/archive/2010/04/29/1723416.html

vs2010 学习Silverlight学习笔记(7):控件样式与模板

概要&#xff1a; 终于知道Silverlight——App.xaml是干什么用的了&#xff0c;不仅可以用来封装样式&#xff08;类似css&#xff09;&#xff0c;还可以制定控件模版。。。好强大的功能啊。 封装&#xff1a; 继续学习《一步一步学Silverlight 2系列&#xff08;8&#xff09…

MinGW-notepad++开发c/c++程序

下载MinGW 点击下载 安装好后运行 最后点击左上角的 Installation,开始安装 1.编译&#xff1a; g -o a.exe a.cpp gcc -o hello.exe hello.c 2.运行&#xff1a; ./a.exe 转载于:https://www.cnblogs.com/feilongblog/p/4315636.html

re:Invent大会第四天:为什么Lambda值得你更多关注?

2018年11月29日的拉斯维加斯&#xff0c;AWS re:Invent大会进入第四天&#xff0c;上午照例由AWS CTO Werner Vogels带来主题演讲。 从主题演讲之前到主题演讲之后&#xff0c;改变最大的产品毫无疑问就是Lambda&#xff0c;有至少8个相关的最新发布。Vogels在2014年正式对外发…

1145 Hashing - Average Search Time

目录 思路 样例解释 AC代码 思路 要做出这道题必须直到除留余数法和平方探测法的原理。 除此之外有两个注意点&#xff1a; 1. 在查找时&#xff0c;如果当前位置上不是要找的数会继续找下去(如果k没超过表长的话)&#xff0c;但是如果当前位置上是0&#xff0c;说明表里…

C#和Java的闭包-Jon谈《The Beauty of Closures》

第一段略。。。 大多数讲闭包的文章都是说函数式语言&#xff0c;因为它们往往对闭包的支持最完善。当你在使用函数式语言时&#xff0c;很可能已经清楚了解了什么是闭包&#xff0c;所以我想写一篇在经典OO语言出现的闭包有什么用处应该也是很合适的事情。这篇文章我准备讲一下…

谷歌浏览器输入框背景颜色变黄的解决方案

2019独角兽企业重金招聘Python工程师标准>>> input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:focus { box-shadow:0 0 0 60px #eee inset; -webkit-text-fill-color: #878787; } 转载于:https://my.oschina.net/kitty0107/blog/296…

男人最不该做的7件事

1.没有目标 2.浪费时间 3.不独立 4.被动地活着 5.不规划自己的人生 6.不学习吸收信息 7.不接受爱情转载于:https://www.cnblogs.com/jiu0821/p/4315660.html

1085 Perfect Sequence

明确题目的核心是要找到 找到第一个满足 M > m*p 的M的下标。然后用该下标减去起点的下标即为序列元素个数。 二分区间应当是M所有可能的取值范围。起点是i1&#xff0c;终点是N而不是N-1&#xff0c;虽然A[N]上无元素。注意啊&#xff0c;原题要找的M是小于等于m*p的&…

[笔记]Go语言在Linux环境下输出彩色字符

Go语言要打印彩色字符与Linux终端输出彩色字符类似&#xff0c;以黑色背景高亮绿色字体为例&#xff1a; fmt.Printf("\n %c[1;40;32m%s%c[0m\n\n", 0x1B, "testPrintColor", 0x1B) 其中0x1B是标记&#xff0c;[开始定义颜色&#xff0c;1代表高亮&#xf…