前言
是的,您只需考虑一下,PHP中的集中式加密货币,这是不对的。 但是,尽管如此,我对思想的局限性还是出现了,因此,正如您可能已经猜到的那样,我决定撰写有关它的文章。 在第一部分中,我们将告诉您什么是加密货币,讨论最初的笔记,并创建一个钱包系统。 现在,让我们开始吧。
加密货币,它是什么样的?
信息来自维基百科
加密货币是一种数字货币,其内部结算单位的会计由分散支付系统(没有内部或外部管理员或任何类似的模拟系统)确保以全自动模式工作。
加密货币本身没有任何特殊的材料或电子形式-只是一个数字,表示结算单位的数据量,该数字被写入数据传输协议的信息包的相应位置,并且通常甚至没有加密,就像有关交易之间的所有其他信息一样系统地址。
简而言之,加密货币的工作方式如下:
- 具有余额的网络用户将交易发送给另一个匿名用户。
- 交易进入网络。
- 矿工(或创建块的用户)解决了由特殊算法产生的具有条件的问题(例如,哈希中存在先前的10-30个零,反之亦然)。
- 当哈希中满足一个或多个条件时,由于这个原因,矿工将一条消息发送到网络,通知创建新区块和进行交易。
- 接受者收到资金,矿工获得报酬,形式是在任务准备期间计算的佣金形式。
编写集中式加密货币以及使用PHP都有意义吗?
我认为不是。 但是,请重试。
我们在开发前考虑笔记
我们将使用使用工作量证明的双重哈希验证系统。 在软件和网络应用程序级别检查哈希值是有意义的。 这是由于优化服务器负载的过程。 因为当我们多次访问服务器检查哈希时,会出现这样的负载。 因此,我建议采用以下方法:
- 在软件矿工上,在本地检查哈希以满足条件。
- 当软件矿工的条件与必要条件一致时,我们在应用程序网络级别(在服务器级别)进行检查。
我认为这是分配负载的最佳方法。 与在服务器上多次发送垃圾邮件相比,在计算机上进行多次本地检查要容易得多。
这个名字-我想出了一个简单的,也许令人难忘的名字-FlyCoin,带有三位数的FLC货币代码。
数据库-我将使用一个简单方便的选项PDO。
加密钱包-将使用GUID和mt_rand生成,并且POSIX时间将用作种子。
您是否懒于拥有哈希检查功能? -是的,所以我决定从我的朋友Nikita的一个(已经过世的)加密货币Entropy的老矿工那里获取代码。
我不敢相信他只创造了一种加密货币。 还有其他吗?总的来说,您可以在他的
VKontakte小组中找到他的所有创作(有时甚至使用)。 我希望他们也派上用场。
走吧
让我们从建立未来系统的框架开始。 让我们从为我们的加密货币开发应用程序API开始。 到目前为止,框架看起来很空。
<?php function checkHash ($hash, $exp) // $hash - , $exp - . Entropy Miner, . { $sum = 0;
这就是我们奇迹的框架。 首先,我们为钱包实施GUID的注册和生成。 我立即创建了一个空的API函数定义,并在Google中找到了GUID生成函数。 不要忘记种子。 我刚刚找到了一个函数来获取种子,以获得唯一的GUID。
function make_seed () // PHP { list ($usec, $sec) = explode (' ', microtime ()); return $sec + $usec * 1000000; } mt_srand (make_seed ());
太好了 相应地,用于为钱包生成GUID的功能如下所示(以及存根本身):
public function register () // { } protected function genGUID4 () // Google { return sprintf ('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', mt_rand (0, 0xffff), mt_rand (0, 0xffff), mt_rand (0, 0xffff), mt_rand (0, 0x0fff) | 0x4000, mt_rand (0, 0x3fff) | 0x8000, mt_rand (0, 0xffff), mt_rand (0, 0xffff), mt_rand (0, 0xffff));
由于我们匿名进行所有操作,因此不会存储IP或电子邮件。 没有确认。 我们就足够了。 在大约25分钟内,我编写了一个注册功能。 我们只需要一个密码。 API函数将把钱包退还给我们。
public function register ($password) // $password - { if ($this->db)
在这里,我简要描述了该行的功能。
给公平的人和程序员的公平信息。如果您将您的联系人留在了该网站上(也许该加密货币将位于该网站上),那么他们会向您这样写:
“你好,你能帮忙吗?” 我在您的区块链上保留了mani,突然我忘记了密码,请帮助,您会很好--随时拒绝此优惠。 加密货币的本质是安全地存储挖掘的数字。 没有人可以证明自己拥有帐户。 因此, 即使没有受害者的参与 ,任何攻击者甚至都可以窃取他人的资金! 没关系,尽管此人确实是帐户的所有者,但最好拒绝。 如果您亏损了,则意味着您没有正确存储帐户中的数据。 为了提高安全性,我们将不再实施密码恢复。
此处显示的哈希函数可以表示如下:
该函数的工作方式如下:
输入密码,我们检查数据库是否已连接:
是的,已连接。 (让我们输入密码12345)我们生成了钱包地址,并输入了$ walletId-我们得到的是这样的内容: FLC @ c1cbe61d-a19d-4c82-ba17-3a577df0aeb5 (此GUID是由另一个站点生成的,然后在其前面添加了FLC @前缀)。
我们计算纯文本哈希。 在第一个系列中,我们得到如下:0087196442FLC @ c1cbe61d-a19d-4c82 -ba17-3a577df0aeb59ee77779db5a44ef3f60044fcb0e1170218e642cb9adc0789ddd08871ad95c7e1d3b1391c6c79774d319b5141bd3b13b717c3d389206ede659cb280949feac66(很多信件,不要惊讶)。
在第二个回合中,哈希将变为百分之一百的HMAC: 5e43cbb404c81efeb35162e5bba0766f20b340fbabcc66fd5f7a6a1993a8ccd43fc6384ac53f939acca4378681e2bb17912eacf4c65b6d6aaaaa再一次。
我们将其全部写入数据库中。
作为回应,我们写出您可以登录的钱包号码。
不,未连接。在这种情况下,您不必期待任何值得的事情,返回FALSE。
这就是复杂的注册系统的外观。 实际上,它看起来非常简单。 而且就代码而言-更复杂。
我们将花费更多时间并进行授权。 有了授权,情况就更简单了。 我们正在寻找一个帐户,并尝试登录,但需要了解熟悉的密码哈希生成算法。 然后我们进行验证,如果数据正确,则向客户提供一条重要的行,其中存储数据以供服务器和矿工之间进行通信。
来自我自己。听起来我们不是在加密货币,而是服务器上的PHP与使用php.exe的PHP之间的授权系统。 在第二部分中,我们将在“蛋糕”中添加第二个蛋糕,在其中我们将看到与采矿,区块链和交易相关的内容。
再过15至25分钟,授权功能就准备就绪。 请参见下面的代码:
public function login ($walletId, $password) // { if ($this->db)
该代码几乎是注册的,但以相反的算法运行。 与用户的合作已经结束。
后置条件
在这段有趣的阅读文章期间,我们进行了以下操作:
- 我们简要地了解了加密货币,以及如何正确构建它。
- 他们简短地回答了一个问题“使用PHP进行集中式加密货币有意义吗?”
- 执行此任务之前讨论的笔记
- 实施了加密账户系统。
现在,您可以阅读盲注背后的内容:
在窗帘下本文的撰写时间约为4-5小时(所有日落和傍晚)。 在这段时间里,我的写作得到了发展,但是在撰写有关哈布拉哈伯的文章时,实现梦想的愿望并没有消失。 确实,由于OOP的简单概念,它比MySQLi更为容易使用,或更糟糕的是,带有mysql_前缀的普通函数被认为已经过时,不再适合在PHP中进行开发。
下次我们将做什么:
- 让我们进行挖掘。
- 让我们考虑事务和块的排列方式。
- 我们将进行交易,并对未使用的Block类有所了解。
感谢您的阅读! 再见! 这是我的第一篇文章-我正在等待批评。