当前位置:首页 » 比特币问答 » 搭建btc

搭建btc

发布时间: 2023-03-09 09:18:12

A. 手把手教你搭建比特币卫星接收节点

原文: https://hackernoon.com/building-your-own-bitcoin-satellite-node-6061d3c93e7

比特币区块链实际上是一个账本,所以需要将全部交易信息包含在账本内,从而体现每个比特币的所有权。账本需要在节点之间相互广播,以达到分布式备份账本的目的,这是比特币的关键特征。目前,节点广播几乎完全依赖互联网,这给比特币带来了潜在的「单点故障」问题,降低了整个网络的稳健性和安全性。

例如,海底光缆出现故障,或受政策影响的针对性断网都可能导致大范围的网络断连,从而影响该地区比特币节点的同步,损害比特币的可用性。

同步卫星的出现,减少了比特币对互联网的依赖,使节点同步可以通过接收卫星信号的形式完成。只需要一个卫星天线和一个接收器,就可以接收从卫星传来的区块数据,保持节点同步。同时,这也降低了运行节点的成本,在某些欠发达地区,网络连接费用高昂,使用卫星同步区块数据可以省下网费,让更多人有机会运行节点,从而提高比特币的覆盖率。

国外早有大神自制了卫星接收节点,本文将其整理成简略教程,供大家参考。

首先调节三脚架高低。

然后将卫星盘连接到三脚架上,并调节方位和高低。

然后将高频头安装到高频头支架上。

如果一切顺利,你的卫星天线应该是这样的。

使用 F 转接头将 SDR 连接到高频头电源上,然后使用同轴电缆将高频头也连接到电源上。连接前需要确认电源与 SDR 是匹配的,否则错误的电源将损坏 SDR。

Blockstream 为所需软件提供了预建的二进制文件。

打开「终端」后,输入

回车输入密码,密码是安装时设置的。然后可以看到待更新列表,输入 y,回车。

升级结束后,重启。

在「终端」中,输入

回车后屏幕出现 Is this ok [y/N],输入 y,回车。

完成后,将 Blockstream Satellite 在 Github 的库克隆到本地,创建一个项目。

首先要创建卫星接收器,输入如下命令:

安装好后开始克隆 Github 库

去刚才克隆好的文件夹

现在我们已经准备好所有 gr-framer GNUradio 模组需要的软件了,开始执行安装脚本:

输入密码

创建 gr-framers
恭喜,你已经安装了 gr-framers GNUradio!

现在开始执行 Blockstream GNUradio 安装脚本:

创建 Blockstream 模组

现在已经安装好 Blockstream 模组了。

我们需要设置 PYTHONPATH 和 LD_LIBRARY_PATH,来让接收器正常工作:

到这里,所有关于 GNUradio 的设置都已经完成了!

安装相关软件:

安装 FIBRE 相关软件
现在,克隆 FIBRE 库:

然后去克隆的文件夹:

开始创建:

现在创建 FIBRE

(此处可以添加 -jn 来加速编译,其中 n 是 cpu 核心数。如果你是四核处理器,就输入命令 make -j4)

已完成创建
完成后,开始安装:

FIBRE 安装好了

FIBRE 已经安装好了!你现在可以开始同步,或者将已经同步好的节点复制过来。

到此为止,你已经准备好前期工作,下面开始对齐卫星盘。

Blockstream 目前有 5 颗卫星,确定你所在地区被哪一颗所覆盖。

可在 Blockstram 官网 查询:

本文选择的是 Galaxy 18 卫星。

官网也有对齐工具,你可以输入你的地址或经纬度,它会告诉你如何调整天线的高度、方位和极性。这里是 对齐工具 。

为了得到一个 Galaxy 18 大概的可视化方位,我用了 SatellitePointer 这个 App。

确保在视线的 30 度之内没有建筑、树、或其他遮挡物。理想的视线是这样的:

视线越好,你接收的信号也就越好。

当你已经确定好卫星盘的摆放地点,你可以开始设置方位和高度。

信号质量与高度角密切相关,所以把高度角调节得越准确越好。

当你觉得高度已经调好了,就可以开始设置高频头的方位了。

设置高频头极性有点难办。我用了 SatellitePointer 这个 App 来帮助设置。我把手机的顶边贴近高频头底部的平边(图中红线处),然后看 App 中的指示:

虽然高频头上也有角度器,但是我觉得 App 更方便。

在启动接收器之前,你需要确定卫星的频率,并将其输入 rx_gui.py 文件。之前的教程里已经说过如何查询频率了。我使用的 Galaxy 18 卫星的频率是 12022.85 MHz。

要计算输入到 rx_gui.py 的频率,需要用卫星频率减去你高频头的 LO 频率。本文使用的高频头 LO 频率为 10750 MHz,因此最后的结果是 1272.85 MHz。

