..

版权Entry数据结构设计

背景

一个数字化的版权信息,可能是文学作品,也可能是音乐作品的版权,上链后会产生一个TokenID,算是它的’身份证’。 其中有个需求,在作品上链后,后期版权机构可能会追加、修改它的信息,并且版权机构A只能修改他的数据。 怎么设计。

设计

这里只说一下Entry等的设计。

首先,定义一个 Token 及 Entry 的数据结构, 以下代码都是简化表示如下

struct Entry {
	std::string contents;
};

class Token {
public:
	std::vector<Entry> mEntries;
};
  • 方案一
    可以在 Entry 中增加一个字段, Account account 来记录当前的 Entry 的所有人。 于是 Entry 的结构改为
struct Entry {
	std::string contents;
	Account account;
};

如果A需要修改信息,需要先遍历一下 mEntries 的所有 Entry 中,属于 A 的 Entry。
缺点比较明显,如果记录多的话,搜索比较耗时,并且每条 Entry 中都有一个 Account 字段,太占地方。 容易实现算是优点儿吧 :).

  • 方案二
    区别于方案一,这里不修改 Entry 结构,而是让 Token 维护一个有修改权限的列表。 代码如下
struct Role {
	Account account; 
	std::uint32_t index;
};

std::vector<Role> mRoles;

index 表示可以修改 mEntries 中的索引,通过 Index 直接获取 content, mRoles 的量肯定是远小于 mEntries 数据的。

  • 方案三
    可以考虑用 map 或者 unordered_map 来处理,但是,由于系统设计的限制,并不支持直接使用 map 类结构,还得转换成 vector 进行处理、存储。

以上是在实现需求的时候的一点儿想法,可能还不是很全面,后边有其他思路的话再进行补充。


涉及到工作的源码部分都进行了相应的简化。