wowok 1.0.3 → 1.0.4

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/src/protocol.ts CHANGED
@@ -2,25 +2,39 @@ import { SuiClient, SuiObjectResponse, SuiObjectDataOptions, SuiTransactionBlock
2
2
  SuiTransactionBlockResponse, SuiObjectChange } from '@mysten/sui.js/client';
3
3
  import { Ed25519Keypair } from '@mysten/sui.js/keypairs/ed25519';
4
4
  import { BCS, getSuiMoveConfig, toHEX, fromHEX, BcsReader } from '@mysten/bcs';
5
- import { TransactionBlock, Inputs, type TransactionResult } from '@mysten/sui.js/transactions';
5
+ import { TransactionBlock, Inputs, type TransactionResult, type TransactionArgument } from '@mysten/sui.js/transactions';
6
6
  import { capitalize } from './util'
7
7
 
8
- export type GuardObject = TransactionResult;
9
- export type GuardAddress = TransactionResult;
10
-
11
8
  export const MAX_DESCRIPTION_LENGTH = 1024;
12
9
  export const MAX_NAME_LENGTH = 64;
13
10
  export const MAX_ENDPOINT_LENGTH = 1024;
11
+ export const OptionNone = (txb:TransactionBlock) : TransactionArgument => { return txb.pure([], BCS.U8) };
14
12
 
