Coder Social home page Coder Social logo

bymind.github.io's People

Contributors

cryptoz258 avatar

Watchers

 avatar  avatar

Forkers

tinide

bymind.github.io's Issues

一款BCH DAPP的诞生

DApp的兴起

现在的区块链,处在一个爆发的前夕,之前的ICO狂躁,带来了一定的迷茫,但是大家都在说2018年是区块链应用元年,今年一定会有区块链的杀手级应用落地,然而得有人不断地在里面投入和试错,才能诞生这么一个杀手级应用。为此我们也进行了初期的尝试,基于BCH的公链,做了一款身份验证、密码管理的应用。做区块链DApp的过程中,时常会怀疑自己做的是不是伪需求,因为区块链的个性鲜明,使得开发起来挺别扭的。虽然获得了数据的安全性,但是开发效率却不高,需要自己定义一套协议,存取的方式也需要做一次加解密。

报名BCH Geek大赛

近期,刚好来自重庆的盖茨实验室举办了一场BCH和EOS社区的极客大赛,大赛吸引了一批开发者和在校大学生的踊跃参与,从中也诞生了许多的优秀的应用,给我们带来许多启发,虽然暂时还只是一个雏形,不能有清晰明确的商业模式,但也是非常伟大的尝试。当然,我们也报名参加了这次的大赛,虽然仅了解了一点皮毛,但是我们还是鼓起勇气报名了。

我们给战队取名叫【神雕侠侣】,因为神雕侠和satoshi还挺谐音的,算是致敬中本聪吧。我们团队由两人组成,一个是我,另外一个是我女朋友,两个人一个负责开发,一个负责产品和运营。

image
邓国东,曾任职于腾讯、ViaBTC,从事Web系统、数字货币矿池及钱包开发,是一个面向全栈的技术开发人员。有志于通过技术,让更多人从区块链中受益。

image
杨春萍,任职于漫游超人,擅长品牌及产品社交媒体运营运营,精通两微一端及数字媒体传播,曾主要负责漫游超人品牌植入《唐人街探案2》项目营销。

刚上台介绍战队的时候,我一个人上去,他们以为我是那只雕。。。
既然报名了,那就硬着头皮也要上,于是也赶工了几天,终于将这个demo给做出来了。

为啥要做一个密码管理DApp

我们生活中需要使用到非常多的账号密码,然而这里有非常多的安全隐患,有许多人使用的账号密码甚至泄露已久,相当于在互联网里面裸奔,并没有什么隐私可言,甚至切身利益有可能被人随时掠夺。就密码来说,我们有许多的痛点:

  • 密码多(多到记不住)
  • 密码弱(密码很容易破解)
  • 密码重复(一个被破解,连带其它遭殃)
  • 不好输入(手动输入很繁琐)

我一开始就有一个愿望解决这些真实存在的痛点,能否开发一个使用区块链作为分布式存储方案的密码管理器呢?
答案是可行的,参考LastPass和1Password等竞品后,我们设计出了IFPassword,基本思路如下:

  • IFPassword配套有网站、小程序、浏览器插件
  • 用户通过浏览器插件可方便地添加账号密码、填写账号密码
  • 重要的密码数据将存储在去中心化存储上
  • 不重要的信息存储在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进制写入了交易中,广播出去之后,就可以在区块链浏览器中看到这样的数据了,这个数据就是日后恢复数据的关键,不过千万不能把私钥给泄露了出去,泄露出去拿到私钥的人就可以解密这段消息了。
image

最终效果

编程实现了上述的写入区块链的逻辑以及相关的交互之后,大致的最终效果如下:

image
用插件管理TOTP二次验证,实现快速查看填写。

image
在插件中添加站点的账号密码。

image
在插件中查看各个网站的账号密码,可以复制粘贴到登录表单中。

启发

现在的互联网进入移动互联网以后,变成了一个个信息孤岛,大家在岛上玩得不亦乐乎,但是如果一个岛要到另外一个岛,那成本就高了。然而发明互联网的初衷,就是让人与人、人与物能够互相联通,然而现在却是越来越封闭了,并且原本属于用户的数据以及权利,被各个大公司垄断,并且他们还不能提供连续的服务,说不定哪天说停就停。我们需要一个能够持久存储你的数字资产的东西,一个人人能够使用,信息能够充分流淌的工具,就像早期的互联网一样,在上面探索可以不断发现新的东西,在区块链上,也是这样,顺藤摸瓜,能够发现许多的新东西。

