一款Web3原生數據庫:Tableland
譯文?譯者 | 布加迪
審校 | 孫淑娟
今天的智能合約很復雜。它們支持更復雜的應用程序。智能合約需要存儲、查詢和處理更復雜更龐大的數據。智能合約與數據高度耦合。因此,這些復雜的數據處理場景使智能合約變得復雜且難以維護。開發者需要為其合約添加與數據相關的邏輯,比如數據查詢、數據更新和數據過濾。開發者需要針對不同的數據結構編寫不同的函數。
除了更高的復雜性外,另一個問題是靈活性。當開發者需要使用復雜的過濾器查詢數據時,需要為合約添加自定義查詢函數。開發者無法直接讀取和過濾數據。
在Web2環境下,數據庫承擔所有與數據相關的工作。應用程序在數據庫中存儲干凈的結構化數據。開發者可以使用SQL讀取所需的數據。數據與應用程序分離開來。
Tableland正是為了解決這些問題而誕生的。Tableland自稱是Web3原生數據庫。
1.機制
由于鏈上數據存儲空間廣闊,Tableland使用鏈下數據庫和鏈上智能合約用于權限檢查和數據修改。
?
圖1
(1)Dapp智能合約向Tableland智能合約發送數據更新請求。
(2) Tableland智能合約檢查調用者的權限,并通過查詢發出事件。
(3)Tableland鏈下驗證者網絡監控鏈上事件,并執行SQL。
(4) 同步Tableland鏈下驗證者網絡。
function runSQL(
address caller,
uint256 tableId,
string memory statement
) external payable override whenNotPaused nonReentrant {
if (
!_exists(tableId) ||
!(caller == _msgSenderERC721A() || owner() == _msgSenderERC721A())
) {
revert Unauthorized();
}
uint256 querySize = bytes(statement).length;
if (querySize > QUERY_MAX_SIZE) {
revert MaxQuerySizeExceeded(querySize, QUERY_MAX_SIZE);
}
emit RunSQL(
caller,
ownerOf(tableId) == caller,
tableId,
statement,
_getPolicy(caller, tableId)
);
}
雖然開發者可以使用智能合約來執行SQL,但dapp智能合約無法獲得任何返回值。這有損可組合性。Tableland通過dapp前端、dapp智能合約和Tableland三方交互來解決這個問題。Dapp前端讀取數據,dapp智能合約更新數據。Dapp前端從Tableland網關讀取數據。Tableland網關可以直接與Tableland鏈下驗證者網絡進行交互。Tableland網關的功能類似區塊鏈RPC的功能。借助網關,開發者無需構建自己的網絡節點。
如果dapp前端向網關發送數據更新請求,網關會將請求轉發到Tableland智能合約。
?圖2
2.局限
作為“Web3原生數據庫”,Tableland仍有諸多局限性:
- Dapp智能合約無法讀取數據和接收執行結果。開發者無法將所有與數據相關的邏輯放入到智能合約中。
- 一張表被局限在10萬行24列。
- 一個數據單元被局限在1kb。
- 僅支持SQL的子集:CREATE TABLE、INSERT、UPDATE、DELETE、SELECT、GRANT和REVOKE。
- 僅支持某些類型,INT、REAL、TEXT、BLOB和ANY。
3.應用
Tableland自詡為“Web3原生數據庫”。這有點夸張,因為合約和數據之間的可組合性不好。現在Tableland可以應用于游戲和NFT。Tableland對NFT的支持很好。開發者創建表并插入NFT元數據后,可獲得網關鏈接。開發者可以將此鏈接用作URI。
function _baseURI() 內部純覆蓋返回(字符串內存){
function _baseURI() internal pure override returns (string memory) {
return "https://testnet.tableland.network/chain/5/tables/79/id/";
}
左右滑動查看完整代碼
開發者以后可以使用Tableland CLI來更新NFT元數據。
4.路線圖
Tableland將于7月發布其NFT。NFT持有者可以訪問更多的開發功能。將來,Tableland 會在以下方面進行改進:
- 支持更多SQL。
- 驗證者網絡實現去中心化。
- 發行代幣,并使用代幣保護驗證者網絡。
- 數據庫管理面板。
圖3
5.未來
Tableland不是Web3原生數據庫的終點。一個真正的Web3原生數據庫應滿足以下要求:
- 分離合同和數據。
- 合約和數據之間的可組合性。
- 應對審查阻力。
- 支持Web3數據類型,比如地址和事務。
- 用戶擁有數據所有權。
原文鏈接:https://hackernoon.com/a-web3-native-database-tableland?