zoukankan      html  css  js  c++  java
  • 交易是如何被创建和打包的4

    被一个程序bug困扰了好久,今天终于解决了,原来是当时的一个变量写错了。

    现在接着上次没有写完的东西继续写。SelectCoins();分析一下这个函数,这个函数是用来让你从自己的钱包选择可用的token的,选出后用一个变量进行存储的。先来看下函数原型:

    bool SelectCoins(const CAmount& nTargetValue, std::set<std::pair<const CWalletTx,unsigned int>> &setCoinsRet, CAmount& nValueRet, const CCoinControl *coinControl = NULL, AvailableCoinsType nCoinType=ALL_COINS, bool fUseInstantSend = true) const;

    nTargetValue变量就是你要寻找的临界值,你要给接收方发送的数量。

    setCoinsRet变量存储着所有的可用的交易和交易的位置


     

    对象vCoins存储着所有的可以作用交易输出的交易信息。下面介绍AvailableCoins();函数。


     

    默认coinControl是false,直接跳过。否则就是循环遍历进行填充,setCoinsRet.insert(make_pair(out.tx, out.i));


     

    这个默认传入的token的类型就是ALL_COINS。所以这个也是跳过的。和上面一样,这些都是对币的选择的。


     

    setPresetCoins存储的就是预设值。coinControl默认就是NULL;所以没有复制操作。

    std::vector vPresetInputs;没有进行初始化所以里面是没有值的。所以下面的循环也没有进入。


     

     

    循环遍历,如果之前存在预设值对象里面有的的话,进行删除。如果没有就跳过。

    再把预设值对象含有的进行赋值给vCoins对象里面。

    nValueRet对象存储着所有的你自己的可用的币的总量。这个值可能会大于你给接收方的币,最少也要等于它。

    现在来看下AvailableCoins()函数。将所有的可以输出记性填充到vCoins对象里面,原型如下:

    void AvailableCoins(std::vector& vCoins, bool fOnlyConfirmed=true, const CCoinControl *coinControl = NULL, bool fIncludeZeroValue=false, AvailableCoinsType nCoinType=ALL_COINS, bool fUseInstantSend = false) const;

    这个函数的作用是就是拿到你所有的交易里可以使用的交易输出。


     

    先对对象进行清空操作。


     

    然后开始对钱包里面的交易进行遍历。没找到一个交易,就对该交易进行检查。

    因为钱包锁定的币的类型不一样,所以要找到可以使用的币的类型。

    如果找到了,先判断是否是已花费的,是否是自己的,是否存在可以使用的金额,如果是可以使用的要存入进vCoins对象中去。

    选币环节到此结束,下节介绍如何进行签名。

  • 相关阅读:
    url 百分号解密
    16.UA池和代理池
    15.scrapy框架之日志等级、请求传参、提高scrapy框架的爬取效率
    14. scrip框架之5大核心组件和post请求
    13.scrapy 框架之递归解析(手动发送请求),
    12. scrapy 框架持续化存储
    11.scrapy框架简介和基础应用
    10. 移动端数据爬取
    09.python之网络爬虫之selenium、phantomJs和谷歌无头浏览器的自动化操作
    08 python之网络爬虫之乱码问题
  • 原文地址:https://www.cnblogs.com/AlfredZKY/p/9931841.html
Copyright © 2011-2022 走看看