我们做的这个玩意,它对我们还是有一点启发的:

  1. 数据是用户的资产,用户可以选择公开、加密它,也可以选择转让、授权给他人
  2. 数据是不需要依赖一个中心的,大家存储,大家使用,突破空间、突破时间的限制

未来,信息存储的方式以及内容分发的方式将产生极大的改变,试想这样一个问题,你是如何存储你的所有照片的?存在自己硬盘,需要常常备份,还是存在照片管理软件或在线空间,非常不方便管理和移动。然而,其实你的照片可以存储得无处不在,随时要随时取,并且永久保存,不会消失,你拥有对它的所有权利,你可以加密,你可以卖给别人,可以授权他人使用,等等。用户将重新获得数据的自由。

K线和深度图的实现

K线和深度图在股票及数字货币交易中到处可见,然而这个K线和深度图的实现,如果没有真实写过一次,对里面的一些坑还是有可能避免不了。最近由于我们的产品中开发了一个云算力合约的交易K线,所以我也实现了一个简单的K线图和深度图。

K线长下面这样:
image

要实现一个K线,首先要知道K线是什么,K线由于长得就像一根根蜡烛,所以又被称为蜡烛图,是用来反映价格走势的一种图表。K线可以按照不同的周期进行划分,例如15分钟、1小时、1天等等,它的每一根“蜡烛”反映的是那个周期内的开盘价、收盘价、最高价和最低价,而底部还会有一个成交量。

image

K线的开盘价,就是“蜡烛”矩形的底边或者顶边,收盘价就是另外一边,绘制时,先绘制开盘价,如果收盘价高于开盘价,那么就绘制在开盘价上方,整个矩形的颜色是绿色(假设绿涨红跌),反之,则这个周期内是跌的,则会绘制成红色。

每根蜡烛,还会有一根细线贯穿,这根就叫“引线”,引线顶端代表该周期的最高价,底端代表着最低价,这根引线反应了这个周期内的价格震动幅度。

一根根蜡烛排列起来,就能看到价格的走势,一眼就可以看出是涨是跌,同时也能看住单个周期内的涨跌情况。一般除了蜡烛之外,还有一些其它指标,如MACD,KDJ等。这里讨论比较常见的MACD,也即平滑异同移动均线,它是采用每个周期的收盘价,做一个平均值,有MA7、MA30等不同周期长度的平均值,一般绘制K线的组件已经提供了该功能,只要填入数据,它将自动计算该周期及前六个周期的收盘价平均值,如果不满七个周期,那么则不计算。

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线的绘制

K线是在前端进行绘制的,通过highlight或者Trading View等一些专业的K线绘制工具,就能将K线数据绘制出来了,一般只要配置组件的参数,将请求得到的数据放入即可,另外,MA7、MA30等一些指标,组件也可以自动根据历史数据计算出来。

MA7,即过往七个周期的收盘价格的移动平均值,依此类推,MA30,就是30个周期的收盘价格的移动平均值。所谓移动,就是说随着周期往前移动,进入一个最新数据,就会剔除一个最老数据,类似一个队列一样。MA值能够反映价格的变化趋势,是人们判断价格走势的常用工具。虽然无需我们自己计算,但我们不妨看看它们的计算公式:

image

深度图

对于用户的挂单,我们往往要展示一个深度图。深度图展示的是买卖单的价格及数量情况,通过对比买盘和买盘,我们就知道是买盘强劲还是买盘强劲,以及交易的活跃程度。

image

如上图的深度图,展示了各个价格的买卖量,然后根据买卖数量,来绘制红色区块和绿色区块的长度。这个长度是由两个因素决定的,一个是该档价格的累计委托量,这个累计委托量的意思就是,这个量是所有上的数量一直加下来累加的,而不仅仅是这档价格的量,它将作为分子,另外一个是所有委买或者委卖的量里面的最大值。比如,价格为0.0043这档,买入合计529.44,而总体的买入合计为1739,总体卖出为7867。则这一个块的绿色部分长度就是 529.44 / 7867 * 方块最大长度。我们可以看到上图右侧的卖出合计比较大,所以它的红色色块会长一点。

