开发托管钱包与非托管钱包

developing custodial vs non-custodial wallets

这是一个非常广泛和普遍的问题,所以我将指定我的预期用例并分支几个问题,主要是指每种方法的实现。

简而言之,使用我的钱包的用户将不断地相互发送,也许 receive/send from/to 其他钱包和网络,我提到这一点是为了防止它可以提供交易将如何在我的应用程序中进行的概述。

所以从托管开始 wallets:from 据我所知,大多数托管钱包都有 1 个冷钱包和 1 个热钱包,每个用户都有一个热钱包,所以当用户创建帐户时,密钥会自动生成给那个用户,但我的问题是用户的密钥是如何存储的:它是在普通的数据库中还是他们以另一种方式存储,这个模型是如何工作的,就像他们在技术上如何使用冷钱包和热钱包一样。

转向非托管钱包,我想知道基本相同的事情,用户的密钥是如何存储的,存储在哪里?以及如何访问它们?如果我采用这种方法,我仍然能够对我的应用程序上发生的交易征收交易费用?

我希望我说的有道理,我希望检查你的答案,如果你觉得你知道问题的某些部分的答案但不是那么好,请说出你所知道的,因为任何贡献都会太棒了,如果有人愿意接听 discord/zoom 电话,我将不胜感激。提前致谢,如果您需要额外的信息来回答,请告诉我。

custodial wallets

how are the users' keys stored

这取决于每个应用程序的实现。一个好的做法是将敏感数据(例如私钥)存储在机密管理系统中。它通常是一个具有高级访问控制的加密数据库——允许根据用户组策略访问数据组,生成用于访问数据的一次性或时间敏感令牌,...然后应用程序可以从 SMS 请求私钥使用用户的唯一令牌。

non-custodial wallets

how and where are the users' keys stored? and how are they accessed?

软件钱包(包括浏览器扩展)通常将私钥存储在一个文件中,该文件位于您的计算机中,由主密钥加密。主密钥可以是例如您的 MetaMask 密码的哈希值和一些预定义的盐。当您输入正确的密码解锁钱包后,钱包软件会解密包含实际私钥的文件,然后它就可以使用私钥了。

硬件钱包将私钥存储在设备上,并由主密钥加密(例如您的设备 PIN 和盐)。私钥永远不会离开设备是一种常见的做法。因此 UI 软件通常会向设备发送一个请求来签署原始交易数据,然后设备会要求用户输入他们的密码,在实际设备上执行签名,然后 returns 返回签名的交易UI 软件。