Multi-stage Dockerfile clones KamadoPool at a pinned SHA, builds ckpool and kamado-api (with embedded Svelte UI), runtime image supervises both processes via tini + wait -n. Config covers bitcoind mainnet/testnet4 variant, payout address, coinbase tag, vardiff knobs, and log level. Web UI interface only — stratum :3333 requires a router port-forward or simpleproxy workaround because StartOS 0.3.x does not forward raw TCP on LAN. TODO before first build: pin KAMADO_REPO + KAMADO_SHA in the Dockerfile to a pushed commit.
46 lines
1.1 KiB
TypeScript
46 lines
1.1 KiB
TypeScript
import { matches, types as T } from "../deps.ts";
|
|
|
|
const { shape, boolean, arrayOf, string, dictionary, any } = matches;
|
|
|
|
const bitcoindMatcher = shape({
|
|
"rpc": shape({
|
|
"enable": boolean,
|
|
"username": string,
|
|
"password": string,
|
|
}, ["enable", "username", "password"]),
|
|
"advanced": shape({
|
|
"peers": shape({
|
|
"listen": boolean,
|
|
}, ["listen"]),
|
|
}, ["peers"]),
|
|
}, ["rpc", "advanced"]);
|
|
|
|
const checkBitcoind: T.ExpectedExports.dependencyConfig["check"] = async (
|
|
effects,
|
|
input,
|
|
) => {
|
|
const res = bitcoindMatcher.test(input);
|
|
if (!res) return { error: "Bitcoin Core RPC settings are missing." };
|
|
if (!input.rpc.enable) {
|
|
return { error: "Bitcoin Core RPC must be enabled." };
|
|
}
|
|
return { result: null };
|
|
};
|
|
|
|
const autoBitcoind: T.ExpectedExports.dependencyConfig["autoConfigure"] =
|
|
async (effects, input) => {
|
|
input.rpc.enable = true;
|
|
return { result: input };
|
|
};
|
|
|
|
export const dependencies: T.ExpectedExports.dependencies = {
|
|
"bitcoind": {
|
|
check: checkBitcoind,
|
|
autoConfigure: autoBitcoind,
|
|
},
|
|
"bitcoind-testnet": {
|
|
check: checkBitcoind,
|
|
autoConfigure: autoBitcoind,
|
|
},
|
|
};
|