比特幣源碼研讀之十五

比特幣昨日已成功突破3萬大關座菠,這個價格是上個月還處于無法想象的浴滴,作為普羅大眾的我們是根本不敢想的。不過這點還是要佩服笑來老師,他在硬幣資本的分享會上就說了:“現(xiàn)在價格處于下跌階段翰撑,正是買入好時機涨醋。”帐我。所以拦键,還真是要像李老師那樣深刻理解比特幣的內(nèi)涵與原理才能做到長期持有萄金,才能拿得姿锕浴!而投資的世界與我們平時的世界是反的蜗帜,在投資的世界里我們越頻繁地操作就越容易犯錯恋拷,我們要做的就是在投資之前花時間認真研究投資標的,研究后認可其價值則長期持有之厅缺,堅決不能頻繁關注價格蔬顾!我們要做的就是去學習知識、學習區(qū)塊鏈知識店归、學習比特幣源碼阎抒,進而深刻理解其內(nèi)涵!在掌握了比特幣的實現(xiàn)原理之后消痛,我們再去研究其他的區(qū)塊鏈資產(chǎn)肯定可以得心應手了且叁。所以現(xiàn)在讓我們繼續(xù)在比特幣源碼研讀之路中前行。開啟我們的第十五篇源碼研讀之旅秩伞。

本文將繼續(xù)開展應用程序參數(shù)交互源碼部分(AppInitParameterInteraction)的研讀與分析逞带。

本文主要涉及的源碼文件包括:

src/bitcond.cpp欺矫、src/init.h、src/init.cpp展氓、src/util.h穆趴、src/util.cpp、src/netbase.h遇汞、src/policy/policy.h未妹、src/policy/policy.cpp

一、節(jié)點超時參數(shù)

比特幣網(wǎng)絡中新加入的節(jié)點都會去尋找節(jié)點空入,加入比特幣P2P網(wǎng)絡中络它,與其他節(jié)點完成同步操作。但是在網(wǎng)絡中尋找節(jié)點歪赢,并建立連接是有時間限制的化戳,即會出現(xiàn)連接超時的問題。這個超時時間通過src/netbase.h中的全局變量DEFAULT_CONNECT_TIMEOUT定義埋凯,其默認值為5000毫秒点楼,最小值為1毫秒,這個1毫秒的最小值是通過-timeout參數(shù)的幫助信息得知的白对。該幫助信息可在src/init.cpp中的HelpMessage函數(shù)中獲取掠廓,或者在比特幣程序的help命令進行查詢-timeout參數(shù)的詳細信息。

默認值(src/netbase.h):

//! -timeout default

static const int DEFAULT_CONNECT_TIMEOUT = 5000;

最小值(src/init.h):

strUsage +=HelpMessageOpt("-timeout=", strprintf(_("Specifyconnection timeout in milliseconds (minimum: 1, default: %d)"), DEFAULT_CONNECT_TIMEOUT));

程序中的幫助信息

我們通過timeout參數(shù)解析代碼可以明確地知道連接超時時間不能設置為負數(shù)躏结,如果為負數(shù)則將設置為默認值却盘。

二、最小交易費

此處討論的最小交易費涉及四方面內(nèi)容:minrelaytxfee媳拴、incrementalRelayFee黄橘、blockmintxfee以及dustrelayfee。

(1)minrelaytxfee為最小交易費率屈溉。通過代碼與注釋我們可以了解到該費率為每千字節(jié)所需的最小費率塞关。該費率值的設置對于礦工來說很重要,需謹慎設置子巾,切忌設置為為0帆赢,因為如果設置為0時,每個被挖出的區(qū)塊中都將會被塞滿1聰交易費的交易线梗,這將會使得礦工入不敷出椰于。所以最低交易費必須高于處理交易所需成本。其默認值為DEFAULT_MIN_RELAY_TX_FEE=1000仪搔,定義于src/validation.h中瘾婿。最小交易費用通過全局變量::minRelayTxFee進行存儲,其類型為CFeeRate。如果我們在程序沒有設置minrelaytxfee參數(shù)偏陪,minRelayTxFee必須大于等于incrementalRelayFee(其含義見《比特幣源碼研讀之十三》)抢呆;

(2)incrementalRelayFee該變量我們已經(jīng)在《比特幣源碼研讀之十三》中介紹了,具體內(nèi)容可前往第十三篇閱讀笛谦;

(3)blockmintxfee為區(qū)塊中打包交易的最小費用值信息抱虐,我們可以通過其幫助信息了解到其最低費用通過src/policy.h中的DEFAULT_BLOCK_MIN_TX_FEE全局變量進行定義。

/** Default for -blockmintxfee, whichsets the minimum feerate for a transaction in blocks created by mining code **/

static const unsigned intDEFAULT_BLOCK_MIN_TX_FEE = 1000;

從上可以看出饥脑,通過挖礦發(fā)現(xiàn)的區(qū)塊打包交易的最低費率為1000聰恳邀。

(4)dustrelayfee為全局變量,其在src/policy/policy.h中聲明灶轰,在policy.cpp中實現(xiàn)定義:

CFeeRate dustRelayFee = CFeeRate(DUST_RELAY_TX_FEE);

其默認值為DUST_RELAY_TX_FEE定義于policy.h轩娶,其默認值與minrelayfee一致,均為1000聰框往。

