百度超級鏈Xuper關于金額相關問題

關于百度鏈往期文章匯總

在百度超級鏈Xuper上部署智能合約并實現(xiàn)存證功能

對百度超級鏈Xuper使用過程中的進一步理解

在Xuper鏈上部署Java語言智能合約和分析存證合約的實現(xiàn)邏輯

使用百度鏈的智能合約來落地公司業(yè)務場景

以單節(jié)點環(huán)境運行

以單一變量的方式來研究一個不了解的事物 才是合理的方式

不然多種變量雜糅在一起 只會越來越亂了

單節(jié)點即單個出塊地址,不需要考慮多個出塊節(jié)點輪流出塊的情況

環(huán)境準備

cd?pn1
rm?-rf?data/blockchain/xuper/

修改節(jié)點配置

./xchain-cli?createChain
nohup?./xchain?--vm?ixvm?&

確認下幾個初始金額

  • 節(jié)點地址 dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN

  • 初始金額 100000000000000000000

  • 每出一個塊獎勵 1000000

  • 金額精度是8 即總金額為 1000000000000 個

  • proposer_num為1表示一個出塊節(jié)點

  • period為3000表示每三秒出一次塊

  • alternate_interval為3000 表示出塊節(jié)點切換耗時3秒 因為當前就一個節(jié)點 所以不需要切換

  • term_interval為6000 表示節(jié)點1最后一個出塊結(jié)束開始到節(jié)點2第一個節(jié)點開始之間間隔6秒 即 節(jié)點切換時間3秒+3秒出一個塊 一共6秒 因為就一個節(jié)點所以這個時間也不需要

  • block_num為20 表示一個節(jié)點出20個塊 再輪到另外一個節(jié)點出20個塊

  • vote_unit_price表示每頭一次票 所代表的權重即代表多少token值

查看節(jié)點賬戶地址

cat?data/keys/address
dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN

查看當前區(qū)塊高度的腳本

#!/bin/bash
for((i=1;i<=1;i++));
do
????????echo?-n?"node$i:";
????????./xchain-cli?status?-H?127.0.0.1:3710$i?|?grep?trunkHeight;
done


echo?-n?'節(jié)點賬戶金額:'

./xchain-cli?account??balance?dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN

查看初始地址金額

./xchain-cli?account??balance?dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN

結(jié)果和期望一致

3秒出一個塊 出了256個塊 100000000000000000000+256*1000000=100000000000256000000

創(chuàng)建一個合約賬戶(默認由節(jié)點賬戶創(chuàng)建)

./xchain-cli?account?new?--account?1111111111111111?--fee?1000

手續(xù)費1000

咱們來看下這個手續(xù)費跑哪里去了

來源賬戶 dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN

金額是 1000000

這個金額大家可能會有疑問

總金額不是 > 100000000000256000000 這個值嗎

(為什么大于 因為在不斷的出塊嘛)

那為什么是 1000000

原因是 總金額 雖然 > 100000000000256000000

但它是又很多的 面值為1000000的utxo組成

所以這里支付 1000手續(xù)費 那么只需要一個 1000000 的 utxo即可

目的賬號有2個

一個是 1000手續(xù)費 去了 $ 賬戶

另一個是 999000 表示 1000000的utxo減去手續(xù)費1000 還剩這么多

大家有沒有疑惑 $ 地址 是啥玩意

其實這個表示未知地址

因為此時發(fā)起一個創(chuàng)建一個合約賬戶的交易,同步返回一個交易hash

此時這個交易還未被打包做為塊的一部分,還在交易池中即還未上鏈

打包的過程

1、先確定哪個出塊節(jié)點

2、從交易池中獲取3秒這個時間段內(nèi)的交易

3、將這些交易打包(如果沒有交易也會進行打包)

只有打包了之后 才會確定手續(xù)費會給到哪個出塊節(jié)點地址

下面咱確認下上面的表述

首先

從交易詳情里面獲取區(qū)塊id

通過區(qū)塊id查看區(qū)塊詳情

./xchain-cli?block?eb8a60f5c12666ea0b0fbc11088d6e8f2d3466311d920a7b320b1fe642255b39

大家發(fā)現(xiàn)了沒 這個區(qū)塊中的交易列表中就一筆交易 就是剛才我們做的那筆

創(chuàng)建合約賬戶的交易

接著往下看這個區(qū)塊詳情 發(fā)現(xiàn)這里還有一個交易

看到了沒

"txInputs": null對應的txOutputs表示出塊獎勵

獎勵金額是 1000000 給到了節(jié)點賬戶 dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN

猜想:到此節(jié)點賬戶的金額包含2部分 一部分是 出塊的獎勵 另外一部分來源于手續(xù)費1000

咱們確認下上面的猜想

看到了沒

當前節(jié)點賬戶的金額只是出塊獎勵的金額 并沒有手續(xù)費的金額

上面的猜想錯了

那么手續(xù)費的金額去哪了呢?

其實手續(xù)費的來源賬戶是節(jié)點賬戶 目標賬戶也是節(jié)點賬戶 那不就抵消了嘛


再來一個測試來印證下剛才的結(jié)論:給合約賬戶轉(zhuǎn)賬

./xchain-cli?transfer?--to?XC1111111111111111@xuper?--amount?100000
e2979b6bff380c7e1864d645fa514e06c428bdce5e74f9bba779a36e9bf0e748