结语

很多经验,自己不试一次,还真就不知道K线是这样绘制出来的,而这也仅仅只是金融图表的最简单的一种,金融领域还有很多指标可以用来反映价格和市场的变化,如果能够掌握它们,用来帮助自己或者用户来把握趋势,都是意义的事情。

粉尘交易的定义与处理

什么是粉尘交易?

什么是粉尘交易,或者说粉尘交易的定义是什么,对于开发者来还是比较重要的。钱包或者交易所等基础设施,如果一不小心构造出一个粉尘交易,是无法广播到网络,被矿工打包的,这样会严重影响到用户体验。另外一方面,粉尘交易也和区块链网络安全息息相关,如果如果网络中充斥着一些微不足道的交易,而矿工们毫无差别地打包交易,那么这些价值小,但是总体体积很大的交易,就会阻碍到其它正常交易的打包确认。粉尘交易也可以看成是区块链网络上DDOS攻击的一种,攻击者通过发送许多这样小金额的交易,来堵塞整个网络。

那么有没有确切的标准来判定一笔交易是不是“粉尘交易”呢?答案是有点。

通过一番搜寻,得到一个普遍的答案:

/**

  • "Dust" is defined in terms of CTransaction::minRelayTxFee, which has
  • units satoshis-per-kilobyte. If you'd pay more than 1/3 in fees to
  • spend something, then we consider it dust. A typical spendable
  • non-segwit txout is 34 bytes big, and will need a CTxIn of at least
  • 148 bytes to spend: so dust is a spendable txout less than
  • 546*minRelayTxFee/1000 (in satoshis). A typical spendable segwit
  • txout is 31 bytes big, and will need a CTxIn of at least 67 bytes to
  • spend: so dust is a spendable txout less than 294*minRelayTxFee/1000
  • (in satoshis).
    */

也就是说,在比特币的网络中,如果交易费用高于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的交易,则无法发出。
image

如何避免粉尘交易

既然知道了粉尘交易的定义,那么我们就可以按照定义,避免构造出粉尘交易了。首先,可以在构造交易的过程中,根据交易的类型,计算出交易的最低金额,同时对每个输出进行判断,如果低于该金额,则不能继续构造该笔交易。特别的,如果这个输出刚好发生在找零上,且金额对于你来说不太大,则可以通过舍弃该部分的粉尘输出,以充作交易手续费来避免构造出粉尘交易。

发展中的问题

如果一个区块能够容纳的交易数量越来越多,币也变得越来越值钱,即使是1聪也值很多钱,则这个规则有可能被改变。不过,现在的定义非常巧妙,足以支持到足够久远的未来,定义的公式中,所用到的 minRelayTxFee 是由节点决定的,而节点可以将这个值设置的更低,以容纳更低手续费的交易,但是这必须要得到网络中其它成员的认可,才能保证该交易被其它矿工打包。具有交易加速器的矿池,其实就是将这个值设置得足够低,才能打包那些不被网络确认的交易,从而提高交易的虚拟手续费,通过插队的方式,完成确认。如果要在网络中达成一致地修改配置,最好是通过一次硬分叉,大家统一修改,算是对共识的升级。

by bibodeng
2018-08-28

浅谈区块链应用DApp

区块链应用

上一篇《数字货币盈利模式》里面提到,DApp是未来数字货币领域的一个比较强大的盈利模式。区块链,作为一个基础设施,提供了分布式的去中心化可信数据库,人们可以基于此,可以开发各种应用,适用于不同的场景。然而,由于区块链的独特特性,适用于比特币的,并不适用于其它应用,在开发应用之前,首先要问自己几个问题:

应用涉及不信任的双方或多方吗?

是,可以用区块链技术,不是,不要用区块链技术。

需要涉及不信任的多方,要通过上链的方式,对方可以只验证链上的数据而不验证对方身份,从而简化这个验证过程。假如链上数据可能涉及很多人,这个涉及的人员或角色越多越好,解决100万人的信任比起仅仅解决两个的信任要好。比特币就是既能解决两个人的信任(比如一次交易),重复该模式(不断累积的交易),也能解决n个人的信任。

应用对性能要求高吗?

是,不要用区块链技术,不是,可以用区块链技术。

