对于想了解比特币源码分析(10)-可执行程序-Bitcoind的读者,本文将是一篇不可错过的文章,我们将详细介绍比特币源码运行,并且为您提供关于BitCoin(比特币)小释疑、BitCoin比特币的疯
对于想了解比特币源码分析(10) - 可执行程序 - Bitcoind的读者,本文将是一篇不可错过的文章,我们将详细介绍比特币源码运行,并且为您提供关于BitCoin(比特币)小释疑、BitCoin比特币的疯狂:如何选择一家合适的比特币交易平台、bitcoin源码分析、Fractal Bitcoin(分形比特币):由Unisat支持的比特币原生扩展方案的有价值信息。
本文目录一览:- 比特币源码分析(10) - 可执行程序 - Bitcoind(比特币源码运行)
- BitCoin(比特币)小释疑
- BitCoin比特币的疯狂:如何选择一家合适的比特币交易平台
- bitcoin源码分析
- Fractal Bitcoin(分形比特币):由Unisat支持的比特币原生扩展方案
比特币源码分析(10) - 可执行程序 - Bitcoind(比特币源码运行)
0x01 AppInit
接下来分析main函数中的最后一个函数AppInit
,首先看前面一部分代码,
// src/bitcoind.cpp line 65-95 boost::thread_group threadGroup; CScheduler scheduler; bool fRet = false; // Parameters // // If Qt is used,parameters/bitcoin.conf are parsed in qt/bitcoin.cpp''s main() gArgs.ParseParameters(argc,argv); // Process help and version before taking care about datadir if (gArgs.IsArgSet("-?") || gArgs.IsArgSet("-h") || gArgs.IsArgSet("-help") || gArgs.IsArgSet("-version")) { std::string strUsage = strprintf(_("%s Daemon"),_(PACKAGE_NAME)) + " " + _("version") + " " + FormatFullVersion() + "\n"; if (gArgs.IsArgSet("-version")) { strUsage += FormatParagraph(LicenseInfo()); } else { strUsage += "\n" + _("Usage:") + "\n" + " bitcoind [options] " + strprintf(_("Start %s Daemon"),_(PACKAGE_NAME)) + "\n"; strUsage += "\n" + HelpMessage(HMM_bitcoind); } fprintf(stdout,"%s",strUsage.c_str()); return true; }
程序首先定义了一个线程组threadGroup
,线程组的功能就是分组管理线程,功能和http://www.voidcn.com/article/p-bnbjmdhv-bqn.html 中介绍的Thread
功能几乎一样。接下来定义了一个scheduler
,这个类的声明在src/scheduler.h
中,根据代码中的介绍,
// // Simple class for background tasks that should be run // periodically or once "after a while" // // Usage: // // CScheduler* s = new CScheduler(); // s->scheduleFromNow(doSomething,11); // Assuming a: void doSomething() { } // s->scheduleFromNow(std::bind(Class::func,this,argument),3); // boost::thread* t = new boost::thread(boost::bind(CScheduler::serviceQueue,s)); // // ... then at program shutdown,clean up the thread running serviceQueue: // t->interrupt(); // t->join(); // delete t; // delete s; // Must be done after thread is interrupted/joined. //
主要是用来管理后台任务,主要的两个函数是scheduleFromNow
和scheduleEvery
,分别表示从现在开始是过一段时间执行某函数一次,和从现在开始每隔几秒执行某函数一次。也可创建一个新的线程去执行任务,而不影响主线程的执行。
定义完这两个变量之后,下面一行是gArgs.ParseParameters(argc,argv);
,作用是解析bitcoind命令行传入的参数,其中gArgs
的定义在src/util.h
中,类型是ArgsManager
,ParseParameters()
是该类中的一个主要成员函数,功能是将传入的参数进行解析并存入到两个map
当中。
解析完参数之后,下面就开始进行一系列参数设置,这部分分析的最后一部分代码,也就是上面的那个if
语句,功能是判断参数中是否有显示help
或者version
信息,如果有,就直接显示对应的信息,然后退出程序,忽略其他所有的参数。
再来看接下来的一段代码,
// src/bitcoind.cpp line 99-118 if (!fs::is_directory(GetDataDir(false))) // 检查数据目录 { fprintf(stderr,"Error: Specified data directory \"%s\" does not exist.\n",gArgs.GetArg("-datadir","").c_str()); return false; } try { // 读取配置文件 gArgs.ReadConfigFile(gArgs.GetArg("-conf",BITCOIN_CONF_FILENAME)); } catch (const std::exception& e) { fprintf(stderr,"Error reading configuration file: %s\n",e.what()); return false; } // Check for -testnet or -regtest parameter (Params() calls are only valid after this clause) try { SelectParams(ChainNameFromCommandLine()); } catch (const std::exception& e) { fprintf(stderr,"Error: %s\n",e.what()); return false; }
这段代码首先检查数据目录是否合法,数据目录在Ubuntu下默认的路径是~/.bitcoin/
,当然也能通过-datadir
参数进行设置,该目录下主要保存同步的区块信息,钱包信息,配置信息等等几乎所有的区块链运行信息都保存在这里。然后开始读取配置文件,配置文件的默认名称是~/.bitcoin/bitcoinf.conf
也是在数据目录下,不过默认是没有这个文件的,进入ReadConfigFile
可以看到文件不存在也是可以的。
// src/util.cpp line 599-623 void ArgsManager::ReadConfigFile(const std::string& confPath) { fs::ifstream streamConfig(GetConfigFile(confPath)); if (!streamConfig.good()) return; // No bitcoin.conf file is OK { LOCK(cs_args); std::set<std::string> setoptions; setoptions.insert("*"); for (boost::program_options::detail::config_file_iterator it(streamConfig,setoptions),end; it != end; ++it) { // Don''t overwrite existing settings so command line settings override bitcoin.conf std::string strKey = std::string("-") + it->string_key; std::string strValue = it->value[0]; InterpretNegativeSetting(strKey,strValue); if (mapArgs.count(strKey) == 0) mapArgs[strKey] = strValue; mapMultiArgs[strKey].push_back(strValue); } } // If datadir is changed in .conf file: ClearDatadirCache(); }
接下来是这句SelectParams(ChainNameFromCommandLine());
,首先通过ChainNameFromCommandLine()
获取命令行中设置的当前程序运行的网络,包括以下三种:
- Main:表示主网,也就是当前比特币所有用户交易的网络,bitcoind中的默认值。
- Testnet:测试网,测试网中专门有一条测试链,所有的交易都只是用于测试,并且测试网中的币可以方便的获取,主要目的就是模拟真实交易环境测试新的功能。
- Regtest:回归测试,又称为私有网,用于个人开发测试,挖矿难度较低,并且参数都可以自行设置。
所以一般在本地环境开始时使用Regtest,本地开发完成后,进入Testnet进行大规模实际环境测试,运行正常后再进入主网,这也是目前众多区块链(ICO)项目的主流开发路线。
回到代码中,获取到当前的网络之后通过SelectParams()
根据不同的网络创建不同的共识参数,实现的方式是使用三个继承类CMainParams
,CTestNetParams
,CRegTestParams
继承基类CChainParams
,然后根据选择的不同的网络返回不同的继承类,返回值由一个CChainParams
类型的智能指针(unique_ptr)globalChainParams
来接收,最后使用时就用这个智能指针来访问相应的共识参数。所谓智能指针就是当指针离开作用域时自动的删除(使用delete)所指向的对象。
设置好网络后,下面一部分代码是用来判断命令行中是否存在错误的参数,判断方法是看每一个参数的第一个字母是否为-
或者在windows环境中- or /
,如果不是就报错然后退出程序。
// src/bitcoind.cpp line 119-125 // Error out when loose non-argument tokens are encountered on command line for (int i = 1; i < argc; i++) { if (!IsSwitchChar(argv[i][0])) { fprintf(stderr,"Error: Command line contains unexpected token ''%s'',see bitcoind -h for a list of options.\n",argv[i]); exit(EXIT_FAILURE); } }
BitCoin(比特币)小释疑
强烈不建议任何第一次阅读本文了解比特币的人购买/炒作比特币。
比特币机制
- 比特币不存在概念上的“比特币”这个东西。比特币世界只存在“账簿”
- 所有交易都通过“账簿”形式保存
- 全世界所有客户端保存一个最长账簿链记录所有交易
比特币是凭空产生的
- 全世界10分钟创建一个账簿
- 有幸创建账簿的人,将会得到一定量的比特币,这个“一定量”随着时间递减,以目前这个协议最大可以达到2100万上限
- 创建“账簿”很困难,有幸创建账簿的人即“挖到比特币”
比特币交易
- 根据机制可以得知,所有比特币来源、交易过程都会被记录
- 当A把1比特币交易给B时,A通过P2P网络向全网广播交易事件,其它客户端验证交易合法性,如果合法该交易将会记录在账簿上
- A交易给B的比特币会记录上A的数字签名,同样,这个比特币可以一直回溯到它的产生。
比特币挖矿
- sha256算法,可以理解成一个函数,任何一个数字,字符送入这个函数,将会得到一个256bit长度的整数。如送入1永远得到6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b,结果恒定。
- 简单的说,挖矿即让计算机寻找一个幸运数字,它的sha256值符合某种条件。因为256bit空间极大,需要强力计算机去计算结果(单次运算量不大,但需要无数次计算)。因为全世界每10分钟只有1个账簿产生,所以得到幸运数字的计算机还要全网比对,找到运算量最大的那台,创建账簿(即得到比特币)
比特币安全性
- 全世界所有客户端保存统一交易记录
- “验证交易单合法性”是挖矿机的工作
- 所有比特币交易都可以回溯到它的创建
- 所有交易都需要记录买方、买方的数字签名(基于公钥私钥极难伪造)
- 假设存在某个恶意节点希望伪造一个交易,它需要自己创建一个账簿,即在某个10分钟内,计算量超过全网络的计算机。
- 金有假的,银有假的,纸币有假的,比特币没假的。
比特币特性
- 去中心化,无需银行这类金融担保,无需政府这类暴力担保
- 有限性,目前协议版本最高上限2100万
- 交易完成后无法撤销
比特币和其他投机工具
很多人用当年荷兰的郁金香泡沫比喻比特币,比特币确实本身不创造任何价值,而且消耗无数电能和高级显卡。比特币目前的价格也和任何投机市场类似,暴涨暴跌。和郁金香不同,比特币总量有限,以每个比特币1000美元的价格计算,整个市场也没有多大。
另外比特币本身的各种特性来看,它值钱的唯一原因就是“人们相信它值钱”,但这个结论并不代表买比特币的是傻子,让足够多的人相信某件东西值钱,并且愿意掏钱去买,那么这个东西就真的值钱了,比如几千年前的破盘子烂碗,再比如说北京的老房子,和2年前没任何区别,但是价格从2万变成5万,靠的仅仅是“人们相信它值那么多”。
比特币以现在的形势看,长期看必涨,短期看暴涨暴跌(说了跟没说一样),in the long term we are all dead.
几种雷人问题收集:
- 炒B特币的人都是群2B,尼玛,那么明显的坑,明儿出个C特币后天来个D特币,也可以限量发行啊,你们还想买不?
- 任何C币,D币,只要制造这个协议的人让所有人相信它值钱,那么它就可以进行投机,就有人炒作。而“让很多人相信它值钱”本身就是一个艰巨的工作,比特币就是完成了这个过程而已。现在就有一种莱特币(litecoin),是一种山寨比特币,涨势也挺好的。另:现在有几十种类似的数字货币,比特币是最早也是影响力最大的。
- 这类数学保证的机制 最大问题在于使用的那个数学工具若干年后会被破解 比如原来以为md5不好碰撞 现在可以了 文明用语256也是 如果算法固定 那可能10-20年后出了廉价的量子计算机 搞不好分分钟就能把某个账户给破了 这才是比较大的忧患
- sha256在比特币机制中,并非作为一种非对称加密,而是一种“数学骰子”,所以即使做到了sha256的冲撞也没什么太大意义,真正有意义的是制造一台计算能力超过整个比特币P2P网络运算能力的计算机,才有可能控制比特币
- 现在的协议下最大2100万个而已 如果未来更改协议了……数目是可以变多的
- 比特币客户端开源,所有人随时都可以修改,但是你无法让别人的客户端承认你修改后的值,所以如果自己修改,则变成一种自娱自乐的游戏毫无意义
另外欢迎把自己的质疑发给我,祝愿早日产生对比特币有力的质疑。
强烈不建议任何第一次阅读本文了解比特币的人购买/炒作比特币。
BitCoin比特币的疯狂:如何选择一家合适的比特币交易平台
我个人是一位比特币玩家,现在挖矿基本入不敷出了,所以想玩比特币就只能去交易平台了,目前国内平台不下十家之多,良莠不齐,所以选择一家合适的平台显得尤为重要了。我以我的切身经历给大家阐述怎么去选择交易平台,希望对大家有所帮助。我第一次听说比特币的时候是在2011年,那个时候对比特币一点也不了解,于是在网上收集了一些资料,这才对比特币有了一些了解,也对它产生了一些兴趣,于是就像弄几个比特币玩玩,别人介绍去交易所买一些比特币,但是不知道去哪里买,也不了解各个交易平台, 就随便入驻了国的一家交易平台。
从2012年到2013年初比特币呈现出了强劲的上涨势头,我手里的10几个币也有2000美金的样子了,可是平台上交易了一段时间发现平台有很多问题,例如挂单延迟,眼睁睁的看着错过下单机会;继而出现了更多的问题,网站打不开、客服效率低、资金安全、充值提现非常非常慢,更有甚提现好几天都没人理,严重的影响了正常交易,我决定换一家新的平台,必须保证下单准确,快速充值、提现,于是我开始在国内的几个交易所中进行比较,最终我选择了国内另一家比特币交易平台OKCoin(https://okcoin.com)。在这期间我也总结一些选择交易所的原则,不妨在这里介绍给大家,也好给大家一种参考。暂且以OKCoin为例来阐述我的选择原则,首先声明一下,每个人都有自己的判断,OKCoin只是我的选择结果,不具有代表性,我的这篇文章也没有否定其他平台的意思。只要把握住自己的选择原则就可以了。
1.平台交易量
这个肯定排第一,没有交易量的平台就是死盘子,价格不涨不跌,或者暴涨暴跌。几个币就能成庄家了,很容易被庄家操作,所以这个因素非常的重要,目前OKCoin的每天的交易量有500多(https://okcoin.com首页顶部就能看到,一般的交易平台都会给出交易信息来的),相信以后还会更多。所以这个符合我的选择条件。
2.平台运营能力
一个平台没有盈利能力,只能靠吃客户沉淀资金为生,没有背后强大的资金支持,无疑是相当危险的。这个道理大家都应该懂的。据我所了解OKCoin拥有100W美金的天使投资,是公司运营的,有完整的运营团队,来自百度、谷歌、搜狐等团队,相信平台的盈利以及运营能力肯定没有问题。
3.平台交易手续费
这个手续费的问题是比较现实的问题,在可以接受的情况下选择手续费较低的,如果有免费的那就更好了,可是我从来都不相信什么免费的东西。OKCoin的手续费在国内这几家交易平台来说算是可以接受的,只有0.3%,所以在我的选择范围之内。
4.充值取现的便捷度
尽量选择充值自动化一点的平台,取现选择按时到账的,兼顾手续费的考虑,充值提现一定要快捷,否则你会发现你体现了大半天没动静,让你干着急。我在OKCoin进行了几次充值发现他们的充值都是自动化的,根本不需要人工的干预这就大大的提高了效率,也避免了人工出错的情况出现。最重要的是OKCoin充值可以即时到帐,提现第二天到账,这一点我非常喜欢。目前大多数平台能够做到充值即时到帐,但是提现速度就很难说了。
5.交易行情变动情况
从理论上来说,贴近符合MT行情的比较符合,不能MT涨了,半天还没反应,这样盘子不好操作,这个归根还是成交量的问题。OKCoin能够紧跟MT的价格,所以这也是我选择OKCoin的另一个重要原因,这条因素不必细说。
6.交易平台的客服工作
一个交易平台是否把客户当上帝,取决于他们客服团队的素质,有些公司跟客服说话一两个小时回一句,这难免让人有些费解,这也是我选择离开某China的一个重要的原因,人们在涉及到金钱资金的问题大多是人都是比较谨慎,想把问题问的明明白白,这就要求客服有足够的耐心,以及过硬的专业素质。经过几次简单的接触我发现OKCoin的客服也应该是比特币的玩家,因为几次聊天觉得OKCoin客服对比特币了解颇多,希望客服能继续保持。
7.交易平台安全保障
这条原则也是重中之重,不管你买比特币是为了赚钱还是屯着,平台必须得足够的安全,没有安全一切都等于零,没有安全保障前面几条再好也没用。首先OKCoin网站是有国家工信部ICP备案的,而且是企业备案,可信度比较高;再者OKCoin采用了SSL加密,可能有的人不知道什么是SSL,当你打开网站的时候注意地址栏里是https://www.okcoin.com,http后面有一个s,这就是SSL加密,保证信息传输不被窃听;他们采用了分布式服务器技术,这样就具有更强的坑攻击能力;最重要的是他们完全采用冷存储,也就是离线存储,最大限度的保证了资金的安全。
以上就是我总结选择比特币交易平台的原则,还是那句话仁者见仁智者见智,适合自己的才是最好的,说句公道话,OKCoin这家平台的确值得信赖。最后提醒大家比特币交易没有涨停跌停,24小时开放,所以入市要谨慎啊。
bitcoin源码分析
Fractal Bitcoin(分形比特币):由Unisat支持的比特币原生扩展方案
大家好,我是来自coinmanlabs的paul,今天想跟大家聊聊unisat相关的一个项目-fractal bitcoin。
说项目前我想先跟大家介绍下Unisat。
十人、十亿
Unisat团队开始做的就是在BTC上面进行小图片的代打,后续将自己的开发中心转移到了BRC-20市场中来。让他们真真火起来还是那张Ordi千倍截图在各个微信群的发散开来。
还记得那是2023年劳动节,彻底改变了BTC的NFT生态,4 月 28 日起,“$ordi 人均千倍”的消息在各大微信群传开,随后又出现了$nals 、 $UTXO 、 $elon等是十倍币等机会,大量用户FOMO 进入BRC-20市场,只要跟BRC-20相关的微信群不到一个下午的时间就全部满员。当时作为唯一的链上BRC-20代币的出入口,UniSat 成了整个
可以这样说吧,BRC-20的成功,UniSat功不可没,是他们作为第一个吃螃蟹的人进行市场的搭建来让更多的了解到了BRC-20。
当然BRC-20的火爆也同样回馈了UniSat的团队,他们靠着产品和手续费吸引了很多机构的瞩目,当时坊间还传闻UniSat团队就10个人但是有机构想以估值10亿收购他们。
Q·热潮退去该怎么办?
UniSat的创始人Lorenzo在接受采访的时候,也说道BRC-20 的热潮当然会退去,但是随时也可能卷土重来,趋势已经形成了,需要准备好随时迎接下一次爆发,UniSat会通过改善用户的体验,同时安全的保护用户的铭文,另外还有新的产品在测试中。
当时这段话在BRC-20热潮的时候说的,目前我们来看看他们准备做什么呢?
Q·还需要改进什么呢?
如果你参与了上一轮的铭文潮,你会发觉慢,当时戏称一条链到底技术行不行就看看能不能抵抗住铭文的“攻击”。
除了慢还有就是贵,当时很多人为了能及时打到比特币上面的铭文都的学习下怎么修改默认的Gas,只有这样你的交易才能被更早的上链。
Fractal
分形(Fractal)是数学中的一个概念,用来描述具有自相似性质的复杂几何形状。自相似性意味着一个形状的某个部分的结构与整体的结构相似,即无论从哪个尺度观察,形状的特征都保持一致。分形结构可以在自然界中广泛找到,例如雪花、海岸线、山脉、树木和雷电路径等。
分形几何学由法国数学家Benoît B. Mandelbrot在20世纪70年代提出,他研究了许多自然界中的不规则形状,并发现这些形状可以通过简单的递归算法生成。分形几何学的核心思想是在复杂的、不规则的形状中找到内在的秩序和规律。
好吧,我们用白话解释下,用白话解释分形,我们可以这样理解:分形是一种特殊的几何形状,它的特点是无论你把它放大多少倍,它看起来都差不多,就像是一个无限重复的图案。这种形状在自然界和数学中都很常见。
举个例子,想象一下一棵树。如果你仔细观察,你会发现树枝的结构和整棵树的结构很相似。每根树枝都像是一棵小树,上面又有更小的树枝,这些小树枝又像更小的树。这就是分形的一个自然例子。
以上就是Fractal Bitcoin(分形
我们今天的关于比特币源码分析(10) - 可执行程序 - Bitcoind和比特币源码运行的分享已经告一段落,感谢您的关注,如果您想了解更多关于BitCoin(比特币)小释疑、BitCoin比特币的疯狂:如何选择一家合适的比特币交易平台、bitcoin源码分析、Fractal Bitcoin(分形比特币):由Unisat支持的比特币原生扩展方案的相关信息,请在本站查询。
本文标签: