小葵花课堂开课了:来聊聊微信语音控制家电 / Using WeChat voice control appliances

天天聊steemit的相关技术,有点疲劳,换个话题,轻松一下。
之前在其它朋友的回复下提及以前用ESP8266和微信连接进行家电控制的事,回想那时候玩得是不亦乐乎啊,从点亮一个小灯到控制继电器以及舵机动作到能够做出有一丁点价值的东西,累并快乐着。今天随便分享一下微信语音控制家电的大致流程以及相关技术,不涉及代码,也没有成品的示例,因为以前做的东西玩过之后都不知道被我刷成什么内容啦。

言归正传,瓜子、饮料、爆米花准备好,开始讲课啦。

关于Airkiss等等

其实微信对IOT提供了很多技术支持和开发工具,比如airkiss啥的
不像以往设置点啥,都要先用电脑网线连接->设置电脑IP段->访问指定IP->进行设置
现在手机啥的直接连上设备、然后输入家里WIFI密码,一切搞定。
神奇之处就在于没输入密码,咋就通过WIFI连上设备了呢?

这就是微信的airkiss,在其它厂商有的叫做Smartconfig,还有叫做SmartConnect,还有叫做WIFI快连,本质都差不多,其实核心技术就是:

  • 手机发送广播UDP数据包
  • 设备扫描所有的可用热点,处于混杂模式(监听模式,此模式下可以收到广播UDP包)
  • 设备在正确的热点上接收到密码(广播UDP数据包)
  • 设备连入网络成功

其中UDP如何发送密码相对比较复杂
大概意思就是两者无法通过UDP包的内容来交换数据(因为还未建立起来连接?)但是可以获取数据包的长度然后呢,聪明的人类就在长度上做文章了,比如长度1000个字节代表1,1001个字节代表2…这样就可以通过不同的长度对内容进行编码

(关于Airkiss的理解直接引用我以前在其它网站发表的部分内容)
既然Airkiss这么高大上,咱也用呗,对不起,我之前的设备用没用这部分内容,因为这要申请成为微信的设备合作商,比较麻烦,并且咱就玩玩,直接把WIFI ID和密码写死在程序里多简单。说了这么多,就是想让大家多了解些技术背景,万一啥时候用到了呢。

为啥用微信

其实用啥都一样的,比如用命令行开关灯、或者网页开关灯、或者写个APP开关灯,都差不多了,之所以选择微信,是因为手机随时在身边、又不用写额外的应用、也不用装额外的软件。

微信可以使用注册微信ID,加好友,然后通过类似微信机器人(调用网页版API)的方式通信,弊端是注册ID比较麻烦,网页版API并非官方提供,而且爱好者抓包分析出来的,并不是十分稳定,并且要机器人好保持挂机。

还有一种方式是用微信公众号,额,我记不清订阅号是否有相关功能了,但是企业号和服务号一定可以。你说企业号难注册,有种功能叫测试号,用起来还是很方便的,足矣。

大致流程

  • 向微信公共号发送控制信息,比如文本的开灯关灯等,或者语音信息
  • 公众号信息会传递给设置的API调用程序(网站上的脚本)
  • 脚本中识别出控制信息,对于语音信息,微信提供语音识别引擎
  • 脚本将控制信息推送至MQTT代理
  • 控制设备接受MQTT代理推送的控制信息
  • 控制设备根据对应的控制信息,控制继电器实现开关灯操作

需要的设备

  • MQTT代理
    在这个例子中,我使用的是MQTT技术,当然还可以用其它好多物联网通信协议/机制
    但是MQTT简单啊
    MQTT代理网上很多,自己搭建一个也不是很麻烦

  • 运行网站脚本的网站服务器
    因为微信公众号要调用网站上的脚本,所以需要你有个托管网站脚本的地方,比如说虚拟主机、独立服务器之类的

  • 控制设备
    其实还可以叫做MQTT 客户端
    用来接收MQTT代理推送的订阅信息,并根据信息进行操作

  • 执行设备
    这个就简单啦,继电器一枚,台灯啥的是待控设备

ESP8266

ESP8266是近年流行起来的带无线连接的单片机设备/模块
以往大家都是用W5100或者ENC28J60等有线连接设备,无线设备要么贵的要死,要么极其难用,ESP8266已经问世就改变了这种情况,并获得的极大的流行与成功。

