create-dubhe 0.1.9 → 0.1.10

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.
Files changed (22) hide show
  1. package/package.json +1 -1
  2. package/template/{nextjs/sui-template/contracts/counter/sources/codegen → 101/sui-template/contracts/counter/sources/codegen/core}/genesis.move +3 -4
  3. package/template/101/sui-template/contracts/counter/sources/{tests/init.move → codegen/core/init_test.move} +2 -5
  4. package/template/101/sui-template/contracts/counter/sources/codegen/{dapp → core}/metadata.move +9 -9
  5. package/template/101/sui-template/contracts/counter/sources/codegen/core/schema.move +118 -0
  6. package/template/101/sui-template/contracts/counter/sources/codegen/core/system.move +126 -0
  7. package/template/101/sui-template/contracts/counter/sources/tests/counter.move +1 -2
  8. package/template/101/sui-template/package.json +3 -3
  9. package/template/contract/sui-template/package.json +3 -3
  10. package/template/{101/sui-template/contracts/counter/sources/codegen → nextjs/sui-template/contracts/counter/sources/codegen/core}/genesis.move +3 -4
  11. package/template/nextjs/sui-template/contracts/counter/sources/{tests/init.move → codegen/core/init_test.move} +2 -5
  12. package/template/nextjs/sui-template/contracts/counter/sources/codegen/{dapp → core}/metadata.move +9 -9
  13. package/template/nextjs/sui-template/contracts/counter/sources/codegen/core/schema.move +118 -0
  14. package/template/nextjs/sui-template/contracts/counter/sources/codegen/core/system.move +126 -0
  15. package/template/nextjs/sui-template/contracts/counter/sources/tests/counter.move +1 -2
  16. package/template/nextjs/sui-template/package.json +3 -3
  17. package/template/101/sui-template/contracts/counter/sources/codegen/dapp/schema.move +0 -112
  18. package/template/101/sui-template/contracts/counter/sources/codegen/dapp/system.move +0 -93
  19. package/template/101/sui-template/contracts/counter/sources/codegen/schema.move +0 -62
  20. package/template/nextjs/sui-template/contracts/counter/sources/codegen/dapp/schema.move +0 -112
  21. package/template/nextjs/sui-template/contracts/counter/sources/codegen/dapp/system.move +0 -93
  22. package/template/nextjs/sui-template/contracts/counter/sources/codegen/schema.move +0 -62
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-dubhe",
3
- "version": "0.1.9",
3
+ "version": "0.1.10",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "author": "team@obelisk.build",
@@ -7,14 +7,13 @@
7
7
  use counter::counter_dapp_system;
8
8
 
9
9
  public entry fun run(clock: &Clock, ctx: &mut TxContext) {
10
- // Create a dapp.
11
- let mut dapp = counter_dapp_system::create(string(b"counter"),string(b"counter contract"), clock , ctx);
12
10
  // Create schemas
13
11
  let mut schema = counter::counter_schema::create(ctx);
12
+ // Setup default storage
13
+ counter_dapp_system::create(&mut schema, string(b"counter"),string(b"counter contract"), clock , ctx);
14
14
  // Logic that needs to be automated once the contract is deployed
15
15
  counter::counter_deploy_hook::run(&mut schema, ctx);
16
16
  // Authorize schemas and public share objects
17
- dapp.add_schema(schema);
18
- sui::transfer::public_share_object(dapp);
17
+ sui::transfer::public_share_object(schema);
19
18
  }
20
19
  }
@@ -1,21 +1,18 @@
1
1
  #[test_only]module counter::counter_init_test {
2
2
 
3
- use counter::counter_dapp_schema::Dapp;
4
-
5
3
  use sui::clock;
6
4
 
7
5
  use sui::test_scenario;
8
6
 
9
7
  use sui::test_scenario::Scenario;
10
8
 
11
- public fun deploy_dapp_for_testing(sender: address): (Scenario, Dapp) {
9
+ public fun deploy_dapp_for_testing(sender: address): Scenario {
12
10
  let mut scenario = test_scenario::begin(sender);
13
11
  let ctx = test_scenario::ctx(&mut scenario);
14
12
  let clock = clock::create_for_testing(ctx);
15
13
  counter::counter_genesis::run(&clock, ctx);
16
14
  clock::destroy_for_testing(clock);
17
15
  test_scenario::next_tx(&mut scenario,sender);
18
- let dapp = test_scenario::take_shared<Dapp>(&scenario);
19
- (scenario, dapp)
16
+ scenario
20
17
  }
21
18
  }
