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.
- package/package.json +1 -1
- package/template/{nextjs/sui-template/contracts/counter/sources/codegen → 101/sui-template/contracts/counter/sources/codegen/core}/genesis.move +3 -4
- package/template/101/sui-template/contracts/counter/sources/{tests/init.move → codegen/core/init_test.move} +2 -5
- package/template/101/sui-template/contracts/counter/sources/codegen/{dapp → core}/metadata.move +9 -9
- package/template/101/sui-template/contracts/counter/sources/codegen/core/schema.move +118 -0
- package/template/101/sui-template/contracts/counter/sources/codegen/core/system.move +126 -0
- package/template/101/sui-template/contracts/counter/sources/tests/counter.move +1 -2
- package/template/101/sui-template/package.json +3 -3
- package/template/contract/sui-template/package.json +3 -3
- package/template/{101/sui-template/contracts/counter/sources/codegen → nextjs/sui-template/contracts/counter/sources/codegen/core}/genesis.move +3 -4
- package/template/nextjs/sui-template/contracts/counter/sources/{tests/init.move → codegen/core/init_test.move} +2 -5
- package/template/nextjs/sui-template/contracts/counter/sources/codegen/{dapp → core}/metadata.move +9 -9
- package/template/nextjs/sui-template/contracts/counter/sources/codegen/core/schema.move +118 -0
- package/template/nextjs/sui-template/contracts/counter/sources/codegen/core/system.move +126 -0
- package/template/nextjs/sui-template/contracts/counter/sources/tests/counter.move +1 -2
- package/template/nextjs/sui-template/package.json +3 -3
- package/template/101/sui-template/contracts/counter/sources/codegen/dapp/schema.move +0 -112
- package/template/101/sui-template/contracts/counter/sources/codegen/dapp/system.move +0 -93
- package/template/101/sui-template/contracts/counter/sources/codegen/schema.move +0 -62
- package/template/nextjs/sui-template/contracts/counter/sources/codegen/dapp/schema.move +0 -112
- package/template/nextjs/sui-template/contracts/counter/sources/codegen/dapp/system.move +0 -93
- package/template/nextjs/sui-template/contracts/counter/sources/codegen/schema.move +0 -62
package/package.json
CHANGED
|
@@ -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
|
-
|
|
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):
|
|
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
|
-
|
|
19
|
-
(scenario, dapp)
|
|
16
|
+
scenario
|
|
20
17
|
}
|
|
21
18
|
}
|
package/template/101/sui-template/contracts/counter/sources/codegen/{dapp → core}/metadata.move
RENAMED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
public struct DappMetadata has drop, copy, store {
|
|
12
12
|
name: String,
|
|
13
13
|
description: String,
|
|
14
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
|
64
|
-
self.
|
|
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
|
|
88
|
-
self.
|
|
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
|
|
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.
|
|
39
|
-
"@0xobelisk/sui-client": "^1.1.
|
|
40
|
-
"@0xobelisk/sui-common": "^1.1.
|
|
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.
|
|
19
|
-
"@0xobelisk/sui-client": "^1.1.
|
|
20
|
-
"@0xobelisk/sui-common": "^1.1.
|
|
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
|
-
|
|
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):
|
|
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
|
-
|
|
19
|
-
(scenario, dapp)
|
|
16
|
+
scenario
|
|
20
17
|
}
|
|
21
18
|
}
|
package/template/nextjs/sui-template/contracts/counter/sources/codegen/{dapp → core}/metadata.move
RENAMED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
public struct DappMetadata has drop, copy, store {
|
|
12
12
|
name: String,
|
|
13
13
|
description: String,
|
|
14
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
|
64
|
-
self.
|
|
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
|
|
88
|
-
self.
|
|
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
|
|
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.
|
|
40
|
-
"@0xobelisk/sui-client": "^1.1.
|
|
41
|
-
"@0xobelisk/sui-common": "^1.1.
|
|
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
|
-
}
|