wowok 1.3.10 → 1.3.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/guard.ts +204 -148
- package/src/machine.ts +13 -6
- package/src/passport.ts +38 -5
- package/src/permission.ts +3 -2
- package/src/progress.ts +6 -5
- package/src/protocol.ts +44 -20
- package/src/repository.ts +10 -5
- package/src/utils.ts +11 -4
package/package.json
CHANGED
package/src/guard.ts
CHANGED
|
@@ -6,9 +6,9 @@ import { IsValidDesription, Bcs, IsValidInt, IsValidAddress, FirstLetterUppercas
|
|
|
6
6
|
import { ERROR, Errors } from './exception';
|
|
7
7
|
import { Transaction as TransactionBlock } from '@mysten/sui/transactions';
|
|
8
8
|
|
|
9
|
-
export type GuardConstant = Map<number,
|
|
9
|
+
export type GuardConstant = Map<number, Guard_Variable>;
|
|
10
10
|
|
|
11
|
-
export interface
|
|
11
|
+
export interface Guard_Variable {
|
|
12
12
|
type: ConstantType ,
|
|
13
13
|
value?: Uint8Array,
|
|
14
14
|
witness?: Uint8Array,
|
|
@@ -22,7 +22,7 @@ export interface Guard_Options {
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
export class Guard {
|
|
25
|
-
static MAX_INPUT_LENGTH =
|
|
25
|
+
static MAX_INPUT_LENGTH = 10240;
|
|
26
26
|
static launch(txb:TransactionBlock, description:string, maker:GuardMaker) : GuardAddress {
|
|
27
27
|
if (!maker.IsReady()) {
|
|
28
28
|
ERROR(Errors.InvalidParam, 'launch maker');
|
|
@@ -98,109 +98,111 @@ export class Guard {
|
|
|
98
98
|
|
|
99
99
|
static QUERIES:any[] = [
|
|
100
100
|
// module, 'name', 'id', [input], output
|
|
101
|
-
[MODULES.permission, '
|
|
102
|
-
[MODULES.permission, '
|
|
103
|
-
[MODULES.permission, 'Has Rights', 3, [ValueType.TYPE_ADDRESS, ValueType.TYPE_U64], ValueType.TYPE_BOOL],
|
|
104
|
-
[MODULES.permission, 'Contains Address', 4, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
105
|
-
[MODULES.permission, 'Contains
|
|
106
|
-
[MODULES.permission, 'Contains Guard
|
|
107
|
-
[MODULES.permission, 'Guard
|
|
108
|
-
[MODULES.permission, '
|
|
109
|
-
[MODULES.permission, 'Admin
|
|
101
|
+
[MODULES.permission, 'Owner', 1, [], ValueType.TYPE_ADDRESS, "Owner's address."],
|
|
102
|
+
[MODULES.permission, 'Is Admin', 2, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL, 'Is a certain address an administrator?', 'Input:address'],
|
|
103
|
+
[MODULES.permission, 'Has Rights', 3, [ValueType.TYPE_ADDRESS, ValueType.TYPE_U64], ValueType.TYPE_BOOL, 'Does an address have a certain permission(Admin always have permissions)?', 'Input 1:address; Input 2:permission index'],
|
|
104
|
+
[MODULES.permission, 'Contains Address', 4, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL, 'Whether an address is included in the personnel permission table?', 'Input:address'],
|
|
105
|
+
[MODULES.permission, 'Contains Permission', 5, [ValueType.TYPE_ADDRESS, ValueType.TYPE_U64], ValueType.TYPE_BOOL, 'Whether a certain permission for a certain address is defined in the personnel permission table?', 'Input 1:address; Input 2:permission index'],
|
|
106
|
+
[MODULES.permission, 'Contains Permission Guard', 6, [ValueType.TYPE_ADDRESS, ValueType.TYPE_U64], ValueType.TYPE_BOOL, 'Whether a permission guard for a certain address is defined in the personnel permission table?', 'Input 1:address; Input 2:permission index'],
|
|
107
|
+
[MODULES.permission, 'Permission Guard', 7, [ValueType.TYPE_ADDRESS, ValueType.TYPE_U64], ValueType.TYPE_ADDRESS, 'Permission guard for a certain address.', 'Input 1:address; Input 2:permission index'],
|
|
108
|
+
[MODULES.permission, 'Number of Entities', 8, [], ValueType.TYPE_U64, 'Number of entities in the personnel permission table.'],
|
|
109
|
+
[MODULES.permission, 'Number of Admin', 9, [], ValueType.TYPE_U64, 'Number of administrators.'],
|
|
110
110
|
|
|
111
|
-
[MODULES.repository, 'Permission', 11, [], ValueType.TYPE_ADDRESS],
|
|
112
|
-
[MODULES.repository, 'Contains Policy', 12, [ValueType.
|
|
113
|
-
[MODULES.repository, '
|
|
114
|
-
[MODULES.repository, 'Permission of Policy', 14, [ValueType.
|
|
115
|
-
[MODULES.repository, 'Value Type of Policy', 15, [ValueType.
|
|
116
|
-
[MODULES.repository, 'Contains
|
|
117
|
-
[MODULES.repository, 'Contains
|
|
118
|
-
[MODULES.repository, '
|
|
119
|
-
[MODULES.repository, 'Value', 19, [ValueType.TYPE_ADDRESS, ValueType.
|
|
120
|
-
[MODULES.repository, 'Type', 20, [], ValueType.TYPE_U8],
|
|
121
|
-
[MODULES.repository, 'Policy Mode', 21, [], ValueType.TYPE_U8],
|
|
122
|
-
[MODULES.repository, 'Reference Count', 22, [], ValueType.TYPE_U64],
|
|
123
|
-
[MODULES.repository, '
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
[MODULES.machine, '
|
|
127
|
-
[MODULES.machine, '
|
|
128
|
-
[MODULES.machine, '
|
|
129
|
-
[MODULES.machine, '
|
|
130
|
-
[MODULES.machine, 'Endpoint',
|
|
111
|
+
[MODULES.repository, 'Permission', 11, [], ValueType.TYPE_ADDRESS, 'Permission object address.'],
|
|
112
|
+
[MODULES.repository, 'Contains Policy', 12, [ValueType.TYPE_STRING], ValueType.TYPE_BOOL, 'Is a consensus policy included?', 'Input:the filed name'],
|
|
113
|
+
[MODULES.repository, 'Is Permission set of Policy', 13, [ValueType.TYPE_STRING], ValueType.TYPE_BOOL, 'Does a certain consensus policy set data operation permissions?', 'Input:the policy name'],
|
|
114
|
+
[MODULES.repository, 'Permission of Policy', 14, [ValueType.TYPE_STRING], ValueType.TYPE_U64, 'The permission index of a certain consensus policy in the Permission object.', 'Input:the policy name'],
|
|
115
|
+
[MODULES.repository, 'Value Type of Policy', 15, [ValueType.TYPE_STRING], ValueType.TYPE_U8, 'Data types defined by consensus policy.', 'Input:the policy name'],
|
|
116
|
+
[MODULES.repository, 'Contains Data for An Address', 16, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL, 'Whether data exists at a certain address?', 'Input:address'],
|
|
117
|
+
[MODULES.repository, 'Contains Data', 17, [ValueType.TYPE_ADDRESS, ValueType.TYPE_STRING], ValueType.TYPE_BOOL, 'Does it contain data for a certain field of an address?', 'Input 1:address, Input 2:the field name'],
|
|
118
|
+
[MODULES.repository, 'Data without Type', 18, [ValueType.TYPE_ADDRESS, ValueType.TYPE_STRING], ValueType.TYPE_VEC_U8, 'Data for a field at an address and does not contain data type information.', 'Input 1:address, Input 2:the field name'],
|
|
119
|
+
[MODULES.repository, 'Value', 19, [ValueType.TYPE_ADDRESS, ValueType.TYPE_STRING], ValueType.TYPE_VEC_U8, 'Data for a field at an address, and the first byte contains data type information.', 'Input 1:address, Input 2:the field name'],
|
|
120
|
+
[MODULES.repository, 'Type', 20, [], ValueType.TYPE_U8, 'The repository Type. 0: Normal; 1: Wowok greenee.'],
|
|
121
|
+
[MODULES.repository, 'Policy Mode', 21, [], ValueType.TYPE_U8, 'Policy Mode. 0: Free mode; 1: Strict mode.'],
|
|
122
|
+
[MODULES.repository, 'Reference Count', 22, [], ValueType.TYPE_U64, 'The number of times it is referenced by other objects.'],
|
|
123
|
+
[MODULES.repository, 'Is Referenced by An Object', 23, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL, 'Is it referenced by an object?', 'Input:address'],
|
|
124
|
+
// , means that data fields and data outside the consensus policy definition are allowed to be written
|
|
125
|
+
// , means that only data fields and data defined by the consensus policy are allowed to be written.
|
|
126
|
+
[MODULES.machine, 'Permission', 31, [], ValueType.TYPE_ADDRESS, 'Permission object address.'],
|
|
127
|
+
[MODULES.machine, 'Paused', 32, [], ValueType.TYPE_BOOL, 'Pause the creation of new Progress?'],
|
|
128
|
+
[MODULES.machine, 'Published', 33, [], ValueType.TYPE_BOOL, 'Is it allowed to create Progress?'],
|
|
129
|
+
[MODULES.machine, 'Is Consensus Repository', 34, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL, 'Whether an address is a consensus repository?', 'Input:adddress'],
|
|
130
|
+
[MODULES.machine, 'Has Endpoint', 35, [], ValueType.TYPE_BOOL, 'Is the endpoint set?'],
|
|
131
|
+
[MODULES.machine, 'Endpoint', 36, [], ValueType.TYPE_STRING, 'Endpoint url/ipfs.'],
|
|
131
132
|
|
|
132
|
-
[MODULES.progress, 'Machine', 51, [], ValueType.TYPE_ADDRESS],
|
|
133
|
-
[MODULES.progress, 'Current Node', 52, [], ValueType.
|
|
134
|
-
[MODULES.progress, 'Has Parent', 53, [], ValueType.TYPE_BOOL],
|
|
135
|
-
[MODULES.progress, 'Parent', 54, [], ValueType.TYPE_ADDRESS],
|
|
136
|
-
[MODULES.progress, 'Has Task', 55, [], ValueType.TYPE_BOOL],
|
|
137
|
-
[MODULES.progress, 'Task', 56, [], ValueType.TYPE_ADDRESS],
|
|
138
|
-
[MODULES.progress, 'Has
|
|
139
|
-
[MODULES.progress, 'Is
|
|
140
|
-
[MODULES.progress, 'Has Context Repository', 59, [], ValueType.TYPE_BOOL],
|
|
141
|
-
[MODULES.progress, 'Context Repository', 60, [], ValueType.TYPE_ADDRESS],
|
|
133
|
+
[MODULES.progress, 'Machine', 51, [], ValueType.TYPE_ADDRESS, 'The Machine object that created this Progress.'],
|
|
134
|
+
[MODULES.progress, 'Current Node', 52, [], ValueType.TYPE_STRING, 'The name of the currently running node.'],
|
|
135
|
+
[MODULES.progress, 'Has Parent', 53, [], ValueType.TYPE_BOOL, 'Is the parent Progress defined?'],
|
|
136
|
+
[MODULES.progress, 'Parent', 54, [], ValueType.TYPE_ADDRESS, 'The parent Progress, that contains some child Progress.'],
|
|
137
|
+
[MODULES.progress, 'Has Task', 55, [], ValueType.TYPE_BOOL, 'Does it contain clear task(eg. an Order)?'],
|
|
138
|
+
[MODULES.progress, 'Task', 56, [], ValueType.TYPE_ADDRESS, 'Task object address.'],
|
|
139
|
+
[MODULES.progress, 'Has Unique Permission', 57, [ValueType.TYPE_STRING], ValueType.TYPE_BOOL, 'Does Progress define a unique operation permission?', 'Input:opertor name'],
|
|
140
|
+
[MODULES.progress, 'Is Unique Permission Operator', 58, [ValueType.TYPE_STRING, ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL, 'Is an address an operator with unique permissions?', 'Input 1:operator name; Input 2:address'],
|
|
141
|
+
[MODULES.progress, 'Has Context Repository', 59, [], ValueType.TYPE_BOOL, 'Whether the repository reference for Progress is set?'],
|
|
142
|
+
[MODULES.progress, 'Context Repository', 60, [], ValueType.TYPE_ADDRESS, 'Repository reference for Progress.'],
|
|
143
|
+
[MODULES.progress, 'Last Session Time', 61, [], ValueType.TYPE_U64, 'Time when the previous session was completed.'],
|
|
144
|
+
[MODULES.progress, 'Session Time', 62, [ValueType.TYPE_STRING], ValueType.TYPE_U64, 'Time a node completes its session.', 'Input:the node name'],
|
|
145
|
+
|
|
146
|
+
[MODULES.demand, 'Permission', 71, [], ValueType.TYPE_ADDRESS, 'Permission object address.'],
|
|
147
|
+
[MODULES.demand, 'Has Deadline', 72, [], ValueType.TYPE_BOOL, 'Whether to set the expiration time of presenting?'],
|
|
148
|
+
[MODULES.demand, 'Deadline', 73, [], ValueType.TYPE_U64, 'The expiration time of presenting.'],
|
|
149
|
+
[MODULES.demand, 'Bounty Count', 74, [], ValueType.TYPE_U64, 'Number of Bounties.'],
|
|
150
|
+
[MODULES.demand, 'Has Guard', 75, [], ValueType.TYPE_BOOL, 'Whether the present guard is set?'],
|
|
151
|
+
[MODULES.demand, 'Guard', 76, [], ValueType.TYPE_ADDRESS, 'The present guard address.'],
|
|
152
|
+
[MODULES.demand, 'Has Service Picked', 77, [], ValueType.TYPE_BOOL, 'Whether a service has been picked and bounties given?'],
|
|
153
|
+
[MODULES.demand, 'Service Picked', 78, [], ValueType.TYPE_ADDRESS, 'Service address that has been picked.'],
|
|
154
|
+
[MODULES.demand, 'Presenter Count', 79, [], ValueType.TYPE_U64, 'Number of presenters.'],
|
|
155
|
+
[MODULES.demand, 'Has Presenter', 80, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL, 'Is a certain address a presenter?', 'Input:address'],
|
|
156
|
+
[MODULES.demand, 'Who Got Bounty', 81, [ValueType.TYPE_ADDRESS], ValueType.TYPE_ADDRESS, 'The address that bounties given.', 'Input:address'],
|
|
142
157
|
|
|
143
|
-
[MODULES.
|
|
144
|
-
[MODULES.
|
|
145
|
-
[MODULES.
|
|
146
|
-
[MODULES.
|
|
147
|
-
[MODULES.
|
|
148
|
-
[MODULES.
|
|
149
|
-
[MODULES.
|
|
150
|
-
[MODULES.
|
|
151
|
-
[MODULES.
|
|
152
|
-
[MODULES.
|
|
153
|
-
[MODULES.
|
|
158
|
+
[MODULES.order, 'Amount', 91, [], ValueType.TYPE_U64, 'Order amount.'],
|
|
159
|
+
[MODULES.order, 'Payer', 92, [], ValueType.TYPE_ADDRESS, 'Order payer.'],
|
|
160
|
+
[MODULES.order, 'Service', 93, [], ValueType.TYPE_ADDRESS, 'Service for creating orders.'],
|
|
161
|
+
[MODULES.order, 'Has Progress', 94, [], ValueType.TYPE_BOOL, 'Is there a Progress for executing the order process?'],
|
|
162
|
+
[MODULES.order, 'Progress', 95, [], ValueType.TYPE_ADDRESS, 'Progress address for executing the order process.'],
|
|
163
|
+
[MODULES.order, 'Required Info Counts', 96, [], ValueType.TYPE_U64, 'How much customer information is required for this order?'],
|
|
164
|
+
[MODULES.order, 'Discount Used', 97, [], ValueType.TYPE_BOOL, 'Discount coupon used for this order?'],
|
|
165
|
+
[MODULES.order, 'Discount', 98, [], ValueType.TYPE_ADDRESS, 'Discount address that already used.'],
|
|
166
|
+
[MODULES.order, 'Balance', 99, [], ValueType.TYPE_U64, 'The amount currently in the order.'],
|
|
167
|
+
[MODULES.order, 'Refunded', 100, [], ValueType.TYPE_BOOL, 'Whether a refund has occurred?'],
|
|
168
|
+
[MODULES.order, 'Withdrawed', 101, [], ValueType.TYPE_BOOL, 'Whether a service provider withdrawal has occurred?'],
|
|
154
169
|
|
|
155
|
-
[MODULES.
|
|
156
|
-
[MODULES.
|
|
157
|
-
[MODULES.
|
|
158
|
-
[MODULES.
|
|
159
|
-
[MODULES.
|
|
160
|
-
[MODULES.
|
|
161
|
-
[MODULES.
|
|
162
|
-
[MODULES.
|
|
163
|
-
[MODULES.
|
|
164
|
-
[MODULES.
|
|
165
|
-
[MODULES.
|
|
170
|
+
[MODULES.service, 'Permission', 111, [], ValueType.TYPE_ADDRESS, 'Permission object address.'],
|
|
171
|
+
[MODULES.service, 'Payee', 112, [], ValueType.TYPE_ADDRESS, 'Payee address, that all order withdrawals will be collected to this address.'],
|
|
172
|
+
[MODULES.service, 'Has Buying Guard', 113, [], ValueType.TYPE_BOOL, 'Is the guard condition of buying set?'],
|
|
173
|
+
[MODULES.service, 'Buying Guard', 114, [], ValueType.TYPE_ADDRESS, 'Buying guard, that Purchase only if you meet the conditions of the guard.'],
|
|
174
|
+
[MODULES.service, 'Contains Repository', 115, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL, "Is a certain repository one of the service's consensus repositories?", 'Input:address'],
|
|
175
|
+
[MODULES.service, 'Has Withdrawing Guard', 116, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL, 'Whether a certain guard is set when withdrawing money?', 'Input:address'],
|
|
176
|
+
[MODULES.service, 'Withdrawing Guard Percent', 117, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64, 'The percentage of withdrawals allowed by a certain withdrawal guard.', 'Input:address'],
|
|
177
|
+
[MODULES.service, 'Has Refunding Guard', 118, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL, 'Whether a certain guard is set when refunding money?', 'Input:address'],
|
|
178
|
+
[MODULES.service, 'Refunding Guard Percent', 119, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64, 'The percentage of refund allowed by a certain refund guard.', 'Input:address'],
|
|
179
|
+
[MODULES.service, 'Has Sales Item', 120, [ValueType.TYPE_STRING], ValueType.TYPE_BOOL, 'Is there a sales item for the service?', 'Input:the item name'],
|
|
180
|
+
[MODULES.service, 'Sale Item Price', 121, [ValueType.TYPE_STRING], ValueType.TYPE_U64, 'What is the price of a certain sale item?', 'Input:the item name'],
|
|
181
|
+
[MODULES.service, 'Sale Item Inventory', 122, [ValueType.TYPE_STRING], ValueType.TYPE_U64, 'How much inventory is there for a certain sales item?', 'Input:the item name'],
|
|
182
|
+
[MODULES.service, 'Has Machine', 123, [], ValueType.TYPE_BOOL, "Has the machine(progress generator) that serves the order been set up?"],
|
|
183
|
+
[MODULES.service, 'Machine', 124, [], ValueType.TYPE_ADDRESS, 'Machine address, that generate progresses serving the execution process of order.'],
|
|
184
|
+
[MODULES.service, 'Paused', 125, [], ValueType.TYPE_BOOL, 'Pause the creation of new order?'],
|
|
185
|
+
[MODULES.service, 'Published', 126, [], ValueType.TYPE_BOOL, 'Is it allowed to create orders?'],
|
|
186
|
+
[MODULES.service, 'Has Required Info', 127, [], ValueType.TYPE_BOOL, 'Whether the necessary information that needs to be provided by the customer is set?'],
|
|
187
|
+
[MODULES.service, 'Required Info of Service-Pubkey', 128, [], ValueType.TYPE_STRING, 'The public key used to encrypt customer information, and only the service provider can decrypt and view customer information.'],
|
|
188
|
+
[MODULES.service, 'Required Info', 129, [], ValueType.TYPE_VEC_STRING, 'Names of the required information item that needs to be provided by the customer.'],
|
|
166
189
|
|
|
167
|
-
[MODULES.
|
|
168
|
-
[MODULES.
|
|
169
|
-
[MODULES.
|
|
170
|
-
[MODULES.
|
|
171
|
-
[MODULES.
|
|
172
|
-
[MODULES.
|
|
173
|
-
[MODULES.
|
|
174
|
-
[MODULES.
|
|
175
|
-
[MODULES.
|
|
176
|
-
[MODULES.
|
|
177
|
-
[MODULES.
|
|
178
|
-
[MODULES.
|
|
179
|
-
[MODULES.
|
|
180
|
-
[MODULES.
|
|
181
|
-
[MODULES.service, 'Paused', 125, [], ValueType.TYPE_BOOL],
|
|
182
|
-
[MODULES.service, 'Published', 126, [], ValueType.TYPE_BOOL],
|
|
183
|
-
[MODULES.service, 'Has Required Info', 127, [], ValueType.TYPE_BOOL],
|
|
184
|
-
[MODULES.service, 'Required Info of Service-Pubkey', 128, [], ValueType.TYPE_VEC_U8],
|
|
185
|
-
[MODULES.service, 'Required Info', 129, [], ValueType.TYPE_VEC_VEC_U8],
|
|
190
|
+
[MODULES.reward, 'Permission', 151, [], ValueType.TYPE_ADDRESS, 'Permission object address.'],
|
|
191
|
+
[MODULES.reward, 'Rewards Remaining', 152, [], ValueType.TYPE_U64, 'Number of rewards to be claimed.'],
|
|
192
|
+
[MODULES.reward, 'Reward Count Supplied', 153, [], ValueType.TYPE_U64, 'Total rewards supplied.'],
|
|
193
|
+
[MODULES.reward, 'Guard Count', 154, [], ValueType.TYPE_U64, 'The number of claiming guards.'],
|
|
194
|
+
[MODULES.reward, 'Has Guard', 155, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL, 'Whether a claiming guard is set up?', 'Input:address'],
|
|
195
|
+
[MODULES.reward, 'Guard Portion', 156, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64, 'The portions of rewards, that can be claimed if a certain guard condition is met.', 'Input:address'],
|
|
196
|
+
[MODULES.reward, 'Deadline', 157, [], ValueType.TYPE_U64, 'The expiration time of claiming.'],
|
|
197
|
+
[MODULES.reward, 'Has Claimed by An Address', 158, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL, 'Whether a certain address has claimed rewards?', 'Input:address'],
|
|
198
|
+
[MODULES.reward, 'Portions Claimed by An Address', 159, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64, 'The portions of rewards that have been claimed by a certain address.'],
|
|
199
|
+
[MODULES.reward, 'Number of Addresses Claimed', 160, [], ValueType.TYPE_U64, 'Number of addresses that have claimed rewards.'],
|
|
200
|
+
[MODULES.reward, 'Is Sponsor', 161, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL, 'Whether an address is a sponsor of the reward pool?', 'Input:address'],
|
|
201
|
+
[MODULES.reward, 'Portions by A Sponsor', 162, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64, 'The portions of sponsorship reward pools for a certain address.', 'Input:address'],
|
|
202
|
+
[MODULES.reward, 'Number of Sponsors', 163, [], ValueType.TYPE_U64, 'Number of sponsors in the sponsorship reward pool.'],
|
|
203
|
+
[MODULES.reward, 'Allow Repeated Claims', 164, [], ValueType.TYPE_BOOL, 'Whether to allow repeated claims?'],
|
|
186
204
|
|
|
187
|
-
[MODULES.
|
|
188
|
-
[MODULES.reward, 'Reward Count Left', 152, [], ValueType.TYPE_U64],
|
|
189
|
-
[MODULES.reward, 'Reward Count Supplied', 153, [], ValueType.TYPE_U64],
|
|
190
|
-
[MODULES.reward, 'Guard Count', 154, [], ValueType.TYPE_U64],
|
|
191
|
-
[MODULES.reward, 'Has Guard', 155, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
192
|
-
[MODULES.reward, 'Guard Portion', 156, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64],
|
|
193
|
-
[MODULES.reward, 'Deadline', 157, [], ValueType.TYPE_U64],
|
|
194
|
-
[MODULES.reward, 'Has Claimed by Address', 158, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
195
|
-
[MODULES.reward, 'Claimed by Address', 159, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64],
|
|
196
|
-
[MODULES.reward, 'Address Count Claimed', 160, [], ValueType.TYPE_U64],
|
|
197
|
-
[MODULES.reward, 'Is Sponsor', 161, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
198
|
-
[MODULES.reward, 'Portion by Sponsor', 162, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64],
|
|
199
|
-
[MODULES.reward, 'Sponsor Count', 163, [], ValueType.TYPE_U64],
|
|
200
|
-
[MODULES.reward, 'Allow Repeat Claim', 164, [], ValueType.TYPE_BOOL],
|
|
201
|
-
[MODULES.reward, 'Claimed Portion by Address', 165, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64],
|
|
202
|
-
|
|
203
|
-
[MODULES.vote, 'Permission', 171, [], ValueType.TYPE_ADDRESS],
|
|
205
|
+
/* [MODULES.vote, 'Permission', 171, [], ValueType.TYPE_ADDRESS],
|
|
204
206
|
[MODULES.vote, 'Options Locked', 172, [], ValueType.TYPE_BOOL],
|
|
205
207
|
[MODULES.vote, 'Deadline Locked', 173, [], ValueType.TYPE_BOOL],
|
|
206
208
|
[MODULES.vote, 'Vote-Guard Locked', 174, [], ValueType.TYPE_BOOL],
|
|
@@ -212,33 +214,33 @@ export class Guard {
|
|
|
212
214
|
[MODULES.vote, 'Vote-Guard', 180, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64],
|
|
213
215
|
[MODULES.vote, 'Has Voted by Address', 181, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
214
216
|
[MODULES.vote, 'Voted Weight by Address', 182, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64],
|
|
215
|
-
[MODULES.vote, 'Has Option', 183, [ValueType.
|
|
216
|
-
[MODULES.vote, 'Has Object of Option', 184, [ValueType.
|
|
217
|
-
[MODULES.vote, 'Option Object', 185, [ValueType.
|
|
218
|
-
[MODULES.vote, 'Option Count', 186, [ValueType.
|
|
219
|
-
[MODULES.vote, 'Option Votes', 187, [ValueType.
|
|
217
|
+
[MODULES.vote, 'Has Option', 183, [ValueType.TYPE_STRING], ValueType.TYPE_BOOL],
|
|
218
|
+
[MODULES.vote, 'Has Object of Option', 184, [ValueType.TYPE_STRING], ValueType.TYPE_BOOL],
|
|
219
|
+
[MODULES.vote, 'Option Object', 185, [ValueType.TYPE_STRING], ValueType.TYPE_ADDRESS],
|
|
220
|
+
[MODULES.vote, 'Option Count', 186, [ValueType.TYPE_STRING], ValueType.TYPE_U64],
|
|
221
|
+
[MODULES.vote, 'Option Votes', 187, [ValueType.TYPE_STRING], ValueType.TYPE_U64],
|
|
220
222
|
[MODULES.vote, 'Address Count Voted', 188, [], ValueType.TYPE_U64],
|
|
221
|
-
[MODULES.vote, 'Top1 Option by Addresses', 189, [], ValueType.
|
|
223
|
+
[MODULES.vote, 'Top1 Option by Addresses', 189, [], ValueType.TYPE_STRING],
|
|
222
224
|
[MODULES.vote, 'Top1 Count by Addresses', 190, [], ValueType.TYPE_U64],
|
|
223
|
-
[MODULES.vote, 'Top1 Option by Votes', 191, [], ValueType.
|
|
224
|
-
[MODULES.vote, 'Top1 Count by Votes', 192, [], ValueType.TYPE_U64],
|
|
225
|
-
|
|
226
|
-
[MODULES.wowok, 'Builder', 210, [], ValueType.TYPE_ADDRESS],
|
|
227
|
-
[MODULES.wowok, 'Everyone
|
|
228
|
-
[MODULES.wowok, 'Object of Entities', 212, [], ValueType.TYPE_ADDRESS],
|
|
229
|
-
[MODULES.wowok, 'Grantor Count', 213, [], ValueType.TYPE_U64],
|
|
230
|
-
[MODULES.wowok, 'Has Grantor', 214, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
231
|
-
[MODULES.wowok, 'Grantor Name', 215, [ValueType.TYPE_ADDRESS], ValueType.
|
|
232
|
-
[MODULES.wowok, 'Grantor Registration Time', 216, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64],
|
|
233
|
-
[MODULES.wowok, 'Grantor Expired Time', 217, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64],
|
|
234
|
-
[MODULES.wowok, 'Grantee Object for Grantor', 218, [ValueType.TYPE_ADDRESS], ValueType.TYPE_ADDRESS],
|
|
235
|
-
|
|
236
|
-
[MODULES.entity, '
|
|
237
|
-
[MODULES.entity, 'Likes', 231, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64],
|
|
238
|
-
[MODULES.entity, 'Dislikes', 232, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64],
|
|
239
|
-
[MODULES.entity, 'Entity Info', 233, [ValueType.TYPE_ADDRESS], ValueType.TYPE_VEC_U8],
|
|
240
|
-
[MODULES.entity, 'Has Resource by Entity', 234, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL],
|
|
241
|
-
[MODULES.entity, 'Entity Resource', 235, [ValueType.TYPE_ADDRESS], ValueType.TYPE_ADDRESS],
|
|
225
|
+
[MODULES.vote, 'Top1 Option by Votes', 191, [], ValueType.TYPE_STRING],
|
|
226
|
+
[MODULES.vote, 'Top1 Count by Votes', 192, [], ValueType.TYPE_U64], */
|
|
227
|
+
|
|
228
|
+
[MODULES.wowok, 'Builder', 210, [], ValueType.TYPE_ADDRESS, 'Builder address of Wowok.'],
|
|
229
|
+
[MODULES.wowok, 'Everyone Guard', 211, [], ValueType.TYPE_ADDRESS, 'A guard that all addresses can pass through.'],
|
|
230
|
+
[MODULES.wowok, 'Object of Entities', 212, [], ValueType.TYPE_ADDRESS, 'The address of entity information object.'],
|
|
231
|
+
[MODULES.wowok, 'Grantor Count', 213, [], ValueType.TYPE_U64, 'Number of registered grantors.'],
|
|
232
|
+
[MODULES.wowok, 'Has Grantor', 214, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL, 'Whether an address has been registered as a grantor?', , 'Input:address'],
|
|
233
|
+
[MODULES.wowok, 'Grantor Name', 215, [ValueType.TYPE_ADDRESS], ValueType.TYPE_STRING, "Name of a grantor.", 'Input:address'],
|
|
234
|
+
[MODULES.wowok, 'Grantor Registration Time', 216, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64, 'Registration time of a grantor.', 'Input:address'],
|
|
235
|
+
[MODULES.wowok, 'Grantor Expired Time', 217, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64, 'The expiration time of a grantor.', 'Input:address'],
|
|
236
|
+
[MODULES.wowok, 'Grantee Object for Grantor', 218, [ValueType.TYPE_ADDRESS], ValueType.TYPE_ADDRESS, 'Grantee repository address of a grantor.', 'Input:address'],
|
|
237
|
+
|
|
238
|
+
[MODULES.entity, 'Contains Entity?', 230, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL, 'Is an entity already registered?', 'Input:address'],
|
|
239
|
+
[MODULES.entity, 'Likes', 231, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64, 'The number of likes for an address by other addresses.', 'Input:address'],
|
|
240
|
+
[MODULES.entity, 'Dislikes', 232, [ValueType.TYPE_ADDRESS], ValueType.TYPE_U64, 'The number of dislikes for an address by other addresses.', 'Input:address'],
|
|
241
|
+
[MODULES.entity, 'Entity Info', 233, [ValueType.TYPE_ADDRESS], ValueType.TYPE_VEC_U8, 'Public information about an entity.', 'Input:address'],
|
|
242
|
+
[MODULES.entity, 'Has Resource by Entity?', 234, [ValueType.TYPE_ADDRESS], ValueType.TYPE_BOOL, 'Whether an entity created a resource?', 'Input:address'],
|
|
243
|
+
[MODULES.entity, 'Entity Resource', 235, [ValueType.TYPE_ADDRESS], ValueType.TYPE_ADDRESS, 'The address of a resource object created by an entity.', 'Input:address'],
|
|
242
244
|
];
|
|
243
245
|
|
|
244
246
|
static BoolCmd = Guard.QUERIES.filter(q => q[4] === ValueType.TYPE_BOOL);
|
|
@@ -266,16 +268,32 @@ export class Guard {
|
|
|
266
268
|
}
|
|
267
269
|
static NumberOptions = () : Guard_Options[] => {
|
|
268
270
|
const r: Guard_Options[] = [...Guard.CmdFilter(ValueType.TYPE_U8), ...Guard.CmdFilter(ValueType.TYPE_U64),
|
|
269
|
-
...Guard.CmdFilter(ValueType.TYPE_U128), ...Guard.CmdFilter(ValueType.TYPE_U256)].map((v)=> {
|
|
270
|
-
|
|
271
|
-
return r;
|
|
271
|
+
...Guard.CmdFilter(ValueType.TYPE_U128), ...Guard.CmdFilter(ValueType.TYPE_U256)].map((v)=> {
|
|
272
|
+
return {from:'query', name:v[1], value:v[2], group:FirstLetterUppercase(v[0])}});
|
|
273
|
+
return r.concat(Guard.Crunchings);
|
|
272
274
|
}
|
|
275
|
+
|
|
276
|
+
static Signer:Guard_Options = {from:'type', name:'Txn Signer', value:ContextType.TYPE_SIGNER, group:'Txn Functions'};
|
|
277
|
+
static Time:Guard_Options = {from:'type', name:'Txn Time', value:ContextType.TYPE_CLOCK, group:'Txn Functions'};
|
|
278
|
+
static Logics = () :Guard_Options[] => LogicsInfo.map((v) => { return {from:'type', name:v[1] as string, value:v[0] as number, group:'Compare or Logic'}});
|
|
279
|
+
static Crunchings: Guard_Options[] = [
|
|
280
|
+
{from:'type', name:'Txn Time', value:ContextType.TYPE_CLOCK, group:'Txn Functions'},
|
|
281
|
+
{from:'type', name:'PositiveNumber Add (+)', value:OperatorType.TYPE_NUMBER_ADD, group:'Number Crunching'},
|
|
282
|
+
{from:'type', name:'PositiveNumber Subtract (-)', value:OperatorType.TYPE_NUMBER_SUBTRACT, group:'Number Crunching'},
|
|
283
|
+
{from:'type', name:'PositiveNumber Multiply (*)', value:OperatorType.TYPE_NUMBER_MULTIPLY, group:'Number Crunching'},
|
|
284
|
+
{from:'type', name:'PositiveNumber Devide (/)', value:OperatorType.TYPE_NUMBER_DEVIDE, group:'Number Crunching'},
|
|
285
|
+
{from:'type', name:'PositiveNumber Mod (%)', value:OperatorType.TYPE_NUMBER_MOD, group:'Number Crunching'},
|
|
286
|
+
]
|
|
287
|
+
|
|
273
288
|
static CommonOptions = (retType:ValueType) : Guard_Options[] => {
|
|
274
289
|
return Guard.CmdFilter(retType).map((v)=> {return {from:'query', name:v[1], value:v[2], group:FirstLetterUppercase(v[0])}});
|
|
275
290
|
}
|
|
291
|
+
|
|
276
292
|
static AllOptions = () : Guard_Options[] => {
|
|
277
|
-
|
|
293
|
+
var r:Guard_Options[] = Guard.QUERIES.map((v)=>{return {from:'query', name:v[1], value:v[2], group:FirstLetterUppercase(v[0])}});
|
|
294
|
+
return [...r, ...Guard.Crunchings, ...Guard.Logics(), Guard.Signer, Guard.Time]
|
|
278
295
|
}
|
|
296
|
+
|
|
279
297
|
static StringOptions = () : Guard_Options[] => {
|
|
280
298
|
return [...Guard.CmdFilter(ValueType.TYPE_VEC_U8), ...Guard.CmdFilter(ValueType.TYPE_STRING)].map((v) => {
|
|
281
299
|
return {from:'query', name:v[1], value:v[2], group:FirstLetterUppercase(v[0])};
|
|
@@ -283,12 +301,11 @@ export class Guard {
|
|
|
283
301
|
}
|
|
284
302
|
static BoolOptions = () : Guard_Options[] => {
|
|
285
303
|
const n1:Guard_Options[] = Guard.BoolCmd.map((v)=> { return {from:'query', name:v[1], value:v[2], group:FirstLetterUppercase(v[0])}});
|
|
286
|
-
|
|
287
|
-
return [...n1, ...n2]
|
|
304
|
+
return [...n1, ...Guard.Logics()];
|
|
288
305
|
}
|
|
289
306
|
static AddressOptions = () : Guard_Options[] => {
|
|
290
307
|
const n1:Guard_Options[] = Guard.QUERIES.filter(q => q[4] === ValueType.TYPE_ADDRESS).map((v)=> { return {from:'query', name:v[1], value:v[2], group:FirstLetterUppercase(v[0])}});
|
|
291
|
-
n1.push(
|
|
308
|
+
n1.push(Guard.Signer);
|
|
292
309
|
return [...n1]
|
|
293
310
|
}
|
|
294
311
|
|
|
@@ -345,9 +362,13 @@ export class GuardConstantHelper {
|
|
|
345
362
|
}
|
|
346
363
|
}
|
|
347
364
|
|
|
348
|
-
static add_constant(constants:GuardConstant, identifier:number, type:ValueType, value:any, bNeedSerialize=true) {
|
|
349
|
-
if (!GuardConstantHelper.IsValidIndentifier(identifier))
|
|
350
|
-
|
|
365
|
+
static add_constant(constants:GuardConstant, identifier:number, type:ValueType|ContextType, value:any, bNeedSerialize=true) {
|
|
366
|
+
if (!GuardConstantHelper.IsValidIndentifier(identifier)) {
|
|
367
|
+
ERROR(Errors.InvalidParam, 'add_constant identifier')
|
|
368
|
+
}
|
|
369
|
+
if (!value) {
|
|
370
|
+
ERROR(Errors.InvalidParam, 'add_constant value')
|
|
371
|
+
}
|
|
351
372
|
|
|
352
373
|
switch (type) {
|
|
353
374
|
case ValueType.TYPE_BOOL:
|
|
@@ -368,18 +389,16 @@ export class GuardConstantHelper {
|
|
|
368
389
|
case ValueType.TYPE_VEC_BOOL:
|
|
369
390
|
case ValueType.TYPE_VEC_U128:
|
|
370
391
|
case ValueType.TYPE_VEC_U256:
|
|
392
|
+
case ValueType.TYPE_STRING:
|
|
393
|
+
case ValueType.TYPE_VEC_U8:
|
|
371
394
|
let ser = SER_VALUE.find(s=>s.type==type);
|
|
372
395
|
if (!ser) ERROR(Errors.Fail, 'add_constant: invalid type');
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
return
|
|
376
|
-
case ValueType.TYPE_VEC_U8:
|
|
377
|
-
if (typeof(value) === 'string') {
|
|
378
|
-
constants.set(identifier, {type:type, value:Bcs.getInstance().ser(ValueType.TYPE_STRING, value)})
|
|
396
|
+
if (bNeedSerialize) {
|
|
397
|
+
constants.set(identifier, {type:type, value:Bcs.getInstance().ser(ser!.type as number, value)})
|
|
379
398
|
} else {
|
|
380
|
-
constants.set(identifier,
|
|
399
|
+
constants.set(identifier, {type:type, value:value})
|
|
381
400
|
}
|
|
382
|
-
return
|
|
401
|
+
return
|
|
383
402
|
default:
|
|
384
403
|
ERROR(Errors.Fail, 'add_constant serialize not impl yet')
|
|
385
404
|
}
|
|
@@ -388,7 +407,7 @@ export class GuardConstantHelper {
|
|
|
388
407
|
export class GuardMaker {
|
|
389
408
|
protected data : Uint8Array[] = [];
|
|
390
409
|
protected type_validator : Data_Type[] = [];
|
|
391
|
-
protected constant : GuardConstant = new Map();
|
|
410
|
+
protected constant : GuardConstant = new Map<number, Guard_Variable>();
|
|
392
411
|
|
|
393
412
|
private static index: number = 0;
|
|
394
413
|
private static get_index() {
|
|
@@ -400,8 +419,8 @@ export class GuardMaker {
|
|
|
400
419
|
|
|
401
420
|
constructor() { }
|
|
402
421
|
|
|
403
|
-
add_constant(type:ConstantType, value:any, bNeedSerialize=true) : number {
|
|
404
|
-
|
|
422
|
+
add_constant(type:ConstantType, value:any, identifier?:number, bNeedSerialize=true) : number {
|
|
423
|
+
if (identifier === undefined) identifier = GuardMaker.get_index();
|
|
405
424
|
if (type == ContextType.TYPE_WITNESS_ID) {
|
|
406
425
|
// add witness to constant
|
|
407
426
|
GuardConstantHelper.add_future_constant(this.constant, identifier, value, undefined, bNeedSerialize);
|
|
@@ -443,9 +462,10 @@ export class GuardMaker {
|
|
|
443
462
|
case ValueType.TYPE_VEC_U256:
|
|
444
463
|
this.serValueParam(type, param);
|
|
445
464
|
break;
|
|
465
|
+
case ValueType.TYPE_STRING:
|
|
446
466
|
case ValueType.TYPE_VEC_U8:
|
|
447
467
|
if (!param) ERROR(Errors.InvalidParam, 'param');
|
|
448
|
-
this.data.push(Bcs.getInstance().ser(ValueType.TYPE_U8, type));
|
|
468
|
+
this.data.push(Bcs.getInstance().ser(ValueType.TYPE_U8, type)); //@ USE VEC-U8
|
|
449
469
|
if (typeof(param) == 'string') {
|
|
450
470
|
this.data.push(Bcs.getInstance().ser(ValueType.TYPE_STRING, param));
|
|
451
471
|
} else {
|
|
@@ -538,6 +558,7 @@ export class GuardMaker {
|
|
|
538
558
|
|
|
539
559
|
add_logic(type:OperatorType) : GuardMaker {
|
|
540
560
|
let splice_len = 2;
|
|
561
|
+
let ret = ValueType.TYPE_BOOL;
|
|
541
562
|
switch (type) {
|
|
542
563
|
case OperatorType.TYPE_LOGIC_AS_U256_GREATER:
|
|
543
564
|
case OperatorType.TYPE_LOGIC_AS_U256_GREATER_EQUAL:
|
|
@@ -565,17 +586,52 @@ export class GuardMaker {
|
|
|
565
586
|
if (this.type_validator[this.type_validator.length -1] != ValueType.TYPE_BOOL) { ERROR(Errors.Fail, 'type_validator check') }
|
|
566
587
|
if (this.type_validator[this.type_validator.length -2] != ValueType.TYPE_BOOL) { ERROR(Errors.Fail, 'type_validator check') }
|
|
567
588
|
break;
|
|
589
|
+
case OperatorType.TYPE_LOGIC_AND3:
|
|
590
|
+
case OperatorType.TYPE_LOGIC_OR3:
|
|
591
|
+
splice_len = 3;
|
|
592
|
+
if (this.type_validator.length < splice_len) { ERROR(Errors.Fail, 'type_validator.length') }
|
|
593
|
+
if (this.type_validator[this.type_validator.length -1] != ValueType.TYPE_BOOL) { ERROR(Errors.Fail, 'type_validator check') }
|
|
594
|
+
if (this.type_validator[this.type_validator.length -2] != ValueType.TYPE_BOOL) { ERROR(Errors.Fail, 'type_validator check') }
|
|
595
|
+
if (this.type_validator[this.type_validator.length -3] != ValueType.TYPE_BOOL) { ERROR(Errors.Fail, 'type_validator check') }
|
|
596
|
+
break;
|
|
597
|
+
case OperatorType.TYPE_LOGIC_AND4:
|
|
598
|
+
case OperatorType.TYPE_LOGIC_OR4:
|
|
599
|
+
splice_len = 4;
|
|
600
|
+
if (this.type_validator.length < splice_len) { ERROR(Errors.Fail, 'type_validator.length') }
|
|
601
|
+
if (this.type_validator[this.type_validator.length -1] != ValueType.TYPE_BOOL) { ERROR(Errors.Fail, 'type_validator check') }
|
|
602
|
+
if (this.type_validator[this.type_validator.length -2] != ValueType.TYPE_BOOL) { ERROR(Errors.Fail, 'type_validator check') }
|
|
603
|
+
if (this.type_validator[this.type_validator.length -3] != ValueType.TYPE_BOOL) { ERROR(Errors.Fail, 'type_validator check') }
|
|
604
|
+
if (this.type_validator[this.type_validator.length -4] != ValueType.TYPE_BOOL) { ERROR(Errors.Fail, 'type_validator check') }
|
|
605
|
+
break;
|
|
568
606
|
case OperatorType.TYPE_LOGIC_ALWAYS_TRUE:
|
|
569
607
|
break;
|
|
608
|
+
case OperatorType.TYPE_NUMBER_ADD:
|
|
609
|
+
case OperatorType.TYPE_NUMBER_DEVIDE:
|
|
610
|
+
case OperatorType.TYPE_NUMBER_MULTIPLY:
|
|
611
|
+
case OperatorType.TYPE_NUMBER_SUBTRACT:
|
|
612
|
+
case OperatorType.TYPE_NUMBER_MOD:
|
|
613
|
+
if (this.type_validator.length < splice_len) { ERROR(Errors.Fail, 'type_validator.length') }
|
|
614
|
+
if (!GuardMaker.IsNumberType(this.type_validator[this.type_validator.length -1])) { ERROR(Errors.Fail, 'type_validator check') }
|
|
615
|
+
if (!GuardMaker.IsNumberType(this.type_validator[this.type_validator.length -2])) { ERROR(Errors.Fail, 'type_validator check') }
|
|
616
|
+
ret = ValueType.TYPE_U256;
|
|
617
|
+
break;
|
|
570
618
|
default:
|
|
571
619
|
ERROR(Errors.InvalidParam, 'add_logic type invalid' + type)
|
|
572
620
|
}
|
|
573
621
|
this.data.push(Bcs.getInstance().ser(ValueType.TYPE_U8, type)); // TYPE
|
|
574
622
|
this.type_validator.splice(this.type_validator.length - splice_len); // delete type stack
|
|
575
|
-
this.type_validator.push(
|
|
623
|
+
this.type_validator.push(ret); // add bool to type stack
|
|
576
624
|
return this;
|
|
577
625
|
}
|
|
578
626
|
|
|
627
|
+
static IsNumberType(type:Data_Type) : boolean {
|
|
628
|
+
return (type === ValueType.TYPE_U8 || type === ValueType.TYPE_U64 || type === ValueType.TYPE_U128 || type === ValueType.TYPE_U256)
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
hasIdentifier(id:number) : boolean {
|
|
632
|
+
return this.constant.has(id)
|
|
633
|
+
}
|
|
634
|
+
|
|
579
635
|
build(bNot = false) : GuardMaker {
|
|
580
636
|
//console.log(this.type_validator);
|
|
581
637
|
//this.data.forEach((value:Uint8Array) => console.log(value));
|
package/src/machine.ts
CHANGED
|
@@ -144,10 +144,17 @@ export class Machine {
|
|
|
144
144
|
});
|
|
145
145
|
}
|
|
146
146
|
} else if (forward?.permission !== undefined && IsValidU64(forward.permission)) {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
147
|
+
if (forward?.guard) {
|
|
148
|
+
f = this.txb.moveCall({
|
|
149
|
+
target:Protocol.Instance().MachineFn('forward3') as FnCallType,
|
|
150
|
+
arguments:[this.txb.pure.u64(forward.permission), this.txb.pure.u16(weight), this.txb.object(Protocol.TXB_OBJECT(this.txb, forward.guard))]
|
|
151
|
+
});
|
|
152
|
+
} else {
|
|
153
|
+
f = this.txb.moveCall({
|
|
154
|
+
target:Protocol.Instance().MachineFn('forward4') as FnCallType,
|
|
155
|
+
arguments:[this.txb.pure.u64(forward.permission), this.txb.pure.u16(weight)]
|
|
156
|
+
});
|
|
157
|
+
}
|
|
151
158
|
} else {
|
|
152
159
|
ERROR(Errors.InvalidParam, 'forward')
|
|
153
160
|
}
|
|
@@ -511,8 +518,8 @@ export class Machine {
|
|
|
511
518
|
if (!IsValidName(forward.name)) return 'Forward name invalid'
|
|
512
519
|
if (forward?.namedOperator && !IsValidName_AllowEmpty(forward?.namedOperator)) return 'Progress Operator invalid';
|
|
513
520
|
if (forward?.permission && !Permission.IsValidPermissionIndex(forward?.permission)) return 'Permission index invalid';
|
|
514
|
-
if (!forward?.permission && !forward?.namedOperator) return '
|
|
515
|
-
if (forward?.weight && !
|
|
521
|
+
if (!forward?.permission && !forward?.namedOperator) return 'Business-Permissions invalid';
|
|
522
|
+
if (forward?.weight && !IsValidU64(forward.weight)) return 'Weight invalid';
|
|
516
523
|
return ''
|
|
517
524
|
}
|
|
518
525
|
|
package/src/passport.ts
CHANGED
|
@@ -50,6 +50,7 @@ export interface FutureFill {
|
|
|
50
50
|
future?: string;
|
|
51
51
|
cmd?: number;
|
|
52
52
|
type?: string;
|
|
53
|
+
identifier?: number;
|
|
53
54
|
}
|
|
54
55
|
export interface PassportQuery {
|
|
55
56
|
guard: (string | TransactionObjectInput)[];
|
|
@@ -95,13 +96,17 @@ export class GuardParser {
|
|
|
95
96
|
case ValueType.TYPE_OPTION_U64:
|
|
96
97
|
case ValueType.TYPE_OPTION_U256:
|
|
97
98
|
case ValueType.TYPE_VEC_U256:
|
|
99
|
+
case ValueType.TYPE_STRING:
|
|
100
|
+
case ValueType.TYPE_OPTION_STRING:
|
|
101
|
+
case ValueType.TYPE_OPTION_VEC_U8:
|
|
102
|
+
case ValueType.TYPE_VEC_STRING:
|
|
98
103
|
let de = SER_VALUE.find(s=>s.type==v.type);
|
|
99
104
|
if (!de) ERROR(Errors.Fail, 'GuardObject de error')
|
|
100
105
|
value = Bcs.getInstance().de(de!.type as number, Uint8Array.from(v.value));
|
|
101
106
|
break;
|
|
102
107
|
|
|
103
108
|
default:
|
|
104
|
-
ERROR(Errors.Fail, 'GuardObject constant type invalid')
|
|
109
|
+
ERROR(Errors.Fail, 'GuardObject constant type invalid:' + v.type)
|
|
105
110
|
}
|
|
106
111
|
constants.push({identifier:v.identifier, type:v.type, value:value});
|
|
107
112
|
});
|
|
@@ -126,6 +131,15 @@ export class GuardParser {
|
|
|
126
131
|
case OperatorType.TYPE_LOGIC_NOT:
|
|
127
132
|
case OperatorType.TYPE_LOGIC_AND:
|
|
128
133
|
case OperatorType.TYPE_LOGIC_OR:
|
|
134
|
+
case OperatorType.TYPE_LOGIC_AND3:
|
|
135
|
+
case OperatorType.TYPE_LOGIC_OR3:
|
|
136
|
+
case OperatorType.TYPE_LOGIC_AND4:
|
|
137
|
+
case OperatorType.TYPE_LOGIC_OR4:
|
|
138
|
+
case OperatorType.TYPE_NUMBER_ADD:
|
|
139
|
+
case OperatorType.TYPE_NUMBER_DEVIDE:
|
|
140
|
+
case OperatorType.TYPE_NUMBER_MOD:
|
|
141
|
+
case OperatorType.TYPE_NUMBER_MULTIPLY:
|
|
142
|
+
case OperatorType.TYPE_NUMBER_SUBTRACT:
|
|
129
143
|
break;
|
|
130
144
|
case ContextType.TYPE_CONSTANT:
|
|
131
145
|
identifier = arr.shift()! as number; // identifier
|
|
@@ -305,7 +319,19 @@ export class GuardParser {
|
|
|
305
319
|
case OperatorType.TYPE_LOGIC_AS_U256_LESSER:
|
|
306
320
|
case OperatorType.TYPE_LOGIC_AS_U256_LESSER_EQUAL:
|
|
307
321
|
case OperatorType.TYPE_LOGIC_AS_U256_EQUAL:
|
|
308
|
-
|
|
322
|
+
case OperatorType.TYPE_NUMBER_ADD:
|
|
323
|
+
case OperatorType.TYPE_NUMBER_DEVIDE:
|
|
324
|
+
case OperatorType.TYPE_NUMBER_MOD:
|
|
325
|
+
case OperatorType.TYPE_NUMBER_MULTIPLY:
|
|
326
|
+
case OperatorType.TYPE_NUMBER_SUBTRACT:
|
|
327
|
+
if (current.type === OperatorType.TYPE_LOGIC_AS_U256_GREATER || current.type === OperatorType.TYPE_LOGIC_AS_U256_GREATER_EQUAL ||
|
|
328
|
+
current.type === OperatorType.TYPE_LOGIC_AS_U256_LESSER || current.type === OperatorType.TYPE_LOGIC_AS_U256_LESSER_EQUAL ||
|
|
329
|
+
current.type === OperatorType.TYPE_LOGIC_AS_U256_EQUAL) {
|
|
330
|
+
current.ret_type = ValueType.TYPE_BOOL;
|
|
331
|
+
} else {
|
|
332
|
+
current.ret_type = ValueType.TYPE_U256;
|
|
333
|
+
}
|
|
334
|
+
|
|
309
335
|
if (stack.length < 2) ERROR(Errors.Fail, 'ResolveData: ' + current.type);
|
|
310
336
|
for (let i = 0; i < 2; ++i) {
|
|
311
337
|
let p = stack.pop() as DeGuardData;
|
|
@@ -322,6 +348,7 @@ export class GuardParser {
|
|
|
322
348
|
current.ret_type = ValueType.TYPE_BOOL;
|
|
323
349
|
if (stack.length < 2) ERROR(Errors.Fail, 'ResolveData: ' + current.type);
|
|
324
350
|
var p1 = stack.pop() as DeGuardData; var p2 = stack.pop() as DeGuardData;
|
|
351
|
+
console.log(p1); console.log(p2)
|
|
325
352
|
if (!p1.ret_type || !p2.ret_type) ERROR(Errors.Fail, 'ResolveData: ' + current.type + ' INVALID param type');
|
|
326
353
|
if (p1.ret_type != p2.ret_type) ERROR(Errors.Fail, 'ResolveData: ' + current.type + ' param type not match');
|
|
327
354
|
|
|
@@ -392,6 +419,7 @@ export class GuardParser {
|
|
|
392
419
|
case ValueType.TYPE_OPTION_U256:
|
|
393
420
|
case ValueType.TYPE_OPTION_U64:
|
|
394
421
|
case ValueType.TYPE_OPTION_U8:
|
|
422
|
+
case ValueType.TYPE_STRING:
|
|
395
423
|
current.ret_type = current.type;
|
|
396
424
|
stack.push(current);
|
|
397
425
|
return;
|
|
@@ -498,15 +526,15 @@ export class GuardParser {
|
|
|
498
526
|
this.guard_list.forEach((g) => {
|
|
499
527
|
g.query_list.forEach((v) => {
|
|
500
528
|
if (typeof(v) !== 'string') {
|
|
501
|
-
ret.push({guard:g.id, index:v.index, witness:v.value_or_witness, cmd:v.cmd});
|
|
529
|
+
ret.push({guard:g.id, index:v.index, witness:v.value_or_witness, cmd:v.cmd, identifier:v?.identifier});
|
|
502
530
|
}
|
|
503
531
|
})
|
|
504
532
|
// cmd already in query_list, so filter it out.
|
|
505
533
|
g.constant.filter((v)=>v.type === ContextType.TYPE_WITNESS_ID && v.cmd === undefined).forEach((v) => {
|
|
506
|
-
ret.push({guard:g.id, index:v.index, witness:v.value_or_witness});
|
|
534
|
+
ret.push({guard:g.id, index:v.index, witness:v.value_or_witness, identifier:v?.identifier});
|
|
507
535
|
})
|
|
508
536
|
g.input_witness.forEach((v) => {
|
|
509
|
-
ret.push({guard:g.id, index:v.index, witness:v.value_or_witness});
|
|
537
|
+
ret.push({guard:g.id, index:v.index, witness:v.value_or_witness, identifier:v?.identifier});
|
|
510
538
|
})
|
|
511
539
|
}); return ret;
|
|
512
540
|
}
|
|
@@ -542,6 +570,11 @@ export class GuardParser {
|
|
|
542
570
|
case OperatorType.TYPE_LOGIC_NOT:
|
|
543
571
|
case OperatorType.TYPE_LOGIC_AND:
|
|
544
572
|
case OperatorType.TYPE_LOGIC_OR:
|
|
573
|
+
case OperatorType.TYPE_NUMBER_ADD:
|
|
574
|
+
case OperatorType.TYPE_NUMBER_DEVIDE:
|
|
575
|
+
case OperatorType.TYPE_NUMBER_MOD:
|
|
576
|
+
case OperatorType.TYPE_NUMBER_MULTIPLY:
|
|
577
|
+
case OperatorType.TYPE_NUMBER_SUBTRACT:
|
|
545
578
|
break;
|
|
546
579
|
case ContextType.TYPE_CONSTANT:
|
|
547
580
|
arr.splice(0, 1); // identifier of constant
|
package/src/permission.ts
CHANGED
|
@@ -78,7 +78,7 @@ export enum PermissionIndex {
|
|
|
78
78
|
progress_context_repository = 653,
|
|
79
79
|
progress_unhold = 654,
|
|
80
80
|
progress_parent = 655,
|
|
81
|
-
user_defined_start =
|
|
81
|
+
user_defined_start = 1000,
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
export interface PermissionInfoType {
|
|
@@ -549,9 +549,10 @@ export class Permission {
|
|
|
549
549
|
static PERMISSION_OWNER = 1;
|
|
550
550
|
static PERMISSION_ADMIN = 2;
|
|
551
551
|
static PERMISSION_OWNER_AND_ADMIN = 3;
|
|
552
|
+
static BUSINESS_PERMISSIONS_START = PermissionIndex.user_defined_start;
|
|
552
553
|
|
|
553
554
|
static IsValidUserDefinedIndex = (index:number) => {
|
|
554
|
-
return index >=
|
|
555
|
+
return index >= Permission.BUSINESS_PERMISSIONS_START && IsValidUintLarge(index)
|
|
555
556
|
}
|
|
556
557
|
|
|
557
558
|
static IsValidPermissionIndex = (index:PermissionIndexType) : boolean => {
|
package/src/progress.ts
CHANGED
|
@@ -268,22 +268,23 @@ export class Progress {
|
|
|
268
268
|
ERROR(Errors.IsValidAddress, 'sub_id');
|
|
269
269
|
}
|
|
270
270
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
271
|
+
const diliverable = this.txb.pure.option('address', deliverables_address ? deliverables_address : undefined);
|
|
272
|
+
const sub = this.txb.pure.option('address', sub_id ? sub_id : undefined);
|
|
273
|
+
const clock = this.txb.sharedObjectRef(Protocol.CLOCK_OBJECT);
|
|
274
|
+
|
|
274
275
|
if (passport) {
|
|
275
276
|
this.txb.moveCall({
|
|
276
277
|
target:Protocol.Instance().ProgressFn('next_with_passport') as FnCallType,
|
|
277
278
|
arguments: [passport, Protocol.TXB_OBJECT(this.txb, this.object), Protocol.TXB_OBJECT(this.txb, this.machine),
|
|
278
279
|
this.txb.pure.string(next.next_node_name),
|
|
279
280
|
this.txb.pure.string(next.forward), diliverable, sub,
|
|
280
|
-
Protocol.TXB_OBJECT(this.txb, this.permission)],
|
|
281
|
+
Protocol.TXB_OBJECT(this.txb, this.permission), this.txb.object(clock)],
|
|
281
282
|
})
|
|
282
283
|
} else {
|
|
283
284
|
this.txb.moveCall({
|
|
284
285
|
target:Protocol.Instance().ProgressFn('next') as FnCallType,
|
|
285
286
|
arguments: [Protocol.TXB_OBJECT(this.txb, this.object), Protocol.TXB_OBJECT(this.txb, this.machine), this.txb.pure.string(next.next_node_name),
|
|
286
|
-
this.txb.pure.string(next.forward), diliverable, sub, Protocol.TXB_OBJECT(this.txb, this.permission)],
|
|
287
|
+
this.txb.pure.string(next.forward), diliverable, sub, Protocol.TXB_OBJECT(this.txb, this.permission), this.txb.object(clock)],
|
|
287
288
|
})
|
|
288
289
|
}
|
|
289
290
|
}
|
package/src/protocol.ts
CHANGED
|
@@ -62,6 +62,11 @@ export type FnCallType = `${string}::${string}::${string}`;
|
|
|
62
62
|
|
|
63
63
|
export enum OperatorType {
|
|
64
64
|
TYPE_QUERY = 1, // query wowok object
|
|
65
|
+
TYPE_NUMBER_ADD = 2,
|
|
66
|
+
TYPE_NUMBER_SUBTRACT = 3,
|
|
67
|
+
TYPE_NUMBER_MULTIPLY = 4,
|
|
68
|
+
TYPE_NUMBER_DEVIDE = 5,
|
|
69
|
+
TYPE_NUMBER_MOD = 6,
|
|
65
70
|
|
|
66
71
|
TYPE_LOGIC_AS_U256_GREATER = 11,
|
|
67
72
|
TYPE_LOGIC_AS_U256_GREATER_EQUAL = 12,
|
|
@@ -74,20 +79,28 @@ export enum OperatorType {
|
|
|
74
79
|
TYPE_LOGIC_NOT = 19, // NOT
|
|
75
80
|
TYPE_LOGIC_AND = 20, // AND
|
|
76
81
|
TYPE_LOGIC_OR = 21, // OR
|
|
82
|
+
TYPE_LOGIC_AND3 = 22, // and
|
|
83
|
+
TYPE_LOGIC_AND4 = 23, // and
|
|
84
|
+
TYPE_LOGIC_OR3 = 24, // or
|
|
85
|
+
TYPE_LOGIC_OR4 = 25, // or
|
|
77
86
|
}
|
|
78
87
|
|
|
79
88
|
export const LogicsInfo = [
|
|
80
|
-
[OperatorType.TYPE_LOGIC_AS_U256_GREATER, '
|
|
81
|
-
[OperatorType.TYPE_LOGIC_AS_U256_GREATER_EQUAL, '
|
|
82
|
-
[OperatorType.TYPE_LOGIC_AS_U256_LESSER, '
|
|
83
|
-
[OperatorType.TYPE_LOGIC_AS_U256_LESSER_EQUAL, '
|
|
84
|
-
[OperatorType.TYPE_LOGIC_AS_U256_EQUAL, '
|
|
85
|
-
[OperatorType.TYPE_LOGIC_EQUAL, '
|
|
89
|
+
[OperatorType.TYPE_LOGIC_AS_U256_GREATER, 'Unsigned Integer >'],
|
|
90
|
+
[OperatorType.TYPE_LOGIC_AS_U256_GREATER_EQUAL, 'Unsigned Integer >='],
|
|
91
|
+
[OperatorType.TYPE_LOGIC_AS_U256_LESSER, 'Unsigned Integer <'],
|
|
92
|
+
[OperatorType.TYPE_LOGIC_AS_U256_LESSER_EQUAL, 'Unsigned Integer <='],
|
|
93
|
+
[OperatorType.TYPE_LOGIC_AS_U256_EQUAL, 'Unsigned Integer ='],
|
|
94
|
+
[OperatorType.TYPE_LOGIC_EQUAL, 'Equals ='],
|
|
86
95
|
[OperatorType.TYPE_LOGIC_HAS_SUBSTRING, 'Sub String'],
|
|
87
96
|
[OperatorType.TYPE_LOGIC_ALWAYS_TRUE, 'Always True'],
|
|
88
97
|
[OperatorType.TYPE_LOGIC_NOT, 'Not'],
|
|
89
98
|
[OperatorType.TYPE_LOGIC_AND, 'And'],
|
|
90
99
|
[OperatorType.TYPE_LOGIC_OR, 'Or'],
|
|
100
|
+
[OperatorType.TYPE_LOGIC_AND3, 'And 3'],
|
|
101
|
+
[OperatorType.TYPE_LOGIC_OR3, 'Or 3'],
|
|
102
|
+
[OperatorType.TYPE_LOGIC_AND4, 'And 4'],
|
|
103
|
+
[OperatorType.TYPE_LOGIC_OR4, 'Or 4'],
|
|
91
104
|
];
|
|
92
105
|
|
|
93
106
|
export enum ValueType {
|
|
@@ -123,21 +136,26 @@ export enum RepositoryValueType {
|
|
|
123
136
|
PositiveNumber_Vec = 203,
|
|
124
137
|
String = 204,
|
|
125
138
|
String_Vec = 205,
|
|
139
|
+
Bool = 206,
|
|
126
140
|
}
|
|
127
141
|
|
|
128
142
|
export const RepositoryValueTypeInfo = [
|
|
129
|
-
{type: RepositoryValueType.String, name:'
|
|
130
|
-
{type: RepositoryValueType.Address, name:'
|
|
131
|
-
{type: RepositoryValueType.PositiveNumber, name:'
|
|
132
|
-
{type: RepositoryValueType.String_Vec, name:'
|
|
133
|
-
{type: RepositoryValueType.Address_Vec, name:'
|
|
134
|
-
{type: RepositoryValueType.PositiveNumber_Vec, name:'
|
|
143
|
+
{type: RepositoryValueType.String, name:'string', description:'String.'},
|
|
144
|
+
{type: RepositoryValueType.Address, name:'address', description:'Object id or Personal address.'},
|
|
145
|
+
{type: RepositoryValueType.PositiveNumber, name:'unsigned integer', description:'Including u8, u16 ,..., u256'},
|
|
146
|
+
{type: RepositoryValueType.String_Vec, name:'string vector', description:'Vector of string.'},
|
|
147
|
+
{type: RepositoryValueType.Address_Vec, name:'address vector', description:'Vector of address.'},
|
|
148
|
+
{type: RepositoryValueType.PositiveNumber_Vec, name:'unsigned integer vector', description:'Vector of unsigned integer'},
|
|
149
|
+
{type: RepositoryValueType.Bool, name:'bool', description:'True or False.'},
|
|
135
150
|
]
|
|
136
151
|
|
|
137
152
|
export const OperatorTypeArray = (Object.values(OperatorType) as []).filter((v)=>typeof(v) === 'number') as number[];
|
|
138
153
|
export const ValueTypeArray = (Object.values(ValueType) as []).filter((v)=>typeof(v) === 'number') as number[];
|
|
139
154
|
export const IsValidOperatorType = (type:number) : boolean => { return OperatorTypeArray.includes(type)}
|
|
140
155
|
export const IsValidValueType = (type:number) : boolean => { return ValueTypeArray.includes(type)}
|
|
156
|
+
export const IsNumberType = (type:ValueType | any) : boolean => { return type===ValueType.TYPE_U128 || type===ValueType.TYPE_U256 ||
|
|
157
|
+
type===ValueType.TYPE_U64 || type===ValueType.TYPE_U8
|
|
158
|
+
}
|
|
141
159
|
|
|
142
160
|
export enum ContextType {
|
|
143
161
|
TYPE_SIGNER = 60,
|
|
@@ -155,7 +173,7 @@ interface ValueTypeString {
|
|
|
155
173
|
export const SER_VALUE: ValueTypeString[] = [
|
|
156
174
|
{type: ValueType.TYPE_BOOL, name: 'bool', description:'boolean. eg:true or false', validator:(value:any) => { return (value === true || value === false)}},
|
|
157
175
|
{type: ValueType.TYPE_ADDRESS, name: 'address', description:'address or object-id. eg:0x6789af', validator:IsValidAddress},
|
|
158
|
-
{type: ContextType.TYPE_WITNESS_ID, name: 'future address', description:"eg:
|
|
176
|
+
{type: ContextType.TYPE_WITNESS_ID, name: 'future address', description:"eg: address of the Machine that will generate future Progress, address of the Service that will generate future Order", validator:IsValidAddress},
|
|
159
177
|
{type: ContextType.TYPE_SIGNER, name: 'txn signer', description:"signer address of the transaction, "},
|
|
160
178
|
{type: ContextType.TYPE_CLOCK, name: 'txn time', description:"unsigned-64 number for the transaction time"},
|
|
161
179
|
{type: ValueType.TYPE_U64, name: 'number', description:'unsigned-64 number. eg:23870233', validator:IsValidU64},
|
|
@@ -175,7 +193,7 @@ export const SER_VALUE: ValueTypeString[] = [
|
|
|
175
193
|
{type: ValueType.TYPE_OPTION_U256, name: 'option', description:'option of u256. eg:none or u256 value'},
|
|
176
194
|
{type: ValueType.TYPE_VEC_U256, name: '[number]', description:'unsigned-256 number array. eg:[123, 778888, 42312]'},
|
|
177
195
|
{type: ValueType.TYPE_VEC_STRING, name: '[string]', description:'ascii string array. eg:["abc", "hi"]'},
|
|
178
|
-
{type: ValueType.TYPE_STRING, name: 'string', description:'
|
|
196
|
+
{type: ValueType.TYPE_STRING, name: 'string', description:'eg:"wowok"', },
|
|
179
197
|
{type: ValueType.TYPE_OPTION_STRING, name: 'option', description:'option of string. eg:none or string value'},
|
|
180
198
|
{type: ValueType.TYPE_U256, name: 'number', description:'unsigned-256 number. eg:12345678901233', validator:IsValidUintLarge},
|
|
181
199
|
]
|
|
@@ -189,14 +207,20 @@ export enum ENTRYPOINT {
|
|
|
189
207
|
devnet = 'devnet',
|
|
190
208
|
localnet = 'localnet'
|
|
191
209
|
}
|
|
192
|
-
|
|
210
|
+
/*
|
|
193
211
|
const TESTNET = {
|
|
194
|
-
package: "
|
|
195
|
-
wowok_object: '
|
|
196
|
-
entity_object: '
|
|
197
|
-
treasury_cap:'
|
|
212
|
+
package: "0xbd3d0929072f7647e521bf72851ccdc7e2169052b22bfdc5b49439c48cfb119a",
|
|
213
|
+
wowok_object: '0xb0a521a287e9d5e08932b3984dbe6ce159e836179c41bd08c556ef77ecdb7439',
|
|
214
|
+
entity_object: '0x16aab98920e7341d1dc19631031253234b2b71fc2ab8c32d65ee3ded8072acef',
|
|
215
|
+
treasury_cap:'0xb75a2ca2f651755c134ad521175f33f9e3f9008ad44340f76b3229e1f30cfdff',
|
|
216
|
+
}
|
|
217
|
+
*/
|
|
218
|
+
const TESTNET = {
|
|
219
|
+
package: "0x72a2ee21e11ee0c0d8fd9212127b12be0cdf7722b1e91c85a15a79cff3f7d9b0",
|
|
220
|
+
wowok_object: '0x3e69e10a8ab426c5e6d4392841bb6f6b9b45b7fa5feb9fcf23d7616a2effba0c',
|
|
221
|
+
entity_object: '0x53606d845cdedf0b256d27b3c0b0764265b2c272f3ad743a018ea4e8e59f3c74',
|
|
222
|
+
treasury_cap:'0xbbbc1fcab63e3373d53669507d7a6042282edef398273dcc04fe24db47c4881d',
|
|
198
223
|
}
|
|
199
|
-
|
|
200
224
|
const MAINNET = {
|
|
201
225
|
package: "",
|
|
202
226
|
wowok_object: '',
|
package/src/repository.ts
CHANGED
|
@@ -22,16 +22,16 @@ export type Repository_Policy = {
|
|
|
22
22
|
key:string;
|
|
23
23
|
description: string;
|
|
24
24
|
data_type: RepositoryValueType;
|
|
25
|
-
permission?: PermissionIndexType; // PermissionIndex like, must be geater than
|
|
25
|
+
permission?: PermissionIndexType; // PermissionIndex like, must be geater than 1000
|
|
26
26
|
}
|
|
27
27
|
export type Repository_Policy_Data = {
|
|
28
28
|
key: string;
|
|
29
|
-
data: Repository_Value[];
|
|
30
|
-
value_type?: ValueType;
|
|
29
|
+
data: Repository_Value[];
|
|
30
|
+
value_type?: ValueType; //
|
|
31
31
|
}
|
|
32
32
|
export type Repository_Value = {
|
|
33
33
|
address: string; // UID: address or objectid
|
|
34
|
-
bcsBytes: Uint8Array;
|
|
34
|
+
bcsBytes: Uint8Array; // BCS contents. Notice that: First Byte be the Type by caller, or specify type with 'Repository_Policy_Data.value_type' field.
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
export class Repository {
|
|
@@ -425,6 +425,8 @@ export class Repository {
|
|
|
425
425
|
d = '0x' + d;
|
|
426
426
|
} else if (type === ValueType.TYPE_VEC_ADDRESS) {
|
|
427
427
|
d = d.map((v:string) => { return ('0x' + v) } );
|
|
428
|
+
} else if (type === ValueType.TYPE_BOOL) {
|
|
429
|
+
d = d ? 'True' : 'False'
|
|
428
430
|
}
|
|
429
431
|
};
|
|
430
432
|
return {object:v?.data?.content?.fields?.id?.id, id:(v?.data?.content?.fields as any)?.name?.fields?.id,
|
|
@@ -454,7 +456,7 @@ export class Repository {
|
|
|
454
456
|
} return undefined
|
|
455
457
|
}
|
|
456
458
|
|
|
457
|
-
static ResolveRepositoryData = (dataType:RepositoryValueType, data:string | string[]) : {type:ValueType, data: Uint8Array} | undefined => {
|
|
459
|
+
static ResolveRepositoryData = (dataType:RepositoryValueType, data:string | boolean | string[]) : {type:ValueType, data: Uint8Array} | undefined => {
|
|
458
460
|
if (dataType === RepositoryValueType.String) {
|
|
459
461
|
return {type: ValueType.TYPE_STRING, data: Bcs.getInstance().ser(ValueType.TYPE_VEC_U8, new TextEncoder().encode(data.toString()))}
|
|
460
462
|
} else if (dataType === RepositoryValueType.PositiveNumber) {
|
|
@@ -491,6 +493,9 @@ export class Repository {
|
|
|
491
493
|
return new TextEncoder().encode(v);
|
|
492
494
|
})
|
|
493
495
|
return {type: ValueType.TYPE_VEC_STRING, data: Bcs.getInstance().ser(ValueType.TYPE_VEC_VEC_U8, r)}
|
|
496
|
+
} else if (dataType === RepositoryValueType.Bool) {
|
|
497
|
+
if (typeof(data) !== 'boolean') return undefined;
|
|
498
|
+
return {type:ValueType.TYPE_BOOL, data:Bcs.getInstance().ser(ValueType.TYPE_BOOL, data)}
|
|
494
499
|
}
|
|
495
500
|
return undefined
|
|
496
501
|
}
|
package/src/utils.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { BCS, getSuiMoveConfig, } from '@mysten/bcs';
|
|
|
2
2
|
import { SuiObjectResponse, DynamicFieldPage } from '@mysten/sui/client';
|
|
3
3
|
import { ERROR, Errors } from './exception';
|
|
4
4
|
import { isValidSuiAddress} from '@mysten/sui/utils'
|
|
5
|
-
import { RepositoryValueType, ValueType, Protocol } from './protocol'
|
|
5
|
+
import { RepositoryValueType, ValueType, Protocol, ContextType, OperatorType } from './protocol'
|
|
6
6
|
|
|
7
7
|
export const MAX_U8 = BigInt('255');
|
|
8
8
|
export const MAX_U64 = BigInt('18446744073709551615');
|
|
@@ -13,7 +13,7 @@ export const OPTION_NONE = 0;
|
|
|
13
13
|
|
|
14
14
|
export const ValueTypeConvert = (type:ValueType | null | undefined) : RepositoryValueType | number => {
|
|
15
15
|
if (type === ValueType.TYPE_U8 || type === ValueType.TYPE_U64 || type === ValueType.TYPE_U128 ||
|
|
16
|
-
type === ValueType.TYPE_U256
|
|
16
|
+
type === ValueType.TYPE_U256) {
|
|
17
17
|
return RepositoryValueType.PositiveNumber
|
|
18
18
|
} else if (type === ValueType.TYPE_VEC_U8 || type === ValueType.TYPE_VEC_U64 || type === ValueType.TYPE_VEC_U128 ||
|
|
19
19
|
type === ValueType.TYPE_VEC_U256|| type === ValueType.TYPE_VEC_BOOL) {
|
|
@@ -26,7 +26,9 @@ export const ValueTypeConvert = (type:ValueType | null | undefined) : Repository
|
|
|
26
26
|
return RepositoryValueType.String
|
|
27
27
|
} else if (type === ValueType.TYPE_VEC_STRING) {
|
|
28
28
|
return RepositoryValueType.String_Vec
|
|
29
|
-
}
|
|
29
|
+
} else if (type === ValueType.TYPE_BOOL) {
|
|
30
|
+
return RepositoryValueType.Bool
|
|
31
|
+
}
|
|
30
32
|
return -1;
|
|
31
33
|
}
|
|
32
34
|
|
|
@@ -192,7 +194,7 @@ export class Bcs {
|
|
|
192
194
|
return this.bcs.ser('Option<u32>', {'some': data}).toBytes();
|
|
193
195
|
}
|
|
194
196
|
|
|
195
|
-
ser(type:ValueType | string, data:Uint8Array | any) : Uint8Array {
|
|
197
|
+
ser(type:ValueType | ContextType | string, data:Uint8Array | any) : Uint8Array {
|
|
196
198
|
if (typeof(type) === 'string') {
|
|
197
199
|
return this.bcs.ser(type, data).toBytes();
|
|
198
200
|
}
|
|
@@ -242,6 +244,8 @@ export class Bcs {
|
|
|
242
244
|
return this.bcs.ser(BCS.STRING, data).toBytes();
|
|
243
245
|
case ValueType.TYPE_VEC_STRING:
|
|
244
246
|
return this.bcs.ser('vector<string>', data).toBytes();
|
|
247
|
+
case ContextType.TYPE_WITNESS_ID:
|
|
248
|
+
return this.bcs.ser(BCS.ADDRESS, data).toBytes();
|
|
245
249
|
default:
|
|
246
250
|
ERROR(Errors.bcsTypeInvalid, 'ser');
|
|
247
251
|
}
|
|
@@ -411,6 +415,9 @@ export const IsValidU64 = (value:string | number | undefined | bigint) : boolean
|
|
|
411
415
|
export const IsValidU128 = (value:string | number | undefined | bigint) : boolean => {
|
|
412
416
|
return IsValidBigint(value, MAX_U128, BigInt(0))
|
|
413
417
|
}
|
|
418
|
+
export const IsValidU256 = (value:string | number | undefined | bigint) : boolean => {
|
|
419
|
+
return IsValidBigint(value, MAX_U256, BigInt(0))
|
|
420
|
+
}
|
|
414
421
|
|
|
415
422
|
export const IsValidTokenType = (argType: string) : boolean => {
|
|
416
423
|
if (!argType || argType.length === 0) {
|