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/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
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
export
|
|
19
|
-
|
|
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
|
|
22
|
-
return
|
|
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
|
|
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
|
|
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 = "
|
|
109
|
-
this.everyone_guard = "
|
|
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 = "
|
|
115
|
-
this.everyone_guard = "
|
|
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
|
|
189
|
-
export const
|
|
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 {
|
|
4
|
-
|
|
5
|
-
|
|
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 =
|
|
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
|
-
|
|
25
|
+
key:string;
|
|
15
26
|
description: string;
|
|
16
|
-
|
|
17
|
-
|
|
27
|
+
value_type: ValueType;
|
|
28
|
+
permission?: PermissionIndexType; // PermissionIndex like, must be geater than 10000
|
|
18
29
|
}
|
|
19
30
|
export type Repository_Policy_Data = {
|
|
20
|
-
|
|
31
|
+
key: string;
|
|
21
32
|
data: Repository_Value[];
|
|
22
|
-
value_type?:
|
|
33
|
+
value_type?: ValueType;
|
|
23
34
|
}
|
|
24
35
|
export type Repository_Value = {
|
|
25
36
|
address: string; // UID: address or objectid
|
|
26
|
-
|
|
37
|
+
bcsBytes: Uint8Array;
|
|
27
38
|
}
|
|
28
39
|
|
|
29
|
-
export
|
|
30
|
-
|
|
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(
|
|
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(
|
|
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
|
|
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
|
-
|
|
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(
|
|
90
|
+
txb.pure(data.key),
|
|
66
91
|
txb.pure(data.value_type, BCS.U8),
|
|
67
|
-
txb.pure(d.
|
|
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(
|
|
77
|
-
txb.pure(d.
|
|
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,
|
|
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(
|
|
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,
|
|
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
|
|
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(
|
|
103
|
-
txb.pure(
|
|
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(
|
|
111
|
-
txb.pure(
|
|
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,
|
|
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
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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,
|
|
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(
|
|
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(
|
|
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,
|
|
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,
|
|
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('
|
|
182
|
-
arguments:[passport, repository, txb.pure(
|
|
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('
|
|
187
|
-
arguments:[repository, txb.pure(
|
|
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,
|
|
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('
|
|
196
|
-
arguments:[passport, repository,
|
|
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('
|
|
201
|
-
arguments:[repository,
|
|
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
|
+
|