讨厌的SBD零头不见啦——HF21/22中已经修复了SBD 发行率的BUG

在硬叉20(HF20)时,关于SBD_PRINT_RATE有一个小BUG,导致无论SBD的占比有多高,SBD_PRINT_RATE也不会到达0%,当SBD占比无限趋于10%时,SBD_PRINT_RATE值为1%。


(图源 :pexels.com)

虽然这个小BUG无伤大雅,但是当发放文章奖励时,看着那个0.00x SBD的零头被每天发放,对强迫症而言还是比较闹心的。

好消息是,HF21/HF22之后,尽管SBD的占比还是无限趋近10%,但是SBD_PRINT_RATE已经变成了0,所以我们的文章奖励中看不到那些SBD零头啦。

代码

那么这个小BUG是如何被修复的呢?我特意去查了一下代码:

计算SBD_PRINT_RATE的关键,在于计算SBD的占比,HF21/22中,计算SBD的代码如下:

percent_sbd = uint16_t( ( ( fc::uint128_t( ( dgp.current_sbd_supply * get_feed_history().current_median_history ).amount.value ) * STEEM_100_PERCENT + dgp.virtual_supply.amount.value/2 ) / dgp.virtual_supply.amount.value ).to_uint64() );

逻辑差异

代码看起来有点乱,我抽取主要逻辑简化描述一下,HF21/22中,逻辑如下:

percent_sbd = int((sbd_steem*STEEM_100_PERCENT + virtual_supply/2)/ virtual_supply)

而在之前硬分叉版本中(HF20等),逻辑如下:

percent_sbd = int((sbd_steem*STEEM_100_PERCENT)/ virtual_supply)

其中STEEM_100_PERCENT的值为10000

#define STEEM_100_PERCENT 10000

也就是说,SBD的占比计算:

  • HF21之前是折算成STEEM的SBD占总供应量的比例乘以10000
  • 现在则是在上述数值基础上加上0.5

按照之前的计算方式,尽管实际比例无限趋近于10%(1000),但是由于喂价机制以及取整的缘故,这个值都不可能等于10%(1000),所以导致了SBD_PRINT_RATE最低值只能是1%,而不可能是0%。

而现在,当实际比例趋近于10%(9.995%)时,因为加上了0.005%(0.5/10000),所以计算出来percent_sbd为10%,就保证了SBD_PRINT_RATE为零。

模拟验证

让我们模拟HF20以及HF21/22的机制分别实际计算一下SBD的占比。

HF20

HF21/22

可见按照新机制计算的结果会去掉SBD_PRINT_RATE中的毛刺,对用户更加友好。更多详情,请参考文末链接吧。

相关链接


Vote For Me As Witness
https://steemit.com/~witnesses type in oflyhigh and click VOTE

Vote @oflyhigh via Steemconnect
Thank you!

This page is synchronized from the post: ‘讨厌的SBD零头不见啦——HF21/22中已经修复了SBD 发行率的BUG’

继续发世博园的照片

继续分享世博园的照片。

世博园之美,在于每一处景致都不相同,往往转个拐角,就会看到不同风光,厌倦了山水田园,又可以看看亭台楼阁。

有句诗为:

舟行碧波上,人在画中游。

但是在世博园里观光,尽管没有泛舟碧波,但是真的是人在画中游啊。



Vote For Me As Witness
https://steemit.com/~witnesses type in oflyhigh and click VOTE

Vote @oflyhigh via Steemconnect
Thank you!

This page is synchronized from the post: ‘继续发世博园的照片’

每天进步一点点:PHP POST以及设置Header的一点探索

最近写个PHP脚本,POST一些数据给指定脚本,并且需要设置Header。

但是设置的Header不生效,为了搞明白到底哪里出了问题,做了一点学习,记录如下,备忘并供遇到同样问题的朋友参考。


(图源 :pixabay)

回显Header

为了测试我设置成Header是否成功发送,我需要一个脚本来回显Header设置,经过学习,我发现PHP自带一个函数getallheaders(),使用这个函数可以轻易获取Header信息。

简单的示例脚本如下:

1
2
3
4
5
6
<?php
foreach (getallheaders() as $name => $value) {
echo "$name: $value
";
}
?>

让我们来测试一下,浏览器直接访问上述脚本,返回如下内容:

可见上述代码工作良好,可以作为我们的测试辅助工具。

另外需要说明的是getallheaders()其实是apache_request_headers()的别名,两者是一样的。

发送Header

我使用PHP的curl 函数来完成POST。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$ch = curl_init();

$url = "http://serviceuptime.net/header_echo.php";
$headers = "Accept-Encoding: gzip, deflate";
$data = "Hello!";

curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

$resp= curl_exec($ch);
print_r($resp);
?>

代码如上所示,但是执行上述代码后,返回代码中并没有含有我们设置的内容:

那么哪里出错了呢?通过查看curl_setopt(),我发现传递给CURLOPT_HTTPHEADER选项的,应该是一个数组:

