# Memoriae简介（WIP）

By [Misumena](https://paragraph.com/@misumena) · 2022-11-17

---

WIP

**_核心思路_** 将关键的核心数据存在区块链上，其他数据存放在边缘节点，同时降低不可靠的边缘节点的不可信的边缘节点带来的安全性可靠性风险。

**预期解决的问题** 中心化的存储不可避免有数据丢失的风险，软硬件失效具有显著的相关性，短时间内大量软硬件同时失效，冗余技术无法覆盖。

目前存在大量空闲的边缘节点，希望尽可能能利用上这些边缘节点，用于抵抗相关性造成的不可用。就边缘节点来说，拥有者的行为的多样性，网络延迟的差异都可能严重影响存储的可用性，存储系统中最基本通过给定键来找值在边缘环境中也是极其困难的。

在Memoriae中只有如角色（账户）信息，智能合约信息等才会记录在**区块链**中，其他数据记录在性价比更高的边缘节点中。

用户通过基于区块链的智能合约在Memoriae中购买存储服务。交易收益将按比例分配于以下四个方面：

*   边缘存储设备使用付费；
    
*   数据管理与维护付费；
    
*   区块链交易结算付费；
    
*   保障Memoriae相关技术的持续研发与维护。
    

我们将以可用性与存储用时用量为指标衡量Memoriae的服务质量。具体而言，用户依服务可用性及存储用时用量为基准支付服务费用，服务者(边缘存储设备提供者）依可用性及提供的存储用时用量为基准分配收益。 关于边缘设备的存储数据，Memoriae采用基于存储证明 (Proof of Storage）的可靠性证明 （Proof of Reliability）和用时用量证明(Proof of Space & Time） 等方案用于评估数据存储的可靠性以及用时用量，从而提升系统的可信度。同时对这些验证通过随机信标与BFT 协议进行共识，以避免被操纵和单点故障，共识机制采用链下的方式完成，从而避免为区块链带来存储以外的事务负担。

### 术语

**用户 (User)**：Memoriae中存储服务的使用者。

**存储者 (Provider)**：Memorige中边缘存储设备的提供者。

**维护者 (Keeper)**：Memoriae中安全性、可靠性、可用性的维护者，并具备达成共识、维护区块链的能力。

**可用性：**

![](https://storage.googleapis.com/papyrus_images/1dae46cd345eb737ef7f65da11ebb62eb77bd047afe0c4e76165df7a71dca857.png)

可靠性：

![](https://storage.googleapis.com/papyrus_images/dd9561af38c9cd5d41c26e6cc7b36e94d158a1c8a6db97b5f469a94c2ea436c1.png)

私密性：

![](https://storage.googleapis.com/papyrus_images/7c666a6dce864f00ec7fa1e5967b552963b03c35e5d5c7db4ffaa5a2c97cc3e5.png)

完整性：

![](https://storage.googleapis.com/papyrus_images/1c2ff3ee0dc9752ce725a584bafad7a5d3987e0de476fca35eb52a3afbdf4b5a.png)

\*\*安全性：\*\*包含完整性和私密性两个方面

\*\*时空用量：\*\*用户数据占用的边缘存储空间在时间上的累计值

整体架构

![](https://storage.googleapis.com/papyrus_images/e93deee1f735a9064186c854e46a4c818306efa48d52a9f12a5adfeef846f4d2.png)

逻辑上，Memoriae系统由区块链、管理设备、边缘存储设备以及用户设备组成。在功能上分为结算层、验证层和存储层，将智能合约、账户和结算等核心组件在区块链上执行和存储，以得到更高的可拓展性，同时确保资产的绝对去中心化和安全。并且，经过验证层共识验证结果，任何人都可以检查结果的正确性。

以下两类信息将被记录于区块链上：

*   用户、存储者与维护者的角色信息；
    
*   角色之间的关联信息，包括用户与维护者问的关联信息（必选），以及用户与存储者间的关联信息（可选)。
    

![](https://storage.googleapis.com/papyrus_images/1ec0ac176d5a7f3712d020828f019a60aae5a64ea6ed5408d73ee1816dcdbbef.png)

![](https://storage.googleapis.com/papyrus_images/02b7847b6f3a5d8d0e30bcf361678140aa910b69a171f038ed3d7ccd2a5e9708.png)

![](https://storage.googleapis.com/papyrus_images/344529fb95c06404698fc78ea328a32d7b62f8a592cb518b79972769cfa09525.png)

**用户(User)**：用户是指Memoriae存储服务的使用者，用户可以通过配置智能合约参数指定需要的服务等级与匹配合适的存储者。用户能够生成自己的智能合约，上传数据到Memoriae并支付服务费用。用户也能够下载并管理其存储于Memoriae的数据。

**存储者 (Provider)**：Memoriae中边缘存储设备的提供者。存储者可指明自己的服务能力以匹配合适的用户，并存储这些用户的数据。其还能执行并响应用户的数据访问与管理请求。此外，存储者也能响应来自维护者的挑战并配合维护者修复数据。**存储者接受代币作为提供数据存储服务的收入**。

**维护者（Keeper）**：维护者负责保证Memoriae的安全性、可靠性与可用性。维护者除需要保存数据映射信息外，也利用这些映射信息，结合无偏随机信标来随机验证数据并达成管理共识。这些共识包括对存储者可靠性与可用性形成的共识，修复数据时机的共识，以及存储用时用量的共识。**维护者同样也接受Memoriae 代币作为其维护服务的收入。**

核心技术
----

### 数据安全性

客户端写入之前就加密，边缘存储节点的数据都是加密的。

### 数据完整性

![](https://storage.googleapis.com/papyrus_images/262fcd065cdca5c4f6dcdb3281f39819ab3db9c301b0c62d0dad24d18e8fc856.png)

为了验证数据的完整性，任何系统角色（包括用户、维护者或存储者）必须使用数据拥有者的公钥来验证哈希值的真实性。而哈希值则能够被用于验证数据的完整性。

![](https://storage.googleapis.com/papyrus_images/1d5b219ec51548c56ef4b5b9a3dbf038ce0faab7c76dff820645b3625d73058c.png)

### 访问控制

理论上，存放在边缘存储设备的数据只能被其拥有者（用户）、维护者或存储者访问。其中，用户对其拥有的数据有着完整的访问权限。维护者对其维护的数据具有读取的权限，且仅对已经被判别为损坏的数据具有修复及写入权限。存储者只能够在得到数据拥有者或数据维护者授杈的情况下才能读取或写入数据。而其他任何人都无权访问数据。且在任何情况下，任何人都无法访问明文形态的隐私数据。

访问控制机制对于存放数据的存储者而言是没有意义的，因该存储者实质上拥有对自身设备的所有访问权限。

![](https://storage.googleapis.com/papyrus_images/77b3322f6e6bb2c0f79a58a89915b2bcdcbe30ef2ee74c053e6372a14a31613d.png)

智能合约的存储有两种选择：一是如同现有的绝大多数解决方案一样 存放在区块链上;二是如末来将会流行的解决方案一样，采用签约各方链下保存而链上仅存放指纹的形式。这个版本的白皮书中，仅围绕第一种方式展开讨论。 当智能合约被存储于区块链上，可被任何人访问。因此，对任何存储者而言，数据的拥有者及维护者的身份实际上是可查的。请求发送者（数据的拥有者或维护者）的1 会采用其私钥签名，并包含在请求之中。服务者只需使用请求者的公钥就能验证请求者的身份，并依据区块链上的智能合约判断是否应执行请求。此外，请求中将会植入时问戳，以防止重放攻击。

### 可靠性

**_维护设备（索引设备）上的容错_**

每个用户的索引信息在所有的维护者间完全复制（镜像复制），当一个维护设备上的数据丢失时，他需要查询区块链上的事务记录，找到其服务对象相同的维护者，从那些维护者初同步完整的用户索引信息。

每个用户的所有维护者需要定期进行索引的共识，修复可能未同步的信息，多次为参与共识的维护者将丧失资格并收到惩罚。

\*\*预期元数据的副本数将远低于区块链上存储数据的副本数，\*\*采用副本的方式来进行数据容错也不会造成存储用量的大幅上升。同时提升并发能力。

**_边缘存储设备上的容错_**

预期边缘存储设备上的存储同时支持副本以及EC的方式。预期大部分客户使用还是EC的方式。

数据修复采用Memoriae独创的RAFI的方式来提升修复速度。

RAFI工作的原理在于，通过快速发现那些具有较高丢失风险的数据，有效縮短数据修复总时问从而提升数据可靠性。 RAFI技术对可靠性的提升幅度随容错度（如，副本数量〉的增加而增加。例如，在（6，3）纠删码存储集群中，RAFl能够将数据可靠性提升一个数量级左右，而在容错度更高的分散式存储中，RAFI有能力进一步提升数据可靠性。关于RAFI 技术的细节，可参考对应论文。

存储生态系统
------

支持对象访问接口，之后的版本还会添加文件以及块级访问。

费用

数据篡改与数据丢失按照同样的方式处理。用户可调节服务目标的主要有两方面 可靠性 与 性能。

副本数越多 性能越有保障 挑战也越频繁 数据冗余越多 可靠性就越高 随之而来的成本也越高。

当维护者对某存储者在一定时间段内（片期性，例如每天或每周）的归一化IO总量、可用性与空间使用量达成共识时，存储者所服务的用户需按约定支付相应费用。

收入分配

不同角色问的收入分配：除一小部分收入将用于开发与维护外，大部分收入分配给存储者与维护者。假定系统规模和提供服务与系统管理所需的工作呈线性增长，则每个角色的收入占总收入的比例是固定。

相同角色间的收入分配：同一角色问基于各自可量化的贡献按比例进行收入分配。存储者核心功能是提供数据存储空问并响应用户请求。存储者的贡献可通过使用的存储用时用量、归一化I0数量以及可用性进行量化。维护者的主要功能发起挑战，报告挑战结果，修复还原数据并确保在维护者问达成共识。维护者的贡献可通过有效的挑战数、修复与/或还原的数据量以及达成共识的数量进行量化。

验证机制
----

存储证明
----

用户上传之后，随机抽取一些数据，让存储节点生成证明，**证明小于100字节，并在几毫秒内得到验证，任何人都可以验证证明的正确性。**

可靠性证明

恢复数据之前，多名维护者需要就数据/设备故障达成共识

用时用量证明

每个维护者包含了用户存储的数据块的创建时间戳，需要达成共识才能确定权威的用时用量数据。

智能合约
----

智能合约用于维持维护者和存储者的身份和服务信息，确定维护者和存储者提供的服务是否适当，也规定了如何向用户收费。Memoriae 智能合约是基于用户输入、维护者和提供者在区块链中记录的信息为用户自动生成的。

在任意一个维持者或存储者加入系统之前，都需要声明自己的角色(维持者和存储者）和相应的服务级别。这一声明存储在角色智能合约中，任何一个参与者都可以查询。

合约所需主要数据如下：

*   声明的可用性
    
*   声明的可拿性
    
*   声明的最大可用存储容量
    
*   声明的可用时间长度和频率
    

布Memoriae 中存储任何数据之前，用户必须选择理想的存储服务级别。存储服务级别将决定所需的最少维护者和存储者。所需的维护者数是由用户基于其处理地址映射信息（该指标基于维护者处理的地址映射信息条目进行计算）的能力和可以提供的服务水平选择的。

在选择了维护者和存储者后，用户创建并签署维护智能合约，约定维护者如何向存储在存储者边缘存储设各上的数据提供维护服务以及用户收费标淮，以及用户和存储者之间的存储服务以及付费条款。

用户在签署维护智能合约之后，可以请求在**P2P 存储网络上存储数据**。从合约中的存储者中挑选合适的存储者进行存储。用户数据的所有维护者必须就存储者的存储证明、可靠性证明和用时用量证明达成共识后才能出示结果。然后，維护者将触发维护智能合约问维护者和对应的存储者进行付费。

存储者

存储者的数目可能增加一个是存储数据量的增加而增加，一个是故障导致的可用存储着数目不足需要增加。

---

*Originally published on [Misumena](https://paragraph.com/@misumena/memoriae-wip)*
