Qtum 量子链:UTXO 交易的深度解析与实操指南

· 10min · Paxon Qiao

Qtum 量子链:UTXO 交易的深度解析与实操指南

区块链技术的魅力在于其多样化的实现方式,而 Qtum(量子链)凭借未花费交易输出(UTXO)模型和权益证明(PoS)机制,成为连接比特币与智能合约世界的桥梁。虽然 Qtum 以支持智能合约著称,但其 UTXO 模型在交易处理中的高效性和安全性同样值得关注。本文将深入剖析 Qtum 的 UTXO 机制,揭示其在防止双花、提升并行性和优化存储方面的优势,并通过两个详细的实操案例,展示如何在 Qtum 测试网上实现交易签名与发送,为开发者提供实用的技术指南。

Qtum 量子链是一个基于 UTXO 模型和 PoS 共识的区块链平台,通过账户抽象层(AAL)融合比特币的交易结构与以太坊的智能合约能力。本文首先详细解析了 UTXO 的工作原理及其在安全性、并行性、隐私性和存储效率上的优势,并与以太坊的账户模型进行对比。随后,通过两个实操案例,展示了在 Qtum 测试网上使用 TypeScript 实现 UTXO 交易签名、发送及验证的完整流程,包括获取 UTXO 数据、构建交易和查询结果。尽管本文未涉及智能合约的直接应用,但这些基础操作奠定了理解 Qtum 生态的坚实基础,适合开发者深入学习和实践。

Qtum 简介

Qtum区块链,又称为量子链,是一个基于未花费交易输出(Unspent Transaction Output,UTXO)和权益证明(Proof of Stake,PoS)的智能合约平台,融合了比特币和以太坊生态系统各自的优点 。智能合约可以应用在诸多行业,如金融科技,物联网和身份认证等。智能合约的核心技术是分布式账本,也就是我们常常提到的区块链。Qtum区块链实现了完整的智能合约功能,通过账户抽象层(Account Abstraction Layer,AAL)技术把UTXO模型转换成可供以太坊虚拟机(Ethereum Virtual Machine,EVM)执行智能合约的账户模型,合约开发者不需关心对合约操作相关的UTXO转换细节,即可使用EVM的特性进行开发而且兼容现有以太坊的智能合约。

Qtum是一个基于比特币UTXO模型,权益证明机制(pos)和支持EVM智能合约的区块链项目。它通过创新的账户抽象层(Account Abstraction Layer)实现了比特币与以太坊两大生态的融合。

Qtum量子链采用了互惠权益证明(Mutualized Proof Of Stake, MPoS)共识机制,使得在智能合约下实现更安全的PoS共识。另外,独创性的提出和实现了分布式自治协议(Decentralized Governance Protocol, DGP),DGP是通过内嵌到创世区块的智能合约来治理区块链网络的参数,去中心化的网络自治机制使得区块链网络在一定程度上实现自动升级和快速迭代而无需进行软件升级。

UTXO

1. 什么是 UTXO?

UTXO(未花费交易输出)表示 某个地址收到但尚未使用的比特币,它们可以作为新交易的输入。

  • 在比特币中,交易的输出会变成新的 UTXO,存储在 UTXO 集合中。
  • 当一笔交易发生时,它会使用现有的 UTXO 作为输入,并生成新的 UTXO 作为输出。

类比: UTXO 类似于现金,你不能直接修改账户余额,而是用旧的钞票换新的钞票。例如:

  • 你有 2 张 10 元人民币(20 元 UTXO)。
  • 你要支付 15 元,必须使用 2 张 10 元,然后找回 5 元零钱。
  • 你的旧 UTXO(2 × 10 元)被销毁,新的 UTXO(15 元给商家,5 元找零)被创建。

2. 为什么采用 UTXO?

(1) 避免双花攻击

  • 在 UTXO 模型中,每个 UTXO 只能使用一次,使用后即销毁。
  • 这防止了双花攻击(Double Spending):同一个 UTXO 不可能被两个不同的交易同时使用。

(2) 更容易实现并行处理

  • 由于 UTXO 彼此独立,不同交易可以同时验证,提高了区块链的处理效率。
  • 在以太坊的账户模型中,不同交易可能需要修改同一个账户的余额,这会导致状态锁定,难以实现并行处理。

(3) 增强隐私性

  • UTXO 没有固定的账户,每次交易都可以生成新的地址接收找零,提高匿名性。
  • 账户模型中,余额直接与账户地址绑定,交易记录更容易被追踪。

(4) 降低存储需求

  • 由于 UTXO 是一次性使用的,它不会像账户余额一样频繁更新,而是使用后直接销毁
  • 这减少了区块链的存储需求,优化了节点运行的效率。

3. UTXO vs 账户模型