針對dustrelayfee的含義,我們可通過其具體使用情況來分析闯捎,在src/qt/paymentserver.cpp中使用dustRelayFee代碼如下:

// Extract and check amounts

CTxOut txOut(sendingTo.second, sendingTo.first);

if (txOut.IsDust(dustRelayFee)) {

Q_EMITmessage(tr("Payment request error"), tr("Requested paymentamount of %1 is too small (considered dust).")

.arg(BitcoinUnits::formatWithUnit(optionsModel->getDisplayUnit(),sendingTo.second)),

CClientUIInterface::MSG_ERROR);

returnfalse;

}

通過消息輸出內(nèi)容為“Requested payment amount of %1 is too small(considered dust).”我們可以得知dustrelayfee為那些交易費用很低的交易椰弊,可以形象得理解為灰塵、忽略不計的費用瓤鼻。而為了防止出現(xiàn)非標準交易秉版,源碼中設置了默認的灰塵交易判斷標準,同時針對用戶傳入的灰塵交易費進行了邏輯判斷茬祷,保證其大于0清焕。

// Feerate used to define dust.Shouldn't be changed lightly as old

// implementations may inadvertently createnon-standard transactions

if (IsArgSet("-dustrelayfee"))

{

CAmount n =0;

if(!ParseMoney(GetArg("-dustrelayfee", ""), n) || 0 == n)

returnInitError(AmountErrMsg("dustrelayfee",GetArg("-dustrelayfee", "")));

dustRelayFee= CFeeRate(n);

}

三、非標準交易

Acceptnonstdtxn參數(shù)的含義是比特幣網(wǎng)絡中是否需要非標準交易祭犯,是否接受標準交易主要看當前運行的是什么網(wǎng)絡(主網(wǎng)秸妥、測試網(wǎng)、私有網(wǎng))沃粗,這3種網(wǎng)絡對是否需要標準交易是有默認要求的粥惧。該狀態(tài)是通過fRequireStandard布爾變量記錄的,該變量可在chainparams.h中找到最盅,在chainparams.cpp中我們可以看到三種網(wǎng)絡對fRequireStandard的賦值突雪。主網(wǎng)中fRequireStandard=true,其他二者為false涡贱。即主網(wǎng)只接受標準交易咏删,測試網(wǎng)與私有網(wǎng)可以接受非標準交易。這也好理解问词,主網(wǎng)是真正上線運行的網(wǎng)絡督函,交易必須是標準的,不然整個網(wǎng)絡種的交易就會出錯。而另外兩者只是開發(fā)與測試時使用侨核,測試交易不同狀態(tài)下的運行情況草穆,保證主網(wǎng)上線后的正常運行。

四搓译、簽名操作字節(jié)數(shù)

我們再來看看簽操作字節(jié)數(shù)參數(shù)bytespersigop悲柱,其處理代碼如下:

nBytesPerSigOp = GetArg("-bytespersigop",nBytesPerSigOp);

nBytesPerSigOp在src/policy/policy.h中聲明為全局變量,并在其cpp中實現(xiàn)定義些己,并對其設置了默認值DEFAULT_BYTES_PER_SIGOP豌鸡,該默認值也在src/policy/policy.h中進行了定義,默認值為20:

/** Default for -bytespersigop */

static const unsigned int DEFAULT_BYTES_PER_SIGOP =20;

以上即為本次研讀內(nèi)容段标,在本文我們分析了節(jié)點超時參數(shù)涯冠、最小交易費設置參數(shù)、非標準交易參數(shù)以及簽名操作字節(jié)數(shù)參數(shù)逼庞,可以了解到比特幣網(wǎng)絡中對于交易費是有最低限額要求的蛇更,如果太少將影響我們的交易,所以大家在轉(zhuǎn)賬時如果想保證交易的成功赛糟,交易費這塊一定不能太少哦派任!希望對大家理解這塊源碼有幫助,也歡迎大家留言討論璧南。

區(qū)塊鏈研習社源碼研讀班 菜菜子

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掌逛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子司倚,更是在濱河造成了極大的恐慌豆混,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件动知,死亡現(xiàn)場離奇詭異皿伺,居然都是意外死亡,警方通過查閱死者的電腦和手機拍柒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門心傀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拆讯,你說我怎么就攤上這事脂男。” “怎么了种呐?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵宰翅,是天一觀的道長。 經(jīng)常有香客問我爽室,道長汁讼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮嘿架,結果婚禮上瓶珊,老公的妹妹穿的比我還像新娘。我一直安慰自己耸彪,他們只是感情好伞芹,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蝉娜,像睡著了一般唱较。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上召川,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天南缓,我揣著相機與錄音,去河邊找鬼荧呐。 笑死汉形,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的倍阐。 我是一名探鬼主播获雕,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼收捣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起庵楷,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤罢艾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后尽纽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咐蚯,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年弄贿,在試婚紗的時候發(fā)現(xiàn)自己被綠了春锋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡差凹,死狀恐怖期奔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情危尿,我是刑警寧澤呐萌,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站谊娇,受9級特大地震影響肺孤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一赠堵、第九天 我趴在偏房一處隱蔽的房頂上張望小渊。 院中可真熱鬧,春花似錦茫叭、人聲如沸酬屉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梆惯。三九已至,卻和暖如春吗垮,著一層夾襖步出監(jiān)牢的瞬間垛吗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工烁登, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留怯屉,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓饵沧,卻偏偏與公主長得像锨络,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子狼牺,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容