尝试编译BitShares Core

都说纸上得来终觉浅,绝知此事要躬行,尽管看过好多大神的编译指南之类的,但是还有感觉有些迷糊,没办法,不亲自操作一下,理解的难免不深刻。怎么形容呢,就好比学数学不做习题,学编程不上机。所以今天就上机操作一下。

系统要求

在@abit的 《BTS交易所对接指南(单节点版)》中提到,系统的最小要求为:

独立服务器或者VPS
8G 内存(更多更好)
50G 硬盘

所以我去Linode选了如下VPS

看起来应该符合要求

官方推荐的系统为:Ubuntu 16.04 LTS,听人劝吃饱饭,那就用Ubuntu 16.04 LTS好了。
内核版本为4.14.14,据说打完Meltdown补丁了😳

准备工作

更新系统软件包

首先更新了一下系统上的软件包
sudo apt-get update
sudo apt-get upgrade

安装依赖

安装必要的依赖
sudo apt-get install autoconf cmake git libboost-all-dev libssl-dev g++ libcurl4-openssl-dev

编译

检出代码并编译

1
2
3
4
5
6
7
8
git clone https://github.com/bitshares/bitshares-core.git
cd bitshares-core
git checkout <LATEST_RELEASE_TAG>
git submodule update --init --recursive
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make witness_node cli_wallet

上述指令中,需要将<LATEST_RELEASE_TAG>替换成最新发布版本号,撰写本文时,为2.0.171212

编译结果

经过漫长的等待(约1一个半小时),编译总算完成了。这个时间应该取决于硬件配置。

编译完成后我们得到两个程序

  • build/programs/witness_node/witness_node
  • build/programs/cli_wallet/cli_wallet

为了方便,我把它俩复制到~/programs 目录下。

时间校准

因为广播交易什么的都和时间有关,所以必须保证时间正确,否则一切免谈。

大神推荐如下方法:
sudo timedatectl set-ntp false
sudo apt-get install ntp

我看了一下,系统上已经启动了一个systemd-timesyncd进程,由timedatectl指令控制,也是用于时间同步的,大神的做法是关掉这个,启用ntp。

我测试一下,貌似这个东东应该可以用,那就先用着好了,出问题的时候再换其它方法。

来试试看:timedatectl

其它

本来想再做做其它尝试,结果我到VPS的连接掉线了。为什么会掉线呢,当然是Party 妈妈怕我们受到资本主义那么腐朽的东西的毒害。其实我真的就是ssh登陆,没用来做ssh隧道,冤枉死我了。

不过既然Party 妈妈让我休息休息,那就先写到这里好了,晚上再说吧。

参考链接


This page is synchronized from the post: 尝试编译BitShares Core

加密货币兴起滋生了新的罪恶?

几天前,一个客户找到我,说他们的服务器被黑了,chrome浏览器访问他们站点,会弹出安全提示,说网页包含恶意脚本。


(图源 :pixabay)

按我以往的经历,网站被报病毒,大部分是站点上的软件打包时使用的加壳软件,或者软件好多年没有更新。我来扫一下哪个出的问题,就可以针对性解决了,于是我用 https://www.virustotal.com/ 扫了一下他们站点,virustotal包含很多反病毒引擎,可以扫描文件或者网页,看看都有哪些引擎报病毒,但是virustotal扫下来,66个引擎无一报病毒。

这就尴尬了,最终还是客户从chrome的提示信息那找到是Norton的引擎报的错,我一看virustotal,Norton呢? 赛门铁克呢?我明明记得这里边含这个引擎的啊。看来果然是人老了跟不上变化了。

于是转战到Norton的站点:https://safeweb.norton.com,拿来一扫,果然一堆的恶意脚本,插到客户站点的PHP文件内。你猜这些脚本是干啥的?***当用户访问客户站点时,这些脚本用用户的浏览器资源挖矿!*** 而用户的站点人气极其旺盛,每月流量都是几十万G,日均访问量几十万独立IP的,这么多客户被用来挖矿,这有多恐怖吧?

虽然知道了中招,但是我们却不知道如何中的招,对比分析出恶意脚本的代码以后,我查找了一些同服务器上其它站点,并未发现中招的现象,所以初步断定至少黑客还没拿到root权限。

至于从哪攻进客户站点的,原本懒得判断了。他们公司很多有有账户权限,站点密码好多人有,站点脚本也常存在一些漏洞。无外乎脚本漏洞、密码泄露、本地电脑中病毒之类的。但是出于安全我还是更新了一下服务器的内核,升级了各种软件。

然后和客户一起把站点数据回滚12月1日,这期间备份的数据可能有毒。站点数据多达几十G,弄了好久才恢复完成。然后客户再自己用本地洁净的PHP页面去覆盖,以便保留最近的更改。

