Skip to content

chore: migrate hedera local node to solo (#1668)#1675

Open
BartoszSolkaBD wants to merge 31 commits into
mainfrom
1668-Migrate-Hiero-Local-Node-to-Solo
Open

chore: migrate hedera local node to solo (#1668)#1675
BartoszSolkaBD wants to merge 31 commits into
mainfrom
1668-Migrate-Hiero-Local-Node-to-Solo

Conversation

@BartoszSolkaBD
Copy link
Copy Markdown
Contributor

@BartoszSolkaBD BartoszSolkaBD commented May 5, 2026

Description:

This PR migrates the repository from Hedera Local Node to Hiero Solo

Related issue(s):

Fixes #1668

Checklist

  • Documented (Code comments, README, etc.)
  • Tested (unit, integration, etc.)

Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
@BartoszSolkaBD BartoszSolkaBD added this to the 0.12.0 milestone May 5, 2026
@BartoszSolkaBD BartoszSolkaBD self-assigned this May 5, 2026
@swirlds-automation
Copy link
Copy Markdown
Contributor

swirlds-automation commented May 5, 2026

Snyk checks have passed. No issues have been found so far.

Status Scan Engine Critical High Medium Low Total (0)
Open Source Security 0 0 0 0 0 issues
Licenses 0 0 0 0 0 issues

💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse.

@BartoszSolkaBD BartoszSolkaBD added dependencies Pull requests that update a dependency file github_actions Pull requests that update GitHub Actions code process Build, test and deployment-process related tasks labels May 5, 2026
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 5, 2026

Test Results

133 tests  ±0   131 ✅ ±0   8m 40s ⏱️ + 4m 54s
 42 suites ±0     2 💤 ±0 
  8 files   ±0     0 ❌ ±0 

Results for commit ee3e58e. ± Comparison against base commit affbd3f.

This pull request removes 1 and adds 1 tests. Note that renamed tests count towards both.
should NOT be able to aggregate 200 calls to processLongInputTx ‑ Multicall Test Suite payable calls with large input should NOT be able to aggregate 200 calls to processLongInputTx
should NOT be able to aggregate 500 calls to processLongInputTx ‑ Multicall Test Suite payable calls with large input should NOT be able to aggregate 500 calls to processLongInputTx

♻️ This comment has been updated with latest results.

Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
…description (#1668)

Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
@BartoszSolkaBD BartoszSolkaBD marked this pull request as ready for review May 7, 2026 08:24
@BartoszSolkaBD BartoszSolkaBD requested a review from a team as a code owner May 7, 2026 08:24
@BartoszSolkaBD BartoszSolkaBD requested review from a team as code owners May 7, 2026 08:24
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
#1668)

Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
#1668)

Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The reason why we need port 50211 is the fact that we ignore our own configuration from local.env. If you use correct ports in Helper.buildSdkClient like I did here:
29270d0 (just use the values from .env, not hardcoded...)
it will work:
https://github.com/hashgraph/hedera-smart-contracts/actions/runs/25550325681?pr=1682

without the need to run port-forwarding at all. I think we should do this, because:
a) pipelines will be cleaner then,
b) we will use the values from .env, which is something I think we just should do. We build sdk client with: client.fromName(process.env.NETWORK_NAME) instead of usin client.forNetwork({process.env.NETWORK_URL: process.env.NETWORK_NODE}) and we ignore mirrornodeUrl entirely.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think alignment of the environment variables is a good idea. I think we should discuss which way we want to go (my personal opinion - let's do both custom network and predefined networks based on env combination. I'm not sure if it should be part of this PR. I think the action plan could be:

  1. Leave this PR as it is (with port forwarding)
  2. When Solo SDK and @hiero-ledger/sdk are aligned in terms of local network port - refactor CI to remove port forwarding
  3. Refactor env variables usage to provide more flexibility for the users

@jasuwienas please let me know what you think

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, that would be ok too, but it just feels strange to me that our application doesn’t allow configuring ports or using something other than 50211 for local instances. I would prefer to simply change Client.fromName to Client.forNetwork when we create SDK client, so users have more flexibility.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But it’s probably not even part of this PR, especially when we have 2 approaches to choose from right now...

jasuwienas
jasuwienas previously approved these changes May 8, 2026
Copy link
Copy Markdown
Contributor

@jasuwienas jasuwienas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, just one sugggestion, let me know what you think

natanasow
natanasow previously approved these changes May 11, 2026
simzzz
simzzz previously approved these changes May 12, 2026
PavelSBorisov
PavelSBorisov previously approved these changes May 12, 2026
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be converted to a workflow_call trigger under .github/workflows/zxc-setup-solo-stack.yaml we try to avoid adding in-line actions if we can.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would convert this to a bash script that can be used in-line as needed. Refactor to .github/workflows/support/scripts/solo-kubectl-port-forward.sh

Comment thread .github/workflows/erc-registry-indexer.yml
Comment thread .github/workflows/erc-registry-test.yml
Comment thread .github/workflows/foundry_test.yml
Comment thread .github/workflows/slither.yml Outdated
id: slither
with:
node-version: 20
node-version: 22
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
node-version: 22
node-version: 24

Comment thread .github/workflows/test-workflow.yml Outdated
Comment on lines +50 to +53
- name: Use Node.js [22]
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 20
node-version: 22
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- name: Use Node.js [22]
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 20
node-version: 22
- name: Use Node.js [24]
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 24

Comment thread .github/workflows/test-workflow.yml Outdated
timeout-minutes: 5
- name: Deploy local Hiero network (Solo / Kind)
id: solo_stack
uses: ./.github/actions/setup-solo-stack
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
uses: ./.github/actions/setup-solo-stack
uses: ./.github/workflows/zxc-setup-solo-stack.yaml

Comment thread .github/workflows/test-workflow.yml Outdated
Comment on lines +78 to +81
- name: Solo kubectl port forwards (50211 / 8545)
uses: ./.github/actions/solo-kubectl-port-forward
with:
namespace: ${{ steps.solo_stack.outputs.namespace }}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- name: Solo kubectl port forwards (50211 / 8545)
uses: ./.github/actions/solo-kubectl-port-forward
with:
namespace: ${{ steps.solo_stack.outputs.namespace }}
- name: Solo kubectl port forwards (50211 / 8545)
run: |
./.github/workflows/support/scripts/solo-kubectl-port-forward.sh ${{ steps.solo_stack.outputs.namespace }}

Comment thread .github/relay-values.yaml Outdated
DEBUG_API_ENABLED: "true"
ws:
config:
DEBUG_API_ENABLED: "true" No newline at end of file
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
DEBUG_API_ENABLED: "true"
DEBUG_API_ENABLED: "true"

… upgrade(#1668)

Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
@simzzz simzzz requested a review from rbarker-dev May 14, 2026 12:11
Copy link
Copy Markdown
Contributor

@rbarker-dev rbarker-dev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Small changes for consistency across workflow definitions.

Comment thread .github/workflows/support/scripts/setup-solo-stack.sh
Comment thread .github/scripts/setup-solo-stack.sh Outdated
{
echo "deployment_name=${SOLO_DEPLOYMENT}"
echo "namespace=${SOLO_NS}"
} >>"$GITHUB_OUTPUT"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
} >>"$GITHUB_OUTPUT"
} >>"${GITHUB_OUTPUT}"

Comment thread .github/scripts/setup-solo-stack.sh Outdated
Comment on lines +50 to +51
--deployment "$SOLO_DEPLOYMENT" \
--namespace "$SOLO_NS"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
--deployment "$SOLO_DEPLOYMENT" \
--namespace "$SOLO_NS"
--deployment "${SOLO_DEPLOYMENT}" \
--namespace "${SOLO_NS}"

Comment on lines +12 to +21
kubectl get svc haproxy-node1-svc -n "$NS"
kubectl port-forward -n "$NS" svc/haproxy-node1-svc 50211:50211 &
echo "Forwarding svc/haproxy-node1-svc → localhost:50211 (consensus gRPC for local-node)"

if kubectl get svc mirror-1-web3 -n "$NS" &>/dev/null; then
kubectl port-forward -n "$NS" svc/mirror-1-web3 8545:80 &
echo "Forwarding svc/mirror-1-web3 → localhost:8545 (mirror Web3)"
else
echo "::warning::svc/mirror-1-web3 not found in $NS; skipping 8545 forward"
fi
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
kubectl get svc haproxy-node1-svc -n "$NS"
kubectl port-forward -n "$NS" svc/haproxy-node1-svc 50211:50211 &
echo "Forwarding svc/haproxy-node1-svc → localhost:50211 (consensus gRPC for local-node)"
if kubectl get svc mirror-1-web3 -n "$NS" &>/dev/null; then
kubectl port-forward -n "$NS" svc/mirror-1-web3 8545:80 &
echo "Forwarding svc/mirror-1-web3 → localhost:8545 (mirror Web3)"
else
echo "::warning::svc/mirror-1-web3 not found in $NS; skipping 8545 forward"
fi
kubectl get svc haproxy-node1-svc -n "${NS}"
kubectl port-forward -n "${NS}" svc/haproxy-node1-svc 50211:50211 &
echo "Forwarding svc/haproxy-node1-svc → localhost:50211 (consensus gRPC for local-node)"
if kubectl get svc mirror-1-web3 -n "${NS}" &>/dev/null; then
kubectl port-forward -n "${NS}" svc/mirror-1-web3 8545:80 &
echo "Forwarding svc/mirror-1-web3 → localhost:8545 (mirror Web3)"
else
echo "::warning::svc/mirror-1-web3 not found in ${NS}; skipping 8545 forward"
fi

SOLO_VERSION="${SOLO_VERSION:?SOLO_VERSION is required}"

normalize_version() {
printf '%s' "$1" | sed 's/^v//'
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
printf '%s' "$1" | sed 's/^v//'
printf '%s' "${1}" | sed 's/^v//'

Comment on lines +26 to +32
if [[ "$(normalize_version "$INITIAL_NETWORK_TAG")" != "$(normalize_version "$TARGET_NETWORK_TAG")" ]]; then
npx @hashgraph/solo@${SOLO_VERSION} consensus network upgrade \
--deployment "$DEPLOYMENT" \
--upgrade-version "$(normalize_version "$TARGET_NETWORK_TAG")" \
--dev \
--force
fi
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if [[ "$(normalize_version "$INITIAL_NETWORK_TAG")" != "$(normalize_version "$TARGET_NETWORK_TAG")" ]]; then
npx @hashgraph/solo@${SOLO_VERSION} consensus network upgrade \
--deployment "$DEPLOYMENT" \
--upgrade-version "$(normalize_version "$TARGET_NETWORK_TAG")" \
--dev \
--force
fi
if [[ "$(normalize_version "${INITIAL_NETWORK_TAG}")" != "$(normalize_version "${TARGET_NETWORK_TAG}")" ]]; then
npx @hashgraph/solo@${SOLO_VERSION} consensus network upgrade \
--deployment "${DEPLOYMENT}" \
--upgrade-version "$(normalize_version "${TARGET_NETWORK_TAG}")" \
--dev \
--force
fi

Comment on lines +34 to +42
if [[ "$(normalize_version "$INITIAL_MIRROR_TAG")" != "$(normalize_version "$TARGET_MIRROR_TAG")" ]]; then
npx @hashgraph/solo@${SOLO_VERSION} mirror node upgrade \
--deployment "$DEPLOYMENT" \
--mirror-node-version "$TARGET_MIRROR_TAG" \
--values-file .github/mirror-node-values.yaml \
--enable-ingress \
--pinger \
--force-port-forward
fi
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if [[ "$(normalize_version "$INITIAL_MIRROR_TAG")" != "$(normalize_version "$TARGET_MIRROR_TAG")" ]]; then
npx @hashgraph/solo@${SOLO_VERSION} mirror node upgrade \
--deployment "$DEPLOYMENT" \
--mirror-node-version "$TARGET_MIRROR_TAG" \
--values-file .github/mirror-node-values.yaml \
--enable-ingress \
--pinger \
--force-port-forward
fi
if [[ "$(normalize_version "${INITIAL_MIRROR_TAG}")" != "$(normalize_version "${TARGET_MIRROR_TAG}")" ]]; then
npx @hashgraph/solo@${SOLO_VERSION} mirror node upgrade \
--deployment "${DEPLOYMENT}" \
--mirror-node-version "${TARGET_MIRROR_TAG}" \
--values-file .github/mirror-node-values.yaml \
--enable-ingress \
--pinger \
--force-port-forward
fi

Comment on lines +44 to +51
if [[ "$(normalize_version "$INITIAL_RELAY_TAG")" != "$(normalize_version "$TARGET_RELAY_TAG")" ]]; then
npx @hashgraph/solo@${SOLO_VERSION} relay node upgrade \
--deployment "$DEPLOYMENT" \
--relay-release "$TARGET_RELAY_TAG" \
--node-aliases "node1" \
--values-file .github/relay-values.yaml \
--force-port-forward
fi
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if [[ "$(normalize_version "$INITIAL_RELAY_TAG")" != "$(normalize_version "$TARGET_RELAY_TAG")" ]]; then
npx @hashgraph/solo@${SOLO_VERSION} relay node upgrade \
--deployment "$DEPLOYMENT" \
--relay-release "$TARGET_RELAY_TAG" \
--node-aliases "node1" \
--values-file .github/relay-values.yaml \
--force-port-forward
fi
if [[ "$(normalize_version "${INITIAL_RELAY_TAG}")" != "$(normalize_version "${TARGET_RELAY_TAG}")" ]]; then
npx @hashgraph/solo@${SOLO_VERSION} relay node upgrade \
--deployment "${DEPLOYMENT}" \
--relay-release "${TARGET_RELAY_TAG}" \
--node-aliases "node1" \
--values-file .github/relay-values.yaml \
--force-port-forward
fi

Signed-off-by: Bartosz Solka <bartosz.solka@blockydevs.com>
required: false
default: '@post-migration'
soloVersion:
description: 'npm version for @hashgraph/solo (Falcon one-shot on Kind)'
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This description is a little confusing. I would prefer to see it as "Version of @hiero-ledger/solo for Falcon one-shot".

Also, we should switch to the hiero-ledger version of solo from npm as we are working on only publishing from that org in the near-ish future.

Neither of these comments prevent this PR from closing and can be addressed in a future issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file github_actions Pull requests that update GitHub Actions code process Build, test and deployment-process related tasks

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Hedera Smart Contracts] Migrate Hiero Local Node to Solo

7 participants