需要将 MHz 转化为 Hz,最后结果是 1272850000 Hz。

现在你可以将频率和增益(设为 40 即可)写入文件中,然后运行。

rx_gui.py 文件在 Blockstream 库的 satellite/grc 文件夹中。

当你运行 rx_gui.py 时,会弹出一个窗口。我们需要用到 FLL In 这个选项卡。

图形显示波动很大,刷新很快。要解决这个问题,你可以设置一下 average 参数,设为 15 即可。

缓慢地左右旋转卫星盘,观察 FLL In 的变化。我同样用了之前的 App 来帮助寻找方位。

如果你成功了,你会看到如下所示的图表。

现在你需要调整方位(左右)、高度(上下)和高频头的极性,来让信号更好。最后会得到如下所示的图表。

要确认你的信号是好的,你可以到 Abs PMF Out 选项卡,看一下有没有峰值。

你也可以到 Costas Sym Out 选项卡去看散点图。

最后,「终端」会显示:

恭喜!你成功对齐了卫星盘!

输入指令:

可以在 debug.log 文件中看到有没有成功接收区块,如果你看到如下的信息:

那么就已经成功了!
现在,你可以断网,试着只通过卫星来接收区块。

B. 怎么搭建山寨币矿池

搭建矿池需要的准备工作:
1、最好独立服务器和固定IP ,VPS也行
2、固定ip 地址
3、操作系统:ubuntu,centos,linux 内存不小于2G
4、软件:矿池的前台和后台程序,一般多是英文的资料。

搭建矿池的教程:
1、准备工作:
熟悉linux系统,
编写程序的基本功,
熟悉网站HTML代码
基本的英文能力
2、操作系统:ubuntu,centos,linux 内存不小于2G
3、搭建矿池全套教程参考网站:
搭建BTC矿池后端程序:https://github.com/forrestv/p2pool/
搭建BTC矿池前端程序:https://github.com/hardcpp/P2PoolExtendedFrontEnd
搭建矿池资料https://github.com/viperaus/stratum-mining
搭建矿池资料https://en.bitcoin.it/wiki/P2Pool
搭建矿池资料https://bitcointalk.org/index.php?topic=18313.0
搭建矿池资料https://bitcointalk.org/index.php?topic=62842.0
4、搭建BTC矿池具体步骤、教程:http://www.800996.com/btc/pool/BTCKC.htm
5、搭建LTC矿池具体步骤、教程:http://www.800996.com/btc/pool/lTCKC.htm

C. 如何在windows平台下编译比特币bitcoin客户端

第一步:安装变编译环境QT和MINGW,msys
1、msys是一个在windows平台模拟shell的程序。

访问http://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download
下载安装程序之后,通过安装管理程序,按安装以下内容:
From MinGW installation manager -> All packages -> MSYS
选中以下安装包

msys-base-bin
msys-autoconf-bin
msys-automake-bin
msys-libtool-bin
点 apply changes开始安装。他会自动下载安装好。
需要注意的是,确保不要安装msys-gcc和msys-w32api ,因为这两个包和我们的编译系统发生冲突。
很多人出现一些莫名其妙的问题,就是因为这两个包。
2、安装 MinGW-builds
访问
http://sourceforge.net/projects/mingw-w64/files/Toolchains targetting Win32/Personal Builds/mingw-builds/4.8.2/threads-posix/dwarf/i686-4.8.2-release-posix-dwarf-rt_v3-rev3.7z/download
下载并解压缩 i686-4.8.2-release-posix-dwarf-rt_v3-rev3.7z 到C盘根目录 C:\
注意我的目录结构。你尽量和我一样。