UTXO(比特币)账户模型(以太坊)
交易结构使用 UTXO 作为输入和输出,每个 UTXO 只能使用一次直接修改账户余额
并行性高——交易可以并行处理,因为 UTXO 互不影响低——可能修改相同账户,需要排队
隐私性高——新交易可以生成新地址低——账户地址固定,交易记录可追踪
双花攻击难以实现,UTXO 一旦花费就无效可能发生,依赖全网确认
存储需求较低,UTXO 只存一次,使用后销毁较高,需要维护所有账户的状态

4. 总结

比特币采用 UTXO 模型,主要是为了:

  • 提高安全性(防止双花)
  • 增强并行性(支持多个交易并发处理)
  • 增加隐私性(交易可生成新地址)
  • 优化存储(使用后销毁 UTXO)

相比之下,以太坊的账户模型更适合智能合约应用,而 UTXO 则更适合数字货币交易。

实操一

第一步:实现signQtumTransaction 方法

export function signQtumTransaction({ privateKey, signObj, network }: SignParams): string {
    const net = qtumcore.Networks[network];

    // 确保网络存在
    if (!net) {
        throw new Error(`Network ${network} is not valid`);
    }

    // 处理输入
    const inputs = signObj.inputs.map(({ address, txid, vout, amount }: Input) => ({
        address,
        txId: txid,
        outputIndex: vout,
        script: new qtumcore.Script.fromAddress(address).toHex(),
        satoshis: amount
    }));

    // 处理输出
    const outputs = signObj.outputs.map(({ address, amount }: Output) => ({
        address,
        satoshis: amount
    }));

    // 创建交易
    const transaction = new qtumcore.Transaction(net).from(inputs).to(outputs);
    transaction.version = 2;

    // 签名交易
    transaction.sign(privateKey);

    // 返回交易字符串
    return transaction.toString();
}

第二步:通过 UTXO 接口获取 txid 等信息

curl --location 'https://testnet.qtum.info/api/address/qc44QjvtxJyNg1p2q8EMM4rYiawceejJKW/utxo'

第三步:编写测试代码并执行测试

    test("sign", async () => {
        const data = {
            inputs: [
                {
                    address: account_address1,
                    txid: "be210c7fa9e71fb1e67535e281074438da02e62dc6b6d45a80df3a26031a2b46",
                    amount: 9700000000,
                    vout: 0,
                },
            ],
            outputs: [
                {
                    amount: 9699920000,
                    address: account_address,
                },
            ],
        };
        const rawHex = signQtumTransaction({
            privateKey: fromPrivateKey1,
            signObj: data,
            network: "testnet",
        });
        console.log("rawHex:", rawHex);
    });

执行测试获取rawtx

  console.log
    rawHex: 0200000001462b1a03263adf805ad4b6c62de602da38440781e23575e6b11fe7a97f0c21be000000006b483045022100bfaa7eca0c22e7eddb5d952ac727269b9b17bd2f1bb8c70d7b34041201991a5c02201221f7c6f2a3093d0c1110f32d4f0f3a2dd4415f27b23bf20301212e1b77fe32012103b119427e63a945b25cec76c82775d48204b0935651972f157ff5d13142a26ff1ffffffff0180082942020000001976a9142eee8c03e5b76b9c8af164c44b137dbe4598c47688ac00000000

第四步:发送交易

curl --location 'https://testnet.qtum.info/api/tx/send' \
--header 'Content-Type: application/json' \
--data '{
    "rawtx": "0200000001462b1a03263adf805ad4b6c62de602da38440781e23575e6b11fe7a97f0c21be000000006b483045022100bfaa7eca0c22e7eddb5d952ac727269b9b17bd2f1bb8c70d7b34041201991a5c02201221f7c6f2a3093d0c1110f32d4f0f3a2dd4415f27b23bf20301212e1b77fe32012103b119427e63a945b25cec76c82775d48204b0935651972f157ff5d13142a26ff1ffffffff0180082942020000001976a9142eee8c03e5b76b9c8af164c44b137dbe4598c47688ac00000000"
}'

响应结果

{
    "status": 0,
    "id": "77f6551fdf5979676f449dd23d15c2c34ee99c5b0d938a8c0834622150195f51",
    "txid": "77f6551fdf5979676f449dd23d15c2c34ee99c5b0d938a8c0834622150195f51"
}

第五步:查询交易详情

https://testnet.qtum.info/tx/77f6551fdf5979676f449dd23d15c2c34ee99c5b0d938a8c0834622150195f51

image-20250308155938402

实操二

第一步:获取TxId 等信息

Request:

curl --location 'https://testnet.qtum.info/api/address/qMqY1PQQcJNtpXQuQnoW1o2oBKBGaDXuJQ/utxo'

Response:

[
    {
        "transactionId": "fb635959ccafa1c1909ff3222f1fa62f2ffb4233fbd80988ea81ca82d4d0b874",
        "outputIndex": 1,
        "scriptPubKey": "76a9142eee8c03e5b76b9c8af164c44b137dbe4598c47688ac",
        "address": "qMqY1PQQcJNtpXQuQnoW1o2oBKBGaDXuJQ",
        "value": "2300000000",
        "isStake": false,
        "blockHeight": 4643815,
        "confirmations": 45817
    },
    {
        "transactionId": "77ea3925c6e50934172b5e2f8100da6b112b7b839874fa4fca08c9b171a50998",
        "outputIndex": 0,
        "scriptPubKey": "76a9142eee8c03e5b76b9c8af164c44b137dbe4598c47688ac",
        "address": "qMqY1PQQcJNtpXQuQnoW1o2oBKBGaDXuJQ",
        "value": "3300000000",
        "isStake": false,
        "blockHeight": 4668323,
        "confirmations": 21309
    },
    {
        "transactionId": "77f6551fdf5979676f449dd23d15c2c34ee99c5b0d938a8c0834622150195f51",
        "outputIndex": 0,
        "scriptPubKey": "76a9142eee8c03e5b76b9c8af164c44b137dbe4598c47688ac",
        "address": "qMqY1PQQcJNtpXQuQnoW1o2oBKBGaDXuJQ",
        "value": "9699920000",
        "isStake": false,
        "blockHeight": 4687618,
        "confirmations": 2014
    },
    {
        "transactionId": "04857a4e34d5746a3fac2a397fef585376141dfd05048934a762eaafa6b4f06e",
        "outputIndex": 1,
        "scriptPubKey": "76a9142eee8c03e5b76b9c8af164c44b137dbe4598c47688ac",
        "address": "qMqY1PQQcJNtpXQuQnoW1o2oBKBGaDXuJQ",
        "value": "8200000000",
        "isStake": false,
        "blockHeight": 4688988,
        "confirmations": 644
    }
]

第二步:测试

    test("sign", async () => {
        const data = {
            inputs: [
                {
                    address: account_address,
                    txid: "fb635959ccafa1c1909ff3222f1fa62f2ffb4233fbd80988ea81ca82d4d0b874",
                    amount: 2300000000,
                    vout: 1,
                },
            ],
            outputs: [
                {
                    amount: 1000000000,
                    address: account_address1,
                },
                {
                    amount: 1299909600,
                    address: account_address,
                },
            ],
        };
        const rawHex = signQtumTransaction({
            privateKey: fromPrivateKey,
            signObj: data,
            network: "testnet",
        });
        console.log("rawHex:", rawHex);
    });

测试输出

 console.log
    rawHex: 020000000174b8d0d482ca81ea8809d8fb3342fb2f2fa61f2f22f39f90c1a1afcc595963fb010000006b483045022100ce0d24de3e834d7c04c3f6943e1e5a2342ee972e3767339bc107fe7e1c7e532d02202b944f78c3f715afee5bb73989ce5f0194d5469df9738e0364023b28f1f659f70121039982e9dfad974fee93f81f19efaf2b95cb78d5588bfe79e6e51caa5acdf3cb79ffffffff0200ca9a3b000000001976a914cadeada5719f4b95636b28f963c27bf548a52e5488ace00b7b4d000000001976a9142eee8c03e5b76b9c8af164c44b137dbe4598c47688ac00000000

第三步:发送交易

Request

curl --location 'https://testnet.qtum.info/api/tx/send' \
--header 'Content-Type: application/json' \
--data '{
    "rawtx": "020000000174b8d0d482ca81ea8809d8fb3342fb2f2fa61f2f22f39f90c1a1afcc595963fb010000006b483045022100ce0d24de3e834d7c04c3f6943e1e5a2342ee972e3767339bc107fe7e1c7e532d02202b944f78c3f715afee5bb73989ce5f0194d5469df9738e0364023b28f1f659f70121039982e9dfad974fee93f81f19efaf2b95cb78d5588bfe79e6e51caa5acdf3cb79ffffffff0200ca9a3b000000001976a914cadeada5719f4b95636b28f963c27bf548a52e5488ace00b7b4d000000001976a9142eee8c03e5b76b9c8af164c44b137dbe4598c47688ac00000000"
}'

Response

{
    "status": 0,
    "id": "1aaf74a5e9c7a619502e6dd3682c46abdac5e3990cdec52e93727e979edf6043",
    "txid": "1aaf74a5e9c7a619502e6dd3682c46abdac5e3990cdec52e93727e979edf6043"
}

第四步:查看交易

https://testnet.qtum.info/tx/1aaf74a5e9c7a619502e6dd3682c46abdac5e3990cdec52e93727e979edf6043

image-20250308163444252

总结

Qtum 量子链以 UTXO 模型为核心,结合比特币的安全性和交易效率,同时支持智能合约开发。本文详细解析了 UTXO 的工作原理及其在防止双花和并行处理上的优势,并通过实操案例展示了在 Qtum 测试网上签名和发送交易的具体步骤。这些内容为开发者理解 Qtum 的 UTXO 机制提供了实用参考。后续,开发者可以基于这些技术细节,进一步研究 Qtum 的交易优化或合约实现。

参考