@@ -11,7 +11,7 @@
11
11
  public struct DappMetadata has drop, copy, store {
12
12
  name: String,
13
13
  description: String,
14
- icon_url: String,
14
+ cover_url: vector<String>,
15
15
  website_url: String,
16
16
  created_at: u64,
17
17
  partners: vector<String>,
@@ -20,7 +20,7 @@
20
20
  public fun new(
21
21
  name: String,
22
22
  description: String,
23
- icon_url: String,
23
+ cover_url: vector<String>,
24
24
  website_url: String,
25
25
  created_at: u64,
26
26
  partners: vector<String>,
@@ -28,7 +28,7 @@
28
28
  DappMetadata {
29
29
  name,
30
30
  description,
31
- icon_url,
31
+ cover_url,
32
32
  website_url,
33
33
  created_at,
34
34
  partners,
@@ -39,14 +39,14 @@
39
39
  self: &mut DappMetadata,
40
40
  name: String,
41
41
  description: String,
42
- icon_url: String,
42
+ cover_url: vector<String>,
43
43
  website_url: String,
44
44
  created_at: u64,
45
45
  partners: vector<String>,
46
46
  ) {
47
47
  self.name = name;
48
48
  self.description = description;
49
- self.icon_url = icon_url;
49
+ self.cover_url = cover_url;
50
50
  self.website_url = website_url;
51
51
  self.created_at = created_at;
52
52
  self.partners = partners;
@@ -60,8 +60,8 @@
60
60
  self.description = description;
61
61
  }
62
62
 
63
- public fun set_icon_url(self: &mut DappMetadata, icon_url: String) {
64
- self.icon_url = icon_url;
63
+ public fun set_cover_url(self: &mut DappMetadata, cover_url: vector<String>) {
64
+ self.cover_url = cover_url;
65
65
  }
66
66
 
67
67
  public fun set_website_url(self: &mut DappMetadata, website_url: String) {
@@ -84,8 +84,8 @@
84
84
  self.description
85
85
  }
86
86
 
87
- public fun get_icon_url(self: &DappMetadata): String {
88
- self.icon_url
87
+ public fun get_cover_url(self: &DappMetadata): vector<String> {
88
+ self.cover_url
89
89
  }
90
90
 
91
91
  public fun get_website_url(self: &DappMetadata): String {
@@ -0,0 +1,118 @@
1
+ // Copyright (c) Obelisk Labs, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ #[allow(unused_use)]
4
+
5
+ /* Autogenerated file. Do not edit manually. */
6
+
7
+ module counter::counter_schema {
8
+
9
+ use std::ascii::String;
10
+
11
+ use std::ascii::string;
12
+
13
+ use sui::package::UpgradeCap;
14
+
15
+ use std::type_name;
16
+
17
+ use dubhe::storage;
18
+
19
+ use dubhe::storage_value::{Self, StorageValue};
20
+
21
+ use dubhe::storage_map::{Self, StorageMap};
22
+
23
+ use dubhe::storage_double_map::{Self, StorageDoubleMap};
24
+
25
+ use sui::dynamic_field as df;
26
+
27
+ use counter::counter_dapp_metadata::DappMetadata;
28
+
29
+ public struct Schema has key, store {
30
+ id: UID,
31
+ }
32
+
33
+ // Default storage
34
+
35
+ public fun borrow_dapp__admin(self: &Schema): &StorageValue<address> {
36
+ storage::borrow_field(&self.id, b"dapp__admin")
37
+ }
38
+
39
+ public fun borrow_dapp__package_id(self: &Schema): &StorageValue<address> {
40
+ storage::borrow_field(&self.id, b"dapp__package_id")
41
+ }
42
+
43
+ public fun borrow_dapp__version(self: &Schema): &StorageValue<u32> {
44
+ storage::borrow_field(&self.id, b"dapp__version")
45
+ }
46
+
47
+ public fun borrow_dapp__metadata(self: &Schema): &StorageValue<DappMetadata> {
48
+ storage::borrow_field(&self.id, b"dapp__metadata")
49
+ }
50
+
51
+ public fun borrow_dapp__safe_mode(self: &Schema): &StorageValue<bool> {
52
+ storage::borrow_field(&self.id, b"dapp__safe_mode")
53
+ }
54
+
55
+ public fun borrow_dapp__authorised_schemas(self: &Schema): &StorageValue<vector<address>> {
56
+ storage::borrow_field(&self.id, b"dapp__authorised_schemas")
57
+ }
58
+
59
+ public fun borrow_dapp__schemas(self: &Schema): &StorageValue<vector<address>> {
60
+ storage::borrow_field(&self.id, b"dapp__schemas")
61
+ }
62
+
63
+ public(package) fun dapp__admin(self: &mut Schema): &mut StorageValue<address> {
64
+ storage::borrow_mut_field(&mut self.id, b"dapp__admin")
65
+ }
66
+
67
+ public(package) fun dapp__package_id(self: &mut Schema): &mut StorageValue<address> {
68
+ storage::borrow_mut_field(&mut self.id, b"dapp__package_id")
69
+ }
70
+
71
+ public(package) fun dapp__version(self: &mut Schema): &mut StorageValue<u32> {
72
+ storage::borrow_mut_field(&mut self.id, b"dapp__version")
73
+ }
74
+
75
+ public(package) fun dapp__metadata(self: &mut Schema): &mut StorageValue<DappMetadata> {
76
+ storage::borrow_mut_field(&mut self.id, b"dapp__metadata")
77
+ }
78
+
79
+ public(package) fun dapp__safe_mode(self: &mut Schema): &mut StorageValue<bool> {
80
+ storage::borrow_mut_field(&mut self.id, b"dapp__safe_mode")
81
+ }
82
+
83
+ public(package) fun dapp__authorised_schemas(self: &mut Schema): &mut StorageValue<vector<address>> {
84
+ storage::borrow_mut_field(&mut self.id, b"dapp__authorised_schemas")
85
+ }
86
+
87
+ public fun borrow_value(self: &Schema): &StorageValue<u32> {
88
+ storage::borrow_field(&self.id, b"value")
89
+ }
90
+
91
+ public(package) fun value(self: &mut Schema): &mut StorageValue<u32> {
92
+ storage::borrow_mut_field(&mut self.id, b"value")
93
+ }
94
+
95
+ public(package) fun create(ctx: &mut TxContext): Schema {
96
+ let mut id = object::new(ctx);
97
+ storage::add_field<StorageValue<u32>>(&mut id, b"value", storage_value::new(b"value", ctx));
98
+ Schema { id }
99
+ }
100
+
101
+ public(package) fun id(self: &mut Schema): &mut UID {
102
+ &mut self.id
103
+ }
104
+
105
+ public(package) fun borrow_id(self: &Schema): &UID {
106
+ &self.id
107
+ }
108
+
109
+ public fun migrate(_schema: &mut Schema, _cap: &UpgradeCap, _ctx: &mut TxContext) {}
110
+
111
+ // ======================================== View Functions ========================================
112
+
113
+ public fun get_value(self: &Schema): &u32 {
114
+ self.borrow_value().get()
115
+ }
116
+
117
+ // =========================================================================================================
118
+ }
@@ -0,0 +1,126 @@
1
+ module counter::counter_dapp_system {
2
+
3
+ use std::ascii::String;
4
+
5
+ use std::ascii;
6
+
7
+ use dubhe::type_info;
8
+
9
+ use sui::clock::Clock;
10
+
11
+ use sui::transfer::public_share_object;
12
+
13
+ use counter::counter_schema::Schema;
14
+
15
+ use counter::counter_dapp_metadata;
16
+
17
+ use counter::counter_dapp_metadata::DappMetadata;
18
+
19
+ use dubhe::storage::add_field;
20
+
21
+ use dubhe::storage_value;
22
+
23
+ use dubhe::storage_value::StorageValue;
24
+
25
+ public struct DappKey has drop {}
26
+
27
+ public(package) fun new(): DappKey {
28
+ DappKey { }
29
+ }
30
+
31
+ public entry fun set_metadata(
32
+ schema: &mut Schema,
33
+ name: String,
34
+ description: String,
35
+ cover_url: vector<String>,
36
+ website_url: String,
37
+ partners: vector<String>,
38
+ ctx: &TxContext,
39
+ ) {
40
+ let admin = schema.dapp__admin().try_get();
41
+ assert!(admin == option::some(ctx.sender()), 0);
42
+ let created_at = schema.dapp__metadata().get().get_created_at();
43
+ schema.dapp__metadata().set(
44
+ counter_dapp_metadata::new(
45
+ name,
46
+ description,
47
+ cover_url,
48
+ website_url,
49
+ created_at,
50
+ partners
51
+ )
52
+ );
53
+ }
54
+
55
+ public entry fun transfer_ownership(schema: &mut Schema, new_admin: address, ctx: &mut TxContext) {
56
+ let admin = schema.dapp__admin().try_get();
57
+ assert!(admin == option::some(ctx.sender()), 0);
58
+ schema.dapp__admin().set(new_admin);
59
+ }
60
+
61
+ public entry fun set_safe_mode(schema: &mut Schema, safe_mode: bool, ctx: &TxContext) {
62
+ let admin = schema.dapp__admin().try_get();
63
+ assert!(admin == option::some(ctx.sender()), 0);
64
+ schema.dapp__safe_mode().set(safe_mode);
65
+ }
66
+
67
+ public fun ensure_no_safe_mode(schema: &mut Schema) {
68
+ assert!(!schema.dapp__safe_mode()[], 0);
69
+ }
70
+
71
+ public fun ensure_has_authority(schema: &mut Schema, ctx: &TxContext) {
72
+ assert!(schema.dapp__admin().get() == ctx.sender(), 0);
73
+ }
74
+
75
+ public fun ensure_has_schema<S: key + store>(schema: &mut Schema, new_schema: &S) {
76
+ let schema_id = object::id_address(new_schema);
77
+ assert!(schema.dapp__authorised_schemas().get().contains(&schema_id), 0);
78
+ }
79
+
80
+ public(package) fun create(
81
+ schema: &mut Schema,
82
+ name: String,
83
+ description: String,
84
+ clock: &Clock,
85
+ ctx: &mut TxContext,
86
+ ) {
87
+ add_field<StorageValue<address>>(schema.id(), b"dapp__admin", storage_value::new(b"dapp__admin", ctx));
88
+ add_field<StorageValue<address>>(schema.id(), b"dapp__package_id", storage_value::new(b"dapp__package_id", ctx));
89
+ add_field<StorageValue<u32>>(schema.id(), b"dapp__version", storage_value::new(b"dapp__version", ctx));
90
+ add_field<StorageValue<DappMetadata>>(schema.id(), b"dapp__metadata", storage_value::new(b"dapp__metadata", ctx));
91
+ add_field<StorageValue<bool>>(schema.id(), b"dapp__safe_mode", storage_value::new(b"dapp__safe_mode", ctx));
92
+ add_field<StorageValue<vector<address>>>(schema.id(), b"dapp__authorised_schemas", storage_value::new(b"dapp__authorised_schemas", ctx));
93
+ schema.dapp__metadata().set(
94
+ counter_dapp_metadata::new(
95
+ name,
96
+ description,
97
+ vector[],
98
+ ascii::string(b""),
99
+ clock.timestamp_ms(),
100
+ vector[]
101
+ )
102
+ );
103
+ let package_id = type_info::current_package_id<DappKey>();
104
+ schema.dapp__package_id().set(package_id);
105
+ schema.dapp__admin().set(ctx.sender());
106
+ schema.dapp__version().set(1);
107
+ schema.dapp__safe_mode().set(false);
108
+ schema.dapp__authorised_schemas().set(vector[]);
109
+ }
110
+
111
+ public(package) fun upgrade<DappKey: drop>(schema: &mut Schema, ctx: &TxContext) {
112
+ assert!(schema.dapp__metadata().contains(), 0);
113
+ assert!(schema.dapp__admin().get() == ctx.sender(), 0);
114
+ let new_package_id = type_info::current_package_id<DappKey>();
115
+ schema.dapp__package_id().set(new_package_id);
116
+ let current_version = schema.dapp__version()[];
117
+ schema.dapp__version().set(current_version + 1);
118
+ }
119
+
120
+ public(package) fun add_schema<S: key + store>(schema: &mut Schema, new_schema: S) {
121
+ let mut schemas = schema.dapp__authorised_schemas()[];
122
+ schemas.push_back(object::id_address<S>(&new_schema));
123
+ schema.dapp__authorised_schemas().set(schemas);
124
+ public_share_object(new_schema);
125
+ }
126
+ }
@@ -7,7 +7,7 @@ module counter::counter_test {
7
7
 
8
8
  #[test]
9
9
  public fun inc() {
10
- let (scenario, dapp) = counter_init_test::deploy_dapp_for_testing(@0xA);
10
+ let scenario = counter_init_test::deploy_dapp_for_testing(@0xA);
11
11
 
12
12
  let mut schema = test_scenario::take_shared<Schema>(&scenario);
13
13
 
@@ -20,7 +20,6 @@ module counter::counter_test {
20
20
  assert!(schema.value().get() == 20);
21
21
 
22
22
  test_scenario::return_shared(schema);
23
- dapp.distroy_dapp_for_testing();
24
23
  scenario.end();
25
24
  }
26
25
  }
@@ -35,9 +35,9 @@
35
35
  "prod:mainnet": "pnpm config:store mainnet && pnpm next"
36
36
  },
37
37
  "dependencies": {
38
- "@0xobelisk/sui-cli": "^1.1.7",
39
- "@0xobelisk/sui-client": "^1.1.10",
40
- "@0xobelisk/sui-common": "^1.1.8",
38
+ "@0xobelisk/sui-cli": "^1.1.8",
39
+ "@0xobelisk/sui-client": "^1.1.11",
40
+ "@0xobelisk/sui-common": "^1.1.9",
41
41
  "@0xobelisk/sui-indexer": "^1.1.13",
42
42
  "jotai": "^1.7.2",
43
43
  "dotenv": "^16.4.5",
@@ -15,9 +15,9 @@
15
15
  "indexer:sqlite": "pnpm sqlite-indexer --force-regenesis --network"
16
16
  },
17
17
  "dependencies": {
18
- "@0xobelisk/sui-cli": "^1.1.7",
19
- "@0xobelisk/sui-client": "^1.1.10",
20
- "@0xobelisk/sui-common": "^1.1.8",
18
+ "@0xobelisk/sui-cli": "^1.1.8",
19
+ "@0xobelisk/sui-client": "^1.1.11",
20
+ "@0xobelisk/sui-common": "^1.1.9",
21
21
  "@0xobelisk/sui-indexer": "^1.1.13",
22
22
  "dotenv": "^16.4.5",
23
23
  "chalk": "^4.1.2"
@@ -7,14 +7,13 @@
7
7
  use counter::counter_dapp_system;
8
8
 
9
9
  public entry fun run(clock: &Clock, ctx: &mut TxContext) {
10
- // Create a dapp.
11
- let mut dapp = counter_dapp_system::create(string(b"counter"),string(b"counter contract"), clock , ctx);
12
10
  // Create schemas
13
11
  let mut schema = counter::counter_schema::create(ctx);
12
+ // Setup default storage
13
+ counter_dapp_system::create(&mut schema, string(b"counter"),string(b"counter contract"), clock , ctx);
14
14
  // Logic that needs to be automated once the contract is deployed
15
15
  counter::counter_deploy_hook::run(&mut schema, ctx);
16
16
  // Authorize schemas and public share objects
17
- dapp.add_schema(schema);
18
- sui::transfer::public_share_object(dapp);
17
+ sui::transfer::public_share_object(schema);
19
18
  }
20
19
  }
@@ -1,21 +1,18 @@
1
1
  #[test_only]module counter::counter_init_test {
2
2
 
3
- use counter::counter_dapp_schema::Dapp;
4
-
5
3
  use sui::clock;
6
4
 
7
5
  use sui::test_scenario;
8
6
 
9
7
  use sui::test_scenario::Scenario;
10
8
 
11
- public fun deploy_dapp_for_testing(sender: address): (Scenario, Dapp) {
9
+ public fun deploy_dapp_for_testing(sender: address): Scenario {
12
10
  let mut scenario = test_scenario::begin(sender);
13
11
  let ctx = test_scenario::ctx(&mut scenario);
14
12
  let clock = clock::create_for_testing(ctx);
15
13
  counter::counter_genesis::run(&clock, ctx);
16
14
  clock::destroy_for_testing(clock);
17
15
  test_scenario::next_tx(&mut scenario,sender);
18
- let dapp = test_scenario::take_shared<Dapp>(&scenario);
19
- (scenario, dapp)
16
+ scenario
20
17
  }
21
18
  }
@@ -11,7 +11,7 @@
11
11
  public struct DappMetadata has drop, copy, store {
12
12
  name: String,
13
13
  description: String,
14
- icon_url: String,
14
+ cover_url: vector<String>,
15
15
  website_url: String,
16
16
  created_at: u64,
17
17
  partners: vector<String>,
@@ -20,7 +20,7 @@
20
20
  public fun new(
21
21
  name: String,
22
22
  description: String,
23
- icon_url: String,
23
+ cover_url: vector<String>,
24
24
  website_url: String,
25
25
  created_at: u64,
26
26
  partners: vector<String>,
@@ -28,7 +28,7 @@
28
28
  DappMetadata {
29
29
  name,
30
30
  description,
31
- icon_url,
31
+ cover_url,
32
32
  website_url,
33
33
  created_at,
34
34
  partners,
@@ -39,14 +39,14 @@
39
39
  self: &mut DappMetadata,
40
40
  name: String,
41
41
  description: String,
42
- icon_url: String,
42
+ cover_url: vector<String>,
43
43
  website_url: String,
44
44
  created_at: u64,
45
45
  partners: vector<String>,
46
46
  ) {
47
47
  self.name = name;
48
48
  self.description = description;
49
- self.icon_url = icon_url;
49
+ self.cover_url = cover_url;
50
50
  self.website_url = website_url;
51
51
  self.created_at = created_at;
52
52
  self.partners = partners;
@@ -60,8 +60,8 @@
60
60
  self.description = description;
61
61
  }
62
62
 
63
- public fun set_icon_url(self: &mut DappMetadata, icon_url: String) {
64
- self.icon_url = icon_url;
63
+ public fun set_cover_url(self: &mut DappMetadata, cover_url: vector<String>) {
64
+ self.cover_url = cover_url;
65
65
  }
66
66
 
67
67
  public fun set_website_url(self: &mut DappMetadata, website_url: String) {
@@ -84,8 +84,8 @@
84
84
  self.description
85
85
  }
86
86
 
87
- public fun get_icon_url(self: &DappMetadata): String {
88
- self.icon_url
87
+ public fun get_cover_url(self: &DappMetadata): vector<String> {
88
+ self.cover_url
89
89
  }
90
90
 
91
91
  public fun get_website_url(self: &DappMetadata): String {
@@ -0,0 +1,118 @@
1
+ // Copyright (c) Obelisk Labs, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ #[allow(unused_use)]
4
+
5
+ /* Autogenerated file. Do not edit manually. */
6
+
7
+ module counter::counter_schema {
8
+
9
+ use std::ascii::String;
10
+
11
+ use std::ascii::string;
12
+
13
+ use sui::package::UpgradeCap;
14
+
15
+ use std::type_name;
16
+
17
+ use dubhe::storage;
18
+
19
+ use dubhe::storage_value::{Self, StorageValue};
20
+
21
+ use dubhe::storage_map::{Self, StorageMap};
22
+
23
+ use dubhe::storage_double_map::{Self, StorageDoubleMap};
24
+
25
+ use sui::dynamic_field as df;
26
+
27
+ use counter::counter_dapp_metadata::DappMetadata;
28
+
29
+ public struct Schema has key, store {
30
+ id: UID,
31
+ }
32
+
33
+ // Default storage
34
+
35
+ public fun borrow_dapp__admin(self: &Schema): &StorageValue<address> {
36
+ storage::borrow_field(&self.id, b"dapp__admin")
37
+ }
38
+
39
+ public fun borrow_dapp__package_id(self: &Schema): &StorageValue<address> {
40
+ storage::borrow_field(&self.id, b"dapp__package_id")
41
+ }
42
+
43
+ public fun borrow_dapp__version(self: &Schema): &StorageValue<u32> {
44
+ storage::borrow_field(&self.id, b"dapp__version")
45
+ }
46
+
47
+ public fun borrow_dapp__metadata(self: &Schema): &StorageValue<DappMetadata> {
48
+ storage::borrow_field(&self.id, b"dapp__metadata")
49
+ }
50
+
51
+ public fun borrow_dapp__safe_mode(self: &Schema): &StorageValue<bool> {
52
+ storage::borrow_field(&self.id, b"dapp__safe_mode")
53
+ }
54
+
55
+ public fun borrow_dapp__authorised_schemas(self: &Schema): &StorageValue<vector<address>> {
56
+ storage::borrow_field(&self.id, b"dapp__authorised_schemas")
57
+ }
58
+
59
+ public fun borrow_dapp__schemas(self: &Schema): &StorageValue<vector<address>> {
60
+ storage::borrow_field(&self.id, b"dapp__schemas")
61
+ }
62
+
63
+ public(package) fun dapp__admin(self: &mut Schema): &mut StorageValue<address> {
64
+ storage::borrow_mut_field(&mut self.id, b"dapp__admin")
65
+ }
66
+
67
+ public(package) fun dapp__package_id(self: &mut Schema): &mut StorageValue<address> {
68
+ storage::borrow_mut_field(&mut self.id, b"dapp__package_id")
69
+ }
70
+
71
+ public(package) fun dapp__version(self: &mut Schema): &mut StorageValue<u32> {
72
+ storage::borrow_mut_field(&mut self.id, b"dapp__version")
73
+ }
74
+
75
+ public(package) fun dapp__metadata(self: &mut Schema): &mut StorageValue<DappMetadata> {
76
+ storage::borrow_mut_field(&mut self.id, b"dapp__metadata")
77
+ }
78
+
79
+ public(package) fun dapp__safe_mode(self: &mut Schema): &mut StorageValue<bool> {
80
+ storage::borrow_mut_field(&mut self.id, b"dapp__safe_mode")
81
+ }
82
+
83
+ public(package) fun dapp__authorised_schemas(self: &mut Schema): &mut StorageValue<vector<address>> {
84
+ storage::borrow_mut_field(&mut self.id, b"dapp__authorised_schemas")
85
+ }
86
+
87
+ public fun borrow_value(self: &Schema): &StorageValue<u32> {
88
+ storage::borrow_field(&self.id, b"value")
89
+ }
90
+
91
+ public(package) fun value(self: &mut Schema): &mut StorageValue<u32> {
92
+ storage::borrow_mut_field(&mut self.id, b"value")
93
+ }
94
+
95
+ public(package) fun create(ctx: &mut TxContext): Schema {
96
+ let mut id = object::new(ctx);
97
+ storage::add_field<StorageValue<u32>>(&mut id, b"value", storage_value::new(b"value", ctx));
98
+ Schema { id }
99
+ }
100
+
101
+ public(package) fun id(self: &mut Schema): &mut UID {
102
+ &mut self.id
103
+ }
104
+
105
+ public(package) fun borrow_id(self: &Schema): &UID {
106
+ &self.id
107
+ }
108
+
109
+ public fun migrate(_schema: &mut Schema, _cap: &UpgradeCap, _ctx: &mut TxContext) {}
110
+
111
+ // ======================================== View Functions ========================================
112
+
113
+ public fun get_value(self: &Schema): &u32 {
114
+ self.borrow_value().get()
115
+ }
116
+
117
+ // =========================================================================================================
118
+ }
@@ -0,0 +1,126 @@
1
+ module counter::counter_dapp_system {
2
+
3
+ use std::ascii::String;
4
+
5
+ use std::ascii;
6
+
7
+ use dubhe::type_info;
8
+
9
+ use sui::clock::Clock;
10
+
11
+ use sui::transfer::public_share_object;
12
+
13
+ use counter::counter_schema::Schema;
14
+
15
+ use counter::counter_dapp_metadata;
16
+
17
+ use counter::counter_dapp_metadata::DappMetadata;
18
+
19
+ use dubhe::storage::add_field;
20
+
21
+ use dubhe::storage_value;
22
+
23
+ use dubhe::storage_value::StorageValue;
24
+
25
+ public struct DappKey has drop {}
26
+
27
+ public(package) fun new(): DappKey {
28
+ DappKey { }
29
+ }
30
+
31
+ public entry fun set_metadata(
32
+ schema: &mut Schema,
33
+ name: String,
34
+ description: String,
35
+ cover_url: vector<String>,
36
+ website_url: String,
37
+ partners: vector<String>,
38
+ ctx: &TxContext,
39
+ ) {
40
+ let admin = schema.dapp__admin().try_get();
41
+ assert!(admin == option::some(ctx.sender()), 0);
42
+ let created_at = schema.dapp__metadata().get().get_created_at();
43
+ schema.dapp__metadata().set(
44
+ counter_dapp_metadata::new(
45
+ name,
46
+ description,
47
+ cover_url,
48
+ website_url,
49
+ created_at,
50
+ partners
51
+ )
52
+ );
53
+ }
54
+
55
+ public entry fun transfer_ownership(schema: &mut Schema, new_admin: address, ctx: &mut TxContext) {
56
+ let admin = schema.dapp__admin().try_get();
57
+ assert!(admin == option::some(ctx.sender()), 0);
58
+ schema.dapp__admin().set(new_admin);
59
+ }
60
+
61
+ public entry fun set_safe_mode(schema: &mut Schema, safe_mode: bool, ctx: &TxContext) {
62
+ let admin = schema.dapp__admin().try_get();
63
+ assert!(admin == option::some(ctx.sender()), 0);
64
+ schema.dapp__safe_mode().set(safe_mode);
65
+ }
66
+
67
+ public fun ensure_no_safe_mode(schema: &mut Schema) {
68
+ assert!(!schema.dapp__safe_mode()[], 0);
69
+ }
70
+
71
+ public fun ensure_has_authority(schema: &mut Schema, ctx: &TxContext) {
72
+ assert!(schema.dapp__admin().get() == ctx.sender(), 0);
73
+ }
74
+
75
+ public fun ensure_has_schema<S: key + store>(schema: &mut Schema, new_schema: &S) {
76
+ let schema_id = object::id_address(new_schema);
77
+ assert!(schema.dapp__authorised_schemas().get().contains(&schema_id), 0);
78
+ }
79
+
80
+ public(package) fun create(
81
+ schema: &mut Schema,
82
+ name: String,
83
+ description: String,
84
+ clock: &Clock,
85
+ ctx: &mut TxContext,
86
+ ) {
87
+ add_field<StorageValue<address>>(schema.id(), b"dapp__admin", storage_value::new(b"dapp__admin", ctx));
88
+ add_field<StorageValue<address>>(schema.id(), b"dapp__package_id", storage_value::new(b"dapp__package_id", ctx));
89
+ add_field<StorageValue<u32>>(schema.id(), b"dapp__version", storage_value::new(b"dapp__version", ctx));
90
+ add_field<StorageValue<DappMetadata>>(schema.id(), b"dapp__metadata", storage_value::new(b"dapp__metadata", ctx));
91
+ add_field<StorageValue<bool>>(schema.id(), b"dapp__safe_mode", storage_value::new(b"dapp__safe_mode", ctx));
92
+ add_field<StorageValue<vector<address>>>(schema.id(), b"dapp__authorised_schemas", storage_value::new(b"dapp__authorised_schemas", ctx));
93
+ schema.dapp__metadata().set(
94
+ counter_dapp_metadata::new(
95
+ name,
96
+ description,
97
+ vector[],
98
+ ascii::string(b""),
99
+ clock.timestamp_ms(),
100
+ vector[]
101
+ )
102
+ );
103
+ let package_id = type_info::current_package_id<DappKey>();
104
+ schema.dapp__package_id().set(package_id);
105
+ schema.dapp__admin().set(ctx.sender());
106
+ schema.dapp__version().set(1);
107
+ schema.dapp__safe_mode().set(false);
108
+ schema.dapp__authorised_schemas().set(vector[]);
109
+ }
110
+
111
+ public(package) fun upgrade<DappKey: drop>(schema: &mut Schema, ctx: &TxContext) {
112
+ assert!(schema.dapp__metadata().contains(), 0);
113
+ assert!(schema.dapp__admin().get() == ctx.sender(), 0);
114
+ let new_package_id = type_info::current_package_id<DappKey>();
115
+ schema.dapp__package_id().set(new_package_id);
116
+ let current_version = schema.dapp__version()[];
117
+ schema.dapp__version().set(current_version + 1);
118
+ }
119
+
120
+ public(package) fun add_schema<S: key + store>(schema: &mut Schema, new_schema: S) {
121
+ let mut schemas = schema.dapp__authorised_schemas()[];
122
+ schemas.push_back(object::id_address<S>(&new_schema));
123
+ schema.dapp__authorised_schemas().set(schemas);
124
+ public_share_object(new_schema);
125
+ }
126
+ }
@@ -7,7 +7,7 @@ module counter::counter_test {
7
7
 
8
8
  #[test]
9
9
  public fun inc() {
10
- let (scenario, dapp) = counter_init_test::deploy_dapp_for_testing(@0xA);
10
+ let scenario = counter_init_test::deploy_dapp_for_testing(@0xA);
11
11
 
12
12
  let mut schema = test_scenario::take_shared<Schema>(&scenario);
13
13
 
@@ -20,7 +20,6 @@ module counter::counter_test {
20
20
  assert!(schema.value().get() == 20);
21
21
 
22
22
  test_scenario::return_shared(schema);
23
- dapp.distroy_dapp_for_testing();
24
23
  scenario.end();
25
24
  }
26
25
  }
@@ -36,9 +36,9 @@
36
36
  "prod:mainnet": "pnpm config:store mainnet && pnpm next"
37
37
  },
38
38
  "dependencies": {
39
- "@0xobelisk/sui-cli": "^1.1.7",
40
- "@0xobelisk/sui-client": "^1.1.10",
41
- "@0xobelisk/sui-common": "^1.1.8",
39
+ "@0xobelisk/sui-cli": "^1.1.8",
40
+ "@0xobelisk/sui-client": "^1.1.11",
41
+ "@0xobelisk/sui-common": "^1.1.9",
42
42
  "@0xobelisk/sui-indexer": "^1.1.13",
43
43
  "@mysten/dapp-kit": "0.14.46",
44
44
  "@tanstack/react-query": "^5.17.19",
@@ -1,112 +0,0 @@
1
- // Copyright (c) Obelisk Labs, Inc.
2
- // SPDX-License-Identifier: Apache-2.0
3
- #[allow(unused_use)]
4
-
5
- /* Autogenerated file. Do not edit manually. */
6
-
7
- module counter::counter_dapp_schema {
8
-
9
- use counter::counter_dapp_metadata::DappMetadata;
10
-
11
- use dubhe::storage_value;
12
-
13
- use dubhe::storage_value::StorageValue;
14
-
15
- use dubhe::storage;
16
-
17
- use sui::transfer::public_share_object;
18
-
19
- use dubhe::type_info;
20
-
21
- public struct Dapp has key, store {
22
- id: UID,
23
- }
24
-
25
- public fun borrow_admin(self: &Dapp): &StorageValue<address> {
26
- storage::borrow_field(&self.id, b"admin")
27
- }
28
-
29
- public(package) fun admin(self: &mut Dapp): &mut StorageValue<address> {
30
- storage::borrow_mut_field(&mut self.id, b"admin")
31
- }
32
-
33
- public fun borrow_package_id(self: &Dapp): &StorageValue<address> {
34
- storage::borrow_field(&self.id, b"package_id")
35
- }
36
-
37
- public(package) fun package_id(self: &mut Dapp): &mut StorageValue<address> {
38
- storage::borrow_mut_field(&mut self.id, b"package_id")
39
- }
40
-
41
- public fun borrow_version(self: &Dapp): &StorageValue<u32> {
42
- storage::borrow_field(&self.id, b"version")
43
- }
44
-
45
- public(package) fun version(self: &mut Dapp): &mut StorageValue<u32> {
46
- storage::borrow_mut_field(&mut self.id, b"version")
47
- }
48
-
49
- public fun borrow_metadata(self: &Dapp): &StorageValue<DappMetadata> {
50
- storage::borrow_field(&self.id, b"metadata")
51
- }
52
-
53
- public(package) fun metadata(self: &mut Dapp): &mut StorageValue<DappMetadata> {
54
- storage::borrow_mut_field(&mut self.id, b"metadata")
55
- }
56
-
57
- public fun borrow_safe_mode(self: &Dapp): &StorageValue<bool> {
58
- storage::borrow_field(&self.id, b"safe_mode")
59
- }
60
-
61
- public(package) fun safe_mode(self: &mut Dapp): &mut StorageValue<bool> {
62
- storage::borrow_mut_field(&mut self.id, b"safe_mode")
63
- }
64
-
65
- public(package) fun borrow_schemas(self: &Dapp): &StorageValue<vector<address>> {
66
- storage::borrow_field(&self.id, b"schemas")
67
- }
68
-
69
- public(package) fun schemas(self: &mut Dapp): &mut StorageValue<vector<address>> {
70
- storage::borrow_mut_field(&mut self.id, b"schemas")
71
- }
72
-
73
- public(package) fun create(ctx: &mut TxContext): Dapp {
74
- let mut id = object::new(ctx);
75
- storage::add_field<StorageValue<address>>(&mut id, b"admin", storage_value::new(b"admin", ctx));
76
- storage::add_field<StorageValue<address>>(&mut id, b"package_id", storage_value::new(b"package_id", ctx));
77
- storage::add_field<StorageValue<u32>>(&mut id, b"version", storage_value::new(b"version", ctx));
78
- storage::add_field<StorageValue<DappMetadata>>(&mut id, b"metadata", storage_value::new(b"metadata", ctx));
79
- storage::add_field<StorageValue<bool>>(&mut id, b"safe_mode", storage_value::new(b"safe_mode", ctx));
80
- storage::add_field<StorageValue<vector<address>>>(&mut id, b"schemas", storage_value::new(b"schemas", ctx));
81
- Dapp { id }
82
- }
83
-
84
- public(package) fun upgrade<DappKey: drop>(dapp: &mut Dapp, ctx: &TxContext) {
85
- assert!(dapp.borrow_metadata().contains(), 0);
86
- assert!(dapp.borrow_admin().get() == ctx.sender(), 0);
87
- let new_package_id = type_info::current_package_id<DappKey>();
88
- dapp.package_id().set(new_package_id);
89
- let current_version = dapp.version()[];
90
- dapp.version().set(current_version + 1);
91
- }
92
-
93
- public(package) fun add_schema<Schema: key + store>(dapp: &mut Dapp, schema: Schema) {
94
- let mut schemas = dapp.schemas()[];
95
- schemas.push_back(object::id_address<Schema>(&schema));
96
- dapp.schemas().set(schemas);
97
- public_share_object(schema);
98
- }
99
-
100
- #[test_only]
101
-
102
- public fun create_dapp_for_testing(ctx: &mut TxContext): Dapp {
103
- create(ctx)
104
- }
105
-
106
- #[test_only]
107
-
108
- public fun distroy_dapp_for_testing(dapp: Dapp) {
109
- let Dapp { id } = dapp;
110
- id.delete();
111
- }
112
- }
@@ -1,93 +0,0 @@
1
- module counter::counter_dapp_system {
2
-
3
- use std::ascii::String;
4
-
5
- use std::ascii;
6
-
7
- use dubhe::type_info;
8
-
9
- use sui::clock::Clock;
10
-
11
- use counter::counter_dapp_schema;
12
-
13
- use counter::counter_dapp_metadata;
14
-
15
- use counter::counter_dapp_schema::Dapp;
16
-
17
- public struct DappKey has drop {}
18
-
19
- public(package) fun new(): DappKey {
20
- DappKey { }
21
- }
22
-
23
- public(package) fun create(name: String, description: String, clock: &Clock, ctx: &mut TxContext): Dapp {
24
- let mut dapp = counter_dapp_schema::create(ctx);
25
- assert!(!dapp.borrow_metadata().contains(), 0);
26
- dapp.metadata().set(
27
- counter_dapp_metadata::new(
28
- name,
29
- description,
30
- ascii::string(b""),
31
- ascii::string(b""),
32
- clock.timestamp_ms(),
33
- vector[]
34
- )
35
- );
36
- let package_id = type_info::current_package_id<DappKey>();
37
- dapp.package_id().set(package_id);
38
- dapp.admin().set(ctx.sender());
39
- dapp.version().set(1);
40
- dapp.safe_mode().set(false);
41
- dapp.schemas().set(vector[]);
42
- dapp
43
- }
44
-
45
- public entry fun set_metadata(
46
- dapp: &mut Dapp,
47
- name: String,
48
- description: String,
49
- icon_url: String,
50
- website_url: String,
51
- partners: vector<String>,
52
- ctx: &TxContext,
53
- ) {
54
- let admin = dapp.admin().try_get();
55
- assert!(admin == option::some(ctx.sender()), 0);
56
- let created_at = dapp.metadata().get().get_created_at();
57
- dapp.metadata().set(
58
- counter_dapp_metadata::new(
59
- name,
60
- description,
61
- icon_url,
62
- website_url,
63
- created_at,
64
- partners
65
- )
66
- );
67
- }
68
-
69
- public entry fun transfer_ownership(dapp: &mut Dapp, new_admin: address, ctx: &mut TxContext) {
70
- let admin = dapp.admin().try_get();
71
- assert!(admin == option::some(ctx.sender()), 0);
72
- dapp.admin().set(new_admin);
73
- }
74
-
75
- public entry fun set_safe_mode(dapp: &mut Dapp, safe_mode: bool, ctx: &TxContext) {
76
- let admin = dapp.admin().try_get();
77
- assert!(admin == option::some(ctx.sender()), 0);
78
- dapp.safe_mode().set(safe_mode);
79
- }
80
-
81
- public fun ensure_no_safe_mode(dapp: &Dapp) {
82
- assert!(!dapp.borrow_safe_mode()[], 0);
83
- }
84
-
85
- public fun ensure_has_authority(dapp: &Dapp, ctx: &TxContext) {
86
- assert!(dapp.borrow_admin().get() == ctx.sender(), 0);
87
- }
88
-
89
- public fun ensure_has_schema<Schema: key + store>(dapp: &Dapp, schema: &Schema) {
90
- let schema_id = object::id_address(schema);
91
- assert!(dapp.borrow_schemas().get().contains(&schema_id), 0);
92
- }
93
- }
@@ -1,62 +0,0 @@
1
- // Copyright (c) Obelisk Labs, Inc.
2
- // SPDX-License-Identifier: Apache-2.0
3
- #[allow(unused_use)]
4
-
5
- /* Autogenerated file. Do not edit manually. */
6
-
7
- module counter::counter_schema {
8
-
9
- use std::ascii::String;
10
-
11
- use std::ascii::string;
12
-
13
- use sui::package::UpgradeCap;
14
-
15
- use std::type_name;
16
-
17
- use dubhe::storage;
18
-
19
- use dubhe::storage_value::{Self, StorageValue};
20
-
21
- use dubhe::storage_map::{Self, StorageMap};
22
-
23
- use dubhe::storage_double_map::{Self, StorageDoubleMap};
24
-
25
- use sui::dynamic_field as df;
26
-
27
- public struct Schema has key, store {
28
- id: UID,
29
- }
30
-
31
- public fun borrow_value(self: &Schema): &StorageValue<u32> {
32
- storage::borrow_field(&self.id, b"value")
33
- }
34
-
35
- public(package) fun value(self: &mut Schema): &mut StorageValue<u32> {
36
- storage::borrow_mut_field(&mut self.id, b"value")
37
- }
38
-
39
- public(package) fun create(ctx: &mut TxContext): Schema {
40
- let mut id = object::new(ctx);
41
- storage::add_field<StorageValue<u32>>(&mut id, b"value", storage_value::new(b"value", ctx));
42
- Schema { id }
43
- }
44
-
45
- public(package) fun id(self: &mut Schema): &mut UID {
46
- &mut self.id
47
- }
48
-
49
- public(package) fun borrow_id(self: &Schema): &UID {
50
- &self.id
51
- }
52
-
53
- public fun migrate(_schema: &mut Schema, _cap: &UpgradeCap, _ctx: &mut TxContext) {}
54
-
55
- // ======================================== View Functions ========================================
56
-
57
- public fun get_value(self: &Schema): &u32 {
58
- self.borrow_value().get()
59
- }
60
-
61
- // =========================================================================================================
62
- }
@@ -1,112 +0,0 @@
1
- // Copyright (c) Obelisk Labs, Inc.
2
- // SPDX-License-Identifier: Apache-2.0
3
- #[allow(unused_use)]
4
-
5
- /* Autogenerated file. Do not edit manually. */
6
-
7
- module counter::counter_dapp_schema {
8
-
9
- use counter::counter_dapp_metadata::DappMetadata;
10
-
11
- use dubhe::storage_value;
12
-
13
- use dubhe::storage_value::StorageValue;
14
-
15
- use dubhe::storage;
16
-
17
- use sui::transfer::public_share_object;
18
-
19
- use dubhe::type_info;
20
-
21
- public struct Dapp has key, store {
22
- id: UID,
23
- }
24
-
25
- public fun borrow_admin(self: &Dapp): &StorageValue<address> {
26
- storage::borrow_field(&self.id, b"admin")
27
- }
28
-
29
- public(package) fun admin(self: &mut Dapp): &mut StorageValue<address> {
30
- storage::borrow_mut_field(&mut self.id, b"admin")
31
- }
32
-
33
- public fun borrow_package_id(self: &Dapp): &StorageValue<address> {
34
- storage::borrow_field(&self.id, b"package_id")
35
- }
36
-
37
- public(package) fun package_id(self: &mut Dapp): &mut StorageValue<address> {
38
- storage::borrow_mut_field(&mut self.id, b"package_id")
39
- }
40
-
41
- public fun borrow_version(self: &Dapp): &StorageValue<u32> {
42
- storage::borrow_field(&self.id, b"version")
43
- }
44
-
45
- public(package) fun version(self: &mut Dapp): &mut StorageValue<u32> {
46
- storage::borrow_mut_field(&mut self.id, b"version")
47
- }
48
-
49
- public fun borrow_metadata(self: &Dapp): &StorageValue<DappMetadata> {
50
- storage::borrow_field(&self.id, b"metadata")
51
- }
52
-
53
- public(package) fun metadata(self: &mut Dapp): &mut StorageValue<DappMetadata> {
54
- storage::borrow_mut_field(&mut self.id, b"metadata")
55
- }
56
-
57
- public fun borrow_safe_mode(self: &Dapp): &StorageValue<bool> {
58
- storage::borrow_field(&self.id, b"safe_mode")
59
- }
60
-
61
- public(package) fun safe_mode(self: &mut Dapp): &mut StorageValue<bool> {
62
- storage::borrow_mut_field(&mut self.id, b"safe_mode")
63
- }
64
-
65
- public(package) fun borrow_schemas(self: &Dapp): &StorageValue<vector<address>> {
66
- storage::borrow_field(&self.id, b"schemas")
67
- }
68
-
69
- public(package) fun schemas(self: &mut Dapp): &mut StorageValue<vector<address>> {
70
- storage::borrow_mut_field(&mut self.id, b"schemas")
71
- }
72
-
73
- public(package) fun create(ctx: &mut TxContext): Dapp {
74
- let mut id = object::new(ctx);
75
- storage::add_field<StorageValue<address>>(&mut id, b"admin", storage_value::new(b"admin", ctx));
76
- storage::add_field<StorageValue<address>>(&mut id, b"package_id", storage_value::new(b"package_id", ctx));
77
- storage::add_field<StorageValue<u32>>(&mut id, b"version", storage_value::new(b"version", ctx));
78
- storage::add_field<StorageValue<DappMetadata>>(&mut id, b"metadata", storage_value::new(b"metadata", ctx));
79
- storage::add_field<StorageValue<bool>>(&mut id, b"safe_mode", storage_value::new(b"safe_mode", ctx));
80
- storage::add_field<StorageValue<vector<address>>>(&mut id, b"schemas", storage_value::new(b"schemas", ctx));
81
- Dapp { id }
82
- }
83
-
84
- public(package) fun upgrade<DappKey: drop>(dapp: &mut Dapp, ctx: &TxContext) {
85
- assert!(dapp.borrow_metadata().contains(), 0);
86
- assert!(dapp.borrow_admin().get() == ctx.sender(), 0);
87
- let new_package_id = type_info::current_package_id<DappKey>();
88
- dapp.package_id().set(new_package_id);
89
- let current_version = dapp.version()[];
90
- dapp.version().set(current_version + 1);
91
- }
92
-
93
- public(package) fun add_schema<Schema: key + store>(dapp: &mut Dapp, schema: Schema) {
94
- let mut schemas = dapp.schemas()[];
95
- schemas.push_back(object::id_address<Schema>(&schema));
96
- dapp.schemas().set(schemas);
97
- public_share_object(schema);
98
- }
99
-
100
- #[test_only]
101
-
102
- public fun create_dapp_for_testing(ctx: &mut TxContext): Dapp {
103
- create(ctx)
104
- }
105
-
106
- #[test_only]
107
-
108
- public fun distroy_dapp_for_testing(dapp: Dapp) {
109
- let Dapp { id } = dapp;
110
- id.delete();
111
- }
112
- }
@@ -1,93 +0,0 @@
1
- module counter::counter_dapp_system {
2
-
3
- use std::ascii::String;
4
-
5
- use std::ascii;
6
-
7
- use dubhe::type_info;
8
-
9
- use sui::clock::Clock;
10
-
11
- use counter::counter_dapp_schema;
12
-
13
- use counter::counter_dapp_metadata;
14
-
15
- use counter::counter_dapp_schema::Dapp;
16
-
17
- public struct DappKey has drop {}
18
-
19
- public(package) fun new(): DappKey {
20
- DappKey { }
21
- }
22
-
23
- public(package) fun create(name: String, description: String, clock: &Clock, ctx: &mut TxContext): Dapp {
24
- let mut dapp = counter_dapp_schema::create(ctx);
25
- assert!(!dapp.borrow_metadata().contains(), 0);
26
- dapp.metadata().set(
27
- counter_dapp_metadata::new(
28
- name,
29
- description,
30
- ascii::string(b""),
31
- ascii::string(b""),
32
- clock.timestamp_ms(),
33
- vector[]
34
- )
35
- );
36
- let package_id = type_info::current_package_id<DappKey>();
37
- dapp.package_id().set(package_id);
38
- dapp.admin().set(ctx.sender());
39
- dapp.version().set(1);
40
- dapp.safe_mode().set(false);
41
- dapp.schemas().set(vector[]);
42
- dapp
43
- }
44
-
45
- public entry fun set_metadata(
46
- dapp: &mut Dapp,
47
- name: String,
48
- description: String,
49
- icon_url: String,
50
- website_url: String,
51
- partners: vector<String>,
52
- ctx: &TxContext,
53
- ) {
54
- let admin = dapp.admin().try_get();
55
- assert!(admin == option::some(ctx.sender()), 0);
56
- let created_at = dapp.metadata().get().get_created_at();
57
- dapp.metadata().set(
58
- counter_dapp_metadata::new(
59
- name,
60
- description,
61
- icon_url,
62
- website_url,
63
- created_at,
64
- partners
65
- )
66
- );
67
- }
68
-
69
- public entry fun transfer_ownership(dapp: &mut Dapp, new_admin: address, ctx: &mut TxContext) {
70
- let admin = dapp.admin().try_get();
71
- assert!(admin == option::some(ctx.sender()), 0);
72
- dapp.admin().set(new_admin);
73
- }
74
-
75
- public entry fun set_safe_mode(dapp: &mut Dapp, safe_mode: bool, ctx: &TxContext) {
76
- let admin = dapp.admin().try_get();
77
- assert!(admin == option::some(ctx.sender()), 0);
78
- dapp.safe_mode().set(safe_mode);
79
- }
80
-
81
- public fun ensure_no_safe_mode(dapp: &Dapp) {
82
- assert!(!dapp.borrow_safe_mode()[], 0);
83
- }
84
-
85
- public fun ensure_has_authority(dapp: &Dapp, ctx: &TxContext) {
86
- assert!(dapp.borrow_admin().get() == ctx.sender(), 0);
87
- }
88
-
89
- public fun ensure_has_schema<Schema: key + store>(dapp: &Dapp, schema: &Schema) {
90
- let schema_id = object::id_address(schema);
91
- assert!(dapp.borrow_schemas().get().contains(&schema_id), 0);
92
- }
93
- }
@@ -1,62 +0,0 @@
1
- // Copyright (c) Obelisk Labs, Inc.
2
- // SPDX-License-Identifier: Apache-2.0
3
- #[allow(unused_use)]
4
-
5
- /* Autogenerated file. Do not edit manually. */
6
-
7
- module counter::counter_schema {
8
-
9
- use std::ascii::String;
10
-
11
- use std::ascii::string;
12
-
13
- use sui::package::UpgradeCap;
14
-
15
- use std::type_name;
16
-
17
- use dubhe::storage;
18
-
19
- use dubhe::storage_value::{Self, StorageValue};
20
-
21
- use dubhe::storage_map::{Self, StorageMap};
22
-
23
- use dubhe::storage_double_map::{Self, StorageDoubleMap};
24
-
25
- use sui::dynamic_field as df;
26
-
27
- public struct Schema has key, store {
28
- id: UID,
29
- }
30
-
31
- public fun borrow_value(self: &Schema): &StorageValue<u32> {
32
- storage::borrow_field(&self.id, b"value")
33
- }
34
-
35
- public(package) fun value(self: &mut Schema): &mut StorageValue<u32> {
36
- storage::borrow_mut_field(&mut self.id, b"value")
37
- }
38
-
39
- public(package) fun create(ctx: &mut TxContext): Schema {
40
- let mut id = object::new(ctx);
41
- storage::add_field<StorageValue<u32>>(&mut id, b"value", storage_value::new(b"value", ctx));
42
- Schema { id }
43
- }
44
-
45
- public(package) fun id(self: &mut Schema): &mut UID {
46
- &mut self.id
47
- }
48
-
49
- public(package) fun borrow_id(self: &Schema): &UID {
50
- &self.id
51
- }
52
-
53
- public fun migrate(_schema: &mut Schema, _cap: &UpgradeCap, _ctx: &mut TxContext) {}
54
-
55
- // ======================================== View Functions ========================================
56
-
57
- public fun get_value(self: &Schema): &u32 {
58
- self.borrow_value().get()
59
- }
60
-
61
- // =========================================================================================================
62
- }