Qtum量子链:UTXO交易的深度解析与实操指南区块链技术的魅力在于其多样化的实现方式,而Qtum(量子链)凭借未花费交易输出(UTXO)模型和权益证明(PoS)机制,成为连接比特币与智能合约世界的桥梁。虽然Qtum以支持智能合约著称,但其UTXO模型在交易处理中的高效性和安全性同样
区块链技术的魅力在于其多样化的实现方式,而 Qtum(量子链)凭借未花费交易输出(UTXO)模型和权益证明(PoS)机制,成为连接比特币与智能合约世界的桥梁。虽然 Qtum 以支持智能合约著称,但其 UTXO 模型在交易处理中的高效性和安全性同样值得关注。本文将深入剖析 Qtum 的 UTXO 机制,揭示其在防止双花、提升并行性和优化存储方面的优势,并通过两个详细的实操案例,展示如何在 Qtum 测试网上实现交易签名与发送,为开发者提供实用的技术指南。
Qtum 量子链是一个基于 UTXO 模型和 PoS 共识的区块链平台,通过账户抽象层(AAL)融合比特币的交易结构与以太坊的智能合约能力。本文首先详细解析了 UTXO 的工作原理及其在安全性、并行性、隐私性和存储效率上的优势,并与以太坊的账户模型进行对比。随后,通过两个实操案例,展示了在 Qtum 测试网上使用 TypeScript 实现 UTXO 交易签名、发送及验证的完整流程,包括获取 UTXO 数据、构建交易和查询结果。尽管本文未涉及智能合约的直接应用,但这些基础操作奠定了理解 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(未花费交易输出)表示 某个地址收到但尚未使用的比特币,它们可以作为新交易的输入。
类比: UTXO 类似于现金,你不能直接修改账户余额,而是用旧的钞票换新的钞票。例如:
- 你有 2 张 10 元人民币(20 元 UTXO)。
- 你要支付 15 元,必须使用 2 张 10 元,然后找回 5 元零钱。
- 你的旧 UTXO(2 × 10 元)被销毁,新的 UTXO(15 元给商家,5 元找零)被创建。
UTXO(比特币) | 账户模型(以太坊) | |
---|---|---|
交易结构 | 使用 UTXO 作为输入和输出,每个 UTXO 只能使用一次 | 直接修改账户余额 |
并行性 | 高——交易可以并行处理,因为 UTXO 互不影响 | 低——可能修改相同账户,需要排队 |
隐私性 | 高——新交易可以生成新地址 | 低——账户地址固定,交易记录可追踪 |
双花攻击 | 难以实现,UTXO 一旦花费就无效 | 可能发生,依赖全网确认 |
存储需求 | 较低,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
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
curl --location 'https://testnet.qtum.info/api/tx/send' \
--header 'Content-Type: application/json' \
--data '{
"rawtx": "020000000174b8d0d482ca81ea8809d8fb3342fb2f2fa61f2f22f39f90c1a1afcc595963fb010000006b483045022100ce0d24de3e834d7c04c3f6943e1e5a2342ee972e3767339bc107fe7e1c7e532d02202b944f78c3f715afee5bb73989ce5f0194d5469df9738e0364023b28f1f659f70121039982e9dfad974fee93f81f19efaf2b95cb78d5588bfe79e6e51caa5acdf3cb79ffffffff0200ca9a3b000000001976a914cadeada5719f4b95636b28f963c27bf548a52e5488ace00b7b4d000000001976a9142eee8c03e5b76b9c8af164c44b137dbe4598c47688ac00000000"
}'
{
"status": 0,
"id": "1aaf74a5e9c7a619502e6dd3682c46abdac5e3990cdec52e93727e979edf6043",
"txid": "1aaf74a5e9c7a619502e6dd3682c46abdac5e3990cdec52e93727e979edf6043"
}
https://testnet.qtum.info/tx/1aaf74a5e9c7a619502e6dd3682c46abdac5e3990cdec52e93727e979edf6043
Qtum 量子链以 UTXO 模型为核心,结合比特币的安全性和交易效率,同时支持智能合约开发。本文详细解析了 UTXO 的工作原理及其在防止双花和并行处理上的优势,并通过实操案例展示了在 Qtum 测试网上签名和发送交易的具体步骤。这些内容为开发者理解 Qtum 的 UTXO 机制提供了实用参考。后续,开发者可以基于这些技术细节,进一步研究 Qtum 的交易优化或合约实现。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!