轉(zhuǎn)賬沒有手續(xù)費也可以轉(zhuǎn)

來源賬戶是節(jié)點賬戶 目的賬戶是合約賬戶

轉(zhuǎn)賬帶有手續(xù)費

./xchain-cli?transfer?--to?XC1111111111111111@xuper?--amount?100000?--fee?100

結(jié)論

當手續(xù)費來源賬戶和流向賬戶是同一個賬戶的時候 賬戶余額為

賬戶初始金額+出塊高度x出塊獎勵-轉(zhuǎn)賬金額

上面的公式并沒有將手續(xù)費計算在內(nèi)

咱們再來一個測試來印象下

剛才不是手續(xù)費來源賬戶和目的賬戶是同一個賬戶嘛

那咱們測試下讓手續(xù)費來源賬戶和目的賬戶是不一個賬戶的情況

  • 先創(chuàng)建一個普通賬戶
./xchain-cli?account?newkeys?--output?data/bob

a1E2v3RHtLHhE7N4yRgcrsfsDdMsjQFm9
  • 通過節(jié)點賬戶給這個普通賬戶轉(zhuǎn)點錢
  • 通過這個普通賬戶創(chuàng)建合約地址
  • 查看交易詳情

來源賬戶是這個普通賬戶a1E2v3RHtLHhE7N4yRgcrsfsDdMsjQFm9

初始金額是剛才轉(zhuǎn)給它的1000000000這么多錢

目的賬戶 1、手續(xù)費1000元給到了 $ 這個出塊節(jié)點地址

2、剩余的999999000錢又回到了來源地址中a1E2v3RHtLHhE7N4yRgcrsfsDdMsjQFm9

  • 看下普通賬戶余額和節(jié)點賬戶余額(確認下手續(xù)費有沒有轉(zhuǎn)給節(jié)點賬戶)
./xchain-cli?account??balance?a1E2v3RHtLHhE7N4yRgcrsfsDdMsjQFm9

999999000

余額是999999000說明手續(xù)費已經(jīng)扣掉了

通過區(qū)塊id查詢區(qū)塊詳情已確認出塊獎勵去了哪個節(jié)點賬戶 (當然這里咱只用的一個節(jié)點進行測試的)

查看節(jié)點賬戶余額

余額是這么個值 99999999999913801000

咱計算下這個值是否符合預期

初始金額是 100000000000000000000

創(chuàng)建了一個合約賬戶手續(xù)費1000(來源賬戶和目的賬戶是一個地址 不計算在內(nèi))

給合約地址轉(zhuǎn)賬100000

又轉(zhuǎn)賬了一筆 100000 ?手續(xù)費100(來源賬戶和目的賬戶是一個地址 不計算在內(nèi))

創(chuàng)建了一個普通賬戶

給普通賬戶轉(zhuǎn)賬了 1000000000

普通賬戶創(chuàng)建了一個合約賬戶 手續(xù)費1000給到了節(jié)點賬戶

100000000000000000000-100000-100000+1000-1000000000=99999999998999801000

這個值是不包含出塊獎勵在內(nèi)的值

當前的出塊高度1101

99999999998999801000+1101000000=100000000000100801000

金額正好可以匹配上


通過合約賬戶部署合約

期望:手續(xù)費來源于合約賬戶,手續(xù)費給到節(jié)點賬戶(出塊節(jié)點)

先給合約賬戶XC1111111111111111@xuper轉(zhuǎn)賬 1000000000

./xchain-cli?wasm?deploy?--account?XC1111111111111111@xuper?--cname?hello_last_17??--fee?5574291?--runtime?go?/Users/mengfanxiao/Documents/project/company/XinPools_INFO/document/business/baidu/20200714-最新版本/xuperchain/core/contractsdk/go/example/eleccert_final/eleccert_final.wasm?-a?'{"creator":"mengfanxiao"}'
contract?response:?
The?gas?you?cousume?is:?5206429
The?fee?you?pay?is:?5574291
Tx?id:?f7392917ed5691ed40b3756b0b562e5dc54994052cafd7894fc21e17524b4231

來源賬戶是合約賬戶 XC1111111111111111@xuper

初始金額是 1000000000

最終金額 994425709

手續(xù)費是 5574291 轉(zhuǎn)給了出塊節(jié)點賬戶

查詢節(jié)點賬戶余額為99999999999322375291

分析下這個金額是否正確

1、剛才計算的金額是 100000000000100801000

2、給合約賬戶XC1111111111111111@xuper轉(zhuǎn)了1000000000

3、收到手續(xù)費 5574291

100000000000100801000-1000000000+5574291=99999999999106375291

100000000000100801000這個所對應的區(qū)塊高度是 1101

目前高度是 1356

目前賬戶金額 99999999999361375291

99999999999106375291+(1356-1101)x1000000=99999999999361375291

金額完美匹配哦


通過調(diào)用合約交易

期望:賬戶來源是節(jié)點賬戶,手續(xù)費專項節(jié)點賬戶,即目前的余額的增加只包含出塊獎勵 沒有手續(xù)費 ,因為手續(xù)費抵消了嘛

目前最新高度1485

最新余額 99999999999490375291

剛才計算的金額 99999999999361375291 對應的高度1356

99999999999361375291+(1485-1356)x1000000=99999999999490375291

正好對應

感謝

感謝百度鏈超哥的技術支持??

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

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