ESP8266的各种模块/板卡数不胜数,适合不同的应用场景。我手头有三种以上,下边秀一下(有点脏,见谅)

IMG_20170626_122324.jpg
开发快, 使用的是ESP8266-12F/E, 集成了温湿度传感器、OLED液晶屏、RGB LED、红外接收器、气压传感器等等等


IMG_20170626_121206.jpg
ESP8266-12F/E的简化应用小板


IMG_20170626_121233.jpg
ESP8266-01


当然,除了ESP8266你还可以用各种其它设备,不过我不会偷摸告诉你ESP8266最廉价的事实,上一套我玩Intel 爱迪生时弄的自动浇花系统模型,这套设备全下来1000多大洋,用来浇花或者开灯?那得多贵的花和灯啊。
IMG_20160909_084922.jpg

MQTT 服务器

虽然网上有一些提供服务的MQTT服务器,但是自己搭建也是很有乐趣的事情不是,感兴趣的看这里,我记不清楚我是否在steemit上共享过搭建MQTT服务器的内容了,总之,很简单就是了。

Eclipse Mosquitto™ is an open source (EPL/EDL licensed) message broker that implements the MQTT protocol versions 3.1 and 3.1.1. MQTT provides a lightweight method of carrying out messaging using a publish/subscribe model. This makes it suitable for “Internet of Things” messaging such as with low power sensors or mobile devices such as phones, embedded computers or microcontrollers like the Arduino.

网站服务器

其实网站服务器和独立主机啥的我有一大堆啦,但是为了玩,还是自己本地弄了一个,和MQTT服务器都搭建在一起,很方便的,然后用DDNS以及设置NAT让外网可以访问到服务,就可以啦。

使用香蕉派/树莓派之类的搭建HTTP服务器,这个我一定共享过,感兴趣的去我主页查找吧。

IMG_20170626_121333.jpg

我用来搭建HTTP服务器以及MQTT服务器的香蕉派M2+, 小巧可爱,性能强大。


好了,就聊这么多大,大致思路就是这个样子。
关键字

  • 微信公众号
  • 网站服务器
  • MQTT服务器
  • ESP8266

太多的细节和代码就不啰嗦啦。


感谢阅读
水平有限,欢迎大家一起讨论,如有谬误,烦请指正

欢迎upvote、resteem以及 following me @oflyhigh 😎
请将我设置成为你的见证人投票代理, 访问 https://steemit.com/~witnesses


This page is synchronized from the post: 小葵花课堂开课了:来聊聊微信语音控制家电 / Using WeChat voice control appliances

我的朋友又来了,这次不是四轴,是赛车

IMG_20170625_111355.jpg

如果你看过我之前的一个帖子:

就会知道我有一个爱玩的朋友,喜欢各种玩具赛车、飞行器之类的。
上次他过来找我帮他一起组装个四周飞行器(Quadcopter),但是飞行员水平just so so (为什么我觉得比马马虎虎更能表达马马虎虎的意思的,我是不是有点崇洋媚外,检讨ing ),结果飞机飞到树上了,来,让大家回顾一下经典场景:

还好这飞机的质量真不错,超过神马波音空客之流的,没有机毁人亡,摘下来继续飞,只是需要为树叶默哀一下。

言归正传,我的朋友今天又来啦。

带来了一堆电动赛车零件,对了他说是F1赛车,我就一直不懂,F1不是键盘上的按键嘛,程序调出帮助的嘛,啥时候变赛车了,还有F2赛车是不是更高档?他以前玩的都是烧油的带发动机的赛车,最近不知道咋的迷上了DIY,捂脸,愁人。我发现又扯跑题了呢,捂脸。不说了,上图

IMG_20170625_111355.jpg
来个车架车架特写,这次他自己组装的大部分零件,估计也知道我比较忙吧,真是好朋友。
车轮啥的大家都认识,我不多介绍了,前边偏中间蓝色的部分是舵机,舵机是用来控制角度的,给一定的控制信号就会旋转指定角度,控制信号是PWM信号,但是不是通过占空比而是通过脉宽控制的,额,又扯远了,其实就是控制前轮转向的