3、设置PATH环境变量,将C:\mingw32\bin;添加到第一个。
4、在命令行模式下输入 gc -v 会得到以下内容
c:\gcc -v
Using built-in specs.
COLLECT_GCC=c:\mingw32\bin\gcc.exe
COLLECT_LTO_WRAPPER=c:/mingw32/bin/../libexec/gcc/i686-w64-mingw32/4.8.2/lto-wrapper.exe
Target: i686-w64-mingw32
Configured with: ../../../src/gcc-4.8.2/configure --host=i686-w64-mingw32 --build=i686-w64-mingw32 --target=i686-w64-mingw32 --prefix=/mingw32 --with-sysroot=/c/mingw482/i686-482-posix-dwarf-rt_v3-rev3/mingw32 --with-gxx-include-dir=/mingw32/i686-w64-mingw32/include/c++ --enable-shared --enable-static --disable-multilib --enable-languages=ada,c,c++,fortran,objc,obj-c++,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-sjlj-exceptions --with-dwarf2 --disable-isl-version-check --disable-cloog-version-check --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=i686 --with-tune=generic --with-libiconv --with-system-zlib --with-gmp=/c/mingw482/prerequisites/i686-w64-mingw32-static --with-mpfr=/c/mingw482/prerequisites/i686-w64-mingw32-static --with-mpc=/c/mingw482/prerequisites/i686-w64-mingw32-static --with-isl=/c/mingw482/prerequisites/i686-w64-mingw32-static --with-cloog=/c/mingw482/prerequisites/i686-w64-mingw32-static --enable-cloog-backend=isl --with-pkgversion='i686-posix-dwarf-rev3, Built by MinGW-W64 project' --with-bugurl=http://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -I/c/mingw482/i686-482-posix-dwarf-rt_v3-rev3/mingw32/opt/include -I/c/mingw482/prerequisites/i686-zlib-static/include -I/c/mingw482/prerequisites/i686-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -I/c/mingw482/i686-482-posix-dwarf-rt_v3-rev3/mingw32/opt/include -I/c/mingw482/prerequisites/i686-zlib-static/include -I/c/mingw482/prerequisites/i686-w64-mingw32-static/include' CPPFLAGS= LDFLAGS='-pipe -L/c/mingw482/i686-482-posix-dwarf-rt_v3-rev3/mingw32/opt/lib -L/c/mingw482/prerequisites/i686-zlib-static/lib -L/c/mingw482/prerequisites/i686-w64-mingw32-static/lib -Wl,--large-address-aware'
Thread model: posix
gcc version 4.8.2 (i686-posix-dwarf-rev3, Built by MinGW-W64 project)
至此,你的开发环境已经搭建好了,很简单吧

第二部分:下载bitcoin引用的外部库
我们把它们全部放在 C:\deps目录下
2.1 安装OpenSSL下载:http://www.openssl.org/source/openssl-1.0.1g.tar.gz
进入启动 MinGw shell 比如目录:(C:\MinGW\msys\1.0\msys.bat)运行这个msys.bat,就会启动一个shell环境,提示符是$
输入命令
cd /c/deps/
tar xvfz openssl-1.0.1g.tar.gz
cd openssl-1.0.1g
Configure no-shared no-dso mingw
make

等待几分钟后,就把openssl编译好了。

2.2 下载Berkeley DB 访问: http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz
我们推荐使用 4.8版本
同样在msys shell环境下输入以下命令
cd /c/deps/
tar xvfz db-4.8.30.NC.tar.gz
cd db-4.8.30.NC/build_unix
../dist/configure --enable-mingw --enable-cxx --disable-shared --disable-replication
make
等待编译

2.3 安装Boost,下载地址: http://sourceforge.net/projects/boost/files/boost/1.55.0/

msys命令:
cd C:\deps\boost_1_55_0\
bootstrap.bat mingw
b2 --build-type=complete --with-chrono --with-filesystem --with-program_options --with-system --with-thread toolset=gcc variant=release link=static threading=multi runtime-link=static stage

2.4 安装Miniupnpc 下载地址: http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.9.tar.gz

cd C:\deps\miniupnpc
mingw32-make -f Makefile.mingw init upnpc-static

2.5下载 protoc 和 libprotobuf:
Download and unpack http://protobuf.googlecode.com/files/protobuf-2.5.0.zip
msys shell命令

cd /c/deps/protobuf-2.5.0
configure --disable-shared
make

2.6 qrencode:
下载地址: http://prdownloads.sourceforge.net/libpng/libpng-1.6.10.tar.gz?download
命令
cd /c/deps/libpng-1.6.10
configure --disable-shared
make

下载 http://fukuchi.org/works/qrencode/qrencode-3.4.3.tar.gz ode:
cd /c/deps/qrencode-3.4.3

LIBS="../libpng-1.6.10/.libs/libpng16.a ../../mingw32/i686-w64-mingw32/lib/libz.a" \
png_CFLAGS="-I../libpng-1.6.10" \
png_LIBS="-L../libpng-1.6.10/.libs" \
configure --enable-static --disable-shared --without-tools

make

2.7 安装 Qt 5 库
下载和解压缩
http://download.qt-project.org/official_releases/qt/5.2/5.2.1/submoles/qtbase-opensource-src-5.2.1.7z
http://download.qt-project.org/official_releases/qt/5.2/5.2.1/submoles/qttools-opensource-src-5.2.1.7z
在 windows命令行输入:
set INCLUDE=C:\deps\libpng-1.6.10;C:\deps\openssl-1.0.1g\include
set LIB=C:\deps\libpng-1.6.10\.libs;C:\deps\openssl-1.0.1g

