交易是如何被創(chuàng)建和打包的1。

年前一直想寫有關(guān)交易是如何被區(qū)塊鏈是如何被創(chuàng)建的,一個交易的創(chuàng)建都經(jīng)過了那些步驟和驗證操作,但是總是被各種原因被擱淺,加班太嚴重了,有時候難得的休息時間,都不想開電腦。這次一定要把自己看到的交易的流程寫下來,畢竟之前也研究了好長時間的交易模塊。

流程圖先不畫了,畢竟涉及的函數(shù)調(diào)用比較多,畫起來也比較繁瑣,看到那個函數(shù)被調(diào)用,再著重說下是怎么原理,自己的水平確實有限的,分析的也不一定都是正確的,在這里只做個因子,關(guān)于交易的其他知識,歡迎一起探討。共同進步,好了廢話不多,開整。(我研究的是底層代碼,上層的估計差別也是不大的)

萬里長征第一步:UniValue sendtoaddress(const UniValue& params, bool fHelp)這個函數(shù)就是把你自己的token發(fā)送給別人,這個人rpc的調(diào)用前提是需要別人把打幣地址先給你。主要的三個參數(shù)打幣地址 打幣金額 打幣的標記 剩下的是可選參數(shù)。

LOCK2(cs_main, pwalletMain->cs_wallet);互斥鎖,保證錢包只能被一個線程調(diào)用。

CBitcoinAddress address(params[0].get_str());CBitcoinAddress 是token的地址類,這個追進去就可以到是繼承?class CBitcoinAddress : public CBase58Data,運用的是base58編碼。這行代碼就可以把你傳進去的字符串地址解析成字符了地址了。

CAmount nAmount = AmountFromValue(params[1]);把你傳進的金額進行解析,token是一聰為單位的,所用要進行轉(zhuǎn)換。

在下面就是一些調(diào)用參數(shù)的判斷,參數(shù)個數(shù)的要求等,包塊后面的可選參數(shù)等的設(shè)置


EnsureWalletIsUnlocked();確保錢包是未鎖定狀態(tài)。一旦有別的線程正在訪問,立即報錯,并退出。

確定錢包沒有被其他線程訪問的話,就調(diào)用SendMoney(address.Get(), nAmount, fSubtractFeeFromAmount, wtx, fUseInstantSend, fUsePrivateSend);進行打幣。其中第一個參數(shù)就是token的地址,第二個就是需要打幣的金額,此時單位已經(jīng)轉(zhuǎn)換成聰了,fSubtractFeeFromAmount一個bool類型的變量,證明交易費是從給你打幣的金額中扣除,wtx就是此次需要創(chuàng)建的交易了,后面的兩個參數(shù)就是即時支付標志和私密發(fā)送的標志。

return wtx.GetHash().GetHex();最后拿到txid的十六進制形式。自此第一步分析完。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、快速術(shù)語檢索 比特幣地址:(例如:1DSrfJdB2AnWaFNgSbv3MZC2m74996JafV)由一串...
    不如假如閱讀 16,601評論 4 87
  • 來北京快一個月了,工作仍就沒有著落,可能是自己眼光太高,也可能是自己能力不足。但是我一直認為找一份工作,就...
    昨逝不留閱讀 156評論 0 0
  • 我親愛的笑笑小寶, 早上6點半,鬧鐘響了,我聽到你下床跑到我們的洗手間,我偷偷睜開眼,發(fā)現(xiàn)你看都不看假寐的我,直接...
    Graciegu閱讀 182評論 0 1
  • 案例十九、 【標題】老師,你的班會開的效果如何? 【案例】老師和學(xué)生很好的一個溝通渠道是通過班會。但是往往班會會成...
    janeJin閱讀 235評論 0 0
  • 盆友攜萌娃來玩,萌娃萱姐從早到晚那個嗨呀。 白天短暫休息倆小時。 即將兩歲的小孩對各種技能的瘋狂運用,讓我懷疑特們...
    海邊的Wendy閱讀 300評論 0 0

友情鏈接更多精彩內(nèi)容