想起一首老歌 / 繁华过后成一梦

昨晚为了避免BTS爆仓,通过增加抵押物的方式调高了抵押率。


(图源 :pixabay)

安(zhan)安(zhan)稳(jing)稳(jing)睡了不到4个小时,起床一看,价格已经跌至1.6X,距离爆仓一步之遥。

而临睡前,这个价格还在2.1元以上。

谢天谢地,爆仓价是按喂价为基准的,不然也许我一刷资产余额,就会看到令人悲伤的信息。不过看着好多朋友被爆掉,依旧莫名的伤感。

昨晚在抵押率排行榜中,我排969名,我前边有1.75亿人民币的抵押债仓

今早再看,不过区区几个小时,我的排名上升至634名,前边只剩1.38亿人民币的抵押债仓。

也就是说,排除调整抵押率、或者平仓的朋友,我有300名以上的战友被爆了,他们用多达3700万的资金,为我挡住了空军的第一轮轰炸

当然,爆仓并不总意味着亏损或者失败,假设我6元的时候被爆掉,回头再看,岂不是爽歪歪?但是不受控制的爆仓总归很让人难受和郁闷的。

莫名地,脑海里回荡起一首老歌:

山川载不动太多悲哀
岁月禁不起太长的等待
春花最爱向风中摇摆
黄沙偏要将痴和怨掩埋
一世的聪明情愿糊涂
一身的遭遇向谁诉
爱到不能爱聚到终须散
繁华过后成一梦啊
海水永不干天也望不穿
红尘一笑和你共徘徊

回想起BTS六元,我BTS账户价值逾百万,再看看现在估值变成20多万,在想想昨晚为我抵挡子弹的战友,这真是繁华过后成一梦啊


(图源 :pixabay)

想到两天前还说一入币圈深似海,现在我却只想打电话给我的朋友,至少给我保留个程序员的岗位,以后可能靠这个吃饭了。

不写了,继续听歌……


本文不构成任何投资建议
在此郑重地提示大家:币市有风险,投资需谨慎


This page is synchronized from the post: 想起一首老歌 / 繁华过后成一梦

为了避免爆仓,我决定调高抵押率了 / 币市有风险,投资需谨慎

在18天以前,我给自己发了笔年终奖,其实就是用bitshares的借贷功能借出来12W人民币啦。彼时BTS的价格为3.5343,期间涨涨跌跌,但是很少有低于3元的情况,今早价格还曾一度攀爬至3.8以上,似乎真的应了那句话:凭自己本领借的钱,为什么要还?


(图源 :pixabay)

然而,谁曾想风波骤起、大浪滔天,各路虚拟币纷纷跳水,大BTS也不甘示弱,一度跌到2元。按说作为个佛系炒币者,涨涨跌跌应该与我无关才对,但是谁让我手贱借钱了呢。

我的爆仓触发价是1.75,也就是说我今天观测到的最低价,一度离我的爆仓触发价如此贴近。哦,爆仓触发价其实是喂价,不过其实差不多啦,总之是距离爆仓一步之遥,这让我如何安稳?

我个人还是看好BTS的,相信回到5元、6元,乃至上到8元10元都有可能,可一旦爆仓,都将成为梦幻泡影。为了避免这种尴尬的状况,我决定调低我的爆仓触发价了。

调低爆仓触发价有两种方案:

  • 归还部分人民币
  • 增加抵押物(亦即BTS)

人民币都被我买狗狗和BTO了,只好用BTS填坑了。

调整以前:

增加1W BTS的抵押物:

确认调整:

看了一下抵押率排行榜:

当前我排在969位,也就是说,前边有968个大户再为我遮风挡雨,想必,至少短时间内,我还是安全的吧。

看了一下资金量,在我之前,一共有1.75亿CNY的抵押债仓。

而BTS内盘最近24小时的交易量为3.38亿,但是可能有频繁的买入卖出操作,所以要一天消化掉1.75亿的抵押债仓,还是略有难度吧。

哎,其实还是很危险,不过姑且这样吧。欠的,终究还是要还的


顺便说一下,我0.135买入的狗狗,已经跌成狗了,好在我当初发的只是个娱乐贴,如果你听信我的话,买入了狗狗,那么我只能陪你一起哭了。我是不会告诉你,我1毛多又果断补了几万枚狗狗😭

或许萌蛋早已看穿了一切😭

相关链接


本文不构成任何投资建议
在此郑重地提示大家:币市有风险,投资需谨慎

This page is synchronized from the post: 为了避免爆仓,我决定调高抵押率了 / 币市有风险,投资需谨慎

ecdsa学习笔记 / SigningKey、VerifyingKey以及公钥

在我们上一篇文章对比一下ecdsa与secp256k1-py从私钥生成公钥中,我们介绍了由私钥通过ecdsa以及secp256k1-py生成公钥的代码。

其中ecdsa生成公钥的代码是我从steem-python库中扒出来的,咳咳,一直挺好用的,我也就懒得看它具体是咋做的啦。


(图源 :pixabay)

ecdsa 生成校验Key(VerifyingKey)

但是今天看ecdsa,发现从签名Key(SigningKey)生成校验Key(VerifyingKey)还是很方便的。比如拿我们之前用Hello World生成的私钥,那么生成校验Key(VerifyingKey)的代码如下:

1
2
3
4
5
6
import ecdsa
from binascii import hexlify, unhexlify
secret = 'a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e'
sk = ecdsa.SigningKey.from_string(unhexlify(secret), curve=ecdsa.SECP256k1)
vk = sk.get_verifying_key()
print(hexlify(vk.to_string()).decode())

以字符串形式输入如下:

98c39ac0d91ff4cea6e79ae5836e50868c47191bca0fbfd2a6838d303665f506ad0a9ccb60c7758ce4c2759b8f7b0f731f0d8d90caf3778c4a65a0c53cf94210

对比公钥压缩流程,可知

ecdsa输出的字符串就是把x, y串接到一起。

也就是说,如果vk.to_string()加上个参数format,分别是raw、compressed、uncompressed比较易于理解了。

ecdsa 生成公钥

知道了上述事实,在看我们之前使用ecdsa生成公钥的代码,就觉得可读性太差了。

1
2
3
4
5
6
7
8
9
10
11
import ecdsa
from binascii import hexlify, unhexlify
secret = unhexlify('a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e')
order = ecdsa.SigningKey.from_string(secret, curve=ecdsa.SECP256k1).curve.generator.order()
p = ecdsa.SigningKey.from_string(secret, curve=ecdsa.SECP256k1).verifying_key.pubkey.point
x_str = ecdsa.util.number_to_string(p.x(), order)
y_str = ecdsa.util.number_to_string(p.y(), order)
compressed = hexlify(bytes(chr(2 + (p.y() & 1)), 'ascii') + x_str).decode('ascii')
uncompressed = hexlify(bytes(chr(4), 'ascii') + x_str + y_str).decode('ascii')
print(compressed)
print(uncompressed)

为了生成公钥,我们需要知道以下要素:

  • SigningKey: 可由私钥生成
  • order: 由我们指定的曲线生成
  • p:公钥点

那么我们把上述代码改进为更加便于阅读的方式:

1
2
3
import ecdsa
from binascii import hexlify, unhexlify
secret = unhexlify('a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e')

导入必要的库以及指定私钥

1
2
sk = ecdsa.SigningKey.from_string(unhexlify(secret), curve=ecdsa.SECP256k1)
vk = sk.get_verifying_key()

由私钥生成SigningKey,并进而生成VerifyingKey

1
2
order = ecdsa.SECP256k1.generator.order()
p = vk.pubkey.point

取出order和p (order还可以从order = vk.pubkey.order语句获得)

1
2
x_str = ecdsa.util.number_to_string(p.x(), order)
y_str = ecdsa.util.number_to_string(p.y(), order)

生成点p的x和y

剩下的就和我们之前的代码没什么区别了。

由VerifyingKey生成的字符串生成公钥

在文章开头,我们用

print(hexlify(vk.to_string()).decode())
生成了VerifyingKey的字符串表示,也就是x_str+y_str

那么能否从这个字符串生成公钥呢?

一种方式是从字符串生成VerifyingKey,再用我们上述方法生成公钥。

而另外一种方式是直接将字符串拆分成x部和y部
vk_b = unhexlify(vk_str)
xs = vk_b[:ecdsa.SECP256k1.baselen]
ys = vk_b[ecdsa.SECP256k1.baselen:]

剩下的步骤就不用多说啦。

结论

Python ECDSA是 ECDSA的纯Python实现,尽管速度要慢一些(相比ECDSA的C++实现),但是还是相当好玩的。

相关文章


This page is synchronized from the post: ecdsa学习笔记 / SigningKey、VerifyingKey以及公钥

真理还是谎言: 声望分越高对别人声望分影响越大吗?/ 代码&测试:到底什么影响声望分的增加?

最近有些朋友问我,声望分越高的人给别人点赞,对方的声望分增加的越快吗?其实我直观的感受不是这样的,而是有效SP越多的给别人点赞,对别人的声望分影响越大。

但是直观的感觉有时候可能会得出错误的结论,自己凭感觉做事到无所谓了,但是如果给他人造成误导,就不妥了。恰巧,我对声望分如何增加以及都受哪写因素影响,一直不甚清楚,那么就这个机会调查一下,帮别人也是帮自己答疑解惑吧。


(图源 :pixabay)

声望分与声望数值

在五个多月以前,我曾经做过一组图形,来展示了一下声望分升级曲线。比如说以下两幅图形:


图一: 声望分-20到70 / Reputation Score -20 to 70


图二: 声望分25到60 / Reputation Score 25 to 60

从这些图形中我们不难得出结论:

  • 声望分以25为中心,对称分布的
    Reputation score using 25 as the axis, symmetrically distributed.

  • 声望分越高,提升越困难
    The higher the reputation score, the more difficult to raise it up.

但是,上述分析其实只是reputation scorereputation数值的关系,换句话说是把原本线性变化的数值变成了对数变化的分值

真正影响你声望分(分值)变化的是reputation这个数值,而上述分析中,我们没能体现出来这个数值是如何变化的。为了搞懂这个数值很什么有关系,我尝试去代码找到答案并做了一些测试。

代码

调整reputation的代码位于这个文件中,其中相关的代码如下:

影响声望数值的原则

从注释和代码中我们不难看到以下原则:

  • 点赞者声望数值为负不会对他人声望分产生影响
    if( voter_rep != rep_idx.end() && voter_rep->reputation < 0 ) return;
  • 声望数值比作者声望数值低,差评没有影响
    • 作者尚无声望数值
      if( cv->rshares < 0 && !( voter_rep != rep_idx.end() && voter_rep->reputation > 0 )) return;
    • 作者已有声望数值
      if( cv->rshares < 0 && !( voter_rep != rep_idx.end() && voter_rep->reputation > author_rep->reputation ) ) return;

什么影响声望数值

那么去掉以上对声望数值没影响的情况,什么会对声望数值产生影响呢?我们再来看代码:

  • 作者尚无声望数值

  • 作者已有声望数值

也就是说,影响声望数值的唯一因素就是投票产生的rshares.

说到rshares,我们在前边文章中不止一次讲过,除了区块链本身一些因素,rshares只跟投票者的有效SP、投票百分比、投票者当前Voting Power有关。

测试

为了证实上述结论:影响声望数值的唯一因素就是投票产生的rshares

我使用测试账户进行了一下测试:

测试账户之前的声望数值:

测试账户发表个回复,我们对其点赞:

点赞后的声望数值:

通过计算我们可得:
77092232437 + 29363586547 / 64 = 77511038476

计算结果有公式:r.reputation += ( cv->rshares >> 6 );相符。

点7天以上老帖的情况

你可能会问,你上边没有说明对7天以上老帖子点赞是否会影响声望数值,那么是不是意味找给老帖点赞也会增加作者的声望数值啊?

好吧,为了不让代码霸屏,我截取的有点短,其实还有这样一段代码:

也就是说给老帖点赞不会增加作者声望数值

结论


(图源 :pixabay)

  • 点赞者声望数值为负不会对他人声望分产生影响
  • 声望数值比作者声望数值低,差评没有影响
  • 影响声望数值的唯一因素就是投票产生的rshares
  • rshares只跟投票者有效SP、投票百分比、Voting Power有关。
  • 给老帖点赞不会增加作者声望数值

(注:声望数值为负和声望分为负是两个概念哦)

写到这里,声望分越高对别人声望分影响越大,是真理还是谎言,还用我额外给出结论吗?

相关链接


This page is synchronized from the post: 真理还是谎言: 声望分越高对别人声望分影响越大吗?/ 代码&测试:到底什么影响声望分的增加?

天价费用的消息接收软件 / Test Bitshares Memo Monitor

闲着无聊,合计做一个bitshares的Memo监视功能,应该挺好玩的。比如说,谁给我转了50W BTS,并附加了备注,我一下子就会收到消息。如果再加上声光报警,语音提示,滴,你收到了一笔50W BTS的转账,这该多美啊!😍


(图源 :pixabay)

规划

说干就干,初步设想是这样滴:

  • 监控bitshares区块链上的转账操作
  • 如果转账的接收方是我指定的ID
    • 解密Memo信息
    • 发布消息到MQTT代理
    • MQTT客户端收到订阅消息后在液晶屏上显示
    • MQTT客户端声光报警
    • 在屏幕上显示Memo

想来想去,我的MQTT服务器早就被我扔垃圾堆里了,MQTT的客户端的代码我也早忘干净了,那么还是简化一下任务吧,在屏幕一下凑合吧。

代码

有了上述思路,以及我们之前的学习,那么代码实现起来是很简单的
一个粗糙无比的代码示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from pprint import pprint

from bitshares import BitShares
from bitshares.blockchain import Blockchain
from bitshares.memo import Memo

account = 'test2018'

bts = BitShares()
chain = Blockchain()

id = bts.rpc.get_account_by_name(account)['id']
print(id)

def get_memo_text(op):
m = Memo(op['from'], op['to'])
enc = op['memo']
plaintext = m.decrypt(enc)
return plaintext

for operation in chain.stream(opNames=['transfer']):
if operation['to'] == id:
print("You got Message")
msg = get_memo_text(operation)
from_user = bts.rpc.get_account(operation['from'])['name']
print(f"Message from {from_user}: {msg}")
#pprint(operations)

测试

下面我们来测试一下上边的代码是否工作。

接收到的信息如下(后边两条文本):

看起来我的程序是正常工作地。

需要改进的地方

  • 监控多个用户
  • 指定节点以提升处理速度
  • 在Blockchain以及Memo类实例中指定bitshares_instance
  • 在Blockchain实例中使用head模式,提升响应速度
  • 在消息输出中显示时间
  • 在消息中输出接收到的资产类型以及数量

如果再加上转账(发消息)功能,这就是一个聊天软件嘛。

问题


(图源 :pixabay)

尽管这个听起来很好玩,但是我不打算再去玩了,也不打算去完善了。为啥?上边截图中显示的转账费用竟然高达0.01759 BTS,按现在BTS 3.51人民币的价格计算,一条消息竟然需要至少6分钱!这太奢侈了吧,像我这种话痨,每天聊个几十万条不费劲,姑且算10W条吧,那就是6000多块钱啊。

如果这软件普及了,估计能让大家更深刻地理解沉默是金的道理吧。

相关链接


This page is synchronized from the post: 天价费用的消息接收软件 / Test Bitshares Memo Monitor

一入币圈深似海

朋友前几天打电话找我,邀请我去他们那边主持软件开发工作。朋友现在自己负责一个部门,在公司内有一个自己的开发大厅,现在已经有软件、硬件、芯片、机械等各个方面的工程师几十人。而现在整个公司也发展良好,作为上市集团的子公司现在已经有了近3000人的队伍,正在筹划独立上市。


(图源 :pixabay)

朋友其实曾不止一次邀请我过去,说我们当年曾经设想过的一些愿景正逐一成为现实,除了开发队伍,部门更是拥有了很多先进的设备,有了很多具有核心竞争力的产品,另外和公司内部其它部分以及公司外的其它企业有着诸多业务往来。总之按他描述的样子,一旦我加入进去,必可大展宏图,走上人生巅峰。

放下电话,我陷入沉思,从办公室离开到很久,我曾经一度渴望过再次回到办公室,回到同事和朋友当中去。甚至几度梦里都是在公司和同事们一起攻克难关以及欢声笑语。不过习惯了自由的我,又对朝九晚五受束缚的日子感到来自心底的恐惧。

朋友曾许诺给我极大的自由,比如说迟到、早退甚至在家办公。对此我也曾非常心动,为了感受一下自己是否能够适应,我曾经去朋友的公司上了两天班,听了一些他们软件开发人员的汇报,帮助对存在的一些问题进行了分析。但是当我从公司回家,一路红灯堵在路上,被烦躁的情绪淹没,几至无法呼吸。我觉得我还是适合不了这样的日子,尽管有一定程度的“自由”。


(图源 :pixabay)

或许完全在家办公,是在朋友公司工作的唯一可行方式,如果不是我误打误撞进入到波澜壮阔的币圈。但当看到我1毛3分五买的狗狗币跌成了6分了,当看到我4.5买的我都不知道是啥玩意的BTO跌到2元,还有从6元多跌到3元多的大BTS,从100多跌倒30多的SBD,还有135没有出手又回到90多的EOS,我还如何能静下心来去做软件开发或者指导他人做软件开发呢?

币圈一个资产是我无数倍的大牛和我聊天时说,他的资产不及某某的十分之一,而某某不过是币圈的第二梯队的人物而已。也就是说,如若币圈是深不可测的大海,那么我充其量是在平静的海滩上戏水的小鱼,偶尔微风带起一丝波澜,就和其它小鱼们吓得到处乱窜,大喊风暴来了,海啸来了。

我喜欢这样的日子,尽管狗狗啥的让我折戟,但是那又何妨?如果年底一飞冲天,谁还会记得年初的小小波动。这样意淫一下,心情爽多了。当然,除了意淫,我这条小鱼,也努力一点点游向深海,哪怕有风暴,哪怕有杀人鲸,只要能领略和见识路上的风光,就足矣。

至于江湖,再也回不去了。



(图源 :pixabay)

瞎发感慨,不构成投资建议
投资有风险,自己需谨慎


This page is synchronized from the post: 一入币圈深似海

Your browser is out-of-date!

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

×