cd C:\Qt\5.2.1
configure.bat -release -opensource -confirm-license -static -make libs -no-sql-sqlite -no-opengl -system-zlib -qt-pcre -no-icu -no-gif -system-libpng -no-libjpeg -no-freetype -no-angle -no-vcproj -openssl-linked -no-dbus -no-audio-backend -no-wmf-backend -no-qml-debug

mingw32-make

set PATH=%PATH%;C:\Qt\5.2.1\bin

cd C:\Qt\qttools-opensource-src-5.2.1
qmake qttools.pro
mingw32-make

3. 下载Bitcoin 0.9.1 地址: https://github.com/bitcoin/bitcoin/archive/v0.9.1.zip

在msys shell下输入以下命令行:
cp /c/deps/libpng-1.6.10/.libs/libpng16.a /c/deps/libpng-1.6.10/.libs/libpng.a

cd /c/bitcoin-0.9.1

./autogen.sh

CPPFLAGS="-I/c/deps/boost_1_55_0 \
-I/c/deps/db-4.8.30.NC/build_unix \
-I/c/deps/openssl-1.0.1g/include \
-I/c/deps \
-I/c/deps/protobuf-2.5.0/src \
-I/c/deps/libpng-1.6.10 \
-I/c/deps/qrencode-3.4.3" \
LDFLAGS="-L/c/deps/boost_1_55_0/stage/lib \
-L/c/deps/db-4.8.30.NC/build_unix \
-L/c/deps/openssl-1.0.1g \
-L/c/deps/miniupnpc \
-L/c/deps/protobuf-2.5.0/src/.libs \
-L/c/deps/libpng-1.6.10/.libs \
-L/c/deps/qrencode-3.4.3/.libs" \
./configure \
--disable-upnp-default \
--disable-tests \
--with-qt-incdir=/c/Qt/5.2.1/include \
--with-qt-libdir=/c/Qt/5.2.1/lib \
--with-qt-bindir=/c/Qt/5.2.1/bin \
--with-qt-plugindir=/c/Qt/5.2.1/plugins \
--with-boost-system=mgw48-mt-s-1_55 \
--with-boost-filesystem=mgw48-mt-s-1_55 \
--with-boost-program-options=mgw48-mt-s-1_55 \
--with-boost-thread=mgw48-mt-s-1_55 \
--with-boost-chrono=mgw48-mt-s-1_55 \
--with-protoc-bindir=/c/deps/protobuf-2.5.0/src

make

strip src/bitcoin-cli.exe
strip src/bitcoind.exe
strip src/qt/bitcoin-qt.exe

这样,你就得到了变异好的 bitcoin-cli.exe和bitcoind.exe ,bitcoin-qt.exe(windows QT图形界面的钱包软件)

D. BTC主网节点搭建

-环境 Centos7+
-硬盘500GB+
宝塔环境,硬盘挂载到www盘

cd /www/ wget https://bitcoin.org/bin/bitcoin-core-0.20.0/bitcoin-0.20.1-x86_64-linux-gnu.tar.gz

tar zxf bitcoin-0.20.1-x86_64-linux-gnu.tar.gz
ln -fs /www/bitcoin-0.20.1 /www/bitcoin
ln -fs /www/bitcoin-0.20.1/bin/bitcoind /usr/local/bin/bitcoind
ln -fs /www/bitcoin-0.20.1/bin/bitcoin-cli /usr/local/bin/bitcoin-cli

mkdir -p /www/btc_data
mkdir ~/.bitcoin
vim ~/.bitcoin/bitcoin.conf

yum install vim -y

bitcoind -daemon

bitcoin-cli stop

bitcoin-cli getblockchaininfo
bitcoin-cli getmininginfo

E. 比特币中国第一人

在中国区块链行业的发展史上,比特币中国是一个无法绕开的名字。作为国内第一家,也一度是最大的一家比特币交易平台,它见证了行业的兴衰起伏,是无数人踏入币圈的第一站。而它的创始人,也因而被圈内人赞誉为“中国比特币第一人”。

