【密钥和地址以及交易】

公钥和私钥

每个比特币账户包括一个私钥和一个公钥。

  • 私钥(k)是一个随机产生的数字。
  • 有了私钥,我们就可以使用椭圆曲线数乘这个单向加密函数产生一个公钥(K)。
  • 比特币的钱包地址是从公钥通过一系列加密运算(包括SHA-256和RIPEMD-160散列函数)派生出来的一串字符。

私钥、公钥和比特币地址之间的关系如下图所示:
在这里插入图片描述

交易

UTXO (Unspent Transaction Outputs):未使用过的交易输出。
每个全节点都会维护一个UTXO池。

  • 发起交易:
    • 当比特币的持有者想要发送比特币时,他们会创建一笔交易,这笔交易包含了发送方和接收方的比特币地址以及转账金额等信息。
  • 签名交易:
    • 发送者使用其私钥对交易信息进行数字签名。这个签名能证明交易信息是由私钥的持有者发起的,同时保证了交易信息在传输过程中未被篡改。
  • 传播交易:
    • 签名后的交易被发送到比特币网络,等待矿工验证并加入到区块链中。
  • 验证签名:
    • 矿工接收到交易后,会使用发送者的公钥来验证签名的有效性。具体来说,矿工会对签名进行验证,确保它和交易详情相匹配。

    • 验证过程实际上是确认签名是由对应的私钥生成,并且交易没有被更改。因为数字签名使用了非对称加密技术,所以可以通过公钥来验证是对应私钥的持有者签名的。
      验证交易历史:

    • 除了验证数字签名外,矿工还需要验证交易的输入是否有效。这涉及到检查区块链以确保所引用的比特币没有被之前的交易花费,即所谓的双重支付检查
      矿工确认这些比特币确实属于发送者,并且可以被花费。

  • 确认交易:
    • 如果交易签名和历史均验证无误,矿工将这笔交易包含在下一个区块中,通过解决一个数学难题(挖矿)来获得记账权。
      一旦区块被矿工成功挖出并被其他节点确认无误后加入到区块链中,交易就被认为是确认的。一般来说,交易在被包含在一个区块后开始被视为有效,而更多的确认会提高交易不可逆的保证。
      在这里插入图片描述

交易脚本

• 比特币交易脚本语言称为脚本,是一种类似Forth的基于栈执行的逆波兰表达式语言
• 非图灵完备性(除了有条件的流控制外,没有循环或复杂流程控制能力)
• 放置在UTXO上的锁定脚本和解锁脚本都使用这种语言
• 每一笔比特币交易被验证时,每一个输入中的解锁脚本将与其对应的锁定脚本一起
执行,以确定交易是否满足支付条件
• 大多数经比特币网络处理的交易都是基于“P2PKH(Pay-to-Public-Key-Hash)的脚本
在这里插入图片描述

时间锁

只允许在某个时间点之后才可以被支出的交易或输出。

  • 交易锁定时间(nlocktime):交易级设置(交易数据结构中的一个字段:区块数/时间戳),它定义交
    易有效的最早时间,并且可以在网络上中继或添加到区块链中
  • 检查锁定时间验证(CLTV):通过在输出的赎回脚本中添加CLTV操作码来限制输出,从而只能在指
    定的时间过后使用。 nlocktime(锁定时间)是交易级别的时间锁,CLTV是输出级别的时间锁。
  • nSequence(相对时间):表示该输入对应的UTXO过了n个区块后才生效
  • 带CSV的相对时间锁(CSV):通过在输出的赎回脚本中添加CSV操作码来限制输出,从而只能在指定的相对时间过后使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值