后边中间部分是电机,不同于直流电机给上电就转,电压越大转的越快,无刷电机需要用电调控制,可以进行更精确更复杂的复制。哦,对了,硬盘里边以及光驱里边控制盘片高速旋转的都是无刷电机哦。


IMG_20170625_111434.jpg
中间来个特写,什么机械传动之类的对我而言就是天书啦。不过多解释啦。


IMG_20170625_111455.jpg
用来控制电机的电调,同时集成接收机信号接收、风扇控制以及设置功能等等
额,朋友这个家伙为了省钱,买了个二手电调,焊盘上挂了乱七八糟的锡,为了焊这些线,我可是费了好的劲。
电调上的5个圆孔,分别要焊上电池的正负线以及电机的A\B\C三根线,看看这个焊孔以及电线的粗细,你就可以想象有多难焊了。


IMG_20170625_111609.jpg
晒一下一堆垃圾,车主体、遥控器、遥控器接收机、电调、电池、设置器等等


IMG_20170625_111701.jpg
继续晒垃圾,多了点啥?多了个垃圾电烙铁,其实我是有个黄花大闺女,哦,不对,黄花大烙铁的,好几十大洋呢,然而不知道咋的就夭折了,只好重新抄起记不得几十年前买的烙铁,还好宝刀未老,依旧能发热,烙铁和烙铁架脏了点,没办法,除了这两次帮他焊东西,好久没用啦


IMG_20170625_111746.jpg
一卷焊锡用了好多年,还剩好多,焊锡质量不错,中间带助焊剂,挺好的。


IMG_20170625_112101.jpg
剥线钳很多人认识,蓝色的管子你知道是啥吗?欢迎回复猜猜,注意,猜对了没有奖励哦


IMG_20170625_133631.jpg
历经了几个小时的艰苦卓绝的奋战,终于把寥寥几根线焊好了。
中途我们用开封菜(KFC)外卖补足了体力。额,吃的有点多,再也不想吃开封菜了。
接好之后接上电池,接上电调,接上设置器,接上接收机,开火哦不对,开机,一点响应都没有。
研究了半天,发现可能是设置盒有毛病,至少上电要亮灯才对吧。
好纠结,如果有毛病,我们的KFC岂不是白吃了?

研究研究研究,最后我想了个办法,把设置盒拿掉,接设置盒的部分直接接两根线,然后短接正极和S,电调终于亮了。朋友拿遥控一按,我的天啊,一声巨大的轰鸣,吓得我瓜子都掉地上了,哦,是吓得我差点把车架扔飞。原来这货把遥控拉到最大油门啦。还好后轮离地的,不然不起飞才怪呢。


好了,就这些啦,因为现在测试用的电池和车架不匹配,没法装到一起,新买的电池正在路上呢。对了,因为设置盒不好用的缘故,现在这个车处于竞赛模式,据说仅仅是据说的,瞬时最高速度可达200公里/每小时,恐怖吧。还有这车底盘超低,没有好的路面跑不起来,如果路面有一个小突起或者石子,估计这丫就真的起飞了。至于能不能像飞机一样挂在树上,嗯,想想就很欢乐的场面。

话说真羡慕朋友现在还这么有兴致玩这些,也许保持一份年轻的心态,才是健康长寿的秘籍吧。
希望大家都保持一份童心吧。

你是否喜欢DIY呢?有什么DIY的作品可以发出来让大家一起观摩,我之前一个DIY平衡车项目目前还在大坑里,今天更是被朋友把T头电池接线抢走了😭,再想继续,遥遥无期啊。当年为了玩,买了上万元的各种硬件以及板卡模块等,现在都在吃灰呢,改天拿出来晒晒,以免发霉。


感谢阅读

欢迎upvote、resteem以及 following me @oflyhigh 😎
请将我设置成为你的见证人投票代理, 访问 https://steemit.com/~witnesses


This page is synchronized from the post: 我的朋友又来了,这次不是四轴,是赛车

通过事务ID(transaction id) 获取事务(transaction) / Database API: get_transaction

问题的提出

因为在写一些脚本,需要获取事务的签名部分
而查阅了好多API,发现都是获取事务操作的本身,其中并没有包含签名部分。
这就有点纠结了,我想取出一堆事务的签名,看起来比想象中的要麻烦。

原本计划的程序结构如下:

  • 获取带签名的事务列表
  • 根据带签名的事务进行下一步处理

现在带签名的事务列表没法获取,我将程序结构修改如下(将第一步分解成两步):

  • 获取事务列表(获取不到签名)
  • 遍历每个事务,获取其签名,或者说更新为带签名的事务
  • 根据带签名的事务进行下一步处理

第一步获取的事务列表中,包含了事务ID(transaction_id)
好了,现在的问题出来了,如何根据不带签名的事务,获得带签名的事务(有点拗口)

尝试方法之一

于是我想,能不能用事务ID取得事务呢?
查找API列表,找到这样一个API:
annotated_signed_transaction get_transaction( transaction_id_type trx_id )const;
看Y眉清目秀的,应该是个好人吧,就用他了

于是用埋头coding,OMG,出来的神马鬼东西,结果乱的一塌糊涂。
一定是我的姿势不对。

使用CURL直接测试一下吧,随便找了个事务ID

来一个甜心妹妹给我回复投票的

事务ID(transaction id)是:5077183fd03e873b7080a0330eb2bf0da4a8a514
使用CURL测试:

1
curl https://steemd.steemitdev.com --data '{"jsonrpc": "2.0", "method": "call", "params": ["database_api", "get_transaction", ['5077183fd03e873b7080a0330eb2bf0da4a8a514']], "id": 1}'

结果返回的是一个空的事务,晕

1
{"id":1,"result":{"ref_block_num":0,"ref_block_prefix":0,"expiration":"1970-01-01T00:00:00","operations":[],"extensions":[],"signatures":[],"transaction_id":"0000000000000000000000000000000000000000","block_num":0,"transaction_num":0}}

OMG,我的姿势又不对。空的事务,对我而言又还不如之前缺签名的呢。

换一种方法

既然上述的方法无效,那么就想想是否有别的方法?

上边获得事务列表的事务中包含block ID
比如上边的例子中,甜心妹妹的投票就包含在block 13116722中

没错,这个块中包含了20个事务

哎,先别管多少事务了,撸起袖子加油干吧。

  • 从事务中获取block ID 13116722
  • 通过block ID 获取block
  • 从block 中取出事务

获取block 调用的API:
optional<signed_block_api_obj> get_block(uint32_t block_num)const;
测试一下,获取block 成功

然而,新的问题来了,block中那么多transactions
如何获取我们想要的transaction呢?比对操作的各个项目?想想就醉了。

最后发现block中事务ID是放一起的transaction_ids
事务列表transactions 中事务的顺序和事务ID在transaction_ids的顺序是一样的
于是就有了如下思路:

  • 查询transaction_id在transaction_ids中的index
  • 用获得的index去transactions中取出对应的transaction

最终取出来的transaction是这个样子,😭,这才是我想要的东西啊

1
2
3
4
5
6
7
8
9
10
{'expiration': '2017-06-25T01:42:21',
'extensions': [],
'operations': [['vote',
{'author': 'oflyhigh',
'permlink': 're-sweetsssj-happy-birthday-to-me-my-first-birthday-as-a-steemian-20170625t012421385z',
'voter': 'sweetsssj',
'weight': 500}]],
'ref_block_num': 9518,
'ref_block_prefix': 4153056001,
'signatures': ['20232b570f87e0938c81017b423bbbd1c91b6ecc5d31e1bd7031e0602f4a9d3ba334dce971e4c3f1ab4934b814e44791448aa5e9f415b1ce40c8db24d12fea9fff']}

结论

尽管我换了一种方法,费劲周折,终于取回了想要的transaction
但是,因为要取回整个block中所有内容,效率极其低下

那么还有什么方法,能用transaction id 获取完整的事务呢?

我在考虑get_transaction这个API是真的有BUG还是我没用对
我在github上提交了一个issuse
https://github.com/steemit/steem/issues/1213
希望是我用的姿势不对吧,这样专家们给出方法后,我就可以快速应用到我的程序中啦。


感谢阅读
水平有限,欢迎大家一起讨论,如有谬误,烦请指正

欢迎upvote、resteem以及 following me @oflyhigh 😎
请将我设置成为你的见证人投票代理, 访问 https://steemit.com/~witnesses


This page is synchronized from the post: 通过事务ID(transaction id) 获取事务(transaction) / Database API: get_transaction

关于STEEMIT账户权限以及相应的安全提示

最近几天中文区来了不少新人,很多人和去年我刚注册时一样,一头雾水。
当时我耗费好长时间学习如何发帖、怎么点赞以及如何插入图片让文章看起来更丰富
至于更高级的技巧如使用Markdown排版,是我玩了好久才学会的事情。
所以这两天我写了一些文章向新人们介绍这些或基本或略微高级的操作。

但是重中之重的事情,就是安全问题

假设这样一种情况,你把所有初中高级功能都学会了,也创作出N多高质量的文章,也获得了不菲的回报。然而一旦不小心弄丢密码,那么可不像银行,你可以拿着身份证去挂失去重置密码,你账户内的所有资产将不再属于任何人了,包括你。是不是很震惊,事实就是如此。这篇文章我们先介绍一些STEEMIT的账户权限,然后再给大家一些关于账户以及密码的安全提示。

STEEMIT的账户权限

你可能在我的或者其它人的文章里,听说过公钥、私钥、POSTING 私钥、ACTIVE私钥等乱七八糟的词汇,如果你之前对此没有了解,那么肯定和我当初刚接触的时候一样一头雾水。所以我来说一下我的理解,供大家参考和探讨。

  • 最重要的是密码
    密码是你创建账户时生成的密码,密码是所有私钥的祖宗
    也就是说,如果你密码泄露了,那么其它私钥你藏得再好也没有用了

  • POSTING 私钥,可以说是最常用
    当发表文章、给文章投票,都要使用到POSTING私钥

  • ACTIVE 私钥,主要是用在财产相关方面
    当你给别人转账或者在内部市场交易(买入卖出等)都要用到ACTIVE 私钥

  • OWNER 私钥 重要性等同密码
    这个我理解是密码的另外一种表现形式,重要性完全一样

  • MEMO 私钥用于创建和读取MEMO

而公钥则是应用密码学算法生成的一组和私钥对应的公开字符串,任何人都可以读取。

私钥和公钥主要用于两个用途

  • 数据签名/校验
  • 数据加密/解密

所谓签名,就是给数据盖个戳,证明数据是我发送的。

  • 签名过程: 用私钥生成数字签名,并附加到操作信息上
  • 校验过程: 用公钥校验操作信息中的数字签名,由此判断数据是否合法

所以加密/解密,就是我传递的信息,只有接收者才能阅读

  • 加密过程: 用接收者的公钥对数据进行加密
  • 解密过程: 接收者用自己的私钥解密出明文数据。

关于安全的重要提示


上段内容中,刨除乱七八糟的技术细节,总结一下:
1) 公钥是公开的
2) 私钥是私密的
3) 密码是所有私钥的祖宗
4) 私钥有不同的级别以及不同的用途

有了这些总结,想必大家已经建立起来一些概念了。我在补充一个重中之重的

  • 密码不能恢复

那么我们都会面临那些风险呢?

风险之一: 忘记密码/弄丢密码

有些人说没关系,我的密码浏览器记着呢
还有人说我保存在电脑里了
那么你有没有想到浏览器崩溃的可能呢?电脑硬盘坏掉也不是永远不会发生!
即便有万一之一甚至十万分之一的概率,损失也是难以接受的。

所以安全提示之一: 备份里的密码
建议离线保存在U盘等移动设备里,最好保存多份
当然用小本抄下来也是极好的,就是密码太长了点

风险之二: 密码被动泄露

我前几天发表了一篇文章
🔓 [Security Alert] You may leak your steemit password (key) by accident / 安全警示,你可能不经意就泄露了你的steemit 密码
说的有些人不小心转账时在MEMO区域填入密码,然后导致密码以明文的方式发送并被保存到区块链上,有心人根据这种可能就会获取你的密码

感兴趣的朋友可以去看看,注意一下防范类似风险。

风险之三: 在钓鱼网站上输入密码