拓展资料:
一、杨林科的青葱岁月:1985年出生于浙江温州,父亲是当地生意人。小时候,他的梦想是做游泳运动员,然而现实和梦想总有落差,学习成绩不佳的他高中毕业后便早早踏上社会,在一家汽车配件厂打工。作为一个饱受浙商文化洗礼的年轻人,杨林科认为汽配厂的工作并没有什么前途,然而苦于没有出头的机会,18岁的他在家人的建议下选择参军,一方面锻炼自己,一方面等待更合适的机会。两年后,杨林科从部队退伍,开始尝试在北京做生意。最初的一段时间,由于资本和经验都有所欠缺,收获始终不大,随着时间的慢慢累积,他渐渐找到一些门道,开始尝试经营汗蒸设备和酒店生意,生意也慢慢走上正轨。2011年5月的某天,正忙于经营生意的杨林科打开电脑,猛然看见朋友黄啸宇的QQ签名:“愿意了解bitcoin可以聊聊。”当时的他完全没有接触过数字货币,只是出于好奇回复了一句:“什么是bitcoin?”就此开启了在区块链领域的征程。
二、他的朋友黄啸宇是一位技术宅,喜欢研究经济,是国内最早接触比特币的人之一。当时全球最大的比特币交易平台是Mt.Gox,占据着全球80%的比特币交易量,靠着手续费赚的盆满钵满。而在中国,只有少数人用个人电脑挖矿在淘宝出售。黄啸宇于是就构想做一个中国的比特币交易平台。这个想法引起了杨林科极大的兴趣。在简单了解比特币的运作机制后,他觉得门头沟的成功模式是可以复制的,于是果断投入了几万块钱,和黄啸宇用一个月时间,共同搭建了国内第一家数字货币交易所——比特币中国。而“bitcoin”这个词的中文名“比特币”,也是二人共同翻译的。

F. 如何搭建比特币矿池

搭建矿池不是那么简单的,足够的服务器,足够的算力

G. 一小区地下车库疑建“比特币”工厂,该事件调查的怎么样了

目前正在对租房人员的行为进行调查,而且也已经将违章搭建进行拆除。

我们都知道小区里面是不能出现违章搭建的行为。但是有一些人在小区购买房子之后,通常都会选择通过自己的私心在小区里面进行一些违章搭建行为。从而会让小区的市民出现比较反感的状态,而且也会选择举报这种现象。

物业表示对此事并不知情。

其次就是当这件事情在网络上拥有比较高的热度之后,就有相关记者采访小区里面的物业。然而物业的回应让很多网友都觉得特别的吃惊。因为物业对这件事情一无所知,从而让很多网友都觉得物业的这种说法只是一种推荐责任的表现。并且也让很多网友开始质疑物业的一些相关管理能力。

H. 比特币矿池的协议stratum

转自: https://zhuanlan.hu.com/p/23558268
getblocktemplate协议诞生于2012年中叶,此时矿池已经出现。矿池采用getblocktemplate协议与节点客户端交互,采用stratum协议与矿工交互,这是最典型的矿池搭建模式。

与getwork相比,getblocktemplate协议最大的不同点是:getblocktemplate协议让矿工自行构造区块。如此一来,节点和挖矿完全分离。对于getwork来说,区块链是黑暗的,getwork对区块链一无所知,他只知道修改data字段的4个字节。对于getblocktemplate来说,整个区块链是透明的,getblocktemplate掌握区块链上与挖矿有关的所有信息,包括待确认交易池,getblocktemplate可以自己选择包含进区块的交易。

挖矿有两种方式,一种叫SOLO挖矿,另一种是去矿池挖矿。前文所述的在节点客户端直接启动CPU挖矿,以及依靠getwork+cgminer驱动显卡直接连接节点客户端挖矿,都是SOLO挖矿,SOLO好比自己独资买彩票,不轻易中奖,中奖则收益全部归自己所有。去矿池挖矿好比合买彩票,大家一起出钱,能买一堆彩票,中奖后按出资比率分配收益。理论上,矿机可以借助getblocktemplate协议链接节点客户端SOLO挖矿,但其实早已没有矿工会那么做,在写这篇文章时,比特币全网算力1600P+,而当前最先进的矿机算力10T左右,如此算来,单台矿机SOLO挖到一个块的概率不到16万分之一,矿工(人)投入真金白银购买矿机、交付电费,不会做风险那么高的投资,显然投入矿池抱团挖矿以降低风险,获得稳定收益更加适合。因此矿池的出现是必然,也不可消除,无论是否破坏系统的去中心化原则。

矿池的核心工作是给矿工分配任务,统计工作量并分发收益。矿池将区块难度分成很多难度更小的任务下发给矿工计算,矿工完成一个任务后将工作量提交给矿池,叫提交一个share。假如全网区块难度要求Hash运算结果的前70个比特位都是0,那么矿池给矿工分配的任务可能只要求前30位是0(根据矿工算力调节),矿工完成指定难度任务后上交share,矿池再检测在满足前30位为0的基础上,看看是否碰巧前70位都是0。

矿池会根据每个矿工的算力情况分配不同难度的任务,矿池是如何判断矿工算力大小以分配合适的任务难度呢?调节思路和比特币区块难度一样,矿池需要借助矿工的share率,矿池希望给每个矿工分配的任务都足够让矿工运算一定时间,比如说1秒,如果矿工在一秒之内完成了几次任务,说明矿池当前给到的难度低了,需要调高,反之。如此下来,经过一段时间调节,矿池能给矿工分配合理难度,并计算出矿工的算力。

