@0xobelisk/sui-common 1.1.7 → 1.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,216 +5,105 @@ import { capitalizeAndRemoveUnderscores } from './generateSchema';
5
5
 
6
6
  export async function generateDefaultSchema(config: DubheConfig, srcPrefix: string) {
7
7
  await generateDappSchemaMetadata(config, srcPrefix);
8
- await generateDappSchema(config, srcPrefix);
9
8
  await generateDappSystem(config, srcPrefix);
10
9
  }
11
10
 
12
11
  async function generateDappSchemaMetadata(config: DubheConfig, srcPrefix: string) {
13
- const path = `${srcPrefix}/contracts/${config.name}/sources/codegen/dapp/metadata.move`;
12
+ const path = `${srcPrefix}/contracts/${config.name}/sources/codegen/core/metadata.move`;
14
13
  if (!existsSync(path)) {
15
14
  let code = `module ${config.name}::${config.name}_dapp_metadata {
16
- use std::ascii::String;
15
+ use std::ascii::String;
17
16
 
18
- public struct DappMetadata has drop, copy, store {
19
- name: String,
20
- description: String,
21
- icon_url: String,
22
- website_url: String,
23
- created_at: u64,
24
- partners: vector<String>,
25
- }
17
+ public struct DappMetadata has drop, copy, store {
18
+ name: String,
19
+ description: String,
20
+ cover_url: vector<String>,
21
+ website_url: String,
22
+ created_at: u64,
23
+ partners: vector<String>,
24
+ }
26
25
 
27
- public fun new(
28
- name: String,
29
- description: String,
30
- icon_url: String,
31
- website_url: String,
32
- created_at: u64,
33
- partners: vector<String>,
34
- ): DappMetadata {
35
- DappMetadata {
26
+ public fun new(
27
+ name: String,
28
+ description: String,
29
+ cover_url: vector<String>,
30
+ website_url: String,
31
+ created_at: u64,
32
+ partners: vector<String>,
33
+ ): DappMetadata {
34
+ DappMetadata {
36
35
  name,
37
36
  description,
38
- icon_url,
37
+ cover_url,
39
38
  website_url,
40
39
  created_at,
41
40
  partners,
42
41
  }
43
- }
44
-
45
- public fun set(
46
- self: &mut DappMetadata,
47
- name: String,
48
- description: String,
49
- icon_url: String,
50
- website_url: String,
51
- created_at: u64,
52
- partners: vector<String>,
53
- ) {
54
- self.name = name;
55
- self.description = description;
56
- self.icon_url = icon_url;
57
- self.website_url = website_url;
58
- self.created_at = created_at;
59
- self.partners = partners;
60
- }
61
-
62
- public fun set_name(self: &mut DappMetadata, name: String) {
63
- self.name = name;
64
- }
65
-
66
- public fun set_description(self: &mut DappMetadata, description: String) {
67
- self.description = description;
68
- }
69
-
70
- public fun set_icon_url(self: &mut DappMetadata, icon_url: String) {
71
- self.icon_url = icon_url;
72
- }
73
-
74
- public fun set_website_url(self: &mut DappMetadata, website_url: String) {
75
- self.website_url = website_url;
76
- }
77
-
78
- public fun set_created_at(self: &mut DappMetadata, created_at: u64) {
79
- self.created_at = created_at;
80
- }
81
-
82
- public fun set_partners(self: &mut DappMetadata, partners: vector<String>) {
83
- self.partners = partners;
84
- }
85
-
86
- public fun get_name(self: &DappMetadata): String {
87
- self.name
88
- }
89
-
90
- public fun get_description(self: &DappMetadata): String {
91
- self.description
92
- }
93
-
94
- public fun get_icon_url(self: &DappMetadata): String {
95
- self.icon_url
96
- }
97
-
98
- public fun get_website_url(self: &DappMetadata): String {
99
- self.website_url
100
- }
101
-
102
- public fun get_created_at(self: &DappMetadata): u64 {
103
- self.created_at
104
- }
105
-
106
- public fun get_partners(self: &DappMetadata): vector<String> {
107
- self.partners
108
- }
109
-
110
- }
111
- `;
112
- await formatAndWriteMove(code, path, 'formatAndWriteMove');
113
42
  }
114
- }
115
43
 