区块链是典型的去中心化的一个共识系统,比特币平均十分钟才能出一个块,ETH平均十几秒一个块,这得要多有耐心才能忍受这样使用应用啊。一些对体验要求高的游戏、即时通讯等并不适合区块链,除非特别重视信任。

应用需要大量存储吗?

是,不要用区块链技术,不是,可以用区块链技术。

区块链冗余了很多很多份数据存储在分布式的网络中,链上存储的数据是非常昂贵的,区块大小有限,大量的数据根本没法在区块链上进行存储。如果要存,倒是可以使用IPFS等第三方的方式存储,链上只放一个链接即可。

应用数据要公开透明吗?

是,可以用区块链技术,不是,不用区块链技术。

区块链为的就是公开透明,如果都是一些私密数据,仅本人看的,那还是不要上传到链上了。

应用数据是否要频繁修改?

要,不要用区块链技术,不要,可以用区块链技术。

就目前来说,对于区块链的特性,以上问题是判断要不要做一个区块链应用的回答。


从技术角度看区块链

我们原有的计算机技术或者互联网里面,已经有相当多的技术模型,而区块链可以类比成以下的模型:

数据库

可以将区块链看成是一个需要付费的公共数据库,要写数据,得付出矿工费。写在上面的数据,你可以加密,也可以不加密。

消息队列

可以将区块链看成是一个世界各地消息流淌的一个消息队列,你可以取阅任何上面公开的信息,并且用逻辑控制数据的流淌和处理。

网页

区块链就像一个网页一样,上面可以有各种各样的链接,链到互联网世界的其它地方。

云计算

区块链中还可以存储智能合约(一段程序),你在上面写好代码,可以让矿工来帮你运行,计算得到结果。

区块链是一个综合的技术,其实也说明区块链是可以分层的,由上至下大致可以分为:

  • 应用层(外部应用)
  • 业务层(链上协议)
  • 共识层(共识机制)
  • 存储层+网络层

还可以修改其组成来达到优化的目的:

  • 修改共识机制,在完全去中心化和中心化之间平衡(PoW/PoS/DPoS/DAG/超级节点等)
  • 为扩大存储,采用更灵活的外部存储(IPFS、SC等)
  • 强化智能合约,提供更强大的应用运行环境(EOS、星云链、小蚁股等)

已有的DApp

现在在各种各样的公链上,已经涌现了许多的应用,我们分别来认识几个典型的应用。这里有一个搜罗了DApp的网站

发币——ETH的ERC20协议

遵守ERC20协议,可以在ETH上发行自己的代币(子货币),它更加轻量和灵活,无需自行开发公链即可发行数字资产。ERC20这个协议定义了合约暴露的一些接口,符合这些功能和接口定义的,即符合ERC20协议。ICO发起者们部署一套智能合约,将Token分发给用户,人们像维护传统数字货币一样维护这些代币,可以查询余额、转账(充值、提现)。

ERC20协议衍生出来一个新的领域——ICO,因为人人都可以发行数字资产,所以很多个人或者项目纷纷通过发行数字资产的方式来筹集资金,用Token来换取用户的真金白银。这是一个很好的融资工具,连美剧《硅谷》里面的piedpiper都用它来发行了一个币以取代3000万美金的B轮融资,然而现实社会里却有许多人滥用它来割韭菜,只能说韭菜们别哭。

迷恋猫 Crypto Kitties

ETH上很火的一个游戏,开发者将猫的基因信息存储在ETH的区块链中,初代猫生成后,可以交配,买卖。众多用户充值进来买猫,导致这个应用一度将ETH的区块给搞堵了,由于ETH没有做应用隔离,所以一堵全堵,ETH上的其它应用也全都受到影响,这点被人们所诟病,而区块链的性能问题也暴露无遗。

我运行过ETH的节点,对机器的配置要求非常高,既需要大量CPU计算,也需要大量内存,还需要大量硬盘空间。网络稍微堵一点,整个节点就会变得不稳定,RPC容易失败。

事实上,大部分的DApp其实是游戏,这里也说明游戏+区块链也有它独特的应用场景。

去中心化微博 Memo/BlockPress