15
- export function description_data(description:string) : string {
16
- return description.substring(0, MAX_DESCRIPTION_LENGTH);
17
- }
18
- export function endpoint_data(endpoint:string) : string {
19
- return endpoint.substring(0, MAX_ENDPOINT_LENGTH);
13
+ export const IsValidDesription = (description:string) : boolean => { return description.length <= MAX_DESCRIPTION_LENGTH }
14
+ export const IsValidName = (name:string) : boolean => { return name.length <= MAX_NAME_LENGTH && name.length != 0 }
15
+ export const IsValidName_AllowEmpty = (name:string) : boolean => { return name.length <= MAX_NAME_LENGTH }
16
+ export const IsValidEndpoint = (endpoint:string) : boolean => { return endpoint.length <= MAX_ENDPOINT_LENGTH }
17
+ export const IsValidAddress = (address:string) : boolean => { return address.length != 0 }
18
+ export const IsValidArgType = (argType: string) : boolean => { return argType.length != 0 }
19
+ export const IsValidUint = (value: number) : boolean => { return Number.isSafeInteger(value) && value != 0 }
20
+ export const IsValidInt = (value: number) : boolean => { return Number.isSafeInteger(value) }
21
+ export const IsValidPercent = (value: number) : boolean => { return Number.isSafeInteger(value) && value > 0 && value <= 100 }
22
+ export const IsValidArray = (arr: any[], validFunc:any) : boolean => {
23
+ let bValid = true;
24
+ arr.forEach((v) => {
25
+ if (!validFunc(v)) {
26
+ bValid = false;
27
+ }
28
+ })
29
+ return bValid;
20
30
  }
21
- export function name_data(name:string) : string {
22
- return name.substring(0, MAX_NAME_LENGTH);
31
+ export const IsValidObjects = (arr:TxbObject[]) : boolean => {
32
+ return IsValidArray(arr, (v:TxbObject)=>{
33
+ if (!v) return false
34
+ return true
35
+ })
23
36
  }
37
+
24
38
  export enum MODULES {
25
39
  machine = 'machine',
26
40
  node = 'node',
@@ -38,7 +52,32 @@ export enum MODULES {
38
52
  wowok = 'wowok',
39
53
  }
40
54
 
41
- export type TxbObject = string | TransactionResult;
55
+ export type PermissionAddress = TransactionResult;
56
+ export type PermissionObject = TransactionResult | string;
57
+ export type RepositoryAddress = TransactionResult;
58
+ export type RepositoryObject = TransactionResult | string;
59
+ export type GuardAddress = TransactionResult;
60
+ export type GuardObject = TransactionResult | string;
61
+ export type MachineAddress = TransactionResult;
62
+ export type MachineObject = TransactionResult | string;
63
+ export type PassportObject = TransactionResult;
64
+ export type DemandAddress = TransactionResult;
65
+ export type DemandObject = TransactionResult | string;
66
+ export type ServiceObject = TransactionResult | string;
67
+ export type ServiceAddress = TransactionResult;
68
+ export type ProgressObject = TransactionResult | string;
69
+ export type ProgressAddress = TransactionResult;
70
+ export type RewardObject = TransactionResult | string;
71
+ export type RewardAddress = TransactionResult;
72
+ export type OrderObject = TransactionResult | string;
73
+ export type OrderAddress = TransactionResult;
74
+ export type DiscountObject = TransactionResult | string;
75
+ export type CoinObject = TransactionResult | string;
76
+ export type VoteObject = TransactionResult | string;
77
+ export type VoteAddress = TransactionResult;
78
+
79
+ export type TxbObject = string | TransactionResult | GuardObject | RepositoryObject | PermissionObject | MachineObject | PassportObject |
80
+ DemandObject | ServiceObject | RewardObject | OrderObject | DiscountObject | VoteObject | DemandObject;
42
81
  export function TXB_OBJECT(txb:TransactionBlock, arg:TxbObject) : TransactionResult {
43
82
  if (typeof arg == 'string') return txb.object(arg) as TransactionResult;
44
83
  return arg;
@@ -53,20 +92,7 @@ export const CLOCK_OBJECT = Inputs.SharedObjectRef({
53
92
  initialSharedVersion: 1,
54
93
  });
55
94
 
56
- export enum Data_Type {
57
- TYPE_DYNAMIC_QUERY = 1,
58
- TYPE_LOGIC_OPERATOR_U128_GREATER = 11,
59
- TYPE_LOGIC_OPERATOR_U128_GREATER_EQUAL = 12,
60
- TYPE_LOGIC_OPERATOR_U128_LESSER = 13,
61
- TYPE_LOGIC_OPERATOR_U128_LESSER_EQUAL = 14,
62
- TYPE_LOGIC_OPERATOR_U128_EQUAL = 15,
63
- TYPE_LOGIC_OPERATOR_EQUAL = 16, // TYPE&DATA(vector<u8>) MUST BE EQUAL
64
- TYPE_LOGIC_OPERATOR_HAS_SUBSTRING = 17, // SUBSTRING
65
- TYPE_LOGIC_ALWAYS_TRUE = 18, // aways true
66
- // TYPE_LOGIC_OPERATOR_VECU8_CONTAINS = 18, // SUB VEC<U8>
67
- TYPE_CONTEXT_SIGNER = 60,
68
- TYPE_CONTEXT_CURRENT_PROGRESS = 61,
69
- TYPE_CONTEXT_CURRENT_CLOCK = 62,
95
+ export enum ValueType {
70
96
  TYPE_STATIC_bool = 100,
71
97
  TYPE_STATIC_address = 101,
72
98
  TYPE_STATIC_u64 = 102,
@@ -83,10 +109,28 @@ export enum Data_Type {
83
109
  TYPE_STATIC_option_u8 = 113,
84
110
  TYPE_STATIC_option_u64 = 114,
85
111
  TYPE_STATIC_option_u128 = 115,
86
- TYPE_STATIC_by_value_specified = 126,
87
- TYPE_STATIC_error = 127,
88
112
  }
89
113
 
114
+ export enum OperatorType {
115
+ TYPE_DYNAMIC_QUERY = 1, // query wowok object
116
+ TYPE_LOGIC_OPERATOR_U128_GREATER = 11,
117
+ TYPE_LOGIC_OPERATOR_U128_GREATER_EQUAL = 12,
118
+ TYPE_LOGIC_OPERATOR_U128_LESSER = 13,
119
+ TYPE_LOGIC_OPERATOR_U128_LESSER_EQUAL = 14,
120
+ TYPE_LOGIC_OPERATOR_U128_EQUAL = 15,
121
+ TYPE_LOGIC_OPERATOR_EQUAL = 16, // TYPE&DATA(vector<u8>) MUST BE EQUAL
122
+ TYPE_LOGIC_OPERATOR_HAS_SUBSTRING = 17, // SUBSTRING
123
+ TYPE_LOGIC_ALWAYS_TRUE = 18, // aways true
124
+ }
125
+
126
+ export enum ContextType {
127
+ TYPE_CONTEXT_SIGNER = 60,
128
+ TYPE_CONTEXT_CURRENT_PROGRESS = 61,
129
+ TYPE_CONTEXT_CURRENT_CLOCK = 62,
130
+ }
131
+
132
+ export type Data_Type = ValueType | OperatorType | ContextType;
133
+
90
134
  export enum ENTRYPOINT {
91
135
  mainnet = 'mainnet',
92
136
  testnet = 'testnet',
@@ -101,18 +145,21 @@ export class Protocol {
101
145
  protected everyone_guard = '';
102
146
 
103
147
  constructor(network:ENTRYPOINT=ENTRYPOINT.localnet, signer="0xe386bb9e01b3528b75f3751ad8a1e418b207ad979fea364087deef5250a73d3f") {
104
- this.network = network;
105
148
  this.signer = signer;
149
+ this.UseNetwork(network);
150
+ }
151
+ UseNetwork(network:ENTRYPOINT=ENTRYPOINT.localnet) {
152
+ this.network = network;
106
153
  switch(network) {
107
154
  case ENTRYPOINT.localnet:
108
- this.package = "0x74df733df2395d0c3a34c6d086d2e1f130603b8aa16962e53781cb0fa9c6958c";
109
- this.everyone_guard = "0xb1a2e3d0cf13c3fcb491f126af8422f7d098147659d8a58a52511cfbb783a6e8";
155
+ this.package = "0xe9721254e97dd074e06c5efe5c57be169b64b39ae48939d89c00bf2f62b19e10";
156
+ this.everyone_guard = "0xb2a3fe7881cb883743c4e962b7e3c7716a1cd47a67adad01dc79795def4f769d";
110
157
  break;
111
158
  case ENTRYPOINT.devnet:
112
159
  break;
113
160
  case ENTRYPOINT.testnet:
114
- this.package = "0x038b0be329e4fd227d846b850aeb1822f9629c62c14d85ffcd22d856c843923f";
115
- this.everyone_guard = "0xdfe42468bfc7d7988fa1707978ef9376178dcefbe938d140a1bfd97abe755998";
161
+ this.package = "0x3943853a7075742d89cea2df2980c32353a88fca0eec2f7d43d097e857e381bb";
162
+ this.everyone_guard = "0x78a41fcc4f566360839613f6b917fb101ae015e56b43143f496f265b6422fddc";
116
163
  break;
117
164
  case ENTRYPOINT.mainnet:
118
165
  break;
package/src/repository.ts CHANGED
@@ -1,132 +1,181 @@
1
1
  import { TransactionBlock, Inputs, type TransactionResult } from '@mysten/sui.js/transactions';
2
2
  import { BCS } from '@mysten/bcs';
3
- import { name_data, FnCallType, Data_Type, PROTOCOL, description_data} from './protocol';
4
- import { PassportObject, verify, } from './passport'
5
- import { PermissionIndex, PermissionObject } from './permission'
3
+ import { FnCallType, PROTOCOL, ValueType, IsValidDesription, IsValidAddress, IsValidArray, OptionNone,
4
+ RepositoryObject, RepositoryAddress, PermissionObject, TXB_OBJECT, PassportObject, IsValidObjects} from './protocol';
5
+ import { IsValidPermissionIndex, PermissionIndexType } from './permission'
6
+ import { BCS_CONVERT, array_unique } from './util';
6
7
 
7
- export const MAX_POLICY_COUNT = 128;
8
+ export const MAX_POLICY_COUNT = 1000;
9
+ export const MAX_KEY_LENGTH = 128;
10
+ export const MAX_VALUE_LENGTH = 204800;
11
+
12
+ export const IsValidKey = (key:string) : boolean => {
13
+ return key.length <= MAX_KEY_LENGTH && key.length != 0;
14
+ }
15
+ export const IsValidValue = (value:Uint8Array) : boolean => {
16
+ return value.length < MAX_VALUE_LENGTH;
17
+ }
8
18
 
9
19
  export enum Repository_Policy_Mode {
10
20
  POLICY_MODE_FREE = 0,
11
21
  POLICY_MODE_STRICT = 1,
12
22
  }
13
23
  export type Repository_Policy = {
14
- name:string;
24
+ key:string;
15
25
  description: string;
16
- permission?: PermissionIndex;
17
- value_type: Data_Type;
26
+ value_type: ValueType;
27
+ permission?: PermissionIndexType; // PermissionIndex like, must be geater than 10000
18
28
  }
19
29
  export type Repository_Policy_Data = {
20
- name: string;
30
+ key: string;
21
31
  data: Repository_Value[];
22
- value_type?: Data_Type;
32
+ value_type?: ValueType;
23
33
  }
24
34
  export type Repository_Value = {
25
35
  address: string; // UID: address or objectid
26
36
  value: Uint8Array;
27
37
  }
28
38
 
29
- export type RepositoryAddress = TransactionResult;
30
- export type RepositoryObject = TransactionResult;
39
+ export function repository(txb:TransactionBlock, permission:PermissionObject, description:string,
40
+ policy_mode: Repository_Policy_Mode, passport?:PassportObject) : RepositoryObject | boolean {
41
+ if (!IsValidObjects([permission])) return false;
42
+ if (!IsValidDesription(description)) return false;
31
43
 
32
- export function repository(txb:TransactionBlock, permission:PermissionObject,
33
- description:string, policy_mode: Repository_Policy_Mode, passport?:PassportObject) : RepositoryObject {
34
44
  if (passport) {
35
45
  return txb.moveCall({
36
46
  target:PROTOCOL.RepositoryFn('new_with_passport') as FnCallType,
37
- arguments:[passport, txb.pure(description_data(description)), txb.pure(policy_mode, BCS.U8), permission],
47
+ arguments:[passport, txb.pure(description), txb.pure(policy_mode, BCS.U8), TXB_OBJECT(txb, permission)],
38
48
  })
39
49
  } else {
40
50
  return txb.moveCall({
41
51
  target:PROTOCOL.RepositoryFn('new') as FnCallType,
42
- arguments:[txb.pure(description_data(description)), txb.pure(policy_mode, BCS.U8), permission],
52
+ arguments:[txb.pure(description), txb.pure(policy_mode, BCS.U8), TXB_OBJECT(txb, permission)],
43
53
  })
44
54
  }
55
+ return true;
45
56
  }
46
57
 
47
- export function launch(txb:TransactionBlock, repository:RepositoryObject) : RepositoryAddress {
58
+ export function launch(txb:TransactionBlock, repository:RepositoryObject) : RepositoryAddress | boolean {
59
+ if (!IsValidObjects([repository])) return false;
48
60
  return txb.moveCall({
49
61
  target:PROTOCOL.RepositoryFn('create') as FnCallType,
50
- arguments:[repository],
62
+ arguments:[TXB_OBJECT(txb, repository)],
51
63
  })
52
64
  }
53
- export function destroy(txb:TransactionBlock, repository:RepositoryObject) {
54
- return txb.moveCall({
65
+ export function destroy(txb:TransactionBlock, repository:RepositoryObject) : boolean {
66
+ if (!IsValidObjects([repository])) return false;
67
+ txb.moveCall({
55
68
  target:PROTOCOL.RepositoryFn('destroy') as FnCallType,
56
- arguments: [repository],
69
+ arguments: [TXB_OBJECT(txb, repository)],
57
70
  })
71
+ return true
58
72
  }
59
- export function add_data(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject, data:Repository_Policy_Data) {
73
+ export function add_data(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject, data:Repository_Policy_Data) : boolean {
74
+ if (!IsValidObjects([repository, permission])) return false;
75
+ if (!IsValidKey(data.key)) return false;
76
+ let bValid = true;
77
+ data.data.forEach((value) => {
78
+ if(!IsValidValue(value.value) || !IsValidAddress(value.address)) {
79
+ bValid = false;
80
+ }
81
+ });
82
+ if (!bValid) return false;
83
+
60
84
  if (data?.value_type) {
61
85
  data.data.forEach((d) => txb.moveCall({
62
86
  target:PROTOCOL.RepositoryFn('add') as FnCallType,
63
- arguments:[repository,
87
+ arguments:[TXB_OBJECT(txb, repository),
64
88
  txb.pure(d.address, BCS.ADDRESS),
65
- txb.pure(name_data(data.name)),
89
+ txb.pure(data.key),
66
90
  txb.pure(data.value_type, BCS.U8),
67
- txb.pure(d.value, 'vector<u8>'),
68
- permission,
91
+ txb.pure([...d.value], 'vector<u8>'),
92
+ TXB_OBJECT(txb, permission),
69
93
  ],
70
- }))
94
+ }))
71
95
  } else {
72
96
  data.data.forEach((d) => txb.moveCall({
73
97
  target:PROTOCOL.RepositoryFn('add_typed_data') as FnCallType,
74
- arguments:[repository,
98
+ arguments:[TXB_OBJECT(txb, repository),
75
99
  txb.pure(d.address, BCS.ADDRESS),
76
- txb.pure(name_data(data.name)),
77
- txb.pure(d.value, 'vector<u8>'),
78
- permission,
100
+ txb.pure(data.key),
101
+ txb.pure([...d.value], 'vector<u8>'),
102
+ TXB_OBJECT(txb, permission),
79
103
  ],
80
104
  }))
81
105
  }
106
+ return true;
82
107
  }
83
108
 
84
- export function remove(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject, address:string, name:string) {
109
+ export function remove(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject, address:string, key:string) : boolean {
110
+ if (!IsValidObjects([repository, permission])) return false;
111
+ if (!IsValidKey(key) || !IsValidAddress(address)) return false;
112
+
85
113
  txb.moveCall({
86
114
  target:PROTOCOL.RepositoryFn('remove') as FnCallType,
87
- arguments:[repository,
115
+ arguments:[TXB_OBJECT(txb, repository),
88
116
  txb.pure(address, BCS.ADDRESS),
89
- txb.pure(name_data(name)),
90
- permission,
117
+ txb.pure(key),
118
+ TXB_OBJECT(txb, permission),
91
119
  ],
92
- })
120
+ })
121
+ return true
93
122
  }
94
123
  // add or modify the old
95
- export function repository_add_policies(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject, policies:Repository_Policy[], passport?:PassportObject) {
124
+ export function repository_add_policies(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject,
125
+ policies:Repository_Policy[], passport?:PassportObject) : boolean {
126
+ if (!IsValidObjects([repository, permission])) return false;
127
+ if (!policies) return false;
128
+
129
+ let bValid = true;
130
+ policies.forEach((p) => {
131
+ if (!IsValidDesription(p.description) || !IsValidKey(p.key)) {
132
+ bValid = false
133
+ }
134
+ });
135
+ if (!bValid) return false;
136
+
96
137
  policies.forEach((policy) => {
97
- let permission_index = policy?.permission ? txb.pure(policy.permission, BCS.U64) : txb.pure([0], BCS.U8);
138
+ let permission_index = policy?.permission ? txb.pure(BCS_CONVERT.ser_option_u64(policy.permission)) : txb.pure([0], BCS.U8);
98
139
  if (passport) {
99
140
  txb.moveCall({
100
141
  target:PROTOCOL.RepositoryFn('policy_add_with_passport') as FnCallType,
101
- arguments:[passport, repository,
102
- txb.pure(name_data(policy.name)),
103
- txb.pure(description_data(policy.description)),
104
- permission_index, txb.pure(policy.value_type, BCS.U8)]
142
+ arguments:[passport, TXB_OBJECT(txb, repository),
143
+ txb.pure(policy.key),
144
+ txb.pure(policy.description),
145
+ permission_index, txb.pure(policy.value_type, BCS.U8),
146
+ TXB_OBJECT(txb, permission)]
105
147
  })
106
148
  } else {
107
149
  txb.moveCall({
108
150
  target:PROTOCOL.RepositoryFn('policy_add') as FnCallType,
109
- arguments:[repository,
110
- txb.pure(name_data(policy.name)),
111
- txb.pure(description_data(policy.description)),
112
- permission_index, txb.pure(policy.value_type, BCS.U8)]
151
+ arguments:[TXB_OBJECT(txb, repository),
152
+ txb.pure(policy.key),
153
+ txb.pure(policy.description),
154
+ permission_index, txb.pure(policy.value_type, BCS.U8),
155
+ TXB_OBJECT(txb, permission)]
113
156
  })
114
157
  }
115
158
  });
159
+ return true;
116
160
  }
117
161
 
118
- export function repository_remove_policies(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject, policy_names:string[], removeall?:boolean, passport?:PassportObject) {
162
+ export function repository_remove_policies(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject,
163
+ policy_keys:string[], removeall?:boolean, passport?:PassportObject) : boolean {
164
+ if (!IsValidObjects([repository, permission])) return false;
165
+ if (!removeall && !policy_keys) return false;
166
+ if (policy_keys && !IsValidArray(policy_keys, IsValidKey)) return false;
167
+
119
168
  if (passport) {
120
169
  if (removeall) {
121
170
  txb.moveCall({
122
171
  target:PROTOCOL.RepositoryFn('policy_remove_all_with_passport') as FnCallType,
123
- arguments:[passport, repository, permission]
172
+ arguments:[passport, TXB_OBJECT(txb, repository), TXB_OBJECT(txb, permission)]
124
173
  })
125
174
  } else {
126
- policy_names.forEach((name) => {
175
+ array_unique(policy_keys).forEach((key) => {
127
176
  txb.moveCall({
128
177
  target:PROTOCOL.RepositoryFn('policy_remove_with_passport') as FnCallType,
129
- arguments:[passport, repository, txb.pure(name_data(name)), permission]
178
+ arguments:[passport, TXB_OBJECT(txb, repository), txb.pure(array_unique(key)), TXB_OBJECT(txb, permission)]
130
179
  })
131
180
  })
132
181
  }
@@ -134,80 +183,107 @@ export function repository_remove_policies(txb:TransactionBlock, repository:Repo
134
183
  if (removeall) {
135
184
  txb.moveCall({
136
185
  target:PROTOCOL.RepositoryFn('policy_remove_all') as FnCallType,
137
- arguments:[repository, permission]
186
+ arguments:[TXB_OBJECT(txb, repository), TXB_OBJECT(txb, permission)]
138
187
  })
139
188
  } else {
140
- policy_names.forEach((name) => {
189
+ policy_keys.forEach((key) => {
141
190
  txb.moveCall({
142
191
  target:PROTOCOL.RepositoryFn('policy_remove') as FnCallType,
143
- arguments:[repository, txb.pure(name_data(name)), permission]
192
+ arguments:[TXB_OBJECT(txb, repository), txb.pure(key), TXB_OBJECT(txb, permission)]
144
193
  })
145
194
  })
146
195
  }
147
196
  }
197
+ return true;
148
198
  }
149
199
  // PermissionIndex.repository_description_set
150
- export function repository_set_description(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject, description:string, passport?:PassportObject) {
200
+ export function repository_set_description(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject,
201
+ description:string, passport?:PassportObject) : boolean {
202
+ if (!IsValidObjects([repository, permission])) return false;
203
+ if (!IsValidDesription(description)) return false;
204
+
151
205
  if (passport) {
152
206
  txb.moveCall({
153
207
  target:PROTOCOL.RepositoryFn('description_set_with_passport') as FnCallType,
154
- arguments:[passport, repository, txb.pure(description_data(description)), permission]
208
+ arguments:[passport, TXB_OBJECT(txb, repository), txb.pure(description), TXB_OBJECT(txb, permission)]
155
209
  })
156
210
  } else {
157
211
  txb.moveCall({
158
212
  target:PROTOCOL.RepositoryFn('description_set') as FnCallType,
159
- arguments:[repository, txb.pure(description_data(description)), permission]
213
+ arguments:[TXB_OBJECT(txb, repository), txb.pure(description), TXB_OBJECT(txb, permission)]
160
214
  })
161
215
  }
216
+ return true
162
217
  }
163
218
 
164
- export function repository_set_policy_mode(txb:TransactionBlock, repository: RepositoryObject, permission:PermissionObject, policy_mode:Repository_Policy_Mode, passport?:PassportObject) {
219
+ export function repository_set_policy_mode(txb:TransactionBlock, repository: RepositoryObject, permission:PermissionObject,
220
+ policy_mode:Repository_Policy_Mode, passport?:PassportObject) : boolean {
221
+ if (!IsValidObjects([repository, permission])) return false;
165
222
  if (passport) {
166
223
  txb.moveCall({
167
224
  target:PROTOCOL.RepositoryFn('policy_mode_set_with_passport') as FnCallType,
168
- arguments:[passport, repository, txb.pure(policy_mode), permission]
225
+ arguments:[passport, TXB_OBJECT(txb, repository), txb.pure(policy_mode), TXB_OBJECT(txb, permission)]
169
226
  })
170
227
  } else {
171
228
  txb.moveCall({
172
229
  target:PROTOCOL.RepositoryFn('policy_mode_set') as FnCallType,
173
- arguments:[repository, txb.pure(policy_mode), permission]
230
+ arguments:[TXB_OBJECT(txb, repository), txb.pure(policy_mode), TXB_OBJECT(txb, permission)]
174
231
  })
175
- }
232
+ }
233
+ return true
176
234
  }
177
235
 
178
- export function repository_set_policy_description(txb:TransactionBlock, repository: RepositoryObject, permission:PermissionObject, description:string, passport?:PassportObject) {
236
+ export function repository_set_policy_description(txb:TransactionBlock, repository: RepositoryObject, permission:PermissionObject,
237
+ policy:string, description:string, passport?:PassportObject) : boolean {
238
+ if (!IsValidObjects([repository, permission])) return false;
239
+ if (!IsValidKey(policy) || !IsValidDesription(description)) return false;
240
+
179
241
  if (passport) {
180
242
  txb.moveCall({
181
- target:PROTOCOL.RepositoryFn('description_set_with_passport') as FnCallType,
182
- arguments:[passport, repository, txb.pure(description_data(description)), permission]
243
+ target:PROTOCOL.RepositoryFn('policy_description_set_with_passport') as FnCallType,
244
+ arguments:[passport, TXB_OBJECT(txb, repository), txb.pure(policy), txb.pure(description), TXB_OBJECT(txb, permission)]
183
245
  })
184
246
  } else {
185
247
  txb.moveCall({
186
- target:PROTOCOL.RepositoryFn('description_set') as FnCallType,
187
- arguments:[repository, txb.pure(description_data(description)), permission]
248
+ target:PROTOCOL.RepositoryFn('policy_description_set') as FnCallType,
249
+ arguments:[TXB_OBJECT(txb, repository), txb.pure(policy), txb.pure(description), TXB_OBJECT(txb, permission)]
188
250
  })
189
251
  }
252
+ return true;
190
253
  }
191
254
 
192
- export function repository_set_policy_permission(txb:TransactionBlock, repository: RepositoryObject, permission:PermissionObject, permission_index:number, passport?:PassportObject) {
255
+ export function repository_set_policy_permission(txb:TransactionBlock, repository: RepositoryObject, permission:PermissionObject,
256
+ policy:string, permission_index?:number, passport?:PassportObject) : boolean {
257
+ if (!IsValidObjects([repository, permission])) return false;
258
+ if (!IsValidKey(policy)) return false;
259
+
260
+ let index = OptionNone(txb);
261
+ if (permission_index) {
262
+ if(!IsValidPermissionIndex(permission_index)) return false;
263
+ index = txb.pure(BCS_CONVERT.ser_option_u64(permission_index));
264
+ }
265
+
193
266
  if (passport) {
194
267
  txb.moveCall({
195
- target:PROTOCOL.RepositoryFn('policy_mode_set_with_passport') as FnCallType,
196
- arguments:[passport, repository, txb.pure(permission_index, BCS.U64), permission]
268
+ target:PROTOCOL.RepositoryFn('policy_permission_set_with_passport') as FnCallType,
269
+ arguments:[passport, TXB_OBJECT(txb, repository), index, TXB_OBJECT(txb, permission)]
197
270
  })
198
271
  } else {
199
272
  txb.moveCall({
200
- target:PROTOCOL.RepositoryFn('policy_mode_set') as FnCallType,
201
- arguments:[repository, txb.pure(permission_index, BCS.U64), permission]
273
+ target:PROTOCOL.RepositoryFn('policy_permission_set') as FnCallType,
274
+ arguments:[TXB_OBJECT(txb, repository), index, TXB_OBJECT(txb, permission)]
202
275
  })
203
276
  }
277
+ return true
204
278
  }
205
279
 
206
280
  export function change_permission(txb:TransactionBlock, repository:RepositoryObject, old_permission:PermissionObject, new_permission:PermissionObject) {
281
+ if (!IsValidObjects([repository, old_permission, new_permission])) return false;
207
282
  txb.moveCall({
208
283
  target:PROTOCOL.RepositoryFn('permission_set') as FnCallType,
209
- arguments: [repository, old_permission, new_permission],
284
+ arguments: [TXB_OBJECT(txb, repository), TXB_OBJECT(txb, old_permission), TXB_OBJECT(txb, new_permission)],
210
285
  typeArguments:[]
211
286
  })
212
287
  }
213
288
 
289
+