比特币通过“挖矿”机制保证了不能任意造币。通过分布式网络和HashCash机制解决双重支付问题。事实上比特币系统中不存在独立的电子货币,而只存在交易单(账单),货币值是依附于交易单存在的,所以比特币中的电子货币实质上交易的账单记录的变化,确切的说是货币交易(Transactions)的 数字签名链,它的数字签名算法使用的是ECDSA(椭圆曲线数字签名算法 secp256k1曲线)进行签名的。

交易单的数据如下:
In:
Previous tx: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd0
4470b9a6
Index: 0
scriptSig: 304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446
618c4571d1090db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fd
d7d5d6cc8d25c6b241501
Out:
Value: 5000000000
scriptPubKey: OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35
549d OP_EQUALVERIFY OP_CHECKSIG
交易单记录的是本次交易的收入来源(in)和支出(out)。当你支出(给)一笔钱的时候,首先在交易单中就要描述清楚你要支出(out)的钱的收入来源 (in),然后在支出(out)项中,指明要支出的金额,以及通过脚本的形式写明接收者的公钥,然后用自己的私钥签名(scriptSig)认可该笔交 易,最后将交易单广播到网络。
收入来源(in):
Previous tx: 为收入来源交易单的散列值,也就是待支付的钱是谁给你的,经常会有多个收入来源被列在交易单中
index: 指明是收入来源交易单中具体哪一个out,也就是Previous tx交易单中的out索引值(因为out也可以有多个)。
scriptSig: 拥有者对该交易的ECDSA签名认可。
接收对象(out):
Value: 发送的币值,以Satoshi 为单位,1BTC = 100,000,000 Satoshi
scriptPubKey: 接收方的公钥脚本。
in与out的关系:
每一笔交易,out的总额应该等于in的总额。但是,在这个交易单里,只会有out的Value,没有in的Value,而是通过in的Pervious与index,追溯到上一个交易单的某一个out,获得Value。
一次send bitcoin,剩下的钱,应该out给自己,否则这个钱就丢了。
情况列举:
我有10个BTC,是某一次交易获得的,我要送给朋友A,10个BTC。这时候,有一个in,一个out。
我有10个BTC,是某一次交易获得的,我要送给朋友A,5个BTC,这时候,有一个in,两个out,一个指向朋友5个BTC,一个指向我自己,得到剩下的5个BTC。
我有10个BTC,是以前的两次交易获得的,我要送给朋友A,10个BTC,这时候,有两个in,一个out。
我有10个BTC,是以前的两次交易获得的,其中一次获得了6个BTC,另一次获得了4个BTC,我要送给我的朋友7个BTC,这时候,有两个in,两个out。

/
// An input of a transaction.  It contains the location of the previous
// transaction's output that it claims and a signature that matches the
// output's public key.
//
class CTxIn
{
public:
COutPoint prevout;
CScript scriptSig;
unsigned int nSequence;
....
}
//
// An output of a transaction.  It contains the public key that the next input
// must be able to sign with to claim it.
//
class CTxOut
{
public:
int64 nValue;
CScript scriptPubKey;
....
}
//
// The basic transaction that is broadcasted on the network and contained in
// blocks.  A transaction can contain multiple inputs and outputs.
//
class CTransaction
{
public:
int nVersion;
std::vector vin;
std::vector vout;
unsigned int nLockTime;
....
每一笔交易单验证追查到最后,第一笔总是“挖矿”所得,这被称为coinbase。
如果是第一次“挖矿”所得,电子货币的内容用JSON格式表示如下:
{
"hash":"b3141455cb397e42665b90b3726c4770fd36101715618718111403bc780ceaa2",
"ver":1,
"vin_sz":1,
"vout_sz":1,
"lock_time":0,
"size":135,
"in":[
{
"prev_out":{
"hash":"0000000000000000000000000000000000000000000000000000000000000000",
"n":4294967295
},
"coinbase":"042194261a02f200"
}
],
"out":[
{
"value":"50.01000000",
"scriptPubKey":"0452d1a02ffeacfc0c78fcf2ceeaf04d5416c15af1c65da13d9cdaa56844c825c1aa2f540e9439b f38a43419002d8441eea627cb56d6ed51e7848da5c3f6eee6ec OP_CHECKSIG"
}
]
}
每一笔交易都会向整个P2P网络广播该货币的交易记录。通过投票机制,来决定该支付交易是否正常。如节点认为该交易记录是正常的那么就通过CPU计算 POW(Proof-of-Work),然后广播,其它节点收到这个POW可以继续投票,形成Block 链(见挖矿)。如果节点收到不一致的两个交易记录,那么只信任链最长的。如果一笔Bitcoin被支出两次的情况广播出来,那么某些节点将先看到它第一次 发生的支付交易,其他节点则看到的是它第二次发生的支付交易。究竟是哪一个支付交易“赢”了,则是由恰好创建了下一个block的那个节点来决定 —— 无论是哪个节点找到了“小的散列值”, 它的block中包含的那个支付交易被判断为有效的,其他的支付交易被视为无效。

转载于:https://www.cnblogs.com/405845829qq/p/9829570.html

比特币交易(Transaction)的输入与输出相关推荐