所以上述代码中,正确的写法应为:

$headers = array("Accept-Encoding: gzip, deflate");

再进行测试后,果然返回了我要的结果,证明Header设置成功了。

另外,既然是array,就可以设置多条Header了,这恰恰说明我们之前直接传入字符串的方法是错误的。

示例代码仅供参考

相关链接


Vote For Me As Witness
https://steemit.com/~witnesses type in oflyhigh and click VOTE

Vote @oflyhigh via Steemconnect
Thank you!

This page is synchronized from the post: ‘每天进步一点点:PHP POST以及设置Header的一点探索’

吉野家的火锅

一直很喜欢吉野家的牛肉饭,吃了好多年还不觉得腻歪。

前段时间又发现吉野家的面条也不错,面条筋道,汤鲜味美,况且也有牛肉。

这次去吉野家,发现他家竟然还有小火锅,自己涮牛肉吃,再配一碗米饭,几个小菜,也不错的。



Vote For Me As Witness
https://steemit.com/~witnesses type in oflyhigh and click VOTE

Vote @oflyhigh via Steemconnect
Thank you!

This page is synchronized from the post: ‘吉野家的火锅’

现金 & 巨额跨行ATM提款费

在当前这个移动支付超级发达的时代,信用卡、微信、支付宝几乎可以覆盖所有的应用场景,现金的应用越来越少了,当然了,要除掉一种情况,那就是随份子。😀


(图源 :pexels.com)

其实随份子也可以使用网银转账或者微信红包之类的,十几年前(大概2007年)一个外地的同事结婚,我就用网银把我的礼金打了过去。

但是无论是网银还是微信支付宝、转账,都让人觉得不是那么郑重。只有人到现场,包一个真正的大红包,才让人觉得正式。

话说因为需要随份子,我决定去楼下的工行ATM取一笔现金,工行是距离我最近的银行,我的生活费都放在里边,偶尔需要的时候,就溜达过去取一些。

可是这次我溜达过去,爬上台阶,走到门口才惊觉,工行竟然没有开门。擦,这是咋回事,要知道工行的自主营业厅可是24小时营业的。仔细看了一圈,才在窗户上发现贴的告示:装修停业。

没办法,只好在走一段路,去边上的建行喽。可惜的是我没带建行的卡,只好用工行卡 在ATM中取款了。

去了两笔,每笔5000元,到家闲着无聊看了一下工行手机银行的收支记录,擦,竟然发现每笔被扣4元手续费,两笔整整8元啊。

好吧,取10000元,花了8元手续费,相当于千分之0.8,比支付宝或者微信千分之一的提现手续费还要便宜一些。

可是不过是再多走一些路找个工行网点就可以省掉这笔费用,那么这两笔跨行提款费,怎么看都是巨额啊,心疼中。


(图源 :pexels.com)

那么问题来了?换做是你,是愿意直接跨行取款,还是多走一些路程省掉这笔巨款呢?


Vote For Me As Witness
https://steemit.com/~witnesses type in oflyhigh and click VOTE

Vote @oflyhigh via Steemconnect
Thank you!

This page is synchronized from the post: ‘现金 & 巨额跨行ATM提款费’

升级本地EOS节点至v1.8.2

EOSv1.8.2 释出好些天了,修复了一些稳定性BUG,也做了一些其它修改,抽时间升级一下喽。

升级EOS

因为使用了-P参数,编译还是比较慢的,不过没办法,谁叫我手欠删掉了之前的环境呢。

不过还好,经过了漫长的36分钟55秒的等待,总算编译成功了。

编译之后检查一下版本号:

nodeos --version

返回如下信息,版本号v1.8.2,看来没搞错。

运行,直接替换掉原有的nodeos,并重启应用即可。好消息是从v1.8.1升级 到v1.8.2无需重新Replay。EOS Replay可不像STEEM,几个小时就可以完成,哪怕用较快的机器,没有个十天二十天那是不可能完成的。

EOS共识升级

EOS社区最近的热点大概是等共识协议升级(Consensus Protocol Upgrade)吧,其实共识协议升级,就是类似STEEM的硬分叉啦,换个叫法而已。

如果你想了解共识协议升级,可以参考一下以下链接:

1.8: Consensus Protocol Upgrade Process

关于共识升级的时间,EOS社区已经达成一致:2019-09-23T13:00:00.000,也就是北京时间2019年9月13日晚上9点钟

STEEM的这两次硬分叉(HF21,HF22)给大家带来了诸多不愉快的体验,EOS会如何呢?我想应该问题不大,毕竟EOSIO和EOS社区都那么有钱。

如果STEEM30一枚,想必HF21不会出问题吧?那么就不会这么快HF22了。

相关链接


Vote For Me As Witness
https://steemit.com/~witnesses type in oflyhigh and click VOTE

Vote @oflyhigh via Steemconnect
Thank you!

This page is synchronized from the post: ‘升级本地EOS节点至v1.8.2’

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×