等待数据恢复的期间,我查了一下日志,居然一下子就找到元凶了。一个上海的IP用客户站点的用户名密码不停的下载数据并上传感染后的文件。对比一下几次操作日期,恰恰是用户站点发现中招的时间。


(图源 :pixabay)

剩下的就不用我管了,让他们自己本地查病毒或者查内鬼去吧。不过,归根结底,都是加密货币惹的祸啊。


This page is synchronized from the post: 加密货币兴起滋生了新的罪恶?

中招了!新手机(Samsung Galaxy S8)有毛病!

约十天以前不是换个了新手机嘛,原本想着,咋也算三星的旗舰产品,又是从数一数二的大电商京东购入,不应该有什么问题。


(图源 :pixabay)

但是用了几天之后,总觉得不舒服,比如说聊一会微信就眼睛发涨头晕晕。之前以为是曲面屏的缘故,毕竟以前看得屏幕都是平面,突然变曲面了肯定不适应。但是强制自己适应了这么多天之后,我发现自己还是适应不了。于是我就想,是不是我自己的这部手机有什么问题呢?

我仔细观察了一番之后,得出一个令人郁闷的结论,这个手机屏幕有问题!为了证实我的判断属实,我在夜里拍摄了一下手机屏幕,果然有横纹在屏幕上滚来滚去,难怪我觉得慌得慌。这就是5000大洋的旗舰机?如果这样,会给我视力造成极大的伤害,我也不敢时常去看,那还不如买个200以内的老人机呢。


屏幕上横纹明显,滚来滚去。


和其它品牌便宜手机对比一下,虽然便宜,人家屏幕没横纹啊。


把便宜手机屏幕调亮一些,也很正常。三星啊、S8啊,也太不争气了。


原本计划换个手机,聊微信啥的能快一些,提升一些效率。结果换的不是手机,是垃圾,效率也没提升,倒是添堵。


在京东申请了售后,已经过了7天包退的时限,只好选择换机了。但愿他们别再给我添堵了,快点处理别生波澜,哎。

到底是我运气不好,还是三星出厂质检不严格,抑或是我买到的其实是一个翻新的二手货?我已然懒得吐槽了。


This page is synchronized from the post: 中招了!新手机(Samsung Galaxy S8)有毛病!

如何从steem transaction 获取txid?

前些天大神 @xeroc 发了个帖子 python-bitshares: How to derive transaction ids,让我对bitshares的txid有了更深入的了解。于是我就想相同的问题放到STEEM上会是如何呢?

python-bitshares 生成transaction_id

@xeroc 大神修改了python-graphenelib库,给Signed_Transaction类添加了一个新属性: id,而python-bitsharesSigned_Transaction类继承了python-graphenelibSigned_Transaction类。

也就是下边两句:
from graphenebase.signedtransactions import Signed_Transaction as GrapheneSigned_Transaction

class Signed_Transaction(GrapheneSigned_Transaction)

我们再来看看属性id如何实现:

也就是说,将Signed_Transaction的签名部分清空,序列号后生成摘要,取摘要的前20个字节,并转换成16禁止字符串形式(40个字节)。

STEEM 生成transaction_id

STEEM和Bitshares是一奶同胞啦,python-steem的前身piston也是 @xeroc 大神开发的。所以在python-steem上实现类似功能非常简单。

1
2
3
4
5
6
7
8
9
10
11
import hashlib
from binascii import hexlify
from steem import Steem
from steembase.transactions import SignedTransaction

steem = Steem()
block = steem.get_block(10000000)
tx = SignedTransaction(**block["transactions"][2])
tx.data.pop("signatures", None)
h = hashlib.sha256(bytes(tx)).digest()
print(hexlify(h[:20]).decode("ascii"))

上述示例代码将计算出STEEM区块链上第10000000 中第3笔transaction的txid。
(transaction编号从零开始)

结果为:

9f48f63edfd40e72ac6c9635dcdcad9d742e5d1c

STEEM 生成transaction_id 方法2

你是不是觉得上述方法很简单了?其实还有更简单的办法

1
2
3
4
5
from steem import Steem
steem = Steem()
block = steem.get_block(10000000)
txid = block['transaction_ids'][2]
print(txid)

结果为:

9f48f63edfd40e72ac6c9635dcdcad9d742e5d1c

完全一样,有木有,但是代码简单了好多有木有?

为什么?

既然获取txid如此简单,为何大神还要费此周折?答案在于steem区块链的get_block返回了transaction_ids列表,比如区块:10000000


排列顺序和transaction列表顺序完全一致,所以直接拿出来即可。

而bitshares区块链的get_block不返回上述信息,如果需要,只好自己计算哦。

不过读读 @xeroc 大神的代码,了解了一下 txid的生成机制,还是受益匪浅的。

参考链接


This page is synchronized from the post: 如何从steem transaction 获取txid?

淘金这事,我也干过(七) ——终篇:繁华落尽

之前用了六篇文章介绍当年曾一度繁华的黄金市场。借着政策的东风,眼光长远的、早些行动起来的一批人,都在这个市场赚得盆满钵满,聪明的莆田人就更不说了,凭借敏锐的嗅觉,在这个市场杀了三进三出,然后摇身一变,变成高端的黄金珠宝商,在国内很多大城市落地扎根。本地的一些投资者也藉此变成了暴发户。

彼时“万元户”这个颇具时代特色的词汇依然热度未消,但是百万富翁、千万富翁已经比比皆是。随着人们的富有,各种罪恶就随之滋生起来。


(图源 :pixabay)

色情行业

富豪们多了,仅仅是金钱已经满足不了他们的需求了,于是色情行业就应运而生。

高端一点的在略隐蔽的地段开设大酒店,你要因为大酒店是喝酒的地方,就大错特错了,尽管我从未踏足过大酒店内。不过终归是小地方,除了外来户,左右都是熟人,当时最大的酒店老总的儿子是我好友,于是得知一些旁人不知道的内幕。所谓酒店,就是暴发户们消遣的地方罢了,当然消遣的具体方式我这这种纯洁的少年是不懂的。

除了好友时不时的爆料,酒店里神仙一样的姐姐们也经常出来逛街。看着那些青春洋溢、穿着暴露、面孔清纯的女子,我时常替她们感到惋惜,为什么不去影视圈发展呢?直至长大我才知晓,影视圈可能更脏更乱。

因为市场发达,来了不少外来人口,当然不可能个个都混成大老板。但是不止是大老板才有色心,于是一些按摩屋也如雨后春笋般冒了出来,不过是几个头牌几个隔断几张床。说是头牌,但和酒店里的小姐姐比起来差的不止是一筹。


(图源 :pixabay)

黑X涩X会

一个行业有暴利,当然就会产生利益之争,于是拉帮结派,黑X涩X会就出现了。其实黑X涩X会早早就存在,只不过之前忙于别的暴利行业,直到黄金市场的崛起,他们当然不能放过这块肥肉了。

黑X涩X会分不同的帮派,彼此之间常起冲突,最精彩的一次,双方两队吉普,驾着枪支对峙。我心底万分期望他们火拼起来,免费看一场精彩的大片。但是双方老大最后看彼此实力相当,闹下去可能两败俱伤最后被别人渔翁得利,最终居然握手言和,让我不胜失望。

表面上握手言和,暗地里依然风起云涌,当地有两个巨大的黑X涩X会头目都未得善终。其中一个被人暗杀,我观摩了他的葬礼,数以千计的黑西装戴墨镜的男子一起挤到一个广场上祭拜的场面还是很惊人的。电视上虽然没少看过类似场面,但是不如身临其境来得震撼。

不过后来民间传言,其中一黑X涩X会头目为诈死,真身早已洗白去了美国。不过这个黑X涩X会头目我还真不熟,具体啥情况一直扑朔迷离。


(图源 :pixabay)

枪支

彼时经过了好几轮的严打和缴枪,当时私人手里的枪支已经相对少了不少。但是略有身家的家庭有几把枪还是稀疏平常的事情。步枪、机枪、甚至一发子弹能摧毁一辆汽车的重型枪械都不少见。

彼时想要拥有枪支,总会有一些渠道搞到,当然了,有些人是防身,有些人则是武力威慑。一般两伙人打架,没有枪械上阵,都好不意思叫打架。当然了,尽管枪支泛滥,但是实际上据我所知并未闹出多少人命,毕竟你有我有全都有,谁怕谁呀。


(图源 :pixabay)

毒品

这么多有钱人,钱多的没地方花,有的出门溜达都带几个持枪保镖,那么毒品怎么可以缺席呢。彼时没有冰毒啊、摇头丸之类的新兴毒品,就是4号海洛因,如果我记忆没产生偏差的话,那么彼时是400左右大洋一克,对于当地土豪而言,这个价格就俩字:便宜!

毒贩子们当然不会宣传毒品有多大危害,而是把它包装成时尚、新潮、高端、上档次的东西,于是很多人纷纷沦陷,我一朋友和我聊天说别人请她吸毒,我很惊讶,问她吸了吗?她说别人请的,不吸白不吸啊。

染上毒品成了瘾君子,再想戒掉,几乎是没有可能了。据说当时一女警官,为了挽救吸毒的丈夫,不惜以身试毒,要藉此告诉丈夫毒品是可以戒掉的,然后一段时间后,女警官染上毒瘾根本没法戒除,从高楼上一跃而下。

当年的资深瘾君子,基本上全牺牲了,不过也有个别的活到现在,为啥活到现在,难道是戒毒成功了,当然不是。真相是从富豪变成了穷鬼,没钱吸毒了!不过毒瘾来的时候,到处挨家求施舍点钱,无论亲朋都避若蛇蝎。

治安

回想起来,我当年用蛇皮袋背着十几万现金满街逛荡,没被抢劫,真的是幸运光环笼罩。

金店兴起后,政府为了安全,金店临近关门时可以将黄金送到银行保险箱中免费保管,这一直未出什么纰漏。直到有一天某金店快歇业时,来了俩顾客购买金饰,然后趁老板不注意将老板用锤子🔨(额,怎么又是锤子)残忍地杀害,卷走所有的金饰品。这一案件一时间导致所有的金店风声鹤唳、草木皆兵,后来公安局派人不间断巡逻,才把这个事件的不良影响压了下来。

抢金店是事情似乎以后没发生过,但是抢富商的事情层出不穷。


(图源 :pixabay)

尾声

随着各路投资者的不断涌入,像之前十倍或者几倍暴利的情况已然不复存在。而很多富豪在成为暴发户后未能把持住自己,被色情或者毒品所毒害,最终下场凄惨,让人不胜喟叹。

而随着政策的开放,全国各大城市金店之类的遍地涌现,我们的黄金市场作为黄金集散地的地位已然不复存在,有眼光的富商们已经杀出重围,在全国各地建立根据地。而保守者则继续经营着那一亩三分地,守着已然不复存在的荣光。


全文终,感谢阅读

相关链接


This page is synchronized from the post: 淘金这事,我也干过(七) ——终篇:繁华落尽

How to: 如何计算用户可用带宽 / How to calculate the user's available bandwidth?

继续昨天有意思的话题,在前文中,我们总算研究明白了如何计算全网的总带宽/max_virtual_bandwidth,但是正如我在那篇文章开头介绍的,我的目的是为了计算用户可用带宽百分比。那么接下来我们就要研究一下如何计算可用带宽以及百分比。


(图源 :pixabay)

用户分配带宽

前文中我们贴出了用户可用带宽的计算方式:

变换后的公式为:
用户分配带宽 = account_vshares / total_vshares* max_virtual_bandwidth

这里边最麻烦的是max_virtual_bandwidth,我们已经在上文搞定了,所以计算用户分配到的带宽没有什么难度。

用户平均带宽

这篇文章中我们分析过平均带宽的概念



你可能说了,我好多天没发帖,发了一个帖子占用 5K Bandwidth,别人每天发帖,每个帖子占用1K,那怎么衡量谁占的多啊,谁占的少啊?

很好的问题,STEEM为了防止这种情况,引入了平均带宽Average Bandwidth的概念。
Average Bandwidth 以7天为时间窗

计算的方式为:
(7天 - 距离上次操作的时间)*之前的Average Bandwidth/7天 + 本次操作Bandwidth
(如果距离上次操作时间 > 7天,则新的Average Bandwidth 为 本次操作Bandwidth)

代码:

所以为了计算用户的平均带宽,除了代码中那些常量,我们还需要知道上次带宽更新的时间以及用户之前的平均带宽

也就是类似如下信息:
'average_bandwidth': '117344254786',
'last_bandwidth_update': '2018-01-25T10:35:06',

这有点像voting power, 我们可以用get_account()读出voting power,但是这个值不是实时的,我们需要用当前时间以及上次计算的时间去修正这个值。

用户可用带宽

知道用户分配的带宽以及用户平均带宽之后,那么可用带宽就容易计算了
用户可用带宽 = 用户分配的带宽 - 用户平均带宽

带宽百分比计算也很容易啦:
用户可用带宽 / 用户分配的带宽 100%*

带宽变换成字节数

上述计算可用带宽还是平均带宽都是一个很大的数值,你可能会好奇,这个值具体是啥意思呢?如果转换成字节应该会比较明了了。

这涉及到另外一个参数STEEMIT_BANDWIDTH_PRECISION,把我们得到数值除以这个精度就是字节数啦。

至此,我们可以拿到和带宽相关的所有数据啦。

测试一下,我的可用带宽充裕着呢

总结

好像也没啥需要总结的,大概需要记住以下亮点吧

  • 用户average_bandwidth需要用时间去修正
  • 带宽除以STEEMIT_BANDWIDTH_PRECISION可以得到带宽的字节数表示

另外,有人问我: 可用带宽如何才能充裕?答案就是充值STEEM POWER.

相关链接


This page is synchronized from the post: How to: 如何计算用户可用带宽 / How to calculate the user’’s available bandwidth?

Your browser is out-of-date!

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

×