@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.
- package/dist/index.js +249 -286
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/codegen/utils/renderMove/common.ts +4 -1
- package/src/codegen/utils/renderMove/generateDefaultSchema.ts +136 -224
- package/src/codegen/utils/renderMove/generateError.ts +1 -3
- package/src/codegen/utils/renderMove/generateEvent.ts +1 -2
- package/src/codegen/utils/renderMove/generateInit.ts +8 -15
- package/src/codegen/utils/renderMove/generateSchema.ts +62 -8
- package/src/codegen/utils/renderMove/generateScript.ts +0 -6
- package/src/codegen/utils/renderMove/generateSystem.ts +0 -5
- package/src/codegen/utils/renderMove/schemaGen.ts +4 -4
|
@@ -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/
|
|
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
|
-
|
|
15
|
+
use std::ascii::String;
|
|
17
16
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
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
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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
|
|
144
|
-
|
|
61
|
+
public fun set_name(self: &mut DappMetadata, name: String) {
|
|
62
|
+
self.name = name;
|
|
145
63
|
}
|
|
146
64
|
|
|
147
|
-
public fun
|
|
148
|
-
|
|
65
|
+
public fun set_description(self: &mut DappMetadata, description: String) {
|
|
66
|
+
self.description = description;
|
|
149
67
|
}
|
|
150
68
|
|
|
151
|
-
public
|
|
152
|
-
|
|
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
|
|
156
|
-
|
|
73
|
+
public fun set_website_url(self: &mut DappMetadata, website_url: String) {
|
|
74
|
+
self.website_url = website_url;
|
|
157
75
|
}
|
|
158
76
|
|
|
159
|
-
public
|
|
160
|
-
|
|
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
|
|
164
|
-
|
|
81
|
+
public fun set_partners(self: &mut DappMetadata, partners: vector<String>) {
|
|
82
|
+
self.partners = partners;
|
|
165
83
|
}
|
|
166
84
|
|
|
167
|
-
public
|
|
168
|
-
|
|
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
|
|
176
|
-
|
|
89
|
+
public fun get_description(self: &DappMetadata): String {
|
|
90
|
+
self.description
|
|
177
91
|
}
|
|
178
92
|
|
|
179
|
-
|
|
180
|
-
|
|
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
|
|
192
|
-
|
|
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
|
|
210
|
-
|
|
101
|
+
public fun get_created_at(self: &DappMetadata): u64 {
|
|
102
|
+
self.created_at
|
|
211
103
|
}
|
|
212
104
|
|
|
213
|
-
|
|
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/
|
|
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
|
|
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}
|
|
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
|
-
|
|
136
|
+
schema: &mut Schema,
|
|
266
137
|
name: String,
|
|
267
138
|
description: String,
|
|
268
|
-
|
|
139
|
+
cover_url: vector<String>,
|
|
269
140
|
website_url: String,
|
|
270
141
|
partners: vector<String>,
|
|
271
142
|
ctx: &TxContext,
|
|
272
143
|
) {
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
let created_at =
|
|
276
|
-
|
|
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
|
-
|
|
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
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
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
|
-
|
|
301
|
-
|
|
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
|
-
|
|
305
|
-
assert!(
|
|
306
|
-
|
|
172
|
+
public fun ensure_no_safe_mode(schema: &mut Schema) {
|
|
173
|
+
assert!(!schema.dapp__safe_mode()[], 0);
|
|
174
|
+
}
|
|
307
175
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
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(`
|
|
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(` └─
|
|
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):
|
|
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
|
-
|
|
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/
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
178
|
-
|
|
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
|
-
|
|
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
|
}
|