Kromer
"Do you want to be a [BIG SHOT]?"
(Logo Pending)
Kromer is a toy economy server for Minecraft designed to be the spiritual successor to Krist, with some changes to it's philosophy as well as some new features.
Flagship Changes and Features
- Krist API Compatibility: Kromer is compatible with the Krist API, which means that it can be used with existing Krist plugins and services. This allows for a smooth transition for players who are familiar with Krist.
- No Proof of Work: Kromer does not use Proof of Work, which means it is more environmentally friendly and does not require expensive hardware to run.
- No Cross-Server: Kromer is not designed to be cross-server, mostly due to the impossibility to earn money on a server that it is not fine-tuned for.
- Playtime Based: Kromer uses a playtime based system to determine how much money you can earn, which means that you can earn money by being active on the server.
- Player Wallets and Shared Wallets: Kromer allocates a player wallet to each player, which is used to store their money. Players can also create shared wallets with other players, which can be used to pool money together for larger purchases or for group projects. Shared wallets are taxed.
- Subscriptions: Kromer allows players to subscribe to services, which allows them to earn money from the subscriptions. This is a way for players to support each other and earn money at the same time.
Wallets
Kromer uses a wallet system to manage player money. Each player has a personal wallet, which is used to store their money. Players can also create shared wallets with other players, which can be used to pool money together for larger purchases or for group projects. Shared wallets are taxed.
Playtime Earning
Kromer uses a playtime based system to determine how much money you can earn, the
Subscriptions and Taxes
Kromer allows players to subscribe to services, which allows them to earn money from the subscriptions.
Taxes are applied to shared wallets to prevent abuse and to encourage players to use their personal wallets for personal transactions. Under the hood, taxes are considered forced subscriptions that are paid to the server.
Subscription Flow
- A player creates a subscription and sets the price as well as recurring period and a suitable description(Max. 255 characters), the period can be set to any time period, but the minimum is 1 minute. A subscription is represented by an ID that is generated by the server.
- The subscription owner can then set up websocket listeners for subscriptions, which can be used to trigger actions when a player subscribes or unsubscribes from the subscription.
- The player can then share the subscription ID with other players, who can then subscribe to the subscription.
- When a player subscribes to a subscription, they are charged the price of the subscription and the money is added to the subscription owner's wallet.
Subscriptions REST API
Create Subscription
/subscriptions
- Method: POST
- Request Body:
| Field | Type | Description |
|---|---|---|
| name | string | The receiver's name (or metaname) |
| price | number | The price of the subscription. |
| period | number | The period of the subscription in minutes. (Minimum is 1) |
| description | string | The description of the subscription. (Max. 255 Chars) |
- Success Response:
- Status Code: 200 OK
- Response Body:
| Field | Type | Description |
|---|---|---|
| id | number | The ID of the subscription. |
Delete Subscription
/subscriptions/:id
- Method: DELETE
- Query Parameters:
| Field | Type | Description |
|---|---|---|
| id | number | The ID of the subscription to delete |
| privatekey | string | The private key of the name owner |
Get Subscription
/subscriptions/:id
- Method: GET
- Query Parameters:
| Field | Type | Description |
|---|---|---|
| id | number | The ID of the subscription to get |
| address (optional) | string | The address of the subscriber/owner |
- Success Response:
- Status Code: 200 OK
- Response Body:
| Field | Type | Description |
|---|---|---|
| subscription | object | |
| - description | string | The description of the subscription. |
| - price | number | The price of the subscription. |
| - period | number | The period of the subscription in minutes. |
| - name | string | The name (or metaname) that owns the subscription. |
| - subscribers | number | The number of subscribers to the subscription. |
| - subscribed (optional) | boolean | Whether the user is subscribed to the subscription. |
| - owns (optional) | boolean | Whether the user owns the name of the subscription. |
| - next_payment (optional) | date | The timestamp of the next payment. (Subscriber only) |
| - unsubscribable (optional) | boolean | Whether the subscriber can unsubscribe. |
Subscribe to Subscription
/subscriptions/:id/subscribe
- Method: POST
- Request Body:
| Field | Type | Description |
|---|---|---|
| privatekey | string | The private key of the paying address |
- Success Response:
- Status Code: 200 OK
- Response Body:
| Field | Type | Description |
|---|---|---|
| next_payment | date | The timestamp of the next payment. |
Unsubscribe from Subscription
/subscriptions/:id/unsubscribe
- Method: POST
- Request Body:
| Field | Type | Description |
|---|---|---|
| privatekey | string | The private key of the paying address |
- Success Response:
- Status Code: 200 OK
List Subscriptions
/subscriptions
- Method: GET
- Query Parameters:
| Field | Type | Description |
|---|---|---|
| address (optional) | string | The address of the subscriber/owner, either this or name is required. |
| name (optional) | string | A name associated with subscriptions, this supercedes address parameter. |
| exclude_owned (optional) | boolean | Whether to exclude owned subscriptions. Default is false. |
| only_owned (optional) | boolean | Whether to only return owned subscriptions, supercedes excludeOwned. Default is false. |
| only_unsubscribable (optional) | boolean | Whether to show only unsubscribable subscriptions. Default is true. |
| limit (optional) | number | The maximum number of subscriptions to return. Default is 50. |
| offset (optional) | number | The offset to start from. Default is 0. |
- Success Response:
- Status Code: 200 OK
- Response Body:
| Field | Type | Description |
|---|---|---|
| count | number | The count of results. |
| total | number | The total number of subscriptions available. |
| subscription | object[] | |
| - description | string | The description of the subscription. |
| - price | number | The price of the subscription. |
| - period | number | The period of the subscription in minutes. |
| - name | string | The name (or metaname) that owns the subscription. |
| - subscribers | number | The number of subscribers to the subscription. |
| - subscribed (optional) | boolean | Whether the user is subscribed to the subscription. (address only) |
| - owns (optional) | boolean | Whether the user owns the name of the subscription. (address only) |
| - next_payment (optional) | date | The timestamp of the next payment. (Subscriber only) |
| - unsubscribable (optional) | boolean | Whether the subscriber can unsubscribe. |