矿池通过getblocktemplate协议与网络节点交互,以获得区块链的最新信息,通过stratum协议与矿工交互。此外,为了让之前用getwork协议挖矿的软件也可以连接到矿池挖矿,矿池一般也支持getwork协议,通过阶层挖矿代理机制实现(Stratum mining proxy)。须知在矿池刚出现时,显卡挖矿还是主力,getwork用起来非常方便,另外早期的FPGA矿机有些是用getwork实现的,stratum与矿池采用TCP方式通信,数据使用JSON封装格式。

先来说一下getblocktemplate遗留下来的几个问题:

矿工驱动:在getblocktemplate协议里,依然是由矿工主动通过HTTP方式调用RPC接口向节点申请挖矿数据,这就意味着,网络最新区块的变动无法及时告知矿工,造成算力损失。

数据负载:如上所述,如今正常的一次getblocktemplate调用节点都会反馈回1.5M左右的数据,其中主要数据是交易列表,矿工与矿池需频繁交互数据,显然不能每次分配工作都要给矿工附带那么多信息。再者巨大的内存需求将大大影响矿机性能,增加成本。

Stratum协议彻底解决了以上问题。

Stratum协议采用主动分配任务的方式,也就是说,矿池任何时候都可以给矿工指派新任务,对于矿工来说,如果收到矿池指派的新任务,应立即无条件转向新任务;矿工也可以主动跟矿池申请新任务。

现在最核心的问题是如何让矿工获得更大的搜索空间,如果参照getwork协议,仅仅给矿工可以改变nNonce和nTime字段,则交互的数据量很少,但这点搜索空间肯定是不够的。想增加搜索空间,只能在hashMerkleroot下功夫,如果让矿工自己构造coinbase,那么搜索空间的问题将迎刃而解,但代价是必要要把区块包含的所有交易都交给矿工,矿工才能构造交易列表的Merkleroot,这对于矿工来说压力更大,对于矿池带宽要求也更高。

Stratum协议巧妙解决了这个问题,成功实现既可以给矿工增加足够的搜索空间,又只需要交互很少的数据量,这也是Stratum协议最具创新的地方。

再来回顾一下区块头的6个字段80字节,这个很关键,nVersion,nBits,hashPrevBlock这3个字段是固定的,nNonce,nTime这两个字段是矿工现在就可以改变的。增加搜索空间只能从hashMerkleroot下手,这个绕不过去。Stratum协议让矿工自己构造coinbase交易,coinbase的scriptSig字段有很多字节可以让矿工自由填充,而coinbase的改动意味着hashMerkleroot的改变。从coinbase构造hashMerkleroot无需全部交易,

如上图所示,假如区块将包含13笔交易,矿池先对这13笔交易进行处理,最后只要把图中的4个黑点(Hash值)交付给矿工,同时将构造coinbase需要的信息交付给矿工,矿工就可以自己构造hashMerkleroot(图中的绿点都是矿工自行计算获得,两两合并Hash时,规定下一个黑点代表的hash值总是放在右边)

。按照这种方式,假如区块包含N笔交易,矿池可以浓缩成log2(N)个hash值交付给矿工,这大大降低了矿池和矿工交互的数据量。

Stratum协议严格规定了矿工和矿池交互的接口数据结构和交互逻辑,具体如下:

1. 矿工订阅任务

启动挖矿机器,使用mining.subscribe方法链接矿池

返回数据很重要,矿工需本地记录,在整个挖矿过程中都用到,其中:

Extranonce1,和 Extranonce2对于挖矿很重要,增加的搜索空间就在这里,现在,我们至少有了8个字节的搜索空间,即nNonce的4个字节,以及 Extranonce2的4个字节。

2. 矿池授权

在矿池注册一个账号 ,添加矿工,矿池允许每个账号任意添加矿工数,并取不同名字以区分。矿工使用mining.authorize方法申请授权,只有被矿池授权的矿工才能收到矿池指派任务。

3. 矿池分配任务

以上每个字段信息都是必不可少,其中:

有了以上信息,再加上之前拿到的Extranonce1 和Extranonce2_size,就可以挖矿了。

4. 挖矿

1) 构造coinbase交易

用到的信息包括Coinb1, Extranonce1, Extranonce2_size 以及Coinb2,构造很简单:

为啥可以这样,因为矿池帮矿工做了很多工作,矿池已经构建了coinbase交易,系列化后在指定位置分割成coinb1和coinb2,coinb1和coinb2包含指定信息,比如coinb1包含区块高度,coinb2包含了矿工的收益地址和收益额等信息,但是这些信息对于矿工来说无关紧要,矿工挖矿的地方只是Extranonce2 的4个字节。另外Extranonce1是矿池写入区块的指定信息,一般来说,每个矿池会写入自己矿池的信息,比如矿池名字或者域名,我们就是根据这个信息统计每个矿池在全网的算力比重。

