开发分散式滑板车租赁软件。 谁说这会很容易?

在这篇文章中,我将讨论我们如何尝试在智能合约上构建去中心化的滑板车租赁,以及为什么我们仍然需要集中式服务。

开发分散式滑板车租赁软件。 谁说这会很容易?

这一切是如何开始的

2018年XNUMX月,我们参加了一场专门针对物联网和区块链的黑客马拉松。 我们的团队选择了共享滑板车作为一个想法,因为我们有一辆来自本次黑客马拉松赞助商的滑板车。 该原型看起来像一个移动应用程序,可让您通过 NFC 启动踏板车。 从营销的角度来看,这个想法得到了一个关于开放生态系统“光明未来”的故事的支持,在这个生态系统中,任何人都可以成为租户或房东,所有这些都基于智能合约。

我们的利益相关者非常喜欢这个想法,他们决定将其转变为在展览上展示的原型。 在 2019 年世界移动大会和博世互联世界上进行了多次成功演示后,决定与真实用户(德国电信员工)一起测试踏板车租赁。 因此我们开始开发一个成熟的 MVP。

拄着拐杖的区块链

我认为没有必要解释舞台上展示的项目和真人使用的项目之间的区别。 在六个月内,我们必须将粗糙的原型变成适合飞行员的东西。 然后我们就明白了“痛苦”的含义。

为了使我们的系统去中心化和开放,我们决定使用以太坊智能合约。 选择落在这个去中心化在线服务平台上,因为它很受欢迎并且能够构建无服务器应用程序。 我们计划按如下方式实施我们的项目。

开发分散式滑板车租赁软件。 谁说这会很容易?

但不幸的是,智能合约是虚拟机在交易时执行的代码,它无法取代成熟的服务器。 例如,智能合约无法执行待处理或计划的操作。 在我们的项目中,这不允许我们像大多数现代汽车共享服务那样实施每分钟的租赁服务。 因此,我们在完成交易后,在不确定用户是否有足够的钱的情况下,从用户那里扣除了加密货币。 这种方法仅适用于内部试点,当然,在设计成熟的生产项目时会增加问题。

除上述所有因素外,还包括平台本身的潮湿。 例如,如果您编写逻辑与ERC-20代币不同的智能合约,您将遇到错误处理问题。 通常,如果输入不正确或我们的方法无法正常工作,我们会收到错误代码作为响应。 就以太坊而言,除了执行此功能所花费的天然气量之外,我们无法获得任何其他信息。 Gas 是一种必须用于交易和计算的货币:代码中的操作越多,您支付的费用就越多。 因此,要了解代码不起作用的原因,您首先要通过模拟所有可能的错误来测试它,并将消耗的气体硬编码为错误代码。 但如果您更改代码,此错误处理就会中断。

此外,如果不使用存储在云中某处的密钥,几乎不可能创建一个与区块链诚实配合的移动应用程序。 尽管存在诚实钱包,但它们不提供用于签署外部交易的接口。 这意味着您不会看到本机应用程序,除非它具有内置的加密钱包,而用户对此几乎不信任(我不会信任它)。 结果我们这里也不得不抄近路。 智能合约被交付到私有以太坊网络,钱包是基于云的。 但尽管如此,我们的用户还是体验到了去中心化服务的所有“乐趣”,即每次租赁期间多次长时间等待交易。

所有这些都引导我们走向这个架构。 同意,这与我们的计划有很大不同。

开发分散式滑板车租赁软件。 谁说这会很容易?

王牌:自我主权身份

如果没有去中心化的身份,你就无法构建一个完全去中心化的系统。 自我主权身份(SSI)负责这部分,其本质是你扔掉中心化的身份提供者(IDP)并将所有数据和责任分配给人们。 现在,用户决定他需要什么数据以及与谁共享这些数据。 所有这些信息都位于用户的设备上。 但对于交换,我们需要一个去中心化的系统来存储加密证据。 SSI 概念的所有现代实现都使用区块链作为存储。

“这和洞里的王牌有什么关系?” - 你问。 我们在柏林和波恩推出了对我们自己的员工进行内部测试的服务,我们遇到了德国工会形式的困难。 在德国,公司被禁止监控员工的行动,而工会对此进行控制。 这些限制结束了用户身份数据的集中存储,因为在这种情况下我们会知道员工的位置。 同时,我们也忍不住去检查,因为滑板车有被盗的可能。 但得益于自我主权身份,我们的用户可以匿名使用该系统,并且踏板车本身在开始租赁之前会检查他们的驾驶执照。 因此,我们存储了匿名用户指标;我们没有任何文档或个人数据:它们都包含在司机本身的设备上。 因此,多亏了 SSI,我们项目中的问题的解决方案甚至在出现之前就已经准备好了。

该设备给我带来了问题

我们自己没有实现自我主权身份,因为它需要密码学方面的专业知识和大量时间。 相反,我们利用合作伙伴 Jolocom 的产品,并将他们的移动钱包和服务集成到我们的平台中。 不幸的是,该产品有一个显着的缺点:主要开发语言是 Node.js。

这种技术堆栈极大地限制了我们对踏板车内置硬件的选择。 幸运的是,在项目一开始,我们就选择了 Raspberry Pi Zero,充分利用了成熟的微型计算机的所有优势。 这使我们能够在滑板车上运行庞大的 Node.js。 此外,我们还使用现成的工具通过 VPN 进行监控和远程访问。

总之

尽管存在种种“痛苦”和问题,该项目还是启动了。 并非一切都按我们的计划进行,但确实可以通过租赁踏板车来骑它们。

是的,我们在设计架构时犯了一些错误,这些错误不允许我们使服务完全去中心化,但即使没有这些错误,我们也很难创建一个无服务器平台。 编写另一个加密金字塔是一回事,而编写一个成熟的服务则完全是另一回事,在服务中您需要处理错误、解决边界情况并执行待处理的任务。 我们希望最近出现的新平台将更加灵活和功能强大。

来源: habr.com

添加评论