wowok 1.0.3 → 1.0.5
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/LICENSE +201 -0
- package/README.md +17 -0
- package/dist/demand.js +91 -30
- package/dist/guard.js +206 -80
- package/dist/machine.js +130 -65
- package/dist/passport.js +14 -5
- package/dist/permission.js +117 -49
- package/dist/progress.js +74 -30
- package/dist/protocol.js +85 -53
- package/dist/repository.js +154 -50
- package/dist/reward.js +134 -28
- package/dist/service.js +457 -161
- package/dist/util.js +25 -1
- package/dist/vote.js +134 -56
- package/package.json +11 -7
- package/src/demand.ts +96 -52
- package/src/graphql.ts +103 -0
- package/src/guard.ts +268 -114
- package/src/index.ts +12 -0
- package/src/machine.ts +137 -86
- package/src/passport.ts +67 -30
- package/src/permission.ts +115 -59
- package/src/progress.ts +149 -63
- package/src/protocol.ts +94 -40
- package/src/repository.ts +152 -79
- package/src/reward.ts +134 -45
- package/src/service.ts +437 -209
- package/src/util.ts +28 -1
- package/src/vote.ts +141 -74
package/src/machine.ts
CHANGED
|
@@ -1,29 +1,27 @@
|
|
|
1
1
|
import { TransactionBlock, Inputs, type TransactionResult } from '@mysten/sui.js/transactions';
|
|
2
2
|
import { BCS } from '@mysten/bcs';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
3
|
+
import { PROTOCOL, FnCallType, PermissionObject, RepositoryObject, IsValidEndpoint, OptionNone, IsValidDesription, PassportObject,
|
|
4
|
+
TXB_OBJECT, MachineObject, MachineAddress, IsValidArray, IsValidAddress, IsValidName, IsValidName_AllowEmpty, GuardObject,
|
|
5
|
+
IsValidInt, IsValidUint, IsValidObjects} from './protocol';
|
|
6
|
+
import { BCS_CONVERT, array_unique } from './util'
|
|
7
|
+
import { IsValidPermissionIndex, PermissionIndexType } from './permission';
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
export type
|
|
11
|
-
export type MachineObject = TransactionResult;
|
|
12
|
-
export type MachineNodeObject = TransactionResult;
|
|
13
|
-
|
|
10
|
+
export type MachineNodeObject = TransactionResult | String;
|
|
14
11
|
export const INITIAL_NODE_NAME = '';
|
|
12
|
+
export const namedOperator_ORDER_PAYER = 'order payer';
|
|
15
13
|
|
|
16
14
|
export type Machine_Forward = {
|
|
17
15
|
name: string; // foward name
|
|
18
|
-
namedOperator?: string;
|
|
19
|
-
permission?:
|
|
16
|
+
namedOperator?: string; // dynamic operator
|
|
17
|
+
permission?: PermissionIndexType; // permission-index or named-operator MUST one defined.
|
|
20
18
|
weight?: number;
|
|
21
|
-
|
|
19
|
+
guard?: GuardObject;
|
|
22
20
|
}
|
|
23
21
|
export type Machine_Node_Pair = {
|
|
24
22
|
prior_node: string;
|
|
25
|
-
threshold: number;
|
|
26
23
|
forwards: Machine_Forward[];
|
|
24
|
+
threshold?: number;
|
|
27
25
|
}
|
|
28
26
|
export type Machine_Node = {
|
|
29
27
|
name: string;
|
|
@@ -31,227 +29,280 @@ export type Machine_Node = {
|
|
|
31
29
|
pairs: Machine_Node_Pair[];
|
|
32
30
|
}
|
|
33
31
|
|
|
34
|
-
//
|
|
35
|
-
export function
|
|
32
|
+
// create new nodes for machine
|
|
33
|
+
export function machine_add_node(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject,
|
|
34
|
+
nodes:Machine_Node[], passport?:PassportObject) : boolean {
|
|
35
|
+
if (!IsValidObjects([machine, permission])) return false;
|
|
36
|
+
let bValid = true;
|
|
37
|
+
nodes.forEach((node) => {
|
|
38
|
+
if (!IsValidDesription(node.description) || !IsValidName(node.name)) { bValid = false; }
|
|
39
|
+
|
|
40
|
+
node.pairs.forEach((p) => {
|
|
41
|
+
if (!IsValidName_AllowEmpty(p.prior_node)) { bValid = false; }
|
|
42
|
+
if (p?.threshold && !IsValidInt(p.threshold)) { bValid = false; }
|
|
43
|
+
p.forwards.forEach((f) => {
|
|
44
|
+
if (!IsValidName(f.name)) { bValid = false }
|
|
45
|
+
if (f?.namedOperator && !IsValidName_AllowEmpty(f?.namedOperator)) { bValid = false }
|
|
46
|
+
if (f?.permission && !IsValidPermissionIndex(f?.permission)) { bValid = false }
|
|
47
|
+
if (!f?.permission && !f?.namedOperator) { bValid = false; }
|
|
48
|
+
if (f?.weight && !IsValidUint(f.weight)) { bValid = false; }
|
|
49
|
+
})
|
|
50
|
+
})
|
|
51
|
+
})
|
|
52
|
+
if (!bValid) return false
|
|
36
53
|
|
|
37
|
-
// 创建新的node加入到machine
|
|
38
|
-
export function machine_add_node(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject, nodes:Machine_Node[], passport?:PassportObject) {
|
|
39
54
|
let new_nodes: MachineNodeObject[] = [];
|
|
40
55
|
nodes.forEach((node) => {
|
|
41
56
|
let n = txb.moveCall({
|
|
42
57
|
target:PROTOCOL.NodeFn('new') as FnCallType,
|
|
43
|
-
arguments:[txb.pure(
|
|
58
|
+
arguments:[txb.pure(node.name), txb.pure(node.description)]
|
|
44
59
|
});
|
|
45
60
|
node.pairs.forEach((pair) => {
|
|
61
|
+
let threshold = pair?.threshold ? txb.pure(BCS_CONVERT.ser_option_u64(pair.threshold)) : OptionNone(txb);
|
|
62
|
+
|
|
46
63
|
pair.forwards.forEach((forward) => {
|
|
47
|
-
|
|
48
|
-
let
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
let per = txb.pure([], BCS.U8);
|
|
54
|
-
if (forward?.permission) {
|
|
55
|
-
per = txb.pure(BCS_CONVERT.ser_option_u64(forward.permission as number));
|
|
56
|
-
};
|
|
57
|
-
let namedOperator = txb.pure('');
|
|
58
|
-
if (forward?.namedOperator) {
|
|
59
|
-
namedOperator = txb.pure(forward.namedOperator)
|
|
60
|
-
}; let f;
|
|
64
|
+
let weight = forward?.weight ? forward.weight : 1;
|
|
65
|
+
let perm = forward?.permission ? txb.pure(BCS_CONVERT.ser_option_u64(forward.permission)) : OptionNone(txb);
|
|
66
|
+
let namedOperator = forward?.namedOperator ? txb.pure(forward.namedOperator) : txb.pure('');
|
|
67
|
+
let f;
|
|
61
68
|
|
|
62
|
-
if (forward?.
|
|
69
|
+
if (forward?.guard) {
|
|
63
70
|
f = txb.moveCall({
|
|
64
71
|
target:PROTOCOL.NodeFn('forward') as FnCallType,
|
|
65
|
-
arguments:[namedOperator, weight, txb.object(forward.
|
|
72
|
+
arguments:[namedOperator, txb.pure(weight), txb.object(TXB_OBJECT(txb, forward.guard)), perm]
|
|
66
73
|
});
|
|
67
74
|
} else {
|
|
68
75
|
f = txb.moveCall({
|
|
69
76
|
target:PROTOCOL.NodeFn('forward2') as FnCallType,
|
|
70
|
-
arguments:[namedOperator, weight,
|
|
77
|
+
arguments:[namedOperator, txb.pure(weight), perm]
|
|
71
78
|
});
|
|
72
79
|
}
|
|
73
80
|
txb.moveCall({ // add forward
|
|
74
81
|
target:PROTOCOL.NodeFn('forward_add') as FnCallType,
|
|
75
|
-
arguments:[n, txb.pure(pair.prior_node), txb.pure(
|
|
76
|
-
txb.pure(BCS_CONVERT.ser_option_u64(pair.threshold)), f]
|
|
82
|
+
arguments:[n, txb.pure(pair.prior_node), txb.pure(forward.name), threshold, f]
|
|
77
83
|
});
|
|
78
84
|
});
|
|
79
85
|
});
|
|
80
86
|
new_nodes.push(n);
|
|
81
|
-
}); machine_add_node2(txb, machine, permission, new_nodes, passport)
|
|
87
|
+
}); return machine_add_node2(txb, machine, permission, new_nodes, passport)
|
|
82
88
|
}
|
|
83
|
-
//
|
|
84
|
-
export function machine_add_node2(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject,
|
|
89
|
+
// move MachineNodeObject to the machine from signer-owned MachineNode object
|
|
90
|
+
export function machine_add_node2(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject,
|
|
91
|
+
nodes:MachineNodeObject[], passport?:PassportObject) : boolean {
|
|
92
|
+
if (!IsValidObjects([machine, permission])) return false;
|
|
93
|
+
if (!nodes) return false;
|
|
94
|
+
|
|
95
|
+
let n: TransactionResult[] = [];
|
|
96
|
+
array_unique(nodes).forEach((v) => {
|
|
97
|
+
n.push(TXB_OBJECT(txb, v));
|
|
98
|
+
})
|
|
99
|
+
|
|
85
100
|
if (passport) {
|
|
86
101
|
txb.moveCall({ // add node
|
|
87
102
|
target:PROTOCOL.MachineFn('node_add_with_passport') as FnCallType,
|
|
88
|
-
arguments:[passport, machine, txb.makeMoveVec({objects:
|
|
103
|
+
arguments:[passport, TXB_OBJECT(txb, machine), txb.makeMoveVec({objects:n}), TXB_OBJECT(txb, permission)]
|
|
89
104
|
});
|
|
90
105
|
} else {
|
|
91
106
|
txb.moveCall({ // add node
|
|
92
107
|
target:PROTOCOL.MachineFn('node_add') as FnCallType,
|
|
93
|
-
arguments:[machine, txb.makeMoveVec({objects:
|
|
108
|
+
arguments:[TXB_OBJECT(txb, machine), txb.makeMoveVec({objects:n}), TXB_OBJECT(txb, permission)]
|
|
94
109
|
});
|
|
95
110
|
}
|
|
111
|
+
return true
|
|
96
112
|
}
|
|
97
|
-
//
|
|
98
|
-
export function machine_remove_node(txb:TransactionBlock, machine:MachineObject, permission:
|
|
113
|
+
// move MachineNodeObject from machine to signer-owned MachineNode object
|
|
114
|
+
export function machine_remove_node(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject,
|
|
115
|
+
nodes_name:string[], bTransferMyself:boolean = false, passport?:PassportObject) : boolean {
|
|
116
|
+
if (!IsValidObjects([machine, permission])) return false;
|
|
117
|
+
if (!nodes_name || !IsValidArray(nodes_name, IsValidName)) return false;
|
|
118
|
+
|
|
99
119
|
if (passport) {
|
|
100
120
|
txb.moveCall({
|
|
101
121
|
target:PROTOCOL.MachineFn('node_remove_with_passport') as FnCallType,
|
|
102
|
-
arguments:[passport, machine, txb.pure(BCS_CONVERT.ser_vector_string(nodes_name)),
|
|
122
|
+
arguments:[passport, TXB_OBJECT(txb, machine), txb.pure(BCS_CONVERT.ser_vector_string(nodes_name)),
|
|
123
|
+
txb.pure(bTransferMyself, BCS.BOOL), TXB_OBJECT(txb, permission)],
|
|
103
124
|
});
|
|
104
125
|
} else {
|
|
105
126
|
txb.moveCall({
|
|
106
127
|
target:PROTOCOL.MachineFn('node_remove') as FnCallType,
|
|
107
|
-
arguments:[machine, txb.pure(BCS_CONVERT.ser_vector_string(nodes_name)), permission],
|
|
128
|
+
arguments:[TXB_OBJECT(txb, machine), txb.pure(BCS_CONVERT.ser_vector_string(nodes_name)), txb.pure(bTransferMyself, BCS.BOOL), TXB_OBJECT(txb, permission)],
|
|
108
129
|
});
|
|
109
130
|
}
|
|
131
|
+
return true;
|
|
110
132
|
}
|
|
111
|
-
export function machine(txb:TransactionBlock, permission:PermissionObject, description:string,
|
|
112
|
-
|
|
113
|
-
|
|
133
|
+
export function machine(txb:TransactionBlock, permission:PermissionObject, description:string,
|
|
134
|
+
endpoint?:string, passport?:PassportObject) : MachineObject | boolean {
|
|
135
|
+
if (!IsValidObjects([permission])) return false;
|
|
136
|
+
if (!IsValidDesription(description)) return false;
|
|
137
|
+
if (endpoint && !IsValidEndpoint(endpoint)) return false;
|
|
138
|
+
let ep = endpoint? txb.pure(BCS_CONVERT.ser_option_string(endpoint)) : OptionNone(txb);
|
|
114
139
|
|
|
115
140
|
if (passport) {
|
|
116
141
|
return txb.moveCall({
|
|
117
142
|
target:PROTOCOL.MachineFn('new_with_passport') as FnCallType,
|
|
118
|
-
arguments:[passport, txb.pure(
|
|
143
|
+
arguments:[passport, txb.pure(description), ep, TXB_OBJECT(txb, permission)],
|
|
119
144
|
})
|
|
120
145
|
} else {
|
|
121
|
-
//console.log(endpoint)
|
|
122
146
|
return txb.moveCall({
|
|
123
147
|
target:PROTOCOL.MachineFn('new') as FnCallType,
|
|
124
|
-
arguments:[txb.pure(
|
|
148
|
+
arguments:[txb.pure(description), ep, TXB_OBJECT(txb, permission)],
|
|
125
149
|
})
|
|
126
150
|
}
|
|
127
151
|
}
|
|
128
|
-
export function destroy(txb:TransactionBlock, machine:MachineObject) {
|
|
129
|
-
return
|
|
152
|
+
export function destroy(txb:TransactionBlock, machine:MachineObject) : boolean{
|
|
153
|
+
if (!IsValidObjects([machine])) return false;
|
|
154
|
+
txb.moveCall({
|
|
130
155
|
target:PROTOCOL.MachineFn('destroy') as FnCallType,
|
|
131
|
-
arguments: [machine],
|
|
132
|
-
})
|
|
156
|
+
arguments: [TXB_OBJECT(txb, machine)],
|
|
157
|
+
})
|
|
158
|
+
return true
|
|
133
159
|
}
|
|
134
|
-
export function launch(txb:TransactionBlock, machine:MachineObject) : MachineAddress {
|
|
160
|
+
export function launch(txb:TransactionBlock, machine:MachineObject) : MachineAddress | boolean {
|
|
161
|
+
if (!IsValidObjects([machine])) return false;
|
|
135
162
|
return txb.moveCall({
|
|
136
163
|
target:PROTOCOL.MachineFn('create') as FnCallType,
|
|
137
|
-
arguments:[machine],
|
|
164
|
+
arguments:[TXB_OBJECT(txb, machine)],
|
|
138
165
|
})
|
|
139
166
|
}
|
|
140
|
-
export function machine_set_description(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject,
|
|
167
|
+
export function machine_set_description(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject,
|
|
168
|
+
description:string, passport?:PassportObject) : boolean {
|
|
169
|
+
if (!IsValidObjects([machine, permission])) return false;
|
|
170
|
+
if (!IsValidDesription(description)) return false;
|
|
171
|
+
|
|
141
172
|
if (passport) {
|
|
142
173
|
txb.moveCall({
|
|
143
174
|
target:PROTOCOL.MachineFn('description_set_with_passport') as FnCallType,
|
|
144
|
-
arguments:[passport, machine, txb.pure(
|
|
175
|
+
arguments:[passport, TXB_OBJECT(txb, machine), txb.pure(description), TXB_OBJECT(txb, permission)],
|
|
145
176
|
})
|
|
146
177
|
} else {
|
|
147
178
|
txb.moveCall({
|
|
148
179
|
target:PROTOCOL.MachineFn('description_set') as FnCallType,
|
|
149
|
-
arguments:[machine, txb.pure(
|
|
180
|
+
arguments:[TXB_OBJECT(txb, machine), txb.pure(description), TXB_OBJECT(txb, permission)],
|
|
150
181
|
})
|
|
151
182
|
}
|
|
183
|
+
return true
|
|
152
184
|
}
|
|
153
|
-
export function machine_add_repository(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject,
|
|
185
|
+
export function machine_add_repository(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject,
|
|
186
|
+
repository:RepositoryObject, passport?:PassportObject) : boolean {
|
|
187
|
+
if (!IsValidObjects([machine, permission, repository])) return false;
|
|
154
188
|
if (passport) {
|
|
155
189
|
txb.moveCall({
|
|
156
190
|
target:PROTOCOL.MachineFn('repository_add_with_passport') as FnCallType,
|
|
157
|
-
arguments:[passport, machine, repository, permission],
|
|
191
|
+
arguments:[passport, TXB_OBJECT(txb, machine), TXB_OBJECT(txb, repository), TXB_OBJECT(txb, permission)],
|
|
158
192
|
})
|
|
159
193
|
} else {
|
|
160
194
|
txb.moveCall({
|
|
161
195
|
target:PROTOCOL.MachineFn('repository_add') as FnCallType,
|
|
162
|
-
arguments:[machine, repository, permission],
|
|
196
|
+
arguments:[TXB_OBJECT(txb, machine), TXB_OBJECT(txb, repository), TXB_OBJECT(txb, permission)],
|
|
163
197
|
})
|
|
164
198
|
}
|
|
199
|
+
return true
|
|
165
200
|
}
|
|
166
201
|
|
|
167
|
-
export function machine_remove_repository(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject,
|
|
202
|
+
export function machine_remove_repository(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject,
|
|
203
|
+
repositories:string[], removeall?:boolean, passport?:PassportObject) : boolean {
|
|
204
|
+
if (!IsValidObjects([machine, permission])) return false;
|
|
205
|
+
if (!removeall && !repositories) return false;
|
|
206
|
+
if (!IsValidArray(repositories, IsValidAddress)) return false;
|
|
207
|
+
|
|
168
208
|
if (passport) {
|
|
169
209
|
if (removeall) {
|
|
170
210
|
txb.moveCall({
|
|
171
211
|
target:PROTOCOL.MachineFn('repository_remove_all_with_passport') as FnCallType,
|
|
172
|
-
arguments:[passport, machine,
|
|
212
|
+
arguments:[passport, TXB_OBJECT(txb, machine), TXB_OBJECT(txb, machine)],
|
|
173
213
|
})
|
|
174
214
|
} else {
|
|
175
215
|
txb.moveCall({
|
|
176
216
|
target:PROTOCOL.MachineFn('repository_remove_with_passport') as FnCallType,
|
|
177
|
-
arguments:[passport, machine, txb.pure(repositories, 'vector<address>'), permission],
|
|
217
|
+
arguments:[passport, TXB_OBJECT(txb, machine), txb.pure(repositories, 'vector<address>'), TXB_OBJECT(txb, permission)],
|
|
178
218
|
})
|
|
179
219
|
}
|
|
180
220
|
} else {
|
|
181
221
|
if (removeall) {
|
|
182
222
|
txb.moveCall({
|
|
183
223
|
target:PROTOCOL.MachineFn('repository_remove_all') as FnCallType,
|
|
184
|
-
arguments:[machine, permission],
|
|
224
|
+
arguments:[TXB_OBJECT(txb, machine), TXB_OBJECT(txb, permission)],
|
|
185
225
|
})
|
|
186
226
|
} else {
|
|
187
227
|
txb.moveCall({
|
|
188
228
|
target:PROTOCOL.MachineFn('repository_remove') as FnCallType,
|
|
189
|
-
arguments:[machine, txb.pure(repositories, 'vector<address>'), permission],
|
|
229
|
+
arguments:[TXB_OBJECT(txb, machine), txb.pure(repositories, 'vector<address>'), TXB_OBJECT(txb, permission)],
|
|
190
230
|
})
|
|
191
231
|
}
|
|
192
|
-
}
|
|
232
|
+
}
|
|
233
|
+
return true
|
|
193
234
|
}
|
|
194
235
|
|
|
195
|
-
export function machine_clone(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject, passport?:PassportObject) : MachineObject {
|
|
236
|
+
export function machine_clone(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject, passport?:PassportObject) : MachineObject | boolean {
|
|
237
|
+
if (!IsValidObjects([machine, permission])) return false;
|
|
196
238
|
if (passport) {
|
|
197
239
|
return txb.moveCall({
|
|
198
240
|
target:PROTOCOL.MachineFn('clone_with_passport') as FnCallType,
|
|
199
|
-
arguments:[passport, machine, permission],
|
|
241
|
+
arguments:[passport, TXB_OBJECT(txb, machine), TXB_OBJECT(txb, permission)],
|
|
200
242
|
})
|
|
201
243
|
} else {
|
|
202
244
|
return txb.moveCall({
|
|
203
245
|
target:PROTOCOL.MachineFn('clone') as FnCallType,
|
|
204
|
-
arguments:[machine, permission],
|
|
246
|
+
arguments:[TXB_OBJECT(txb, machine), TXB_OBJECT(txb, permission)],
|
|
205
247
|
})
|
|
206
248
|
}
|
|
207
249
|
}
|
|
208
|
-
export function machine_set_endpoint(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject,
|
|
209
|
-
|
|
210
|
-
|
|
250
|
+
export function machine_set_endpoint(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject,
|
|
251
|
+
endpoint?:string, passport?:PassportObject) : boolean {
|
|
252
|
+
if (!IsValidObjects([machine, permission])) return false;
|
|
253
|
+
if (endpoint && !IsValidEndpoint(endpoint)) return false;
|
|
254
|
+
let ep = endpoint? txb.pure(BCS_CONVERT.ser_option_string(endpoint)) : OptionNone(txb);
|
|
211
255
|
|
|
212
256
|
if (passport) {
|
|
213
257
|
txb.moveCall({
|
|
214
258
|
target:PROTOCOL.MachineFn('endpoint_set_with_passport') as FnCallType,
|
|
215
|
-
arguments:[passport, machine,
|
|
259
|
+
arguments:[passport, TXB_OBJECT(txb, machine), ep, TXB_OBJECT(txb, permission)],
|
|
216
260
|
})
|
|
217
261
|
} else {
|
|
218
262
|
txb.moveCall({
|
|
219
263
|
target:PROTOCOL.MachineFn('endpoint_set') as FnCallType,
|
|
220
|
-
arguments:[machine,
|
|
264
|
+
arguments:[TXB_OBJECT(txb, machine), ep, TXB_OBJECT(txb, permission)],
|
|
221
265
|
})
|
|
222
266
|
}
|
|
267
|
+
return true
|
|
223
268
|
}
|
|
224
|
-
export function machine_pause(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject, bPaused:boolean, passport?:PassportObject) {
|
|
269
|
+
export function machine_pause(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject, bPaused:boolean, passport?:PassportObject) : boolean {
|
|
270
|
+
if (!IsValidObjects([machine, permission])) return false;
|
|
225
271
|
if (passport) {
|
|
226
272
|
txb.moveCall({
|
|
227
273
|
target:PROTOCOL.MachineFn('pause_with_passport') as FnCallType,
|
|
228
|
-
arguments:[passport, machine, txb.pure(bPaused), permission],
|
|
274
|
+
arguments:[passport, TXB_OBJECT(txb, machine), txb.pure(bPaused), TXB_OBJECT(txb, permission)],
|
|
229
275
|
})
|
|
230
276
|
} else {
|
|
231
277
|
txb.moveCall({
|
|
232
278
|
target:PROTOCOL.MachineFn('pause') as FnCallType,
|
|
233
|
-
arguments:[machine, txb.pure(bPaused), permission],
|
|
279
|
+
arguments:[TXB_OBJECT(txb, machine), txb.pure(bPaused), TXB_OBJECT(txb, permission)],
|
|
234
280
|
})
|
|
235
281
|
}
|
|
282
|
+
return true
|
|
236
283
|
}
|
|
237
|
-
export function machine_publish(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject, passport?:PassportObject) {
|
|
284
|
+
export function machine_publish(txb:TransactionBlock, machine:MachineObject, permission:PermissionObject, passport?:PassportObject) : boolean {
|
|
285
|
+
if (!IsValidObjects([machine, permission])) return false;
|
|
238
286
|
if (passport) {
|
|
239
287
|
txb.moveCall({
|
|
240
288
|
target:PROTOCOL.MachineFn('publish_with_passport') as FnCallType,
|
|
241
|
-
arguments:[passport, machine, permission],
|
|
289
|
+
arguments:[passport, TXB_OBJECT(txb, machine), TXB_OBJECT(txb, permission)],
|
|
242
290
|
})
|
|
243
291
|
} else {
|
|
244
292
|
txb.moveCall({
|
|
245
293
|
target:PROTOCOL.MachineFn('publish') as FnCallType,
|
|
246
|
-
arguments:[machine, permission],
|
|
294
|
+
arguments:[TXB_OBJECT(txb, machine), TXB_OBJECT(txb, permission)],
|
|
247
295
|
})
|
|
248
296
|
}
|
|
297
|
+
return true
|
|
249
298
|
}
|
|
250
299
|
|
|
251
|
-
export function change_permission(txb:TransactionBlock, machine:MachineObject, old_permission:PermissionObject, new_permission:PermissionObject) {
|
|
300
|
+
export function change_permission(txb:TransactionBlock, machine:MachineObject, old_permission:PermissionObject, new_permission:PermissionObject) : boolean {
|
|
301
|
+
if (!IsValidObjects([machine, old_permission, new_permission])) return false;
|
|
252
302
|
txb.moveCall({
|
|
253
303
|
target:PROTOCOL.MachineFn('permission_set') as FnCallType,
|
|
254
|
-
arguments: [machine, old_permission, new_permission],
|
|
304
|
+
arguments: [TXB_OBJECT(txb, machine), TXB_OBJECT(txb, old_permission), TXB_OBJECT(txb, new_permission)],
|
|
255
305
|
typeArguments:[]
|
|
256
306
|
})
|
|
307
|
+
return true
|
|
257
308
|
}
|
package/src/passport.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { SuiObjectResponse, SuiObjectDataOptions } from '@mysten/sui.js/client';
|
|
2
2
|
import { TransactionBlock, TransactionResult, type TransactionObjectInput, Inputs } from '@mysten/sui.js/transactions';
|
|
3
|
-
import { PROTOCOL, FnCallType, CLOCK_OBJECT, Query_Param, OBJECTS_TYPE, OBJECTS_TYPE_PREFIX} from './protocol';
|
|
3
|
+
import { PROTOCOL, FnCallType, CLOCK_OBJECT, Query_Param, OBJECTS_TYPE, OBJECTS_TYPE_PREFIX, PassportObject, GuardObject, TXB_OBJECT} from './protocol';
|
|
4
4
|
import { parse_object_type, array_unique } from './util';
|
|
5
|
-
import {
|
|
5
|
+
import { rpc_sense_objects_fn } from './guard';
|
|
6
6
|
|
|
7
|
-
export const MAX_GUARD_COUNT =
|
|
7
|
+
export const MAX_GUARD_COUNT = 8;
|
|
8
8
|
|
|
9
9
|
// passport verify for some guards, MUST be in ONE pxb:
|
|
10
10
|
// 0. construct Guard_Query_Objects(passport_quries) from queries for guards of objects
|
|
@@ -15,44 +15,60 @@ export const MAX_GUARD_COUNT = 4;
|
|
|
15
15
|
// 5. ops using passport(guard set on object)
|
|
16
16
|
// 6. destroy passport
|
|
17
17
|
|
|
18
|
-
export type PassportObject = TransactionResult;
|
|
19
18
|
|
|
20
|
-
export const
|
|
19
|
+
export const passport_queries = async (guards:string[]) : Promise<Guard_Query_Object[]> => {
|
|
21
20
|
let sense_objects = guards.map((value) => {
|
|
22
|
-
return {objectid:value, callback:
|
|
21
|
+
return {objectid:value, callback:rpc_sense_objects_fn, data:[]} as Query_Param
|
|
23
22
|
});
|
|
24
23
|
await PROTOCOL.Query(sense_objects); // objects need quering in guards
|
|
25
24
|
let sense_objects_result:string[] = [];
|
|
26
|
-
sense_objects.forEach((value) => {
|
|
25
|
+
sense_objects.forEach((value) => { // DONT CHANGE objects sequence
|
|
27
26
|
sense_objects_result = sense_objects_result.concat(value.data);
|
|
28
27
|
});
|
|
29
|
-
sense_objects_result = array_unique(sense_objects_result);
|
|
30
|
-
console.log(sense_objects_result);
|
|
28
|
+
sense_objects_result = array_unique(sense_objects_result); // objects in guards
|
|
29
|
+
// console.log(sense_objects_result);
|
|
31
30
|
|
|
32
31
|
let queries = sense_objects_result.map((value) => {
|
|
33
|
-
return {objectid:value, callback:
|
|
32
|
+
return {objectid:value, callback:rpc_query_cmd_fn, data:[]} as Query_Param;
|
|
34
33
|
})
|
|
35
34
|
await PROTOCOL.Query(queries, {'showType':true}); // queries for passport verifing
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
let res : Guard_Query_Object[] = [];
|
|
36
|
+
sense_objects.forEach((guard) => { // DONT CHANGE objects sequence for passport verifying
|
|
37
|
+
res = res.concat(guard.data.map((object:string) => {
|
|
38
|
+
let data = queries.filter((v) => {
|
|
39
|
+
return v.objectid == object
|
|
40
|
+
});
|
|
41
|
+
if (!data) {
|
|
42
|
+
console.error('error find data')
|
|
43
|
+
console.log(queries)
|
|
44
|
+
console.log(object)
|
|
45
|
+
return
|
|
46
|
+
}
|
|
47
|
+
return data[0].data
|
|
48
|
+
}))
|
|
38
49
|
})
|
|
50
|
+
return res;
|
|
39
51
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
52
|
+
|
|
53
|
+
// return passport object used
|
|
54
|
+
export function verify(txb:TransactionBlock, guards:string[], passport_queries:Guard_Query_Object[]) : PassportObject | boolean {
|
|
55
|
+
if (!guards || passport_queries.length == 0 || passport_queries.length > MAX_GUARD_COUNT) {
|
|
56
|
+
return false;
|
|
44
57
|
}
|
|
45
|
-
|
|
58
|
+
console.log(guards)
|
|
59
|
+
console.log(passport_queries)
|
|
60
|
+
|
|
46
61
|
var passport = txb.moveCall({
|
|
47
62
|
target: PROTOCOL.PassportFn('new') as FnCallType,
|
|
48
|
-
arguments: [ txb
|
|
63
|
+
arguments: [ TXB_OBJECT(txb, guards[0]), txb.object(CLOCK_OBJECT)]
|
|
49
64
|
});
|
|
50
65
|
|
|
51
66
|
// add others guards, if any
|
|
52
|
-
for (let i = 1; i <
|
|
67
|
+
for (let i = 1; i < guards.length; i++) {
|
|
68
|
+
console.log('dfdfdf')
|
|
53
69
|
txb.moveCall({
|
|
54
70
|
target:PROTOCOL.PassportFn('guard_add') as FnCallType,
|
|
55
|
-
arguments:[passport, txb
|
|
71
|
+
arguments:[passport, TXB_OBJECT(txb, guards[i])]
|
|
56
72
|
});
|
|
57
73
|
}
|
|
58
74
|
|
|
@@ -76,28 +92,29 @@ export function verify(txb:TransactionBlock, passport_queries:Guard_Query_Object
|
|
|
76
92
|
return passport;
|
|
77
93
|
}
|
|
78
94
|
|
|
79
|
-
export function destroy(txb:TransactionBlock, passport:PassportObject) {
|
|
95
|
+
export function destroy(txb:TransactionBlock, passport:PassportObject) : boolean {
|
|
80
96
|
txb.moveCall({
|
|
81
97
|
target: PROTOCOL.PassportFn('destroy') as FnCallType,
|
|
82
98
|
arguments: [ passport ]
|
|
83
99
|
});
|
|
100
|
+
return true
|
|
84
101
|
}
|
|
85
102
|
|
|
86
103
|
export type Guard_Query_Object = {
|
|
87
|
-
target: FnCallType,
|
|
88
|
-
object: TransactionObjectInput,
|
|
89
|
-
types: string[],
|
|
90
|
-
id: string,
|
|
104
|
+
target: FnCallType, // object fnCall
|
|
105
|
+
object: TransactionObjectInput, // object
|
|
106
|
+
types: string[], // object type
|
|
107
|
+
id: string, // object id
|
|
91
108
|
}
|
|
92
109
|
|
|
93
110
|
// construct Guard_Query_Object of wowok objects for passport verify
|
|
94
|
-
export const
|
|
111
|
+
export const rpc_query_cmd_fn = (response:SuiObjectResponse, param:Query_Param, option:SuiObjectDataOptions) => {
|
|
95
112
|
if (!response.error && response.data?.objectId == param.objectid && response.data?.type) {
|
|
96
|
-
for (let k = 0; k < OBJECTS_TYPE.length; k++) {
|
|
97
|
-
if (response?.data?.type.includes(OBJECTS_TYPE[k]) ) { // type: pack::m::Object<...>
|
|
98
|
-
param.data = { target:OBJECTS_TYPE_PREFIX[k] + 'guard_query' as FnCallType,
|
|
113
|
+
for (let k = 0; k < OBJECTS_TYPE().length; k++) {
|
|
114
|
+
if (response?.data?.type.includes(OBJECTS_TYPE()[k]) ) { // type: pack::m::Object<...>
|
|
115
|
+
param.data = { target:OBJECTS_TYPE_PREFIX()[k] + 'guard_query' as FnCallType,
|
|
99
116
|
object:Inputs.SharedObjectRef({
|
|
100
|
-
objectId:
|
|
117
|
+
objectId: response.data.objectId,
|
|
101
118
|
mutable: false,
|
|
102
119
|
initialSharedVersion: response.data!.version,
|
|
103
120
|
}) as TransactionObjectInput,
|
|
@@ -107,4 +124,24 @@ export const query_cmd_fn = (response:SuiObjectResponse, param:Query_Param, opti
|
|
|
107
124
|
}
|
|
108
125
|
}
|
|
109
126
|
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export const graphql_query_objects = (nodes:any) : Guard_Query_Object[] => {
|
|
130
|
+
let ret:Guard_Query_Object[] = [];
|
|
131
|
+
nodes.forEach((node:any) => {
|
|
132
|
+
for (let k = 0; k < OBJECTS_TYPE().length; k++) {
|
|
133
|
+
if (node?.asMoveObject?.contents?.type?.repr?.includes(OBJECTS_TYPE()[k]) ) { // type: pack::m::Object<...>
|
|
134
|
+
ret.push({ target:OBJECTS_TYPE_PREFIX()[k] + 'guard_query' as FnCallType,
|
|
135
|
+
object:Inputs.SharedObjectRef({
|
|
136
|
+
objectId: node.address,
|
|
137
|
+
mutable: false,
|
|
138
|
+
initialSharedVersion: node.version,
|
|
139
|
+
}) as TransactionObjectInput,
|
|
140
|
+
types:parse_object_type(node.asMoveObject.contents.type.repr as string),
|
|
141
|
+
id: node.address,
|
|
142
|
+
} as Guard_Query_Object);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
})
|
|
146
|
+
return ret
|
|
110
147
|
}
|