116
- async function generateDappSchema(config: DubheConfig, srcPrefix: string) {
117
- const path = `${srcPrefix}/contracts/${config.name}/sources/codegen/dapp/schema.move`;
118
- if (!existsSync(path)) {
119
- let code = `module ${config.name}::${config.name}_dapp_schema {
120
- use ${config.name}::${config.name}_dapp_metadata::DappMetadata;
121
- use dubhe::storage_value;
122
- use dubhe::storage_value::StorageValue;
123
- use dubhe::storage;
124
- use sui::transfer::public_share_object;
125
- use dubhe::type_info;
126
-
127
- public struct Dapp has key, store {
128
- id: UID,
129
- }
130
-
131
- public fun borrow_admin(self: &Dapp): &StorageValue<address> {
132
- storage::borrow_field(&self.id, b"admin")
133
- }
134
-
135
- public(package) fun admin(self: &mut Dapp): &mut StorageValue<address> {
136
- storage::borrow_mut_field(&mut self.id, b"admin")
137
- }
138
-
139
- public fun borrow_package_id(self: &Dapp): &StorageValue<address> {
140
- storage::borrow_field(&self.id, b"package_id")
44
+ public fun set(
45
+ self: &mut DappMetadata,
46
+ name: String,
47
+ description: String,
48
+ cover_url: vector<String>,
49
+ website_url: String,
50
+ created_at: u64,
51
+ partners: vector<String>,
52
+ ) {
53
+ self.name = name;
54
+ self.description = description;
55
+ self.cover_url = cover_url;
56
+ self.website_url = website_url;
57
+ self.created_at = created_at;
58
+ self.partners = partners;
141
59
  }
142
60
 
143
- public(package) fun package_id(self: &mut Dapp): &mut StorageValue<address> {
144
- storage::borrow_mut_field(&mut self.id, b"package_id")
61
+ public fun set_name(self: &mut DappMetadata, name: String) {
62
+ self.name = name;
145
63
  }
146
64
 
147
- public fun borrow_version(self: &Dapp): &StorageValue<u32> {
148
- storage::borrow_field(&self.id, b"version")
65
+ public fun set_description(self: &mut DappMetadata, description: String) {
66
+ self.description = description;
149
67
  }
150
68
 
151
- public(package) fun version(self: &mut Dapp): &mut StorageValue<u32> {
152
- storage::borrow_mut_field(&mut self.id, b"version")
69
+ public fun set_cover_url(self: &mut DappMetadata, cover_url: vector<String>) {
70
+ self.cover_url = cover_url;
153
71
  }
154
72
 
155
- public fun borrow_metadata(self: &Dapp): &StorageValue<DappMetadata> {
156
- storage::borrow_field(&self.id, b"metadata")
73
+ public fun set_website_url(self: &mut DappMetadata, website_url: String) {
74
+ self.website_url = website_url;
157
75
  }
158
76
 
159
- public(package) fun metadata(self: &mut Dapp): &mut StorageValue<DappMetadata> {
160
- storage::borrow_mut_field(&mut self.id, b"metadata")
77
+ public fun set_created_at(self: &mut DappMetadata, created_at: u64) {
78
+ self.created_at = created_at;
161
79
  }
162
80
 
163
- public fun borrow_safe_mode(self: &Dapp): &StorageValue<bool> {
164
- storage::borrow_field(&self.id, b"safe_mode")
81
+ public fun set_partners(self: &mut DappMetadata, partners: vector<String>) {
82
+ self.partners = partners;
165
83
  }
166
84
 
167
- public(package) fun safe_mode(self: &mut Dapp): &mut StorageValue<bool> {
168
- storage::borrow_mut_field(&mut self.id, b"safe_mode")
85
+ public fun get_name(self: &DappMetadata): String {
86
+ self.name
169
87
  }
170
-
171
- public(package) fun borrow_schemas(self: &Dapp): &StorageValue<vector<address>> {
172
- storage::borrow_field(&self.id, b"schemas")
173
- }
174
88
 
175
- public(package) fun schemas(self: &mut Dapp): &mut StorageValue<vector<address>> {
176
- storage::borrow_mut_field(&mut self.id, b"schemas")
89
+ public fun get_description(self: &DappMetadata): String {
90
+ self.description
177
91
  }
178
92
 
179
-
180
- public(package) fun create(ctx: &mut TxContext): Dapp {
181
- let mut id = object::new(ctx);
182
- storage::add_field<StorageValue<address>>(&mut id, b"admin", storage_value::new(b"admin", ctx));
183
- storage::add_field<StorageValue<address>>(&mut id, b"package_id", storage_value::new(b"package_id", ctx));
184
- storage::add_field<StorageValue<u32>>(&mut id, b"version", storage_value::new(b"version", ctx));
185
- storage::add_field<StorageValue<DappMetadata>>(&mut id, b"metadata", storage_value::new(b"metadata", ctx));
186
- storage::add_field<StorageValue<bool>>(&mut id, b"safe_mode", storage_value::new(b"safe_mode", ctx));
187
- storage::add_field<StorageValue<vector<address>>>(&mut id, b"schemas", storage_value::new(b"schemas", ctx));
188
- Dapp { id }
93
+ public fun get_cover_url(self: &DappMetadata): vector<String> {
94
+ self.cover_url
189
95
  }
190
96
 
191
- public(package) fun upgrade<DappKey: drop>(dapp: &mut Dapp, ctx: &TxContext) {
192
- assert!(dapp.borrow_metadata().contains(), 0);
193
- assert!(dapp.borrow_admin().get() == ctx.sender(), 0);
194
- let new_package_id = type_info::current_package_id<DappKey>();
195
- dapp.package_id().set(new_package_id);
196
- let current_version = dapp.version()[];
197
- dapp.version().set(current_version + 1);
97
+ public fun get_website_url(self: &DappMetadata): String {
98
+ self.website_url
198
99
  }
199
-
200
- public(package) fun add_schema<Schema: key + store>(dapp: &mut Dapp, schema: Schema) {
201
- let mut schemas = dapp.schemas()[];
202
- schemas.push_back(object::id_address<Schema>(&schema));
203
- dapp.schemas().set(schemas);
204
- public_share_object(schema);
205
- }
206
-
207
- #[test_only]
208
100
 
209
- public fun create_dapp_for_testing(ctx: &mut TxContext): Dapp {
210
- create(ctx)
101
+ public fun get_created_at(self: &DappMetadata): u64 {
102
+ self.created_at
211
103
  }
212
104
 
213
- #[test_only]
214
-
215
- public fun distroy_dapp_for_testing(dapp: Dapp) {
216
- let Dapp { id } = dapp;
217
- id.delete();
105
+ public fun get_partners(self: &DappMetadata): vector<String> {
106
+ self.partners
218
107
  }
219
108
  }
220
109
  `;
@@ -223,94 +112,117 @@ async function generateDappSchema(config: DubheConfig, srcPrefix: string) {
223
112
  }
224
113
 
225
114
  async function generateDappSystem(config: DubheConfig, srcPrefix: string) {
226
- const path = `${srcPrefix}/contracts/${config.name}/sources/codegen/dapp/system.move`;
115
+ const path = `${srcPrefix}/contracts/${config.name}/sources/codegen/core/system.move`;
227
116
  if (!existsSync(path)) {
228
117
  let code = `module ${config.name}::${config.name}_dapp_system {
229
118
  use std::ascii::String;
230
119
  use std::ascii;
231
120
  use dubhe::type_info;
232
121
  use sui::clock::Clock;
233
- use ${config.name}::${config.name}_dapp_schema;
122
+ use sui::transfer::public_share_object;
123
+ use ${config.name}::${config.name}_schema::Schema;
234
124
  use ${config.name}::${config.name}_dapp_metadata;
235
- use ${config.name}::${config.name}_dapp_schema::Dapp;
125
+ use ${config.name}::${config.name}_dapp_metadata::DappMetadata;
126
+ use dubhe::storage::add_field;
127
+ use dubhe::storage_value;
128
+ use dubhe::storage_value::StorageValue;
236
129
 
237
130
  public struct DappKey has drop {}
238
131
  public(package) fun new(): DappKey {
239
132
  DappKey { }
240
133
  }
241
134
 
242
- public(package) fun create(name: String, description: String, clock: &Clock, ctx: &mut TxContext): Dapp {
243
- let mut dapp = ${config.name}_dapp_schema::create(ctx);
244
- assert!(!dapp.borrow_metadata().contains(), 0);
245
- dapp.metadata().set(
246
- ${config.name}_dapp_metadata::new(
247
- name,
248
- description,
249
- ascii::string(b""),
250
- ascii::string(b""),
251
- clock.timestamp_ms(),
252
- vector[]
253
- )
254
- );
255
- let package_id = type_info::current_package_id<DappKey>();
256
- dapp.package_id().set(package_id);
257
- dapp.admin().set(ctx.sender());
258
- dapp.version().set(1);
259
- dapp.safe_mode().set(false);
260
- dapp.schemas().set(vector[]);
261
- dapp
262
- }
263
-
264
135
  public entry fun set_metadata(
265
- dapp: &mut Dapp,
136
+ schema: &mut Schema,
266
137
  name: String,
267
138
  description: String,
268
- icon_url: String,
139
+ cover_url: vector<String>,
269
140
  website_url: String,
270
141
  partners: vector<String>,
271
142
  ctx: &TxContext,
272
143
  ) {
273
- let admin = dapp.admin().try_get();
274
- assert!(admin == option::some(ctx.sender()), 0);
275
- let created_at = dapp.metadata().get().get_created_at();
276
- dapp.metadata().set(
144
+ let admin = schema.dapp__admin().try_get();
145
+ assert!(admin == option::some(ctx.sender()), 0);
146
+ let created_at = schema.dapp__metadata().get().get_created_at();
147
+ schema.dapp__metadata().set(
277
148
  ${config.name}_dapp_metadata::new(
278
149
  name,
279
150
  description,
280
- icon_url,
151
+ cover_url,
281
152
  website_url,
282
153
  created_at,
283
154
  partners
284
155
  )
285
156
  );
286
- }
157
+ }
287
158
 
288
- public entry fun transfer_ownership(dapp: &mut Dapp, new_admin: address, ctx: &mut TxContext) {
289
- let admin = dapp.admin().try_get();
290
- assert!(admin == option::some(ctx.sender()), 0);
291
- dapp.admin().set(new_admin);
292
- }
293
159
 
294
- public entry fun set_safe_mode(dapp: &mut Dapp, safe_mode: bool, ctx: &TxContext) {
295
- let admin = dapp.admin().try_get();
296
- assert!(admin == option::some(ctx.sender()), 0);
297
- dapp.safe_mode().set(safe_mode);
298
- }
160
+ public entry fun transfer_ownership(schema: &mut Schema, new_admin: address, ctx: &mut TxContext) {
161
+ let admin = schema.dapp__admin().try_get();
162
+ assert!(admin == option::some(ctx.sender()), 0);
163
+ schema.dapp__admin().set(new_admin);
164
+ }
299
165
 
300
- public fun ensure_no_safe_mode(dapp: &Dapp) {
301
- assert!(!dapp.borrow_safe_mode()[], 0);
302
- }
166
+ public entry fun set_safe_mode(schema: &mut Schema, safe_mode: bool, ctx: &TxContext) {
167
+ let admin = schema.dapp__admin().try_get();
168
+ assert!(admin == option::some(ctx.sender()), 0);
169
+ schema.dapp__safe_mode().set(safe_mode);
170
+ }
303
171
 
304
- public fun ensure_has_authority(dapp: &Dapp, ctx: &TxContext) {
305
- assert!(dapp.borrow_admin().get() == ctx.sender(), 0);
306
- }
172
+ public fun ensure_no_safe_mode(schema: &mut Schema) {
173
+ assert!(!schema.dapp__safe_mode()[], 0);
174
+ }
307
175
 
308
- public fun ensure_has_schema<Schema: key + store>(dapp: &Dapp, schema: &Schema) {
309
- let schema_id = object::id_address(schema);
310
- assert!(dapp.borrow_schemas().get().contains(&schema_id), 0);
311
- }
312
- }
176
+ public fun ensure_has_authority(schema: &mut Schema, ctx: &TxContext) {
177
+ assert!(schema.dapp__admin().get() == ctx.sender(), 0);
178
+ }
179
+
180
+ public fun ensure_has_schema<S: key + store>(schema: &mut Schema, new_schema: &S) {
181
+ let schema_id = object::id_address(new_schema);
182
+ assert!(schema.dapp__authorised_schemas().get().contains(&schema_id), 0);
183
+ }
184
+
185
+ public(package) fun create(schema: &mut Schema, name: String, description: String, clock: &Clock, ctx: &mut TxContext){
186
+ add_field<StorageValue<address>>(schema.id(), b"dapp__admin", storage_value::new(b"dapp__admin", ctx));
187
+ add_field<StorageValue<address>>(schema.id(), b"dapp__package_id", storage_value::new(b"dapp__package_id", ctx));
188
+ add_field<StorageValue<u32>>(schema.id(), b"dapp__version", storage_value::new(b"dapp__version", ctx));
189
+ add_field<StorageValue<DappMetadata>>(schema.id(), b"dapp__metadata", storage_value::new(b"dapp__metadata", ctx));
190
+ add_field<StorageValue<bool>>(schema.id(), b"dapp__safe_mode", storage_value::new(b"dapp__safe_mode", ctx));
191
+ add_field<StorageValue<vector<address>>>(schema.id(), b"dapp__authorised_schemas", storage_value::new(b"dapp__authorised_schemas", ctx));
192
+ schema.dapp__metadata().set(
193
+ ${config.name}_dapp_metadata::new(
194
+ name,
195
+ description,
196
+ vector[],
197
+ ascii::string(b""),
198
+ clock.timestamp_ms(),
199
+ vector[]
200
+ )
201
+ );
202
+ let package_id = type_info::current_package_id<DappKey>();
203
+ schema.dapp__package_id().set(package_id);
204
+ schema.dapp__admin().set(ctx.sender());
205
+ schema.dapp__version().set(1);
206
+ schema.dapp__safe_mode().set(false);
207
+ schema.dapp__authorised_schemas().set(vector[]);
208
+ }
313
209
 
210
+ public(package) fun upgrade<DappKey: drop>(schema: &mut Schema, ctx: &TxContext) {
211
+ assert!(schema.dapp__metadata().contains(), 0);
212
+ assert!(schema.dapp__admin().get() == ctx.sender(), 0);
213
+ let new_package_id = type_info::current_package_id<DappKey>();
214
+ schema.dapp__package_id().set(new_package_id);
215
+ let current_version = schema.dapp__version()[];
216
+ schema.dapp__version().set(current_version + 1);
217
+ }
218
+
219
+ public(package) fun add_schema<S: key + store>(schema: &mut Schema, new_schema: S) {
220
+ let mut schemas = schema.dapp__authorised_schemas()[];
221
+ schemas.push_back(object::id_address<S>(&new_schema));
222
+ schema.dapp__authorised_schemas().set(schemas);
223
+ public_share_object(new_schema);
224
+ }
225
+ }
314
226
 
315
227
  `;
316
228
  await formatAndWriteMove(code, path, 'formatAndWriteMove');
@@ -20,8 +20,7 @@ export async function generateSchemaError(projectName: string, errors: ErrorData
20
20
  let code = `module ${projectName}::${projectName}_errors {
21
21
  ${Object.entries(errors)
22
22
  .map(([name, message]) => {
23
- console.log(` ├─ Generating Error: ${name}`);
24
- console.log(` │ └─ Message: ${message}`);
23
+ console.log(` └─ ${name}: ${message}`);
25
24
  return `#[error]
26
25
  const ${name.toUpperCase()}: vector<u8> = b"${message}";
27
26
  public fun ${name}_error(condition: bool) { assert!(condition, ${name.toUpperCase()}) }
@@ -35,5 +34,4 @@ export async function generateSchemaError(projectName: string, errors: ErrorData
35
34
  `${path}/contracts/${projectName}/sources/codegen/errors.move`,
36
35
  'formatAndWriteMove'
37
36
  );
38
- console.log('✅ Schema Error Generation Complete\n');
39
37
  }
@@ -45,7 +45,7 @@ export async function generateSchemaEvent(
45
45
  for (const key of Object.keys(events)) {
46
46
  const name = key;
47
47
  const fields = events[key];
48
- console.log(` └─ Generating ${name} event: ${fields}`);
48
+ console.log(` └─ ${name} event: ${JSON.stringify(fields)}`);
49
49
 
50
50
  let code = `module ${projectName}::${projectName}_${name}_event {
51
51
  use sui::event;
@@ -95,5 +95,4 @@ use ${projectName}::${projectName}_${name}_event;
95
95
  `${path}/contracts/${projectName}/sources/codegen/events.move`,
96
96
  'formatAndWriteMove'
97
97
  );
98
- console.log('✅ Schema Event Generation Complete\n');
99
98
  }
@@ -4,30 +4,25 @@ import { existsSync } from 'fs';
4
4
  import { capitalizeAndRemoveUnderscores } from './generateSchema';
5
5
 
6
6
  export async function generateInit(config: DubheConfig, srcPrefix: string) {
7
- console.log('\n📝 Starting Init Generation...');
8
- console.log(` └─ Output path: ${srcPrefix}/contracts/${config.name}/sources/tests/init.move`);
9
-
10
7
  let init_test_code = `module ${config.name}::${config.name}_init_test {
11
- use ${config.name}::${config.name}_dapp_schema::Dapp;
12
8
  use sui::clock;
13
9
  use sui::test_scenario;
14
10
  use sui::test_scenario::Scenario;
15
11
 
16
- public fun deploy_dapp_for_testing(sender: address): (Scenario, Dapp) {
12
+ public fun deploy_dapp_for_testing(sender: address): Scenario {
17
13
  let mut scenario = test_scenario::begin(sender);
18
14
  let ctx = test_scenario::ctx(&mut scenario);
19
15
  let clock = clock::create_for_testing(ctx);
20
16
  ${config.name}::${config.name}_genesis::run(&clock, ctx);
21
17
  clock::destroy_for_testing(clock);
22
18
  test_scenario::next_tx(&mut scenario,sender);
23
- let dapp = test_scenario::take_shared<Dapp>(&scenario);
24
- (scenario, dapp)
19
+ scenario
25
20
  }
26
21
  }
27
22
  `;
28
23
  await formatAndWriteMove(
29
24
  init_test_code,
30
- `${srcPrefix}/contracts/${config.name}/sources/tests/init.move`,
25
+ `${srcPrefix}/contracts/${config.name}/sources/codegen/core/init_test.move`,
31
26
  'formatAndWriteMove'
32
27
  );
33
28
 
@@ -39,23 +34,21 @@ export async function generateInit(config: DubheConfig, srcPrefix: string) {
39
34
  use ${config.name}::${config.name}_dapp_system;
40
35
 
41
36
  public entry fun run(clock: &Clock, ctx: &mut TxContext) {
42
- // Create a dapp.
43
- let mut dapp = ${config.name}_dapp_system::create(string(b"${config.name}"),string(b"${config.description}"), clock , ctx);
44
37
  // Create schemas
45
38
  let mut schema = ${config.name}::${config.name}_schema::create(ctx);
39
+ // Setup default storage
40
+ ${config.name}_dapp_system::create(&mut schema, string(b"${config.name}"),string(b"${config.description}"), clock , ctx);
46
41
  // Logic that needs to be automated once the contract is deployed
47
42
  ${config.name}::${config.name}_deploy_hook::run(&mut schema, ctx);
48
43
  // Authorize schemas and public share objects
49
- dapp.add_schema(schema);
50
- sui::transfer::public_share_object(dapp);
44
+ sui::transfer::public_share_object(schema);
51
45
  }
52
46
  }
53
47
  `;
54
48
  await formatAndWriteMove(
55
49
  init_code,
56
- `${srcPrefix}/contracts/${config.name}/sources/codegen/genesis.move`,
50
+
51
+ `${srcPrefix}/contracts/${config.name}/sources/codegen/core/genesis.move`,
57
52
  'formatAndWriteMove'
58
53
  );
59
-
60
- console.log('✅ Init Generation Complete\n');
61
54
  }
@@ -91,15 +91,15 @@ export async function generateSchemaData(
91
91
  for (const key of Object.keys(data)) {
92
92
  const name = key;
93
93
  const fields = data[key];
94
- console.log(` └─ Generating ${name} ${Array.isArray(fields) ? '(enum)' : '(struct)'}`);
94
+ console.log(
95
+ ` └─ ${name} ${Array.isArray(fields) ? '(enum)' : '(struct)'}: ${JSON.stringify(fields)}`
96
+ );
95
97
  let code = '';
96
98
 
97
99
  const enumNames = Object.keys(data)
98
100
  .filter((item) => Array.isArray(data[item]))
99
101
  .map((item) => item);
100
102
 
101
- console.log(enumNames);
102
-
103
103
  if (Array.isArray(fields)) {
104
104
  const sortByFirstLetterFields = sortByFirstLetter(fields);
105
105
  code = `module ${projectName}::${projectName}_${convertToSnakeCase(name)} {
@@ -151,7 +151,6 @@ export async function generateSchemaData(
151
151
  'formatAndWriteMove'
152
152
  );
153
153
  }
154
- console.log('✅ Schema Data Generation Complete\n');
155
154
  }
156
155
 
157
156
  function generateImport(projectName: string, data: Record<string, SchemaData> | null) {
@@ -174,8 +173,9 @@ export async function generateSchemaStructure(
174
173
  path: string
175
174
  ) {
176
175
  console.log('\n🔨 Starting Schema Structure Generation...');
177
- console.log(` ├─ Output path: ${path}/contracts/${projectName}/sources/codegen/schema.move`);
178
- console.log(` └─ Structure fields: ${Object.values(schemas).length}`);
176
+ Object.entries(schemas).forEach(([key, value]) => {
177
+ console.log(` └─ ${key}: ${value}`);
178
+ });
179
179
  const schemaMoudle = `module ${projectName}::${projectName}_schema {
180
180
  use std::ascii::String;
181
181
  use std::ascii::string;
@@ -186,10 +186,64 @@ export async function generateSchemaStructure(
186
186
  use dubhe::storage_map::{Self, StorageMap};
187
187
  use dubhe::storage_double_map::{Self, StorageDoubleMap};
188
188
  use sui::dynamic_field as df;
189
+ use ${projectName}::${projectName}_dapp_metadata::DappMetadata;
189
190
 
190
191
  ${generateImport(projectName, data)}
191
192
 
192
193
  public struct Schema has key, store { id: UID }
194
+
195
+ // Default storage
196
+ public fun borrow_dapp__admin(self: &Schema): &StorageValue<address> {
197
+ storage::borrow_field(&self.id, b"dapp__admin")
198
+ }
199
+
200
+ public fun borrow_dapp__package_id(self: &Schema): &StorageValue<address> {
201
+ storage::borrow_field(&self.id, b"dapp__package_id")
202
+ }
203
+
204
+ public fun borrow_dapp__version(self: &Schema): &StorageValue<u32> {
205
+ storage::borrow_field(&self.id, b"dapp__version")
206
+ }
207
+
208
+ public fun borrow_dapp__metadata(self: &Schema): &StorageValue<DappMetadata> {
209
+ storage::borrow_field(&self.id, b"dapp__metadata")
210
+ }
211
+
212
+ public fun borrow_dapp__safe_mode(self: &Schema): &StorageValue<bool> {
213
+ storage::borrow_field(&self.id, b"dapp__safe_mode")
214
+ }
215
+
216
+ public fun borrow_dapp__authorised_schemas(self: &Schema): &StorageValue<vector<address>> {
217
+ storage::borrow_field(&self.id, b"dapp__authorised_schemas")
218
+ }
219
+
220
+ public fun borrow_dapp__schemas(self: &Schema): &StorageValue<vector<address>> {
221
+ storage::borrow_field(&self.id, b"dapp__schemas")
222
+ }
223
+
224
+ public(package) fun dapp__admin(self: &mut Schema): &mut StorageValue<address> {
225
+ storage::borrow_mut_field(&mut self.id, b"dapp__admin")
226
+ }
227
+
228
+ public(package) fun dapp__package_id(self: &mut Schema): &mut StorageValue<address> {
229
+ storage::borrow_mut_field(&mut self.id, b"dapp__package_id")
230
+ }
231
+
232
+ public(package) fun dapp__version(self: &mut Schema): &mut StorageValue<u32> {
233
+ storage::borrow_mut_field(&mut self.id, b"dapp__version")
234
+ }
235
+
236
+ public(package) fun dapp__metadata(self: &mut Schema): &mut StorageValue<DappMetadata> {
237
+ storage::borrow_mut_field(&mut self.id, b"dapp__metadata")
238
+ }
239
+
240
+ public(package) fun dapp__safe_mode(self: &mut Schema): &mut StorageValue<bool> {
241
+ storage::borrow_mut_field(&mut self.id, b"dapp__safe_mode")
242
+ }
243
+
244
+ public(package) fun dapp__authorised_schemas(self: &mut Schema): &mut StorageValue<vector<address>> {
245
+ storage::borrow_mut_field(&mut self.id, b"dapp__authorised_schemas")
246
+ }
193
247
 
194
248
  ${Object.entries(schemas)
195
249
  .map(([key, value]) => {
@@ -268,8 +322,8 @@ export async function generateSchemaStructure(
268
322
  }`;
269
323
  await formatAndWriteMove(
270
324
  schemaMoudle,
271
- `${path}/contracts/${projectName}/sources/codegen/schema.move`,
325
+
326
+ `${path}/contracts/${projectName}/sources/codegen/core/schema.move`,
272
327
  'formatAndWriteMove'
273
328
  );
274
- console.log('✅ Schema Structure Generation Complete\n');
275
329
  }