@@ -26,7 +26,7 @@ type CapabilityRegistryView struct {
26
26
27
27
// MarshalJSON marshals the CapabilityRegistryView to JSON. It includes the Capabilities, Nodes, Nops, and Dons
28
28
// and a denormalized summary of the Dons with their associated Nodes and Capabilities, which is useful for a high-level view
29
- func (v CapabilityRegistryView ) MarshalJSON () ([]byte , error ) {
29
+ func (v * CapabilityRegistryView ) MarshalJSON () ([]byte , error ) {
30
30
// Alias to avoid recursive calls
31
31
type Alias struct {
32
32
types.ContractMetaData
@@ -51,6 +51,36 @@ func (v CapabilityRegistryView) MarshalJSON() ([]byte, error) {
51
51
return json .MarshalIndent (& a , "" , " " )
52
52
}
53
53
54
+ // UnmarshalJSON unmarshals the CapabilityRegistryView from JSON. Since the CapabilityRegistryView doesn't hold a DonCapabilities field,
55
+ // it is not unmarshaled.
56
+ func (v * CapabilityRegistryView ) UnmarshalJSON (data []byte ) error {
57
+ // Alias to avoid recursive calls
58
+ type Alias struct {
59
+ types.ContractMetaData
60
+ Capabilities []CapabilityView `json:"capabilities,omitempty"`
61
+ Nodes []NodeView `json:"nodes,omitempty"`
62
+ Nops []NopView `json:"nops,omitempty"`
63
+ Dons []DonView `json:"dons,omitempty"`
64
+ DonCapabilities []DonDenormalizedView `json:"don_capabilities_summary,omitempty"`
65
+ }
66
+ a := Alias {
67
+ ContractMetaData : v .ContractMetaData ,
68
+ Capabilities : v .Capabilities ,
69
+ Nodes : v .Nodes ,
70
+ Nops : v .Nops ,
71
+ Dons : v .Dons ,
72
+ }
73
+ if err := json .Unmarshal (data , & a ); err != nil {
74
+ return err
75
+ }
76
+ v .ContractMetaData = a .ContractMetaData
77
+ v .Capabilities = a .Capabilities
78
+ v .Nodes = a .Nodes
79
+ v .Nops = a .Nops
80
+ v .Dons = a .Dons
81
+ return nil
82
+ }
83
+
54
84
// GenerateCapabilityRegistryView generates a CapRegView from a CapabilitiesRegistry contract.
55
85
func GenerateCapabilityRegistryView (capReg * capabilities_registry.CapabilitiesRegistry ) (CapabilityRegistryView , error ) {
56
86
tv , err := types .NewContractMetaData (capReg , capReg .Address ())
@@ -112,7 +142,7 @@ type DonDenormalizedView struct {
112
142
// Nodes and Capabilities. This is a useful form of the CapabilityRegistryView, but it is not definitive.
113
143
// The full CapRegView should be used for the most accurate information as it can contain
114
144
// Capabilities and Nodes the are not associated with any Don.
115
- func (v CapabilityRegistryView ) DonDenormalizedView () ([]DonDenormalizedView , error ) {
145
+ func (v * CapabilityRegistryView ) DonDenormalizedView () ([]DonDenormalizedView , error ) {
116
146
var out []DonDenormalizedView
117
147
for _ , don := range v .Dons {
118
148
var nodes []NodeDenormalizedView
@@ -140,6 +170,91 @@ func (v CapabilityRegistryView) DonDenormalizedView() ([]DonDenormalizedView, er
140
170
return out , nil
141
171
}
142
172
173
+ func (v * CapabilityRegistryView ) NodesToNodesParams () ([]capabilities_registry.CapabilitiesRegistryNodeParams , error ) {
174
+ var nodesParams []capabilities_registry.CapabilitiesRegistryNodeParams
175
+ for _ , node := range v .Nodes {
176
+ signer , err := hexTo32Bytes (node .Signer )
177
+ if err != nil {
178
+ return nil , err
179
+ }
180
+ encryptionPubKey , err := hexTo32Bytes (node .EncryptionPublicKey )
181
+ if err != nil {
182
+ return nil , err
183
+ }
184
+ capIDs := make ([][32 ]byte , len (node .CapabilityIDs ))
185
+ for i , id := range node .CapabilityIDs {
186
+ cid , err := hexTo32Bytes (id )
187
+ if err != nil {
188
+ return nil , err
189
+ }
190
+ capIDs [i ] = cid
191
+ }
192
+ nodesParams = append (nodesParams , capabilities_registry.CapabilitiesRegistryNodeParams {
193
+ Signer : signer ,
194
+ P2pId : node .P2pId ,
195
+ EncryptionPublicKey : encryptionPubKey ,
196
+ NodeOperatorId : node .NodeOperatorID ,
197
+ HashedCapabilityIds : capIDs ,
198
+ })
199
+ }
200
+
201
+ return nodesParams , nil
202
+ }
203
+
204
+ func (v * CapabilityRegistryView ) CapabilitiesToCapabilitiesParams () []capabilities_registry.CapabilitiesRegistryCapability {
205
+ var capabilitiesParams []capabilities_registry.CapabilitiesRegistryCapability
206
+ for _ , capability := range v .Capabilities {
207
+ capabilitiesParams = append (capabilitiesParams , capabilities_registry.CapabilitiesRegistryCapability {
208
+ LabelledName : capability .LabelledName ,
209
+ Version : capability .Version ,
210
+ CapabilityType : capability .CapabilityType ,
211
+ ResponseType : capability .ResponseType ,
212
+ ConfigurationContract : capability .ConfigurationContract ,
213
+ })
214
+ }
215
+ return capabilitiesParams
216
+ }
217
+
218
+ func (v * CapabilityRegistryView ) NopsToNopsParams () []capabilities_registry.CapabilitiesRegistryNodeOperator {
219
+ var nopsParams []capabilities_registry.CapabilitiesRegistryNodeOperator
220
+ for _ , nop := range v .Nops {
221
+ nopsParams = append (nopsParams , capabilities_registry.CapabilitiesRegistryNodeOperator {
222
+ Admin : nop .Admin ,
223
+ Name : nop .Name ,
224
+ })
225
+ }
226
+ return nopsParams
227
+ }
228
+
229
+ func (v * CapabilityRegistryView ) CapabilityConfigToCapabilityConfigParams (don DonView ) ([]capabilities_registry.CapabilitiesRegistryCapabilityConfiguration , error ) {
230
+ var cfgs []capabilities_registry.CapabilitiesRegistryCapabilityConfiguration
231
+ for _ , cfg := range don .CapabilityConfigurations {
232
+ cid , err := hexTo32Bytes (cfg .ID )
233
+ if err != nil {
234
+ return nil , err
235
+ }
236
+ config , err := hex .DecodeString (cfg .Config )
237
+ if err != nil {
238
+ return nil , err
239
+ }
240
+ cfgs = append (cfgs , capabilities_registry.CapabilitiesRegistryCapabilityConfiguration {
241
+ CapabilityId : cid ,
242
+ Config : config ,
243
+ })
244
+ }
245
+ return cfgs , nil
246
+ }
247
+
248
+ func hexTo32Bytes (val string ) ([32 ]byte , error ) {
249
+ var out [32 ]byte
250
+ b , err := hex .DecodeString (val )
251
+ if err != nil {
252
+ return out , err
253
+ }
254
+ copy (out [:], b )
255
+ return out , nil
256
+ }
257
+
143
258
// CapabilityView is a serialization-friendly view of a capability in the capabilities registry.
144
259
type CapabilityView struct {
145
260
ID string `json:"id"` // hex 32 bytes
@@ -272,7 +387,7 @@ func NewNodeView(n capabilities_registry.INodeInfoProviderNodeInfo) NodeView {
272
387
ConfigCount : n .ConfigCount ,
273
388
WorkflowDONID : n .WorkflowDONId ,
274
389
Signer : hex .EncodeToString (n .Signer [:]),
275
- P2pId : p2pkey . PeerID ( n .P2pId ) ,
390
+ P2pId : n .P2pId ,
276
391
EncryptionPublicKey : hex .EncodeToString (n .EncryptionPublicKey [:]),
277
392
},
278
393
NodeOperatorID : n .NodeOperatorId ,
@@ -328,7 +443,7 @@ func NewNopView(nop capabilities_registry.CapabilitiesRegistryNodeOperator) NopV
328
443
}
329
444
}
330
445
331
- func (v CapabilityRegistryView ) nodeDenormalizedView (n NodeView ) (NodeDenormalizedView , error ) {
446
+ func (v * CapabilityRegistryView ) nodeDenormalizedView (n NodeView ) (NodeDenormalizedView , error ) {
332
447
nop , err := nodeNop (n , v .Nops )
333
448
if err != nil {
334
449
return NodeDenormalizedView {}, err
0 commit comments