基于BCH的去中心化微博,通过定义一些协议,将用户的发推、点赞、评论、关注、取消关注等操作,都写到区块链上,这样就形成了一个简易的微博系统。技术上,使用OP_RETURN操作码后面的数据字段来存储操作及应用数据,去中心化的Youtube很快就会出现,至少一些雏形(如Jukebox.cash)已经出现了。

其实比特币出现之后的早期,就有人通过在区块缝隙里面塞些额外的数据来做一些应用,最简单的就是区块链刻字了,将一些有纪念意义的话刻在区块链上,它会与区块链同在,变得不可磨灭、不可撤销。ETH上,还有人将色情图片放到区块链上去,以此来告诫人们,区块链的两面性,它既能永久保存美好的东西,也能让不好的东西不可磨灭,你拿它没半点办法。

更多DApp的例子,也可以看看这篇浅谈你们根本不懂的区块链游戏


DApp的方向

未来的DApp发展有两个比较明确的方向,一方面,区块链的基础设施不断升级完善,处理能力和存储数据容量逐渐增长,DApp运行所需的“水”和“电”基础设施逐渐齐备;另外一方面,DApp的应用开发蓬勃发展,越来越多开发人员参与到DApp的开发中来,将区块链与游戏等传统应用结合起来。

BCH、EOS、NAS等各个公链也在逐步升级完善,比如BCH通过扩容,使得每一个交易的花费只需几分钱,成本极低,在5月15号还将区块大小扩展至32MB,增加计算相关操作码,并且拓展OP_RETRUN至220个字节,可以存储更多的数据,这些都为其上生长应用非常有帮助。

旧的互联网已经让人觉得厌倦了,人们渴望新的东西!币圈一直都在等着区块链技术的应用落地,而一个爆款应用的产生,将会带来巨大的颠覆,它值得期待。

解密比特币改善提案BIP21

BIP及提案过程

BIP全称Bitcoin Improvement Proposal,意为比特币改善提案,是人们提出的改进比特币及其应用的一个工具,通过收集各种提案,通过讨论,大家能够推进比特币的发展和改良。有意思的是,BIP的第一个提案,就是关于BIP的详细提案规则。

BIP的提案过程如下:

BIP21

我们今天使用比特币钱包能如此方便,要感谢BIP21,接下来我们详细分析一下BIP21。

这个提案要解决的是比特币应用层(这里指钱包)的一个扫码及链接支付的标准提议。该提议介绍了一种URI的语法,这种URI语法可以使得用户可以通过一个链接来发起一笔交易,交易里面指定了一些参数,如金额、备注等,当然这个链接也可以编码成一个二维码,用户通过钱包扫码,就能理解获得一个支付地址。BIP21使得比特币的支付非常简单和普及,该标准使得可以在众多钱包中相互转账,甚至在页面里面实现点击链接转账。

对于请求支付的人来说,应该按照这个标准来构造这样一个URI,或者是二维码,而对于支付方,则需要能够解析对方给出的URI,把里面的关键信息提取出来,完成后续的转账操作。其实这两个步骤,一般都不需要用户介入,钱包商会搞定一切,最终钱包用起来就像是微信支付一样,非常方便。

BIP32协议内容

提案提议的格式如下:

// 协议:地址?参数串
"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

BIP21的若干语言实现:

数字货币的盈利模式

是否存在盈利模式?

数字货币是否有自己的盈利模式?答案是,有的。
从比特币诞生开始,数字货币发展至今已经将近十年的时间。这十年内,数字货币价格大起大落,许多人投身到这个领域,有的赚得盆满钵满,有的则亏得倾家荡产。我们都知道,炒币总是有风险的,然而这其中,有一些聪明人,从中把握住了稳定可靠的盈利模式,从而分得了一杯羹,并且在行业内具有稳固的积淀。

常见盈利模式

互联网发展至今,因为一开始奠定了免费的基础,但后来人们基于免费的互联网服务又发现了以下几种盈利模式:

  1. 广告
  2. 增值服务
  3. 电商
  4. 金融

数字货币领域方兴未艾,但是却已经形成它独特的盈利模式,主要分为这么几大类:

  1. 矿机矿池
  2. 交易所
  3. 钱包
  4. DAPP

今天对发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

