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/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',
@@ -99,20 +143,25 @@ export class Protocol {
99
143
  protected package = '';
100
144
  protected signer = '';
101
145
  protected everyone_guard = '';
146
+ protected graphql = '';
102
147
 
103
148
  constructor(network:ENTRYPOINT=ENTRYPOINT.localnet, signer="0xe386bb9e01b3528b75f3751ad8a1e418b207ad979fea364087deef5250a73d3f") {
104
- this.network = network;
105
149
  this.signer = signer;
150
+ this.UseNetwork(network);
151
+ }
152
+ UseNetwork(network:ENTRYPOINT=ENTRYPOINT.localnet) {
153
+ this.network = network;
106
154
  switch(network) {
107
155
  case ENTRYPOINT.localnet:
108
- this.package = "0x74df733df2395d0c3a34c6d086d2e1f130603b8aa16962e53781cb0fa9c6958c";
109
- this.everyone_guard = "0xb1a2e3d0cf13c3fcb491f126af8422f7d098147659d8a58a52511cfbb783a6e8";
156
+ this.package = "0xe9721254e97dd074e06c5efe5c57be169b64b39ae48939d89c00bf2f62b19e10";
157
+ this.everyone_guard = "0xb2a3fe7881cb883743c4e962b7e3c7716a1cd47a67adad01dc79795def4f769d";
110
158
  break;
111
159
  case ENTRYPOINT.devnet:
112
160
  break;
113
161
  case ENTRYPOINT.testnet:
114
- this.package = "0x038b0be329e4fd227d846b850aeb1822f9629c62c14d85ffcd22d856c843923f";
115
- this.everyone_guard = "0xdfe42468bfc7d7988fa1707978ef9376178dcefbe938d140a1bfd97abe755998";
162
+ this.package = "0x877375bc3bde063e4b95f428df218af7faaeef431993f4a68f2dfa5ceb8acb2e";
163
+ this.everyone_guard = "0x78a41fcc4f566360839613f6b917fb101ae015e56b43143f496f265b6422fddc";
164
+ this.graphql = 'https://sui-testnet.mystenlabs.com/graphql';
116
165
  break;
117
166
  case ENTRYPOINT.mainnet:
118
167
  break;
@@ -120,6 +169,8 @@ export class Protocol {
120
169
  }
121
170
  Package(): string { return this.package }
122
171
  EveryoneGuard(): string { return this.everyone_guard }
172
+ GraphqlUrl() : string { return this.graphql }
173
+
123
174
  NetworkUrl() : string {
124
175
  switch(this.network) {
125
176
  case ENTRYPOINT.localnet:
@@ -132,6 +183,7 @@ export class Protocol {
132
183
  return "https://fullnode.mainnet.sui.io:443";
133
184
  }; return "";
134
185
  };
186
+
135
187
  MachineFn = (fn:any) => { return `${this.package}::${MODULES.machine}::${fn}`};
136
188
  NodeFn = (fn: any) => { return `${this.package}::${MODULES.node}::${fn}`};
137
189
  ProgressFn = (fn:any) => { return `${this.package}::${MODULES.progress}::${fn}`};
@@ -160,11 +212,12 @@ export class Protocol {
160
212
  }
161
213
  return res;
162
214
  }
163
- Sign_Excute = async (exes: (txb:TransactionBlock, param:any) => void, priv_key:string, param?:any, options:SuiTransactionBlockResponseOptions={showObjectChanges:true}) : Promise<SuiTransactionBlockResponse> => {
215
+ Sign_Excute = async (exes: ((txb:TransactionBlock, param:any) => void)[], priv_key:string, param?:any, options:SuiTransactionBlockResponseOptions={showObjectChanges:true}) : Promise<SuiTransactionBlockResponse> => {
164
216
  const client = new SuiClient({ url: PROTOCOL.NetworkUrl() });
165
217
  const txb = new TransactionBlock();
166
-
167
- exes(txb, param);
218
+
219
+ exes.forEach((e) => { e(txb, param) });
220
+
168
221
  const privkey = fromHEX(priv_key);
169
222
  const keypair = Ed25519Keypair.fromSecretKey(privkey);
170
223
 
@@ -182,8 +235,9 @@ export type Query_Param = {
182
235
  callback: (response:SuiObjectResponse, param:Query_Param, option:SuiObjectDataOptions)=>void;
183
236
  data?: any; // response data filted by callback
184
237
  };
185
-
186
-
187
238
  export const PROTOCOL = new Protocol();
188
- export const OBJECTS_TYPE_PREFIX = (Object.keys(MODULES) as Array<keyof typeof MODULES>).map((key) => { return PROTOCOL.Package() + '::' + key + '::'; })
189
- export const OBJECTS_TYPE = (Object.keys(MODULES) as Array<keyof typeof MODULES>).map((key) => { let i = PROTOCOL.Package() + '::' + key + '::'; return i + capitalize(key); })
239
+ export const SUI_TYPE = '0x2::coin::Coin<0x2::sui::SUI>';
240
+ export const WOWOK_TYPE = () => {'0x2::coin::Coin<' + PROTOCOL.Package() + '::wowok::WOWOK'};
241
+
242
+ export const OBJECTS_TYPE_PREFIX = () => (Object.keys(MODULES) as Array<keyof typeof MODULES>).map((key) => { return PROTOCOL.Package() + '::' + key + '::'; })
243
+ export const OBJECTS_TYPE = () => (Object.keys(MODULES) as Array<keyof typeof MODULES>).map((key) => { let i = PROTOCOL.Package() + '::' + key + '::'; return i + capitalize(key); })
package/src/repository.ts CHANGED
@@ -1,213 +1,286 @@
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,
5
+ IsValidInt} from './protocol';
6
+ import { IsValidPermissionIndex, PermissionIndexType } from './permission'
7
+ import { BCS_CONVERT, array_unique } from './util';
6
8
 
7
- export const MAX_POLICY_COUNT = 128;
9
+ export const MAX_POLICY_COUNT = 1000;
10
+ export const MAX_KEY_LENGTH = 128;
11
+ export const MAX_VALUE_LENGTH = 204800;
12
+
13
+ export const IsValidKey = (key:string) : boolean => {
14
+ return key.length <= MAX_KEY_LENGTH && key.length != 0;
15
+ }
16
+ export const IsValidValue = (value:Uint8Array) : boolean => {
17
+ return value.length < MAX_VALUE_LENGTH;
18
+ }
8
19
 
9
20
  export enum Repository_Policy_Mode {
10
21
  POLICY_MODE_FREE = 0,
11
22
  POLICY_MODE_STRICT = 1,
12
23
  }
13
24
  export type Repository_Policy = {
14
- name:string;
25
+ key:string;
15
26
  description: string;
16
- permission?: PermissionIndex;
17
- value_type: Data_Type;
27
+ value_type: ValueType;
28
+ permission?: PermissionIndexType; // PermissionIndex like, must be geater than 10000
18
29
  }
19
30
  export type Repository_Policy_Data = {
20
- name: string;
31
+ key: string;
21
32
  data: Repository_Value[];
22
- value_type?: Data_Type;
33
+ value_type?: ValueType;
23
34
  }
24
35
  export type Repository_Value = {
25
36
  address: string; // UID: address or objectid
26
- value: Uint8Array;
37
+ bcsBytes: Uint8Array;
27
38
  }
28
39
 
29
- export type RepositoryAddress = TransactionResult;
30
- export type RepositoryObject = TransactionResult;
40
+ export function repository(txb:TransactionBlock, permission:PermissionObject, description:string,
41
+ policy_mode: Repository_Policy_Mode, passport?:PassportObject) : RepositoryObject | boolean {
42
+ if (!IsValidObjects([permission])) return false;
43
+ if (!IsValidDesription(description)) return false;
31
44
 
32
- export function repository(txb:TransactionBlock, permission:PermissionObject,
33
- description:string, policy_mode: Repository_Policy_Mode, passport?:PassportObject) : RepositoryObject {
34
45
  if (passport) {
35
46
  return txb.moveCall({
36
47
  target:PROTOCOL.RepositoryFn('new_with_passport') as FnCallType,
37
- arguments:[passport, txb.pure(description_data(description)), txb.pure(policy_mode, BCS.U8), permission],
48
+ arguments:[passport, txb.pure(description), txb.pure(policy_mode, BCS.U8), TXB_OBJECT(txb, permission)],
38
49
  })
39
50
  } else {
40
51
  return txb.moveCall({
41
52
  target:PROTOCOL.RepositoryFn('new') as FnCallType,
42
- arguments:[txb.pure(description_data(description)), txb.pure(policy_mode, BCS.U8), permission],
53
+ arguments:[txb.pure(description), txb.pure(policy_mode, BCS.U8), TXB_OBJECT(txb, permission)],
43
54
  })
44
55
  }
56
+ return true;
45
57
  }
46
58
 
47
- export function launch(txb:TransactionBlock, repository:RepositoryObject) : RepositoryAddress {
59
+ export function launch(txb:TransactionBlock, repository:RepositoryObject) : RepositoryAddress | boolean {
60
+ if (!IsValidObjects([repository])) return false;
48
61
  return txb.moveCall({
49
62
  target:PROTOCOL.RepositoryFn('create') as FnCallType,
50
- arguments:[repository],
63
+ arguments:[TXB_OBJECT(txb, repository)],
51
64
  })
52
65
  }
53
- export function destroy(txb:TransactionBlock, repository:RepositoryObject) {
54
- return txb.moveCall({
66
+ export function destroy(txb:TransactionBlock, repository:RepositoryObject) : boolean {
67
+ if (!IsValidObjects([repository])) return false;
68
+ txb.moveCall({
55
69
  target:PROTOCOL.RepositoryFn('destroy') as FnCallType,
56
- arguments: [repository],
70
+ arguments: [TXB_OBJECT(txb, repository)],
57
71
  })
72
+ return true
58
73
  }
59
- export function add_data(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject, data:Repository_Policy_Data) {
74
+
75
+ export function add_data(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject, data:Repository_Policy_Data) : boolean {
76
+ if (!IsValidObjects([repository, permission])) return false;
77
+ if (!IsValidKey(data.key)) return false;
78
+ let bValid = true;
79
+ data.data.forEach((value) => {
80
+ if (!IsValidAddress(value.address)) bValid = false;
81
+ if (!IsValidValue(value.bcsBytes)) bValid = false;
82
+ });
83
+ if (!bValid) return false;
84
+
60
85
  if (data?.value_type) {
61
86
  data.data.forEach((d) => txb.moveCall({
62
87
  target:PROTOCOL.RepositoryFn('add') as FnCallType,
63
- arguments:[repository,
88
+ arguments:[TXB_OBJECT(txb, repository),
64
89
  txb.pure(d.address, BCS.ADDRESS),
65
- txb.pure(name_data(data.name)),
90
+ txb.pure(data.key),
66
91
  txb.pure(data.value_type, BCS.U8),
67
- txb.pure(d.value, 'vector<u8>'),
68
- permission,
92
+ txb.pure([...d.bcsBytes], 'vector<u8>'),
93
+ TXB_OBJECT(txb, permission),
69
94
  ],
70
- }))
95
+ }))
71
96
  } else {
72
97
  data.data.forEach((d) => txb.moveCall({
73
98
  target:PROTOCOL.RepositoryFn('add_typed_data') as FnCallType,
74
- arguments:[repository,
99
+ arguments:[TXB_OBJECT(txb, repository),
75
100
  txb.pure(d.address, BCS.ADDRESS),
76
- txb.pure(name_data(data.name)),
77
- txb.pure(d.value, 'vector<u8>'),
78
- permission,
101
+ txb.pure(data.key),
102
+ txb.pure([...d.bcsBytes], 'vector<u8>'),
103
+ TXB_OBJECT(txb, permission),
79
104
  ],
80
105
  }))
81
106
  }
107
+ return true;
82
108
  }
83
109
 
84
- export function remove(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject, address:string, name:string) {
110
+ export function remove(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject, address:string, key:string) : boolean {
111
+ if (!IsValidObjects([repository, permission])) return false;
112
+ if (!IsValidKey(key) || !IsValidAddress(address)) return false;
113
+
85
114
  txb.moveCall({
86
115
  target:PROTOCOL.RepositoryFn('remove') as FnCallType,
87
- arguments:[repository,
116
+ arguments:[TXB_OBJECT(txb, repository),
88
117
  txb.pure(address, BCS.ADDRESS),
89
- txb.pure(name_data(name)),
90
- permission,
118
+ txb.pure(key),
119
+ TXB_OBJECT(txb, permission),
91
120
  ],
92
- })
121
+ })
122
+ return true
93
123
  }
94
124
  // add or modify the old
95
- export function repository_add_policies(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject, policies:Repository_Policy[], passport?:PassportObject) {
125
+ export function repository_add_policies(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject,
126
+ policies:Repository_Policy[], passport?:PassportObject) : boolean {
127
+ if (!IsValidObjects([repository, permission])) return false;
128
+ if (!policies) return false;
129
+
130
+ let bValid = true;
131
+ policies.forEach((p) => {
132
+ if (!IsValidDesription(p.description) || !IsValidKey(p.key)) {
133
+ bValid = false
134
+ }
135
+ });
136
+ if (!bValid) return false;
137
+
96
138
  policies.forEach((policy) => {
97
- let permission_index = policy?.permission ? txb.pure(policy.permission, BCS.U64) : txb.pure([0], BCS.U8);
139
+ let permission_index = policy?.permission ? txb.pure(BCS_CONVERT.ser_option_u64(policy.permission)) : txb.pure([0], BCS.U8);
98
140
  if (passport) {
99
141
  txb.moveCall({
100
142
  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)]
143
+ arguments:[passport, TXB_OBJECT(txb, repository),
144
+ txb.pure(policy.key),
145
+ txb.pure(policy.description),
146
+ permission_index, txb.pure(policy.value_type, BCS.U8),
147
+ TXB_OBJECT(txb, permission)]
105
148
  })
106
149
  } else {
107
150
  txb.moveCall({
108
151
  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)]
152
+ arguments:[TXB_OBJECT(txb, repository),
153
+ txb.pure(policy.key),
154
+ txb.pure(policy.description),
155
+ permission_index, txb.pure(policy.value_type, BCS.U8),
156
+ TXB_OBJECT(txb, permission)]
113
157
  })
114
158
  }
115
159
  });
160
+ return true;
116
161
  }
117
162
 
118
- export function repository_remove_policies(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject, policy_names:string[], removeall?:boolean, passport?:PassportObject) {
163
+ export function repository_remove_policies(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject,
164
+ policy_keys:string[], removeall?:boolean, passport?:PassportObject) : boolean {
165
+ if (!IsValidObjects([repository, permission])) return false;
166
+ if (!removeall && !policy_keys) return false;
167
+ if (policy_keys && !IsValidArray(policy_keys, IsValidKey)) return false;
168
+
119
169
  if (passport) {
120
170
  if (removeall) {
121
171
  txb.moveCall({
122
172
  target:PROTOCOL.RepositoryFn('policy_remove_all_with_passport') as FnCallType,
123
- arguments:[passport, repository, permission]
173
+ arguments:[passport, TXB_OBJECT(txb, repository), TXB_OBJECT(txb, permission)]
124
174
  })
125
175
  } else {
126
- policy_names.forEach((name) => {
127
- txb.moveCall({
128
- target:PROTOCOL.RepositoryFn('policy_remove_with_passport') as FnCallType,
129
- arguments:[passport, repository, txb.pure(name_data(name)), permission]
130
- })
131
- })
176
+ txb.moveCall({
177
+ target:PROTOCOL.RepositoryFn('policy_remove_with_passport') as FnCallType,
178
+ arguments:[passport, TXB_OBJECT(txb, repository), txb.pure(BCS_CONVERT.ser_vector_string(array_unique(policy_keys))), TXB_OBJECT(txb, permission)]
179
+ })
132
180
  }
133
181
  } else {
134
182
  if (removeall) {
135
183
  txb.moveCall({
136
184
  target:PROTOCOL.RepositoryFn('policy_remove_all') as FnCallType,
137
- arguments:[repository, permission]
185
+ arguments:[TXB_OBJECT(txb, repository), TXB_OBJECT(txb, permission)]
138
186
  })
139
187
  } else {
140
- policy_names.forEach((name) => {
141
- txb.moveCall({
142
- target:PROTOCOL.RepositoryFn('policy_remove') as FnCallType,
143
- arguments:[repository, txb.pure(name_data(name)), permission]
144
- })
145
- })
188
+ txb.moveCall({
189
+ target:PROTOCOL.RepositoryFn('policy_remove') as FnCallType,
190
+ arguments:[TXB_OBJECT(txb, repository), txb.pure(BCS_CONVERT.ser_vector_string(array_unique(policy_keys))), TXB_OBJECT(txb, permission)]
191
+ })
146
192
  }
147
193
  }
194
+ return true;
148
195
  }
149
196
  // PermissionIndex.repository_description_set
150
- export function repository_set_description(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject, description:string, passport?:PassportObject) {
197
+ export function repository_set_description(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject,
198
+ description:string, passport?:PassportObject) : boolean {
199
+ if (!IsValidObjects([repository, permission])) return false;
200
+ if (!IsValidDesription(description)) return false;
201
+
151
202
  if (passport) {
152
203
  txb.moveCall({
153
204
  target:PROTOCOL.RepositoryFn('description_set_with_passport') as FnCallType,
154
- arguments:[passport, repository, txb.pure(description_data(description)), permission]
205
+ arguments:[passport, TXB_OBJECT(txb, repository), txb.pure(description), TXB_OBJECT(txb, permission)]
155
206
  })
156
207
  } else {
157
208
  txb.moveCall({
158
209
  target:PROTOCOL.RepositoryFn('description_set') as FnCallType,
159
- arguments:[repository, txb.pure(description_data(description)), permission]
210
+ arguments:[TXB_OBJECT(txb, repository), txb.pure(description), TXB_OBJECT(txb, permission)]
160
211
  })
161
212
  }
213
+ return true
162
214
  }
163
215
 
164
- export function repository_set_policy_mode(txb:TransactionBlock, repository: RepositoryObject, permission:PermissionObject, policy_mode:Repository_Policy_Mode, passport?:PassportObject) {
216
+ export function repository_set_policy_mode(txb:TransactionBlock, repository: RepositoryObject, permission:PermissionObject,
217
+ policy_mode:Repository_Policy_Mode, passport?:PassportObject) : boolean {
218
+ if (!IsValidObjects([repository, permission])) return false;
165
219
  if (passport) {
166
220
  txb.moveCall({
167
221
  target:PROTOCOL.RepositoryFn('policy_mode_set_with_passport') as FnCallType,
168
- arguments:[passport, repository, txb.pure(policy_mode), permission]
222
+ arguments:[passport, TXB_OBJECT(txb, repository), txb.pure(policy_mode), TXB_OBJECT(txb, permission)]
169
223
  })
170
224
  } else {
171
225
  txb.moveCall({
172
226
  target:PROTOCOL.RepositoryFn('policy_mode_set') as FnCallType,
173
- arguments:[repository, txb.pure(policy_mode), permission]
227
+ arguments:[TXB_OBJECT(txb, repository), txb.pure(policy_mode), TXB_OBJECT(txb, permission)]
174
228
  })
175
- }
229
+ }
230
+ return true
176
231
  }
177
232
 
178
- export function repository_set_policy_description(txb:TransactionBlock, repository: RepositoryObject, permission:PermissionObject, description:string, passport?:PassportObject) {
233
+ export function repository_set_policy_description(txb:TransactionBlock, repository: RepositoryObject, permission:PermissionObject,
234
+ policy:string, description:string, passport?:PassportObject) : boolean {
235
+ if (!IsValidObjects([repository, permission])) return false;
236
+ if (!IsValidKey(policy) || !IsValidDesription(description)) return false;
237
+
179
238
  if (passport) {
180
239
  txb.moveCall({
181
- target:PROTOCOL.RepositoryFn('description_set_with_passport') as FnCallType,
182
- arguments:[passport, repository, txb.pure(description_data(description)), permission]
240
+ target:PROTOCOL.RepositoryFn('policy_description_set_with_passport') as FnCallType,
241
+ arguments:[passport, TXB_OBJECT(txb, repository), txb.pure(policy), txb.pure(description), TXB_OBJECT(txb, permission)]
183
242
  })
184
243
  } else {
185
244
  txb.moveCall({
186
- target:PROTOCOL.RepositoryFn('description_set') as FnCallType,
187
- arguments:[repository, txb.pure(description_data(description)), permission]
245
+ target:PROTOCOL.RepositoryFn('policy_description_set') as FnCallType,
246
+ arguments:[TXB_OBJECT(txb, repository), txb.pure(policy), txb.pure(description), TXB_OBJECT(txb, permission)]
188
247
  })
189
248
  }
249
+ return true;
190
250
  }
191
251
 
192
- export function repository_set_policy_permission(txb:TransactionBlock, repository: RepositoryObject, permission:PermissionObject, permission_index:number, passport?:PassportObject) {
252
+ export function repository_set_policy_permission(txb:TransactionBlock, repository: RepositoryObject, permission:PermissionObject,
253
+ policy:string, permission_index?:number, passport?:PassportObject) : boolean {
254
+ if (!IsValidObjects([repository, permission])) return false;
255
+ if (!IsValidKey(policy)) return false;
256
+
257
+ let index = OptionNone(txb);
258
+ if (permission_index) {
259
+ if(!IsValidPermissionIndex(permission_index)) return false;
260
+ index = txb.pure(BCS_CONVERT.ser_option_u64(permission_index));
261
+ }
262
+
193
263
  if (passport) {
194
264
  txb.moveCall({
195
- target:PROTOCOL.RepositoryFn('policy_mode_set_with_passport') as FnCallType,
196
- arguments:[passport, repository, txb.pure(permission_index, BCS.U64), permission]
265
+ target:PROTOCOL.RepositoryFn('policy_permission_set_with_passport') as FnCallType,
266
+ arguments:[passport, TXB_OBJECT(txb, repository), index, TXB_OBJECT(txb, permission)]
197
267
  })
198
268
  } else {
199
269
  txb.moveCall({
200
- target:PROTOCOL.RepositoryFn('policy_mode_set') as FnCallType,
201
- arguments:[repository, txb.pure(permission_index, BCS.U64), permission]
270
+ target:PROTOCOL.RepositoryFn('policy_permission_set') as FnCallType,
271
+ arguments:[TXB_OBJECT(txb, repository), index, TXB_OBJECT(txb, permission)]
202
272
  })
203
273
  }
274
+ return true
204
275
  }
205
276
 
206
277
  export function change_permission(txb:TransactionBlock, repository:RepositoryObject, old_permission:PermissionObject, new_permission:PermissionObject) {
278
+ if (!IsValidObjects([repository, old_permission, new_permission])) return false;
207
279
  txb.moveCall({
208
280
  target:PROTOCOL.RepositoryFn('permission_set') as FnCallType,
209
- arguments: [repository, old_permission, new_permission],
281
+ arguments: [TXB_OBJECT(txb, repository), TXB_OBJECT(txb, old_permission), TXB_OBJECT(txb, new_permission)],
210
282
  typeArguments:[]
211
283
  })
212
284
  }
213
285
 
286
+