  1. 一文看懂怎样用 Python 创建比特币交易

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 比特币价格的上上下下,始终撩动着每一个人无比关切的小心脏.从去年初的 800 美元左右,飞涨到去年底到 19783.21 ...

  2. 比特币交易追踪溯源技术介绍

    一.比特币追溯背景 1.1 比特币的交易量 目前来看,比特币已经诞生10年,虽然是所有数字货币/公链中交易速度最慢.性能最低的区块链,但却依然是最安全.链上活跃度最高和承载交易最多的的一条链. 按照比 ...

  3. 比特币交易构成(二)

    转自:http://618.io/2013/10/27/bitcoin-transaction-02/ 交易的构造.签名与广播 上篇介绍了交易结构.签名等,为了更直观的认识比特币,借助bitcoind ...

  4. TensorFlow-Bitcoin-Robot:Tensorflow 比特币交易机器人

    简介 一个比特币交易机器人基于 Tensorflow LSTM 模型,仅供娱乐. A Bitcoin trade robot based on Tensorflow LSTM model.Just f ...

  5. 比特币javascript私钥_javascript – 使用bitcoinjs发送比特币交易

    有人可以解释我如何使用bitcoinjs发送比特币交易???我使用bitcoinjs设置了两个钱包. 我想从这里发送100000 satoshis: 1G4iprWu7Q8tNbQLA8UBM2Gea ...

  6. Python入门(二)——IDE选择PyCharm,输入和输出,基础规范,数据类型和变量,常量,字符串和编码,格式化

    Python入门(二)--IDE选择PyCharm,输入和输出,基础规范,数据类型和变量,常量,字符串和编码,格式化 我们从今天就开始正式的学习PY交易了,PY交易还行,我们有基础之后学习起来倒不是说 ...

  7. 银行核心系统:“交易(Transaction)”是什么?

    有新人问我什么是交易,该怎么定义? 是一个程序? 是处理各种数据的一个方法? 是完成输入和输出结果的过程? 是有操作页面的? 是没有操作页面的? 是对应着银行某业务功能? ...... 这些的确是银行 ...

  8. Python 黑箱 :输入与输出-day4

    Python "黑箱" :输入与输出 文章目录 Python "黑箱" :输入与输出 输入输出基础 文件输入与输出 JSON序列化与实战 写在后面 世纪之交的论 ...

  9. Linux shell 学习笔记(11)— 理解输入和输出(标准输入、输出、错误以及临时重定向和永久重定向)

    1. 理解输入和输出 1.1 标准文件描述符 Linux 系统将每个对象当作文件处理.这包括输入和输出进程.Linux 用文件描述符(file descriptor)来标识每个文件对象.文件描述符是一 ...

  10. python给用户输出提示_python3.4控制用户输入与输出的方法

    一.输入 1.函数格式:input() 2.函数功能:接受一个标准输入数据,返回string类型.ctrl+z结束输入. 3.实例: 默认input():等待一个任意字符的输入 str=input(' ...

最新文章

  1. Struts权威著作
  2. streambuf ambiguous symbol的问题如何解决
  3. 如何通过日期属性对数组进行排序
  4. 解决使用pip安装lxml包报错问题Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed?
  5. 3DSlicer12:风格准则
  6. Asp.net core使用MediatR进程内发布/订阅
  7. 吴恩达deeplearning.ai新课上线:TensorFlow移动和web端机器学习
  8. Jenkins控制台中文输出乱码解决方法
  9. Mozilla 重磅推出物联网平台 WebThings!| 极客头条
  10. 谈谈linux内核原理,谈谈Linux内核驱动的coding style
  11. 网络工程设计教程--系统集成方法
  12. Hadoop大数据开发整体思路
  13. 基于分数阶傅里叶变换的chirp信号检测与参数估计(原理附代码)
  14. excel使用技巧手记
  15. 运动蓝牙耳机什么牌子好,骑行运动耳机
  16. 2019-11软考报名网站汇总,陆续更新
  17. timezone_name_from_abbr() 函数
  18. php批量格式化工具下载,源代码格式化工具Co
  19. 国内云服务器哪家好?
  20. 2021年小红书电商直播趋势报告-小红书数据分析报告

热门文章

  1. 2011系统架构师大会分享-自动化运维中的关系管理
  2. mysql数据表最高速迁移,mysql的存储引擎为:myisam
  3. YII2.0之博客实战
  4. iOS IM开发建议(一)App框架设计
  5. 【Linux】Linux 标准目录结构
  6. 将not exists更改为外连接
  7. [转]C#和C++结构体Socket通信
  8. CactiEZ的使用
  9. DIV+CSS—菜鸟分享学习心得!导航篇
  10. 锁屏面试题百日百刷-网络篇(一)