美文网首页
比特币源码研读(18)-交易(4)交易流程分析

比特币源码研读(18)-交易(4)交易流程分析

作者: electroman | 来源:发表于2018-03-04 21:34 被阅读166次

    交易流程图如下;

    在交易(3)中我们分析到Entry是否有效,并在交易(4)中,详细分析了针对dust的处理。下面我们继续分析交易流程

    在确认交易Entry有效以后,会进行钱包是否上锁的检查。

    1 检查钱包是否有锁

          //检查钱包是否有锁?

      fNewRecipientAllowed = false;

    WalletModel::UnlockContextctx(model->requestUnlock());  //从model中读取钱包状态

      if(!ctx.isValid())      //如果没锁,则退出函数

        {

          // Unlock wallet was cancelled

          fNewRecipientAllowed = true;    //设置新的容器允许标志

          return;

    }

    代码很简单,从model中提取钱包状态,如果未检查到锁,则置fNewRecipientAllowed为true,然后退出函数

    WalletModel是类,是qt可视代码和btc钱包之间的接口,定义在walletmodel.h中。

    UnlockContext也是一个类,用于未上锁的钱包的资源管理

        // RAI object for unlocking wallet,returned by requestUnlock()

        class UnlockContext

    注释中RAI是个笔误,应该是RAII,一种资源管理技术,RAII简单的说,是为了防止诸如内存泄露、资源泄露等情况产生的一种编程技巧

    我们看看fNewRecipientAllowed标志位是什么意思!

    在代码中搜索fNewRecipientAllowed,可以发现其他几处也设置位了true

    分别是:

    //如果钱包状态不是ok,则设置位true,并退出函数

      if(prepareStatus.status != WalletModel::OK) {

          fNewRecipientAllowed = true;

          return;

    }

    //如果消息窗口不是yes,则设置位true,并退出函数

      if(retval != QMessageBox::Yes)

        {

          fNewRecipientAllowed = true;

          return;

        }

    还有一个就是在void SendCoinsDialog::on_sendButton_clicked()函数的最后,

    fNewRecipientAllowed= true;

    从上面的代码分析,当停止交易或者交易完成以后,将这个变量置位true

    2 为交易费做准备

          //为得到交易费准备交易

      // prepare transaction for getting txFee earlier

      WalletModelTransaction currentTransaction(recipients);

    WalletModel::SendCoinsReturn prepareStatus;

    WalletModelTransaction是类,定义在walletmodeltransaction.h中。是用于钱包交易的数据模型。

    WalletModelTransaction currentTransaction(recipients) 将交易recipients传入到参数currentTransaction中

    WalletModel上面介绍过了。

    SendCoinsReturn :返回发送币以后的状态记录,包括错误id信息。

    WalletModel::SendCoinsReturn

    prepareStatus; 就是定义一个参数,用于保存交易发送以后的状态信息。

    本文由【区块链研习社】优质内容计划支持,更多关于区块链的深度好文,请点击[区块链研习社](http://www.jianshu.com/c/b17f09dc2831)

    区块链研习社比特币源码研读班  electroman

    有QYB的伙伴们,打赏点呗!

    QYB地址:QVR2eUwbx43YMkWjbaAQCYdoDmpC1ohnRk


    相关文章

      网友评论

          本文标题:比特币源码研读(18)-交易(4)交易流程分析

          本文链接:https://www.haomeiwen.com/subject/qviqfftx.html