stratum-proxy
stratum-proxy copied to clipboard
Java implementation of a stratum->stratum/HTTPGetwork proxy with a Web GUI and some pool switching strategies (PriorityFailover, WeightedRoundRobin). Simple to install and configure.
#Packaging (Not mandatory)
You can directly use a release (https://github.com/Stratehm/stratum-proxy/releases) and go to the Installation and Usage section.
The packaging of the application is done through Maven and will generate a ZIP which contains the program and all its dependencies.
The proxy is is generated as a JAR file called stratum-proxy.jar (contained in the ZIP file) which can be launched on any platform with a JVM installed with version >= 7 (Java Virtual Machine)
To build the package, you must have a JDK installed in version >= 7 and maven 3
##Packaging
Advice: It is highly recommended to install NodeJS before building the package. It will speed up the Javascript Optimization phase. If not installed, the packing will still work but may be really long (since the Javascript Optimization phase will use the Java Rhino Javascript Engine which is slower). If NodeJS is not installed, set the MAVEN_OPTS environment variable before packaging with the following parameters: -Xmx512M -Xss2M
On Windows:
cd /directory/which/contain/pom.xmlFileOfTheProject
mvn clean package
On Linux:
cd /directory/which/contain/pom.xmlFileOfTheProject
mvn clean package
The package is then present in the "target" directory.
#Installation and Usage
##Installation
The latest JVM (Java Virtual Machine) can be downloaded here: http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Install the JVM for your operating system (if not already done)
Then unzip the zip file in a directory and launch the proxy through the following command line:
java -jar stratum-proxy.jar proxyOptions
##Usage
java -jar stratum-proxy.jar --help
##Raspberry Pi Installation (Raspbian) Once your OS is setup on the Raspberry Pi (Raspbian), perform the following (replace the version number with the last available: https://github.com/Stratehm/stratum-proxy/releases):
-
Install JDK and Screen onto the Raspberry Pi
sudo apt-get update && sudo apt-get install oracle-java7-jdk screen
-
Download stratum-proxy to the /opt folder
cd /opt
sudo wget https://github.com/Stratehm/stratum-proxy/releases/download/x.x.x/stratum-proxy-x.x.x.zip
-
Unzip the stratum-proxy zip
sudo unzip stratum-proxy-x.x.x.zip
sudo rm -rf stratum-proxy-x.x.x.zip
sudo mv /opt/stratum-proxy-x.x.x /opt/stratum-proxy
cd /opt/stratum-proxy
-
Configure the proxy by creating/editing the file
stratum-proxy.conf
-
Test the stratum-proxy by running it
sudo java -jar stratum-proxy.jar
-
Set it to automatically start-up, in a seperate screen, by adding the following line to the file
/etc/rc.local
sudo /usr/bin/screen -dmS proxy /usr/bin/java -jar /opt/stratum-proxy/stratum-proxy.jar -f /opt/stratum-proxy/stratum-proxy.conf
##Configuration File
In order to use a configuration file instead of the command line parameters, use the following command line options:
java -jar stratum-proxy.jar -f /path/to/the/configuration/file
When -f option is used, all other command line options are discarded and only the configuration file is used.
The files stratum-proxy-minimal-sample.conf and stratum-proxy-full-sample.conf in the package can be used to build your own configuration file.
##WebClient
A WebClient is available at the address: http://127.0.0.1:8888 (The port can be changed with --rest-listen-port or apiListenAddress of configuration file).
##API Details
An API is available. Methods parameters or result are in JSON. By default, the methods can be accessed at the URL http://hostIp:8888/proxy/.
The Content-Type of HTTP requests has to be application/json, else a 415 Unsupported Media Type error may be returned.
Here after is the API methods description:
Api Version: 1.0
APIs
/
Overview
API to manage the proxy
POST /address/ban
banIp
Ban the given ip address.
Parameters
- body
Parameter | Required | Description | Data Type |
---|---|---|---|
body | false | AddressDTO |
Response
StatusDTO
Errors
Status Code | Reason | Response Model |
---|
POST /address/kick
kickAddress
Kick all connections with the given address.
Parameters
- body
Parameter | Required | Description | Data Type |
---|---|---|---|
body | false | AddressDTO |
Response
StatusDTO
Errors
Status Code | Reason | Response Model |
---|
GET /user/ban/list
listBannedUsers
List all banned users.
Parameters
Response
List[string]
Errors
Status Code | Reason | Response Model |
---|
POST /address/unban
unbanAddress
Unban the given ip address.
Parameters
- body
Parameter | Required | Description | Data Type |
---|---|---|---|
body | false | AddressDTO |
Response
StatusDTO
Errors
Status Code | Reason | Response Model |
---|
POST /connection/kick
kickConnection
Kill the connection with the given address and port.
Parameters
- body
Parameter | Required | Description | Data Type |
---|---|---|---|
body | false | ConnectionIdentifierDTO |
Response
StatusDTO
Errors
Status Code | Reason | Response Model |
---|
GET /pool/list
getPoolsList
Return the list of all pools.
Parameters
Response
List[PoolDetailsDTO]
Errors
Status Code | Reason | Response Model |
---|
POST /pool/add
addPool
Add a pool.
Parameters
- body
Parameter | Required | Description | Data Type |
---|---|---|---|
body | false | AddPoolDTO |
Response
StatusDTO
Errors
Status Code | Reason | Response Model |
---|---|---|
500 | Failed to add the pool. | StatusDTO |
500 | Pool added but not started. | StatusDTO |
POST /pool/remove
removePool
Remove a pool.
Parameters
- body
Parameter | Required | Description | Data Type |
---|---|---|---|
body | false | RemovePoolDTO |
Response
StatusDTO
Errors
Status Code | Reason | Response Model |
---|---|---|
404 | Pool not found. | StatusDTO |
POST /pool/disable
disablePool
Disable a pool.
Parameters
- body
Parameter | Required | Description | Data Type |
---|---|---|---|
body | false | PoolNameDTO |
Response
StatusDTO
Errors
Status Code | Reason | Response Model |
---|---|---|
500 | Failed to start the pool. | StatusDTO |
404 | Pool not found. | StatusDTO |
POST /pool/enable
enablePool
Enable a pool.
Parameters
- body
Parameter | Required | Description | Data Type |
---|---|---|---|
body | false | PoolNameDTO |
Response
StatusDTO
Errors
Status Code | Reason | Response Model |
---|---|---|
404 | Pool not found. | StatusDTO |
500 | Failed to start the pool. | StatusDTO |
POST /pool/priority
setPoolPriority
Change the priority of a pool.
Parameters
- body
Parameter | Required | Description | Data Type |
---|---|---|---|
body | false | ChangePriorityDTO |
Response
StatusDTO
Errors
Status Code | Reason | Response Model |
---|---|---|
404 | Pool not found. | StatusDTO |
400 | Bad parameter sent. | StatusDTO |
POST /pool/update
updatePool
Update a pool.
Parameters
- body
Parameter | Required | Description | Data Type |
---|---|---|---|
body | false | UpdatePoolDTO |
Response
StatusDTO
Errors
Status Code | Reason | Response Model |
---|---|---|
500 | Failed to update the pool. | StatusDTO |
400 | Bad parameter sent. | StatusDTO |
404 | Pool not found. | StatusDTO |
POST /log/level
setLogLevel
Change the log level.
Parameters
- body
Parameter | Required | Description | Data Type |
---|---|---|---|
body | false | LogLevelDTO |
Response
StatusDTO
Errors
Status Code | Reason | Response Model |
---|---|---|
400 | Log level not known. | StatusDTO |
GET /log/level
getLogLevel
Return the log level.
Parameters
Response
LogLevelDTO
Errors
Status Code | Reason | Response Model |
---|
POST /log/since
getLogSince
Return log message since the given timestamp.
Parameters
- body
Parameter | Required | Description | Data Type |
---|---|---|---|
body | false | TimestampDTO |
Response
List[LogEntry]
Errors
Status Code | Reason | Response Model |
---|---|---|
400 | Timestamp is empty. | - |
GET /misc/version
getProxyVersion
Return the version of the proxy.
Parameters
Response
ProxyVersionDTO
Errors
Status Code | Reason | Response Model |
---|
GET /summary
getSummary
Return a summary of the current state of the proxy.
Parameters
Response
SummaryDTO
Errors
Status Code | Reason | Response Model |
---|
POST /user/unban
unbanUser
Unban a user.
Parameters
- body
Parameter | Required | Description | Data Type |
---|---|---|---|
body | false | UserNameDTO |
Response
StatusDTO
Errors
Status Code | Reason | Response Model |
---|
POST /user/ban
banUser
Ban the given username until the proxy restart. The user will not be authorized to reconnect.
Parameters
- body
Parameter | Required | Description | Data Type |
---|---|---|---|
body | false | UserNameDTO |
Response
StatusDTO
Errors
Status Code | Reason | Response Model |
---|
POST /user/kick
kickUser
Kick the given username. Kill all connections where the user has been seen (WARN: this may kill connections supporting other users)
Parameters
- body
Parameter | Required | Description | Data Type |
---|---|---|---|
body | false | UserNameDTO |
Response
StatusDTO
Errors
Status Code | Reason | Response Model |
---|
GET /user/list
getUsersList
Get the list of users that has been connected at least once since the proxy is started.
Parameters
Response
List[UserDetailsDTO]
Errors
Status Code | Reason | Response Model |
---|
POST /hashrate/pool
getPoolHashrateHistory
Return the hashrate history of a pool.
Parameters
- query
Parameter | Required | Description | Data Type |
---|---|---|---|
start | false | Allow to filter returned values on the given start timestamp (UTC from Epoch in seconds) | long |
end | false | Allow to filter returned values on the given end timestamp (UTC from Epoch in seconds) | long |
Parameter | Required | Description | Data Type |
---|---|---|---|
body | false | PoolNameDTO |
Response
List[HashrateModel]
Errors
Status Code | Reason | Response Model |
---|---|---|
500 | Error during pool hashrate history response build. | - |
404 | Pool not found. | - |
POST /hashrate/user
getUserHashrateHistory
Return the hashrate history of a user.
Parameters
- query
Parameter | Required | Description | Data Type |
---|---|---|---|
start | false | Allow to filter returned values on the given start timestamp (UTC from Epoch in seconds) | long |
end | false | Allow to filter returned values on the given end timestamp (UTC from Epoch in seconds) | long |
Parameter | Required | Description | Data Type |
---|---|---|---|
body | false | UserNameDTO |
Response
List[HashrateModel]
Errors
Status Code | Reason | Response Model |
---|
POST /address/ban/list
listBannedAddress
List all banned addresses.
Parameters
- body
Parameter | Required | Description | Data Type |
---|---|---|---|
body | false | AddressDTO |
Response
List[string]
Errors
Status Code | Reason | Response Model |
---|
GET /connection/list
getConnectionsList
Return the list of all worker connections.
Parameters
Response
List[WorkerConnectionDTO]
Errors
Status Code | Reason | Response Model |
---|
Data Types
AddPoolDTO
name | type | description |
---|---|---|
username | string | - |
poolHost | string | - |
poolName | string | - |
workerNameSeparator | string | - |
appendWorkerNames | boolean | - |
isEnabled | boolean | - |
weight | int | - |
useWorkerPassword | boolean | - |
enableExtranonceSubscribe | boolean | - |
priority | int | - |
password | string | - |
AddressDTO
name | type | description |
---|---|---|
address | string | - |
ChangePriorityDTO
name | type | description |
---|---|---|
poolName | string | - |
priority | int | - |
ConnectionIdentifierDTO
name | type | description |
---|---|---|
address | string | - |
port | int | - |
HashrateModel
name | type | description |
---|---|---|
acceptedHashrate | long | - |
rejectedHashrate | long | - |
name | string | - |
captureTime | long | - |
LogEntry
name | type | description |
---|---|---|
message | string | - |
timestamp | long | - |
LogLevelDTO
name | type | description |
---|---|---|
logLevel | string | - |
PoolDetailsDTO
name | type | description |
---|---|---|
lastStopCause | string | - |
extranonce2Size | int | - |
username | string | - |
numberOfWorkerConnections | int | - |
lastPoolMessage | string | - |
isActiveSince | long | - |
appendWorkerNames | boolean | - |
rejectedHashesPerSeconds | long | - |
isReadySince | long | - |
isReady | boolean | - |
isEnabled | boolean | - |
acceptedHashesPerSeconds | long | - |
weight | int | - |
rejectedDifficulty | double | - |
difficulty | string | - |
isActive | boolean | - |
isExtranonceSubscribeEnabled | boolean | - |
useWorkerPassword | boolean | - |
workerNamesSeparator | string | - |
workerExtranonce2Size | int | - |
host | string | - |
name | string | - |
extranonce1 | string | - |
password | string | - |
priority | int | - |
lastStopDate | long | - |
isStable | boolean | - |
numberOfDisconnections | int | - |
acceptedDifficulty | double | - |
uptime | long | - |
PoolNameDTO
name | type | description |
---|---|---|
poolName | string | - |
ProxyVersionDTO
name | type | description |
---|---|---|
fullName | string | - |
proxyVersion | string | - |
RemovePoolDTO
name | type | description |
---|---|---|
poolName | string | - |
keepHistory | boolean | - |
StatusDTO
name | type | description |
---|---|---|
message | string | - |
status | string | - |
SummaryDTO
name | type | description |
---|---|---|
poolUptime | long | - |
acceptedHashrate | long | - |
hashrate | long | - |
rejectedHashrate | long | - |
currentPoolName | string | - |
totalErrors | int | - |
TimestampDTO
name | type | description |
---|---|---|
timestamp | long | - |
UpdatePoolDTO
name | type | description |
---|---|---|
username | string | - |
appendWorkerNames | boolean | - |
weight | int | - |
useWorkerPassword | boolean | - |
workerNamesSeparator | string | - |
isExtranonceSubscribeEnabled | boolean | - |
host | string | - |
name | string | - |
priority | int | - |
password | string | - |
UserDetailsDTO
name | type | description |
---|---|---|
rejectedHashesPerSeconds | long | - |
firstConnectionDate | long | - |
acceptedHashesPerSeconds | long | - |
rejectedDifficulty | double | - |
lastShareSubmitted | long | - |
name | string | - |
acceptedShareNumber | long | - |
connections | Array[WorkerConnectionDTO] | - |
rejectedShareNumber | long | - |
acceptedDifficulty | double | - |
UserNameDTO
name | type | description |
---|---|---|
username | string | - |
WorkerConnectionDTO
name | type | description |
---|---|---|
poolName | string | - |
isActiveSince | long | - |
rejectedHashesPerSeconds | long | - |
remotePort | string | - |
acceptedHashesPerSeconds | long | - |
connectionType | string | - |
workerVersion | string | - |
isExtranonceNotificationSupported | boolean | - |
authorizedUsers | Array[string] | - |
remoteHost | string | - |
#License
GPLv3
Of course, if you want make a little donation, you are welcome :)
BTC: 19wv8FQKv3NkwTdzBCQn1AGsb9ghqBPWXi