2) 构建Merkleroot

利用coinbase和merkle_branch,按照上图方式构造hashMerkleroot字段。

3) 构建区块头

填充余下的5个字段,现在,矿池可以在nNonce和Extranonce2 里搜索进行挖矿,如果嫌搜索空间还不够,只要增加Extranonce2_size为多几个字节就可轻而易举解决。

5. 矿工提交工作量

当矿工找到一个符合难度的shares时,提交给矿池,提交的信息量很少,都是必不可少的字段:

矿池拿到以上5个字段后,首先根据任务号ID找出之前分配任务前存储的信息(主要是构建的coinbase交易以及包含的交易列表等),然后重构区块,再验证shares难度,对于符合难度要求的shares,再检测是否符合全网难度。

6. 矿池给矿工调节难度

矿池记录每个矿工的难度,并根据shares率不断调节以指定合适难度。矿池可以随时通过mining.set_difficulty方法给矿工发消息另其改变难度。

如上,Stratum协议核心理念基本解析清楚,在getblocktemplate协议和Stratum协议的配合下,矿池终于可以大声的对矿工说,让算力来的更猛烈些吧。

I. 大白话浅显地讲讲比特币(一)

最近比特币在马首富的鼓捣下火的一塌糊涂,暴涨又暴跌,各路大佬纷纷出来谈比特币,评价及其分化极端,有人认为是21世纪人类最牛发明,未来人类的货币方向[看];有人认为是一坨X,旁氏骗局[晕]

比特币是一大堆技术狂人搞出来的,币圈也以技术男居多,充满了各种术语和黑话。所以还真不太好理解。这个系列的几篇文章里,我试图用最浅显的方式解释一下比特币大概的原理和功能。

有一家银行成立于2010年,是众多网民共同建起来的。但没有一个国家的政府待见它,所以也没有任何的政府牌照。它存不了任何一个国家的法定货币,例如人民币、美元、英镑这种真钱。类似于腾讯发了个Q币,它自己发了个代币叫B币。这个银行只能存B币、取B币、或者通过这个银行,把里面存的B币转到另外一个人在这个银行里的账户。说白了,这家银行自己发了个“假钱”自娱自乐。

相比别的传统银行,这个银行有一些对客户很好很有用的功能:

营业网络广 :这个银行完全开在网上,只要能上互联网,就可以去它家存钱取钱和转账。

开户零条件 :任何人,不需要任何的材料,只要能上网就可以去它那开户,不用任何的身份证件,随便开多少个账户都行,几秒钟就能开完。开完户会给你一个账户号和密码。凭着账户号和密码就能取钱和转账。但这个密码没法改,而且如果密码丢了,账户里面的钱也找不回来了。

转账快,费用低 :通过银行转账B币很快,就算是全球范围转账,十几分钟就能到账,手续费很低,几乎可以忽略。

完全匿名: 因为开户不查身份证件,所以这个世界上只有你自己知道这个账户是你的。如果你不承认,没有任何技术手段可以证明这个账户属于你。比最牛X的瑞士银行还要隐私。不可能出现瑞士银行这种被迫交出客户名单的情况。

不可冻结不可剥夺 :有密码就有里面的钱。只要你还记得账户的密码,密码也没泄露给别人,就只有你自己可以操纵账户里面的B币。除非把你抓起来严刑拷打说出密码,否则目前为止没有任何技术上的手段能把里面的钱冻结或者强行划走,连世界上最牛逼的政府都不行。在这个银行存钱有最强的安全感。

可想而知,完全匿名和不可冻结剥夺这两功能太猛了,特别适合那些见不得光的生意,被zf不待见是必然的。所以B币虽然自己认为是货币(currency),但没有一个国家的zf承认它是个货币,只承认它是个虚拟资产(asset),就好比前段时间法院认为打 游戏 里的装备也是值钱的一样。


这个银行是怎么运作的?

首先这个银行的数据不会存在一个地方,而是采用了“去中心化”的布局。

什么是“中心化”?就是数据都会集中放到一个地方。传统的银行都是中心化的,传统银行的存款账本是放到一个中央机房里的。但这个银行不受zf待见,不能这样做,万一机房被zf拔网线怎么办,所以采用了“去中心化”的方式,就是几乎所有的分支点都有一份完整的数据,自动互相备份。就算是zf端掉任何一个点,也不会对正常的运作有影响。要瘫痪掉这个银行的运作起码得同时打掉这个银行起码一半以上的分支点,但银行的分支点遍布全球数不胜数,除非关掉整个互联网,否则这个任务是不可能的。

