Helping Firebase Developers Integrate with Web3 and Build a Decentralized Social Data Model on the DB3 Network
Tags: web3, dapp, firebase, typescript
Published: 2023-02-11 14:33:38

Currently, most of the web3 developers still start their developers's careers with exposure to web2's technology stack. For example, Solidity language is like the combination of C++ and Javascript. The node providers are often compared to Amazon Web Services (AWS). So finding a similar developing stack to cut in lets web2 developers seamlessly to get familiar with web3 quickly.

Today we will use a decentralized firebase_[DB3 Network](https://github.com/dbpunk-labs/db3), to help the developer to write data into a decentralized database. 

In the next 5 minutes we will walk you through the social dApp data model and show you how to build with DB3 Network.

We have three core concepts: `database`, `collection`, `document`. And we use these concepts to build a social data model. 

![a simple social data model](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/txkq71azlj3bynvelhy5.png)

To create this data model in DB3 Network we can use the CLI and [db3.js](https://github.com/dbpunk-labs/db3.js). Let’s use the CLI for now.

## Build

```
git clone https://github.com/dbpunk-labs/db3.git
cd db3 && bash install_env.sh && cargo build
# start localnet
cd tools &&  sh start_localnet.sh
```
## Use Console
### Start DB3 console 

```
(base) ~/Documents/GitHub/dbpunkslabs/db3   main  ./target/debug/db3 console

██████╗ ██████╗ ██████╗ 
██╔══██╗██╔══██╗╚════██╗
██║  ██║██████╔╝ █████╔╝
██║  ██║██╔══██╗ ╚═══██╗
██████╔╝██████╔╝██████╔╝
╚═════╝ ╚═════╝ ╚═════╝ 
@db3.network🚀🚀🚀
db3>-$ help
Usage: <COMMAND>
```
### Create a new database

```
db3>-$ new-db
 database address                           | transaction id 
--------------------------------------------+----------------------------------------------
 0x3b3b3570100a7a02aa3efbad065e2eefb3f46bc7 | cg4flp3sIyt2MJuIqY1TRlFh8MnlSqNQfKnC7TxQnOU= 
```
### Show database

```
db3>-$ show-db --addr 0x1775b12ff28b48cdf66c2201d944c737514fe31f
 database address                           | sender address                             | releated transactions                        | collections 
--------------------------------------------+--------------------------------------------+----------------------------------------------+-------------
 0x3b3b3570100a7a02aa3efbad065e2eefb3f46bc7 | 0x72a2920c4f4b81a665aafb1f5f6e79e14bb9ce75 | 84Qs3vTO2Dp+ZCcIzeKWZ+5nGTycoCJRlAIh362KUjc= |  
```
### Add a collection to database
Collection is aka data table.Then we create a `userinfo` collection that records the social user information and set the indexers.

```
db3>-$ new-collection 
--addr 0x1775b12ff28b48cdf66c2201d944c737514fe31f 
--name userinfo 
--index '{"id": 1,"name": "idx1","fields": [{"field_path": "name","value_mode": {"Order": 1}},{"field_path": "bio","value_mode": {"Order": 2}}]}'
send add collection done with tx
tQ4dU+46ZkvsM0s2pbjupWx2u8SLbRZmCkG6leG39Us=
```

```
db3>-$ show-collection --addr 0x1775b12ff28b48cdf66c2201d944c737514fe31f
 name     | index 
----------+-------------------------------------------------------------------------------------------------------------------------
 userinfo | {"name":"idx1","fields":[{"field_path":"name","value_mode":{"Order":1}},{"field_path":"bio","value_mode":{"Order":2}}]} 
```
### Add a Document to the Collection

Add a document (aka record) to the Collection. Here we add a user profile as a document.

```
db3>-$ new-doc
	--addr 0x3b3b3570100a7a02aa3efbad065e2eefb3f46bc7 
	--collection-name userinfo 
	--documents '{"name": "Bob","age": 43,"bio": "a virtual person in Blockchain"}'
send add document done with tx
+O9cK2cHLexZQvIITk4OTm8SxBhq7Yz7g+xZYiionWo=
```
Next, we will add more features to our CLl and db3.js. And we will explain the permission relationships helps to claim the ownership of your social data. And more features in a social dApp could be implementes: 

- Following/follower relationships
- Deleting posts.

As a web3 open source project, we are looking for your support. 
GitHub: [Give us a star](https://github.com/dbpunk-labs/db3)