百度超级链Xuper涉及金额问题
- 业界动态
- 2024-04-15 09:20:00
- 0
百度链往期文章总结
在百度超级链Xuper上部署智能合约并实现证书存储功能
进一步了解百度超级链Xuper的使用
在Xuper链上部署Java语言智能合约并分析通证合约的实现逻辑
利用百度链智能合约实现公司业务场景
作为单节点环境运行
这是使用单个变量研究未知事物的合理方法。
否则,当多个变量混合在一起时,只会变得越来越混乱。
单个节点就是单个出块地址,无需考虑多个出块节点轮流出块的情况。
环境准备
cd pn1
rm -rf data/blockchain/xuper/
修改节点配置
./xchain-cli createChain
nohup ./xchain --vm ixvm &
确认接下来的几个初始金额
查看节点账户地址
cat data/keys/address
dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN
查看当前块高度的脚本
#!/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 '节点账户金额:'
./xchain-cli account balance dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN
查看初始地址数量
./xchain-cli account balance dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN
结果与预期一致
3秒产生一个区块
已生产 256 个区块
100000000000000000000+256*1000000=100000000000256000000
创建合约账户(默认由节点账户创建)
./xchain-cli account new --account 1111111111111111 --fee 1000
手续费1000
我们来看看手续费都去哪儿了。
源帐户dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN
金额为1,000,000
您可能对此金额有疑问
总金额 > 100000000000256000000 不值这个值吗?
(为什么更大?因为区块不断生成)
那为什么是1000000呢?
原因是总金额虽然 > 100000000000256000000
但它是由很多面值为1,000,000的utxo组成的
所以如果你在这里支付1,000的手续费,那么你只需要1,000,000的utxo。
有2个目标账户
1000 费用转到 $ 帐户
另外一个是999000,就是1000000的utxo减去1000的手续费,还剩这么多
您有没有想过地址是什么?
事实上,这意味着一个未知的地址
因为此时发起交易创建合约账户,同时返回交易哈希。
此时交易还没有被打包为区块的一部分,仍然在交易池中,即还没有上传到链上。
包装工艺
1.首先确定是哪个出块节点
2. 从交易池中获取3秒内的交易。
3、打包这些交易(如果没有交易则打包)
只有打包后才确定手续费分配到哪个出块节点地址。
我们来确认一下上面的说法
第一的
从交易详细信息中获取区块 ID
通过区块id查看区块详细信息
./xchain-cli block eb8a60f5c12666ea0b0fbc11088d6e8f2d3466311d920a7b320b1fe642255b39
大家发现这个区块的交易列表里只有一笔交易,就是我们刚才做的一笔。
为合约账户创建交易
然后往下看这个区块的详细信息,发现这里还有一笔交易
你看见了吗
"txInputs":null对应的txOutputs表示区块奖励
奖励金额为1,000,000,发放至节点账户dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN
猜测:该节点账户中的金额由两部分组成。 一部分是出块的奖励,另一部分来自1000的手续费。
我们来验证一下上面的猜想
你看见了吗
节点账户当前金额仅为区块奖励金额,不包含手续费金额。
上述猜想是错误的
那么这笔手续费到底去哪儿了呢?
事实上,如果手续费的源账户是节点账户,目标账户也是节点账户,那不是会被抵消吗?
我们再做一个测试来确认刚才的结论:转账到合约账户
./xchain-cli transfer --to XC1111111111111111@xuper --amount 100000
e2979b6bff380c7e1864d645fa514e06c428bdce5e74f9bba779a36e9bf0e748
您可以转账,无需任何费用
源账户为节点账户
目标账户为合约账户
转账需支付费用
./xchain-cli transfer --to XC1111111111111111@xuper --amount 100000 --fee 100
综上所述
当费用来源账户和流量账户为同一账户时,账户余额为
初始账户金额+区块高度x区块奖励-转账金额
上述公式不包含手续费。
让我们再做一次测试来获得印象
刚才的手续费的源账户和目的账户不是同一个账户吗?
那么我们来测试一下手续费的源账户和目的账户为不同账户的情况。
./xchain-cli account newkeys --output data/bob
a1E2v3RHtLHhE7N4yRgcrsfsDdMsjQFm9
源账户就是这个普通账户a1E2v3RHtLHhE7N4yRgcrsfsDdMsjQFm9
初始金额是刚刚转入的10亿。
目的地账户
1. 1000元手续费给予出块节点地址$
2、剩余的999999000钱退回源地址a1E2v3RHtLHhE7N4yRgcrsfsDdMsjQFm9
./xchain-cli account balance a1E2v3RHtLHhE7N4yRgcrsfsDdMsjQFm9
999999000
余额为999999000,表示已扣除手续费
通过区块ID查询区块详情,确认区块奖励到了哪个节点账户(当然我们这里只用一个节点进行测试)
查看节点账户余额
余额是这样一个值99999999999913801000
我们来计算一下这个值是否符合预期
初始金额为100000000000000000000
创建合约账户,手续费1000(源账户和目的账户为同一地址,不计算在内)
转账100000至合约地址
另转账10万,手续费100(源账户和目的账户地址相同的不计算在内)
创建了一个普通帐户
转入1000000000至普通账户
普通账户创建合约账户,1000手续费给节点账户。
100000000000000000000-100000-100000+1000-1000000000=99999999998999801000
该值不包括区块奖励。
当前区块高度为1101
99999999998999801000+1101000000=100000000000100801000
金额刚好匹配
通过合约账户部署合约
期望:手续费来自合约账户,手续费给节点账户(出块节点)
先转账1000000000至合约账户XC11111111111111111@xuper
./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
源账户为合约账户 XC11111111111111111@xuper
初始金额为1000000000
最终金额 994425709
手续费为5574291,转入超级节点账户。
查询节点账户余额为99999999999322375291
分析一下这个金额是否正确
1、刚才计算的金额为100000000000100801000
2、转入1000000000至合约账户XC11111111111111111@xuper
3、收到手续费5574291
100000000000100801000-1000000000+5574291=99999999999106375291
100000000000100801000对应的区块高度为1101
目前海拔高度 1356
往来账户金额 99999999999361375291
99999999999106375291+(1356-1101)x1000000=99999999999361375291
金额完全匹配
通过调用合约进行交易
期望:账户来源为节点账户,手续费为特殊节点账户。 即当前余额的增加只包含区块奖励,不包含手续费,因为手续费是被抵消的。
最新身高1485
最新余额 999999999999490375291
刚刚计算出来的金额是99999999999361375291对应的高度是1356
99999999999361375291+(1485-1356)x1000000=99999999999490375291
完全对应
感激的
感谢百度链朝歌的技术支持
本文由ajseo于2024-04-15发表在华街百科网,如有疑问,请联系我们。
本文链接:http://baike.huajie.net.cn/baike/1204.html
发表评论