前言

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

关于百度链往期文章汇总

在百度超级链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++));
doecho -n "node$i:";./xchain-cli status -H 127.0.0.1:3710$i | grep trunkHeight;
doneecho -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/boba1E2v3RHtLHhE7N4yRgcrsfsDdMsjQFm9
  • 通过节点账户给这个普通账户转点钱

  • 通过这个普通账户创建合约地址

  • 查看交易详情

来源账户是这个普通账户a1E2v3RHtLHhE7N4yRgcrsfsDdMsjQFm9

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

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

2、剩余的999999000钱又回到了来源地址中a1E2v3RHtLHhE7N4yRgcrsfsDdMsjQFm9

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

./xchain-cli account  balance a1E2v3RHtLHhE7N4yRgcrsfsDdMsjQFm9999999000

余额是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

正好对应

感谢

感谢百度链超哥的技术支持

百度超级链Xuper关于金额相关问题相关推荐

  1. 对百度超级链Xuper使用过程中的进一步理解

    前言 之前写过一篇文章,在百度超级链Xuper上部署智能合约并实现存证功能 这里叙述了 搭建3个节点 将节点1作为出块节点,这篇文章 咱们配置下将 节点1和节点2作为出块节点,节点3作为同步节点 如何 ...

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

    现实生活中的使用场景 几个摄影师朋友找到你, 他们的摄影作品上传到自己的blog后总是被其他人盗用, 使用水印之类的方法也无法避免像截取部分这种情况, 他们需要一个能证明摄影作品最早是由 自己上传.而 ...

  3. 开奖名单公布!百度超级链专属好礼有你一份,速戳!

    11月8日,我们向大家隆重推荐了由机械工业出版社出版的<区块链技术与实践>教材,并发起了一场限时赠书活动. 原文链接:想学区块链不知从何入手?百度超级链推荐这本硬核教材! 微信后台一时被大 ...

  4. 百度超级链作为专班核心成员 参与北京市政务区块链顶层设计

    关于微信公众号[百度超级链] 回复关键字[蓝皮书]下载蓝皮书全文 为加快推动区块链技术和产业创新发展,北京市政务服务管理局.北京市科委.北京市经济和信息化局组织相关单位推进政务服务领域区块链应用建设, ...

  5. 百度超级链的安装与示例合约的部署调用

    文章目录 一.环境准备 1. 安装golang-1.16.x 二. 安装百度超级链 2.1 下载百度超级链的源码,本次使用v3.6版本 2.2 基本的命令 三.超级链编译c++合约,需要docker容 ...

  6. 百度超级链捐赠开放原子开源基金会一周年,XuperChain成果一览

    摘要 2020年9月9日,开放原子开源基金会正式与百度完成了超级链内核项目捐赠协议的签署,这一捐赠协议意味着百度自主研发的超级链技术将依托于开源基金会以全新的组织形态进行运作.此项目作为开源基金会区块 ...

  7. 开启合同签署新方式!百度超级链推出区块链智能签约服务

    近日,百度超级链与联合信任时间戳服务中心共同推出区块链智能签约服务,实现纸质合同.电子合同,再到区块链合同的革命性跃升,强强联合让签约更安全.效率更高.方式更丰富.电子签约服务同时叠加百度人工智能等能 ...

  8. 又一金融级应用落地!百度超级链联合百信银行落地百度收银台商户清算方案

    区块链在金融行业的科技化升级中扮演举足轻重的作用.基于区块链技术防篡改.可追溯等特性,百度超级链联合百信银行将其首先落地于百度收银台商户清算业务中.早在2017年,百度超级链在资产证券化等领域已经开展 ...

  9. 百度超级链新专利曝光,降低隐私数据权限管理难度

    年初,多家媒体报道百度公开了一项名为"区块链的隐私数据处理方法.装置.设备以及存储介质"的专利信息.该专利由百度超级链团队研发,旨在降低隐私数据权限管理的复杂度,可广泛用于云计算和 ...

最新文章

  1. Cytoscape制作带bar图和pie图节点的网络图
  2. Spark源码分析 – SparkEnv
  3. puppeteer(headless chrome)实现网站登录
  4. boost::contract模块实现name list名单的测试程序
  5. 什么叫内部银团_什么是紫钛晶?紫钛晶是不是天然水晶?
  6. 【图论】【并查集】矩形(ssl 1222)
  7. 相似邻里算法_纽约市-邻里之战
  8. 85后博士不到一年发10篇顶刊!共发SCI50多篇
  9. 第二章 系统设置及基本操作
  10. maven 学习笔记--仓库,聚合和继承,私服搭建
  11. mysql中phpmyadmin安装教程_phpMyAdmin 安装教程全攻略
  12. string 转 byte_计算机毕业设计中java实现在线预览poi实现word、excel、ppt转html
  13. 拓端tecdat|把握出租车行驶的数据脉搏 :出租车轨迹数据给你答案!
  14. No package ‘dconf‘ found
  15. 详解python输出语句print
  16. 如何使用SqlLoader导入数据
  17. python进阶太难_Python进阶
  18. 无法访问计算机0x80070035,在win7中访问本地网络上的共享文件时错误0x80070035的解决方案...
  19. 火山安卓解析某盘直连
  20. 笔记本开机循环显示:this product is covered by one or more of the following patents 解决办法

热门文章

  1. OSChina 周日乱弹 —— 七哥的北漂日记
  2. geoserver rest 导入shape文件错误
  3. 怎么用class覆盖style样式
  4. 统计数据:Google排名高的是什么样的页面?
  5. background-origin:规定 background-position 属性相对于什么位置来定位
  6. 我的考研~~~3-4月份总结
  7. 3-3 编程练习:jQuery键盘事件案例
  8. JavaScript内存管理
  9. GDB 调试 Mysql 实战(一)源码编译安装
  10. 使用 Moq 测试.NET Core 应用 -- Mock 方法