目前,数字货币的DAPP还没有成熟到能够实现体验很好的应用,然而这块将是未来的发展方向。比如之前的以太猫,在ETH之上实现了一个猫游戏的智能合约,用户可以买卖,繁衍小猫,如果玩的人多,创造游戏的人,能够通过这个智能合约赚钱,比如买卖一次收取一定的手续费。如果说DAPP是基于区块链的互联网应用,那么开发这些DAPP的人,是可以直接通过使用DAPP的用户赚取利润的,基于这之上有非常多的玩法,之前互联网的盈利模式,也适用于DAPP。

未来例如EOS、NEO等公链能够支撑更多功能和应用时,将会涌现一大批开发DAPP的团队,作出一些很有意思的应用,并且通过这些应用,实现价值的流通传递。

代表案例:以太猫

小结

数字货币中赚钱的方式有许多种,然而大类的稳固的需求就那么一些:挖矿、炒币、存币、做应用。所以只要是一些刚需,必然会诞生出一个稳固的产业和盈利模式。目前对于数字货币而言,还没有特别多的应用落地,所以最重要的就是挖掘其使用场景,提高其性能,科普民众,相信坚持这样做的企业,将会得到丰厚的犒赏。

IFWallet身份验证器原理设计

众所周知,比特币是基于椭圆曲线的非对称加密技术而建立的,而比特币的公私钥可以天然地作为身份认证的凭据。

借鉴于Bitpay的bitauth,我们设计了一款能够做签名和认证的小工具,具体的功能如下:

  1. 对消息签名
  2. 对签名进行验证

该协议应该能够支持:

  1. 从浏览器、应用程序中读取需要的数据(通过扫码、SDK)
  2. 允许签名结果及验证结果回调到接入的商家

协议如下:
签名请求
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的签名及该私钥对应的公钥。

其中,涉及三方的交互:

  1. 用户(我们提供的客户端)
  2. 服务方 (我们的服务端)
  3. 第三方

成年人应该这样获得信息

人是一台“电脑”

假如将人比作一台电脑,需要输入信息,存储数据,运算思考,输出表达。而其中输入信息,作为第一步,也是非常重要的。那么作为一个成年人,应当怎么样去收集信息,才能够尽可能快,尽可能全面呢?

从小到大,其实从来没有人教过我们如何收集信息,而这看起来好像是一个无意识的过程。不就是刷刷微博、看看新闻、读读书、看看文章嘛,大家都会嘛。然而,这种无意识,往往不是最有效的方式,甚至会让你觉得非常苦恼。

我一直在思考这个问题,如何搭建自己的信息收集渠道?因为过去收集信息,没有一个完整的体系,都是无头的苍蝇,乱撞。在浏览信息的时候,还容易因为一些别的话题将注意力分散开,像猴子掰玉米一样,大量的时间花在不断地分心上面,真正关心的信息却没有找到。

结构化思维方法

首先,在找到答案前,先让我们确立一些原则。作为一个成年人,应当具备结构化的思维,这个是我的一个指导原则之一。其实我们遇到的大多数问题,是因为没有结构化思维工具,所以才会不知如何下手,不知道怎么收集信息,不知道怎么思考,不知道怎么做决定,等等。这些问题,统统都是因为没有一个稳定的思维结构,注定会导致过程的混乱和随意,最终得不到一个满意的答案。

结构化思维方法具有很多优势,它将问题拆分成更多维度,之前想到的是一个个零散的点,而结构化思维,让你从一个面、一个体、或者更高维度的视角去分析问题。这种多维度,让你看到事物的很多面,对事情有更加清晰的认识,将会帮助你解决手头的问题。

这个纷繁复杂的世界,就是由很多很多类的事物组成,而每一样事物,都有其规律可循,通过多个维度的观察、总结,那么你就更能掌握了这个规律,从而使得做起事情很轻松。

信息收集的方法论

信息收集也一样,有它特有的方法论,总结了这种方法论,可以为绝大多数人、绝大多数场景使用。

信息结构模型

信息包含了几种类型:

  • 结构化的核心知识
  • 零散的知识点
  • 即时信息

我们的信息组成应当是一个同心圆,核心是一些最重要的结构化知识,这些知识需要艰苦地学习才能获得,成为我们思考和行动的最主要依据。比如从小接受的科学教育,让我们理解这个世界是由粒子组成,再比如,你的工作技能,需要辛苦习得,而且每天都在应用,这是我们每个人吃饭的家伙。

