比特币买汉堡之4--交易数据

Bitcoin=比特币网络或概念,bitcoin=比特币单位

在小明用比特币买汉堡的交易数据是什么样子的,怎么记录到比特币网络中去呢?

1.首先要理解比特币交易的概念

交易数据是Bitcoin中所有应用数据的容器/载体

Bitcoin的所有数据=(矿工产生的)区块头+(应用产生的)交易数据记录

区块链中的数据


用会计角度来理解,一个比特币交易相当于记录了一个会计账套,符合复式记账的原理:有借必有贷,借贷必相符。而且可以是多借多贷。(会计)借=(Bitcoin)input,(会计)贷=(Bitcoin)output。

记账的主体,贷方是账号,而借方可理解为一个指针,指向一个且仅一个来源交易的哪一个贷方。

“来源交易”必是一笔已被区块链确认的交易,哪一个贷方指的是多贷中的第几贷。

事实上,在区块链的交易中不直接记录借方账号,要得到借方账号,就要查来源交易的贷方信息。

只有发行bitcoin的矿工奖励交易(每区块的第一笔交易)没有来源,没有借方,只有贷方。

一笔交易的一个贷方只能被指定一次(消费一次),即当一笔交易中的一个贷方被其它某一个确认的交易的借方指定后,即视为已使用/消费,以防止重复支付。

账户余额=SUM(所有未被消的交易中的地址为本账号的贷方金额)

借方不能指定本交易中的贷方作为来源,必须是已确认的交易中的贷方。

Bitcoin交易关系图

TX0--借源账户:100k,贷账户1:40k,贷账户2:50k(,贷源账户:10k)

TX1--借账户1:40k, 贷账户3:30k(,贷账户1:10k)

TX2--借账户2:50k,贷账户4:20k,贷账户5:20k(,贷账户2:10k)

图中其实少画了一个找零的output--由于源交易的一个贷方必须被一次性全部使用,超出消费额度的金额将在新交易中用一个贷方返还给源账户。如果忘记加找零的output,超出部分将全部作为交易费给挖到该区块的矿工(一般交易费只需0.0001BTC)。即:

SUM(借方金额)-SUM(贷方金额)=交易费

小明买汉堡包的过程中发生的4笔Bitcoin交易如下图所示:

小明买汉堡包过程的交易

2.接下来看看交易的数据的内容

交易数据是一串字节流,数据结构的解析见《官网参考手册》或可以参见这里

交易数据中几个关键数据:

1. 交易ID(TXID,字段名:txid)

用于唯一标识Bitcoin中的一笔交易,同时也作为防篡改的校验码,因为它就是通过对整个数据包(hex)进行散列的结果,也称TxHash。

TXID=Tx Hash = SHA256(SHA256(hex))


2. 签名脚本(signature script,字段名:scriptSig)

每一个INPUT(上面所言的借方)都要提供一个对应的签名脚本,用以验证是否可以花费来源交易的指定输出。

这有点类似于在银行取款时输入密码验证和签字确认的过程,但要复杂许多,支持的支付方式也灵活许多(类似简单的智能合约)。

一方面,要验证你是指定输出的合法支配者(提供解锁指定输出的锁的参数)

一方面,确认花费指定输出是你的意愿,并锁定输入,防篡改(包含输入数据的校验)

例如:针对P2PKH的输出,签名脚本需要包含的数据有:

1.完整的公钥数据;2.利用secp256k1算法,依据私钥和交易数据生成的签名数据。

一个例子(json格式):

"scriptSig" : {

"asm" : "3046022100be8c796122ec598295e6dfd6664a20a7e20704a17f76d3d925c9ec421ca60bc1022100cf9f2d7b9f24285f7c119c91f24521e5483f6b141de6ee55658fa70116ee04d401 03cad07f6de0b181891b5291a5bc82b228fe6509699648b0b53556dc0057eeb5a4",

"hex" : "493046022100be8c796122ec598295e6dfd6664a20a7e20704a17f76d3d925c9ec421ca60bc1022100cf9f2d7b9f24285f7c119c91f24521e5483f6b141de6ee55658fa70116ee04d4012103cad07f6de0b181891b5291a5bc82b228fe6509699648b0b53556dc0057eeb5a4"

}

根据交易类型,交易的所有输入输出都可以要求签名确认,签名确认的过程有三种方式:

SIGHASH_ALL(缺省),立即对所有输入输出都确认,立即发起交易

SIGHASH_NONE,仅对所有输入进行了确认,形成的交易数据包交给后续处理人填入或变更输出地址,再发起交易。

SIGHASH_SINGLE,仅对本人相关的部分输入输出进行了确认,其它交给相关的人员填写完毕后再发起交易


3. 公钥脚本(Pubkey scripts,字段名:scriptPubKey)

给交易的输出上锁。提供一个脚本,结合消费方提供的签明脚本进行计算匹配,匹配通过则为解锁成功。

实际上是为了限定输出的使用条件,如最常见的是:只要是指定私钥的持有者就可以消费。

还可以是更复杂的,如:

A可以约定必须由收款人B和担保人C同时签名才能支配某笔比特币(担保交易)

也可以约定B、C、D中任意两人签名就能支配(联名账户)

A可以约定B必须在一年后才能动用某笔比特币(延时支付)

也可以约定任何人都能支配(撒钱)

或者都不能支配(烧钱)。

还有:担保交易、连带合同、第三方仲裁、多方签名等多种交易类型。

可以参考这里

下面是一个例子(已解析为json格式):

"scriptPubKey" : {

"asm" : "OP_DUP OP_HASH160 7514080ab2fcac0764de3a77d10cb790c71c74c2 OP_EQUALVERIFY OP_CHECKSIG",

"hex" : "76a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac",

"reqSigs" : 1,

"type" : "pubkeyhash",

"addresses" : [

"1Bg44FZsoTeYteRykC1XHz8facWYKhGvQ8"

]

}

3. 发起交易

发起交易很简单,就是把构造好的交易数据(字节流格式),通过Bitcoin应用(如Bitcoin qt等)向Bitcoin进行广播。

所有收到交易广播的节点(矿工),经过验证合法后,收录在本地将要进行挖矿的新区块中。

如果一个矿工挖矿成功,那么这个区块就会被Bitcoin确认,区块里的交易就生效了。

而其它挖矿失败的节点,则放弃区块,新建一个区块将未被确认的交易收录,重新进行挖矿。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容