这个银行没有员工,即使zf要抓人也不知道抓谁。它的账本数据更新是靠找一些临时工进行记账更新。

假设刘备是它的客户,要给曹操转1块B币。刘备转完账之后,把这个消息在网上广播,很快大家就都知道了这事。银行会找来一些临时工,从中挑出一个人,这个人在银行的账本里记一笔:某年月日刘备给曹操转账一块,然后把刘备的账户里的钱减掉1块,把曹操的账户里的钱加上一块。然后把这个更新完的账本在网上广播,很快银行的分支点都随着这个账本更新自己的账本,这个转账交易就算做完了。

通常来说银行每隔十分钟做一次更新账本数据的工作。更新的账本,起了个很带 科技 感的名字,叫 区块 (block);最新的账本,会有个链接连到上一次更新的账本上,上一次更新的账本,又会再连到再上一次的账本,这样一直连到这个银行刚诞生时的第一个账本,所以这个结构叫 区块链 (blockchain)。

这些临时工也不是临时找来的,他们一般都是坐在银行门口专门等着来抢这个记账的活。这么多人银行选谁呢?靠出个难题,谁先把这个难题解决了就选谁。大概类似是这样的:把这些人带到一块空地,偷偷在一个地方埋了个金块,谁先找到这个金块就把这记账的活给谁。一般来说,找到这个金块靠运气,但力气越大,能挖的地方越多,就越有机会找到这个金块。银行这个选人的流程称为“ 挖矿 ”,这些人自黑自己是“矿工”。

最后银行挑了一个人来记账,当然这个人不是雷锋,银行会给这个人一点B币作为矿工费,看起来像是这个人从这块地里挖到了一点B币,所以这个人就被称为“挖到了矿”。当然了,只选一个,没选上的矿工就没钱,就白挖矿了。

一开始矿还是挺好挖的,矿工少,银行大方,矿工都赚了钱。但越来越多人来挖矿,力气大的人越来越多,而且银行越来越扣,规定了每四年给的矿工费减半,所以现在挖矿越来越内卷,几乎没啥赚头了。倒是有些机灵的人看到了商机,生产挖掘机,称为“矿机”卖给矿工,赚了不少钱。

矿工挖到了矿就拿到了一些B币,一开始银行的用户只有这些赚到B币的矿工,后来有些没挖矿的人觉得这个B币挺好的,就在现实生活中给了矿工一些真钱,和矿工换B币。慢慢的B币就值钱了。还有人用十几个B币和披萨店换了两个披萨。

B币只能从挖矿得到的矿工费凭空生成,没有别的渠道。所以一个人手上的B币,要么是挖到了矿得到的,要么就是别人给他的,但追根溯源都是挖矿得到的。银行规定了,挖矿能得到的B币的总额是有上限的,一共是2100万个,时至今日,已经有1800万多个已经发出去了。

B币有上限,而且换了B币才能用这个银行的各种牛X功能。越来越多的人拿着现实生活的钱来换B币,现实生活的钱是慢慢贬值的,而B币有稀缺性又有需求,所以慢慢的需要B币能换到现实生活的钱就越来越多,升值了。有些人看到升值的前景就来投机炒卖B币,也有人为了抵抗通货膨胀买B币,导致B币的需求量指数级跃升,越来越值钱,神奇的10几年涨了几千万倍,让无数人看走了眼。

嗯,这个B币,就是比特币(BTC)。银行其实是一个基于区块链技术的比特币算法程序。

比特币构思和算法程序是由一个叫中本聪的人在2009年构造出来的。比特币流行了之后,同样的构思和算法被一些人稍微改了一下,搭建了类似的“银行”和类似的X币,比如“以太坊”(ETH)、“瑞波币”(XRP)等等等等,它们被统称为加密货币(Cryptocurreny)。

热点内容
挖矿显卡算力对照图 发布:2025-09-11 04:50:49 浏览:236
币圈不属于金融吗 发布:2025-09-11 04:50:16 浏览:939
trx创新高 发布:2025-09-11 04:44:40 浏览:139
币圈放水涨价是真的吗 发布:2025-09-11 04:43:57 浏览:336
trx支架 发布:2025-09-11 04:26:55 浏览:459
临床医生去疾控中心 发布:2025-09-11 04:14:11 浏览:204
doge的历史记录 发布:2025-09-11 03:39:02 浏览:852
区块链设备小米 发布:2025-09-11 03:26:13 浏览:97
司法区块链什么意思 发布:2025-09-11 03:20:29 浏览:874
doge币以太坊哪个性价比高 发布:2025-09-11 03:20:27 浏览:193