随着STEEMIT流行起来,骗子们也蠢蠢欲动了。前阶段看到外文区有人讨论STEEMIT上已经出现了不少钓鱼手段。比如说给你个链接,说奖励你STEEM,打开后让你登陆,你登陆后奖励没拿到,你的STEEM、SBD被骗子转走了……

风险之四: 慎用第三方网站/软件

STEEM的流行,导致了一些优秀的第三方网站以及第三方软件诞生,一些优秀的站点如busy.org 我也使用过,优秀的软件如ESTEEM 我还参与了简体中文部分的翻译(繁体部分由@deanliu 翻译哦)

这些站点和软件都承诺用户密码/私钥均保存在用户本地,不会发送及上传至服务器。
但是第三方站点以及软件良莠不齐,不排除有的站点和软件由于编码不当或者其它主观客观的因素导致用户密码泄露。

风险之五: 将密码或者私钥交给朋友来操作

有时候可能出于某项复杂的操作你无法完成,或者什么其它的原因,你可能会让你的朋友帮你操作,但是务必选择靠谱的朋友,完成操作之后要及时修改密码。信任归信任,安全归安全,即便这个朋友极度可靠,但是万一他的设备中毒了呢?

罗列了一堆风险,感觉风险还应该有好多好多,限于篇幅以及我的体力,就不在赘述了。

补充一下密码恢复的问题

不同于丢失密码,如果密码被盗以后被人修改,而你又记得原始密码,那么30天内有机会重置密码
重置密码的操作我没有试过,但愿永远别出现用到这个功能的时候。
保持良好的安全意识和安全习惯,让各种风险降到最低吧。

最后,让我们用STEEMIT官网的修改密码页面的安全提示结束这篇文章吧。

The first rule of Steemit is: Do not lose your password.
The second rule of Steemit is: Do not lose your password.
The third rule of Steemit is: We cannot recover your password.
The fourth rule: If you can remember the password, it’s not secure.
The fifth rule: Use only randomly-generated passwords.
The sixth rule: Do not tell anyone your password.
The seventh rule: Always back up your password.


感谢阅读
水平有限,欢迎大家一起讨论,如有谬误,烦请指正

欢迎upvote、resteem以及 following me @oflyhigh 😎
请将我设置成为你的见证人投票代理, 访问 https://steemit.com/~witnesses


This page is synchronized from the post: 关于STEEMIT账户权限以及相应的安全提示

STEEMIT高级操作之:如何多人共同维护一个公共STEEMIT账户(ID)

分身太多之痛

@deanliu 今天发了个长文:

其中提到了STEEM社区分身泛滥的问题,我的观点是: 分身不是问题,问题是你用分身做好事还是做坏事。大家也看到中文区一夜之间从极度冷清到极度繁华,风格骤变的有些让人措手不及。以下是一些简单的数据:

时间 发帖用户 文章数
21号 98 147
20号 32 48
19号 29 35
18号 25 32

数据说明一切,HF19之后,人气暴增。这个结论耐人寻味。但是骤增三倍的用户,又有多少是所谓的分身呢?这两天QQ群里也看到不少发链接的,但是真的看不过来, 147篇每篇看个3分钟,是多久?是考验大家小学数学的时候啦!

147x3/60 = 7.35
OMG,你没看错,是7.35小时,何况类似@deanliu 那样的长文,你3分钟能读完?至少我读不完!所以必然走马观花,漏掉一些优秀的帖子,想必大家都有同感吧。我的一个朋友上来问我一个问题,我回复说: 你肯定没有仔细看我的帖子,隔天又问我一个问题,我回复说:你肯定没有仔细看我的帖子。我的朋友尚且如此,何况他人呢?有几个人能静下心来,用7-8小时读贴呢?而优质文章必然淹没在滚滚大潮中。哦,忘记说了,这两天的帖子数应该更多。所以分身太多、水贴太多损害的必然是每一个人的利益。

专业功能:合体

8589f7258b3f432652a04255cb998a06.jpg

额,我怎么感觉写跑题了呢?好了回归正题。
说过了分身太多的问题,我们来介绍一个专业的功能:合体,别想歪了,这不涉及到双修之类的内容。

以下,简单区分区分一下分身与合体

  • 分身: 一个真实的人使用多个账户发帖
  • 合体: 多个真实的人使用一个账户发帖

