Skip to content

Commit d650547

Browse files
committed
update x/medianode doc
1 parent 51de9cc commit d650547

1 file changed

Lines changed: 157 additions & 0 deletions

File tree

x/medianode/README.md

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
# x/medianode
2+
3+
The `medianode` module enables users to register, manage, and lease media nodes on the OmniFlix Hub. Media nodes are computing resources that can be leased by users for various media-related tasks.
4+
5+
## Abstract
6+
7+
The medianode module allows users to:
8+
- Register new media nodes with specific hardware specifications and pricing
9+
- Update media node information and specifications
10+
- Lease media nodes for a specified duration
11+
- Extend existing leases
12+
- Cancel leases
13+
- Deposit additional funds to media nodes
14+
- Close media nodes and withdraw deposits
15+
16+
## State
17+
18+
### Module State
19+
The initial state of the module contains information about all media nodes, leases, and parameters.
20+
```protobuf
21+
message GenesisState {
22+
// params defines all the parameters of the module
23+
Params params = 1 [(gogoproto.nullable) = false];
24+
25+
// media_nodes is the list of registered media nodes
26+
repeated MediaNode nodes = 2 [(gogoproto.nullable) = false];
27+
28+
// leases is the list of active leases
29+
repeated Lease leases = 3 [(gogoproto.nullable) = false];
30+
31+
// next_medianode_id is the current usable media node ID
32+
uint64 node_counter = 4;
33+
}
34+
```
35+
36+
### MediaNode
37+
A media node represents a computing resource that can be leased. It contains information about the node's specifications, status, and pricing.
38+
```protobuf
39+
message MediaNode {
40+
string id = 1;
41+
string url = 2;
42+
HardwareSpecs hardware_specs = 3 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"hardware_specs\""];
43+
string owner = 4;
44+
cosmos.base.v1beta1.Coin price_per_hour = 5 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"price_per_hour\""];
45+
Status status = 6;
46+
bool leased = 7;
47+
google.protobuf.Timestamp registered_at = 8 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false];
48+
repeated Deposit deposits = 9;
49+
google.protobuf.Timestamp closed_at = 10 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false];
50+
Info info = 11 [(gogoproto.nullable) = false];
51+
}
52+
```
53+
54+
### Lease
55+
A lease represents an active lease of a media node by a user.
56+
```protobuf
57+
message Lease {
58+
string media_node_id = 1 [(gogoproto.moretags) = "yaml:\"media_node_id\""];
59+
string owner = 2;
60+
string lessee = 3;
61+
cosmos.base.v1beta1.Coin price_per_hour = 4 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"price_per_hour\""];
62+
cosmos.base.v1beta1.Coin total_lease_amount = 5 [(gogoproto.nullable) = false];
63+
cosmos.base.v1beta1.Coin settled_lease_amount = 6 [(gogoproto.moretags) = "yaml:\"settled_lease_amount\"", (gogoproto.nullable) = false];
64+
google.protobuf.Timestamp start_time = 7 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"start_time\""];
65+
uint64 leased_hours = 8 [(gogoproto.moretags) = "yaml:\"leased_hours\""];
66+
google.protobuf.Timestamp last_settled_at = 9 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"last_settled_at\""];
67+
}
68+
```
69+
70+
### Parameters
71+
The module parameters include:
72+
- Minimum deposit required for registration
73+
- Initial deposit percentage
74+
- Minimum and maximum lease hours
75+
- Minimum price per hour
76+
```protobuf
77+
message Params {
78+
uint64 minimum_lease_hours = 1;
79+
uint64 maximum_lease_hours = 2;
80+
cosmos.base.v1beta1.Coin min_deposit = 3 [
81+
(gogoproto.moretags) = "yaml:\"min_deposit\"",
82+
(gogoproto.nullable) = false
83+
];
84+
string initial_deposit_percentage = 4 [
85+
(gogoproto.moretags) = "yaml:\"initial_deposit_percentage\"",
86+
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
87+
(gogoproto.nullable) = false
88+
];
89+
string lease_commission = 5 [
90+
(gogoproto.moretags) = "yaml:\"lease_commission\"",
91+
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
92+
(gogoproto.nullable) = false
93+
];
94+
Distribution commission_distribution = 6 [
95+
(gogoproto.moretags) = "yaml:\"commission_distribution\"",
96+
(gogoproto.nullable) = false
97+
];
98+
google.protobuf.Duration deposit_release_period = 7 [
99+
(gogoproto.nullable) = false,
100+
(gogoproto.stdduration) = true,
101+
(gogoproto.moretags) = "yaml:\"deposit_release_period\""
102+
];
103+
}
104+
message Distribution {
105+
string staking = 1 [
106+
(gogoproto.moretags) = "yaml:\"staking\"",
107+
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
108+
(gogoproto.nullable) = false
109+
];
110+
string community_pool = 2 [
111+
(gogoproto.moretags) = "yaml:\"community_pool\"",
112+
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
113+
(gogoproto.nullable) = false
114+
];
115+
}
116+
```
117+
118+
## Messages
119+
120+
`MsgRegisterMediaNode` can be used by any account to register a new media node.
121+
`MsgUpdateMediaNode` can be used by the owner to update media node information.
122+
`MsgLeaseMediaNode` can be used by any account to lease a media node.
123+
`MsgExtendLease` can be used by the lessee to extend an existing lease.
124+
`MsgCancelLease` can be used by the lessee to cancel an active lease.
125+
`MsgDepositMediaNode` can be used by the owner to deposit additional funds to a media node.
126+
`MsgCloseMediaNode` can be used by the owner to close a media node and withdraw deposits.
127+
128+
## Queries
129+
130+
The medianode module provides several queries to fetch information about media nodes and leases:
131+
132+
```go
133+
service Query {
134+
rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {
135+
option (google.api.http).get = "/omniflix/medianode/v1/params";
136+
}
137+
138+
rpc MediaNode(QueryMediaNodeRequest) returns (QueryMediaNodeResponse) {
139+
option (google.api.http).get = "/omniflix/medianode/v1/nodes/{id}";
140+
}
141+
142+
rpc MediaNodes(QueryMediaNodesRequest) returns (QueryMediaNodesResponse) {
143+
option (google.api.http).get = "/omniflix/medianode/v1/nodes";
144+
}
145+
146+
rpc MediaNodesByOwner(QueryMediaNodesByOwnerRequest) returns (QueryMediaNodesByOwnerResponse) {
147+
option (google.api.http).get = "/omniflix/medianode/v1/nodes-by-owner/{owner}";
148+
}
149+
rpc Lease(QueryLeaseRequest) returns (QueryLeaseResponse) {
150+
option (google.api.http).get = "/omniflix/medianode/v1/lease/{media_node_id}";
151+
}
152+
153+
rpc LeasesByLessee(QueryLeasesByLesseeRequest) returns (QueryLeasesByLesseeResponse) {
154+
option (google.api.http).get = "/omniflix/medianode/v1/leases-by-lessee/{lessee}";
155+
}
156+
}
157+
```

0 commit comments

Comments
 (0)