Bitcoin Transaction

談到交易窑业,要明確三件事:參與者钦幔,交易內(nèi)容,交易格式

e.g. A,B把10比特幣轉(zhuǎn)給C,D

交易者:在比特幣里常柄,交易者被稱為輸入與輸出鲤氢,輸入對(duì)應(yīng)的是上一筆交易的輸出。

交易內(nèi)容:轉(zhuǎn)賬10比特幣

交易格式:全網(wǎng)需要對(duì)格式有統(tǒng)一的設(shè)計(jì)與解釋西潘,所謂共識(shí)

比特幣網(wǎng)絡(luò)中傳播的交易是一串序列化的字節(jié)流卷玉,稱為raw transaction

其格式如下:

常規(guī)交易格式

解釋幾個(gè)容易疑惑的地方

nLockTime

鎖定時(shí)間,一個(gè)交易只有被鎖定了才能放入?yún)^(qū)塊中

字段解釋:0即總是鎖定中秸架;this. nLockTime<= 5 * 10 ^ 8揍庄,字段被解釋為區(qū)塊號(hào),否則解釋為Unix時(shí)間

鎖定條件:超過指定的區(qū)塊號(hào)時(shí)間后东抹,該交易即被鎖定蚂子,可以打包入塊沃测。

該字段是否生效,受nSequence字段限制食茎,具體見下文:Final Transaction

hash

outpoint -> (hash, n) , hash = TxID

TxID = sha2(sha2(raw transaction))

raw transaction就是上面這個(gè)表的流化

TxID是32字節(jié)流蒂破,其在raw transaction中的順序和計(jì)算出來時(shí)存在內(nèi)存中的字節(jié)順序一致,叫internal byte order别渔,有人拿小端序來類比理解附迷。

VarInt (1-9bytes)

網(wǎng)絡(luò)傳輸數(shù)字編碼格式,用于減少傳輸帶寬哎媚,格式如下

CompactSize Unsigned Integers

簡(jiǎn)單說就是要編碼數(shù)字var喇伯,

var <= 252時(shí),var-encode = var

否則拨与,var-encode = 標(biāo)記(1 byte) + var的小端序表示

e.g. 0x21 -> 0x21稻据,0x0203 -> 0xfd0302 , 0x010203 -> 0xfe030201

這樣編碼的好處是:

1. 在傳輸字節(jié)數(shù)較少時(shí),可以減少帶寬

2. 可擴(kuò)展性強(qiáng)

Coinbase Transaction

三點(diǎn)注意:

1. hash 為全0买喧,n為全f捻悯;

2. 只有一個(gè)輸入輸出,輸出為挖礦獎(jiǎng)勵(lì)加交易費(fèi)之和

3. scriptSig字段比較特殊淤毛,如下

coinbase

解釋下:

假設(shè)這個(gè)交易產(chǎn)生在高度為0x010203的塊里

blockHeightLen指出塊高度這個(gè)字段有幾個(gè)字節(jié)今缚,本例是3個(gè)字節(jié)

然后blockHeight字段是塊高度的小端序表示,本例為0x030201

arbitraryData字段咋用剩下的字節(jié)數(shù)低淡,里面的內(nèi)容自由發(fā)揮姓言,像中本聰那樣放段新聞。

可以通過改變這個(gè)字段來改變merkel root查牌,解決pow puzzel


Standard Transaction

一個(gè)交易是標(biāo)準(zhǔn)交易才可以被轉(zhuǎn)發(fā)和打包事期,其需滿足以下6個(gè)要求,注意跟蹤這些規(guī)則的實(shí)效性:

1. sizeof(one raw transaction) <= 10000Bytes

2. transaction version = 1, for now

3. TX is final纸颜,下面兩個(gè)只要滿足一個(gè)兽泣,該交易就是final的

1)nLockTime 已被滿足鎖定條件

2) ?All transaction inputs are final (即 nSequence = 0xffffffff).

4. 解鎖腳本限制

1) ?大小 <= 500 bytes. 可能要變成1650字節(jié)

2) ?only data push opcodes 0x00-0x60 are permitted.

3)?Canonical Pushes The scripting language allows to push data on the stack in different ways. This rule enforces that only data pushes intended for a particular data size are allowed.

(這個(gè)對(duì)大小的限制要看下代碼和https://en.bitcoin.it/wiki/Script)

5. 輸出限制

1)鎖定腳本的類型是標(biāo)準(zhǔn)類型,我會(huì)另開一篇詳細(xì)介紹腳本類型

2) 交易是Non-Dust Transaction

6. 一筆交易中Nulldata Transaction Count 至多一個(gè)

說下什么叫Non-Dust Transaction胁孙,計(jì)算公式如下

MinTxFeeRate:最小交易費(fèi) Satoshi/kB

TxOutSize:某個(gè)輸出的字節(jié)數(shù)

nValue:該輸出的交易輸出值

一句話:如果一筆交易中某個(gè)輸出的value低于這個(gè)輸出對(duì)應(yīng)的交易費(fèi)的三倍唠倦,那么這個(gè)交易就是dust transaction,說白了涮较,交易費(fèi)占的比例太高稠鼻;

該規(guī)則限制了每個(gè)輸出的最小value狂票,現(xiàn)在大概是546Satoshi候齿。

值得注意的是,該規(guī)則對(duì)Nulldata Transaction無效,因此Nulldata Transaction可以把value設(shè)為0

再說下什么是Nulldata Transaction

scriptPubkey: OP_RETURN [SMALLDATA]

scriptSig:

就是OP_RETURN慌盯,沒有收款人周霉,沒有解鎖腳本,不用遵守dust transaction亚皂,可以在SMALLDATA里攜帶任意字段俱箱,大小目前限制在210字節(jié)

一筆交易只允許有一個(gè)Nulldata?Transaction輸出,這樣是為了防止block blooding攻擊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末灭必,一起剝皮案震驚了整個(gè)濱河市狞谱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌禁漓,老刑警劉巖跟衅,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異璃饱,居然都是意外死亡与斤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門荚恶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人磷支,你說我怎么就攤上這事谒撼。” “怎么了雾狈?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵廓潜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我善榛,道長(zhǎng)辩蛋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任移盆,我火速辦了婚禮悼院,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘咒循。我一直安慰自己据途,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布叙甸。 她就那樣靜靜地躺著颖医,像睡著了一般。 火紅的嫁衣襯著肌膚如雪裆蒸。 梳的紋絲不亂的頭發(fā)上熔萧,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼佛致。 笑死遂赠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晌杰。 我是一名探鬼主播跷睦,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼肋演!你這毒婦竟也來了抑诸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤爹殊,失蹤者是張志新(化名)和其女友劉穎蜕乡,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梗夸,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡层玲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了反症。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辛块。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖铅碍,靈堂內(nèi)的尸體忽然破棺而出润绵,到底是詐尸還是另有隱情,我是刑警寧澤胞谈,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布尘盼,位于F島的核電站,受9級(jí)特大地震影響烦绳,放射性物質(zhì)發(fā)生泄漏卿捎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一径密、第九天 我趴在偏房一處隱蔽的房頂上張望午阵。 院中可真熱鬧,春花似錦睹晒、人聲如沸趟庄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)戚啥。三九已至,卻和暖如春锉试,著一層夾襖步出監(jiān)牢的瞬間猫十,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拖云,地道東北人贷笛。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像宙项,于是被迫代替她去往敵國(guó)和親乏苦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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