我们的信息结构不断完善的过程,就是新知识不断加入,融汇贯通到已有的结构里面,成为你信息结构的一部分。这个过程也是你的信息圈不断扩大的过程,它看起来就像是下面这样。
image

信息的重要性及时间分配

根据二八法则,核心知识在我们的信息里面,是最重要的百分之八十,它们起的作用最大,而剩下的零散知识点和即时信息,则没有那么重要了。零散知识点可以作为我们扩展信息广度的方法,快速了解一些未掌握的信息。而即时信息,比如新闻、微博等,大多时候作为我们的一个社交谈资,作为一个普通人,你谈不谈论世界杯,也并不会对你生活有什么很大的影响。

重要的信息,需要我们花时间花精力去掌握,一门课程、一本书籍、一种技能,都需要扎扎实实地花时间去搭建整个结构。比如练吉他,首先需要知道一些简单的乐理,然后学会和弦、看谱,然后勤奋练习,最终才有可能弹奏出一首曲子来;而即时消息,则可以用一些碎片时间来刷,上班路上,刷一刷微信公众号和朋友圈,看看有啥新鲜事在发生。

所以时间分配上是:**80%时间放在核心知识,剩余20%**放在零散知识点和即时信息。

搭建你的信息渠道

每个人都有自己常用的信息渠道,常见的有几种:

  • 书籍
  • 网络信息
  • 社交圈

举个例子:小郑,是区块链工程师,他本科通过计算机科学专业的学习,掌握了编程的技能,他通过阅读技术书籍来学习新的技术,提高自己的水平,有时候他也逛逛知名博客以及开发者社区,了解一些技术动向。此外,他每天通过Reddit或者微博,看到一些新鲜事,他通过数字货币交流群里获得一些币圈消息,也会看朋友圈里面,大家发了什么新动态。

那么怎么设计自己的信息获取渠道呢?推荐的方法如下:

  • 通过书籍、论文等来获得结构化的核心知识,比如一门学科、一种技术
  • 通过杂志、网络的Wiki来辅助自己丰富要搭建的新知识结构,并且不断内化提升认知
  • 通过朋友、社交网络来获取一手的新闻,但是前提是要加以甄别,做一个批判性信息收集者

时间上:

  • 挤出大块的时间来啃结构化的核心知识(比如上学、上班期间,周末的一大块时间,集中精力攻克)
  • 抽出一小块时间,浏览零散的信息(如微信公众号、社区文章、杂志等,也可以收藏以后再看,或者通过语音听取知识付费的文章)
  • 利用碎片时间,瞥一下最新的快讯、新闻、消息推送(如ReadHub.me,消息来了看一眼,有个基本的判断就得了,不重要的略过,重要的要进入下一步)

行动上:

  • 知道什么信息从什么地方获取,节省你的精力和时间(比如,你想知道怎么开发Android App,你有一个朋友就是做这个的,问问他就是了)
  • 更加靠近准确信息的源头,有助于提升信息即时性和有效性
  • 提高敏感度和执行力,核心知识上做好准备,得到最新消息后立即行动

最重要的还是我们自己

无论收集的信息多么准确,多么及时,圈子多么大,最重要的还是我们自己,对关键信息是否敏感,对于信息的提取和利用是否有效。

如果对关键信息不敏感,那么也还是抓不住机会,比如,很早就知道比特币的人,可能通过朋友之口或者某个文章得知,但最终知道了就知道了,并没有深挖,也没有进一步行动,最终大腿拍烂,而有的人,抓住了一个信息,深挖下去,获得了回报。

对信息的提取和利用,如果获得了信息,首先要评判信息的真伪可靠性,做一些基本的调查和过滤,才能为你所用,而不能听风就是雨,这样你将会成为信息的奴隶,而不是信息的主人。

那么我们就要有意地锻炼自己的信息敏感度和提取信息、利用信息的能力,得到最新的消息,要试着想想这个消息蕴含着什么隐藏信息,是否代表着什么趋势和潮流,值不值得深挖下去。如果值得,那么深挖下去就好了,最终将信息为你所用。

最后

信息,总是无处不在的,在于你用发现的眼光去看待它,并且找到一种合适的方法, 沉淀下来,最终成为你的一部分。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.