为什么要合体呢?
一种情况是: 一个人的精力有限,维护一个账户力有不逮,那么就和他人一起维护。
另一种情况: 一个大家共同持有的公共账户需要大家一同维护。

你可能说,我可以把账户密码给我的朋友啊,让他们直接来操作。
关于账户密码的安全问题我以后会开贴讨论,但是给密码或者私钥的方式,无法区分是谁在操作,如果多人维护一个账户,但是有那么一条坏鱼,无疑是令人沮丧的。
所以这里我会介绍另外一种合体方式

合体授权简介与原理

搞基哦不对,高级合体的方式:

就是把其它账户的公钥添加到需要共同维护的账户上
而用户用公共账户ID 以及 自己对应权限的私钥登陆

从公钥私钥以及签名的角度来讲,发帖或者投票的过程都要用私钥对操作进行签名。而广播到网络之后,见证人会验证这个签名,从而判断操作是否合法。对于自己的账户以及密码而言,这很好理解。对于多人共同维护一个账户,因为用户使用的是公共账户ID以及自己的私钥,那么签名时用的是自己的私钥,验证时见证人会比对公共账户ID的公钥列表,判断签名和ID是否匹配。

合体授权的操作


恰逢我们的公共&公益事业 老道茶馆 需要我们茶东共同维护一个账户 @laodr
有关茶馆的信息请大家访问茶馆频道: #laodr-teahouse,这里不再赘述
这里我已@laodr 来阐述如何操作合体授权

  • 一:首先要安装官方的python工具,执行如下命令即可
    pip install -U steem

  • 二:获取公共账户ID的Active 私钥
    使用密码登录 @laodr 账户
    进入: https://steemit.com/@laodr/permissions

    点击
    按提示登录后点击并复制

  • 三:将公共账户ID的Active 私钥加入python 工具
    命令为:steempy addkey
    按提示输入上个步骤保存的私钥并设置钱包密码(如果以前设置过,则需验证钱包密码)
    成功后使用steempy listaccounts查看会是这个样子

  • 四:获取待添加用户的公钥
    进入steemd可以查看对应用户(包括别人的)的公钥,比如我的公钥为:

    复制相应公钥

  • 五:将用户公钥添加至公共账户ID
    steempy allow --account laodr STM5tT6fKtodfdMGxtcgsQuEYypmMwuLCVaZdsQ7kTd98hHcbSKC6

  • 六:查看公共账户是否添加成功
    现在再去steemd看laodr账户会发现POSTING 公钥部分多出来一个我的公钥

  • 七:重复步骤四、五、六来添加其它账户

  • 八:操作完成后是这个样子

设置完成后如何使用

其实前文已经说过了使用方法

  • 使用公共账户ID 以及 自己对应权限的私钥登陆
    在本例中,以我为例,使用laodr账户,以及我的posting 私钥登陆即可

  • 登陆后,就可以使用公共ID的身份发帖以及给其它帖子投票了

需要说明的是,在steemit上一切操作都是可查的
所以多人共用一个账户的情况,一方面要保证团队精诚合作
另外一方面,如果有人搞破坏,是可以用技术手段查出来的
所以,茶东门,请谨慎言行、做好工作哦

补充

除了添加私钥,还可以直接添加账户,操作过程大同小异

其它客户端工具有的也可以进行设置,比如client_wallet
但是我没有操作过,这里就不过多涉及了

安全提示!!!

1.jpg
注意注意,使用上述操作时,你必须确保你清楚你知道你在操作什么
这其实是多重签名的一个简化到极点的应用,如果你操作的同时设置了阈值(threshold)/权重(weight)等,那么就需要大家一起签名才能进行一项操作了。另外,本例中设置的是posting 权限,如果需要设置其它权限,请慎重操作。


感谢阅读
欢迎upvote、resteem以及 following me @oflyhigh 😎


请将我设置成为你的见证人投票代理, 访问 https://steemit.com/~witnesses


This page is synchronized from the post: STEEMIT高级操作之:如何多人共同维护一个公共STEEMIT账户(ID)

📌重点在文末/ 见证人简介,如何为见证人投票以及设置见证人投票代理

delegate.jpg

