开发用于分散式踏板车租赁的软件。谁说会容易?

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



一切如何开始


2018年11月,我们参加了致力于物联网和区块链的黑客马拉松。我们的团队选择了共享踏板车作为主意,因为我们有这次黑客马拉松赞助商的踏板车。原型看起来像一个移动应用程序,允许您通过NFC运行踏板车。从营销的角度来看,这个想法被一个关于“光明的未来”的故事所强化,该故事具有开放的生态系统,每个人都可以基于智能合约成为租户或房东。

我们的利益相关者非常喜欢这个想法,因此他们决定将其变成在展览会上演示的原型。在2019年世界移动大会和博世互联世界上成功举办了几场演出之后,决定对真实用户,德国电信的员工测试踏板车的租金。因此,我们开始开发成熟的MVP。

拐杖区块链


我认为没有必要解释一下在舞台上表演的项目和真实人会使用的项目之间的区别。在六个月的时间里,我们不得不将原始原型变成适合飞行员的东西。然后我们意识到“痛苦”的含义。

为了使我们的系统分散和开放,我们决定使用以太坊智能合约。之所以选择这种分散式在线服务平台,是因为其受欢迎程度以及构建无服务器应用程序的能力。我们计划如下实施我们的项目。



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

除上述所有以外,还增加了平台本身的湿度。例如,使用ERC-20令牌以外的逻辑编写智能合约将导致错误处理问题。通常,如果我们的方法输入错误或操作不正确,我们会得到一个错误代码作为响应。在以太坊的情况下,除了执行此功能所花费的天然气之外,我们什么也得不到。 Gas是您需要为交易和计算支付的货币:代码中的交易越多,您支付的费用就越多。因此,要了解为什么该代码无法正常工作,请先对其进行测试,模拟所有可能的错误,然后将废气作为错误代码进行硬编码。但是,如果您更改代码,此错误处理将中断。

此外,如果不使用存储在云中某处的密钥,几乎不可能创建能够与区块链真正兼容的移动应用程序。尽管确实存在诚实的钱包,但它们不提供用于签署外部交易的接口。这意味着,如果本机应用程序没有内置的加密钱包,则您将看不到它,用户对此几乎不信任(我不信任)。结果,我们在这里也不得不偷工减料。智能合约已发送到以太坊专用网络,并且钱包变得阴沉。但是,尽管如此,我们的用户还是感觉到分散服务的所有“魅力”,即每次租赁会话需要多次等待交易,

这导致我们采用了这种架构,这与我们计划的完全不同。



轻松一点:自我主权认同


没有分散的身份验证,您将无法构建完全分散的系统。自治身份(SSI)负责这一部分,其本质是您抛出一个中央身份提供者(IDP),并将所有数据和对他们的责任分发给人们。现在,用户可以决定所需的数据以及与谁共享数据。所有这些信息都在用户的设备上。但是为了共享,我们需要一个分散的加密证据存储系统。SSI概念的所有现代实现都使用区块链作为存储。

“我的王牌有什么作用?” - 你问。我们针对柏林和波恩的员工启动了一项内部测试服务,面对德国工会,我们遇到了困难。在德国,公司被禁止监视员工的动向,工会对此进行控制。这些限制终止了用户身份数据的集中存储,因为在这种情况下,我们将知道员工的位置。同时,由于可能会劫持踏板车,我们无法对其进行检查。但是,由于有了“自我主权身份”,我们的用户才能匿名使用该系统,因此,踏板车本人在开始租车之前便检查了驾驶执照的可用性。结果,我们保留了匿名的用户指标,没有任何文档或个人数据:所有文档或个人数据都存储在驱动程序本身的设备上。因此,由于有了SSI,我们的项目中的问题的解决方案甚至在出现之前就已经准备好了。

设备引发问题


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

这样的技术栈在很大程度上限制了我们在踏板车中内置铁的选择。幸运的是,在项目开始之初,我们的选择就落在了Raspberry Pi Zero上,我们利用了成熟的微型计算机。这使我们能够在踏板车上运行笨重的Node.js。此外,我们使用现成的工具通过vpn进行监视和远程访问。

最后


尽管存在所有的“痛苦”和问题,该项目还是启动了。并非所有的事情都按照我们的计划工作,但确实有可能通过租借来骑踏板车。

是的,我们在体系结构的设计中犯了许多错误,这使我们无法使服务完全分散,但是即使没有这些错误,我们也几乎无法创建无服务器平台。编写另一个加密金字塔是一回事,而完善的服务则是另外一回事,您需要在其中处理错误,解决边界问题并执行待处理的任务。我们希望最近出现的新平台将更加灵活和功能强大。

All Articles