From 6aa0066b381ee18e6a25edbde04bf216a8e10701 Mon Sep 17 00:00:00 2001 From: Dan Lynch Date: Thu, 22 May 2025 14:06:42 -0700 Subject: [PATCH] Add bitcoin local network support --- docs/config/_meta.json | 3 +- docs/config/bitcoin.mdx | 19 +++++++++ starship/charts/devnet/defaults.yaml | 12 ++++++ .../templates/chains/bitcoin/service.yaml | 27 +++++++++++++ .../templates/chains/bitcoin/statefulset.yaml | 39 +++++++++++++++++++ starship/charts/devnet/values.schema.json | 3 +- 6 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 docs/config/bitcoin.mdx create mode 100644 starship/charts/devnet/templates/chains/bitcoin/service.yaml create mode 100644 starship/charts/devnet/templates/chains/bitcoin/statefulset.yaml diff --git a/docs/config/_meta.json b/docs/config/_meta.json index 412015dac..bcc9a16a6 100644 --- a/docs/config/_meta.json +++ b/docs/config/_meta.json @@ -3,5 +3,6 @@ "chains": "Chains Directive Syntax", "relayers": "Relayers Directive Syntax", "features": "Feature Toggles", - "ethereum": "Ethereum" + "ethereum": "Ethereum", + "bitcoin": "Bitcoin" } diff --git a/docs/config/bitcoin.mdx b/docs/config/bitcoin.mdx new file mode 100644 index 000000000..9b884ee37 --- /dev/null +++ b/docs/config/bitcoin.mdx @@ -0,0 +1,19 @@ +# Bitcoin Chain Configuration in Starship + +Starship now supports running a local Bitcoin network alongside Cosmos and Ethereum chains. +The configuration mirrors other chains and can be added in the `chains` section of your +Starship config file. + +## Example Configuration +```yaml +chains: + - id: bitcoin-local + name: bitcoin + numValidators: 1 + ports: + rpc: 18443 + p2p: 18444 +``` + +This will start a single `bitcoind` node in regtest mode exposing RPC on `18443` and +P2P on `18444` which you can port-forward to localhost. diff --git a/starship/charts/devnet/defaults.yaml b/starship/charts/devnet/defaults.yaml index 5b6d5e71f..3e06169cb 100644 --- a/starship/charts/devnet/defaults.yaml +++ b/starship/charts/devnet/defaults.yaml @@ -916,6 +916,18 @@ defaultChains: - --chain-config-file=/etc/config/config.yml - --suggested-fee-recipient=0x0C46c2cAFE097b4f7e1BB868B89e5697eE65f934 + bitcoin: + image: ruimarinho/bitcoin-core:latest + home: /bitcoin + binary: bitcoind + prefix: btc + denom: satoshi + prettyName: Bitcoin + coins: 2100000000000000satoshi + hdPath: m/44'/0'/0'/0/0 + coinType: 0 + repo: https://github.com/bitcoin/bitcoin + defaultRelayers: ts-relayer: image: ghcr.io/cosmology-tech/starship/ts-relayer:0.9.0 diff --git a/starship/charts/devnet/templates/chains/bitcoin/service.yaml b/starship/charts/devnet/templates/chains/bitcoin/service.yaml new file mode 100644 index 000000000..12fe66f4c --- /dev/null +++ b/starship/charts/devnet/templates/chains/bitcoin/service.yaml @@ -0,0 +1,27 @@ +{{- range $chain := .Values.chains }} +{{- if hasPrefix "bitcoin" $chain.name }} +{{ $defaultFile := $.Files.Get "defaults.yaml" | fromYaml }} +{{ $chain := include "devnet.fullchain" (dict "name" $chain.id "file" $defaultFile "context" $) | fromJson }} +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ $chain.name }}-{{ $chain.id }} + labels: + app.kubernetes.io/name: {{ $chain.name }}-{{ $chain.id }} +spec: + clusterIP: None + ports: + - name: rpc + port: {{ $chain.ports.rpc | default 18443 }} + protocol: TCP + targetPort: {{ $chain.ports.rpc | default 18443 }} + - name: p2p + port: {{ $chain.ports.p2p | default 18444 }} + protocol: TCP + targetPort: {{ $chain.ports.p2p | default 18444 }} + selector: + app.kubernetes.io/name: {{ $chain.name }}-{{ $chain.id }} +--- +{{- end }} +{{- end }} diff --git a/starship/charts/devnet/templates/chains/bitcoin/statefulset.yaml b/starship/charts/devnet/templates/chains/bitcoin/statefulset.yaml new file mode 100644 index 000000000..3e2770eaf --- /dev/null +++ b/starship/charts/devnet/templates/chains/bitcoin/statefulset.yaml @@ -0,0 +1,39 @@ +{{- range $chain := .Values.chains }} +{{- if hasPrefix "bitcoin" $chain.name }} +{{ $defaultFile := $.Files.Get "defaults.yaml" | fromYaml }} +{{ $chain := include "devnet.fullchain" (dict "name" $chain.id "file" $defaultFile "context" $) | fromJson }} +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ $chain.name }}-{{ $chain.id }} +spec: + serviceName: {{ $chain.name }}-{{ $chain.id }} + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: {{ $chain.name }}-{{ $chain.id }} + template: + metadata: + labels: + app.kubernetes.io/name: {{ $chain.name }}-{{ $chain.id }} + app.kubernetes.io/type: {{ $chain.id }} + spec: + containers: + - name: bitcoind + image: {{ $chain.image }} + args: + - "-regtest" + - "-server" + - "-txindex" + - "-rpcallowip=0.0.0.0/0" + - "-rpcbind=0.0.0.0" + - "-port={{ $chain.ports.p2p | default 18444 }}" + - "-rpcport={{ $chain.ports.rpc | default 18443 }}" + ports: + - containerPort: {{ $chain.ports.rpc | default 18443 }} + name: rpc + - containerPort: {{ $chain.ports.p2p | default 18444 }} + name: p2p +{{- end }} +{{- end }} diff --git a/starship/charts/devnet/values.schema.json b/starship/charts/devnet/values.schema.json index b852d1090..6d4476392 100644 --- a/starship/charts/devnet/values.schema.json +++ b/starship/charts/devnet/values.schema.json @@ -148,7 +148,8 @@ "hyperweb", "noble", "xpla", - "ethereum" + "ethereum", + "bitcoin" ] }, "numValidators": {