-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathclass-diagram.plantuml
263 lines (203 loc) · 8.38 KB
/
class-diagram.plantuml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
@startuml
title SingularityNet Java SDK
package io.singularitynet.sdk.payment {
interface Payment {
void toMetadata(Metadata headers);
}
class PaymentSerializer {
static final Metadata.Key<String> SNET_PAYMENT_TYPE;
static final Metadata.Key<byte[]> SNET_PAYMENT_SIGNATURE;
static final Metadata.AsciiMarshaller<BigInteger> ASCII_BIGINTEGER_MARSHALLER;
static void register(String type, Function<Metadata, Payment> reader);
static Optional<Payment> fromMetadata(Metadata headers);
static void toMetadata(Payment payment, Metadata headers);
}
PaymentSerializer -- Payment
}
package io.singularitynet.sdk.ethereum {
interface WithAddress {
Address getAddress();
}
interface Identity {
Signature sign(byte[] message);
}
WithAddress <|-- Identity
class PrivateKeyIdentity {
Credentials getCredentials();
}
Identity <|.. PrivateKeyIdentity
class MnemonicIdentity
PrivateKeyIdentity <|-- MnemonicIdentity
class Ethereum {
BigInteger getEthBlockNumber();
}
}
package io.singularitynet.sdk.registry {
interface MetadataStorage {
byte[] get(URI uri);
}
class IpfsMetadataStorage
MetadataStorage <|.. IpfsMetadataStorage
class RegistryContract {
Optional<OrganizationRegistration> getOrganizationById(String orgId);
Optional<ServiceRegistration> getServiceRegistrationById(String orgId, String serviceId);
}
interface MetadataProvider {
ServiceMetadata getServiceMetadata();
OrganizationMetadata getOrganizationMetadata();
}
class RegistryMetadataProvider
MetadataProvider <|.. RegistryMetadataProvider
RegistryMetadataProvider *-- RegistryContract
RegistryMetadataProvider *-- MetadataStorage
class CachingMetadataProvider
MetadataProvider <|.. CachingMetadataProvider
CachingMetadataProvider *-- RegistryMetadataProvider
}
package io.singularitynet.sdk.daemon {
interface EndpointSelector {
Endpoint nextEndpoint(MetadataProvider metadataProvider);
}
EndpointSelector -- MetadataProvider
class FixedGroupEndpointSelector
EndpointSelector <|.. FixedGroupEndpointSelector
interface DaemonConnection {
<T> T getGrpcStub(Function<Channel, T> constructor);
void setClientCallsInterceptor(ClientInterceptor interceptor);
Endpoint getEndpoint();
void shutdownNow();
}
class BaseDaemonConnection
DaemonConnection <|.. BaseDaemonConnection
BaseDaemonConnection o-- EndpointSelector
BaseDaemonConnection o-- MetadataProvider
}
package io.singularitynet.sdk.mpe {
class MultiPartyEscrowContract {
Optional<PaymentChannel> getChannelById(BigInteger channelId);
Address getContractAddress();
PaymentChannel openChannel(Address signer, Address recipient,\n\tPaymentGroupId groupId, BigInteger value, BigInteger expiration);
void transfer(Address receiver, BigInteger value);
Stream<PaymentChannel> getChannelOpenEvents();
BigInteger channelAddFunds(BigInteger channelId, BigInteger amount);
BigInteger channelExtend(BigInteger channelId, BigInteger expiration);
ExtendAndAddFundsResponse channelExtendAndAddFunds(BigInteger channelId,\n\tBigInteger expiration, BigInteger amount);
}
interface PaymentChannelStateProvider {
PaymentChannel getChannelStateById(BigInteger channelId, Identity requestor);
}
class EscrowPayment
Payment ()- EscrowPayment
interface BlockchainPaymentChannelManager {
Stream<PaymentChannel> getChannelsAccessibleBy(PaymentGroupId paymentGroupId, WithAddress identity);
PaymentChannel openPaymentChannel(PaymentGroup paymentGroup,\n\tWithAddress signer, BigInteger value, BigInteger expiration);
PaymentChannel addFundsToChannel(PaymentChannel channel, BigInteger amount);
PaymentChannel extendChannel(PaymentChannel channel, BigInteger expiration);
PaymentChannel extendAndAddFundsToChannel(PaymentChannel channel,\n\tBigInteger expiration, BigInteger amount);
}
class MpePaymentChannelManager
BlockchainPaymentChannelManager <|.. MpePaymentChannelManager
MpePaymentChannelManager o-- MultiPartyEscrowContract
class PaymentChannelStateService {
PaymentChannelStateReply getChannelState(BigInteger channelId, Identity signer);
}
PaymentChannelStateService o-- DaemonConnection
PaymentChannelStateService o-- Ethereum
class AskDaemonFirstPaymentChannelProvider
PaymentChannelStateProvider <|.. AskDaemonFirstPaymentChannelProvider
AskDaemonFirstPaymentChannelProvider o-- MultiPartyEscrowContract
AskDaemonFirstPaymentChannelProvider *-- PaymentChannelStateService
}
package io.singularitynet.sdk.freecall {
class FreeCallPayment
Payment ()- FreeCallPayment
class FreeCallStateService {
long getFreeCallsAvailable(FreeCallAuthToken freeCallAuthToken, Identity signer);
}
FreeCallStateService o-- DaemonConnection
FreeCallStateService o-- Ethereum
FreeCallStateService -- FreeCallPayment
}
package io.singularitynet.sdk.client {
class Configuration {
URL getEthereumJsonRpcEndpoint();
URL getIpfsEndpoint();
IdentityType getIdentityType();
Optional<String> getIdentityMnemonic();
Optional<byte[]> getIdentityPrivateKey();
Optional<Address> getRegistryAddress();
Optional<Address> getMultiPartyEscrowAddress();
BigInteger getGasPrice();
BigInteger getGasLimit();
}
class ConfigurationUtils {
static Configuration fromProperties(Properties props);
static Configuration fromJson(String json);
}
ConfigurationUtils -- Configuration
interface DependencyFactory {
Web3j getWeb3j();
IPFS getIpfs();
Identity getIdentity();
Registry getRegistry();
MultiPartyEscrow getMultiPartyEscrow();
}
class ConfigurationDependencyFactory
DependencyFactory <|.. ConfigurationDependencyFactory
interface ServiceClient {
Sdk getSdk();
MetadataProvider getMetadataProvider();
PaymentChannelStateProvider getPaymentChannelStateProvider();
FreeCallStateService getFreeCallStateService();
T getGrpcStub(Function<Channel, T> constructor);
String getOrgId();
String getServiceId();
String getEndpointGroupName();
void close();
}
AutoCloseable ()- ServiceClient
class BaseServiceClient
ServiceClient <|.. BaseServiceClient
BaseServiceClient o-- Sdk
BaseServiceClient *-- DaemonConnection
BaseServiceClient o-- PaymentStrategy
interface PaymentStrategy {
<ReqT, RespT> Payment getPayment(GrpcCallParameters<ReqT, RespT> parameters, ServiceClient serviceClient);
}
PaymentStrategy -- ServiceClient
class Sdk {
Sdk(Configuration config);
Sdk(DependencyFactory factory);
ServiceClient newServiceClient(String orgId, String serviceId, String endpointGroupName, PaymentStrategy paymentStrategy);
ServiceClient newServiceClient(String orgId, String serviceId, EndpointSelector endpointSelector, PaymentStrategy paymentStrategy, GrpcSettings grpcSettings);
Ethereum getEthereum();
void transfer(Address toAddress, BigInteger amount);
Identity getIdentity();
MetadataProvider getMetadataProvider(String orgId, String serviceId);
BlockchainPaymentChannelManager getBlockchainPaymentChannelManager();
void close();
}
AutoCloseable ()- Sdk
Sdk -- Configuration
Sdk -- ServiceClient
Sdk -- DependencyFactory
}
package paymentstrategy {
abstract class EscrowPaymentStrategy {
protected PaymentChannel selectChannel(ServiceClient serviceClient);
}
PaymentStrategy ()- EscrowPaymentStrategy
EscrowPaymentStrategy -- EscrowPayment
class FixedPaymentChannelPaymentStrategy
EscrowPaymentStrategy <|-- FixedPaymentChannelPaymentStrategy
class OnDemandPaymentChannelPaymentStrategy
EscrowPaymentStrategy <|-- OnDemandPaymentChannelPaymentStrategy
class FreeCallPaymentStrategy
PaymentStrategy ()- FreeCallPaymentStrategy
FreeCallPaymentStrategy o-- Identity
FreeCallPaymentStrategy -- FreeCallPayment
class CombinedPaymentStrategy
PaymentStrategy ()- CombinedPaymentStrategy
CombinedPaymentStrategy o-- PaymentStrategy
}
@enduml