From 3c03fd0cceed66a44996176517d345f88923edf3 Mon Sep 17 00:00:00 2001 From: imotai Date: Tue, 13 Jun 2023 23:13:53 +0800 Subject: [PATCH 01/17] feat: add doc store --- Cargo.toml | 1 + src/proto/proto/db3_database_v2.proto | 108 ++++---------------------- src/proto/proto/db3_mutation_v2.proto | 2 +- src/storage/Cargo.toml | 2 + src/storage/src/db_store_v2.rs | 4 +- src/storage/src/lib.rs | 1 + 6 files changed, 20 insertions(+), 98 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index a1aef40a0..95c2af42c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,4 +19,5 @@ ethers = {git="https://github.com/imotai/ethers-rs", rev="d526191b7972e8cf4412fe tonic = {git="https://github.com/hyperium/tonic", rev="ae7580160431cd25c1eecda4c85014ef6ce8d93f"} tonic-web = {git="https://github.com/hyperium/tonic", rev="ae7580160431cd25c1eecda4c85014ef6ce8d93f"} arweave-rs = {git="https://github.com/imotai/arweave-rs", rev="7ac5027305db833e4d9b62c967309d5df8fba4f2"} +ejdb2rs = {git="https://github.com/imotai/ejdb2rs", rev="c937a085eda043bd854a0ef4d3e7bb63650610d1"} serde_json= "1.0" diff --git a/src/proto/proto/db3_database_v2.proto b/src/proto/proto/db3_database_v2.proto index dd8e015e3..6e42e2047 100644 --- a/src/proto/proto/db3_database_v2.proto +++ b/src/proto/proto/db3_database_v2.proto @@ -54,10 +54,22 @@ message EventTable { message Collection { bytes id = 1; string name = 2; - repeated Index index_list = 3; + repeated Index index_fields = 3; bytes sender = 4; } +enum IndexType { + UniqueKey = 0; + StringKey = 1; + Int64Key = 2; + DoubleKey = 3; +} + +message Index { + string path = 1; + IndexType index_type = 2; +} + message Document { bytes id = 1; bytes doc = 2; @@ -65,100 +77,6 @@ message Document { bytes tx_id = 4; } -message Index { - // A field in an index. - // The field_path describes which field is indexed, the value_mode describes - // how the field value is indexed. - message IndexField { - // The supported orderings. - enum Order { - // The ordering is unspecified. Not a valid option. - ORDER_UNSPECIFIED = 0; - - // The field is ordered by ascending field value. - ASCENDING = 1; - - // The field is ordered by descending field value. - DESCENDING = 2; - } - - // The supported array value configurations. - enum ArrayConfig { - // The index does not support additional array queries. - ARRAY_CONFIG_UNSPECIFIED = 0; - - // The index supports array containment queries. - CONTAINS = 1; - } - - // Can be __name__. - // For single field indexes, this must match the name of the field or may - // be omitted. - string field_path = 1; - - // How the field value is indexed. - oneof value_mode { - // Indicates that this field supports ordering by the specified order or - // comparing using =, !=, <, <=, >, >=. - Order order = 2; - - // Indicates that this field supports operations on `array_value`s. - ArrayConfig array_config = 3; - } - } - - // The state of an index. During index creation, an index will be in the - // `CREATING` state. If the index is created successfully, it will transition - // to the `READY` state. If the index creation encounters a problem, the index - // will transition to the `NEEDS_REPAIR` state. - enum State { - // The state is unspecified. - STATE_UNSPECIFIED = 0; - - // The index is being created. - // There is an active long-running operation for the index. - // The index is updated when writing a document. - // Some index data may exist. - CREATING = 1; - - // The index is ready to be used. - // The index is updated when writing a document. - // The index is fully populated from all stored documents it applies to. - READY = 2; - - // The index was being created, but something went wrong. - // There is no active long-running operation for the index, - // and the most recently finished long-running operation failed. - // The index is not updated when writing a document. - // Some index data may exist. - // Use the google.longrunning.Operations API to determine why the operation - // that last attempted to create this index failed, then re-create the - // index. - NEEDS_REPAIR = 3; - } - - // Output only. A server defined name for this index. - // The form of this name for composite indexes will be: - // `projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/indexes/{composite_index_id}` - // For single field indexes, this field will be empty. - string name = 1; - // Id of the index filed in the collection - uint32 id = 2; - - // The fields supported by this index. - // - // For composite indexes, this is always 2 or more fields. - // The last field entry is always for the field path `__name__`. If, on - // creation, `__name__` was not specified as the last field, it will be added - // automatically with the same direction as that of the last field defined. If - // the final field in a composite index is not directional, the `__name__` - // will be ordered ASCENDING (unless explicitly specified). - // - // For single field indexes, this will always be exactly one entry with a - // field path equal to the field path of the associated field. - repeated IndexField fields = 3; -} - // A Firestore query. message StructuredQuery { // A filter. diff --git a/src/proto/proto/db3_mutation_v2.proto b/src/proto/proto/db3_mutation_v2.proto index 4b303f139..926a71556 100644 --- a/src/proto/proto/db3_mutation_v2.proto +++ b/src/proto/proto/db3_mutation_v2.proto @@ -27,7 +27,7 @@ message DocumentDatabaseMutation { } message CollectionMutation { - repeated db3_database_v2_proto.Index index = 1; + repeated db3_database_v2_proto.Index index_fields = 1; string collection_name = 2; } diff --git a/src/storage/Cargo.toml b/src/storage/Cargo.toml index ea4a52ab2..c2312d224 100644 --- a/src/storage/Cargo.toml +++ b/src/storage/Cargo.toml @@ -35,3 +35,5 @@ timer = "0.2.0" arweave-rs = {workspace=true} url = "2.4.0" http = "0.2" +moka = "0.11.2" +ejdb2rs = {workspace=true} diff --git a/src/storage/src/db_store_v2.rs b/src/storage/src/db_store_v2.rs index 22cc07a1a..74f2cf2ea 100644 --- a/src/storage/src/db_store_v2.rs +++ b/src/storage/src/db_store_v2.rs @@ -219,7 +219,7 @@ impl DBStoreV2 { let col = Collection { id: id.as_ref().to_vec(), name: collection.collection_name.to_string(), - index_list: collection.index.to_vec(), + index_fields: collection.index_fields.to_vec(), sender: sender.as_ref().to_vec(), }; let mut buf = BytesMut::with_capacity(1024); @@ -338,7 +338,7 @@ mod tests { assert!(false); } let collection = CollectionMutation { - index: vec![], + index_fields: vec![], collection_name: "col1".to_string(), }; let result = diff --git a/src/storage/src/lib.rs b/src/storage/src/lib.rs index 6caf8e518..80c6512e1 100644 --- a/src/storage/src/lib.rs +++ b/src/storage/src/lib.rs @@ -26,6 +26,7 @@ pub mod db_owner_key; pub mod db_owner_key_v2; pub mod db_store; pub mod db_store_v2; +pub mod doc_store; pub mod key; pub mod mutation_store; pub mod state_store; From 91e980a127f8d46c55158539f6cfb702fba84f1a Mon Sep 17 00:00:00 2001 From: imotai Date: Mon, 24 Jul 2023 15:26:30 +0800 Subject: [PATCH 02/17] feat: add index --- sdk/src/account/db3_account.ts | 6 +- sdk/src/index.ts | 13 +++- sdk/src/provider/storage_provider_v2.ts | 1 - sdk/src/store/database_v2.ts | 86 +++++++++++++++++++-- sdk/src/store/document_v2.ts | 2 +- sdk/tests/client_v2.test.ts | 49 ++++++++++++ src/error/src/lib.rs | 17 +++-- src/node/src/storage_node_light_impl.rs | 3 +- src/proto/proto/db3_mutation_v2.proto | 7 ++ src/storage/src/db_store_v2.rs | 99 +++++++++++++++++++++---- src/storage/src/doc_store.rs | 10 +-- 11 files changed, 246 insertions(+), 47 deletions(-) diff --git a/sdk/src/account/db3_account.ts b/sdk/src/account/db3_account.ts index 0015eeba4..193664177 100644 --- a/sdk/src/account/db3_account.ts +++ b/sdk/src/account/db3_account.ts @@ -36,7 +36,7 @@ import { toHEX } from '../crypto/crypto_utils' * const account = createFromPrivateKey("0x........") * ``` * @param privatekey - a hex format private key string - * @returns the instance of {@link DB3ACCOUNT} + * @returns the instance of {@link DB3Account} * **/ export function createFromPrivateKey(privateKey: Hex) { @@ -60,7 +60,7 @@ export function createFromPrivateKey(privateKey: Hex) { * ```ts * const account = createRandomAccount() * ``` - * @returns the instance of {@link DB3ACCOUNT} + * @returns the instance of {@link DB3Account} * **/ export function createRandomAccount() { @@ -75,7 +75,7 @@ export function createRandomAccount() { * ```ts * const account = createFromExternal() * ``` - * @returns the instance of {@link DB3ACCOUNT} + * @returns the instance of {@link DB3Account} * **/ export async function createFromExternal(chain?: Chain) { diff --git a/sdk/src/index.ts b/sdk/src/index.ts index 86f9d2695..70dd47739 100644 --- a/sdk/src/index.ts +++ b/sdk/src/index.ts @@ -14,18 +14,25 @@ * limitations under the License. */ +export type { DB3Account } from './account/types' export { createFromPrivateKey, createRandomAccount, signTypedData, createFromExternal, } from './account/db3_account' -export type { DB3Account } from './account/types' export type { Client, ReadClient } from './client/types' -export type { Database, Collection } from './store/types' +export type { + Database, + Collection, + CreateDBResult, + CreateCollectionResult, + MutationResult, + QueryResult, +} from './store/types' export { addDoc, updateDoc, deleteDoc, queryDoc } from './store/document_v2' -export { SystemConfig, SystemStatus } from './proto/db3_base' +export { SystemConfig, SystemStatus, Version } from './proto/db3_base' export { createClient, createReadonlyClient, diff --git a/sdk/src/provider/storage_provider_v2.ts b/sdk/src/provider/storage_provider_v2.ts index 133a9efd2..dabfa764c 100644 --- a/sdk/src/provider/storage_provider_v2.ts +++ b/sdk/src/provider/storage_provider_v2.ts @@ -131,7 +131,6 @@ export class StorageProviderV2 { blockId: block, orderId: order, } - try { const { response } = await this.client.getMutationHeader(request) return response diff --git a/sdk/src/store/database_v2.ts b/sdk/src/store/database_v2.ts index b9d08a069..53f8f649b 100644 --- a/sdk/src/store/database_v2.ts +++ b/sdk/src/store/database_v2.ts @@ -32,6 +32,7 @@ import { Mutation_BodyWrapper, DocumentDatabaseMutation, EventDatabaseMutation, + AddIndexMutation, } from '../proto/db3_mutation_v2' import { Client, ReadClient } from '../client/types' @@ -43,10 +44,22 @@ import { Index } from '../proto/db3_database_v2' * Create an event database to store contract events * * ```ts - * const {db, result} = await createEventDatabase(client, "my_db") + * const {db, result} = await createEventDatabase(client, + * "my contract event db", + * "0x...", + * ["DepositEvent"], + * "{...}", + * "wss://xxxxx", + * "100000" + * ) * ``` - * @param client - the db3 client instance - * @param desc - the description for the database + * @param client - the client instance + * @param desc - the description for the event database + * @param contractAddress - the contract address + * @param tables - the contract event list + * @param abi - the json abi of contract + * @param evmNodeUrl - the websocket url of evm node + * @param startBlock - the start block to subscribe, 0 start from the latest block * @returns the {@link CreateDBResult} * **/ @@ -111,6 +124,62 @@ export async function createEventDatabase( throw new Error('fail to create database') } } +/** + * + * Add index the existing Collection + * + * ```ts + * + * const index:Index = { + * path:'/city', // a top level field name 'city' and the path will be '/city' + * indexType: IndexType.StringKey + * } + * const result = await addIndex(collection, [index]) + * ``` + * @param client - the db3 client instance + * @param indexes - the index list of {@link Index} + * @returns the {@link MutationResult} + * + **/ +export async function addIndex(collection: Collection, indexes: Index[]) { + const addIndexMutation: AddIndexMutation = { + collectionName: collection.name, + indexFields: indexes, + } + + const body: Mutation_BodyWrapper = { + body: { oneofKind: 'addIndexMutation', addIndexMutation }, + dbAddress: fromHEX(collection.db.addr), + } + + const dm: Mutation = { + action: MutationAction.AddIndex, + bodies: [body], + } + const payload = Mutation.toBinary(dm) + try { + const response = await collection.db.client.provider.sendMutation( + payload, + collection.db.client.nonce.toString() + ) + if (response.code == 0) { + return { + result: { + id: response.id, + block: response.block, + order: response.order, + } as MutationResult, + } + } else { + throw new Error('fail to add index with err ' + response.msg) + } + } catch (e) { + throw e + } finally { + collection.db.client.nonce += 1 + } +} + /** * * Create a document database to group the collections @@ -163,12 +232,12 @@ export async function createDocumentDatabase(client: Client, desc: string) { * Get the collection by an db address and collection name * * ```ts - * const database = await getCollection("0x....", "col1", client) + * const collection = await getCollection("0x....", "col1", client) * ``` - * @param addr - a hex format string address + * @param addr - a hex format string database address * @param name - the name of collection - * @param client- the db3 client instance - * @returns the {@link Database}[] + * @param client- the client instance + * @returns the {@link Collection} * **/ export async function getCollection( @@ -187,6 +256,7 @@ export async function getCollection( ) } } + /** * * Get the database by an address @@ -271,7 +341,7 @@ export async function showDatabase(owner: string, client: Client | ReadClient) { * * @param db - the instance of database * @param name - the name of collection - * @param indexFields - the fields for index + * @param indexFields - the fields for {@link Index} * @returns the {@link CreateCollectionResult} * **/ diff --git a/sdk/src/store/document_v2.ts b/sdk/src/store/document_v2.ts index f05483363..c3bee8604 100644 --- a/sdk/src/store/document_v2.ts +++ b/sdk/src/store/document_v2.ts @@ -92,7 +92,7 @@ async function runQueryInternal(col: Collection, query: Query) { * @param col - the instance of collection * @param queryStr - a document query string * @param parameters - an optional query parameters - * @returns the {@link Queryresult} + * @returns the {@link QueryResult} * **/ export async function queryDoc( diff --git a/sdk/tests/client_v2.test.ts b/sdk/tests/client_v2.test.ts index 630db5ecb..37328ebb7 100644 --- a/sdk/tests/client_v2.test.ts +++ b/sdk/tests/client_v2.test.ts @@ -48,6 +48,7 @@ import { createCollection, getDatabase, getCollection, + addIndex, } from '../src/store/database_v2' import { Index, IndexType } from '../src/proto/db3_database_v2' import { SystemConfig } from '../src/proto/db3_base' @@ -271,6 +272,54 @@ describe('test db3.js client module', () => { expect(1).toBe(0) } }) + + test('test add index', async () => { + const client = await createTestClient() + try { + const { db } = await createDocumentDatabase( + client, + 'db_for_add index' + ) + expect(db).toBeDefined() + const index: Index = { + path: '/city', + indexType: IndexType.StringKey, + } + const { collection } = await createCollection(db, 'col', [index]) + expect(collection).toBeDefined() + try { + await addIndex(collection, [index]) + } catch (e) { + expect( + 'invalid key path for error the index paths ["/city"] exist' + ).toBe(e.message) + } + const index2: Index = { + path: '/name', + indexType: IndexType.StringKey, + } + try { + const result = await addIndex(collection, [index2]) + expect(result).toBeDefined() + } catch (e) { + expect(1).toBe(2) + } + const client2 = await createTestClient() + const collection2 = await getCollection(db.addr, 'col', client2) + expect(collection2).toBeDefined() + try { + const result = await addIndex(collection2, [index2]) + expect(1).toBe(2) + } catch (e) { + expect('You have no permission to modify the collection').toBe( + e.message + ) + } + } catch (e) { + console.log(e) + except(1).toBe(2) + } + }) test('test create/update/delete document', async () => { const client = await createTestClient() try { diff --git a/src/error/src/lib.rs b/src/error/src/lib.rs index fbbd95caa..e4379e22d 100644 --- a/src/error/src/lib.rs +++ b/src/error/src/lib.rs @@ -69,12 +69,7 @@ pub enum DB3Error { QuerySessionVerifyError(String), #[error("fail to query database {0}")] QueryDatabaseError(String), - #[error("database with addr {0} was not found")] - DatabaseNotFound(String), - #[error("collection with name {0} was not found in db {1}")] - CollectionNotFound(String, String), - #[error("collection {0} already exist in db {1}")] - CollectionAlreadyExist(String, String), + #[error("the address does not match the public key")] InvalidSigner, #[error("fail to generate key for {0}")] @@ -139,6 +134,16 @@ pub enum DB3Error { InvalidArUrlError(String), #[error("invalid database desc for error {0}")] InvalidDescError(String), + + #[error("database with addr {0} was not found")] + DatabaseNotFound(String), + + #[error("collection with name {0} was not found in db {1}")] + CollectionNotFound(String, String), + #[error("collection {0} already exist in db {1}")] + CollectionAlreadyExist(String, String), + #[error("You have no permission to modify the collection")] + CollectionPermssionDenied(), } pub type Result = std::result::Result; diff --git a/src/node/src/storage_node_light_impl.rs b/src/node/src/storage_node_light_impl.rs index 7a4151795..5adfd475f 100644 --- a/src/node/src/storage_node_light_impl.rs +++ b/src/node/src/storage_node_light_impl.rs @@ -611,7 +611,6 @@ impl StorageNode for StorageNodeV2Impl { })?; let action = MutationAction::from_i32(dm.action) .ok_or(Status::invalid_argument("bad mutation action".to_string()))?; - // TODO validate the database mutation match self.state_store.incr_nonce(&address, nonce) { Ok(_) => { // mutation id @@ -666,7 +665,7 @@ impl StorageNode for StorageNodeV2Impl { }; Ok(response) } - Err(_e) => Ok(Response::new(SendMutationResponse { + Err(e) => Ok(Response::new(SendMutationResponse { id: "".to_string(), code: 1, msg: "bad nonce".to_string(), diff --git a/src/proto/proto/db3_mutation_v2.proto b/src/proto/proto/db3_mutation_v2.proto index ad954672d..027bb87b5 100644 --- a/src/proto/proto/db3_mutation_v2.proto +++ b/src/proto/proto/db3_mutation_v2.proto @@ -47,6 +47,11 @@ message MintDocumentDatabaseMutation { string sender = 6; } +message AddIndexMutation { + string collection_name = 1; + repeated db3_database_v2_proto.Index index_fields = 2; +} + message DocumentMutation { string collection_name = 1; repeated bytes documents = 2; @@ -102,6 +107,7 @@ enum MutationAction { CreateEventDB = 5; MintDocumentDB = 6; MintCollection = 7; + AddIndex = 8; } enum MutationRollupStatus { @@ -121,6 +127,7 @@ message Mutation { DocumentDatabaseMutation doc_database_mutation = 5; MintDocumentDatabaseMutation mint_doc_database_mutation = 6; MintCollectionMutation mint_collection_mutation = 7; + AddIndexMutation add_index_mutation = 8; } } repeated BodyWrapper bodies = 3; diff --git a/src/storage/src/db_store_v2.rs b/src/storage/src/db_store_v2.rs index 6fec73df3..caf00f60f 100644 --- a/src/storage/src/db_store_v2.rs +++ b/src/storage/src/db_store_v2.rs @@ -38,7 +38,7 @@ use db3_proto::db3_mutation_v2_proto::{ use db3_proto::db3_storage_proto::ExtraItem; use prost::Message; use rocksdb::{DBRawIteratorWithThreadMode, DBWithThreadMode, MultiThreaded, Options, WriteBatch}; -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; use std::ops::Deref; use std::ops::DerefMut; use std::path::Path; @@ -496,8 +496,7 @@ impl DBStoreV2 { } pub fn get_collection(&self, db_addr: &DB3Address, name: &str) -> Result> { - let ck = collection_key::build_collection_key(db_addr, name) - .map_err(|e| DB3Error::ReadStoreError(format!("{e}")))?; + let ck = collection_key::build_collection_key(db_addr, name)?; let ck_ref: &[u8] = ck.as_ref(); self.get_entry::(self.config.collection_store_cf_name.as_str(), ck_ref) } @@ -518,11 +517,6 @@ impl DBStoreV2 { "fail to find database".to_string(), )); } - if self.is_db_collection_exist(db_addr, name)? { - return Err(DB3Error::ReadStoreError( - "collection with name exist".to_string(), - )); - } let ck = collection_key::build_collection_key(db_addr, name) .map_err(|e| DB3Error::ReadStoreError(format!("{e}")))?; let collection_store_cf_handle = self @@ -552,7 +546,7 @@ impl DBStoreV2 { self.update_db_state_for_new_collection(db_addr_hex.as_str(), name); if self.config.enable_doc_store { self.doc_store - .create_collection(db_addr, name, indexes) + .add_index(db_addr, name, indexes) .map_err(|e| DB3Error::WriteStoreError(format!("{e}")))?; } Ok(()) @@ -567,6 +561,12 @@ impl DBStoreV2 { order: u32, idx: u16, ) -> Result<()> { + if self.is_db_collection_exist(db_addr, collection.collection_name.as_str())? { + return Err(DB3Error::CollectionAlreadyExist( + collection.collection_name.to_string(), + db_addr.to_hex(), + )); + } self.create_collection_internal( sender, db_addr, @@ -643,10 +643,10 @@ impl DBStoreV2 { query: &Query, ) -> Result<(Vec, u64)> { if !self.is_db_collection_exist(db_addr, col_name)? { - return Err(DB3Error::ReadStoreError(format!( - "collection {col_name} does not exist in db {}", - db_addr.to_hex().as_str() - ))); + return Err(DB3Error::CollectionNotFound( + col_name.to_string(), + db_addr.to_hex(), + )); } if self.config.enable_doc_store { let (result, count) = self.doc_store.execute_query(db_addr, col_name, query)?; @@ -718,8 +718,7 @@ impl DBStoreV2 { /// verify if the collection exists in the given db pub fn is_db_collection_exist(&self, db_addr: &DB3Address, col_name: &str) -> Result { - let ck = collection_key::build_collection_key(db_addr, col_name) - .map_err(|e| DB3Error::ReadStoreError(format!("{e}")))?; + let ck = collection_key::build_collection_key(db_addr, col_name)?; let collection_store_cf_handle = self .se .cf_handle(self.config.collection_store_cf_name.as_str()) @@ -969,6 +968,45 @@ impl DBStoreV2 { Ok(db_addr) } + fn add_index<'a>( + &self, + db_addr: &DB3Address, + col: &str, + indexes: &Vec, + sender: &DB3Address, + ) -> Result<()> { + let db = self.get_database(db_addr)?; + if db.is_none() { + return Err(DB3Error::DatabaseNotFound(db_addr.to_hex())); + } + match self.get_collection(db_addr, col)? { + Some(collection) => { + let collection_sender: &[u8] = collection.sender.as_ref(); + if collection_sender != sender.as_ref() { + return Err(DB3Error::CollectionPermssionDenied()); + } + let path_set: HashSet<&String> = + collection.index_fields.iter().map(|x| &x.path).collect(); + let exist_paths: Vec<&String> = indexes + .iter() + .filter(|x| path_set.contains(&x.path)) + .map(|x| &x.path) + .collect(); + if exist_paths.len() > 0 { + return Err(DB3Error::InvalidKeyPathError(format!( + "the index paths {:?} exist", + exist_paths + ))); + } + Ok(()) + } + None => Err(DB3Error::CollectionNotFound( + col.to_string(), + db_addr.to_hex(), + )), + } + } + pub fn apply_mutation( &self, action: MutationAction, @@ -982,11 +1020,42 @@ impl DBStoreV2 { ) -> Result> { let mut items: Vec = Vec::new(); match action { + MutationAction::AddIndex => { + for body in dm.bodies { + if let Some(Body::AddIndexMutation(ref add_index_mutation)) = &body.body { + let db_address_ref: &[u8] = body.db_address.as_ref(); + let db_addr = DB3Address::try_from(db_address_ref)?; + self.add_index( + &db_addr, + add_index_mutation.collection_name.as_str(), + &add_index_mutation.index_fields, + address, + )?; + let item = ExtraItem { + key: "collection".to_string(), + value: add_index_mutation.collection_name.to_string(), + }; + items.push(item); + info!( + "add index to collection {} done", + add_index_mutation.collection_name.as_str() + ); + break; + } + } + } + MutationAction::MintCollection => { for body in dm.bodies { if let Some(Body::MintCollectionMutation(ref mint_col_mutation)) = &body.body { let sender = DB3Address::try_from(mint_col_mutation.sender.as_str())?; let db_addr = DB3Address::try_from(mint_col_mutation.db_addr.as_str())?; + if self.is_db_collection_exist(&db_addr, mint_col_mutation.name.as_str())? { + return Err(DB3Error::CollectionAlreadyExist( + mint_col_mutation.name.to_string(), + db_addr.to_hex(), + )); + } self.create_collection_internal( &sender, &db_addr, diff --git a/src/storage/src/doc_store.rs b/src/storage/src/doc_store.rs index f7124a661..db734f867 100644 --- a/src/storage/src/doc_store.rs +++ b/src/storage/src/doc_store.rs @@ -101,13 +101,7 @@ impl DocStore { } } - pub fn create_collection( - &self, - db_addr: &DB3Address, - name: &str, - indexes: &Vec, - ) -> Result<()> { - //TODO validata the db address + pub fn add_index(&self, db_addr: &DB3Address, name: &str, indexes: &Vec) -> Result<()> { if indexes.len() > 0 { let key = db_addr.as_ref().to_vec(); let add_addr_clone = db_addr.clone(); @@ -342,7 +336,7 @@ mod tests { path: "/f1".to_string(), index_type: IndexType::StringKey.into(), }]; - let result = doc_store.create_collection(&DB3Address::ZERO, "col1", &indexes); + let result = doc_store.add_index(&DB3Address::ZERO, "col1", &indexes); assert!(result.is_ok()); let doc_str = r#"{"f2":"f2", "f1":"f1"}"#; let id = doc_store From 1325a6f6c055a5a4218c2dfedc3eb40412ff6d08 Mon Sep 17 00:00:00 2001 From: imotai Date: Mon, 24 Jul 2023 18:41:30 +0800 Subject: [PATCH 03/17] test: add index test case --- sdk/src/index.ts | 1 + sdk/src/store/database_v2.ts | 3 +++ sdk/tests/client_v2.test.ts | 22 +++++++++++++++++- sdk/yarn.lock | 13 ++++------- src/node/src/storage_node_light_impl.rs | 2 +- src/proto/proto/db3_database_v2.proto | 1 - src/storage/src/db_store_v2.rs | 31 +++++++------------------ 7 files changed, 39 insertions(+), 34 deletions(-) diff --git a/sdk/src/index.ts b/sdk/src/index.ts index 70dd47739..5343c67f7 100644 --- a/sdk/src/index.ts +++ b/sdk/src/index.ts @@ -57,6 +57,7 @@ export { showCollection, getDatabase, getCollection, + addIndex, } from './store/database_v2' export { Index, IndexType } from './proto/db3_database_v2' diff --git a/sdk/src/store/database_v2.ts b/sdk/src/store/database_v2.ts index 53f8f649b..91c68a6bf 100644 --- a/sdk/src/store/database_v2.ts +++ b/sdk/src/store/database_v2.ts @@ -142,6 +142,9 @@ export async function createEventDatabase( * **/ export async function addIndex(collection: Collection, indexes: Index[]) { + if (indexes.filter((item) => !item.path.startsWith('/')).length > 0) { + throw new Error('the index path must start with /') + } const addIndexMutation: AddIndexMutation = { collectionName: collection.name, indexFields: indexes, diff --git a/sdk/tests/client_v2.test.ts b/sdk/tests/client_v2.test.ts index 37328ebb7..982e392ff 100644 --- a/sdk/tests/client_v2.test.ts +++ b/sdk/tests/client_v2.test.ts @@ -304,6 +304,17 @@ describe('test db3.js client module', () => { } catch (e) { expect(1).toBe(2) } + const badIndex: Index = { + path: 'name', + indexType: IndexType.StringKey, + } + try { + const result = await addIndex(collection, [badIndex]) + expect(1).toBe(2) + } catch (e) { + expect('the index path must start with /').toBe(e.message) + } + const client2 = await createTestClient() const collection2 = await getCollection(db.addr, 'col', client2) expect(collection2).toBeDefined() @@ -315,9 +326,18 @@ describe('test db3.js client module', () => { e.message ) } + expect(collection2.indexFields.length).toBe(2) + expect(collection2.indexFields[0].path).toBe('/city') + expect(collection2.indexFields[0].indexType).toBe( + IndexType.StringKey + ) + expect(collection2.indexFields[1].path).toBe('/name') + expect(collection2.indexFields[1].indexType).toBe( + IndexType.StringKey + ) } catch (e) { console.log(e) - except(1).toBe(2) + expect(1).toBe(2) } }) test('test create/update/delete document', async () => { diff --git a/sdk/yarn.lock b/sdk/yarn.lock index 2ed2a87a2..534aca17c 100644 --- a/sdk/yarn.lock +++ b/sdk/yarn.lock @@ -3213,15 +3213,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001426: - version "1.0.30001443" - resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001443.tgz#8fc85f912d5471c9821acacf9e715c421ca0dd1f" - integrity sha512-jUo8svymO8+Mkj3qbUbVjR8zv8LUGpGkUM/jKvc9SO2BvjCI980dp9fQbf/dyLs6RascPzgR4nhAKFA4OHeSaA== - -caniuse-lite@^1.0.30001400: - version "1.0.30001434" - resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz#ec1ec1cfb0a93a34a0600d37903853030520a4e5" - integrity sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001426: + version "1.0.30001517" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz" + integrity sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA== capture-exit@^2.0.0: version "2.0.0" diff --git a/src/node/src/storage_node_light_impl.rs b/src/node/src/storage_node_light_impl.rs index 5adfd475f..77dbbd7df 100644 --- a/src/node/src/storage_node_light_impl.rs +++ b/src/node/src/storage_node_light_impl.rs @@ -665,7 +665,7 @@ impl StorageNode for StorageNodeV2Impl { }; Ok(response) } - Err(e) => Ok(Response::new(SendMutationResponse { + Err(_e) => Ok(Response::new(SendMutationResponse { id: "".to_string(), code: 1, msg: "bad nonce".to_string(), diff --git a/src/proto/proto/db3_database_v2.proto b/src/proto/proto/db3_database_v2.proto index 420215833..66ba45084 100644 --- a/src/proto/proto/db3_database_v2.proto +++ b/src/proto/proto/db3_database_v2.proto @@ -75,7 +75,6 @@ message EventTable { } message Collection { - bytes id = 1; string name = 2; repeated Index index_fields = 3; bytes sender = 4; diff --git a/src/storage/src/db_store_v2.rs b/src/storage/src/db_store_v2.rs index caf00f60f..d06ba8e1f 100644 --- a/src/storage/src/db_store_v2.rs +++ b/src/storage/src/db_store_v2.rs @@ -24,7 +24,6 @@ use chashmap::CHashMap; use db3_base::bson_util::bytes_to_bson_document; use db3_crypto::db3_address::DB3Address; use db3_crypto::id::DbId; -use db3_crypto::id_v2::OpEntryId; use db3_error::{DB3Error, Result}; use db3_proto::db3_database_v2_proto::{ database_message, BlockState, Collection, CollectionState as CollectionStateProto, @@ -501,15 +500,12 @@ impl DBStoreV2 { self.get_entry::(self.config.collection_store_cf_name.as_str(), ck_ref) } - fn create_collection_internal( + fn save_collection_internal( &self, sender: &DB3Address, db_addr: &DB3Address, name: &str, indexes: &Vec, - block: u64, - order: u32, - idx: u16, ) -> Result<()> { let db = self.get_database(db_addr)?; if db.is_none() { @@ -517,18 +513,13 @@ impl DBStoreV2 { "fail to find database".to_string(), )); } - let ck = collection_key::build_collection_key(db_addr, name) - .map_err(|e| DB3Error::ReadStoreError(format!("{e}")))?; + let ck = collection_key::build_collection_key(db_addr, name)?; let collection_store_cf_handle = self .se .cf_handle(self.config.collection_store_cf_name.as_str()) .ok_or(DB3Error::ReadStoreError("cf is not found".to_string()))?; let ck_ref: &[u8] = ck.as_ref(); - let id = OpEntryId::create(block, order, idx) - .map_err(|e| DB3Error::ReadStoreError(format!("{e}")))?; - // validate the index let col = Collection { - id: id.as_ref().to_vec(), name: name.to_string(), index_fields: indexes.to_vec(), sender: sender.as_ref().to_vec(), @@ -557,9 +548,9 @@ impl DBStoreV2 { sender: &DB3Address, db_addr: &DB3Address, collection: &CollectionMutation, - block: u64, - order: u32, - idx: u16, + _block: u64, + _order: u32, + _idx: u16, ) -> Result<()> { if self.is_db_collection_exist(db_addr, collection.collection_name.as_str())? { return Err(DB3Error::CollectionAlreadyExist( @@ -567,14 +558,11 @@ impl DBStoreV2 { db_addr.to_hex(), )); } - self.create_collection_internal( + self.save_collection_internal( sender, db_addr, collection.collection_name.as_str(), &collection.index_fields, - block, - order, - idx, ) } @@ -998,6 +986,8 @@ impl DBStoreV2 { exist_paths ))); } + let new_indexes = [collection.index_fields, indexes.clone()].concat(); + self.save_collection_internal(sender, db_addr, col, &new_indexes)?; Ok(()) } None => Err(DB3Error::CollectionNotFound( @@ -1056,14 +1046,11 @@ impl DBStoreV2 { db_addr.to_hex(), )); } - self.create_collection_internal( + self.save_collection_internal( &sender, &db_addr, mint_col_mutation.name.as_str(), &vec![], - block, - order, - 0, )?; info!( "add collection with db_addr {}, collection_name: {}, from owner {}", From 770cdabd37c13e1b2424eaa7e98e75fde3ac5069 Mon Sep 17 00:00:00 2001 From: imotai Date: Tue, 25 Jul 2023 14:30:10 +0800 Subject: [PATCH 04/17] fix: update the error report --- src/error/src/lib.rs | 3 ++- src/proto/proto/db3_storage.proto | 3 +++ src/storage/src/db_store_v2.rs | 6 ++---- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/error/src/lib.rs b/src/error/src/lib.rs index e4379e22d..b11682ec6 100644 --- a/src/error/src/lib.rs +++ b/src/error/src/lib.rs @@ -137,7 +137,8 @@ pub enum DB3Error { #[error("database with addr {0} was not found")] DatabaseNotFound(String), - + #[error("database with addr {0} already exist")] + DatabaseAlreadyExist(String), #[error("collection with name {0} was not found in db {1}")] CollectionNotFound(String, String), #[error("collection {0} already exist in db {1}")] diff --git a/src/proto/proto/db3_storage.proto b/src/proto/proto/db3_storage.proto index 783594c9a..1e0f72a55 100644 --- a/src/proto/proto/db3_storage.proto +++ b/src/proto/proto/db3_storage.proto @@ -179,6 +179,9 @@ message MutationStateView { uint64 total_gc_bytes = 8; uint64 total_rollup_raw_bytes = 9; uint64 total_rollup_mutation_count = 10; + uint64 total_database_count = 11; + uint64 total_collection_count = 12; + uint64 total_documents = 13; } message GetMutationStateResponse { diff --git a/src/storage/src/db_store_v2.rs b/src/storage/src/db_store_v2.rs index d06ba8e1f..00316b818 100644 --- a/src/storage/src/db_store_v2.rs +++ b/src/storage/src/db_store_v2.rs @@ -570,6 +570,7 @@ impl DBStoreV2 { self.get_entry::(self.config.db_store_cf_name.as_str(), db_addr.as_ref()) } + pub fn get_state_summary(&self) -> Result<(u64, u64)> {} pub fn get_collection_state( &self, db_addr: &DB3Address, @@ -888,10 +889,7 @@ impl DBStoreV2 { order: u32, ) -> Result<()> { if let Ok(Some(_)) = self.get_database(db_addr.address()) { - return Err(DB3Error::WriteStoreError(format!( - "database with address {} exists", - db_addr.to_hex() - ))); + return Err(DB3Error::DatabaseAlreadyExist(db_addr.to_hex())); } let db_store_cf_handle = self .se From 129d5e991c0a8831c2d77107d97938fda9cfde09 Mon Sep 17 00:00:00 2001 From: imotai Date: Tue, 25 Jul 2023 18:26:53 +0800 Subject: [PATCH 05/17] feat: upgrade version --- sdk/package.json | 2 +- sdk/tests/client_v2.test.ts | 2 +- src/base/Cargo.toml | 6 +++--- src/cmd/Cargo.toml | 2 +- src/crypto/Cargo.toml | 2 +- src/event/Cargo.toml | 10 +++++----- src/node/Cargo.toml | 18 +++++++++--------- src/node/src/system_impl.rs | 5 ++++- src/proto/Cargo.toml | 2 +- src/proto/proto/db3_storage.proto | 3 --- src/sdk/Cargo.toml | 12 ++++++------ src/storage/Cargo.toml | 2 +- src/storage/src/db_store_v2.rs | 3 +-- tools/keys/evm.secret | 2 +- 14 files changed, 35 insertions(+), 36 deletions(-) diff --git a/sdk/package.json b/sdk/package.json index 16999918d..c14a5d70e 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -1,6 +1,6 @@ { "name": "db3.js", - "version": "0.3.18", + "version": "0.4.0", "description": "DB3 Network Javascript API", "author": "dbpunk labs", "keywords": [ diff --git a/sdk/tests/client_v2.test.ts b/sdk/tests/client_v2.test.ts index 982e392ff..e0f7e33fc 100644 --- a/sdk/tests/client_v2.test.ts +++ b/sdk/tests/client_v2.test.ts @@ -736,7 +736,7 @@ describe('test db3.js client module', () => { indexType: IndexType.StringKey, } const { collection } = await createCollection(db, 'col', [index]) - for (var i = 0; i < 1; i++) { + for (var i = 0; i < 110000; i++) { { await addDoc(collection, { name: 'book1', diff --git a/src/base/Cargo.toml b/src/base/Cargo.toml index 62cc98c0d..669d93c74 100644 --- a/src/base/Cargo.toml +++ b/src/base/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "db3-base" -version = "0.1.0" +version = "0.4.0" edition = "2021" authors = ["jack wang "] description = "base module of db3" @@ -12,8 +12,8 @@ keywords = ["database", "web3", "db3"] ethereum-types = { version = "0.14.0", default-features = false } hex = "0.4.3" fastcrypto="0.1.3" -db3-proto={path="../proto", version="0.1.0"} -db3-error={path="../error", version="0.1.0"} +db3-proto={path="../proto"} +db3-error={path="../error"} rand = "0.8.5" bson = "2.5.0" serde_json = {workspace=true} diff --git a/src/cmd/Cargo.toml b/src/cmd/Cargo.toml index fc56b746f..71b091ee3 100644 --- a/src/cmd/Cargo.toml +++ b/src/cmd/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "db3-cmd" -version = "0.1.0" +version = "0.4.0" edition = "2021" authors = ["jack wang "] description = "cmd module of db3" diff --git a/src/crypto/Cargo.toml b/src/crypto/Cargo.toml index e6d667126..2b70328f8 100644 --- a/src/crypto/Cargo.toml +++ b/src/crypto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "db3-crypto" -version = "0.1.0" +version = "0.4.0" edition = "2021" authors = ["jack wang "] description = "crypto module of db3" diff --git a/src/event/Cargo.toml b/src/event/Cargo.toml index ce111f6e4..f6ffbc572 100644 --- a/src/event/Cargo.toml +++ b/src/event/Cargo.toml @@ -1,19 +1,19 @@ [package] name = "db3-event" -version = "0.1.0" +version = "0.4.0" edition = "2021" [dependencies] ethers = { workspace = true , features=["ws"]} tracing = "0.1" -db3-error={path="../error", version="0.1.0"} -db3-crypto={path="../crypto", version="0.1.0"} -db3-proto={path="../proto", version="0.1.0"} +db3-error={path="../error"} +db3-crypto={path="../crypto"} +db3-proto={path="../proto"} serde_json = { workspace=true} bytes = "1" prost = "0.11" prost-types = "0.11" -db3-storage={path="../storage", version="0.1.0"} +db3-storage={path="../storage"} ethabi = { version = "18.0.0", default-features = false, features = ["full-serde", "rlp"] } hex = "0.4.3" tokio = { version = "1.17.0", features = ["full"] } diff --git a/src/node/Cargo.toml b/src/node/Cargo.toml index 2d842cc0f..34f7f20c0 100644 --- a/src/node/Cargo.toml +++ b/src/node/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "db3-node" -version = "0.1.0" +version = "0.4.0" edition = "2021" [[bin]] @@ -10,14 +10,14 @@ path = "src/main.rs" [dependencies] bytes = { version = "1.4", default-features = false } flex-error = { version = "0.4.4", default-features = false } -db3-proto={path="../proto", version="0.1.0"} -db3-crypto={path="../crypto", version="0.1.0"} -db3-storage={path="../storage", version="0.1.0"} -db3-base={path="../base", version="0.1.0"} -db3-error={path="../error", version="0.1.0"} -db3-cmd={path="../cmd", version="0.1.0"} -db3-sdk={path="../sdk", version="0.1.0"} -db3-event={path="../event", version="0.1.0"} +db3-proto={path="../proto"} +db3-crypto={path="../crypto"} +db3-storage={path="../storage"} +db3-base={path="../base"} +db3-error={path="../error"} +db3-cmd={path="../cmd"} +db3-sdk={path="../sdk"} +db3-event={path="../event"} ethers = { workspace = true } tonic = { workspace = true } tonic-web = { workspace = true } diff --git a/src/node/src/system_impl.rs b/src/node/src/system_impl.rs index 2d7782e15..ab2ec3a56 100644 --- a/src/node/src/system_impl.rs +++ b/src/node/src/system_impl.rs @@ -17,6 +17,7 @@ use crate::mutation_utils::MutationUtil; use crate::version_util; +use db3_crypto::db3_address::DB3Address; use db3_error::{DB3Error, Result}; use db3_proto::db3_base_proto::SystemConfig; use db3_proto::db3_base_proto::SystemStatus; @@ -186,6 +187,8 @@ impl System for SystemImpl { .get_ar_address() .map_err(|e| Status::internal(format!("fail to get ar address {e}")))?; let readable_addr = hex::encode(evm_address); + let db3_addr = DB3Address::try_from(self.admin_addr.0.as_ref()) + .map_err(|e| Status::internal(format!("fail to convert the admin address {e}")))?; Ok(Response::new(SystemStatus { evm_account: format!("0x{}", readable_addr), evm_balance: "".to_string(), @@ -194,7 +197,7 @@ impl System for SystemImpl { node_url: self.public_node_url.to_string(), config: system_config, has_inited, - admin_addr: self.admin_addr.to_string(), + admin_addr: db3_addr.to_hex(), version: Some(version_util::build_version()), })) } diff --git a/src/proto/Cargo.toml b/src/proto/Cargo.toml index 097a96f93..06108f212 100644 --- a/src/proto/Cargo.toml +++ b/src/proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "db3-proto" -version = "0.1.0" +version = "0.4.0" edition = "2021" authors = ["jack wang "] description = "proto module of db3" diff --git a/src/proto/proto/db3_storage.proto b/src/proto/proto/db3_storage.proto index 1e0f72a55..783594c9a 100644 --- a/src/proto/proto/db3_storage.proto +++ b/src/proto/proto/db3_storage.proto @@ -179,9 +179,6 @@ message MutationStateView { uint64 total_gc_bytes = 8; uint64 total_rollup_raw_bytes = 9; uint64 total_rollup_mutation_count = 10; - uint64 total_database_count = 11; - uint64 total_collection_count = 12; - uint64 total_documents = 13; } message GetMutationStateResponse { diff --git a/src/sdk/Cargo.toml b/src/sdk/Cargo.toml index 7f03cabd5..148b8134e 100644 --- a/src/sdk/Cargo.toml +++ b/src/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "db3-sdk" -version = "0.1.0" +version = "0.4.0" edition = "2021" authors = ["jack wang "] description = "sdk module of db3" @@ -10,9 +10,9 @@ keywords = ["database", "web3", "db3"] [dependencies] ethers = { workspace = true } -db3-proto={path="../proto", version="0.1.0"} -db3-error={path="../error", version="0.1.0"} -db3-crypto={path="../crypto", version="0.1.0"} +db3-proto={path="../proto"} +db3-error={path="../error"} +db3-crypto={path="../crypto"} bytes = { version = "1.0", default-features = false } tokio = { version = "1.17.0", features = ["full"] } tonic = { workspace=true, features = ["tls-roots"]} @@ -24,8 +24,8 @@ rand = "0.8.5" serde_json = {workspace=true} hex = "0.4.3" [dev-dependencies] -db3-base={path="../base", version="0.1.0"} -db3-cmd={path="../cmd", version="0.1.0"} +db3-base={path="../base"} +db3-cmd={path="../cmd" } criterion = { version = "0.3.4", default-features = false,features = ["async_futures", "async_tokio"]} [[bench]] name = "sdk_benchmark" diff --git a/src/storage/Cargo.toml b/src/storage/Cargo.toml index b33e53c40..e73236c7d 100644 --- a/src/storage/Cargo.toml +++ b/src/storage/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "db3-storage" -version = "0.1.0" +version = "0.4.0" edition = "2021" authors = ["jack wang "] description = "storage module of db3" diff --git a/src/storage/src/db_store_v2.rs b/src/storage/src/db_store_v2.rs index 00316b818..9069a5235 100644 --- a/src/storage/src/db_store_v2.rs +++ b/src/storage/src/db_store_v2.rs @@ -570,7 +570,6 @@ impl DBStoreV2 { self.get_entry::(self.config.db_store_cf_name.as_str(), db_addr.as_ref()) } - pub fn get_state_summary(&self) -> Result<(u64, u64)> {} pub fn get_collection_state( &self, db_addr: &DB3Address, @@ -1198,7 +1197,7 @@ impl DBStoreV2 { doc_ids_map.get(i.to_string().as_str()), ) .map_err(|e| DB3Error::ApplyMutationError(format!("{e}")))?; - info!( + debug!( "add documents with db_addr {}, collection_name: {}, from owner {}, document size: {}", db_addr.to_hex().as_str(), doc_mutation.collection_name.as_str(), diff --git a/tools/keys/evm.secret b/tools/keys/evm.secret index 34258055c..d086b3b23 100644 --- a/tools/keys/evm.secret +++ b/tools/keys/evm.secret @@ -1 +1 @@ -rAl0vsOaF+NrpKa00jj/lEustHjL7V78rnhNe/Ty/4A= \ No newline at end of file +AnsJp18cZJXPQ5sSla3NS6v7P00a9fzzkSvuwUMMQlM= \ No newline at end of file From b290d08111d51c54511a11c2b590e2d1a9cf92e7 Mon Sep 17 00:00:00 2001 From: imotai Date: Tue, 25 Jul 2023 18:29:14 +0800 Subject: [PATCH 06/17] fix: revert the key and case --- sdk/tests/client_v2.test.ts | 2 +- tools/keys/evm.secret | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/tests/client_v2.test.ts b/sdk/tests/client_v2.test.ts index e0f7e33fc..982e392ff 100644 --- a/sdk/tests/client_v2.test.ts +++ b/sdk/tests/client_v2.test.ts @@ -736,7 +736,7 @@ describe('test db3.js client module', () => { indexType: IndexType.StringKey, } const { collection } = await createCollection(db, 'col', [index]) - for (var i = 0; i < 110000; i++) { + for (var i = 0; i < 1; i++) { { await addDoc(collection, { name: 'book1', diff --git a/tools/keys/evm.secret b/tools/keys/evm.secret index d086b3b23..34258055c 100644 --- a/tools/keys/evm.secret +++ b/tools/keys/evm.secret @@ -1 +1 @@ -AnsJp18cZJXPQ5sSla3NS6v7P00a9fzzkSvuwUMMQlM= \ No newline at end of file +rAl0vsOaF+NrpKa00jj/lEustHjL7V78rnhNe/Ty/4A= \ No newline at end of file From f785921d97260bd16d4b40cf815998887e7fa536 Mon Sep 17 00:00:00 2001 From: imotai Date: Wed, 26 Jul 2023 23:03:20 +0800 Subject: [PATCH 07/17] feat: add delete event db --- sdk/package.json | 2 +- sdk/src/index.ts | 2 + sdk/src/provider/indexer_provider.ts | 16 ++- sdk/src/store/database_v2.ts | 72 +++++++++++++ src/error/src/lib.rs | 4 +- src/node/src/indexer_impl.rs | 93 +++++++++++++++-- src/proto/proto/db3_indexer.proto | 10 ++ src/proto/proto/db3_mutation_v2.proto | 4 + src/storage/src/db_store_v2.rs | 139 +++++++++++++++++++++++++- tools/keys/evm.secret | 2 +- 10 files changed, 327 insertions(+), 17 deletions(-) diff --git a/sdk/package.json b/sdk/package.json index c14a5d70e..dcc2b5308 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -1,6 +1,6 @@ { "name": "db3.js", - "version": "0.4.0", + "version": "0.4.1", "description": "DB3 Network Javascript API", "author": "dbpunk labs", "keywords": [ diff --git a/sdk/src/index.ts b/sdk/src/index.ts index 5343c67f7..a365d62a7 100644 --- a/sdk/src/index.ts +++ b/sdk/src/index.ts @@ -55,9 +55,11 @@ export { showDatabase, createCollection, showCollection, + showCollectionFromIndex, getDatabase, getCollection, addIndex, + deleteEventDatabase } from './store/database_v2' export { Index, IndexType } from './proto/db3_database_v2' diff --git a/sdk/src/provider/indexer_provider.ts b/sdk/src/provider/indexer_provider.ts index 2370dfe11..b7a92cdbd 100644 --- a/sdk/src/provider/indexer_provider.ts +++ b/sdk/src/provider/indexer_provider.ts @@ -24,6 +24,7 @@ import { SystemClient } from '../proto/db3_system.client' import { RunQueryRequest, GetContractSyncStatusRequest, + GetCollectionOfDatabaseRequest, } from '../proto/db3_indexer' import { SetupRequest, GetSystemStatusRequest } from '../proto/db3_system' import { Query } from '../proto/db3_database_v2' @@ -84,7 +85,6 @@ export class IndexerProvider { } async getContractSyncStatus() { const request: GetContractSyncStatusRequest = {} - try { const { response } = await this.client.getContractSyncStatus( request @@ -94,4 +94,18 @@ export class IndexerProvider { throw new DB3Error(e as RpcError) } } + + async getCollectionOfDatabase(db: string) { + const request: GetCollectionOfDatabaseRequest = { + dbAddr: db, + } + try { + const { response } = await this.client.getCollectionOfDatabase( + request + ) + return response + } catch (e) { + throw new DB3Error(e) + } + } } diff --git a/sdk/src/store/database_v2.ts b/sdk/src/store/database_v2.ts index 91c68a6bf..0d41d10be 100644 --- a/sdk/src/store/database_v2.ts +++ b/sdk/src/store/database_v2.ts @@ -33,12 +33,58 @@ import { DocumentDatabaseMutation, EventDatabaseMutation, AddIndexMutation, + DeleteEventDatabaseMutation, } from '../proto/db3_mutation_v2' import { Client, ReadClient } from '../client/types' import { toHEX, fromHEX } from '../crypto/crypto_utils' import { Index } from '../proto/db3_database_v2' +/** + * + * Delete the event database + * + * ```ts + * const result = await deleteEventDatabase(client, + * "0x....") + * ``` + * @param client - the client instance + * @param address - the address of event database + * @returns the {@link MutationResult} + * @note only the owner of event database can delete the event database + * + **/ +export async function deleteEventDatabase(client: Client, dbAddress: string) { + const mutation: DeleteEventDatabaseMutation = {} + const body: Mutation_BodyWrapper = { + body: { + oneofKind: 'deleteEventDatabaseMutation', + deleteEventDatabaseMutation: mutation, + }, + dbAddress: fromHEX(dbAddress), + } + + const dm: Mutation = { + action: MutationAction.DeleteEventDB, + bodies: [body], + } + const payload = Mutation.toBinary(dm) + const response = await client.provider.sendMutation( + payload, + client.nonce.toString() + ) + if (response.code == 0) { + client.nonce += 1 + return { + id: response.id, + block: response.block, + order: response.order, + } as MutationResult + } else { + throw new Error('fail to create database') + } +} + /** * * Create an event database to store contract events @@ -424,3 +470,29 @@ export async function showCollection(db: Database) { }) return collectionList } + +/** + * + * Query collections in the database from the index + * + * ```ts + * const collections = await showCollectionFromIndex(db) + * ``` + * + * @param db - the instance of database + * @returns the {@link Collection[]} + * + **/ +export async function showCollectionFromIndex(db: Database) { + const response = await db.client.indexer.getCollectionOfDatabase(db.addr) + const collectionList = response.collections.map((c, index) => { + return { + name: c.name, + db, + indexFields: c.indexFields, + internal: c, + state: response.states[index], + } as Collection + }) + return collectionList +} diff --git a/src/error/src/lib.rs b/src/error/src/lib.rs index b11682ec6..dedb62802 100644 --- a/src/error/src/lib.rs +++ b/src/error/src/lib.rs @@ -139,12 +139,14 @@ pub enum DB3Error { DatabaseNotFound(String), #[error("database with addr {0} already exist")] DatabaseAlreadyExist(String), + #[error("You have no permission to delete the database")] + DatabasePermissionDenied(), #[error("collection with name {0} was not found in db {1}")] CollectionNotFound(String, String), #[error("collection {0} already exist in db {1}")] CollectionAlreadyExist(String, String), #[error("You have no permission to modify the collection")] - CollectionPermssionDenied(), + CollectionPermissionDenied(), } pub type Result = std::result::Result; diff --git a/src/node/src/indexer_impl.rs b/src/node/src/indexer_impl.rs index eaf9ac799..555072cc1 100644 --- a/src/node/src/indexer_impl.rs +++ b/src/node/src/indexer_impl.rs @@ -22,8 +22,8 @@ use db3_event::event_processor::EventProcessor; use db3_event::event_processor::EventProcessorConfig; use db3_proto::db3_indexer_proto::indexer_node_server::IndexerNode; use db3_proto::db3_indexer_proto::{ - ContractSyncStatus, GetContractSyncStatusRequest, GetContractSyncStatusResponse, - RunQueryRequest, RunQueryResponse, + ContractSyncStatus, GetCollectionOfDatabaseRequest, GetCollectionOfDatabaseResponse, + GetContractSyncStatusRequest, GetContractSyncStatusResponse, RunQueryRequest, RunQueryResponse, }; use db3_proto::db3_mutation_v2_proto::MutationAction; use db3_proto::db3_storage_proto::block_response::MutationWrapper; @@ -201,9 +201,10 @@ impl IndexerNodeImpl { contract_address: &str, start_block: u64, ) -> Result<()> { + let db_addr = db.to_hex(); let config = EventProcessorConfig { evm_node_url: evm_node_url.to_string(), - db_addr: db.to_hex(), + db_addr: db_addr.to_string(), abi: abi.to_string(), target_events: tables.iter().map(|t| t.to_string()).collect(), contract_addr: contract_address.to_string(), @@ -217,14 +218,10 @@ impl IndexerNodeImpl { match self.processor_mapping.lock() { Ok(mut mapping) => { //TODO limit the total count - if mapping.contains_key(contract_address) { - warn!("contract addr {} exist", contract_address); - return Err(DB3Error::WriteStoreError(format!( - "contract_addr {} exist", - contract_address - ))); + if mapping.contains_key(db_addr.as_str()) { + return Err(DB3Error::DatabaseAlreadyExist(db_addr.to_string())); } - mapping.insert(contract_address.to_string(), processor.clone()); + mapping.insert(db_addr.to_string(), processor.clone()); } _ => todo!(), } @@ -241,6 +238,22 @@ impl IndexerNodeImpl { Ok(()) } + fn close_event_task(&self, db: &DB3Address) -> Result<()> { + let addr = db.to_hex(); + match self.processor_mapping.lock() { + Ok(mut mapping) => match mapping.remove(addr.as_str()) { + Some(task) => { + task.close(); + } + None => { + return Err(DB3Error::DatabaseNotFound(addr.to_string())); + } + }, + _ => todo!(), + } + Ok(()) + } + async fn parse_and_apply_mutations(&self, mutations: &Vec) -> Result<()> { for mutation in mutations.iter() { let header = mutation.header.as_ref().unwrap(); @@ -252,14 +265,16 @@ impl IndexerNodeImpl { let action = MutationAction::from_i32(dm.action).ok_or(DB3Error::WriteStoreError( "fail to convert action type".to_string(), ))?; + let (block, order, doc_ids_map_str) = match &mutation.header { Some(header) => Ok((header.block_id, header.order_id, &header.doc_ids_map)), _ => Err(DB3Error::WriteStoreError( "invalid mutation header".to_string(), )), }?; + let doc_ids_map = MutationUtil::convert_doc_ids_map_to_vec(doc_ids_map_str)?; - self.db_store.apply_mutation( + let extra_items = self.db_store.apply_mutation( action, dm, &address, @@ -269,6 +284,39 @@ impl IndexerNodeImpl { order, &doc_ids_map, )?; + match action { + MutationAction::CreateEventDb => { + if extra_items.len() > 0 && extra_items[0].key.as_str() == "db_addr" { + let addr = DB3Address::from_hex(extra_items[0].value.as_str())?; + let (collections, _) = self.db_store.get_collection_of_database(&addr)?; + let tables = collections.iter().map(|c| c.name.to_string()).collect(); + if let Some(database) = self.db_store.get_event_db(&addr)? { + if let Err(e) = self + .start_an_event_task( + &addr, + database.evm_node_url.as_str(), + database.events_json_abi.as_str(), + &tables, + database.contract_address.as_str(), + 0, + ) + .await + { + info!("start the event db {} with error {e}", addr.to_hex()); + } else { + info!("start event db {} done", addr.to_hex()); + } + } + } + } + MutationAction::DeleteEventDb => { + if extra_items.len() > 0 && extra_items[0].key.as_str() == "db_addr" { + let addr = DB3Address::from_hex(extra_items[0].value.as_str())?; + self.close_event_task(&addr)?; + } + } + _ => {} + } } Ok(()) } @@ -295,6 +343,29 @@ impl IndexerNode for IndexerNodeImpl { Ok(Response::new(GetContractSyncStatusResponse { status_list })) } + async fn get_collection_of_database( + &self, + request: Request, + ) -> std::result::Result, Status> { + let r = request.into_inner(); + let addr = DB3Address::from_hex(r.db_addr.as_str()) + .map_err(|e| Status::invalid_argument(format!("invalid database address {e}")))?; + let (collections, collection_states) = self + .db_store + .get_collection_of_database(&addr) + .map_err(|e| Status::internal(format!("fail to get collect of database {e}")))?; + + info!( + "query collection count {} with database {}", + collections.len(), + r.db_addr.as_str() + ); + Ok(Response::new(GetCollectionOfDatabaseResponse { + collections, + states: collection_states, + })) + } + async fn run_query( &self, request: Request, diff --git a/src/proto/proto/db3_indexer.proto b/src/proto/proto/db3_indexer.proto index d5c829262..18eafc44e 100644 --- a/src/proto/proto/db3_indexer.proto +++ b/src/proto/proto/db3_indexer.proto @@ -47,13 +47,23 @@ message ContractSyncStatus { uint64 event_number = 4; } +message GetCollectionOfDatabaseResponse { + repeated db3_database_v2_proto.Collection collections = 1; + repeated db3_database_v2_proto.CollectionState states = 2; +} +message GetCollectionOfDatabaseRequest { + string db_addr = 1; +} + message GetContractSyncStatusResponse { repeated ContractSyncStatus status_list = 1; } + message GetContractSyncStatusRequest {} service IndexerNode { rpc GetContractSyncStatus(GetContractSyncStatusRequest) returns (GetContractSyncStatusResponse) {} + rpc GetCollectionOfDatabase(GetCollectionOfDatabaseRequest) returns (GetCollectionOfDatabaseResponse) {} // method for query document rpc RunQuery(RunQueryRequest) returns (RunQueryResponse) {} } diff --git a/src/proto/proto/db3_mutation_v2.proto b/src/proto/proto/db3_mutation_v2.proto index 027bb87b5..8f3a988cc 100644 --- a/src/proto/proto/db3_mutation_v2.proto +++ b/src/proto/proto/db3_mutation_v2.proto @@ -47,6 +47,8 @@ message MintDocumentDatabaseMutation { string sender = 6; } +message DeleteEventDatabaseMutation {} + message AddIndexMutation { string collection_name = 1; repeated db3_database_v2_proto.Index index_fields = 2; @@ -108,6 +110,7 @@ enum MutationAction { MintDocumentDB = 6; MintCollection = 7; AddIndex = 8; + DeleteEventDB = 9; } enum MutationRollupStatus { @@ -128,6 +131,7 @@ message Mutation { MintDocumentDatabaseMutation mint_doc_database_mutation = 6; MintCollectionMutation mint_collection_mutation = 7; AddIndexMutation add_index_mutation = 8; + DeleteEventDatabaseMutation delete_event_database_mutation = 9; } } repeated BodyWrapper bodies = 3; diff --git a/src/storage/src/db_store_v2.rs b/src/storage/src/db_store_v2.rs index 9069a5235..1ee772713 100644 --- a/src/storage/src/db_store_v2.rs +++ b/src/storage/src/db_store_v2.rs @@ -131,6 +131,16 @@ impl DBStoreV2 { .map_err(|e| DB3Error::WriteStoreError(format!("{e}"))) } + pub fn get_event_db(&self, addr: &DB3Address) -> Result> { + let database = self.get_database(addr)?; + if let Some(db) = database { + if let Some(database_message::Database::EventDb(event_db)) = db.database { + return Ok(Some(event_db)); + } + } + return Ok(None); + } + pub fn get_all_event_db(&self) -> Result> { let cf_handle = self .se @@ -389,6 +399,14 @@ impl DBStoreV2 { &self, owner: &DB3Address, ) -> Result<(Vec, Vec)> { + let (_keys, databases, states) = self.get_database_of_owner_internal(owner)?; + Ok((databases, states)) + } + + fn get_database_of_owner_internal( + &self, + owner: &DB3Address, + ) -> Result<(Vec>, Vec, Vec)> { let cf_handle = self .se .cf_handle(self.config.db_owner_store_cf_name.as_str()) @@ -396,6 +414,7 @@ impl DBStoreV2 { let mut it: DBRawIterator = self.se.prefix_iterator_cf(&cf_handle, owner).into(); let mut entries: Vec = Vec::new(); let mut database_state: Vec = Vec::new(); + let mut keys: Vec> = Vec::new(); while it.valid() { if let Some(k) = it.key() { if &k[0..owner.as_ref().len()] != owner.as_ref() { @@ -411,12 +430,15 @@ impl DBStoreV2 { if let Some(state) = self.get_database_state(&addr) { entries.push(d); database_state.push(state); + if let Some(key_ref) = it.key() { + keys.push(key_ref.to_vec()); + } } } } it.next(); } - Ok((entries, database_state)) + Ok((keys, entries, database_state)) } fn get_entries_with_prefix(&self, prefix: &[u8], cf: &str) -> Result> @@ -879,6 +901,59 @@ impl DBStoreV2 { Ok(db_addr) } + pub fn delete_event_db(&self, sender: &DB3Address, db_addr: &DB3Address) -> Result<()> { + match self.get_event_db(db_addr)? { + Some(database) => { + let sender_ref: &[u8] = database.sender.as_ref(); + if sender_ref != sender.as_ref() { + return Err(DB3Error::DatabasePermissionDenied()); + } + self.delete_event_db_internal(sender, db_addr)?; + } + None => return Err(DB3Error::DatabaseNotFound(db_addr.to_hex())), + } + Ok(()) + } + + // make sure the db is event db + fn delete_event_db_internal(&self, owner: &DB3Address, db_addr: &DB3Address) -> Result<()> { + let cf_handle = self + .se + .cf_handle(self.config.db_owner_store_cf_name.as_str()) + .ok_or(DB3Error::ReadStoreError("cf is not found".to_string()))?; + let mut it: DBRawIterator = self.se.prefix_iterator_cf(&cf_handle, owner).into(); + let mut batch = WriteBatch::default(); + while it.valid() { + if let Some(k) = it.key() { + if &k[0..owner.as_ref().len()] != owner.as_ref() { + break; + } + } else { + break; + } + if let Some(v) = it.value() { + let addr = DB3Address::try_from(v) + .map_err(|e| DB3Error::ReadStoreError(format!("{e}")))?; + if addr.as_ref() == db_addr.as_ref() { + if let Some(key_ref) = it.key() { + batch.delete_cf(&cf_handle, key_ref); + } + break; + } + } + it.next(); + } + let db_store_cf_handle = self + .se + .cf_handle(self.config.db_store_cf_name.as_str()) + .ok_or(DB3Error::ReadStoreError("cf is not found".to_string()))?; + batch.delete_cf(&db_store_cf_handle, db_addr); + self.se + .write(batch) + .map_err(|e| DB3Error::WriteStoreError(format!("{e}")))?; + Ok(()) + } + pub fn create_predefined_doc_database( &self, sender: &DB3Address, @@ -968,7 +1043,7 @@ impl DBStoreV2 { Some(collection) => { let collection_sender: &[u8] = collection.sender.as_ref(); if collection_sender != sender.as_ref() { - return Err(DB3Error::CollectionPermssionDenied()); + return Err(DB3Error::CollectionPermissionDenied()); } let path_set: HashSet<&String> = collection.index_fields.iter().map(|x| &x.path).collect(); @@ -1007,6 +1082,22 @@ impl DBStoreV2 { ) -> Result> { let mut items: Vec = Vec::new(); match action { + MutationAction::DeleteEventDb => { + for body in dm.bodies { + if let Some(Body::DeleteEventDatabaseMutation(ref _del_mutation)) = &body.body { + let db_address_ref: &[u8] = body.db_address.as_ref(); + let db_addr = DB3Address::try_from(db_address_ref)?; + self.delete_event_db(address, &db_addr)?; + let item = ExtraItem { + key: "db_addr".to_string(), + value: db_addr.to_hex(), + }; + items.push(item) + } + break; + } + } + MutationAction::AddIndex => { for body in dm.bodies { if let Some(Body::AddIndexMutation(ref add_index_mutation)) = &body.body { @@ -1413,6 +1504,49 @@ mod tests { } } + #[test] + fn event_db_smoke_test() { + let tmp_dir_path = TempDir::new("new_database").expect("create temp dir"); + let real_path = tmp_dir_path.path().to_str().unwrap().to_string(); + let config = DBStoreV2Config { + db_path: real_path, + db_store_cf_name: "db".to_string(), + doc_store_cf_name: "doc".to_string(), + collection_store_cf_name: "cf2".to_string(), + index_store_cf_name: "index".to_string(), + doc_owner_store_cf_name: "doc_owner".to_string(), + db_owner_store_cf_name: "db_owner".to_string(), + scan_max_limit: 50, + enable_doc_store: false, + doc_store_conf: DocStoreConfig::default(), + doc_start_id: 1000, + }; + let result = DBStoreV2::new(config); + assert_eq!(result.is_ok(), true); + let emutation = EventDatabaseMutation { + contract_address: "".to_string(), + ttl: 0, + desc: "desc".to_string(), + tables: vec![], + events_json_abi: "".to_string(), + evm_node_url: "".to_string(), + start_block: 0, + }; + let db3_store = result.unwrap(); + let result = db3_store.create_event_database(&DB3Address::ZERO, &emutation, 1, 1, 1, 1); + assert_eq!(result.is_ok(), true); + let db_id = result.unwrap(); + if let Ok(Some(_d)) = db3_store.get_event_db(db_id.address()) { + } else { + assert!(false); + } + let result = db3_store.delete_event_db(&DB3Address::ZERO, db_id.address()); + assert_eq!(result.is_ok(), true); + if let Ok(Some(_d)) = db3_store.get_event_db(db_id.address()) { + assert!(false); + } + } + #[test] fn test_increase_db_doc_order_ut() { let tmp_dir_path = TempDir::new("new_database").expect("create temp dir"); @@ -1446,6 +1580,7 @@ mod tests { .unwrap(); assert_eq!(result, Some(vec![1, 2, 3])); } + #[test] fn test_update_db_state_for_add_docs_with_given_doc_ids() { let tmp_dir_path = TempDir::new("new_database").expect("create temp dir"); diff --git a/tools/keys/evm.secret b/tools/keys/evm.secret index 34258055c..62ffc45a6 100644 --- a/tools/keys/evm.secret +++ b/tools/keys/evm.secret @@ -1 +1 @@ -rAl0vsOaF+NrpKa00jj/lEustHjL7V78rnhNe/Ty/4A= \ No newline at end of file +KVByEcWHriLBzZdW6p8PiZcB4IsOO2Bln9kS1AEr3cM= \ No newline at end of file From 1008dfcfcc013f75212a7cb50fa3dd7d32741866 Mon Sep 17 00:00:00 2001 From: imotai Date: Thu, 27 Jul 2023 00:31:33 +0800 Subject: [PATCH 08/17] fix: revert evm key --- docker/start_localnet.sh | 13 ++++++------- tools/keys/evm.secret | 2 +- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/docker/start_localnet.sh b/docker/start_localnet.sh index 54466ec95..7459fba97 100644 --- a/docker/start_localnet.sh +++ b/docker/start_localnet.sh @@ -3,23 +3,22 @@ echo "ADMIN ADDR ${ADMIN_ADDR}" mkdir -p ./mutation_db ./state_db ./doc_db ./keys ./index_meta_db ./index_doc_db echo "start store node..." -/usr/bin/db3 store --admin-addr=${ADMIN_ADDR} --public-host 0.0.0.0 --rollup-interval 30000 --contract-addr=0xb9709ce5e749b80978182db1bedfb8c7340039a9 --evm-node-url=https://polygon-mumbai.g.alchemy.com/v2/kiuid-hlfzpnletzqdvwo38iqn0giefr > store.log 2>&1 & +/usr/bin/db3 rollup --admin-addr=${ADMIN_ADDR} --bind-host 0.0.0.0 > rollup.log 2>&1 & sleep 3 echo "start index node..." -/usr/bin/db3 indexer --admin-addr=${ADMIN_ADDR} --public-host 0.0.0.0 --contract-addr=0xb9709ce5e749b80978182db1bedfb8c7340039a9 --evm-node-url=https://polygon-mumbai.g.alchemy.com/v2/kiuid-hlfzpnletzqdvwo38iqn0giefr> indexer.log 2>&1 & +/usr/bin/db3 index --admin-addr=${ADMIN_ADDR} --bind-host 0.0.0.0 > index.log 2>&1 & sleep 3 - npx serve -l 26629 -s /pages > pages.log 2>&1 & -AR_ADDRESS=`cat /store.log | grep filestore | awk '{print $NF}'` +AR_ADDRESS=`less rollup.log | grep Arweave | awk '{print $NF}'` +STORE_EVM_ADDRESS=`less rollup.log | grep Evm | grep address | awk '{print $NF}'` echo "the ar account address ${AR_ADDRESS}" echo "start ar testnet ..." bash /usr/bin/ar_miner.sh > miner.log 2>&1 & sleep 2 curl http://127.0.0.1:1984/mint/${AR_ADDRESS}/10000000000000 echo "Start the local db3 nodes successfully" -echo "The storage node url: http://127.0.0.1:26619" +echo "The rollup node url: http://127.0.0.1:26619" echo "The index node url: http://127.0.0.1:26639" -echo "The console node url: http://127.0.0.1:26629/console" -echo "The setup url: http://127.0.0.1:26629/welcome" +echo "The setup url: http://127.0.0.1:26629" while true; do sleep 10 ; done diff --git a/tools/keys/evm.secret b/tools/keys/evm.secret index 62ffc45a6..34258055c 100644 --- a/tools/keys/evm.secret +++ b/tools/keys/evm.secret @@ -1 +1 @@ -KVByEcWHriLBzZdW6p8PiZcB4IsOO2Bln9kS1AEr3cM= \ No newline at end of file +rAl0vsOaF+NrpKa00jj/lEustHjL7V78rnhNe/Ty/4A= \ No newline at end of file From 33ed1aa043a3854fb61e00f68fdd0c2a9f127173 Mon Sep 17 00:00:00 2001 From: imotai Date: Thu, 27 Jul 2023 17:50:55 +0800 Subject: [PATCH 09/17] fix: fix the meta and reconnect bug --- src/node/src/indexer_impl.rs | 3 +- src/node/src/storage_node_light_impl.rs | 21 ++++ src/proto/proto/db3_database_v2.proto | 1 + src/storage/src/db_store_v2.rs | 153 +++++++++++++++++++++++- 4 files changed, 176 insertions(+), 2 deletions(-) diff --git a/src/node/src/indexer_impl.rs b/src/node/src/indexer_impl.rs index 555072cc1..7737108e3 100644 --- a/src/node/src/indexer_impl.rs +++ b/src/node/src/indexer_impl.rs @@ -150,7 +150,7 @@ impl IndexerNodeImpl { Ok(handle) => { info!("listen and handle event message"); let mut stream = handle.into_inner(); - while let Some(event) = stream.message().await.unwrap() { + while let Ok(Some(event)) = stream.message().await { match self.handle_event(event, &store_sdk).await { Err(e) => { warn!("[IndexerBlockSyncer] handle event error: {:?}", e); @@ -158,6 +158,7 @@ impl IndexerNodeImpl { _ => {} } } + sleep(Duration::from_millis(1000 * 5)).await; } Err(e) => { warn!("fail to subscribe block event for {e} and retry in 5 seconds"); diff --git a/src/node/src/storage_node_light_impl.rs b/src/node/src/storage_node_light_impl.rs index 77dbbd7df..35b5bbef6 100644 --- a/src/node/src/storage_node_light_impl.rs +++ b/src/node/src/storage_node_light_impl.rs @@ -180,6 +180,27 @@ impl StorageNodeV2Impl { pub async fn start_bg_task(&self) { self.start_to_produce_block().await; self.start_to_rollup().await; + self.start_flush_state().await; + } + + async fn start_flush_state(&self) { + let local_db_store = self.db_store.clone(); + let local_running = self.running.clone(); + task::spawn(async move { + info!("start the database meta flush thread"); + while local_running.load(Ordering::Relaxed) { + sleep(TokioDuration::from_millis(60000)).await; + match local_db_store.flush_database_state() { + Ok(_) => { + info!("flush database meta done"); + } + Err(e) => { + warn!("flush database meta error {e}"); + } + } + } + info!("exit the flush thread"); + }); } async fn start_to_produce_block(&self) { diff --git a/src/proto/proto/db3_database_v2.proto b/src/proto/proto/db3_database_v2.proto index 66ba45084..6f74fce41 100644 --- a/src/proto/proto/db3_database_v2.proto +++ b/src/proto/proto/db3_database_v2.proto @@ -65,6 +65,7 @@ message DatabaseStatePersistence { map collection_states = 4; int64 doc_order = 5; } + message BlockState { uint64 block = 1; uint32 order = 2; diff --git a/src/storage/src/db_store_v2.rs b/src/storage/src/db_store_v2.rs index 1ee772713..ea5bdfa7f 100644 --- a/src/storage/src/db_store_v2.rs +++ b/src/storage/src/db_store_v2.rs @@ -49,6 +49,7 @@ type DBRawIterator<'a> = DBRawIteratorWithThreadMode<'a, StorageEngine>; const STATE_CF: &str = "DB_STATE_CF"; const BLOCK_STATE_CF: &str = "BLOCK_STATE_CF"; const BLOCK_STATE_KEY: &str = "BLOCK_STATE_KEY"; + #[derive(Clone)] pub struct DBStoreV2Config { pub db_path: String, @@ -131,6 +132,28 @@ impl DBStoreV2 { .map_err(|e| DB3Error::WriteStoreError(format!("{e}"))) } + pub fn flush_database_state(&self) -> Result<()> { + let cf_handle = self + .se + .cf_handle(self.config.db_store_cf_name.as_str()) + .ok_or(DB3Error::ReadStoreError("cf is not found".to_string()))?; + let mut it = self.se.raw_iterator_cf(&cf_handle); + it.seek_to_first(); + loop { + if !it.valid() { + break; + } + if let Some(k) = it.key() { + let addr = DB3Address::try_from(k)?; + if let Some(state) = self.build_persistence_state(&addr) { + self.put_entry::(STATE_CF, k, state)?; + } + } + it.next(); + } + Ok(()) + } + pub fn get_event_db(&self, addr: &DB3Address) -> Result> { let database = self.get_database(addr)?; if let Some(db) = database { @@ -211,7 +234,7 @@ impl DBStoreV2 { self.db_state.insert( address_str, DatabaseState { - doc_order: state.doc_order, + doc_order: state.doc_order + 1, collection_state, total_doc_count: state.total_col_count, }, @@ -276,6 +299,7 @@ impl DBStoreV2 { fn store_block_state(&self, state: BlockState) -> Result<()> { self.put_entry(BLOCK_STATE_CF, BLOCK_STATE_KEY.as_ref(), state) } + fn recover_from_state(&self, address: &DB3Address) -> Result> { self.get_entry::(STATE_CF, address.as_ref()) } @@ -494,6 +518,7 @@ impl DBStoreV2 { .map_err(|e| DB3Error::WriteStoreError(format!("{e}")))?; Ok(()) } + fn get_entry(&self, cf: &str, id: &[u8]) -> Result> where T: Message + std::default::Default, @@ -609,6 +634,34 @@ impl DBStoreV2 { None } + fn build_persistence_state(&self, db_addr: &DB3Address) -> Option { + let db_addr_hex = db_addr.to_hex(); + if let Some(guard) = self.db_state.get(db_addr_hex.as_str()) { + let database_state = guard.deref(); + let collection_states: HashMap = database_state + .collection_state + .iter() + .map(|(key, value)| { + ( + key.to_string(), + CollectionStateProto { + total_doc_count: value.total_doc_count, + }, + ) + }) + .collect(); + Some(DatabaseStatePersistence { + addr: db_addr_hex, + total_doc_count: database_state.total_doc_count, + total_col_count: database_state.collection_state.len() as u64, + collection_states, + doc_order: database_state.doc_order, + }) + } else { + None + } + } + pub fn get_database_state(&self, db_addr: &DB3Address) -> Option { let db_addr_hex = db_addr.to_hex(); if let Some(guard) = self.db_state.get(db_addr_hex.as_str()) { @@ -1651,6 +1704,104 @@ mod tests { assert_eq!(block_state, Some(BlockState { block: 1, order: 2 })); } } + #[test] + fn test_recover_db_state_with_persistence() { + let tmp_dir_path = TempDir::new("new_database").expect("create temp dir"); + let real_path = tmp_dir_path.path().to_str().unwrap().to_string(); + let mut address: Vec = Vec::new(); + + { + let config = DBStoreV2Config { + db_path: real_path.to_string(), + db_store_cf_name: "db".to_string(), + doc_store_cf_name: "doc".to_string(), + collection_store_cf_name: "cf2".to_string(), + index_store_cf_name: "index".to_string(), + doc_owner_store_cf_name: "doc_owner".to_string(), + db_owner_store_cf_name: "db_owner".to_string(), + scan_max_limit: 50, + enable_doc_store: false, + doc_store_conf: DocStoreConfig::default(), + doc_start_id: 1000, + }; + let result = DBStoreV2::new(config); + assert_eq!(result.is_ok(), true); + let db_m = DocumentDatabaseMutation { + db_desc: "test_desc".to_string(), + }; + let db3_store = result.unwrap(); + let result = db3_store.create_doc_database(&DB3Address::ZERO, &db_m, 1, 1, 1, 1); + assert_eq!(result.is_ok(), true); + let db_id = result.unwrap(); + let result = db3_store.create_doc_database(&DB3Address::ZERO, &db_m, 2, 2, 2, 2); + assert_eq!(result.is_ok(), true); + let db_id2 = result.unwrap(); + + let collection = CollectionMutation { + index_fields: vec![], + collection_name: "col1".to_string(), + }; + + let result = db3_store.create_collection( + &DB3Address::ZERO, + db_id.address(), + &collection, + 1, + 1, + 1, + ); + assert!(result.is_ok()); + let result = db3_store.create_collection( + &DB3Address::ZERO, + db_id2.address(), + &collection, + 1, + 1, + 1, + ); + assert!(result.is_ok()); + let docs = vec!["{\"test\":0}".to_string()]; + address.push(db_id.address().clone()); + for _n in 0..1003 { + db3_store + .add_docs(db_id.address(), &DB3Address::ZERO, "col1", &docs, None) + .unwrap(); + } + for _n in 0..91 { + db3_store + .add_docs(db_id2.address(), &DB3Address::ZERO, "col1", &docs, None) + .unwrap(); + } + let result = db3_store.flush_database_state(); + assert_eq!(result.is_ok(), true); + } + + { + let config = DBStoreV2Config { + db_path: real_path, + db_store_cf_name: "db".to_string(), + doc_store_cf_name: "doc".to_string(), + collection_store_cf_name: "cf2".to_string(), + index_store_cf_name: "index".to_string(), + doc_owner_store_cf_name: "doc_owner".to_string(), + db_owner_store_cf_name: "db_owner".to_string(), + scan_max_limit: 50, + enable_doc_store: false, + doc_store_conf: DocStoreConfig::default(), + doc_start_id: 1000, + }; + let result = DBStoreV2::new(config); + let db3_store = result.unwrap(); + let result = db3_store.recover_db_state(); + println!("{:?}", result); + assert_eq!(result.is_ok(), true); + let database_state_ret = db3_store.get_database_state(&address[0]); + println!("{:?}", database_state_ret); + let database_state = database_state_ret.unwrap(); + assert_eq!(database_state.doc_order, 1004); + } + } + #[test] fn test_recover_db_state() { let tmp_dir_path = TempDir::new("new_database").expect("create temp dir"); From 35be706c17250c57f5166f9856341c0f51e55fa0 Mon Sep 17 00:00:00 2001 From: imotai Date: Thu, 27 Jul 2023 18:03:25 +0800 Subject: [PATCH 10/17] feat: update docker release cd --- .github/workflows/docker_release_cd.yml | 7 ++++--- thirdparty/data-manager | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docker_release_cd.yml b/.github/workflows/docker_release_cd.yml index c3c6bff34..524c46fa4 100644 --- a/.github/workflows/docker_release_cd.yml +++ b/.github/workflows/docker_release_cd.yml @@ -28,10 +28,12 @@ jobs: sudo apt-get install protobuf-compiler protoc --version ROOT_DIR=`pwd` - cd ${ROOT_DIR}/metadata && yarn install && npx hardhat test + cd ${ROOT_DIR}/metadata && yarn install && npx hardhat compile test -e ${ROOT_DIR}/metadata/artifacts/contracts/DB3MetaStore.sol/DB3MetaStore.json && cp -f ${ROOT_DIR}/metadata/artifacts/contracts/DB3MetaStore.sol/DB3MetaStore.json ${ROOT_DIR}/abi/ + test -e ${ROOT_DIR}/metadata/artifacts/contracts/libraries/Events.sol/Events.json && cp -f ${ROOT_DIR}/metadata/artifacts/contracts/libraries/Events.sol/Events.json ${ROOT_DIR}/abi/ cd ${ROOT_DIR} && cargo build --release cp ${ROOT_DIR}/target/release/db3 ${ROOT_DIR}/docker/ + cd ${ROOT_DIR}/sdk && yarn build && yarn link - name: docker login uses: docker/login-action@v1 with: @@ -41,8 +43,7 @@ jobs: - name: Build Docker image run: | ROOT_DIR=`pwd` - cp ${ROOT_DIR}/docker/config.ts ${ROOT_DIR}/thirdparty/data-manager/src/data-context/ - cd ${ROOT_DIR}/thirdparty/data-manager && yarn && yarn build && mv -f dist ${ROOT_DIR}/docker/pages + cd ${ROOT_DIR}/thirdparty/data-manager && yarn && yarn link db3.js && yarn build && mv -f dist ${ROOT_DIR}/docker/pages cd ${ROOT_DIR} RELEASE_NAME=${GITHUB_REF/refs\/tags\//} cd docker && docker build . -t ghcr.io/dbpunk-labs/db3:$RELEASE_NAME diff --git a/thirdparty/data-manager b/thirdparty/data-manager index b5c2f2592..7ee45ae8d 160000 --- a/thirdparty/data-manager +++ b/thirdparty/data-manager @@ -1 +1 @@ -Subproject commit b5c2f25925e347b07a1e8f5a7ed5d605a4761015 +Subproject commit 7ee45ae8d3cf19b50af9b40b94138ae7ce9f692a From 1d8d351004fa132e79af074b812c89d0c7a08997 Mon Sep 17 00:00:00 2001 From: imotai Date: Thu, 27 Jul 2023 18:07:34 +0800 Subject: [PATCH 11/17] feat: update the readme --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 1cfd1528f..d76ef7b8c 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ sudo docker run -p 26639:26639 -p 26619:26619 -p 26629:26629 \ -e ADMIN_ADDR=0xF78c...29679 \ # use your own wallet address -it ghcr.io/dbpunk-labs/db3:latest ``` + you should see the following output ``` start store node... @@ -41,19 +42,18 @@ start ar testnet ... 10000000000000Start the local db3 nodes successfully The storage node url: http://127.0.0.1:26619 The index node url: http://127.0.0.1:26639 -The console node url: http://127.0.0.1:26629/console -The setup url: http://127.0.0.1:26629/welcome +The console url: http://127.0.0.1:26629 ``` **2. Setup the node** -* open the `http://127.0.0.1:26629/welcome` to setup your node -* open the `http://127.0.0.1:26629/console/database` to create database or collection -* open the `http://127.0.0.1:26629/console/node/dashboard` to vist the dashboard +* open the `http://127.0.0.1:26629/` to setup your node for the first time +* open the `http://127.0.0.1:26629/database` to create database or collection +* open the `http://127.0.0.1:26629/node/dashboard` to vist the dashboard **3. Playground** -open the `http://127.0.0.1:26629/console/database` to create database or collection, then use the playgound `http://127.0.0.1:26629/console/database/playground` with the following code +open the `http://127.0.0.1:26629/database` to create database or collection, then go the playgound ```typescript // create a account From c1c3bd0d9e6df52b77bf81d4d5373e65933bcebe Mon Sep 17 00:00:00 2001 From: imotai Date: Thu, 27 Jul 2023 18:33:03 +0800 Subject: [PATCH 12/17] feat: update release --- .github/workflows/cd.yml | 22 ++++++++++------------ src/base/Cargo.toml | 2 +- src/cmd/Cargo.toml | 2 +- src/crypto/Cargo.toml | 2 +- src/error/Cargo.toml | 2 +- src/event/Cargo.toml | 2 +- src/node/Cargo.toml | 2 +- src/proto/Cargo.toml | 2 +- src/sdk/Cargo.toml | 2 +- src/storage/Cargo.toml | 2 +- 10 files changed, 19 insertions(+), 21 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 677b2f372..d6b52a48c 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -32,14 +32,15 @@ jobs: - name: Setup build env run: | ROOT_DIR=`pwd` + sudo apt-get install protobuf-compiler + cargo install cargo-edit cd ${ROOT_DIR}/metadata && yarn install && npx hardhat compile test -e ${ROOT_DIR}/metadata/artifacts/contracts/DB3MetaStore.sol/DB3MetaStore.json && cp -f ${ROOT_DIR}/metadata/artifacts/contracts/DB3MetaStore.sol/DB3MetaStore.json ${ROOT_DIR}/abi/ - if [[ ${{ matrix.job.target }} == x86_64-unknown-linux-gnu ]]; then - sudo apt-get install protobuf-compiler - fi - if [[ ${{ matrix.job.target }} == x86_64-apple-darwin ]]; then - brew install protobuf - fi + test -e ${ROOT_DIR}/metadata/artifacts/contracts/libraries/Events.sol/Events.json && cp -f ${ROOT_DIR}/metadata/artifacts/contracts/libraries/Events.sol/Events.json ${ROOT_DIR}/abi/ + cd ${ROOT_DIR} + TAG=${GITHUB_REF/refs\/tags\//} + VERSION=${TAG#*v} + cargo set-version --workspace ${VERSION} - name: Cargo build uses: actions-rs/cargo@v1 with: @@ -51,17 +52,14 @@ jobs: shell: bash run: | cd target/${{ matrix.job.target }}/release + TAG=${GITHUB_REF/refs\/tags\//} + VERSION=${TAG#*v} RELEASE_NAME=db3-${GITHUB_REF/refs\/tags\//}-${{ matrix.job.os-name }}-${{ matrix.job.architecture }} mkdir -p $RELEASE_NAME/bin DB3_BINARY_NAME=db3 mv $DB3_BINARY_NAME $TM_BINARY_NAME $RELEASE_NAME/bin/ tar czvf $RELEASE_NAME.tar.gz $RELEASE_NAME - ########## create sha256 ########## - if [[ ${{ runner.os }} == 'Windows' ]]; then - certutil -hashfile $RELEASE_NAME.tar.gz sha256 | grep -E [A-Fa-f0-9]{64} > $RELEASE_NAME.sha256 - else - shasum -a 256 $RELEASE_NAME.tar.gz > $RELEASE_NAME.sha256 - fi + shasum -a 256 $RELEASE_NAME.tar.gz > $RELEASE_NAME.sha256 - name: Releasing assets uses: softprops/action-gh-release@v1 with: diff --git a/src/base/Cargo.toml b/src/base/Cargo.toml index 669d93c74..87b623450 100644 --- a/src/base/Cargo.toml +++ b/src/base/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "db3-base" -version = "0.4.0" +version = "0.4.2" edition = "2021" authors = ["jack wang "] description = "base module of db3" diff --git a/src/cmd/Cargo.toml b/src/cmd/Cargo.toml index 71b091ee3..b42b151c8 100644 --- a/src/cmd/Cargo.toml +++ b/src/cmd/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "db3-cmd" -version = "0.4.0" +version = "0.4.2" edition = "2021" authors = ["jack wang "] description = "cmd module of db3" diff --git a/src/crypto/Cargo.toml b/src/crypto/Cargo.toml index 2b70328f8..0eff935ef 100644 --- a/src/crypto/Cargo.toml +++ b/src/crypto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "db3-crypto" -version = "0.4.0" +version = "0.4.2" edition = "2021" authors = ["jack wang "] description = "crypto module of db3" diff --git a/src/error/Cargo.toml b/src/error/Cargo.toml index 4ca8a4d94..4c91c4bec 100644 --- a/src/error/Cargo.toml +++ b/src/error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "db3-error" -version = "0.1.0" +version = "0.4.2" edition = "2021" authors = ["jack wang "] description = "error module of db3" diff --git a/src/event/Cargo.toml b/src/event/Cargo.toml index f6ffbc572..3f738c735 100644 --- a/src/event/Cargo.toml +++ b/src/event/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "db3-event" -version = "0.4.0" +version = "0.4.2" edition = "2021" [dependencies] diff --git a/src/node/Cargo.toml b/src/node/Cargo.toml index 34f7f20c0..230958635 100644 --- a/src/node/Cargo.toml +++ b/src/node/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "db3-node" -version = "0.4.0" +version = "0.4.2" edition = "2021" [[bin]] diff --git a/src/proto/Cargo.toml b/src/proto/Cargo.toml index 06108f212..61bc559f6 100644 --- a/src/proto/Cargo.toml +++ b/src/proto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "db3-proto" -version = "0.4.0" +version = "0.4.2" edition = "2021" authors = ["jack wang "] description = "proto module of db3" diff --git a/src/sdk/Cargo.toml b/src/sdk/Cargo.toml index 148b8134e..5455eb93b 100644 --- a/src/sdk/Cargo.toml +++ b/src/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "db3-sdk" -version = "0.4.0" +version = "0.4.2" edition = "2021" authors = ["jack wang "] description = "sdk module of db3" diff --git a/src/storage/Cargo.toml b/src/storage/Cargo.toml index e73236c7d..ff02836ca 100644 --- a/src/storage/Cargo.toml +++ b/src/storage/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "db3-storage" -version = "0.4.0" +version = "0.4.2" edition = "2021" authors = ["jack wang "] description = "storage module of db3" From 119ec0694d0a747fbf1549140bb8030b99a59fc8 Mon Sep 17 00:00:00 2001 From: imotai Date: Thu, 27 Jul 2023 20:35:48 +0800 Subject: [PATCH 13/17] fix:update the cd config --- .github/workflows/cd.yml | 3 +-- .github/workflows/docker_release_cd.yml | 15 ++++++++------- sdk/yarn.lock | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index d6b52a48c..0ed683620 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -40,6 +40,7 @@ jobs: cd ${ROOT_DIR} TAG=${GITHUB_REF/refs\/tags\//} VERSION=${TAG#*v} + echo ${VERSION} cargo set-version --workspace ${VERSION} - name: Cargo build uses: actions-rs/cargo@v1 @@ -52,8 +53,6 @@ jobs: shell: bash run: | cd target/${{ matrix.job.target }}/release - TAG=${GITHUB_REF/refs\/tags\//} - VERSION=${TAG#*v} RELEASE_NAME=db3-${GITHUB_REF/refs\/tags\//}-${{ matrix.job.os-name }}-${{ matrix.job.architecture }} mkdir -p $RELEASE_NAME/bin DB3_BINARY_NAME=db3 diff --git a/.github/workflows/docker_release_cd.yml b/.github/workflows/docker_release_cd.yml index 524c46fa4..dd7d48d03 100644 --- a/.github/workflows/docker_release_cd.yml +++ b/.github/workflows/docker_release_cd.yml @@ -21,19 +21,22 @@ jobs: override: true components: rustfmt - uses: Swatinem/rust-cache@v2 - - uses: taiki-e/install-action@cargo-llvm-cov - - uses: taiki-e/install-action@nextest - name: Setup build env run: | sudo apt-get install protobuf-compiler - protoc --version + cargo install cargo-edit ROOT_DIR=`pwd` + TAG=${GITHUB_REF/refs\/tags\//} + VERSION=${TAG#*v} + echo ${VERSION} + cargo set-version --workspace ${VERSION} cd ${ROOT_DIR}/metadata && yarn install && npx hardhat compile test -e ${ROOT_DIR}/metadata/artifacts/contracts/DB3MetaStore.sol/DB3MetaStore.json && cp -f ${ROOT_DIR}/metadata/artifacts/contracts/DB3MetaStore.sol/DB3MetaStore.json ${ROOT_DIR}/abi/ test -e ${ROOT_DIR}/metadata/artifacts/contracts/libraries/Events.sol/Events.json && cp -f ${ROOT_DIR}/metadata/artifacts/contracts/libraries/Events.sol/Events.json ${ROOT_DIR}/abi/ cd ${ROOT_DIR} && cargo build --release cp ${ROOT_DIR}/target/release/db3 ${ROOT_DIR}/docker/ - cd ${ROOT_DIR}/sdk && yarn build && yarn link + cd ${ROOT_DIR}/sdk && yarn && yarn build && yarn link + cd ${ROOT_DIR}/thirdparty/data-manager && yarn && yarn link db3.js && yarn build && mv -f dist ${ROOT_DIR}/docker/pages - name: docker login uses: docker/login-action@v1 with: @@ -43,10 +46,8 @@ jobs: - name: Build Docker image run: | ROOT_DIR=`pwd` - cd ${ROOT_DIR}/thirdparty/data-manager && yarn && yarn link db3.js && yarn build && mv -f dist ${ROOT_DIR}/docker/pages - cd ${ROOT_DIR} RELEASE_NAME=${GITHUB_REF/refs\/tags\//} - cd docker && docker build . -t ghcr.io/dbpunk-labs/db3:$RELEASE_NAME + cd ${ROOT_DIR}/docker && docker build . -t ghcr.io/dbpunk-labs/db3:$RELEASE_NAME docker push ghcr.io/dbpunk-labs/db3:$RELEASE_NAME docker tag ghcr.io/dbpunk-labs/db3:$RELEASE_NAME ghcr.io/dbpunk-labs/db3:latest docker push ghcr.io/dbpunk-labs/db3:latest diff --git a/sdk/yarn.lock b/sdk/yarn.lock index 534aca17c..4ddd44827 100644 --- a/sdk/yarn.lock +++ b/sdk/yarn.lock @@ -7075,7 +7075,7 @@ merge2@^1.3.0, merge2@^1.4.1: microbundle@^0.15.1: version "0.15.1" - resolved "https://registry.npmmirror.com/microbundle/-/microbundle-0.15.1.tgz#3fa67128934b31736823b5c868dae4b92d94e766" + resolved "https://registry.npmjs.org/microbundle/-/microbundle-0.15.1.tgz#3fa67128934b31736823b5c868dae4b92d94e766" integrity sha512-aAF+nwFbkSIJGfrJk+HyzmJOq3KFaimH6OIFBU6J2DPjQeg1jXIYlIyEv81Gyisb9moUkudn+wj7zLNYMOv75Q== dependencies: "@babel/core" "^7.12.10" From cda3659f9cf6d4acad833fccd34e1ee25f80bb0f Mon Sep 17 00:00:00 2001 From: imotai Date: Thu, 27 Jul 2023 22:07:27 +0800 Subject: [PATCH 14/17] feat: add make --- .github/workflows/docker_release_cd.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker_release_cd.yml b/.github/workflows/docker_release_cd.yml index dd7d48d03..3ac820a6c 100644 --- a/.github/workflows/docker_release_cd.yml +++ b/.github/workflows/docker_release_cd.yml @@ -35,7 +35,7 @@ jobs: test -e ${ROOT_DIR}/metadata/artifacts/contracts/libraries/Events.sol/Events.json && cp -f ${ROOT_DIR}/metadata/artifacts/contracts/libraries/Events.sol/Events.json ${ROOT_DIR}/abi/ cd ${ROOT_DIR} && cargo build --release cp ${ROOT_DIR}/target/release/db3 ${ROOT_DIR}/docker/ - cd ${ROOT_DIR}/sdk && yarn && yarn build && yarn link + cd ${ROOT_DIR}/sdk && yarn && make && yarn build && yarn link cd ${ROOT_DIR}/thirdparty/data-manager && yarn && yarn link db3.js && yarn build && mv -f dist ${ROOT_DIR}/docker/pages - name: docker login uses: docker/login-action@v1 From 368b8c26d07783abbaed0d940bfac705abe5873c Mon Sep 17 00:00:00 2001 From: imotai Date: Fri, 28 Jul 2023 00:01:41 +0800 Subject: [PATCH 15/17] feat: add shot --- README.md | 2 ++ docs/images/986shots_so.jpg | Bin 0 -> 325321 bytes sdk/tests/client_v2.test.ts | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 docs/images/986shots_so.jpg diff --git a/README.md b/README.md index d76ef7b8c..688ee0219 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,8 @@ DB3 Network is a Lightweight, *Permanent* JSON document database for Web3. It is # Have a try + + ## Set up self-hosted Node **1. Start docker container** diff --git a/docs/images/986shots_so.jpg b/docs/images/986shots_so.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b7b85515ce76f52466b9661890288683f5bbb9b GIT binary patch literal 325321 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È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 z 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
8ZCk#^+A&PuvHOM`n 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[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 { async function createTestClient() { const db3_account = createRandomAccount() const client = createClient( - 'http://127.0.0.1:26619', + //'http://127.0.0.1:26619', + 'https://testnet.db3.network:26100', 'http://127.0.0.1:26639', db3_account ) From ac71407a628b97c07c83431382bea73a2e5c8239 Mon Sep 17 00:00:00 2001 From: imotai Date: Fri, 28 Jul 2023 08:21:40 +0800 Subject: [PATCH 16/17] fix: revert the test case --- sdk/tests/client_v2.test.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sdk/tests/client_v2.test.ts b/sdk/tests/client_v2.test.ts index 239aebac0..982e392ff 100644 --- a/sdk/tests/client_v2.test.ts +++ b/sdk/tests/client_v2.test.ts @@ -63,8 +63,7 @@ describe('test db3.js client module', () => { async function createTestClient() { const db3_account = createRandomAccount() const client = createClient( - //'http://127.0.0.1:26619', - 'https://testnet.db3.network:26100', + 'http://127.0.0.1:26619', 'http://127.0.0.1:26639', db3_account ) From 9d018d1e8e25c852df670fb6b6563dfb19a45f81 Mon Sep 17 00:00:00 2001 From: imotai Date: Fri, 28 Jul 2023 16:48:48 +0800 Subject: [PATCH 17/17] feat: update data manager --- thirdparty/data-manager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/thirdparty/data-manager b/thirdparty/data-manager index 7ee45ae8d..273b7918f 160000 --- a/thirdparty/data-manager +++ b/thirdparty/data-manager @@ -1 +1 @@ -Subproject commit 7ee45ae8d3cf19b50af9b40b94138ae7ce9f692a +Subproject commit 273b7918f1ff17fbf4b76ffed4a63828ec8eabfd