乐趣区

关于区块链:百度超级链Xuper关于金额相关问题

前言

这篇文章咱聊聊百度链手续费问题

对于百度链往期文章汇总

在百度超级链 Xuper 上部署智能合约并实现存证性能

对百度超级链 Xuper 应用过程中的进一步了解

在 Xuper 链上部署 Java 语言智能合约和剖析存证合约的实现逻辑

应用百度链的智能合约来落地公司业务场景

以单节点环境运行

以繁多变量的形式来钻研一个不理解的事物 才是正当的形式

不然多种变量杂糅在一起 只会越来越乱了

单节点即单个出块地址,不须要思考多个出块节点轮流出块的状况

环境筹备

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

批改节点配置

`./xchain-cli createChain
nohup ./xchain –vm ixvm &
`

确认下几个初始金额

  • 节点地址 dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN
  • 初始金额 100000000000000000000
  • 每出一个块处分 1000000
  • 金额精度是 8 即总金额为 1000000000000 个
  • proposer_num 为 1 示意一个出块节点
  • period 为 3000 示意每三秒出一次块
  • alternate_interval 为 3000 示意出块节点切换耗时 3 秒 因为以后就一个节点 所以不须要切换
  • term_interval 为 6000 示意节点 1 最初一个出块完结开始到节点 2 第一个节点开始之间距离 6 秒 即 节点切换工夫 3 秒 + 3 秒出一个块 一共 6 秒 因为就一个节点所以这个工夫也不须要
  • block_num 为 20 示意一个节点出 20 个块 再轮到另外一个节点出 20 个块
  • vote_unit_price 示意每头一次票 所代表的权重即代表多少 token 值

查看节点账户地址

`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

金额是 1000000

这个金额大家可能会有疑难

总金额不是 > 100000000000256000000 这个值吗

(为什么大于 因为在一直的出块嘛)

那为什么是 1000000

起因是 总金额 尽管 > 100000000000256000000

但它是又很多的 面值为 1000000 的 utxo 组成

所以这里领取 1000 手续费 那么只须要一个 1000000 的 utxo 即可

目标账号有 2 个

一个是 1000 手续费 去了 $ 账户

另一个是 999000 示意 1000000 的 utxo 减去手续费 1000 还剩这么多

大家有没有纳闷 $ 地址 是啥玩意

其实这个示意未知地址

因为此时发动一个创立一个合约账户的交易,同步返回一个交易 hash

此时这个交易还未被打包做为块的一部分,还在交易池中即还未上链

打包的过程

1、先确定哪个出块节点

2、从交易池中获取 3 秒这个时间段内的交易

3、将这些交易打包(如果没有交易也会进行打包)

只有打包了之后 才会确定手续费会给到哪个出块节点地址

上面咱确认下下面的表述

首先

从交易详情外面获取区块 id

通过区块 id 查看区块详情

`./xchain-cli block eb8a60f5c12666ea0b0fbc11088d6e8f2d3466311d920a7b320b1fe642255b39
`

大家发现了没 这个区块中的交易列表中就一笔交易 就是方才咱们做的那笔

创立合约账户的交易

接着往下看这个区块详情 发现这里还有一个交易

看到了没

“txInputs”: null 对应的 txOutputs 示意出块处分

处分金额是 1000000 给到了节点账户 dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN

猜测:到此节点账户的金额蕴含 2 局部 一部分是 出块的处分 另外一部分来源于手续费 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

初始金额是方才转给它的 1000000000 这么多钱

目标账户 1、手续费 1000 元给到了 $ 这个出块节点地址

2、残余的 999999000 钱又回到了起源地址中 a1E2v3RHtLHhE7N4yRgcrsfsDdMsjQFm9

  • 看下一般账户余额和节点账户余额(确认下手续费有没有转给节点账户)

`./xchain-cli account  balance a1E2v3RHtLHhE7N4yRgcrsfsDdMsjQFm9

999999000
`

余额是 999999000 阐明手续费曾经扣掉了

通过区块 id 查问区块详情已确认出块处分去了哪个节点账户(当然这里咱只用的一个节点进行测试的)

查看节点账户余额

余额是这么个值 99999999999913801000

咱计算下这个值是否合乎预期

初始金额是 100000000000000000000

创立了一个合约账户手续费 1000(起源账户和目标账户是一个地址 不计算在内)

给合约地址转账 100000

又转账了一笔 100000 手续费 100(起源账户和目标账户是一个地址 不计算在内)

创立了一个一般账户

给一般账户转账了 1000000000

一般账户创立了一个合约账户 手续费 1000 给到了节点账户

100000000000000000000-100000-100000+1000-1000000000=99999999998999801000

这个值是不蕴含出块处分在内的值

以后的出块高度 1101

99999999998999801000+1101000000=100000000000100801000

金额正好能够匹配上


通过合约账户部署合约

冀望:手续费来源于合约账户,手续费给到节点账户(出块节点)

先给合约账户 XC1111111111111111@xuper 转账 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

手续费是 5574291 转给了出块节点账户

查问节点账户余额为 99999999999322375291

剖析下这个金额是否正确

1、方才计算的金额是 100000000000100801000

2、给合约账户 XC1111111111111111@xuper 转了 1000000000

3、收到手续费 5574291

100000000000100801000-1000000000+5574291=99999999999106375291

100000000000100801000 这个所对应的区块高度是 1101

目前高度是 1356

目前账户金额 99999999999361375291

99999999999106375291+(1356-1101)x1000000=99999999999361375291

金额完满匹配哦


通过调用合约交易

冀望:账户起源是节点账户,手续费专项节点账户,即目前的余额的减少只蕴含出块处分 没有手续费,因为手续费对消了嘛

目前最新高度 1485

最新余额 99999999999490375291

方才计算的金额 99999999999361375291 对应的高度 1356

99999999999361375291+(1485-1356)x1000000=99999999999490375291

正好对应

感激

感激百度链超哥的技术支持????

退出移动版