Tableland 是一个用于结构化关系数据的协议,可视为是一个中间层协议,链接链上合约与链下数据(链下是相对原生链而言的,可能是其他链、L2 或 IPFS 等)。
通过 Tableland,Dapps 可实现元数据的基于权限和特定逻辑的更新、使用 SQL 查询,以及与 Tableland 上其他 table 的可组合性。
用例
- 声誉系统,如一个 NFT 附着成就徽章
- 可变属性的游戏物品(如有耐久度的剑)
- ……
机制
- Tableland 将传统的关系数据库分解为两个主要组件:具有访问控制逻辑 (ACL) 的链上注册表和链下(相对原生链)表。
- Tableland 中的每个表最初都是作为 ERC721 代币在 EVM 兼容层上铸造的;有一个链上表所有者可以为表设置 ACL 权限。
- 链下 Tableland 网络管理表本身的创建和后续突变。链上和链下之间的链接都是在合约级别处理的,它只是指向 Tableland 网络。
- 只有具有适当链上权限的人才能写入特定表。但是,表读取不一定是链上操作,可以使用 Tableland 网关,也可以使用其他网关;读取查询是免费的,可以来自简单的前端请求,甚至可以来自其他非 EVM 区块链。
- 为了使用 Tableland,必须首先创建一个表(即,作为 ERC721 在链上铸造)。部署地址最初设置为表所有者,并且此所有者可以为任何其他尝试以可变容量与表交互的用户设置权限。例如,所有者可以设置规则,谁可以更新/插入/删除值,他们可以更改哪些数据,甚至决定他们是否愿意转让所有权_表的另一方。
- 更复杂的查询可以连接来自多个表(拥有或非拥有)的数据,以创建一个完全动态且可组合的关系数据层。
用户交互
- 新用户与 dapp 的 UI 交互并尝试更新存储在 Tableland 表中的一些信息。
- dapp 调用 Tableland 注册智能合约来运行这个 SQL 语句,并且这个合约检查 dapp 的智能合约,其中包含定义这个新用户的权限的自定义 ACL。有几点需要注意:
- dapp 的单独智能合约中的自定义 ACL 是一个完全可选但高级的用例;开发人员不需要实现自定义 ACL,可以使用 Tableland 注册表智能合约的默认策略(只有所有者拥有完全权限)。
- 写查询也可以使用网关,而不是直接调用 Tableland 智能合约。dapp 始终存在直接调用 Tableland 智能合约的选项,但任何查询都可以通过网关发送,网关将以补贴的方式将查询中继到智能合约本身。
- Tableland 智能合约获取该用户的 SQL 语句和权限,并将这些合并到发出的事件中,这些事件描述了要采取的基于 SQL 的操作。
- Tableland Validator 节点侦听这些事件并随后采取以下操作之一:
- 如果用户具有写入表的正确权限,验证器将相应地运行 SQL 命令(例如,向表中插入新行或更新现有值)并将确认数据广播到 Tableland 网络。
- 如果用户没有正确的权限,Validator 不会对表执行任何操作。
- 如果请求是简单的读查询,则返回相应的数据;Tableland 是一个完全开放的关系数据网络,任何人都可以在其中对任何表执行只读查询。