主页 > imtoken苹果版官网下载 > 比特币源码学习(十六)——交易(二)交易过程分析

比特币源码学习(十六)——交易(二)交易过程分析

imtoken苹果版官网下载 2023-08-01 05:13:40

我上一次写关于交易的文章是 2 个月前。 这两个月断断续续,进展非常缓慢。

原计划是先了解以下比特币交易流程和原理。 然后发送一个比特币,用单步执行的方式跟踪交易过程比特币交易流程图,让你从根本上掌握比特币的交易过程。 但是在实际操作中,发现难度很大。 我不懂linux,所以,熟悉linux环境,搭建测试链,找到交易的相关源代码,对我来说,每一步都很难。 主要原因是学习的时间不多。 而且每读一点,就学一点,过一段时间,又忘掉一点。 反复。 耐心耗尽了。 这次我改变了计划,直接从源码入手,还是一点一点吃掉源码。 啃完源码,回去总结一下。 也许它会更好。

我们在交易比特币的时候,设置好交易金额和地址,然后点击发送按钮,那么按钮有没有什么功能呢? 真的有。

on_sendButton_clicked 点击发送比特币按钮的函数,该函数在sendcoinsdialog.cpp中。

以下是函数交易流程图。

火币比特币交易手续费_比特币交易流程图_火币网购买比特币流程

下面将逐步分析各个功能块的代码。

1 检查模型是否有效?

如果(!模型||!模型->getOptionsModel())

返回;

2 检查输入是否有效

for(int i = 0; i < ui->entries->count(); ++i)

{

SendCoinsEntry *entry =qobject_cast(ui->entries->itemAt(i)->widget());

如果(条目)

{

比特币交易流程图_火币比特币交易手续费_火币网购买比特币流程

如果(输入->验证())

{

recipients.append(entry->getValue());

}

别的

{

有效=假;

}

}

}

如果(!有效 || 收件人.isEmpty())

{

返回;

}

Btc 客户端可以同时发送多个输出,如下图所示。

火币比特币交易手续费_比特币交易流程图_火币网购买比特币流程

火币网购买比特币流程_火币比特币交易手续费_比特币交易流程图

每个输出都是一个条目。 For循环是检测每一项是否有效。 如果有任何无效条目,程序返回并且不执行。

entry 属于 SendCoinsEntry 类。 这个类定义在 sendcoinsentry.h 库文件中:

/**

* 对话框中用于发送比特币的单个条目。

* 堆叠小部件,具有不同的支付请求用户界面

* 具有很强的收款人身份。

*/

根据注释可以看出entry是一个发送btc的对话框。

For循环中的相关函数:

1 验证()函数

boolSendCoinsEntry::validate()

{

如果(!模型)

返回假;

// 检查输入有效性

bool retval = true;

比特币交易流程图_火币比特币交易手续费_火币网购买比特币流程

//检查发送请求是否有效

// 跳过支付请求的检查

如果(收件人。paymentRequest。IsInitialized())

返回retval;

// 检查地址是否合法

if(!model->validateAddress(ui->payTo->text()))

{

ui->payTo->setValid(false);

retval=假;

}

//检查发送的btc数量是否合法

如果 (!ui->payAmount->validate())

{

retval=假;

}

//不能发送 0 btc

火币比特币交易手续费_火币网购买比特币流程_比特币交易流程图

// 发送零金额无效

如果 (ui->payAmount->value(0) payAmount->setValid(false);

retval=假;

}

//为避免攻击,拒绝小额发送

// 拒绝灰尘输出:

if (retval &&GUIUtil::isDust(ui->payTo->text(), ui->payAmount->value())) {

ui->payAmount->setValid(false);

retval=假;

}

返回retval;

}

2 getValue()函数

SendCoinsRecipientSendCoinsEntry::getValue()

{

//检查发送请求是否有效

火币网购买比特币流程_比特币交易流程图_火币比特币交易手续费

// 支付请求

如果(收件人。paymentRequest。IsInitialized())

退货收件人;

// 正常支付

recipient.address =ui->payTo->text(); //读取并发送

recipient.label =ui->addAsLabel->text(); //读取标签

recipient.amount =ui->payAmount->value(); //读取发送金额

recipient.message =ui->messageTextLabel->text(); //读取消息

recipient.fSubtractFeeFromAmount =(ui->checkboxSubtractFeeFromAmount->checkState() == Qt::Checked);

退货收件人;

}

本文由【区块链研究院】优质内容计划支持。 更多区块链深度文章,请点击【区块链研究院】()

区块链研究院比特币源码学习班electroman

这是广告:

我们区块链学院打造了一个“区块链学院币圈交流”小密圈,在小密圈里,我们会带领大家一起学习区块链的原理和投资,同时也会提供区块链的基础知识、原理解答比特币交易流程图,交易所注册及交易操作、ICO交易及操作、投资分析、风险分析等。

火币比特币交易手续费_比特币交易流程图_火币网购买比特币流程