IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 从 sCrypt 智能合约中访问区块链数据(5) -> 正文阅读

[区块链]从 sCrypt 智能合约中访问区块链数据(5)

在本系列前几部分奠定的基础上,在本文中将演示如何在比特币中实现相对锁定时间,而无需新的操作码 OP_CheckSequenceVerify

时间锁

时间锁会限制某些比特币的支出,直到指定的未来时间或区块高度。有两种类型的时间锁:

  1. 绝对时间锁:例如,可以锁定 1 个比特币,直到区块高度 800,000,或直到 2025 年 1 月 1 日后可解锁使用。
  2. 相对时间锁:例如,可以锁定 1 个比特币,只能在 100 个区块或 3 天后可解锁使用。

为了启用绝对和相对时间锁,BIP65BIP68/112/113 中分别引入了新的操作码 OP_CheckLockTimeVerify/OP_CLTVOP_CheckSequenceVerify/OP_CSV

没有 OP_CSV 的相对锁定时间

比特币SV恢复了原有的比特币协议,恢复了上述变化。而事实证明 OP_CSV 可以用原始协议实现。

在这里插入图片描述

第 1 部分中,我们展示了如何访问包含给定合约 UTXO 的块。结合这个区块头和指定的相对时间锁,我们可以知道该 UTXO 可以被花费的最早区块。我们要求在截止日期之后的任何块都可用于解锁 UTXO,本质上是像 OP_CSV 那样在其上放置一个相对时间锁。

下面列出了完整的代码。

import "blockchain.scrypt";

// relative locktime, aka, OP_CheckSequenceVerify https://en.bitcoin.it/wiki/Timelock#CheckSequenceVerify
contract CheckSequenceVerify {
    // relative timelock: specified in either unix time or block height
    int relativeTime;
    // maximal target for any block to be considered valid
    int blockchainTarget;

    // unlock based on unix timestamp
    public function unlockWithTime(BlockHeader utxoBh, BlockHeader latestBh, MerkleProof merkleproof, SigHashPreimage txPreimage) {
        this.validateHelper(utxoBh, latestBh, merkleproof, txPreimage);

        // enough time has elapsed since the UTXO is mined
        require(latestBh.time - utxoBh.time >= this.relativeTime);
    }

    // unlock based on block height
    public function unlockWithBlockHeight(BlockHeader utxoBh, BlockHeader latestBh, MerkleProof utxoMerkleproof, MerkleProof latestMerkleproof,
        bytes utxoCoinbaseTx, bytes latestCoinbaseTx, MerkleProof merkleproof, SigHashPreimage txPreimage) {
        this.validateHelper(utxoBh, latestBh, merkleproof, txPreimage);

        // get block height from header
        int utxoBlockHeight = Blockchain.blockHeight(utxoBh, utxoCoinbaseTx, utxoMerkleproof);
        int latestBlockHeight = Blockchain.blockHeight(latestBh, latestCoinbaseTx, latestMerkleproof);

        require(latestBlockHeight - utxoBlockHeight >= this.relativeTime);
    }

    // common validation for both relative timelock: Unix timestamp and block height
    // @utxoBh: block header containing the UTXO containing the contract
    // @latestBh: latest block header
    function validateHelper(BlockHeader utxoBh, BlockHeader latestBh, MerkleProof merkleproof, SigHashPreimage txPreimage) : bool {
        require(Tx.checkPreimage(txPreimage));
        // get id of previous tx
        Sha256 prevTxid = Sha256(SigHash.outpoint(txPreimage)[: 32]);
        // verify previous tx is in the block
        require(Blockchain.txInBlock(prevTxid, utxoBh, merkleproof));

        // validate block headers
        require(Blockchain.isBlockHeaderValid(utxoBh, this.blockchainTarget));
        require(Blockchain.isBlockHeaderValid(latestBh, this.blockchainTarget));

        return true;
    }
}

CheckSequenceVerify 源代码

12 行实现了基于 unix 时间(例如,以秒为单位)的解锁。第 33 行的 validateHelper() 函数验证包含 UTXO 的块和最新的块是否有效(第 41-42 行)。它还使用与第 1 部分中相同的技术验证前一个块实际上包含 UTXO(第 34-38 行)。第 15 行确保自挖出 UTXO 后所需的时间已经过去。

19 行实现了基于区块高度(例如,区块数量)的解锁。第 24-25 行获取两个块的高度,如 第 3 部分 所述。第 27 行检查在 UTXO 之后已经开采了指定数量的区块。

总结

除了 OP_CSV 之外,我们之前已经实现了 OP_CLTV,而没有对原始比特币协议进行任何更改。这有两个含义:

  1. 如前所述,这两个操作码都不是启用 UTXO 级时间锁所必需的。
  2. OP_CSV/CLTV 支持的所有用例,例如闪电网络、侧链和 CLTV 风格的支付渠道,都可以直接构建在原始比特币上。
  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2021-12-26 22:14:47  更:2021-12-26 22:15:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:38:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码