AB论文:《基于PHP,MYSQL的区块链思想交易系统的实现》

  • 作为2001年就开始接触PHP的老程序员来说,PHP已经伴随我17个年头。对于这种语言,总是感到爱恨交加。


    PHP与MYSQL的问题非常多,或者说:问题主要集中在MYSQL上面。这是天花板的所在。或者说,PHP只能用来做一个黄色论坛,干一些鸡毛蒜皮的应用。可以说,因为MYSQL问题的拖累,PHP,MYSQL是上不了“台面”的。


    尤其是近几年来,接触的项目,都具备了:大数据,大规模,高稳定性,等特征。这意味着,MYSQL已经无法应顺时代的需求了。


    然而,问题往往没有这么简单,我们有REDIS,我们有MONGODB,但是这些东西在一番吹嘘之后,实际应用发现,稳定性,未必有MYSQL好。时常,我们又会重新考虑MYSQL这个熟悉的东西。


    最近在研究交易系统,作为AB的未来旗舰级的产品。也就是:“只要30分钟,人人都可建交易所”——这么一个吓死币圈大佬的项目。


    或者,诚实的说,等AB的产品出来的时候,市场上早已交易所如云,市场早就滥了。因此,不如我们就干脆滥上加滥,趁机搞一票。


    要设计这个奇葩的产品,我们这次又照顾到了MYSQL,而不是REDIS的撮合系统。虽然,我们早就在应用REDIS了,但是REDIS还是有很多的问题。MYSQL虽然问题多,但是这次准备利用部分的区块链的原理,解决MYSQL的毛病,所谓的:枯木逢春又芬芳,群卉希皆萌润。


    MYSQL用于交易撮合最大的问题,就是不稳定,会崩溃。这对于金融系统来说,一条记录都不可以错。


    MYSQL另外一个问题,就是容量,这玩意是中心化数据库,再怎么优化都有天花板。而分布式的方案不是没有,最大的问题就是:复杂,不可靠。


    由于研究区块链,因此我考虑用区块链的部分思想,来改造MYSQL,建立一套适合大规模交易的方案。


    1. 建立原始的区块链模型


    小明(9527)要给小张转(9979)10元钱。所有的节点要进行确认并记账。假设记账代码为: 9527transfer10to9979。首先要用9527的私钥进行RSA加密,产生的密文(xxxx)发给所有的节点。节点再根据9527的公钥来对(xxxx)进行解密,验核是否属实。


    当然,实际上的虚拟货币,会比这个复杂多,要设计双花等问题。但是如果我们自建系统,利用区块链技术进行应用,则会比这个过程简单多。比如说,欺诈等问题,如果私有的区块链里面,都是自己的节点,则不存在“自己骗自己的问题”,因此构架的复杂度,代码的复杂度,将大大降低。


    2. 实战PHP MYSQL云节点


    我们可以用PHP和MYSQL建立自己的节点,可以轻易的部署在VPS里面,由于VPS非常的便宜,外加代码的统一,这使得部署成为0成本。当然,实际使用过程中,构架是:节点+节点代理的模式走的。以防止黑客攻击。或者说按照:节点代理+暗网的模式走。(详见本站接下来要发布的:《前端NGINX 后端 DEEPWEB 防范政府级黑客》的文论)


    我们假设节点已经部署完成,总共30个节点。每个节点都有私钥和公钥。由于这是私有的网络,因此这30个节点的列表是手工配置的。


    A, 会员系统与云节点的对接(注册)


    会员系统,与云节点之间,是分离的。也就是说,云节点只负责记账交易。会员系统,则是我们平台上的会员,两者是在系统上分离的。


    如:小明的ID 9527,他在会员系统里面,用PHP的RSA函数产生一对私钥和公钥。这是存在会员系统里面的。会员系统通过API将9527及其公钥注册到节点。这个过程,不难,节点产生随机数。会员系统用小民的私钥加密,节点用公钥RSA解密一下,王八对绿豆,对上眼了,OK,通过,将:小明:9527:公钥,写入节点的MYSQL数据库里面。


    B,转帐

    由会员系统将“9527transfer10to9979” 用私钥加密之后,提交给节点,节点用公钥确认之后,记录到MYSQL里面。六个节点确认后,自动发送到全网节点。


    C,撮合交易


    根据价格,时间,时效性,等诸多的因素,进行。假设,小明用10个ETH换1个BTC,那么这个过程怎么完成呢?


    首先,小明这边会员系统会产生一个交易ID,这个交易ID被发出鉴权之后,就会往全网节点分发。每个交易ID用PHP产生一对RSA的私钥与公钥,发出了9527buy1BTCwith10ETH,交易节点会验证这个交易请求。


    小明现在发的是:10ETH购买1BTC。这个时候:小张正好发出一个9.8ETH卖1BTC,这个时候。理论上,节点应该以双方的公钥进行反向验证之后。建立一个成交单ID,成交单ID的话,是由最先撮合的节点产生。广播到所有的节点。一旦这个成交单确立之后,那么,两个请求单和成交单记录到数据库。


    D,撤单


    撤单的话,则由小明方面,将原有的ID的RSA私钥再发出 revokeIDxxx ,节点广播之后。如果确定没有成交,因此可以撤单。


    3,重大的意义


    每个节点,实际上是用PHP和MYSQL编写的程序,数据库用的是MYSQL......非常的古老。而且本来很简单的工作,PHP,MYSQL本身就可以撮合的。然而,现在又是节点,又是API,又是RSA加密。貌似.......有些脱裤子放屁。速度嘛.......本来PHP,MYSQL速度很快的,由于脱裤子放屁,因此.....速度降低很多。


    但是,这么一来,MYSQL,PHP上不了大台面的事情解决了。


    速度,虽然因此会慢十几倍,但是无非是从微秒变毫秒,甚至半秒。人类,只要交易速度在10秒以内的,都是可以忍受的。而容量,则会无限制的扩大,一下子打破了MYSQL的天花板。这个古老的PHP,MYSQL节点,是30个。假设,3000个节点部署下来,只要6个节点,即可确认一个交易。那么,这意味着每秒,会有大约500×100(假设单节点每秒100个工作流程)=50000次交易。如果不够怎么办?没关系,扩容,增加节点即可,你增加到30000个,岂不是每秒可以达到50万次。这个意义非常重大。


    其次,MYSQL是不稳定的,网络也是不稳定的,也许,节点里面,有几个VPS挂掉了。也许有节点,MYSQL崩溃了。没关系,挂掉就算了,重新搞一个新的节点上去。这意义也非常重大。解决了,MYSQL太垃圾,无法做金融系统的问题。


    4. 返璞归真


    也许,高手都已经看出来了,我们这么设计的目的是什么。


    PHP和MYSQL是最古老,最广泛的语言,也是基于WEB最流行的语言。如果,交易系统可以用PHP与MYSQL实现,则会“非常的WEB”——但凡WEB的东西——都可以放在一个政府管不了的地方——暗网(DEEPWEB)。


    当前,去中心化的交易所,有很多的毛病,七七八八的问题,归根结底就是说:区块链不是万能的,在数据校验上,区块链有价值和意义。其他事情,确实不行。这也是很多的去中心化交易所,都干不过币安与火币的道理。


    中心化的交易所,则也面临很大的政治风险,往往是黑白两道敲诈的对象。一方面,币是自由的产物,将铸币权,从政府手中夺回来。另一方面,中心化交易所却跪求苟且偷生。


    币,既然是自由的产物,为何要注册公司,跪求政权的同意?政权成立的时候,可曾经过人民的同意?


    所以,我们的观点是:币就应该是天不管,地不管的地方。币,天然就是反政府的,这块遮羞布,何须和币安火币一样遮遮掩掩?所以,干脆我们就成立交易所,不向任何政府注册,并且深藏于暗网。


    如果,我们的设想成立,那么任何人都可以介入到这个交易节点群,并且通过暗网交易,AB(暗币)将可以用于“私人购买交易所”。