交易是如何被建立和打包的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物件中去。
選幣環節到此結束,下節介紹如何進行簽名。
相關文章
- TCP連線是如何建立和終止的?TCP
- WinMain是如何被呼叫的AI
- SAP CRM WebClient UI和Hybris的controller是如何被呼叫的WebclientUIController
- 4. JSON字串是如何被解析的?JsonParser瞭解一下JSON字串
- 4 建立和配置CDB
- Java Main 如何是如何被執行的?JavaAI
- 什麼是區塊鏈的鏈外交易和鏈內交易區塊鏈
- 密碼是如何被竊取的密碼
- Go timer 是如何被排程的?Go
- IDEA建立project和多個module(相互依賴打包)IdeaProject
- JVM是如何建立一個物件的?JVM物件
- Spring bean到底是如何建立的?(上)SpringBean
- 我是一個請求,我是如何被髮送的?
- 爬蟲是如何被網站識別的?爬蟲網站
- flatpak 和 snap 是 Linux 上的應用軟體打包方式Linux
- webpack4入門和多檔案打包嘗試Web
- 記介面當中使用 session 是如何被排斥的Session
- 馬耳他Palladium和Bittrex公司建立新的加密貨幣交易所加密
- 4_關於類的主動使用和被動使用
- QT如何打包釋出的QT
- 曾經被多次唱衰的 Capcom 是如何浴火重生的?
- 【STAT】Oracle 表統計資訊被鎖,如何建立索引Oracle索引
- 4. 使用webpack打包TSWeb
- idea建立、執行、打包控制檯程式Idea
- Android包管理機制(五)APK是如何被解析的AndroidAPK
- Activity生命週期回撥是如何被回撥的?
- Vuex原始碼學習(八)模組的context如何被建立以及它的作用Vue原始碼Context
- unreal engine 4 如何建立地形、地表貼圖。Unreal
- 如何使用IPFS和Filecoin建立NFT
- Retrofit是如何建立的?為什麼要用動態代理
- 我是如何用 Amazon Serverless 建立一個門鈴的Server
- TCP和UDP是如何工作的TCPUDP
- 如何保障你的被測系統覆蓋度是全的
- CPU內部的奧秘:程式碼是如何被執行的?
- 建立 UIWindow 被忽視的一個坑UI
- 阿里面試題:Mybatis中的Dao介面和XML檔案裡的SQL是如何建立關係的?阿里面試題MyBatisXMLSQL
- 如何在Debian和Ubuntu下重新打包Deb檔案Ubuntu
- IDEA如何用maven打包(介面和命令兩種方式)IdeaMaven