在steemit玩了一段时间的朋友,可能会偶尔/经常听到见证人(witness)这个词汇,但是可能不清楚何谓见证人,到底起到什么作用?这篇文章中,我会简单阐述一下我所了解的关于见证人的内容,供大家参考以及一同探讨学习。本篇文章将包含如下内容:

  • 何为见证人
  • 如何为见证人投票
  • 如何设置见证人投票代理

因为水平有限,对见证人的描述部分可能不准确或者没有切中要点,欢迎大家补充和指正。

何为见证人?

见证人运行见证人节点(witness nodes),运行于电脑/服务器上的一组程序

就steem区块链而言,见证人(节点)通过将事务包含到区块起到校验事务签名以及加盖时间戳的作用。一个区块是更新数据库状态的一组操作(可以包含发帖、投票、交易等等)。每当见证人(节点)处理一个区块(出块),他将获得相应的收益。如果见证人出块失败,他将得不到报酬,甚至可能被投票否决。

没一轮的区块产生开始于21个见证人的洗牌: 投票产生的TOP 20见证人以及一个随机选择的备选见证人。每个见证人(节点)会被轮到处理一个按每三秒一块的固定速率产生的单独区块。如果一个见证人(节点)没有在他的时间段中处理对应区块,则这个时间段会被跳过,下一个见证人(节点)开始处理下一个区块。

哇咔咔,有点拗口和迷糊,简单总结一下我的理解。

  • 见证人是steem区块链运行的重要部分,没有见证人来做工作,就玩不转了
  • 见证人运行见证人节点
  • 见证人的排序是投票产生的

关于如何运行见证人节点,是一个我不懂很复杂的问题,所以不在本文讨论的范围内,感兴趣的朋友可以参考steemit上一些其它相关文章。

如何为见证人投票?

你可能会问,见证人是很重要,见证人也很辛苦,但是我又不会运行见证人节点,那么见证人与我何干呢?这样想,就大错特错,见证人与STEEMIT上每个人都息息相关!为何这么说,因为见证人工作很重要,就好比一个国家选举总统以议员等等。上台一个版本错误、延迟大、或者各种失联的见证人节点,就好像上台一个不靠谱的总统领导国家走向衰退。

而重点是: 我们每个人都有选举权
这是STEEMIT 系统赋予我们每个人的权利。

尽管相对于系统大鲸鱼(STEEM POWER大量持有者),我们的投票权重可能微乎其微,但是这并不能阻止我们发出自己的呐喊!

那么如何给见证人投票呢?非常简单。

1) 登陆steemit
2) 打开: https://steemit.com/~witnesses
3) 选择你要投票的见证人前边的:
4) 投票成功后会变成这样:

你最多可以给30个见证人投票
如果你想给列表(TOP 50)之外的见证人投票,那么在下边的框中填入id,点击投票即可

设置见证人投票代理

现在我们大致明白了什么是见证人,如何给见证人投票,那么新的问题来了
我该给谁投票?

我们要投票的见证人一定要运行新版本的见证人节点
我们要投票的见证人的节点一定要稳定、低延迟、出错少
还有最重要的一点:
🏆 是哪个见证人一直不遗余力的支持中文区发展?

千万别投我,我还没有开始运行见证人节点
你可能有选择困难症,你可能没精力挑选靠谱的见证人,你可能没时间更新对见证人的投票……
那么好消息来了,我来帮你选!

只需将见证人投票代理设置成我,那么我的投票将会代表你的投票

设置见证人投票代理也非常简单

1) 登陆steemit
2) 打开: https://steemit.com/~witnesses
3) 直接到页面最底下
4)
在文本框中输入我的ID oflyhigh 以后点击 SET PROXY

补充说明

  • 见证人投票与给文章投票是两码事
  • 见证人投票不浪费你文章的投票权,与文章收益点赞收益等完全无关
  • 设置见证人投票代理,不会对你发帖、点赞等造成任何影响
  • 设置见证人投票代理,不会影响你的SBD\STEEM\STEEM POWER等财产的安全

好了,说了这么多,也教给大家如何操作了,也打消大家对安全的担忧了,那么还等什么?行动起来吧!


感谢阅读
欢迎upvote、resteem以及 following me @oflyhigh 😎


请将我设置成为你的见证人投票代理, 访问 https://steemit.com/~witnesses


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

×