cryptoz258 / bymind.github.io Goto Github PK
View Code? Open in Web Editor NEWpersonal blog about programming
Home Page: http://bibodeng.com
personal blog about programming
Home Page: http://bibodeng.com
现在的区块链,处在一个爆发的前夕,之前的ICO狂躁,带来了一定的迷茫,但是大家都在说2018年是区块链应用元年,今年一定会有区块链的杀手级应用落地,然而得有人不断地在里面投入和试错,才能诞生这么一个杀手级应用。为此我们也进行了初期的尝试,基于BCH的公链,做了一款身份验证、密码管理的应用。做区块链DApp的过程中,时常会怀疑自己做的是不是伪需求,因为区块链的个性鲜明,使得开发起来挺别扭的。虽然获得了数据的安全性,但是开发效率却不高,需要自己定义一套协议,存取的方式也需要做一次加解密。
近期,刚好来自重庆的盖茨实验室举办了一场BCH和EOS社区的极客大赛,大赛吸引了一批开发者和在校大学生的踊跃参与,从中也诞生了许多的优秀的应用,给我们带来许多启发,虽然暂时还只是一个雏形,不能有清晰明确的商业模式,但也是非常伟大的尝试。当然,我们也报名参加了这次的大赛,虽然仅了解了一点皮毛,但是我们还是鼓起勇气报名了。
我们给战队取名叫【神雕侠侣】,因为神雕侠和satoshi还挺谐音的,算是致敬中本聪吧。我们团队由两人组成,一个是我,另外一个是我女朋友,两个人一个负责开发,一个负责产品和运营。
邓国东,曾任职于腾讯、ViaBTC,从事Web系统、数字货币矿池及钱包开发,是一个面向全栈的技术开发人员。有志于通过技术,让更多人从区块链中受益。
杨春萍,任职于漫游超人,擅长品牌及产品社交媒体运营运营,精通两微一端及数字媒体传播,曾主要负责漫游超人品牌植入《唐人街探案2》项目营销。
刚上台介绍战队的时候,我一个人上去,他们以为我是那只雕。。。
既然报名了,那就硬着头皮也要上,于是也赶工了几天,终于将这个demo给做出来了。
我们生活中需要使用到非常多的账号密码,然而这里有非常多的安全隐患,有许多人使用的账号密码甚至泄露已久,相当于在互联网里面裸奔,并没有什么隐私可言,甚至切身利益有可能被人随时掠夺。就密码来说,我们有许多的痛点:
我一开始就有一个愿望解决这些真实存在的痛点,能否开发一个使用区块链作为分布式存储方案的密码管理器呢?
答案是可行的,参考LastPass和1Password等竞品后,我们设计出了IFPassword,基本思路如下:
于是我们初步实现了添加账号密码、填写账号密码的基础功能,当然,一开始只是为了验证这个流程,没有做到非常好的用户体验。
BCH上有一个OP_RETURN的操作码,在写入一笔交易的时候,允许在OP_RETURN上附带一个数据,大小为220Byte,足够塞下一条微博、一段哈希了。像之前诞生的memo——区块链上的微博,keyport——区块链上的微信等等都是基于OP_RETURN来存储的数据,我们实现的这个密码管理器,也是讲数据通过比特币采用的椭圆曲线算法加密后放置到OP_RETURN上的,它的安全级别和比特币是一样的。
那么如何写入这个OP_RETURN呢?其实也很简单,如果你连接的是一个比特币的节点,那么你只需要构造交易的时候,将这段数据写入输出的data
字段,然后签名之后广播即可:
bitcoin-cli createrawtransaction '[{"txid":"3b0da5fd1beb71e1f47da2f3e9bd1af2e7026fd0282d18d9777a13e49089d146", "vout":0}]' '{"bitcoincash:qpktcr9pj6dh8vgepuvumymhwrg7536d7u4qsvdvhc": 0.00001500, "data": "6f11616d6f4141414b3034514477712b77574b384b462f567a793362375a4a6c6d4549475a79783070464d73347842447432424d4c4c65414a547449376b63622b43377a6e69455132554e4968353734626c4d5456534d786a43654d764f617162636641465966677868594a39557642526b687a365a63776361377437506a315a367171704e2f46363955774d2f68514a776c432b71694254314f596470686352656c4e664945314e55484a30745450742f644e4746565731712b673d3d"}'
如上面代码所示,将加密后的数据编码成了16进制写入了交易中,广播出去之后,就可以在区块链浏览器中看到这样的数据了,这个数据就是日后恢复数据的关键,不过千万不能把私钥给泄露了出去,泄露出去拿到私钥的人就可以解密这段消息了。
编程实现了上述的写入区块链的逻辑以及相关的交互之后,大致的最终效果如下:
现在的互联网进入移动互联网以后,变成了一个个信息孤岛,大家在岛上玩得不亦乐乎,但是如果一个岛要到另外一个岛,那成本就高了。然而发明互联网的初衷,就是让人与人、人与物能够互相联通,然而现在却是越来越封闭了,并且原本属于用户的数据以及权利,被各个大公司垄断,并且他们还不能提供连续的服务,说不定哪天说停就停。我们需要一个能够持久存储你的数字资产的东西,一个人人能够使用,信息能够充分流淌的工具,就像早期的互联网一样,在上面探索可以不断发现新的东西,在区块链上,也是这样,顺藤摸瓜,能够发现许多的新东西。
我们做的这个玩意,它对我们还是有一点启发的:
未来,信息存储的方式以及内容分发的方式将产生极大的改变,试想这样一个问题,你是如何存储你的所有照片的?存在自己硬盘,需要常常备份,还是存在照片管理软件或在线空间,非常不方便管理和移动。然而,其实你的照片可以存储得无处不在,随时要随时取,并且永久保存,不会消失,你拥有对它的所有权利,你可以加密,你可以卖给别人,可以授权他人使用,等等。用户将重新获得数据的自由。
K线和深度图在股票及数字货币交易中到处可见,然而这个K线和深度图的实现,如果没有真实写过一次,对里面的一些坑还是有可能避免不了。最近由于我们的产品中开发了一个云算力合约的交易K线,所以我也实现了一个简单的K线图和深度图。
要实现一个K线,首先要知道K线是什么,K线由于长得就像一根根蜡烛,所以又被称为蜡烛图,是用来反映价格走势的一种图表。K线可以按照不同的周期进行划分,例如15分钟、1小时、1天等等,它的每一根“蜡烛”反映的是那个周期内的开盘价、收盘价、最高价和最低价,而底部还会有一个成交量。
K线的开盘价,就是“蜡烛”矩形的底边或者顶边,收盘价就是另外一边,绘制时,先绘制开盘价,如果收盘价高于开盘价,那么就绘制在开盘价上方,整个矩形的颜色是绿色(假设绿涨红跌),反之,则这个周期内是跌的,则会绘制成红色。
每根蜡烛,还会有一根细线贯穿,这根就叫“引线”,引线顶端代表该周期的最高价,底端代表着最低价,这根引线反应了这个周期内的价格震动幅度。
一根根蜡烛排列起来,就能看到价格的走势,一眼就可以看出是涨是跌,同时也能看住单个周期内的涨跌情况。一般除了蜡烛之外,还有一些其它指标,如MACD,KDJ等。这里讨论比较常见的MACD,也即平滑异同移动均线,它是采用每个周期的收盘价,做一个平均值,有MA7、MA30等不同周期长度的平均值,一般绘制K线的组件已经提供了该功能,只要填入数据,它将自动计算该周期及前六个周期的收盘价平均值,如果不满七个周期,那么则不计算。
K线图要实现快速的加载,必须要添加缓存,否则每次都是用成交单据实时计算,则非常耗时。对于我们上面提到的单根蜡烛的数据,我们要将它按不同的周期存起来。以15分钟的为例,每根K线,是一个数据项。
[
[time1, open1, high1, low1, close1],
[time2, open2, high2, low2, close2]
]
拉取K线数据时优先从缓存中取,如果缓存中取不到,那么则从DB中根据过往的成交记录生成,然后存储到缓存中,以备下次使用,一般来说,首次加载是比较耗时的,因为这个时候所有K线数据都还没有。
points = []
r = redis_store.hmget(market_type + '_hash_trade_kline_' + period_type, keys)
for index, value in enumerate(r):
t = int(keys[index])
is_cache = ((index + 1) != len(r))
if not value:
v = get_kline_point(market_type, period_type, t, t + interval)
if v[5] == 0:
if not last_v:
continue
last_close = last_v[4]
v[1] = last_close # open
v[2] = last_close # high
v[3] = last_close # low
v[4] = last_close # close
if is_cache: // 防至缓存
redis_store.hset(market_type + '_hash_trade_kline_' + period_type, t, json.dumps(v))
else:
v = json.loads(value) // 直接读取缓存
points.append(v)
last_v = v
return points
值得一提的是,如果当前周期没有成交,那怎么办?如果没有成交,那么开盘价、收盘价、最高价、最低价要以昨日的收盘价为准,这样才能保证K线是平滑变化的,而不会因为这个周期没有成交量,而导致K线断开,或者突然跌到0。
K线是在前端进行绘制的,通过highlight或者Trading View等一些专业的K线绘制工具,就能将K线数据绘制出来了,一般只要配置组件的参数,将请求得到的数据放入即可,另外,MA7、MA30等一些指标,组件也可以自动根据历史数据计算出来。
MA7,即过往七个周期的收盘价格的移动平均值,依此类推,MA30,就是30个周期的收盘价格的移动平均值。所谓移动,就是说随着周期往前移动,进入一个最新数据,就会剔除一个最老数据,类似一个队列一样。MA值能够反映价格的变化趋势,是人们判断价格走势的常用工具。虽然无需我们自己计算,但我们不妨看看它们的计算公式:
对于用户的挂单,我们往往要展示一个深度图。深度图展示的是买卖单的价格及数量情况,通过对比买盘和买盘,我们就知道是买盘强劲还是买盘强劲,以及交易的活跃程度。
如上图的深度图,展示了各个价格的买卖量,然后根据买卖数量,来绘制红色区块和绿色区块的长度。这个长度是由两个因素决定的,一个是该档价格的累计委托量,这个累计委托量的意思就是,这个量是所有上的数量一直加下来累加的,而不仅仅是这档价格的量,它将作为分子,另外一个是所有委买或者委卖的量里面的最大值。比如,价格为0.0043这档,买入合计529.44,而总体的买入合计为1739,总体卖出为7867。则这一个块的绿色部分长度就是 529.44 / 7867 * 方块最大长度。我们可以看到上图右侧的卖出合计比较大,所以它的红色色块会长一点。
很多经验,自己不试一次,还真就不知道K线是这样绘制出来的,而这也仅仅只是金融图表的最简单的一种,金融领域还有很多指标可以用来反映价格和市场的变化,如果能够掌握它们,用来帮助自己或者用户来把握趋势,都是意义的事情。
上一篇《数字货币盈利模式》里面提到,DApp是未来数字货币领域的一个比较强大的盈利模式。区块链,作为一个基础设施,提供了分布式的去中心化可信数据库,人们可以基于此,可以开发各种应用,适用于不同的场景。然而,由于区块链的独特特性,适用于比特币的,并不适用于其它应用,在开发应用之前,首先要问自己几个问题:
是,可以用区块链技术,不是,不要用区块链技术。
需要涉及不信任的多方,要通过上链的方式,对方可以只验证链上的数据而不验证对方身份,从而简化这个验证过程。假如链上数据可能涉及很多人,这个涉及的人员或角色越多越好,解决100万人的信任比起仅仅解决两个的信任要好。比特币就是既能解决两个人的信任(比如一次交易),重复该模式(不断累积的交易),也能解决n个人的信任。
是,不要用区块链技术,不是,可以用区块链技术。
区块链是典型的去中心化的一个共识系统,比特币平均十分钟才能出一个块,ETH平均十几秒一个块,这得要多有耐心才能忍受这样使用应用啊。一些对体验要求高的游戏、即时通讯等并不适合区块链,除非特别重视信任。
是,不要用区块链技术,不是,可以用区块链技术。
区块链冗余了很多很多份数据存储在分布式的网络中,链上存储的数据是非常昂贵的,区块大小有限,大量的数据根本没法在区块链上进行存储。如果要存,倒是可以使用IPFS等第三方的方式存储,链上只放一个链接即可。
是,可以用区块链技术,不是,不用区块链技术。
区块链为的就是公开透明,如果都是一些私密数据,仅本人看的,那还是不要上传到链上了。
要,不要用区块链技术,不要,可以用区块链技术。
就目前来说,对于区块链的特性,以上问题是判断要不要做一个区块链应用的回答。
我们原有的计算机技术或者互联网里面,已经有相当多的技术模型,而区块链可以类比成以下的模型:
可以将区块链看成是一个需要付费的公共数据库,要写数据,得付出矿工费。写在上面的数据,你可以加密,也可以不加密。
可以将区块链看成是一个世界各地消息流淌的一个消息队列,你可以取阅任何上面公开的信息,并且用逻辑控制数据的流淌和处理。
区块链就像一个网页一样,上面可以有各种各样的链接,链到互联网世界的其它地方。
区块链中还可以存储智能合约(一段程序),你在上面写好代码,可以让矿工来帮你运行,计算得到结果。
区块链是一个综合的技术,其实也说明区块链是可以分层的,由上至下大致可以分为:
还可以修改其组成来达到优化的目的:
现在在各种各样的公链上,已经涌现了许多的应用,我们分别来认识几个典型的应用。这里有一个搜罗了DApp的网站。
遵守ERC20协议,可以在ETH上发行自己的代币(子货币),它更加轻量和灵活,无需自行开发公链即可发行数字资产。ERC20这个协议定义了合约暴露的一些接口,符合这些功能和接口定义的,即符合ERC20协议。ICO发起者们部署一套智能合约,将Token分发给用户,人们像维护传统数字货币一样维护这些代币,可以查询余额、转账(充值、提现)。
ERC20协议衍生出来一个新的领域——ICO,因为人人都可以发行数字资产,所以很多个人或者项目纷纷通过发行数字资产的方式来筹集资金,用Token来换取用户的真金白银。这是一个很好的融资工具,连美剧《硅谷》里面的piedpiper都用它来发行了一个币以取代3000万美金的B轮融资,然而现实社会里却有许多人滥用它来割韭菜,只能说韭菜们别哭。
ETH上很火的一个游戏,开发者将猫的基因信息存储在ETH的区块链中,初代猫生成后,可以交配,买卖。众多用户充值进来买猫,导致这个应用一度将ETH的区块给搞堵了,由于ETH没有做应用隔离,所以一堵全堵,ETH上的其它应用也全都受到影响,这点被人们所诟病,而区块链的性能问题也暴露无遗。
我运行过ETH的节点,对机器的配置要求非常高,既需要大量CPU计算,也需要大量内存,还需要大量硬盘空间。网络稍微堵一点,整个节点就会变得不稳定,RPC容易失败。
事实上,大部分的DApp其实是游戏,这里也说明游戏+区块链也有它独特的应用场景。
基于BCH的去中心化微博,通过定义一些协议,将用户的发推、点赞、评论、关注、取消关注等操作,都写到区块链上,这样就形成了一个简易的微博系统。技术上,使用OP_RETURN操作码后面的数据字段来存储操作及应用数据,去中心化的Youtube很快就会出现,至少一些雏形(如Jukebox.cash)已经出现了。
其实比特币出现之后的早期,就有人通过在区块缝隙里面塞些额外的数据来做一些应用,最简单的就是区块链刻字了,将一些有纪念意义的话刻在区块链上,它会与区块链同在,变得不可磨灭、不可撤销。ETH上,还有人将色情图片放到区块链上去,以此来告诫人们,区块链的两面性,它既能永久保存美好的东西,也能让不好的东西不可磨灭,你拿它没半点办法。
更多DApp的例子,也可以看看这篇浅谈你们根本不懂的区块链游戏。
未来的DApp发展有两个比较明确的方向,一方面,区块链的基础设施不断升级完善,处理能力和存储数据容量逐渐增长,DApp运行所需的“水”和“电”基础设施逐渐齐备;另外一方面,DApp的应用开发蓬勃发展,越来越多开发人员参与到DApp的开发中来,将区块链与游戏等传统应用结合起来。
BCH、EOS、NAS等各个公链也在逐步升级完善,比如BCH通过扩容,使得每一个交易的花费只需几分钱,成本极低,在5月15号还将区块大小扩展至32MB,增加计算相关操作码,并且拓展OP_RETRUN至220个字节,可以存储更多的数据,这些都为其上生长应用非常有帮助。
旧的互联网已经让人觉得厌倦了,人们渴望新的东西!币圈一直都在等着区块链技术的应用落地,而一个爆款应用的产生,将会带来巨大的颠覆,它值得期待。
假如将人比作一台电脑,需要输入信息,存储数据,运算思考,输出表达。而其中输入信息,作为第一步,也是非常重要的。那么作为一个成年人,应当怎么样去收集信息,才能够尽可能快,尽可能全面呢?
从小到大,其实从来没有人教过我们如何收集信息,而这看起来好像是一个无意识的过程。不就是刷刷微博、看看新闻、读读书、看看文章嘛,大家都会嘛。然而,这种无意识,往往不是最有效的方式,甚至会让你觉得非常苦恼。
我一直在思考这个问题,如何搭建自己的信息收集渠道?因为过去收集信息,没有一个完整的体系,都是无头的苍蝇,乱撞。在浏览信息的时候,还容易因为一些别的话题将注意力分散开,像猴子掰玉米一样,大量的时间花在不断地分心上面,真正关心的信息却没有找到。
首先,在找到答案前,先让我们确立一些原则。作为一个成年人,应当具备结构化的思维,这个是我的一个指导原则之一。其实我们遇到的大多数问题,是因为没有结构化思维工具,所以才会不知如何下手,不知道怎么收集信息,不知道怎么思考,不知道怎么做决定,等等。这些问题,统统都是因为没有一个稳定的思维结构,注定会导致过程的混乱和随意,最终得不到一个满意的答案。
结构化思维方法具有很多优势,它将问题拆分成更多维度,之前想到的是一个个零散的点,而结构化思维,让你从一个面、一个体、或者更高维度的视角去分析问题。这种多维度,让你看到事物的很多面,对事情有更加清晰的认识,将会帮助你解决手头的问题。
这个纷繁复杂的世界,就是由很多很多类的事物组成,而每一样事物,都有其规律可循,通过多个维度的观察、总结,那么你就更能掌握了这个规律,从而使得做起事情很轻松。
信息收集也一样,有它特有的方法论,总结了这种方法论,可以为绝大多数人、绝大多数场景使用。
信息包含了几种类型:
我们的信息组成应当是一个同心圆,核心是一些最重要的结构化知识,这些知识需要艰苦地学习才能获得,成为我们思考和行动的最主要依据。比如从小接受的科学教育,让我们理解这个世界是由粒子组成,再比如,你的工作技能,需要辛苦习得,而且每天都在应用,这是我们每个人吃饭的家伙。
我们的信息结构不断完善的过程,就是新知识不断加入,融汇贯通到已有的结构里面,成为你信息结构的一部分。这个过程也是你的信息圈不断扩大的过程,它看起来就像是下面这样。
根据二八法则,核心知识在我们的信息里面,是最重要的百分之八十,它们起的作用最大,而剩下的零散知识点和即时信息,则没有那么重要了。零散知识点可以作为我们扩展信息广度的方法,快速了解一些未掌握的信息。而即时信息,比如新闻、微博等,大多时候作为我们的一个社交谈资,作为一个普通人,你谈不谈论世界杯,也并不会对你生活有什么很大的影响。
重要的信息,需要我们花时间花精力去掌握,一门课程、一本书籍、一种技能,都需要扎扎实实地花时间去搭建整个结构。比如练吉他,首先需要知道一些简单的乐理,然后学会和弦、看谱,然后勤奋练习,最终才有可能弹奏出一首曲子来;而即时消息,则可以用一些碎片时间来刷,上班路上,刷一刷微信公众号和朋友圈,看看有啥新鲜事在发生。
所以时间分配上是:**80%时间放在核心知识,剩余20%**放在零散知识点和即时信息。
每个人都有自己常用的信息渠道,常见的有几种:
举个例子:小郑,是区块链工程师,他本科通过计算机科学专业的学习,掌握了编程的技能,他通过阅读技术书籍来学习新的技术,提高自己的水平,有时候他也逛逛知名博客以及开发者社区,了解一些技术动向。此外,他每天通过Reddit或者微博,看到一些新鲜事,他通过数字货币交流群里获得一些币圈消息,也会看朋友圈里面,大家发了什么新动态。
那么怎么设计自己的信息获取渠道呢?推荐的方法如下:
时间上:
行动上:
无论收集的信息多么准确,多么及时,圈子多么大,最重要的还是我们自己,对关键信息是否敏感,对于信息的提取和利用是否有效。
如果对关键信息不敏感,那么也还是抓不住机会,比如,很早就知道比特币的人,可能通过朋友之口或者某个文章得知,但最终知道了就知道了,并没有深挖,也没有进一步行动,最终大腿拍烂,而有的人,抓住了一个信息,深挖下去,获得了回报。
对信息的提取和利用,如果获得了信息,首先要评判信息的真伪可靠性,做一些基本的调查和过滤,才能为你所用,而不能听风就是雨,这样你将会成为信息的奴隶,而不是信息的主人。
那么我们就要有意地锻炼自己的信息敏感度和提取信息、利用信息的能力,得到最新的消息,要试着想想这个消息蕴含着什么隐藏信息,是否代表着什么趋势和潮流,值不值得深挖下去。如果值得,那么深挖下去就好了,最终将信息为你所用。
信息,总是无处不在的,在于你用发现的眼光去看待它,并且找到一种合适的方法, 沉淀下来,最终成为你的一部分。
众所周知,比特币是基于椭圆曲线的非对称加密技术而建立的,而比特币的公私钥可以天然地作为身份认证的凭据。
借鉴于Bitpay的bitauth,我们设计了一款能够做签名和认证的小工具,具体的功能如下:
该协议应该能够支持:
协议如下:
签名请求
ifpass://sign?address=xxx&msg=xxx&callback_url=xxx
验证请求
ifpass://verify?address=xxx&msg=xxx&sig=xxx&callback_url=xxx
第三方开发者的程序,可以是网站或者App,能够通过该协议发起一个签名请求或者是验证请求。该请求通过二维码或者SDK调用的方式呈现。
第一种情况,呈现二维码,则用户通过客户端扫码,即可解析出请求中的参数,并进行处理。
第二种情况,调用SDK,请求App调起客户端进行处理。
返回值可以通过callback_url告知给第三方,同时用户界面上也呈现相关结果。
该方案目前还不太成熟,其中涉及回调的部分,需要解决第三方与服务方(我们)的信任问题。改进的做法是,让对方在调用时,必须提供对callback_url的签名及该私钥对应的公钥。
其中,涉及三方的交互:
BIP全称Bitcoin Improvement Proposal,意为比特币改善提案,是人们提出的改进比特币及其应用的一个工具,通过收集各种提案,通过讨论,大家能够推进比特币的发展和改良。有意思的是,BIP的第一个提案,就是关于BIP的详细提案规则。
我们今天使用比特币钱包能如此方便,要感谢BIP21,接下来我们详细分析一下BIP21。
这个提案要解决的是比特币应用层(这里指钱包)的一个扫码及链接支付的标准提议。该提议介绍了一种URI的语法,这种URI语法可以使得用户可以通过一个链接来发起一笔交易,交易里面指定了一些参数,如金额、备注等,当然这个链接也可以编码成一个二维码,用户通过钱包扫码,就能理解获得一个支付地址。BIP21使得比特币的支付非常简单和普及,该标准使得可以在众多钱包中相互转账,甚至在页面里面实现点击链接转账。
对于请求支付的人来说,应该按照这个标准来构造这样一个URI,或者是二维码,而对于支付方,则需要能够解析对方给出的URI,把里面的关键信息提取出来,完成后续的转账操作。其实这两个步骤,一般都不需要用户介入,钱包商会搞定一切,最终钱包用起来就像是微信支付一样,非常方便。
提案提议的格式如下:
// 协议:地址?参数串
"bitcoin": bitcoinaddress [ "?" bitcoinparams ]
// 地址为base58编码的字符串
bitcoinaddress = *base58
// 参数串由一个个参数用&连接起来
bitcoinparams = bitcoinparam [ "&" bitcoinparams ]
// 参数类型
bitcoinparam = [ amountparam / labelparam / messageparam / otherparam / reqparam ]
// amount 参数:amount=数字
amountparam = "amount=" *digit [ "." *digit ]
// label 参数:label=字符串
labelparam = "label=" *qchar
// message 参数:message=字符串
messageparam = "message=" *qchar
// 其它自定义参数:参数名=参数值
otherparam = qchar *qchar [ "=" *qchar ]
// req参数:req-参数名=参数值
reqparam = "req-" qchar *qchar [ "=" *qchar ]
从上面的定义和注释我们可以看出它和网页URL很相似,也是一个协议,加地址,再带上若干参数。实际上除了双斜杠之外,其它基本是一样的,而且该提案定义了几个参数,如amount/label/message等。
bitcoin协议名可以大写也可以小写,但是各个参数名是大小写敏感的,不能随便更改。
上面的协议其实还是略微复杂难懂,简化版本如下:
bitcoin:<address>[?amount=<amount>][?label=<label>][?message=<message>]
举个例子,bibo请求一个20.3BTC的捐赠:
bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=20.3&label=bibo&message=donation
扫码者,将通过钱包支付给比特币地址175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W
一笔20.3 BTC
的转账,标记为bibo
,备注为donation
。
什么是粉尘交易,或者说粉尘交易的定义是什么,对于开发者来还是比较重要的。钱包或者交易所等基础设施,如果一不小心构造出一个粉尘交易,是无法广播到网络,被矿工打包的,这样会严重影响到用户体验。另外一方面,粉尘交易也和区块链网络安全息息相关,如果如果网络中充斥着一些微不足道的交易,而矿工们毫无差别地打包交易,那么这些价值小,但是总体体积很大的交易,就会阻碍到其它正常交易的打包确认。粉尘交易也可以看成是区块链网络上DDOS攻击的一种,攻击者通过发送许多这样小金额的交易,来堵塞整个网络。
那么有没有确切的标准来判定一笔交易是不是“粉尘交易”呢?答案是有点。
通过一番搜寻,得到一个普遍的答案:
/**
也就是说,在比特币的网络中,如果交易费用高于1/3的交易价值,则被视为粉尘交易,说完了。
常规的来说,一个P2PKH交易,由于其最小体积时为一个输入,一个输出,总共 '148 + 34 = 182' 字节,而交易手续费是由每个节点配置的minRelayTxFee(比特币中默认为'0.00001BTC/KB')决定的,故而手续费就是 '182 / 1000 * minRelayTxFee',那么其的3倍即 '546 / 1000 * minRelayTxFee',也即默认为 0.00000546 BTC,在BCH网络上也是一样的。
其它类型的交易以此类推,交易中输出金额有低于 '体积 * 3 / 1000 * minRelayTxFee' 的,即为粉尘交易。
我在BCH的网络上亲自试验了一番,对于P2PKH交易果真是如此,大于等于0.00000546的交易可以发出,而小于0.00000546的交易,则无法发出。
既然知道了粉尘交易的定义,那么我们就可以按照定义,避免构造出粉尘交易了。首先,可以在构造交易的过程中,根据交易的类型,计算出交易的最低金额,同时对每个输出进行判断,如果低于该金额,则不能继续构造该笔交易。特别的,如果这个输出刚好发生在找零上,且金额对于你来说不太大,则可以通过舍弃该部分的粉尘输出,以充作交易手续费来避免构造出粉尘交易。
如果一个区块能够容纳的交易数量越来越多,币也变得越来越值钱,即使是1聪也值很多钱,则这个规则有可能被改变。不过,现在的定义非常巧妙,足以支持到足够久远的未来,定义的公式中,所用到的 minRelayTxFee 是由节点决定的,而节点可以将这个值设置的更低,以容纳更低手续费的交易,但是这必须要得到网络中其它成员的认可,才能保证该交易被其它矿工打包。具有交易加速器的矿池,其实就是将这个值设置得足够低,才能打包那些不被网络确认的交易,从而提高交易的虚拟手续费,通过插队的方式,完成确认。如果要在网络中达成一致地修改配置,最好是通过一次硬分叉,大家统一修改,算是对共识的升级。
by bibodeng
2018-08-28
数字货币是否有自己的盈利模式?答案是,有的。
从比特币诞生开始,数字货币发展至今已经将近十年的时间。这十年内,数字货币价格大起大落,许多人投身到这个领域,有的赚得盆满钵满,有的则亏得倾家荡产。我们都知道,炒币总是有风险的,然而这其中,有一些聪明人,从中把握住了稳定可靠的盈利模式,从而分得了一杯羹,并且在行业内具有稳固的积淀。
互联网发展至今,因为一开始奠定了免费的基础,但后来人们基于免费的互联网服务又发现了以下几种盈利模式:
数字货币领域方兴未艾,但是却已经形成它独特的盈利模式,主要分为这么几大类:
今天对发token,硬分叉等盈利模式不予谈论,因为这其实是一种对某种想法的ICO,其目的不应该是赚钱,虽然很多人很多项目通过这种方法收割韭菜,大赚一笔。
由于比特币等数字货币天然需要通过挖矿来获得,大家自然而然就会去研发各种高性能的矿机,币圈的矿机厂商 比特大陆、阿瓦隆 等就是通过研发矿机,然后销售出去赚钱。由于数字货币价格不断上涨,一台机器成本其实并不会比PC更高,然而由于供求关系导致,价格却远比一台PC要高,这中间的利润也可想而知。只要能生产出来,销售出去,矿机生产是一个非常好的盈利模式。
代表商家:比特大陆,嘉楠耘智
单打独斗的挖矿现在已然行不通了,不需要聚集大家的算力一起,才能够挖出区块,获得稳定的收益。为了满足这种刚需,矿池就这么诞生了。矿池集合了成千上万矿工的算力,来解答由共识机制给出的难题,并且按照PPS、PPLNS等方式给矿工分配收益,并且从中收取挖矿手续费赚钱。长期来看,矿池是一个稳赚不赔的生意,但是它需要承担由于出块随机性导致的收益不稳定风险(也即需要垫付收益),但是总体来看,挖矿的运气值总是接近于100%的,这是数学层面决定的。
在矿机矿池上衍生出来的,还有云挖矿的一个盈利模式,通过将一个个矿机打包成一个个虚拟的稳定的单位算力来出售,有点类似阿里云一样,只不过配置简单很多,只要购买了,就享有这份算力的收益权,用户将每天获得收益。这种盈利模式,通过方便用户参与挖矿,同时赚取差价、手续费、管理费来赚钱。
代表商家:Antpool, f2pool, ViaBTC
币圈最不缺的,就是交易所了,现在可谓是到处都是交易所,币币交易所、现货期货交易所等等,我们耳熟能详的OKEX,火币,币安,ZB等这些都是交易所,它们通过收取交易手续费赚取利润,由于交易的需求量很大,而且该盈利模式非常稳固,故而这些厂商也是赚的盆满钵满。当然,交易所是有比较大的安全风险的,一旦被黑,可能损失惨重,从此破产一蹶不振。
交易所还衍生出来很多的玩法,有期货交易、点对点交易、投票上币、发token抵扣手续费等等。以期货杠杆为例,由于数字货币价格波动较大,故而很多投机客想要赌一把,故而投资杠杆,将收益放大个几十倍,有可能一夜暴富,当然,也有可能一夜暴负。之前看新闻,一个哥们投资了杠杆,将给小孩治病的钱拿去玩杠杆,最后爆仓亏了一千多万,跑到OKEX去撒农药去了。其实期货本来是个好东西,可以用来平衡现货的风险,然而用于投机,则可能万劫不复,所以还是要谨慎使用。
代表厂商:OKEX,火币,币安,ZB,CoinEx
钱包领域,在**的发展不如上面两个繁荣,其盈利模式也没有那么直接强大。钱包作为基础设施的一环,其实是直接面向用户的,负责储存数字货币,同时作为用户使用货币的一个入口。如果是服务商,可能会搭建一个自己的全节点来做钱包管理,普通用户,可以选择一些客户端钱包来使用。
钱包分为两种模式,一种是Offchain模式,另外一种是Onchain模式,所谓Offchain,就是维护了一个余额,发出的交易不直接上链的,而是通过商家统一发送。例如币信钱包,就是一个Offchain钱包,用户不持有私钥,而比特派、imtoken等,则是Onchain钱包,用户直接持有私钥。数字货币的初衷,就是每个人都要有一个自己的银行,Offchain钱包虽然简单易用,但它是中心化的,集聚了比较大的风险,其实各大交易所及矿池的钱包,就是一个Offchain钱包。
Offchain钱包通过收取提现手续费,或者将多个输出一起打出来盈利,但是一般的Onchain钱包,都已经有开源的钱包,一般不会收取手续费,只会收取一个网络矿工费,是用于奖励矿工的,钱包商不获得这部分利润。那么钱包商可以接入其它一些服务,比如币币兑换、打包理财产品等来实现盈利。
代表厂商:币信、比特派、imtoken
目前,数字货币的DAPP还没有成熟到能够实现体验很好的应用,然而这块将是未来的发展方向。比如之前的以太猫,在ETH之上实现了一个猫游戏的智能合约,用户可以买卖,繁衍小猫,如果玩的人多,创造游戏的人,能够通过这个智能合约赚钱,比如买卖一次收取一定的手续费。如果说DAPP是基于区块链的互联网应用,那么开发这些DAPP的人,是可以直接通过使用DAPP的用户赚取利润的,基于这之上有非常多的玩法,之前互联网的盈利模式,也适用于DAPP。
未来例如EOS、NEO等公链能够支撑更多功能和应用时,将会涌现一大批开发DAPP的团队,作出一些很有意思的应用,并且通过这些应用,实现价值的流通传递。
代表案例:以太猫
数字货币中赚钱的方式有许多种,然而大类的稳固的需求就那么一些:挖矿、炒币、存币、做应用。所以只要是一些刚需,必然会诞生出一个稳固的产业和盈利模式。目前对于数字货币而言,还没有特别多的应用落地,所以最重要的就是挖掘其使用场景,提高其性能,科普民众,相信坚持这样做的企业,将会得到丰厚的犒赏。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.