主页 > imtoken苹果版官网下载 > 比特币源码学习(十六)——交易(二)交易过程分析
比特币源码学习(十六)——交易(二)交易过程分析
我上一次写关于交易的文章是 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交易及操作、投资分析、风险分析等。