├── .do ├── README.md └── deploy.template.yaml ├── .github └── workflows │ ├── build.yml │ ├── ci.yml │ ├── dockerhub-readme.yml │ ├── internal-action-test.yml │ ├── internal-build.yml │ ├── internal-push.yml │ ├── internal-test.yml │ └── stale.yml ├── .gitignore ├── .scripts ├── images-additional-tests ├── images-deps └── images-with-extras ├── Dockerfile ├── LICENSE ├── Makefile ├── README.md ├── action.yml ├── common ├── core │ └── bin │ │ └── start ├── friendbot │ ├── bin │ │ └── start │ └── etc │ │ └── friendbot.cfg ├── horizon │ ├── bin │ │ ├── horizon │ │ └── start │ └── etc │ │ └── horizon.env ├── lab │ └── bin │ │ └── start ├── nginx │ ├── bin │ │ └── start │ └── etc │ │ ├── conf.d │ │ ├── horizon.conf │ │ ├── lab.conf │ │ └── stellar-rpc.conf │ │ └── nginx.conf ├── postgresql │ ├── .pgpass │ └── etc │ │ ├── pg_hba.conf │ │ ├── pg_ident.conf │ │ └── postgresql.conf ├── stellar-rpc │ └── bin │ │ └── start └── supervisor │ └── etc │ ├── supervisord.conf │ └── supervisord.conf.d │ ├── horizon.conf │ ├── nginx.conf │ ├── postgresql.conf │ ├── stellar-core.conf │ ├── stellar-lab.conf │ └── stellar-rpc.conf ├── dependencies ├── futurenet ├── core │ └── etc │ │ └── stellar-core.cfg ├── horizon │ └── etc │ │ └── stellar-captive-core.cfg ├── nginx │ └── etc │ │ └── conf.d │ │ └── friendbot.conf └── stellar-rpc │ └── etc │ ├── stellar-captive-core.cfg │ └── stellar-rpc.cfg ├── images.json ├── local ├── core │ └── etc │ │ ├── config-settings │ │ ├── README.md │ │ ├── p21 │ │ │ ├── testnet.json │ │ │ └── unlimited.json │ │ ├── p22 │ │ │ ├── testnet.json │ │ │ └── unlimited.json │ │ ├── p23 │ │ │ ├── testnet.json │ │ │ └── unlimited.json │ │ └── settings_enable_upgrades.json │ │ └── stellar-core.cfg ├── horizon │ └── etc │ │ ├── horizon.env │ │ └── stellar-captive-core.cfg ├── nginx │ └── etc │ │ └── conf.d │ │ ├── friendbot.conf │ │ └── history-archive.conf ├── stellar-rpc │ └── etc │ │ ├── stellar-captive-core.cfg │ │ └── stellar-rpc.cfg └── supervisor │ └── etc │ └── supervisord.conf.d │ ├── friendbot.conf │ └── history-archive.conf ├── pubnet ├── core │ └── etc │ │ └── stellar-core.cfg ├── horizon │ └── etc │ │ └── stellar-captive-core.cfg └── stellar-rpc │ └── etc │ ├── stellar-captive-core.cfg │ └── stellar-rpc.cfg ├── start ├── testnet ├── core │ └── etc │ │ └── stellar-core.cfg ├── horizon │ └── etc │ │ └── stellar-captive-core.cfg ├── nginx │ └── etc │ │ └── conf.d │ │ └── friendbot.conf └── stellar-rpc │ └── etc │ ├── stellar-captive-core.cfg │ └── stellar-rpc.cfg └── tests ├── test_core.go ├── test_friendbot.go ├── test_horizon_core_up.go ├── test_horizon_ingesting.go ├── test_horizon_up.go ├── test_stellar_rpc_healthy.go └── test_stellar_rpc_up.go /.do/README.md: -------------------------------------------------------------------------------- 1 | # Quickstart Deploy Template for Digital Ocean 2 | 3 | The files in this directory are a deploy template for the Digital Ocean App Platform that deploys the Quickstart image. 4 | 5 | See the repository [README] for instructions for how to use. 6 | 7 | [README]: /README.md#deploy-to-digital-ocean 8 | -------------------------------------------------------------------------------- /.do/deploy.template.yaml: -------------------------------------------------------------------------------- 1 | spec: 2 | name: stellar 3 | services: 4 | - name: stellar 5 | image: 6 | registry_type: DOCKER_HUB 7 | registry: stellar 8 | repository: quickstart 9 | tag: latest 10 | instance_count: 1 11 | http_port: 8000 12 | health_check: 13 | initial_delay_seconds: 30 14 | http_path: / 15 | routes: 16 | - path: / 17 | envs: 18 | # NETWORK chooses the network the image will connect to. Use "local" to 19 | # start a new network local to the container, ideal for development and 20 | # testing. 21 | - key: NETWORK 22 | value: 'local' 23 | scope: RUN_TIME 24 | 25 | # LIMITS sets the network configuration that is deployed on network start. 26 | # - "testnet" to match the network configuration of the public Stellar testnet. 27 | # - "unlimited" raises limits to max, useful for testing prior to optimization. 28 | - key: LIMITS 29 | value: 'testnet' 30 | scope: RUN_TIME 31 | 32 | # RANDOMIZE_NETWORK_PASSPHRASE sets a random network passphrase on network 33 | # start. Find out what the network passphrase is by requesting the root URL. 34 | - key: RANDOMIZE_NETWORK_PASSPHRASE 35 | value: 'false' 36 | scope: RUN_TIME 37 | 38 | # NETWORK_PASSPHRASE sets a network passphrase to uniquely identify the network 39 | # and prevent use of transactions for the test network with other networks. 40 | - key: NETWORK_PASSPHRASE 41 | value: '' 42 | scope: RUN_TIME 43 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | # This workflow builds multiple quickstart images as defined in the images json 4 | # passed to the workflow across the architectures defined in the archs input. 5 | # 6 | # See the images.json file in the repo for how to define the JSON for a set of 7 | # images. 8 | # 9 | # This workflow is intended to be called by third parties to build custom 10 | # quickstart images. See the repository README for an example. 11 | 12 | on: 13 | workflow_call: 14 | inputs: 15 | repo: 16 | description: "Quickstart repo where quickstart is hosted" 17 | type: "string" 18 | default: "stellar/quickstart" 19 | ref: 20 | description: "Quickstart ref to build should match workflow (sha, branch, tag)" 21 | type: "string" 22 | default: "main" 23 | images: 24 | description: "A custom image.json (a single image from the same format as images.json), if not provided the full images.json is run" 25 | type: "string" 26 | required: true 27 | archs: 28 | description: 'Architectures to build for as an array (e.g. ["amd64", "arm64"])' 29 | type: "string" 30 | required: true 31 | test: 32 | description: "Whether the image tests should run" 33 | type: "boolean" 34 | default: true 35 | 36 | env: 37 | artifact_retention_days_for_image: 7 38 | 39 | jobs: 40 | 41 | complete: 42 | if: always() 43 | name: complete 44 | needs: [setup, build, test] 45 | runs-on: ubuntu-latest 46 | steps: 47 | - if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') 48 | run: exit 1 49 | 50 | setup: 51 | name: 1 setup 52 | runs-on: ubuntu-latest 53 | outputs: 54 | sha: ${{ steps.sha.outputs.sha }} 55 | tag-prefix: ${{ steps.tag-prefix.outputs.tag-prefix }} 56 | steps: 57 | - uses: actions/checkout@v2 58 | with: 59 | repository: ${{ inputs.repo }} 60 | ref: ${{ inputs.ref }} 61 | - name: Sha 62 | id: sha 63 | run: | 64 | echo "sha=$(git rev-parse HEAD)" | tee -a $GITHUB_OUTPUT 65 | 66 | build: 67 | name: 2 build 68 | needs: setup 69 | uses: ./.github/workflows/internal-build.yml 70 | with: 71 | repo: ${{ inputs.repo }} 72 | sha: ${{ needs.setup.outputs.sha }} 73 | images: ${{ inputs.images }} 74 | archs: ${{ inputs.archs }} 75 | 76 | test: 77 | if: inputs.test 78 | name: 3 test 79 | needs: [setup, build] 80 | uses: ./.github/workflows/internal-test.yml 81 | with: 82 | repo: ${{ inputs.repo }} 83 | sha: ${{ needs.setup.outputs.sha }} 84 | images: ${{ inputs.images }} 85 | archs: ${{ inputs.archs }} 86 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | # This workflow builds all the images defined in images.json with the specified 4 | # dependencies, and runs a set of locally defined tests. 5 | # 6 | # Each image defined in images.json specifies the events the image should be 7 | # rebuilt and pushed. Most images will do so for push and pull_request, but can 8 | # also be specified to build on a schedule. 9 | # 10 | # The tests in this repo are designed to make sure that when quickstart starts 11 | # up it is able to either sync with an existing network, or start a new network 12 | # that is progressing. 13 | # 14 | # This workflow also tests that the quickstart action functions. 15 | 16 | on: 17 | push: 18 | branches: 19 | - main 20 | pull_request: 21 | schedule: 22 | - cron: '0 0 * * *' 23 | 24 | # Prevent more than one build of this workflow for a branch to be running at the 25 | # same time, and if multiple are queued, only run the latest, cancelling any 26 | # already running build. The exception being any protected branch, such as 27 | # main, where a build for every commit will run. 28 | concurrency: 29 | group: ${{ github.workflow }}-${{ github.ref_protected == true && github.sha || github.ref }} 30 | cancel-in-progress: true 31 | 32 | jobs: 33 | 34 | complete: 35 | if: always() 36 | name: complete 37 | needs: [build, test, action-using-artifact, push, action-using-registry] 38 | runs-on: ubuntu-latest 39 | steps: 40 | - if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') 41 | run: exit 1 42 | 43 | setup: 44 | name: 1 setup 45 | runs-on: ubuntu-latest 46 | outputs: 47 | sha: ${{ steps.sha.outputs.sha }} 48 | tag-prefix: ${{ steps.tag-prefix.outputs.tag-prefix }} 49 | tag-alias-prefix: ${{ steps.tag-prefix.outputs.tag-alias-prefix }} 50 | images: ${{ steps.images.outputs.images }} 51 | tags: ${{ steps.tags.outputs.tags }} 52 | archs: ${{ steps.archs.outputs.archs }} 53 | steps: 54 | - uses: actions/checkout@v2 55 | with: 56 | fetch-depth: 0 # Get all history for the sha count below. 57 | ref: ${{ github.event.pull_request.head.sha || github.sha }} 58 | - name: Sha 59 | id: sha 60 | run: | 61 | echo "sha=$(git rev-parse HEAD)" | tee -a $GITHUB_OUTPUT 62 | - name: Tag Prefix 63 | id: tag-prefix 64 | run: | 65 | pr_prefix="${{ github.event_name == 'pull_request' && format('pr{0}-', github.event.pull_request.number) || '' }}" 66 | commit_count="$(git rev-list HEAD --count --first-parent)" 67 | build_number="${{ github.run_number }}.${{ github.run_attempt }}" 68 | echo "tag-prefix=${pr_prefix}v${commit_count}-b${build_number}-" | tee -a $GITHUB_OUTPUT 69 | echo "tag-alias-prefix=${pr_prefix}" | tee -a $GITHUB_OUTPUT 70 | - name: Images 71 | id: images 72 | run: | 73 | images="$(> $GITHUB_ENV 77 | echo "images=$images" >> $GITHUB_OUTPUT 78 | - name: Tags 79 | id: tags 80 | run: | 81 | tags="$(<<< $images jq -c '[.[].tag]')" 82 | <<< $tags jq 83 | echo "tags=$tags" >> $GITHUB_OUTPUT 84 | - name: Architectures 85 | id: archs 86 | run: | 87 | archs='["amd64","arm64"]' 88 | <<< $archs jq 89 | echo "archs=$archs" >> $GITHUB_OUTPUT 90 | 91 | build: 92 | name: 2 build 93 | needs: setup 94 | uses: ./.github/workflows/internal-build.yml 95 | with: 96 | repo: ${{ github.repository }} 97 | sha: ${{ needs.setup.outputs.sha }} 98 | images: ${{ needs.setup.outputs.images }} 99 | archs: ${{ needs.setup.outputs.archs }} 100 | 101 | test: 102 | name: 3 test 103 | needs: [setup, build] 104 | uses: ./.github/workflows/internal-test.yml 105 | with: 106 | repo: ${{ github.repository }} 107 | sha: ${{ needs.setup.outputs.sha }} 108 | images: ${{ needs.setup.outputs.images }} 109 | archs: ${{ needs.setup.outputs.archs }} 110 | 111 | action-using-artifact: 112 | needs: [setup, build] 113 | name: 4 test action artifact 114 | uses: ./.github/workflows/internal-action-test.yml 115 | with: 116 | artifact: image-quickstart-${{ fromJSON(needs.setup.outputs.tags)[0] }}-${{ fromJSON(needs.setup.outputs.archs)[0] }}.tar 117 | tag: ${{ fromJSON(needs.setup.outputs.tags)[0] }}-${{ fromJSON(needs.setup.outputs.archs)[0] }} 118 | 119 | push: 120 | name: 5 push 121 | needs: [setup, build] 122 | uses: ./.github/workflows/internal-push.yml 123 | with: 124 | sha: ${{ needs.setup.outputs.sha }} 125 | tags: ${{ needs.setup.outputs.tags }} 126 | archs: ${{ needs.setup.outputs.archs }} 127 | tag-prefix: ${{ needs.setup.outputs.tag-prefix }} 128 | tag-alias-prefix: ${{ needs.setup.outputs.tag-alias-prefix }} 129 | registry_repo: ${{ github.repository }} 130 | secrets: 131 | registry: ${{ secrets.DOCKERHUB_TOKEN && 'docker.io' || 'ghcr.io' }} 132 | registry_username: ${{ secrets.DOCKERHUB_USERNAME || github.actor }} 133 | registry_password: ${{ secrets.DOCKERHUB_TOKEN || github.token }} 134 | 135 | action-using-registry: 136 | needs: [setup, push] 137 | name: 6 test action registry 138 | uses: ./.github/workflows/internal-action-test.yml 139 | with: 140 | tag: ${{ needs.setup.outputs.tag-prefix }}${{ fromJSON(needs.setup.outputs.tags)[0] }} 141 | -------------------------------------------------------------------------------- /.github/workflows/dockerhub-readme.yml: -------------------------------------------------------------------------------- 1 | name: DockerHub README 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | paths: 8 | - README.md 9 | - .github/workflows/dockerhub-readme.yml 10 | 11 | jobs: 12 | update-dockerhub-readme: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Checkout repository 16 | uses: actions/checkout@v5 17 | - name: Update DockerHub README 18 | uses: peter-evans/dockerhub-description@1b9a80c056b620d92cedb9d9b5a223409c68ddfa # v5.0.0 19 | with: 20 | username: ${{ secrets.DOCKERHUB_USERNAME }} 21 | password: ${{ secrets.DOCKERHUB_TOKEN }} 22 | repository: ${{ github.repository }} 23 | readme-filepath: ./README.md 24 | -------------------------------------------------------------------------------- /.github/workflows/internal-action-test.yml: -------------------------------------------------------------------------------- 1 | name: Action Test 2 | 3 | on: 4 | workflow_call: 5 | inputs: 6 | tag: 7 | description: 'Tag to use' 8 | type: 'string' 9 | default: '' 10 | artifact: 11 | description: 'Artifact to use' 12 | type: 'string' 13 | default: '' 14 | 15 | jobs: 16 | action-setup: 17 | runs-on: ubuntu-latest 18 | outputs: 19 | os: ${{ steps.os.outputs.os }} 20 | steps: 21 | - uses: actions/checkout@v4 22 | with: 23 | fetch-depth: 0 24 | - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 25 | id: changes 26 | with: 27 | filters: | 28 | action: 29 | - 'action.yml' 30 | - '.github/workflows/action-test.yml' 31 | list-files: shell 32 | - uses: actions/github-script@v8 33 | id: os 34 | env: 35 | ACTION_CHANGED: ${{ steps.changes.outputs.action }} 36 | with: 37 | script: | 38 | const os = ['ubuntu-latest']; 39 | // Only run the additional builds if the action has changed, and this 40 | // is not a test with an artifact image. The additional runs are time 41 | // consuming so only do them if necessary. Don't run them for artifact 42 | // action tests because the test won't be multiplatform since the 43 | // artifact images contain only a single platform. 44 | if (process.env.ACTION_CHANGED === 'true' && '${{ inputs.artifact }}' === '') { 45 | os.push('ubuntu-24.04-arm'); 46 | os.push('macos-13'); 47 | } 48 | core.setOutput('os', JSON.stringify(os)); 49 | 50 | action-test: 51 | needs: action-setup 52 | strategy: 53 | fail-fast: false 54 | matrix: 55 | os: ${{ fromJson(needs.action-setup.outputs.os) }} 56 | runs-on: ${{ matrix.os }} 57 | timeout-minutes: 60 58 | steps: 59 | - uses: actions/checkout@v4 60 | - uses: ./ 61 | with: 62 | artifact: ${{ inputs.artifact }} 63 | tag: ${{ inputs.tag }} 64 | - name: "Run basic test making sure RPC and Horizon are available" 65 | run: > 66 | RESP=`curl --no-progress-meter -X POST -H 'Content-Type: application/json' -d 67 | '{"jsonrpc": "2.0", "id": 8675309, "method": "getLatestLedger"}' http://localhost:8000/rpc` 68 | 69 | echo "RPC getLatestLedger response: $RESP" 70 | 71 | echo "$RESP" | grep sequence 72 | 73 | RESP=`curl -i -o - --silent 'http://localhost:8000/ledgers?limit=1' 74 | -H 'Accept: application/json'` 75 | 76 | echo "Horizon ledgers response: $RESP" 77 | 78 | echo "$RESP" | grep "200 OK" 79 | -------------------------------------------------------------------------------- /.github/workflows/internal-build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | # This workflow builds multiple quickstart images as defined in the images json 4 | # passed to the workflow across the architectures defined in the archs input. 5 | # 6 | # See the images.json file in the repo for how to define the JSON for a set of 7 | # images. 8 | # 9 | # This workflow is intended to be called by workflows inside this repo. 10 | # 11 | # The build process first builds the dependencies (xdr, core, rpc, horizon, 12 | # friendbot, lab). When doing so the dependencies needed as specified by the 13 | # images json are deduplicated so that any software shared by the images is 14 | # only built once. Dependencies are cached and so only rebuilt when needed. 15 | # Dependencies are defined by a tag or branch, but when building those git refs 16 | # are resolved to a sha to ensure stability of the sha throughout the full 17 | # build process. For all dependencies and the final image, amd64 and arm64 18 | # variants may be built. 19 | 20 | on: 21 | workflow_call: 22 | inputs: 23 | repo: 24 | description: "Quickstart repo where quickstart is hosted" 25 | type: "string" 26 | required: true 27 | sha: 28 | description: "Quickstart sha to build should match workflow" 29 | type: "string" 30 | required: true 31 | images: 32 | description: "A custom image.json (a single image from the same format as images.json), if not provided the full images.json is run" 33 | type: "string" 34 | required: true 35 | archs: 36 | description: 'Architectures to build for as an array (e.g. ["amd64", "arm64"])' 37 | type: "string" 38 | required: true 39 | cache_id: 40 | description: "A value insert into cache keys to namespace cache usage, or invalidate it by incrementing" 41 | type: "string" 42 | default: 15 43 | cache_prefix: 44 | description: "A prefix added to all cache keys generated by this workflow" 45 | type: "string" 46 | default: "quickstart-" 47 | 48 | env: 49 | artifact_retention_days_for_image: 7 50 | 51 | jobs: 52 | 53 | complete: 54 | if: always() 55 | name: complete 56 | needs: [setup, load, build] 57 | runs-on: ubuntu-latest 58 | steps: 59 | - if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') 60 | run: exit 1 61 | 62 | setup: 63 | name: 1 setup 64 | runs-on: ubuntu-latest 65 | outputs: 66 | images: ${{ steps.images.outputs.images }} 67 | deps: ${{ steps.deps.outputs.deps }} 68 | additional-tests: ${{ steps.tests.outputs.additional-tests }} 69 | steps: 70 | - uses: actions/checkout@v2 71 | with: 72 | repository: ${{ inputs.repo }} 73 | ref: ${{ inputs.sha }} 74 | - name: Images with Extras 75 | id: images 76 | env: 77 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 78 | images: ${{ inputs.images }} 79 | run: | 80 | images="$(<<< $images ./.scripts/images-with-extras)" 81 | <<< $images jq 82 | echo "images=$images" >> $GITHUB_OUTPUT 83 | echo "images=$images" >> $GITHUB_ENV 84 | - name: Deps 85 | id: deps 86 | run: | 87 | deps="$(<<< $images ./.scripts/images-deps)" 88 | <<< $deps jq 89 | echo "deps=$deps" >> $GITHUB_OUTPUT 90 | 91 | load: 92 | needs: [setup] 93 | strategy: 94 | matrix: 95 | dep: ${{ fromJSON(needs.setup.outputs.deps) }} 96 | arch: ${{ fromJSON(inputs.archs) }} 97 | fail-fast: false 98 | name: 2 load (${{ matrix.dep.name }}, ${{ matrix.dep.ref }}, ${{ matrix.arch }}, ${{ matrix.dep.options && toJSON(matrix.dep.options) || '-' }}) 99 | runs-on: ubuntu-latest 100 | env: 101 | dep_json: ${{ toJSON(matrix.dep) }} 102 | image_filename: image-${{ matrix.dep.name }}-${{ matrix.dep.id }}-${{ matrix.arch }}.tar 103 | json_filename: image-${{ matrix.dep.name }}-${{ matrix.dep.id }}-${{ matrix.arch }}.json 104 | missing_filename: missing-${{ matrix.dep.name }}-${{ matrix.dep.id }}-${{ matrix.arch }}.json 105 | steps: 106 | - name: Create Dep Details JSON (with arch) 107 | run: > 108 | echo "${dep_json}" 109 | | jq --arg arch ${{ matrix.arch }} '.arch = $arch' 110 | | tee /tmp/${{ env.json_filename }} 111 | - name: Upload Dep Details JSON 112 | uses: actions/upload-artifact@v4 113 | with: 114 | name: ${{ env.json_filename }} 115 | path: /tmp/${{ env.json_filename }} 116 | retention-days: ${{ env.artifact_retention_days_for_image }} 117 | - name: Find Image in Cache 118 | id: cache 119 | uses: actions/cache/restore@v3 120 | with: 121 | key: ${{ inputs.cache_prefix }}${{ inputs.cache_id }}-${{ env.image_filename }} 122 | path: /tmp/${{ env.image_filename }} 123 | - name: Upload Image to Artifacts 124 | if: steps.cache.outputs.cache-hit == 'true' 125 | uses: actions/upload-artifact@v4 126 | with: 127 | name: ${{ env.image_filename }} 128 | path: /tmp/${{ env.image_filename }} 129 | retention-days: ${{ env.artifact_retention_days_for_image }} 130 | - name: Upload Dep Details as Missing Marker Due to Cache Miss 131 | if: steps.cache.outputs.cache-hit != 'true' 132 | uses: actions/upload-artifact@v4 133 | with: 134 | name: ${{ env.missing_filename }} 135 | path: /tmp/${{ env.json_filename }} 136 | retention-days: ${{ env.artifact_retention_days_for_image }} 137 | 138 | prepare: 139 | needs: [load] 140 | name: 3 prepare 141 | runs-on: ubuntu-latest 142 | outputs: 143 | deps-to-build: ${{ steps.deps-to-build.outputs.deps }} 144 | steps: 145 | - name: Download Missing Markers 146 | uses: actions/download-artifact@v4 147 | with: 148 | pattern: missing-* 149 | merge-multiple: true 150 | path: /tmp/missing 151 | - name: Collect Deps-to-Build from Missing Markers 152 | id: deps-to-build 153 | run: | 154 | deps="$(find /tmp/missing -name "*.json" -exec cat {} \; | jq -c -s '.')" 155 | echo "deps=$deps" | tee -a $GITHUB_OUTPUT 156 | 157 | build-dep: 158 | needs: [setup, prepare] 159 | if: needs.prepare.outputs.deps-to-build != '[]' 160 | strategy: 161 | matrix: 162 | dep: ${{ fromJSON(needs.prepare.outputs.deps-to-build) }} 163 | fail-fast: false 164 | name: 4 build (${{ matrix.dep.name }}, ${{ matrix.dep.ref }}, ${{ matrix.dep.arch }}, ${{ matrix.dep.options && toJSON(matrix.dep.options) || '-' }}) 165 | runs-on: ${{ matrix.dep.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-latest' }} 166 | env: 167 | image_filename: image-${{ matrix.dep.name }}-${{ matrix.dep.id }}-${{ matrix.dep.arch }}.tar 168 | dep_json: ${{ toJSON(matrix.dep) }} 169 | steps: 170 | - uses: actions/checkout@v3 171 | with: 172 | repository: ${{ inputs.repo }} 173 | ref: ${{ inputs.sha }} 174 | - name: Dep Args 175 | id: dep_args 176 | run: | 177 | args="$(<<< $dep_json jq -c -r '[ 178 | "--build-arg \(.name | ascii_upcase)_REPO=\(.repo)", 179 | "--build-arg \(.name | ascii_upcase)_REF=\(.sha)", 180 | "--build-arg \(.name | ascii_upcase)_OPTIONS='"'"'\(.options)'"'"'" 181 | ] | join(" ")')" 182 | echo "args=${args}" | tee -a $GITHUB_OUTPUT 183 | - name: Build Image 184 | run: > 185 | docker build 186 | --platform linux/${{ matrix.dep.arch }} 187 | -f Dockerfile 188 | --target stellar-${{ matrix.dep.name }}-stage 189 | -t stellar-${{ matrix.dep.name }}:${{ matrix.dep.sha }}-${{ matrix.dep.arch }} 190 | ${{ steps.dep_args.outputs.args }} 191 | . 192 | - name: Save Image 193 | run: docker save stellar-${{ matrix.dep.name }}:${{ matrix.dep.sha }}-${{ matrix.dep.arch }} -o /tmp/${{ env.image_filename }} 194 | - name: Upload Image to Cache 195 | uses: actions/cache/save@v3 196 | id: cache 197 | with: 198 | key: ${{ inputs.cache_prefix }}${{ inputs.cache_id }}-${{ env.image_filename }} 199 | path: /tmp/${{ env.image_filename }} 200 | - name: Upload Image to Artifacts 201 | uses: actions/upload-artifact@v4 202 | with: 203 | name: ${{ env.image_filename }} 204 | path: /tmp/${{ env.image_filename }} 205 | retention-days: ${{ env.artifact_retention_days_for_image }} 206 | 207 | build: 208 | needs: [setup, load, build-dep] 209 | if: always() && !failure() && !cancelled() 210 | strategy: 211 | matrix: 212 | image: ${{ fromJSON(needs.setup.outputs.images) }} 213 | arch: ${{ fromJSON(inputs.archs) }} 214 | fail-fast: false 215 | name: 5 build (quickstart, ${{ matrix.image.tag }}, ${{ matrix.arch }}) 216 | runs-on: ${{ matrix.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-latest' }} 217 | env: 218 | image_json: ${{ toJSON(matrix.image) }} 219 | steps: 220 | - uses: actions/checkout@v3 221 | with: 222 | repository: ${{ inputs.repo }} 223 | ref: ${{ inputs.sha }} 224 | - name: Collect Dep IDs 225 | id: ids 226 | run: 227 | echo "$(<<< $image_json jq -r '.deps[] | "\(.name)=\(.id)"')" | tee -a $GITHUB_OUTPUT 228 | - name: Write Image Config 229 | run: | 230 | echo "$image_json" > .image.json 231 | - name: Download Image XDR 232 | uses: actions/download-artifact@v4 233 | with: 234 | pattern: image-xdr-${{ steps.ids.outputs.xdr }}-${{ matrix.arch }}.* 235 | merge-multiple: true 236 | path: /tmp/images 237 | - name: Download Image Core 238 | uses: actions/download-artifact@v4 239 | with: 240 | pattern: image-core-${{ steps.ids.outputs.core }}-${{ matrix.arch }}.* 241 | merge-multiple: true 242 | path: /tmp/images 243 | - name: Download Image RPC 244 | uses: actions/download-artifact@v4 245 | with: 246 | pattern: image-rpc-${{ steps.ids.outputs.rpc }}-${{ matrix.arch }}.* 247 | merge-multiple: true 248 | path: /tmp/images 249 | - name: Download Image Horizon 250 | uses: actions/download-artifact@v4 251 | with: 252 | pattern: image-horizon-${{ steps.ids.outputs.horizon }}-${{ matrix.arch }}.* 253 | merge-multiple: true 254 | path: /tmp/images 255 | - name: Download Image Friendbot 256 | uses: actions/download-artifact@v4 257 | with: 258 | pattern: image-friendbot-${{ steps.ids.outputs.friendbot }}-${{ matrix.arch }}.* 259 | merge-multiple: true 260 | path: /tmp/images 261 | - name: Download Image Lab 262 | uses: actions/download-artifact@v4 263 | with: 264 | pattern: image-lab-${{ steps.ids.outputs.lab }}-${{ matrix.arch }}.* 265 | merge-multiple: true 266 | path: /tmp/images 267 | - name: Load Image into Docker 268 | run: | 269 | ls -lah /tmp/images/ 270 | for image in /tmp/images/*.tar; do 271 | echo Loading image $image 272 | < "${image/%.tar/.json}" jq 273 | docker load -i $image 274 | done 275 | - name: Pull Base Image 276 | run: docker pull --platform linux/${{ matrix.arch }} ubuntu:22.04 277 | - name: Build Args for Deps 278 | id: dep_args 279 | run: | 280 | args="$(<<< $image_json jq -c -r '[ .deps[] | [ 281 | "--build-arg \(.name | ascii_upcase)_IMAGE=stellar-\(.name):\(.sha)-${{ matrix.arch }}" 282 | ] ] | flatten | join(" ")')" 283 | echo "args=${args}" | tee -a $GITHUB_OUTPUT 284 | - name: Build Image 285 | run: > 286 | docker build 287 | --platform linux/${{ matrix.arch }} 288 | -f Dockerfile 289 | -t quickstart:${{ matrix.image.tag }}-${{ matrix.arch }} 290 | --label org.opencontainers.image.revision="${{ inputs.sha }}" 291 | --build-arg REVISION="${{ inputs.sha }}" 292 | --build-arg PROTOCOL_VERSION_DEFAULT="${{ matrix.image.config.protocol_version_default }}" 293 | ${{ steps.dep_args.outputs.args }} 294 | . 295 | - name: Save Quickstart Image 296 | run: docker save quickstart -o /tmp/image 297 | - name: Upload Quickstart Image to Artifacts 298 | uses: actions/upload-artifact@v4 299 | with: 300 | name: image-quickstart-${{ matrix.image.tag }}-${{ matrix.arch }}.tar 301 | path: /tmp/image 302 | retention-days: ${{ env.artifact_retention_days_for_image }} 303 | -------------------------------------------------------------------------------- /.github/workflows/internal-push.yml: -------------------------------------------------------------------------------- 1 | name: Push 2 | 3 | # This workflow pushes multiple quickstart images that have been built with the 4 | # build.yml. This workflow and the build.yml workflow are coupled, and this 5 | # workflow makes assumptions about what artifact names the images hae been 6 | # saved under. This workflow is not intended to be called by third parties. 7 | 8 | on: 9 | workflow_call: 10 | inputs: 11 | sha: 12 | description: 'Sha to connect push status notifications to' 13 | type: "string" 14 | required: true 15 | tags: 16 | description: 'Tags to push (e.g. ["latest", "testing", ...])' 17 | type: "string" 18 | required: true 19 | archs: 20 | description: 'Architectures to push for as an array (e.g. ["amd64", "arm64"])' 21 | type: "string" 22 | required: true 23 | tag-prefix: 24 | description: "Tag prefix for the image when pushed (e.g. pr877-v21-)" 25 | type: "string" 26 | required: true 27 | tag-alias-prefix: 28 | description: "A second tag prefix for the image when pushed that'll be pushed in addition as an alias (e.g. pr877-)" 29 | type: "string" 30 | required: true 31 | registry_repo: 32 | description: "Repo at the registry to push to" 33 | type: "string" 34 | required: true 35 | secrets: 36 | registry: 37 | description: "Registry to push to" 38 | registry_username: 39 | description: "Username to auth with the registry" 40 | registry_password: 41 | description: "Password to auth with the registry" 42 | 43 | jobs: 44 | 45 | complete: 46 | if: always() 47 | name: complete 48 | needs: [push, push-manifest, push-alias] 49 | runs-on: ubuntu-latest 50 | steps: 51 | - if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') 52 | run: exit 1 53 | 54 | push: 55 | strategy: 56 | matrix: 57 | tag: ${{ fromJSON(inputs.tags) }} 58 | arch: ${{ fromJSON(inputs.archs) }} 59 | fail-fast: false 60 | name: 1 push (${{ matrix.tag }}, ${{ matrix.arch }}) 61 | permissions: 62 | packages: write 63 | statuses: write 64 | runs-on: ubuntu-latest 65 | steps: 66 | - name: Create Tag 67 | id: tag 68 | run: echo "tag=${{ inputs.tag-prefix }}${{ matrix.tag }}-${{ matrix.arch }}" | tee -a $GITHUB_OUTPUT 69 | - name: Download Image from Artifacts 70 | uses: actions/download-artifact@v4 71 | with: 72 | name: image-quickstart-${{ matrix.tag }}-${{ matrix.arch }}.tar 73 | path: /tmp/ 74 | - name: Load Image 75 | run: docker load -i /tmp/image 76 | - name: Tag Image 77 | run: > 78 | docker tag 79 | quickstart:${{ matrix.tag }}-${{ matrix.arch }} 80 | ${{ secrets.registry }}/${{ inputs.registry_repo }}:${{ steps.tag.outputs.tag }} 81 | - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 82 | with: 83 | registry: ${{ secrets.registry }} 84 | username: ${{ secrets.registry_username }} 85 | password: ${{ secrets.registry_password }} 86 | - name: Push Image 87 | run: > 88 | docker push 89 | ${{ secrets.registry }}/${{ inputs.registry_repo }}:${{ steps.tag.outputs.tag }} 90 | - name: Post Status with Image Name 91 | uses: actions/github-script@v5 92 | with: 93 | script: | 94 | github.rest.repos.createCommitStatus({ 95 | owner: context.repo.owner, 96 | repo: context.repo.repo, 97 | sha: '${{ inputs.sha }}', 98 | state: 'success', 99 | context: `${{ secrets.registry }}/${{ inputs.registry_repo }}:${{ steps.tag.outputs.tag }}`, 100 | description: 'Available', 101 | }); 102 | 103 | push-manifest: 104 | needs: push 105 | strategy: 106 | matrix: 107 | tag: ${{ fromJSON(inputs.tags) }} 108 | fail-fast: false 109 | name: 2 push manifest (${{ matrix.tag }}) 110 | permissions: 111 | packages: write 112 | statuses: write 113 | runs-on: ubuntu-latest 114 | steps: 115 | - name: Create Tag 116 | id: tag 117 | run: | 118 | echo "tag=${{ inputs.tag-prefix }}${{ matrix.tag }}" | tee -a $GITHUB_OUTPUT 119 | - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 120 | with: 121 | registry: ${{ secrets.registry }} 122 | username: ${{ secrets.registry_username }} 123 | password: ${{ secrets.registry_password }} 124 | - name: Prepare Image List 125 | id: images 126 | env: 127 | archs: ${{ inputs.archs }} 128 | run: | 129 | images="$(<<< $archs jq -r 'map("${{ secrets.registry }}/${{ inputs.registry_repo }}:${{ steps.tag.outputs.tag }}-\(.)") | join(" ")')" 130 | echo "images=$images" | tee -a $GITHUB_OUTPUT 131 | - name: Create Manifest 132 | run: > 133 | docker manifest create 134 | ${{ secrets.registry }}/${{ inputs.registry_repo }}:${{ steps.tag.outputs.tag }} 135 | ${{ steps.images.outputs.images }} 136 | - name: Push Manifest 137 | run: > 138 | docker manifest push 139 | ${{ secrets.registry }}/${{ inputs.registry_repo }}:${{ steps.tag.outputs.tag }} 140 | - uses: actions/github-script@v5 141 | with: 142 | script: | 143 | github.rest.repos.createCommitStatus({ 144 | owner: context.repo.owner, 145 | repo: context.repo.repo, 146 | sha: '${{ inputs.sha }}', 147 | state: 'success', 148 | context: '${{ secrets.registry }}/${{ inputs.registry_repo }}:${{ steps.tag.outputs.tag }}', 149 | description: 'Available', 150 | }); 151 | 152 | push-alias: 153 | needs: push-manifest 154 | strategy: 155 | matrix: 156 | tag: ${{ fromJSON(inputs.tags) }} 157 | fail-fast: false 158 | name: 3 push alias (${{ matrix.tag }}) 159 | permissions: 160 | packages: write 161 | statuses: write 162 | runs-on: ubuntu-latest 163 | steps: 164 | - name: Create Tag 165 | id: tag 166 | run: | 167 | echo "tag=${{ inputs.tag-prefix }}${{ matrix.tag }}" | tee -a $GITHUB_OUTPUT 168 | echo "tag-alias=${{ inputs.tag-alias-prefix }}${{ matrix.tag }}" | tee -a $GITHUB_OUTPUT 169 | - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 170 | with: 171 | registry: ${{ secrets.registry }} 172 | username: ${{ secrets.registry_username }} 173 | password: ${{ secrets.registry_password }} 174 | - name: Push Alias 175 | run: > 176 | docker buildx imagetools create -t 177 | ${{ secrets.registry }}/${{ inputs.registry_repo }}:${{ steps.tag.outputs.tag-alias }} 178 | ${{ secrets.registry }}/${{ inputs.registry_repo }}:${{ steps.tag.outputs.tag }} 179 | - uses: actions/github-script@v5 180 | with: 181 | script: | 182 | github.rest.repos.createCommitStatus({ 183 | owner: context.repo.owner, 184 | repo: context.repo.repo, 185 | sha: '${{ inputs.sha }}', 186 | state: 'success', 187 | context: '${{ secrets.registry }}/${{ inputs.registry_repo }}:${{ steps.tag.outputs.tag-alias }}', 188 | description: 'Available', 189 | }); 190 | -------------------------------------------------------------------------------- /.github/workflows/internal-test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | # This workflow tests multiple quickstart images that have been built with the 4 | # build.yml. This workflow and the build.yml workflow are coupled, and this 5 | # workflow makes assumptions about what artifact names the images hae been 6 | # saved under. This workflow is not intended to be called by third parties. 7 | 8 | on: 9 | workflow_call: 10 | inputs: 11 | repo: 12 | description: "Quickstart repo where quickstart is hosted" 13 | type: "string" 14 | required: true 15 | sha: 16 | description: "Quickstart sha to load tests from" 17 | type: "string" 18 | required: true 19 | images: 20 | description: "A custom image.json (a single image from the same format as images.json), if not provided the full images.json is run" 21 | type: "string" 22 | required: true 23 | archs: 24 | description: 'Architectures to build for as an array (e.g. ["amd64", "arm64"])' 25 | type: "string" 26 | required: true 27 | 28 | env: 29 | artifact_retention_days_for_logs: 60 30 | 31 | jobs: 32 | 33 | complete: 34 | if: always() 35 | name: complete 36 | needs: [setup, test] 37 | runs-on: ubuntu-latest 38 | steps: 39 | - if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') 40 | run: exit 1 41 | 42 | setup: 43 | name: 1 setup 44 | runs-on: ubuntu-latest 45 | outputs: 46 | additional-tests: ${{ steps.tests.outputs.additional-tests }} 47 | steps: 48 | - uses: actions/checkout@v2 49 | with: 50 | repository: ${{ inputs.repo }} 51 | ref: ${{ inputs.sha }} 52 | - name: Additional Tests 53 | id: tests 54 | env: 55 | images: ${{ inputs.images }} 56 | run: | 57 | tests="$(<<< $images ./.scripts/images-additional-tests)" 58 | <<< $tests jq 59 | echo "additional-tests=$tests" >> $GITHUB_OUTPUT 60 | 61 | test: 62 | needs: setup 63 | strategy: 64 | matrix: 65 | image: ${{ fromJSON(inputs.images) }} 66 | arch: ${{ fromJSON(inputs.archs) }} 67 | network: ["local"] 68 | enable: ["core","rpc","core,rpc,horizon"] 69 | options: [""] 70 | include: ${{ fromJSON(needs.setup.outputs.additional-tests) }} 71 | fail-fast: false 72 | name: 2 test (${{ matrix.image.tag }}, ${{ matrix.arch }}, ${{ matrix.network }}, ${{ matrix.enable }} ${{ matrix.options || '' }}, ${{ matrix.image.tests.continue-on-error && 'continue-on-error' || ''}}) 73 | runs-on: ${{ matrix.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-latest' }} 74 | continue-on-error: ${{ matrix.image.tests.continue-on-error || false }} 75 | steps: 76 | - name: Free up disk space 77 | if: matrix.network == 'pubnet' 78 | run: | 79 | sudo rm -rf /usr/share/dotnet 80 | sudo rm -rf /usr/local/lib/android 81 | sudo rm -rf /opt/ghc 82 | sudo rm -rf /opt/hostedtoolcache/CodeQL 83 | df -h 84 | - uses: actions/checkout@v2 85 | with: 86 | repository: ${{ inputs.repo }} 87 | ref: ${{ needs.setup.outputs.sha }} 88 | - name: Download Quickstart Image 89 | uses: actions/download-artifact@v4 90 | with: 91 | name: image-quickstart-${{ matrix.image.tag }}-${{ matrix.arch }}.tar 92 | path: /tmp/ 93 | - name: Load Quickstart Image 94 | run: docker load -i /tmp/image 95 | - name: Prepare Logs Directory 96 | run: mkdir -p logs 97 | - name: Run Quickstart Image 98 | run: > 99 | docker run 100 | --platform linux/${{ matrix.arch }} 101 | -d 102 | -p 103 | "8000:8000" 104 | -p "11626:11626" 105 | --name stellar 106 | quickstart:${{ matrix.image.tag }}-${{ matrix.arch }} 107 | --${{ matrix.network }} 108 | --enable ${{ matrix.enable }} 109 | ${{ matrix.options }} 110 | - name: Set up Go 111 | uses: actions/setup-go@v2 112 | with: 113 | go-version: ^1 114 | - name: Sleep until supervisor is up 115 | run: sleep 10 116 | - name: Calculate timeout 117 | id: timeout 118 | run: echo "minutes=$((${{ github.run_attempt }} * 2))" >> $GITHUB_OUTPUT 119 | - name: Run core test 120 | if: ${{ contains(matrix.enable, 'core') }} 121 | timeout-minutes: ${{ fromJSON(steps.timeout.outputs.minutes) }} 122 | run: | 123 | docker logs stellar -f & 124 | echo "supervisorctl tail -f stellar-core" | docker exec -i stellar sh & 125 | go run tests/test_core.go 126 | curl http://localhost:11626/info 127 | - name: Run horizon up test 128 | if: ${{ contains(matrix.enable, 'horizon') }} 129 | timeout-minutes: ${{ fromJSON(steps.timeout.outputs.minutes) }} 130 | run: | 131 | docker logs stellar -f & 132 | echo "supervisorctl tail -f horizon" | docker exec -i stellar sh & 133 | go run tests/test_horizon_up.go 134 | curl http://localhost:8000 135 | - name: Run horizon core up test 136 | if: ${{ contains(matrix.enable, 'horizon') && matrix.network != 'pubnet' }} 137 | timeout-minutes: ${{ fromJSON(steps.timeout.outputs.minutes) }} 138 | run: | 139 | docker logs stellar -f & 140 | echo "supervisorctl tail -f horizon" | docker exec -i stellar sh & 141 | go run tests/test_horizon_core_up.go 142 | curl http://localhost:8000 143 | - name: Run horizon ingesting test 144 | if: ${{ contains(matrix.enable, 'horizon') && matrix.network != 'pubnet' }} 145 | timeout-minutes: ${{ fromJSON(steps.timeout.outputs.minutes) }} 146 | run: | 147 | docker logs stellar -f & 148 | echo "supervisorctl tail -f stellar-core" | docker exec -i stellar sh & 149 | echo "supervisorctl tail -f horizon" | docker exec -i stellar sh & 150 | go run tests/test_horizon_ingesting.go 151 | curl http://localhost:8000 152 | - name: Run friendbot test 153 | if: ${{ contains(matrix.enable, 'horizon') && matrix.network == 'local' }} 154 | timeout-minutes: ${{ fromJSON(steps.timeout.outputs.minutes) }} 155 | run: | 156 | docker logs stellar -f & 157 | echo "supervisorctl tail -f friendbot" | docker exec -i stellar sh & 158 | echo "supervisorctl tail -f horizon" | docker exec -i stellar sh & 159 | go run tests/test_friendbot.go 160 | - name: Run stellar rpc up test 161 | if: ${{ contains(matrix.enable, 'rpc') }} 162 | timeout-minutes: ${{ fromJSON(steps.timeout.outputs.minutes) }} 163 | run: | 164 | docker logs stellar -f & 165 | echo "supervisorctl tail -f stellar-rpc" | docker exec -i stellar sh & 166 | go run tests/test_stellar_rpc_up.go 167 | - name: Run stellar rpc healthy test 168 | if: ${{ contains(matrix.enable, 'rpc') && matrix.network != 'pubnet' }} 169 | timeout-minutes: ${{ fromJSON(steps.timeout.outputs.minutes) }} 170 | run: | 171 | docker logs stellar -f & 172 | echo "supervisorctl tail -f stellar-rpc" | docker exec -i stellar sh & 173 | go run tests/test_stellar_rpc_healthy.go 174 | - name: Prepare Test Logs 175 | if: always() 176 | run: docker cp stellar:/var/log logs 177 | - name: Upload Test Logs 178 | if: always() 179 | uses: actions/upload-artifact@v4 180 | with: 181 | name: logs-${{ matrix.image.tag }}-${{ matrix.arch }}-test-${{ strategy.job-index }} 182 | path: logs 183 | retention-days: ${{ env.artifact_retention_days_for_logs }} 184 | -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: "Stale Issues" 3 | 4 | on: 5 | workflow_dispatch: 6 | schedule: 7 | - cron: "0 18 * * *" # approx 9:30am daily 8 | 9 | jobs: 10 | stale: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/stale@v9 14 | with: 15 | debug-only: false 16 | days-before-stale: 90 17 | days-before-close: -1 18 | stale-issue-message: 19 | "This issue is stale because it has been open for 90 days with no 20 | activity." 21 | stale-pr-message: 22 | "This pull request is stale because it has been open for 90 days 23 | with no activity." 24 | stale-issue-label: stale 25 | stale-pr-label: stale 26 | remove-stale-when-updated: true 27 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.image.json 2 | -------------------------------------------------------------------------------- /.scripts/images-additional-tests: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import json 4 | import sys 5 | 6 | # Accepts as stdin a JSON object in the format of images.json. Outputs an array 7 | # of all the additional test cases defined in the images merged together. 8 | # Usage: < images.json ./.scripts/images-additional-tests 9 | 10 | images = json.load(sys.stdin) 11 | tests = [] 12 | for image in images: 13 | tag = image['tag'] 14 | for test in image.get('additional-tests', []): 15 | tests.append({'image': image, **test}) 16 | for test in image.get('tests', {}).get('additional-tests', []): 17 | tests.append({'image': image, **test}) 18 | 19 | print(json.dumps(tests)) 20 | -------------------------------------------------------------------------------- /.scripts/images-deps: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | set -u 5 | set -o pipefail 6 | 7 | # Accepts as stdin a JSON object in the format of images.json. Outputs an array 8 | # of all dependencies that need to be built across all the images. 9 | # Usage: < images.json ./.scripts/images-deps 10 | 11 | jq -c '[ .[] | .deps[] ] | unique' 12 | -------------------------------------------------------------------------------- /.scripts/images-with-extras: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import json 4 | import sys 5 | import subprocess 6 | import hashlib 7 | 8 | # Accepts as stdin a JSON object in the format of images.json. 9 | # And adds some calculatble elements used during the build. 10 | # 11 | # 1. Resolves any 'ref' values in the JSON to a revision sha. 12 | # 2. Hashes the entire dep details and injects the hash as an id into the deps 13 | # details. The id can be used to uniquely identify a dep configuration. 14 | # 15 | # Outputs the original JSON modified. 16 | # 17 | # Usage: < images.json ./.scripts/images-with-extras 18 | 19 | images = json.load(sys.stdin) 20 | 21 | cache = {} 22 | 23 | for image in images: 24 | tag = image["tag"] 25 | for dep in image["deps"]: 26 | name = dep["name"] 27 | repo = dep["repo"] 28 | ref = dep["ref"] 29 | print(f"{tag} {name} {repo} {ref} ...", file=sys.stderr) 30 | key = (name, repo, ref) 31 | if key in cache: 32 | sha = cache[key] 33 | else: 34 | sha = subprocess.run( 35 | ["gh", "api", f"repos/{repo}/commits/{ref}", "--jq", ".sha"], 36 | capture_output=True, 37 | text=True, 38 | check=True 39 | ).stdout.strip() 40 | cache[key] = sha 41 | print(f" • revision sha = {sha}", file=sys.stderr) 42 | dep["sha"] = sha 43 | 44 | dep_str = json.dumps(dep, separators=(',', ':')) 45 | id = hashlib.sha256(dep_str.encode()).hexdigest() 46 | dep["id"] = id 47 | print(f" • id = {id}", file=sys.stderr) 48 | 49 | print(json.dumps(images, separators=(',', ':'))) 50 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | ARG XDR_IMAGE=stellar-xdr-stage 2 | ARG CORE_IMAGE=stellar-core-stage 3 | ARG HORIZON_IMAGE=stellar-horizon-stage 4 | ARG FRIENDBOT_IMAGE=stellar-friendbot-stage 5 | ARG RPC_IMAGE=stellar-rpc-stage 6 | ARG LAB_IMAGE=stellar-lab-stage 7 | 8 | # xdr 9 | 10 | FROM rust AS stellar-xdr-builder 11 | ARG XDR_REPO 12 | ARG XDR_REF 13 | WORKDIR /wd 14 | RUN git clone https://github.com/${XDR_REPO} /wd 15 | RUN git fetch origin ${XDR_REF} 16 | RUN git checkout ${XDR_REF} 17 | RUN rustup show active-toolchain || rustup toolchain install 18 | RUN cargo install stellar-xdr --features cli --path . --locked 19 | 20 | FROM scratch AS stellar-xdr-stage 21 | 22 | COPY --from=stellar-xdr-builder /usr/local/cargo/bin/stellar-xdr /stellar-xdr 23 | 24 | # core 25 | 26 | FROM ubuntu:focal AS stellar-core-builder 27 | 28 | ENV DEBIAN_FRONTEND=noninteractive 29 | RUN apt-get update && \ 30 | apt-get -y install iproute2 procps lsb-release \ 31 | git build-essential pkg-config autoconf automake libtool \ 32 | bison flex sed perl libpq-dev parallel libunwind-dev \ 33 | clang-12 libc++abi-12-dev libc++-12-dev \ 34 | postgresql curl jq 35 | 36 | ARG CORE_REPO 37 | ARG CORE_REF 38 | ARG CORE_OPTIONS 39 | RUN echo "$CORE_OPTIONS" | jq -r '.configure_flags // ""' > /tmp/arg_configure_flags 40 | 41 | WORKDIR /wd 42 | RUN git clone https://github.com/${CORE_REPO} /wd 43 | RUN git fetch origin ${CORE_REF} 44 | RUN git checkout ${CORE_REF} 45 | 46 | RUN git clean -dXf 47 | RUN git submodule foreach --recursive git clean -dXf 48 | 49 | ARG CC=clang-12 50 | ARG CXX=clang++-12 51 | ARG CFLAGS='-O3 -g1 -fno-omit-frame-pointer' 52 | ARG CXXFLAGS='-O3 -g1 -fno-omit-frame-pointer -stdlib=libc++' 53 | 54 | RUN sysctl vm.mmap_rnd_bits=28 55 | 56 | RUN ./autogen.sh 57 | RUN ./install-rust.sh 58 | ENV PATH "/root/.cargo/bin:$PATH" 59 | RUN sh -c './configure CC="${CC}" CXX="${CXX}" CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" $( $@ 10 | 11 | # Extract configuration from selected image 12 | PROTOCOL_VERSION_DEFAULT = $(shell < $(IMAGE_JSON) jq -r '.config.protocol_version_default') 13 | XDR_REPO = $(shell < $(IMAGE_JSON) jq -r '.deps[] | select(.name == "xdr") | .repo') 14 | XDR_SHA = $(shell < $(IMAGE_JSON) jq -r '.deps[] | select(.name == "xdr") | .sha') 15 | CORE_REPO = $(shell < $(IMAGE_JSON) jq -r '.deps[] | select(.name == "core") | .repo') 16 | CORE_SHA = $(shell < $(IMAGE_JSON) jq -r '.deps[] | select(.name == "core") | .sha') 17 | CORE_OPTIONS = $(shell < $(IMAGE_JSON) jq -c '.deps[] | select(.name == "core") | .options // {}') 18 | RPC_REPO = $(shell < $(IMAGE_JSON) jq -r '.deps[] | select(.name == "rpc") | .repo') 19 | RPC_SHA = $(shell < $(IMAGE_JSON) jq -r '.deps[] | select(.name == "rpc") | .sha') 20 | HORIZON_REPO = $(shell < $(IMAGE_JSON) jq -r '.deps[] | select(.name == "horizon") | .repo') 21 | HORIZON_SHA = $(shell < $(IMAGE_JSON) jq -r '.deps[] | select(.name == "horizon") | .sha') 22 | FRIENDBOT_REPO = $(shell < $(IMAGE_JSON) jq -r '.deps[] | select(.name == "friendbot") | .repo') 23 | FRIENDBOT_SHA = $(shell < $(IMAGE_JSON) jq -r '.deps[] | select(.name == "friendbot") | .sha') 24 | LAB_REPO = $(shell < $(IMAGE_JSON) jq -r '.deps[] | select(.name == "lab") | .repo') 25 | LAB_SHA = $(shell < $(IMAGE_JSON) jq -r '.deps[] | select(.name == "lab") | .sha') 26 | 27 | run: 28 | docker run --rm --name stellar -p 8000:8000 stellar/quickstart:$(TAG) --local 29 | 30 | logs: 31 | docker exec stellar /bin/sh -c 'tail -F /var/log/supervisor/*' 32 | 33 | console: 34 | docker exec -it stellar /bin/bash 35 | 36 | build: $(IMAGE_JSON) 37 | docker build -t stellar/quickstart:$(TAG) -f Dockerfile . \ 38 | --build-arg REVISION=$(REVISION) \ 39 | --build-arg PROTOCOL_VERSION_DEFAULT=$(PROTOCOL_VERSION_DEFAULT) \ 40 | --build-arg XDR_REPO=$(XDR_REPO) --build-arg XDR_REF=$(XDR_SHA) \ 41 | --build-arg CORE_REPO="$(CORE_REPO)" --build-arg CORE_REF="$(CORE_SHA)" --build-arg CORE_OPTIONS='$(CORE_OPTIONS)' \ 42 | --build-arg RPC_REPO="$(RPC_REPO)" --build-arg RPC_REF="$(RPC_SHA)" \ 43 | --build-arg HORIZON_REPO="$(HORIZON_REPO)" --build-arg HORIZON_REF="$(HORIZON_SHA)" \ 44 | --build-arg FRIENDBOT_REPO="$(FRIENDBOT_REPO)" --build-arg FRIENDBOT_REF="$(FRIENDBOT_SHA)" \ 45 | --build-arg LAB_REPO="$(LAB_REPO)" --build-arg LAB_REF=$(LAB_SHA) 46 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: 'Run quickstart' 2 | description: 'Runs quickstart docker image' 3 | inputs: 4 | tag: 5 | description: "Image tag of quickstart image to use" 6 | required: true 7 | default: "latest" 8 | artifact: 9 | description: "Artifact to collect image from" 10 | type: string 11 | default: "" 12 | image: 13 | description: "Image for the quickstart image to use" 14 | default: "" 15 | enable: 16 | description: "Services to enable" 17 | default: "core,horizon,rpc" 18 | network: 19 | description: "Network to run" 20 | default: "local" 21 | protocol_version: 22 | description: "Protocol version to run for 'local' network only (leave blank for default for image)" 23 | default: "" 24 | enable_logs: 25 | description: "Boolean flag enabling the logs" 26 | default: "true" 27 | health_interval: 28 | description: "Time between running the check (in seconds)" 29 | default: "10" 30 | health_timeout: 31 | description: "Maximum time to allow one check to run (in seconds)" 32 | default: "5" 33 | health_retries: 34 | description: "Consecutive failures needed to report unhealthy" 35 | default: "50" 36 | runs: 37 | using: "composite" 38 | steps: 39 | - name: Set up Docker 40 | uses: docker/setup-docker-action@b60f85385d03ac8acfca6d9996982511d8620a19 # v4 41 | 42 | - if: inputs.artifact 43 | uses: actions/download-artifact@v4 44 | with: 45 | name: ${{ inputs.artifact }} 46 | path: /tmp/ 47 | 48 | - if: inputs.artifact 49 | run: docker load -i /tmp/image 50 | shell: bash 51 | 52 | - run: > 53 | docker run -d --name stellar 54 | -p 8000:8000 55 | -p 11626:11626 56 | -p 11726:11726 57 | -p 11826:11826 58 | -e ENABLE_LOGS="${{ inputs.enable_logs }}" 59 | -e ENABLE="${{ inputs.enable }}" 60 | -e NETWORK="${{ inputs.network }}" 61 | -e PROTOCOL_VERSION="${{ inputs.protocol_version }}" 62 | --health-cmd "curl --no-progress-meter -X POST -H 'Content-Type: application/json' -d 63 | '{\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"getHealth\"}' 'http://localhost:8000/rpc' 64 | | grep 'healthy' 65 | && curl --no-progress-meter \"http://localhost:8000/friendbot\" | 66 | grep '\"invalid_field\": \"addr\"'" 67 | --health-interval ${{ inputs.health_interval }}s 68 | --health-timeout ${{ inputs.health_timeout }}s 69 | --health-retries ${{ inputs.health_retries }} 70 | ${{ inputs.image || (inputs.artifact && 'quickstart' || 'docker.io/stellar/quickstart') }}:${{ inputs.tag }} 71 | shell: bash 72 | 73 | - name: "Wait for container to be healthy" 74 | run: | 75 | i=0 76 | while true; do 77 | status=`docker inspect -f {{.State.Health.Status}} stellar` 78 | echo "stellar image status: $status" 79 | if [ "$status" == "healthy" ]; then 80 | break 81 | fi 82 | sleep 1; 83 | i=$((i + 1)) 84 | if (( $i > 300 )); then 85 | echo "stellar image is slow to start, printing logs:" 86 | i=$((i - 300)) 87 | docker logs stellar 88 | fi 89 | done; 90 | shell: bash 91 | -------------------------------------------------------------------------------- /common/core/bin/start: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | while ! psql -U stellar -c 'select 1' core &> /dev/null ; do 4 | echo "Waiting for postgres to be available..." 5 | sleep 1 6 | done 7 | 8 | echo "starting core..." 9 | set -e 10 | exec /usr/bin/stellar-core --conf "/opt/stellar/core/etc/stellar-core.cfg" run 11 | -------------------------------------------------------------------------------- /common/friendbot/bin/start: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | set -e 4 | set -o pipefail 5 | 6 | while ! (curl -sf http://localhost:8001/ | jq --exit-status '.ingest_latest_ledger > 1'); do 7 | echo "Waiting for horizon to be available..." 8 | sleep 1 9 | done 10 | 11 | echo "starting friendbot..." 12 | exec /usr/local/bin/friendbot --conf /opt/stellar/friendbot/etc/friendbot.cfg 13 | -------------------------------------------------------------------------------- /common/friendbot/etc/friendbot.cfg: -------------------------------------------------------------------------------- 1 | port = 8002 2 | friendbot_secret = "__NETWORK_ROOT_SECRET_KEY__" 3 | network_passphrase = "__NETWORK__" 4 | horizon_url = "http://localhost:8001" 5 | starting_balance = "10000.00" 6 | num_minions = 10 7 | base_fee = 100000 8 | minion_batch_size = 10 9 | submit_tx_retries_allowed = 2 10 | -------------------------------------------------------------------------------- /common/horizon/bin/horizon: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | # This file is a simple wrapper around horizon that establishes the proper 4 | # environment variables before executing the actual binary. 5 | 6 | source /opt/stellar/horizon/etc/horizon.env 7 | exec /usr/bin/stellar-horizon $@ 8 | -------------------------------------------------------------------------------- /common/horizon/bin/start: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 4 | 5 | while ! psql -U stellar -c 'select 1' horizon &> /dev/null ; do 6 | echo "Waiting for postgres to be available..." 7 | sleep 1 8 | done 9 | 10 | echo "starting horizon..." 11 | set -e 12 | exec $DIR/horizon 13 | -------------------------------------------------------------------------------- /common/horizon/etc/horizon.env: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | export DATABASE_URL="postgres://stellar:__PGPASS__@localhost/horizon" 4 | export STELLAR_CORE_URL="http://localhost:11726" 5 | export STELLAR_CORE_BINARY_PATH=/usr/bin/stellar-core 6 | export LOG_LEVEL="info" 7 | export ENABLE_CAPTIVE_CORE_INGESTION="true" 8 | export CAPTIVE_CORE_USE_DB=true 9 | export STELLAR_CAPTIVE_CORE_HTTP_PORT=11726 10 | export INGEST="true" 11 | export PER_HOUR_RATE_LIMIT="72000" 12 | export NETWORK_PASSPHRASE="__NETWORK__" 13 | export DISABLE_ASSET_STATS="true" 14 | export HISTORY_ARCHIVE_URLS="__ARCHIVE__" 15 | export ADMIN_PORT=6060 16 | export PORT=8001 17 | export CHECKPOINT_FREQUENCY=64 18 | -------------------------------------------------------------------------------- /common/lab/bin/start: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | set -e 4 | set -o pipefail 5 | 6 | echo "starting lab..." 7 | export PORT=8100 8 | export NEXT_BASE_PATH=/lab 9 | export NEXT_PUBLIC_DEFAULT_NETWORK=custom 10 | export NEXT_PUBLIC_ENABLE_EXPLORER=true 11 | node server.js 12 | -------------------------------------------------------------------------------- /common/nginx/bin/start: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | echo "starting nginx..." 4 | set -e 5 | exec /usr/sbin/nginx -c /opt/stellar/nginx/etc/nginx.conf 6 | -------------------------------------------------------------------------------- /common/nginx/etc/conf.d/horizon.conf: -------------------------------------------------------------------------------- 1 | location / { 2 | proxy_set_header Host $http_host; 3 | proxy_pass http://127.0.0.1:8001; 4 | } 5 | -------------------------------------------------------------------------------- /common/nginx/etc/conf.d/lab.conf: -------------------------------------------------------------------------------- 1 | location /lab { 2 | proxy_set_header Host $http_host; 3 | proxy_pass http://127.0.0.1:8100; 4 | } 5 | -------------------------------------------------------------------------------- /common/nginx/etc/conf.d/stellar-rpc.conf: -------------------------------------------------------------------------------- 1 | location /rpc { 2 | rewrite /rpc / break; 3 | proxy_set_header Host $http_host; 4 | proxy_pass http://127.0.0.1:8003; 5 | proxy_redirect off; 6 | } 7 | 8 | # Deprecated but kept indefinitely for backwards compatibility. 9 | location /soroban/rpc { 10 | rewrite /soroban/rpc / break; 11 | proxy_set_header Host $http_host; 12 | proxy_pass http://127.0.0.1:8003; 13 | proxy_redirect off; 14 | } 15 | -------------------------------------------------------------------------------- /common/nginx/etc/nginx.conf: -------------------------------------------------------------------------------- 1 | daemon off; 2 | pid /var/lib/nginx/pid; 3 | 4 | events { 5 | } 6 | 7 | http { 8 | log_format json_logs escape=json '{' 9 | '"time":"$time_iso8601",' 10 | '"remote_addr":"$remote_addr",' 11 | '"method":"$request_method",' 12 | '"uri":"$request_uri",' 13 | '"status":$status,' 14 | '"request_body":"$request_body"' 15 | '}'; 16 | 17 | error_log stderr info; 18 | access_log /var/log/nginx/access.log json_logs; 19 | 20 | server { 21 | listen 8000; 22 | 23 | error_page 502 @502; 24 | 25 | include conf.d/*.conf; 26 | 27 | location @502 { 28 | return 502 "502 Bad Gateway"; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /common/postgresql/.pgpass: -------------------------------------------------------------------------------- 1 | *:*:*:stellar:__PGPASS__ 2 | -------------------------------------------------------------------------------- /common/postgresql/etc/pg_hba.conf: -------------------------------------------------------------------------------- 1 | # PostgreSQL Client Authentication Configuration File 2 | # =================================================== 3 | # 4 | # Refer to the "Client Authentication" section in the PostgreSQL 5 | # documentation for a complete description of this file. A short 6 | # synopsis follows. 7 | # 8 | # This file controls: which hosts are allowed to connect, how clients 9 | # are authenticated, which PostgreSQL user names they can use, which 10 | # databases they can access. Records take one of these forms: 11 | # 12 | # local DATABASE USER METHOD [OPTIONS] 13 | # host DATABASE USER ADDRESS METHOD [OPTIONS] 14 | # hostssl DATABASE USER ADDRESS METHOD [OPTIONS] 15 | # hostnossl DATABASE USER ADDRESS METHOD [OPTIONS] 16 | # 17 | # (The uppercase items must be replaced by actual values.) 18 | # 19 | # The first field is the connection type: "local" is a Unix-domain 20 | # socket, "host" is either a plain or SSL-encrypted TCP/IP socket, 21 | # "hostssl" is an SSL-encrypted TCP/IP socket, and "hostnossl" is a 22 | # plain TCP/IP socket. 23 | # 24 | # DATABASE can be "all", "sameuser", "samerole", "replication", a 25 | # database name, or a comma-separated list thereof. The "all" 26 | # keyword does not match "replication". Access to replication 27 | # must be enabled in a separate record (see example below). 28 | # 29 | # USER can be "all", a user name, a group name prefixed with "+", or a 30 | # comma-separated list thereof. In both the DATABASE and USER fields 31 | # you can also write a file name prefixed with "@" to include names 32 | # from a separate file. 33 | # 34 | # ADDRESS specifies the set of hosts the record matches. It can be a 35 | # host name, or it is made up of an IP address and a CIDR mask that is 36 | # an integer (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that 37 | # specifies the number of significant bits in the mask. A host name 38 | # that starts with a dot (.) matches a suffix of the actual host name. 39 | # Alternatively, you can write an IP address and netmask in separate 40 | # columns to specify the set of hosts. Instead of a CIDR-address, you 41 | # can write "samehost" to match any of the server's own IP addresses, 42 | # or "samenet" to match any address in any subnet that the server is 43 | # directly connected to. 44 | # 45 | # METHOD can be "trust", "reject", "md5", "password", "gss", "sspi", 46 | # "ident", "peer", "pam", "ldap", "radius" or "cert". Note that 47 | # "password" sends passwords in clear text; "md5" is preferred since 48 | # it sends encrypted passwords. 49 | # 50 | # OPTIONS are a set of options for the authentication in the format 51 | # NAME=VALUE. The available options depend on the different 52 | # authentication methods -- refer to the "Client Authentication" 53 | # section in the documentation for a list of which options are 54 | # available for which authentication methods. 55 | # 56 | # Database and user names containing spaces, commas, quotes and other 57 | # special characters must be quoted. Quoting one of the keywords 58 | # "all", "sameuser", "samerole" or "replication" makes the name lose 59 | # its special character, and just match a database or username with 60 | # that name. 61 | # 62 | # This file is read on server startup and when the postmaster receives 63 | # a SIGHUP signal. If you edit the file on a running system, you have 64 | # to SIGHUP the postmaster for the changes to take effect. You can 65 | # use "pg_ctl reload" to do that. 66 | 67 | # Put your actual configuration here 68 | # ---------------------------------- 69 | # 70 | # If you want to allow non-local connections, you need to add more 71 | # "host" records. In that case you will also need to make PostgreSQL 72 | # listen on a non-local interface via the listen_addresses 73 | # configuration parameter, or via the -i or -h command line switches. 74 | 75 | 76 | 77 | 78 | # DO NOT DISABLE! 79 | # If you change this first entry you will need to make sure that the 80 | # database superuser can access the database using some other method. 81 | # Noninteractive access to all databases is required during automatic 82 | # maintenance (custom daily cronjobs, replication, and similar tasks). 83 | # 84 | # Database administrative login by Unix domain socket 85 | local all postgres peer 86 | 87 | # TYPE DATABASE USER ADDRESS METHOD 88 | 89 | # "local" is for Unix domain socket connections only 90 | local all all md5 91 | # IPv4 local connections: 92 | host all all 127.0.0.1/32 md5 93 | host all all 0.0.0.0/0 md5 94 | # IPv6 local connections: 95 | host all all ::1/128 md5 96 | # Allow replication connections from localhost, by a user with the 97 | # replication privilege. 98 | #local replication postgres peer 99 | #host replication postgres 127.0.0.1/32 md5 100 | #host replication postgres ::1/128 md5 101 | -------------------------------------------------------------------------------- /common/postgresql/etc/pg_ident.conf: -------------------------------------------------------------------------------- 1 | # PostgreSQL User Name Maps 2 | # ========================= 3 | # 4 | # Refer to the PostgreSQL documentation, chapter "Client 5 | # Authentication" for a complete description. A short synopsis 6 | # follows. 7 | # 8 | # This file controls PostgreSQL user name mapping. It maps external 9 | # user names to their corresponding PostgreSQL user names. Records 10 | # are of the form: 11 | # 12 | # MAPNAME SYSTEM-USERNAME PG-USERNAME 13 | # 14 | # (The uppercase quantities must be replaced by actual values.) 15 | # 16 | # MAPNAME is the (otherwise freely chosen) map name that was used in 17 | # pg_hba.conf. SYSTEM-USERNAME is the detected user name of the 18 | # client. PG-USERNAME is the requested PostgreSQL user name. The 19 | # existence of a record specifies that SYSTEM-USERNAME may connect as 20 | # PG-USERNAME. 21 | # 22 | # If SYSTEM-USERNAME starts with a slash (/), it will be treated as a 23 | # regular expression. Optionally this can contain a capture (a 24 | # parenthesized subexpression). The substring matching the capture 25 | # will be substituted for \1 (backslash-one) if present in 26 | # PG-USERNAME. 27 | # 28 | # Multiple maps may be specified in this file and used by pg_hba.conf. 29 | # 30 | # No map names are defined in the default configuration. If all 31 | # system user names and PostgreSQL user names are the same, you don't 32 | # need anything in this file. 33 | # 34 | # This file is read on server startup and when the postmaster receives 35 | # a SIGHUP signal. If you edit the file on a running system, you have 36 | # to SIGHUP the postmaster for the changes to take effect. You can 37 | # use "pg_ctl reload" to do that. 38 | 39 | # Put your actual configuration here 40 | # ---------------------------------- 41 | 42 | # MAPNAME SYSTEM-USERNAME PG-USERNAME 43 | -------------------------------------------------------------------------------- /common/stellar-rpc/bin/start: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | set -e 4 | set -o pipefail 5 | 6 | echo "starting stellar-rpc..." 7 | exec /usr/bin/stellar-rpc --config-path=/opt/stellar/stellar-rpc/etc/stellar-rpc.cfg 8 | -------------------------------------------------------------------------------- /common/supervisor/etc/supervisord.conf: -------------------------------------------------------------------------------- 1 | [inet_http_server] 2 | port=127.0.0.1:9001 3 | 4 | [supervisord] 5 | user=root 6 | logfile=/var/log/supervisor/supervisord.log 7 | pidfile=/var/run/supervisord.pid 8 | childlogdir=/var/log/supervisor 9 | 10 | [rpcinterface:supervisor] 11 | supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface 12 | 13 | [supervisorctl] 14 | serverurl=http://127.0.0.1:9001 15 | 16 | [include] 17 | files=supervisord.conf.d/*.conf 18 | -------------------------------------------------------------------------------- /common/supervisor/etc/supervisord.conf.d/horizon.conf: -------------------------------------------------------------------------------- 1 | [program:horizon] 2 | user=stellar 3 | directory=/opt/stellar/horizon 4 | command=/opt/stellar/horizon/bin/start 5 | autostart=false 6 | autorestart=true 7 | priority=30 8 | # No idea why Horizon stdout goes to stderr log in supervisor... This is the 9 | # easiest fix. 10 | redirect_stderr=true 11 | -------------------------------------------------------------------------------- /common/supervisor/etc/supervisord.conf.d/nginx.conf: -------------------------------------------------------------------------------- 1 | [program:nginx] 2 | user=www-data 3 | directory=/opt/stellar/nginx 4 | command=/opt/stellar/nginx/bin/start 5 | autostart=true 6 | autorestart=true 7 | priority=50 8 | redirect_stderr=true 9 | -------------------------------------------------------------------------------- /common/supervisor/etc/supervisord.conf.d/postgresql.conf: -------------------------------------------------------------------------------- 1 | [program:postgresql] 2 | user=postgres 3 | command=/usr/lib/postgresql/14/bin/postgres -D "/opt/stellar/postgresql/data" -c config_file=/opt/stellar/postgresql/etc/postgresql.conf 4 | stopsignal=INT 5 | autostart=false 6 | autorestart=true 7 | priority=10 8 | -------------------------------------------------------------------------------- /common/supervisor/etc/supervisord.conf.d/stellar-core.conf: -------------------------------------------------------------------------------- 1 | [program:stellar-core] 2 | user=stellar 3 | directory=/opt/stellar/core 4 | command=/opt/stellar/core/bin/start 5 | autostart=false 6 | autorestart=true 7 | priority=20 8 | -------------------------------------------------------------------------------- /common/supervisor/etc/supervisord.conf.d/stellar-lab.conf: -------------------------------------------------------------------------------- 1 | [program:stellar-lab] 2 | user=stellar 3 | directory=/opt/stellar/lab 4 | command=/opt/stellar-default/common/lab/bin/start 5 | autostart=false 6 | startretries=50 7 | autorestart=true 8 | priority=60 9 | redirect_stderr=true 10 | -------------------------------------------------------------------------------- /common/supervisor/etc/supervisord.conf.d/stellar-rpc.conf: -------------------------------------------------------------------------------- 1 | [program:stellar-rpc] 2 | user=stellar 3 | directory=/opt/stellar/stellar-rpc 4 | command=/opt/stellar/stellar-rpc/bin/start 5 | autostart=false 6 | startretries=50 7 | autorestart=true 8 | priority=60 9 | redirect_stderr=true 10 | -------------------------------------------------------------------------------- /dependencies: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | set -e 3 | 4 | # dependencies 5 | export DEBIAN_FRONTEND=noninteractive 6 | apt-get update 7 | apt-get install -y curl apt-transport-https \ 8 | postgresql-client postgresql postgresql-contrib \ 9 | sudo supervisor psmisc \ 10 | nginx rsync jq netcat \ 11 | libunwind8 sqlite libc++abi1-12 libc++1-12 12 | apt-get clean 13 | rm -rf /var/lib/apt/lists/* 14 | 15 | chown -R www-data:www-data /var/lib/nginx 16 | 17 | echo "\nDone installing dependencies...\n" 18 | -------------------------------------------------------------------------------- /futurenet/core/etc/stellar-core.cfg: -------------------------------------------------------------------------------- 1 | HTTP_PORT=11626 2 | PUBLIC_HTTP_PORT=true 3 | LOG_FILE_PATH="/var/log/stellar-core/stellar-core-{datetime:%Y-%m-%d_%H-%M-%S}.log" 4 | MANUAL_CLOSE=__MANUAL_CLOSE__ 5 | 6 | NETWORK_PASSPHRASE="__NETWORK__" 7 | DATABASE="postgresql://dbname=core host=localhost user=stellar password=__PGPASS__" 8 | UNSAFE_QUORUM=true 9 | FAILURE_SAFETY=0 10 | CATCHUP_RECENT=100 11 | 12 | [[HOME_DOMAINS]] 13 | HOME_DOMAIN="futurenet.stellar.org" 14 | QUALITY="MEDIUM" 15 | 16 | [[VALIDATORS]] 17 | NAME="sdf_futurenet_1" 18 | HOME_DOMAIN="futurenet.stellar.org" 19 | PUBLIC_KEY="GBRIF2N52GVN3EXBBICD5F4L5VUFXK6S6VOUCF6T2DWPLOLGWEPPYZTF" 20 | ADDRESS="core-live-futurenet-a.stellar.org" 21 | HISTORY="curl -sf http://history.stellar.org/dev/core-futurenet/core_futurenet_001/{0} -o {1}" 22 | [[VALIDATORS]] 23 | NAME="sdf_futurenet_2" 24 | HOME_DOMAIN="futurenet.stellar.org" 25 | PUBLIC_KEY="GAQM2MF22BYOGIF47RZ2523YK7ZL7Z3CIIX6CCPZBWWLE6KJTXMD4SLO" 26 | ADDRESS="core-live-futurenet-b.stellar.org" 27 | HISTORY="curl -sf http://history.stellar.org/dev/core-futurenet/core_futurenet_002/{0} -o {1}" 28 | [[VALIDATORS]] 29 | NAME="sdf_futurenet_3" 30 | HOME_DOMAIN="futurenet.stellar.org" 31 | PUBLIC_KEY="GC2HLBHG4Z7KV73OPKZD6EWXIXM5QOIZVKN5OS4V2HISDOJC3TUORLY4" 32 | ADDRESS="core-live-futurenet-c.stellar.org" 33 | HISTORY="curl -sf http://history.stellar.org/dev/core-futurenet/core_futurenet_003/{0} -o {1}" 34 | 35 | 36 | -------------------------------------------------------------------------------- /futurenet/horizon/etc/stellar-captive-core.cfg: -------------------------------------------------------------------------------- 1 | # captive core config for futurenet 2 | NETWORK_PASSPHRASE="__NETWORK__" 3 | # disable the web service port, not used 4 | HTTP_PORT=11726 5 | PUBLIC_HTTP_PORT=false 6 | # To avoid conflicts with the core instance 7 | PEER_PORT=11725 8 | DATABASE="__DATABASE__" 9 | 10 | ENABLE_SOROBAN_DIAGNOSTIC_EVENTS=__ENABLE_SOROBAN_DIAGNOSTIC_EVENTS__ 11 | 12 | FAILURE_SAFETY=0 13 | UNSAFE_QUORUM=true 14 | 15 | [[HOME_DOMAINS]] 16 | HOME_DOMAIN="futurenet.stellar.org" 17 | QUALITY="MEDIUM" 18 | 19 | [[VALIDATORS]] 20 | NAME="sdf_futurenet_1" 21 | HOME_DOMAIN="futurenet.stellar.org" 22 | PUBLIC_KEY="GBRIF2N52GVN3EXBBICD5F4L5VUFXK6S6VOUCF6T2DWPLOLGWEPPYZTF" 23 | ADDRESS="core-live-futurenet-a.stellar.org" 24 | HISTORY="curl -sf http://history.stellar.org/dev/core-futurenet/core_futurenet_001/{0} -o {1}" 25 | [[VALIDATORS]] 26 | NAME="sdf_futurenet_2" 27 | HOME_DOMAIN="futurenet.stellar.org" 28 | PUBLIC_KEY="GAQM2MF22BYOGIF47RZ2523YK7ZL7Z3CIIX6CCPZBWWLE6KJTXMD4SLO" 29 | ADDRESS="core-live-futurenet-b.stellar.org" 30 | HISTORY="curl -sf http://history.stellar.org/dev/core-futurenet/core_futurenet_002/{0} -o {1}" 31 | [[VALIDATORS]] 32 | NAME="sdf_futurenet_3" 33 | HOME_DOMAIN="futurenet.stellar.org" 34 | PUBLIC_KEY="GC2HLBHG4Z7KV73OPKZD6EWXIXM5QOIZVKN5OS4V2HISDOJC3TUORLY4" 35 | ADDRESS="core-live-futurenet-c.stellar.org" 36 | HISTORY="curl -sf http://history.stellar.org/dev/core-futurenet/core_futurenet_003/{0} -o {1}" 37 | 38 | -------------------------------------------------------------------------------- /futurenet/nginx/etc/conf.d/friendbot.conf: -------------------------------------------------------------------------------- 1 | location /friendbot { 2 | rewrite /friendbot / break; 3 | proxy_pass https://friendbot-futurenet.stellar.org; 4 | proxy_ssl_server_name on; 5 | proxy_ssl_name friendbot-futurenet.stellar.org; 6 | proxy_set_header Host friendbot-futurenet.stellar.org; 7 | proxy_redirect off; 8 | } 9 | -------------------------------------------------------------------------------- /futurenet/stellar-rpc/etc/stellar-captive-core.cfg: -------------------------------------------------------------------------------- 1 | # captive core config for futurenet 2 | NETWORK_PASSPHRASE="__NETWORK__" 3 | # disable the web service port, not used 4 | HTTP_PORT=11826 5 | PUBLIC_HTTP_PORT=false 6 | # To avoid conflicts with the core instance 7 | PEER_PORT=11825 8 | DATABASE="__DATABASE__" 9 | 10 | ENABLE_SOROBAN_DIAGNOSTIC_EVENTS=__ENABLE_SOROBAN_DIAGNOSTIC_EVENTS__ 11 | ENABLE_DIAGNOSTICS_FOR_TX_SUBMISSION=__ENABLE_SOROBAN_DIAGNOSTIC_EVENTS__ 12 | 13 | FAILURE_SAFETY=0 14 | UNSAFE_QUORUM=true 15 | 16 | [[HOME_DOMAINS]] 17 | HOME_DOMAIN="futurenet.stellar.org" 18 | QUALITY="MEDIUM" 19 | 20 | [[VALIDATORS]] 21 | NAME="sdf_futurenet_1" 22 | HOME_DOMAIN="futurenet.stellar.org" 23 | PUBLIC_KEY="GBRIF2N52GVN3EXBBICD5F4L5VUFXK6S6VOUCF6T2DWPLOLGWEPPYZTF" 24 | ADDRESS="core-live-futurenet-a.stellar.org" 25 | HISTORY="curl -sf http://history.stellar.org/dev/core-futurenet/core_futurenet_001/{0} -o {1}" 26 | [[VALIDATORS]] 27 | NAME="sdf_futurenet_2" 28 | HOME_DOMAIN="futurenet.stellar.org" 29 | PUBLIC_KEY="GAQM2MF22BYOGIF47RZ2523YK7ZL7Z3CIIX6CCPZBWWLE6KJTXMD4SLO" 30 | ADDRESS="core-live-futurenet-b.stellar.org" 31 | HISTORY="curl -sf http://history.stellar.org/dev/core-futurenet/core_futurenet_002/{0} -o {1}" 32 | [[VALIDATORS]] 33 | NAME="sdf_futurenet_3" 34 | HOME_DOMAIN="futurenet.stellar.org" 35 | PUBLIC_KEY="GC2HLBHG4Z7KV73OPKZD6EWXIXM5QOIZVKN5OS4V2HISDOJC3TUORLY4" 36 | ADDRESS="core-live-futurenet-c.stellar.org" 37 | HISTORY="curl -sf http://history.stellar.org/dev/core-futurenet/core_futurenet_003/{0} -o {1}" 38 | 39 | -------------------------------------------------------------------------------- /futurenet/stellar-rpc/etc/stellar-rpc.cfg: -------------------------------------------------------------------------------- 1 | ENDPOINT="localhost:8003" 2 | ADMIN_ENDPOINT="__STELLAR_RPC_ADMIN_ENDPOINT__" 3 | FRIENDBOT_URL="https://friendbot-futurenet.stellar.org/" 4 | NETWORK_PASSPHRASE="__NETWORK__" 5 | STELLAR_CORE_URL="http://localhost:11826" 6 | CAPTIVE_CORE_CONFIG_PATH="/opt/stellar/stellar-rpc/etc/stellar-captive-core.cfg" 7 | CAPTIVE_CORE_STORAGE_PATH="/opt/stellar/stellar-rpc/captive-core" 8 | CAPTIVE_CORE_USE_DB=true 9 | STELLAR_CORE_BINARY_PATH="/usr/bin/stellar-core" 10 | HISTORY_ARCHIVE_URLS="__ARCHIVE__" 11 | DB_PATH="/opt/stellar/stellar-rpc/rpc_db.sqlite" 12 | STELLAR_CAPTIVE_CORE_HTTP_PORT=11826 13 | CHECKPOINT_FREQUENCY=64 14 | -------------------------------------------------------------------------------- /images.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "tag": "latest", 4 | "events": ["pull_request", "push"], 5 | "config": { 6 | "protocol_version_default": 23 7 | }, 8 | "deps": [ 9 | { "name": "xdr", "repo": "stellar/rs-stellar-xdr", "ref": "v23.0.0" }, 10 | { "name": "core", "repo": "stellar/stellar-core", "ref": "v23.0.1", "options": { "configure_flags": "--disable-tests" } }, 11 | { "name": "rpc", "repo": "stellar/stellar-rpc", "ref": "v23.0.4" }, 12 | { "name": "horizon", "repo": "stellar/go", "ref": "horizon-v23.0.0" }, 13 | { "name": "friendbot", "repo": "stellar/go", "ref": "horizon-v23.0.0" }, 14 | { "name": "lab", "repo": "stellar/laboratory", "ref": "main" } 15 | ], 16 | "tests": { 17 | "continue-on-error": false, 18 | "additional-tests": [ 19 | { "arch": "amd64", "network": "pubnet", "enable": "core,rpc,horizon" } 20 | ] 21 | } 22 | }, 23 | { 24 | "tag": "testing", 25 | "events": ["pull_request", "push"], 26 | "config": { 27 | "protocol_version_default": 23 28 | }, 29 | "deps": [ 30 | { "name": "xdr", "repo": "stellar/rs-stellar-xdr", "ref": "v23.0.0" }, 31 | { "name": "core", "repo": "stellar/stellar-core", "ref": "v23.0.1", "options": { "configure_flags": "--disable-tests" } }, 32 | { "name": "rpc", "repo": "stellar/stellar-rpc", "ref": "v23.0.4" }, 33 | { "name": "horizon", "repo": "stellar/go", "ref": "horizon-v23.0.0" }, 34 | { "name": "friendbot", "repo": "stellar/go", "ref": "horizon-v23.0.0" }, 35 | { "name": "lab", "repo": "stellar/laboratory", "ref": "main" } 36 | ], 37 | "tests": { 38 | "continue-on-error": false, 39 | "additional-tests": [ 40 | { "arch": "amd64", "network": "testnet", "enable": "core,rpc,horizon" }, 41 | { "arch": "amd64", "network": "pubnet", "enable": "core,rpc,horizon" } 42 | ] 43 | } 44 | }, 45 | { 46 | "tag": "future", 47 | "events": ["pull_request", "push"], 48 | "config": { 49 | "protocol_version_default": 23 50 | }, 51 | "deps": [ 52 | { "name": "xdr", "repo": "stellar/rs-stellar-xdr", "ref": "v23.0.0" }, 53 | { "name": "core", "repo": "stellar/stellar-core", "ref": "v23.0.1", "options": { "configure_flags": "--disable-tests" } }, 54 | { "name": "rpc", "repo": "stellar/stellar-rpc", "ref": "v23.0.4" }, 55 | { "name": "horizon", "repo": "stellar/go", "ref": "horizon-v23.0.0" }, 56 | { "name": "friendbot", "repo": "stellar/go", "ref": "horizon-v23.0.0" }, 57 | { "name": "lab", "repo": "stellar/laboratory", "ref": "main" } 58 | ], 59 | "tests": { 60 | "continue-on-error": false, 61 | "additional-tests": [] 62 | } 63 | }, 64 | { 65 | "tag": "nightly", 66 | "events": ["push", "schedule"], 67 | "config": { 68 | "protocol_version_default": 23 69 | }, 70 | "deps": [ 71 | { "name": "xdr", "repo": "stellar/rs-stellar-xdr", "ref": "main" }, 72 | { "name": "core", "repo": "stellar/stellar-core", "ref": "master", "options": { "configure_flags": "--disable-tests" } }, 73 | { "name": "rpc", "repo": "stellar/stellar-rpc", "ref": "main" }, 74 | { "name": "horizon", "repo": "stellar/go", "ref": "master" }, 75 | { "name": "friendbot", "repo": "stellar/go", "ref": "master" }, 76 | { "name": "lab", "repo": "stellar/laboratory", "ref": "main" } 77 | ], 78 | "tests": { 79 | "continue-on-error": true, 80 | "additional-tests": [] 81 | } 82 | }, 83 | { 84 | "tag": "nightly-next", 85 | "events": ["push", "schedule"], 86 | "config": { 87 | "protocol_version_default": 24 88 | }, 89 | "deps": [ 90 | { "name": "xdr", "repo": "stellar/rs-stellar-xdr", "ref": "main" }, 91 | { "name": "core", "repo": "stellar/stellar-core", "ref": "master", "options": { "configure_flags": "--disable-tests --enable-next-protocol-version-unsafe-for-production" } }, 92 | { "name": "rpc", "repo": "stellar/stellar-rpc", "ref": "main" }, 93 | { "name": "horizon", "repo": "stellar/go", "ref": "master" }, 94 | { "name": "friendbot", "repo": "stellar/go", "ref": "master" }, 95 | { "name": "lab", "repo": "stellar/laboratory", "ref": "main" } 96 | ], 97 | "tests": { 98 | "continue-on-error": true, 99 | "additional-tests": [] 100 | } 101 | } 102 | ] 103 | -------------------------------------------------------------------------------- /local/core/etc/config-settings/README.md: -------------------------------------------------------------------------------- 1 | # config-settings 2 | This directory contains Soroban settings upgrade files for each default protocol version (set with the arg `PROTOCOL_VERSION_DEFAULT`) specified on each on the three builds (`latest`, `testing`, and `future`). They need to be separated by protocol version because the number of cost types is dependant on protocol, and we specifically want to capture the cpu cost type changes we make outside of protocol boundaries. 3 | -------------------------------------------------------------------------------- /local/core/etc/config-settings/p21/testnet.json: -------------------------------------------------------------------------------- 1 | { 2 | "updated_entry": [ 3 | { 4 | "contract_max_size_bytes": 65536 5 | }, 6 | { 7 | "contract_compute_v0": { 8 | "ledger_max_instructions": 500000000, 9 | "tx_max_instructions": 100000000, 10 | "fee_rate_per_instructions_increment": 25, 11 | "tx_memory_limit": 41943040 12 | } 13 | }, 14 | { 15 | "contract_ledger_cost_v0": { 16 | "ledger_max_disk_read_entries": 200, 17 | "ledger_max_disk_read_bytes": 500000, 18 | "ledger_max_write_ledger_entries": 125, 19 | "ledger_max_write_bytes": 143360, 20 | "tx_max_disk_read_entries": 40, 21 | "tx_max_disk_read_bytes": 200000, 22 | "tx_max_write_ledger_entries": 25, 23 | "tx_max_write_bytes": 132096, 24 | "fee_disk_read_ledger_entry": 6250, 25 | "fee_write_ledger_entry": 10000, 26 | "fee_disk_read1_kb": 1786, 27 | "soroban_state_target_size_bytes": 14495514624, 28 | "rent_fee1_kb_soroban_state_size_low": -12034, 29 | "rent_fee1_kb_soroban_state_size_high": 115390, 30 | "soroban_state_rent_fee_growth_factor": 1000 31 | } 32 | }, 33 | { 34 | "contract_historical_data_v0": { 35 | "fee_historical1_kb": 16235 36 | } 37 | }, 38 | { 39 | "contract_events_v0": { 40 | "tx_max_contract_events_size_bytes": 8198, 41 | "fee_contract_events1_kb": 10000 42 | } 43 | }, 44 | { 45 | "contract_bandwidth_v0": { 46 | "ledger_max_txs_size_bytes": 71680, 47 | "tx_max_size_bytes": 71680, 48 | "fee_tx_size1_kb": 1624 49 | } 50 | }, 51 | { 52 | "contract_cost_params_cpu_instructions": [ 53 | { 54 | "ext": "v0", 55 | "const_term": 4, 56 | "linear_term": 0 57 | }, 58 | { 59 | "ext": "v0", 60 | "const_term": 434, 61 | "linear_term": 16 62 | }, 63 | { 64 | "ext": "v0", 65 | "const_term": 42, 66 | "linear_term": 16 67 | }, 68 | { 69 | "ext": "v0", 70 | "const_term": 44, 71 | "linear_term": 16 72 | }, 73 | { 74 | "ext": "v0", 75 | "const_term": 295, 76 | "linear_term": 0 77 | }, 78 | { 79 | "ext": "v0", 80 | "const_term": 60, 81 | "linear_term": 0 82 | }, 83 | { 84 | "ext": "v0", 85 | "const_term": 221, 86 | "linear_term": 26 87 | }, 88 | { 89 | "ext": "v0", 90 | "const_term": 331, 91 | "linear_term": 4369 92 | }, 93 | { 94 | "ext": "v0", 95 | "const_term": 3636, 96 | "linear_term": 7013 97 | }, 98 | { 99 | "ext": "v0", 100 | "const_term": 40256, 101 | "linear_term": 0 102 | }, 103 | { 104 | "ext": "v0", 105 | "const_term": 377551, 106 | "linear_term": 4059 107 | }, 108 | { 109 | "ext": "v0", 110 | "const_term": 417482, 111 | "linear_term": 45712 112 | }, 113 | { 114 | "ext": "v0", 115 | "const_term": 41142, 116 | "linear_term": 634 117 | }, 118 | { 119 | "ext": "v0", 120 | "const_term": 1945, 121 | "linear_term": 0 122 | }, 123 | { 124 | "ext": "v0", 125 | "const_term": 6481, 126 | "linear_term": 5943 127 | }, 128 | { 129 | "ext": "v0", 130 | "const_term": 711, 131 | "linear_term": 0 132 | }, 133 | { 134 | "ext": "v0", 135 | "const_term": 2314804, 136 | "linear_term": 0 137 | }, 138 | { 139 | "ext": "v0", 140 | "const_term": 4176, 141 | "linear_term": 0 142 | }, 143 | { 144 | "ext": "v0", 145 | "const_term": 4716, 146 | "linear_term": 0 147 | }, 148 | { 149 | "ext": "v0", 150 | "const_term": 4680, 151 | "linear_term": 0 152 | }, 153 | { 154 | "ext": "v0", 155 | "const_term": 4256, 156 | "linear_term": 0 157 | }, 158 | { 159 | "ext": "v0", 160 | "const_term": 884, 161 | "linear_term": 0 162 | }, 163 | { 164 | "ext": "v0", 165 | "const_term": 1059, 166 | "linear_term": 502 167 | }, 168 | { 169 | "ext": "v0", 170 | "const_term": 73077, 171 | "linear_term": 25410 172 | }, 173 | { 174 | "ext": "v0", 175 | "const_term": 0, 176 | "linear_term": 540752 177 | }, 178 | { 179 | "ext": "v0", 180 | "const_term": 0, 181 | "linear_term": 176363 182 | }, 183 | { 184 | "ext": "v0", 185 | "const_term": 0, 186 | "linear_term": 29989 187 | }, 188 | { 189 | "ext": "v0", 190 | "const_term": 0, 191 | "linear_term": 1061449 192 | }, 193 | { 194 | "ext": "v0", 195 | "const_term": 0, 196 | "linear_term": 237336 197 | }, 198 | { 199 | "ext": "v0", 200 | "const_term": 0, 201 | "linear_term": 328476 202 | }, 203 | { 204 | "ext": "v0", 205 | "const_term": 0, 206 | "linear_term": 701845 207 | }, 208 | { 209 | "ext": "v0", 210 | "const_term": 0, 211 | "linear_term": 429383 212 | }, 213 | { 214 | "ext": "v0", 215 | "const_term": 0, 216 | "linear_term": 28 217 | }, 218 | { 219 | "ext": "v0", 220 | "const_term": 43030, 221 | "linear_term": 0 222 | }, 223 | { 224 | "ext": "v0", 225 | "const_term": 0, 226 | "linear_term": 7556 227 | }, 228 | { 229 | "ext": "v0", 230 | "const_term": 0, 231 | "linear_term": 10711 232 | }, 233 | { 234 | "ext": "v0", 235 | "const_term": 0, 236 | "linear_term": 3300 237 | }, 238 | { 239 | "ext": "v0", 240 | "const_term": 0, 241 | "linear_term": 0 242 | }, 243 | { 244 | "ext": "v0", 245 | "const_term": 0, 246 | "linear_term": 23038 247 | }, 248 | { 249 | "ext": "v0", 250 | "const_term": 0, 251 | "linear_term": 42488 252 | }, 253 | { 254 | "ext": "v0", 255 | "const_term": 0, 256 | "linear_term": 828974 257 | }, 258 | { 259 | "ext": "v0", 260 | "const_term": 0, 261 | "linear_term": 297100 262 | }, 263 | { 264 | "ext": "v0", 265 | "const_term": 0, 266 | "linear_term": 14 267 | }, 268 | { 269 | "ext": "v0", 270 | "const_term": 1882, 271 | "linear_term": 0 272 | }, 273 | { 274 | "ext": "v0", 275 | "const_term": 3000906, 276 | "linear_term": 0 277 | } 278 | ] 279 | }, 280 | { 281 | "contract_data_key_size_bytes": 200 282 | }, 283 | { 284 | "contract_data_entry_size_bytes": 65536 285 | }, 286 | { 287 | "state_archival": { 288 | "eviction_scan_size": 100000, 289 | "live_soroban_state_size_window_sample_period": 64, 290 | "live_soroban_state_size_window_sample_size": 30, 291 | "max_entries_to_archive": 1000, 292 | "max_entry_ttl": 3110400, 293 | "min_persistent_ttl": 2073600, 294 | "min_temporary_ttl": 17280, 295 | "persistent_rent_rate_denominator": 1402, 296 | "starting_eviction_scan_level": 7, 297 | "temp_rent_rate_denominator": 2804 298 | } 299 | }, 300 | { 301 | "contract_execution_lanes": { 302 | "ledger_max_tx_count": 100 303 | } 304 | } 305 | ] 306 | } 307 | -------------------------------------------------------------------------------- /local/core/etc/config-settings/p21/unlimited.json: -------------------------------------------------------------------------------- 1 | { 2 | "updated_entry": [ 3 | { 4 | "contract_max_size_bytes": 4294967295 5 | }, 6 | { 7 | "contract_compute_v0": { 8 | "ledger_max_instructions": 2305843009213693951, 9 | "tx_max_instructions": 2305843009213693951, 10 | "fee_rate_per_instructions_increment": 100, 11 | "tx_memory_limit": 4294967295 12 | } 13 | }, 14 | { 15 | "contract_ledger_cost_v0": { 16 | "ledger_max_disk_read_entries": 4294967295, 17 | "ledger_max_disk_read_bytes": 4294967295, 18 | "ledger_max_write_ledger_entries": 4294967295, 19 | "ledger_max_write_bytes": 4294967295, 20 | "tx_max_disk_read_entries": 4294967295, 21 | "tx_max_disk_read_bytes": 4294967295, 22 | "tx_max_write_ledger_entries": 4294967295, 23 | "tx_max_write_bytes": 4294967295, 24 | "fee_disk_read_ledger_entry": 1000, 25 | "fee_write_ledger_entry": 3000, 26 | "fee_disk_read1_kb": 1000, 27 | "soroban_state_target_size_bytes": 2305843009213694000, 28 | "rent_fee1_kb_soroban_state_size_low": 1000, 29 | "rent_fee1_kb_soroban_state_size_high": 4000000, 30 | "soroban_state_rent_fee_growth_factor": 1000 31 | } 32 | }, 33 | { 34 | "contract_historical_data_v0": { 35 | "fee_historical1_kb": 5000 36 | } 37 | }, 38 | { 39 | "contract_events_v0": { 40 | "tx_max_contract_events_size_bytes": 4294967295, 41 | "fee_contract_events1_kb": 300 42 | } 43 | }, 44 | { 45 | "contract_bandwidth_v0": { 46 | "ledger_max_txs_size_bytes": 4294967295, 47 | "tx_max_size_bytes": 4294965295, 48 | "fee_tx_size1_kb": 500 49 | } 50 | }, 51 | { 52 | "contract_cost_params_cpu_instructions": [ 53 | { 54 | "ext": "v0", 55 | "const_term": 4, 56 | "linear_term": 0 57 | }, 58 | { 59 | "ext": "v0", 60 | "const_term": 434, 61 | "linear_term": 16 62 | }, 63 | { 64 | "ext": "v0", 65 | "const_term": 42, 66 | "linear_term": 16 67 | }, 68 | { 69 | "ext": "v0", 70 | "const_term": 44, 71 | "linear_term": 16 72 | }, 73 | { 74 | "ext": "v0", 75 | "const_term": 295, 76 | "linear_term": 0 77 | }, 78 | { 79 | "ext": "v0", 80 | "const_term": 60, 81 | "linear_term": 0 82 | }, 83 | { 84 | "ext": "v0", 85 | "const_term": 221, 86 | "linear_term": 26 87 | }, 88 | { 89 | "ext": "v0", 90 | "const_term": 331, 91 | "linear_term": 4369 92 | }, 93 | { 94 | "ext": "v0", 95 | "const_term": 3636, 96 | "linear_term": 7013 97 | }, 98 | { 99 | "ext": "v0", 100 | "const_term": 40256, 101 | "linear_term": 0 102 | }, 103 | { 104 | "ext": "v0", 105 | "const_term": 377551, 106 | "linear_term": 4059 107 | }, 108 | { 109 | "ext": "v0", 110 | "const_term": 417482, 111 | "linear_term": 45712 112 | }, 113 | { 114 | "ext": "v0", 115 | "const_term": 41142, 116 | "linear_term": 634 117 | }, 118 | { 119 | "ext": "v0", 120 | "const_term": 1945, 121 | "linear_term": 0 122 | }, 123 | { 124 | "ext": "v0", 125 | "const_term": 6481, 126 | "linear_term": 5943 127 | }, 128 | { 129 | "ext": "v0", 130 | "const_term": 711, 131 | "linear_term": 0 132 | }, 133 | { 134 | "ext": "v0", 135 | "const_term": 2314804, 136 | "linear_term": 0 137 | }, 138 | { 139 | "ext": "v0", 140 | "const_term": 4176, 141 | "linear_term": 0 142 | }, 143 | { 144 | "ext": "v0", 145 | "const_term": 4716, 146 | "linear_term": 0 147 | }, 148 | { 149 | "ext": "v0", 150 | "const_term": 4680, 151 | "linear_term": 0 152 | }, 153 | { 154 | "ext": "v0", 155 | "const_term": 4256, 156 | "linear_term": 0 157 | }, 158 | { 159 | "ext": "v0", 160 | "const_term": 884, 161 | "linear_term": 0 162 | }, 163 | { 164 | "ext": "v0", 165 | "const_term": 1059, 166 | "linear_term": 502 167 | }, 168 | { 169 | "ext": "v0", 170 | "const_term": 73077, 171 | "linear_term": 25410 172 | }, 173 | { 174 | "ext": "v0", 175 | "const_term": 0, 176 | "linear_term": 540752 177 | }, 178 | { 179 | "ext": "v0", 180 | "const_term": 0, 181 | "linear_term": 176363 182 | }, 183 | { 184 | "ext": "v0", 185 | "const_term": 0, 186 | "linear_term": 29989 187 | }, 188 | { 189 | "ext": "v0", 190 | "const_term": 0, 191 | "linear_term": 1061449 192 | }, 193 | { 194 | "ext": "v0", 195 | "const_term": 0, 196 | "linear_term": 237336 197 | }, 198 | { 199 | "ext": "v0", 200 | "const_term": 0, 201 | "linear_term": 328476 202 | }, 203 | { 204 | "ext": "v0", 205 | "const_term": 0, 206 | "linear_term": 701845 207 | }, 208 | { 209 | "ext": "v0", 210 | "const_term": 0, 211 | "linear_term": 429383 212 | }, 213 | { 214 | "ext": "v0", 215 | "const_term": 0, 216 | "linear_term": 28 217 | }, 218 | { 219 | "ext": "v0", 220 | "const_term": 43030, 221 | "linear_term": 0 222 | }, 223 | { 224 | "ext": "v0", 225 | "const_term": 0, 226 | "linear_term": 7556 227 | }, 228 | { 229 | "ext": "v0", 230 | "const_term": 0, 231 | "linear_term": 10711 232 | }, 233 | { 234 | "ext": "v0", 235 | "const_term": 0, 236 | "linear_term": 3300 237 | }, 238 | { 239 | "ext": "v0", 240 | "const_term": 0, 241 | "linear_term": 0 242 | }, 243 | { 244 | "ext": "v0", 245 | "const_term": 0, 246 | "linear_term": 23038 247 | }, 248 | { 249 | "ext": "v0", 250 | "const_term": 0, 251 | "linear_term": 42488 252 | }, 253 | { 254 | "ext": "v0", 255 | "const_term": 0, 256 | "linear_term": 828974 257 | }, 258 | { 259 | "ext": "v0", 260 | "const_term": 0, 261 | "linear_term": 297100 262 | }, 263 | { 264 | "ext": "v0", 265 | "const_term": 0, 266 | "linear_term": 14 267 | }, 268 | { 269 | "ext": "v0", 270 | "const_term": 1882, 271 | "linear_term": 0 272 | }, 273 | { 274 | "ext": "v0", 275 | "const_term": 3000906, 276 | "linear_term": 0 277 | } 278 | ] 279 | }, 280 | { 281 | "contract_data_key_size_bytes": 4294967295 282 | }, 283 | { 284 | "contract_data_entry_size_bytes": 4294967295 285 | }, 286 | { 287 | "state_archival": { 288 | "max_entry_ttl": 3110400, 289 | "min_temporary_ttl": 16, 290 | "min_persistent_ttl": 120960, 291 | "persistent_rent_rate_denominator": 535680, 292 | "temp_rent_rate_denominator": 5356800, 293 | "max_entries_to_archive": 100, 294 | "live_soroban_state_size_window_sample_size": 30, 295 | "live_soroban_state_size_window_sample_period": 64, 296 | "eviction_scan_size": 100000, 297 | "starting_eviction_scan_level": 6 298 | } 299 | }, 300 | { 301 | "contract_execution_lanes": { 302 | "ledger_max_tx_count": 4294967295 303 | } 304 | } 305 | ] 306 | } 307 | -------------------------------------------------------------------------------- /local/core/etc/config-settings/p22/testnet.json: -------------------------------------------------------------------------------- 1 | { 2 | "updated_entry": [ 3 | { 4 | "contract_max_size_bytes": 65536 5 | }, 6 | { 7 | "contract_compute_v0": { 8 | "ledger_max_instructions": 500000000, 9 | "tx_max_instructions": 100000000, 10 | "fee_rate_per_instructions_increment": 25, 11 | "tx_memory_limit": 41943040 12 | } 13 | }, 14 | { 15 | "contract_ledger_cost_v0": { 16 | "ledger_max_disk_read_entries": 200, 17 | "ledger_max_disk_read_bytes": 500000, 18 | "ledger_max_write_ledger_entries": 125, 19 | "ledger_max_write_bytes": 143360, 20 | "tx_max_disk_read_entries": 40, 21 | "tx_max_disk_read_bytes": 200000, 22 | "tx_max_write_ledger_entries": 25, 23 | "tx_max_write_bytes": 132096, 24 | "fee_disk_read_ledger_entry": 6250, 25 | "fee_write_ledger_entry": 10000, 26 | "fee_disk_read1_kb": 1786, 27 | "soroban_state_target_size_bytes": 14495514624, 28 | "rent_fee1_kb_soroban_state_size_low": -12034, 29 | "rent_fee1_kb_soroban_state_size_high": 115390, 30 | "soroban_state_rent_fee_growth_factor": 1000 31 | } 32 | }, 33 | { 34 | "contract_historical_data_v0": { 35 | "fee_historical1_kb": 16235 36 | } 37 | }, 38 | { 39 | "contract_events_v0": { 40 | "tx_max_contract_events_size_bytes": 8198, 41 | "fee_contract_events1_kb": 10000 42 | } 43 | }, 44 | { 45 | "contract_bandwidth_v0": { 46 | "ledger_max_txs_size_bytes": 71680, 47 | "tx_max_size_bytes": 71680, 48 | "fee_tx_size1_kb": 1624 49 | } 50 | }, 51 | { 52 | "contract_cost_params_cpu_instructions": [ 53 | { 54 | "ext": "v0", 55 | "const_term": 4, 56 | "linear_term": 0 57 | }, 58 | { 59 | "ext": "v0", 60 | "const_term": 434, 61 | "linear_term": 16 62 | }, 63 | { 64 | "ext": "v0", 65 | "const_term": 42, 66 | "linear_term": 16 67 | }, 68 | { 69 | "ext": "v0", 70 | "const_term": 44, 71 | "linear_term": 16 72 | }, 73 | { 74 | "ext": "v0", 75 | "const_term": 295, 76 | "linear_term": 0 77 | }, 78 | { 79 | "ext": "v0", 80 | "const_term": 60, 81 | "linear_term": 0 82 | }, 83 | { 84 | "ext": "v0", 85 | "const_term": 221, 86 | "linear_term": 26 87 | }, 88 | { 89 | "ext": "v0", 90 | "const_term": 331, 91 | "linear_term": 4369 92 | }, 93 | { 94 | "ext": "v0", 95 | "const_term": 3636, 96 | "linear_term": 7013 97 | }, 98 | { 99 | "ext": "v0", 100 | "const_term": 40256, 101 | "linear_term": 0 102 | }, 103 | { 104 | "ext": "v0", 105 | "const_term": 377551, 106 | "linear_term": 4059 107 | }, 108 | { 109 | "ext": "v0", 110 | "const_term": 417482, 111 | "linear_term": 45712 112 | }, 113 | { 114 | "ext": "v0", 115 | "const_term": 41142, 116 | "linear_term": 634 117 | }, 118 | { 119 | "ext": "v0", 120 | "const_term": 1945, 121 | "linear_term": 0 122 | }, 123 | { 124 | "ext": "v0", 125 | "const_term": 6481, 126 | "linear_term": 5943 127 | }, 128 | { 129 | "ext": "v0", 130 | "const_term": 711, 131 | "linear_term": 0 132 | }, 133 | { 134 | "ext": "v0", 135 | "const_term": 2314804, 136 | "linear_term": 0 137 | }, 138 | { 139 | "ext": "v0", 140 | "const_term": 4176, 141 | "linear_term": 0 142 | }, 143 | { 144 | "ext": "v0", 145 | "const_term": 4716, 146 | "linear_term": 0 147 | }, 148 | { 149 | "ext": "v0", 150 | "const_term": 4680, 151 | "linear_term": 0 152 | }, 153 | { 154 | "ext": "v0", 155 | "const_term": 4256, 156 | "linear_term": 0 157 | }, 158 | { 159 | "ext": "v0", 160 | "const_term": 884, 161 | "linear_term": 0 162 | }, 163 | { 164 | "ext": "v0", 165 | "const_term": 1059, 166 | "linear_term": 502 167 | }, 168 | { 169 | "ext": "v0", 170 | "const_term": 73077, 171 | "linear_term": 25410 172 | }, 173 | { 174 | "ext": "v0", 175 | "const_term": 0, 176 | "linear_term": 540752 177 | }, 178 | { 179 | "ext": "v0", 180 | "const_term": 0, 181 | "linear_term": 176363 182 | }, 183 | { 184 | "ext": "v0", 185 | "const_term": 0, 186 | "linear_term": 29989 187 | }, 188 | { 189 | "ext": "v0", 190 | "const_term": 0, 191 | "linear_term": 1061449 192 | }, 193 | { 194 | "ext": "v0", 195 | "const_term": 0, 196 | "linear_term": 237336 197 | }, 198 | { 199 | "ext": "v0", 200 | "const_term": 0, 201 | "linear_term": 328476 202 | }, 203 | { 204 | "ext": "v0", 205 | "const_term": 0, 206 | "linear_term": 701845 207 | }, 208 | { 209 | "ext": "v0", 210 | "const_term": 0, 211 | "linear_term": 429383 212 | }, 213 | { 214 | "ext": "v0", 215 | "const_term": 0, 216 | "linear_term": 28 217 | }, 218 | { 219 | "ext": "v0", 220 | "const_term": 43030, 221 | "linear_term": 0 222 | }, 223 | { 224 | "ext": "v0", 225 | "const_term": 0, 226 | "linear_term": 7556 227 | }, 228 | { 229 | "ext": "v0", 230 | "const_term": 0, 231 | "linear_term": 10711 232 | }, 233 | { 234 | "ext": "v0", 235 | "const_term": 0, 236 | "linear_term": 3300 237 | }, 238 | { 239 | "ext": "v0", 240 | "const_term": 0, 241 | "linear_term": 0 242 | }, 243 | { 244 | "ext": "v0", 245 | "const_term": 0, 246 | "linear_term": 23038 247 | }, 248 | { 249 | "ext": "v0", 250 | "const_term": 0, 251 | "linear_term": 42488 252 | }, 253 | { 254 | "ext": "v0", 255 | "const_term": 0, 256 | "linear_term": 828974 257 | }, 258 | { 259 | "ext": "v0", 260 | "const_term": 0, 261 | "linear_term": 297100 262 | }, 263 | { 264 | "ext": "v0", 265 | "const_term": 0, 266 | "linear_term": 14 267 | }, 268 | { 269 | "ext": "v0", 270 | "const_term": 1882, 271 | "linear_term": 0 272 | }, 273 | { 274 | "ext": "v0", 275 | "const_term": 3000906, 276 | "linear_term": 0 277 | }, 278 | { 279 | "ext": "v0", 280 | "const_term": 661, 281 | "linear_term": 0 282 | }, 283 | { 284 | "ext": "v0", 285 | "const_term": 985, 286 | "linear_term": 0 287 | }, 288 | { 289 | "ext": "v0", 290 | "const_term": 1934, 291 | "linear_term": 0 292 | }, 293 | { 294 | "ext": "v0", 295 | "const_term": 730510, 296 | "linear_term": 0 297 | }, 298 | { 299 | "ext": "v0", 300 | "const_term": 5921, 301 | "linear_term": 0 302 | }, 303 | { 304 | "ext": "v0", 305 | "const_term": 1057822, 306 | "linear_term": 0 307 | }, 308 | { 309 | "ext": "v0", 310 | "const_term": 92642, 311 | "linear_term": 0 312 | }, 313 | { 314 | "ext": "v0", 315 | "const_term": 100742, 316 | "linear_term": 0 317 | }, 318 | { 319 | "ext": "v0", 320 | "const_term": 7689, 321 | "linear_term": 0 322 | }, 323 | { 324 | "ext": "v0", 325 | "const_term": 2458985, 326 | "linear_term": 0 327 | }, 328 | { 329 | "ext": "v0", 330 | "const_term": 2426722, 331 | "linear_term": 96397671 332 | }, 333 | { 334 | "ext": "v0", 335 | "const_term": 1541554, 336 | "linear_term": 0 337 | }, 338 | { 339 | "ext": "v0", 340 | "const_term": 3211191, 341 | "linear_term": 6713 342 | }, 343 | { 344 | "ext": "v0", 345 | "const_term": 25207, 346 | "linear_term": 0 347 | }, 348 | { 349 | "ext": "v0", 350 | "const_term": 7873219, 351 | "linear_term": 0 352 | }, 353 | { 354 | "ext": "v0", 355 | "const_term": 8035968, 356 | "linear_term": 309667335 357 | }, 358 | { 359 | "ext": "v0", 360 | "const_term": 2420202, 361 | "linear_term": 0 362 | }, 363 | { 364 | "ext": "v0", 365 | "const_term": 7050564, 366 | "linear_term": 6797 367 | }, 368 | { 369 | "ext": "v0", 370 | "const_term": 10558948, 371 | "linear_term": 632860943 372 | }, 373 | { 374 | "ext": "v0", 375 | "const_term": 1994, 376 | "linear_term": 0 377 | }, 378 | { 379 | "ext": "v0", 380 | "const_term": 1155, 381 | "linear_term": 0 382 | }, 383 | { 384 | "ext": "v0", 385 | "const_term": 74, 386 | "linear_term": 0 387 | }, 388 | { 389 | "ext": "v0", 390 | "const_term": 332, 391 | "linear_term": 0 392 | }, 393 | { 394 | "ext": "v0", 395 | "const_term": 691, 396 | "linear_term": 74558 397 | }, 398 | { 399 | "ext": "v0", 400 | "const_term": 35421, 401 | "linear_term": 0 402 | } 403 | ] 404 | }, 405 | { 406 | "contract_data_key_size_bytes": 200 407 | }, 408 | { 409 | "contract_data_entry_size_bytes": 65536 410 | }, 411 | { 412 | "state_archival": { 413 | "eviction_scan_size": 100000, 414 | "live_soroban_state_size_window_sample_period": 64, 415 | "live_soroban_state_size_window_sample_size": 30, 416 | "max_entries_to_archive": 1000, 417 | "max_entry_ttl": 3110400, 418 | "min_persistent_ttl": 2073600, 419 | "min_temporary_ttl": 17280, 420 | "persistent_rent_rate_denominator": 1402, 421 | "starting_eviction_scan_level": 7, 422 | "temp_rent_rate_denominator": 2804 423 | } 424 | }, 425 | { 426 | "contract_execution_lanes": { 427 | "ledger_max_tx_count": 100 428 | } 429 | } 430 | ] 431 | } 432 | -------------------------------------------------------------------------------- /local/core/etc/config-settings/p22/unlimited.json: -------------------------------------------------------------------------------- 1 | { 2 | "updated_entry": [ 3 | { 4 | "contract_max_size_bytes": 4294967295 5 | }, 6 | { 7 | "contract_compute_v0": { 8 | "ledger_max_instructions": 2305843009213693951, 9 | "tx_max_instructions": 2305843009213693951, 10 | "fee_rate_per_instructions_increment": 100, 11 | "tx_memory_limit": 4294967295 12 | } 13 | }, 14 | { 15 | "contract_ledger_cost_v0": { 16 | "fee_disk_read_ledger_entry": 1000, 17 | "fee_disk_read1_kb": 1000, 18 | "fee_write_ledger_entry": 3000, 19 | "ledger_max_disk_read_bytes": 4294967295, 20 | "ledger_max_disk_read_entries": 4294967295, 21 | "ledger_max_write_bytes": 4294967295, 22 | "ledger_max_write_ledger_entries": 4294967295, 23 | "rent_fee1_kb_soroban_state_size_high": 10000, 24 | "rent_fee1_kb_soroban_state_size_low": 100, 25 | "soroban_state_rent_fee_growth_factor": 0, 26 | "soroban_state_target_size_bytes": 4294967295, 27 | "tx_max_disk_read_bytes": 4294967295, 28 | "tx_max_disk_read_entries": 4294967295, 29 | "tx_max_write_bytes": 4294967295, 30 | "tx_max_write_ledger_entries": 4294967295 31 | } 32 | }, 33 | { 34 | "contract_historical_data_v0": { 35 | "fee_historical1_kb": 5000 36 | } 37 | }, 38 | { 39 | "contract_events_v0": { 40 | "tx_max_contract_events_size_bytes": 4294967295, 41 | "fee_contract_events1_kb": 300 42 | } 43 | }, 44 | { 45 | "contract_bandwidth_v0": { 46 | "ledger_max_txs_size_bytes": 4294967295, 47 | "tx_max_size_bytes": 4294965295, 48 | "fee_tx_size1_kb": 500 49 | } 50 | }, 51 | { 52 | "contract_cost_params_cpu_instructions": [ 53 | { 54 | "ext": "v0", 55 | "const_term": 4, 56 | "linear_term": 0 57 | }, 58 | { 59 | "ext": "v0", 60 | "const_term": 434, 61 | "linear_term": 16 62 | }, 63 | { 64 | "ext": "v0", 65 | "const_term": 42, 66 | "linear_term": 16 67 | }, 68 | { 69 | "ext": "v0", 70 | "const_term": 44, 71 | "linear_term": 16 72 | }, 73 | { 74 | "ext": "v0", 75 | "const_term": 295, 76 | "linear_term": 0 77 | }, 78 | { 79 | "ext": "v0", 80 | "const_term": 60, 81 | "linear_term": 0 82 | }, 83 | { 84 | "ext": "v0", 85 | "const_term": 221, 86 | "linear_term": 26 87 | }, 88 | { 89 | "ext": "v0", 90 | "const_term": 331, 91 | "linear_term": 4369 92 | }, 93 | { 94 | "ext": "v0", 95 | "const_term": 3636, 96 | "linear_term": 7013 97 | }, 98 | { 99 | "ext": "v0", 100 | "const_term": 40256, 101 | "linear_term": 0 102 | }, 103 | { 104 | "ext": "v0", 105 | "const_term": 377551, 106 | "linear_term": 4059 107 | }, 108 | { 109 | "ext": "v0", 110 | "const_term": 417482, 111 | "linear_term": 45712 112 | }, 113 | { 114 | "ext": "v0", 115 | "const_term": 41142, 116 | "linear_term": 634 117 | }, 118 | { 119 | "ext": "v0", 120 | "const_term": 1945, 121 | "linear_term": 0 122 | }, 123 | { 124 | "ext": "v0", 125 | "const_term": 6481, 126 | "linear_term": 5943 127 | }, 128 | { 129 | "ext": "v0", 130 | "const_term": 711, 131 | "linear_term": 0 132 | }, 133 | { 134 | "ext": "v0", 135 | "const_term": 2314804, 136 | "linear_term": 0 137 | }, 138 | { 139 | "ext": "v0", 140 | "const_term": 4176, 141 | "linear_term": 0 142 | }, 143 | { 144 | "ext": "v0", 145 | "const_term": 4716, 146 | "linear_term": 0 147 | }, 148 | { 149 | "ext": "v0", 150 | "const_term": 4680, 151 | "linear_term": 0 152 | }, 153 | { 154 | "ext": "v0", 155 | "const_term": 4256, 156 | "linear_term": 0 157 | }, 158 | { 159 | "ext": "v0", 160 | "const_term": 884, 161 | "linear_term": 0 162 | }, 163 | { 164 | "ext": "v0", 165 | "const_term": 1059, 166 | "linear_term": 502 167 | }, 168 | { 169 | "ext": "v0", 170 | "const_term": 73077, 171 | "linear_term": 25410 172 | }, 173 | { 174 | "ext": "v0", 175 | "const_term": 0, 176 | "linear_term": 540752 177 | }, 178 | { 179 | "ext": "v0", 180 | "const_term": 0, 181 | "linear_term": 176363 182 | }, 183 | { 184 | "ext": "v0", 185 | "const_term": 0, 186 | "linear_term": 29989 187 | }, 188 | { 189 | "ext": "v0", 190 | "const_term": 0, 191 | "linear_term": 1061449 192 | }, 193 | { 194 | "ext": "v0", 195 | "const_term": 0, 196 | "linear_term": 237336 197 | }, 198 | { 199 | "ext": "v0", 200 | "const_term": 0, 201 | "linear_term": 328476 202 | }, 203 | { 204 | "ext": "v0", 205 | "const_term": 0, 206 | "linear_term": 701845 207 | }, 208 | { 209 | "ext": "v0", 210 | "const_term": 0, 211 | "linear_term": 429383 212 | }, 213 | { 214 | "ext": "v0", 215 | "const_term": 0, 216 | "linear_term": 28 217 | }, 218 | { 219 | "ext": "v0", 220 | "const_term": 43030, 221 | "linear_term": 0 222 | }, 223 | { 224 | "ext": "v0", 225 | "const_term": 0, 226 | "linear_term": 7556 227 | }, 228 | { 229 | "ext": "v0", 230 | "const_term": 0, 231 | "linear_term": 10711 232 | }, 233 | { 234 | "ext": "v0", 235 | "const_term": 0, 236 | "linear_term": 3300 237 | }, 238 | { 239 | "ext": "v0", 240 | "const_term": 0, 241 | "linear_term": 0 242 | }, 243 | { 244 | "ext": "v0", 245 | "const_term": 0, 246 | "linear_term": 23038 247 | }, 248 | { 249 | "ext": "v0", 250 | "const_term": 0, 251 | "linear_term": 42488 252 | }, 253 | { 254 | "ext": "v0", 255 | "const_term": 0, 256 | "linear_term": 828974 257 | }, 258 | { 259 | "ext": "v0", 260 | "const_term": 0, 261 | "linear_term": 297100 262 | }, 263 | { 264 | "ext": "v0", 265 | "const_term": 0, 266 | "linear_term": 14 267 | }, 268 | { 269 | "ext": "v0", 270 | "const_term": 1882, 271 | "linear_term": 0 272 | }, 273 | { 274 | "ext": "v0", 275 | "const_term": 3000906, 276 | "linear_term": 0 277 | }, 278 | { 279 | "ext": "v0", 280 | "const_term": 661, 281 | "linear_term": 0 282 | }, 283 | { 284 | "ext": "v0", 285 | "const_term": 985, 286 | "linear_term": 0 287 | }, 288 | { 289 | "ext": "v0", 290 | "const_term": 1934, 291 | "linear_term": 0 292 | }, 293 | { 294 | "ext": "v0", 295 | "const_term": 730510, 296 | "linear_term": 0 297 | }, 298 | { 299 | "ext": "v0", 300 | "const_term": 5921, 301 | "linear_term": 0 302 | }, 303 | { 304 | "ext": "v0", 305 | "const_term": 1057822, 306 | "linear_term": 0 307 | }, 308 | { 309 | "ext": "v0", 310 | "const_term": 92642, 311 | "linear_term": 0 312 | }, 313 | { 314 | "ext": "v0", 315 | "const_term": 100742, 316 | "linear_term": 0 317 | }, 318 | { 319 | "ext": "v0", 320 | "const_term": 7689, 321 | "linear_term": 0 322 | }, 323 | { 324 | "ext": "v0", 325 | "const_term": 2458985, 326 | "linear_term": 0 327 | }, 328 | { 329 | "ext": "v0", 330 | "const_term": 2426722, 331 | "linear_term": 96397671 332 | }, 333 | { 334 | "ext": "v0", 335 | "const_term": 1541554, 336 | "linear_term": 0 337 | }, 338 | { 339 | "ext": "v0", 340 | "const_term": 3211191, 341 | "linear_term": 6713 342 | }, 343 | { 344 | "ext": "v0", 345 | "const_term": 25207, 346 | "linear_term": 0 347 | }, 348 | { 349 | "ext": "v0", 350 | "const_term": 7873219, 351 | "linear_term": 0 352 | }, 353 | { 354 | "ext": "v0", 355 | "const_term": 8035968, 356 | "linear_term": 309667335 357 | }, 358 | { 359 | "ext": "v0", 360 | "const_term": 2420202, 361 | "linear_term": 0 362 | }, 363 | { 364 | "ext": "v0", 365 | "const_term": 7050564, 366 | "linear_term": 6797 367 | }, 368 | { 369 | "ext": "v0", 370 | "const_term": 10558948, 371 | "linear_term": 632860943 372 | }, 373 | { 374 | "ext": "v0", 375 | "const_term": 1994, 376 | "linear_term": 0 377 | }, 378 | { 379 | "ext": "v0", 380 | "const_term": 1155, 381 | "linear_term": 0 382 | }, 383 | { 384 | "ext": "v0", 385 | "const_term": 74, 386 | "linear_term": 0 387 | }, 388 | { 389 | "ext": "v0", 390 | "const_term": 332, 391 | "linear_term": 0 392 | }, 393 | { 394 | "ext": "v0", 395 | "const_term": 691, 396 | "linear_term": 74558 397 | }, 398 | { 399 | "ext": "v0", 400 | "const_term": 35421, 401 | "linear_term": 0 402 | } 403 | ] 404 | }, 405 | { 406 | "contract_data_key_size_bytes": 4294967295 407 | }, 408 | { 409 | "contract_data_entry_size_bytes": 4294967295 410 | }, 411 | { 412 | "state_archival": { 413 | "eviction_scan_size": 100000, 414 | "live_soroban_state_size_window_sample_period": 64, 415 | "live_soroban_state_size_window_sample_size": 30, 416 | "max_entries_to_archive": 100, 417 | "max_entry_ttl": 3110400, 418 | "min_persistent_ttl": 120960, 419 | "min_temporary_ttl": 16, 420 | "persistent_rent_rate_denominator": 535680, 421 | "starting_eviction_scan_level": 6, 422 | "temp_rent_rate_denominator": 5356800 423 | } 424 | }, 425 | { 426 | "contract_execution_lanes": { 427 | "ledger_max_tx_count": 4294967295 428 | } 429 | } 430 | ] 431 | } 432 | -------------------------------------------------------------------------------- /local/core/etc/config-settings/p23/testnet.json: -------------------------------------------------------------------------------- 1 | { 2 | "updated_entry": [ 3 | { 4 | "contract_max_size_bytes": 131072 5 | }, 6 | { 7 | "contract_compute_v0": { 8 | "ledger_max_instructions": "500000000", 9 | "tx_max_instructions": "100000000", 10 | "fee_rate_per_instructions_increment": "25", 11 | "tx_memory_limit": 41943040 12 | } 13 | }, 14 | { 15 | "contract_ledger_cost_v0": { 16 | "ledger_max_disk_read_entries": 500, 17 | "ledger_max_disk_read_bytes": 3500000, 18 | "ledger_max_write_ledger_entries": 250, 19 | "ledger_max_write_bytes": 143360, 20 | "tx_max_disk_read_entries": 100, 21 | "tx_max_disk_read_bytes": 200000, 22 | "tx_max_write_ledger_entries": 50, 23 | "tx_max_write_bytes": 132096, 24 | "fee_disk_read_ledger_entry": "6250", 25 | "fee_write_ledger_entry": "10000", 26 | "fee_disk_read1_kb": "1786", 27 | "soroban_state_target_size_bytes": "3000000000", 28 | "rent_fee1_kb_soroban_state_size_low": "-17000", 29 | "rent_fee1_kb_soroban_state_size_high": "10000", 30 | "soroban_state_rent_fee_growth_factor": 5000 31 | } 32 | }, 33 | { 34 | "contract_historical_data_v0": { 35 | "fee_historical1_kb": "16235" 36 | } 37 | }, 38 | { 39 | "contract_events_v0": { 40 | "tx_max_contract_events_size_bytes": 16384, 41 | "fee_contract_events1_kb": "10000" 42 | } 43 | }, 44 | { 45 | "contract_bandwidth_v0": { 46 | "ledger_max_txs_size_bytes": 133120, 47 | "tx_max_size_bytes": 132096, 48 | "fee_tx_size1_kb": "1624" 49 | } 50 | }, 51 | { 52 | "contract_cost_params_cpu_instructions": [ 53 | { 54 | "ext": "v0", 55 | "const_term": "4", 56 | "linear_term": "0" 57 | }, 58 | { 59 | "ext": "v0", 60 | "const_term": "434", 61 | "linear_term": "16" 62 | }, 63 | { 64 | "ext": "v0", 65 | "const_term": "42", 66 | "linear_term": "16" 67 | }, 68 | { 69 | "ext": "v0", 70 | "const_term": "44", 71 | "linear_term": "16" 72 | }, 73 | { 74 | "ext": "v0", 75 | "const_term": "295", 76 | "linear_term": "0" 77 | }, 78 | { 79 | "ext": "v0", 80 | "const_term": "60", 81 | "linear_term": "0" 82 | }, 83 | { 84 | "ext": "v0", 85 | "const_term": "221", 86 | "linear_term": "26" 87 | }, 88 | { 89 | "ext": "v0", 90 | "const_term": "331", 91 | "linear_term": "4369" 92 | }, 93 | { 94 | "ext": "v0", 95 | "const_term": "3636", 96 | "linear_term": "7013" 97 | }, 98 | { 99 | "ext": "v0", 100 | "const_term": "40256", 101 | "linear_term": "0" 102 | }, 103 | { 104 | "ext": "v0", 105 | "const_term": "377551", 106 | "linear_term": "4059" 107 | }, 108 | { 109 | "ext": "v0", 110 | "const_term": "417482", 111 | "linear_term": "45712" 112 | }, 113 | { 114 | "ext": "v0", 115 | "const_term": "41142", 116 | "linear_term": "634" 117 | }, 118 | { 119 | "ext": "v0", 120 | "const_term": "1945", 121 | "linear_term": "0" 122 | }, 123 | { 124 | "ext": "v0", 125 | "const_term": "6481", 126 | "linear_term": "5943" 127 | }, 128 | { 129 | "ext": "v0", 130 | "const_term": "711", 131 | "linear_term": "0" 132 | }, 133 | { 134 | "ext": "v0", 135 | "const_term": "2314804", 136 | "linear_term": "0" 137 | }, 138 | { 139 | "ext": "v0", 140 | "const_term": "4176", 141 | "linear_term": "0" 142 | }, 143 | { 144 | "ext": "v0", 145 | "const_term": "4716", 146 | "linear_term": "0" 147 | }, 148 | { 149 | "ext": "v0", 150 | "const_term": "4680", 151 | "linear_term": "0" 152 | }, 153 | { 154 | "ext": "v0", 155 | "const_term": "4256", 156 | "linear_term": "0" 157 | }, 158 | { 159 | "ext": "v0", 160 | "const_term": "884", 161 | "linear_term": "0" 162 | }, 163 | { 164 | "ext": "v0", 165 | "const_term": "1059", 166 | "linear_term": "502" 167 | }, 168 | { 169 | "ext": "v0", 170 | "const_term": "73077", 171 | "linear_term": "25410" 172 | }, 173 | { 174 | "ext": "v0", 175 | "const_term": "0", 176 | "linear_term": "540752" 177 | }, 178 | { 179 | "ext": "v0", 180 | "const_term": "0", 181 | "linear_term": "176363" 182 | }, 183 | { 184 | "ext": "v0", 185 | "const_term": "0", 186 | "linear_term": "29989" 187 | }, 188 | { 189 | "ext": "v0", 190 | "const_term": "0", 191 | "linear_term": "1061449" 192 | }, 193 | { 194 | "ext": "v0", 195 | "const_term": "0", 196 | "linear_term": "237336" 197 | }, 198 | { 199 | "ext": "v0", 200 | "const_term": "0", 201 | "linear_term": "328476" 202 | }, 203 | { 204 | "ext": "v0", 205 | "const_term": "0", 206 | "linear_term": "701845" 207 | }, 208 | { 209 | "ext": "v0", 210 | "const_term": "0", 211 | "linear_term": "429383" 212 | }, 213 | { 214 | "ext": "v0", 215 | "const_term": "0", 216 | "linear_term": "28" 217 | }, 218 | { 219 | "ext": "v0", 220 | "const_term": "43030", 221 | "linear_term": "0" 222 | }, 223 | { 224 | "ext": "v0", 225 | "const_term": "0", 226 | "linear_term": "7556" 227 | }, 228 | { 229 | "ext": "v0", 230 | "const_term": "0", 231 | "linear_term": "10711" 232 | }, 233 | { 234 | "ext": "v0", 235 | "const_term": "0", 236 | "linear_term": "3300" 237 | }, 238 | { 239 | "ext": "v0", 240 | "const_term": "0", 241 | "linear_term": "0" 242 | }, 243 | { 244 | "ext": "v0", 245 | "const_term": "0", 246 | "linear_term": "23038" 247 | }, 248 | { 249 | "ext": "v0", 250 | "const_term": "0", 251 | "linear_term": "42488" 252 | }, 253 | { 254 | "ext": "v0", 255 | "const_term": "0", 256 | "linear_term": "828974" 257 | }, 258 | { 259 | "ext": "v0", 260 | "const_term": "0", 261 | "linear_term": "297100" 262 | }, 263 | { 264 | "ext": "v0", 265 | "const_term": "0", 266 | "linear_term": "14" 267 | }, 268 | { 269 | "ext": "v0", 270 | "const_term": "1882", 271 | "linear_term": "0" 272 | }, 273 | { 274 | "ext": "v0", 275 | "const_term": "3000906", 276 | "linear_term": "0" 277 | }, 278 | { 279 | "ext": "v0", 280 | "const_term": "661", 281 | "linear_term": "0" 282 | }, 283 | { 284 | "ext": "v0", 285 | "const_term": "985", 286 | "linear_term": "0" 287 | }, 288 | { 289 | "ext": "v0", 290 | "const_term": "1934", 291 | "linear_term": "0" 292 | }, 293 | { 294 | "ext": "v0", 295 | "const_term": "730510", 296 | "linear_term": "0" 297 | }, 298 | { 299 | "ext": "v0", 300 | "const_term": "5921", 301 | "linear_term": "0" 302 | }, 303 | { 304 | "ext": "v0", 305 | "const_term": "1057822", 306 | "linear_term": "0" 307 | }, 308 | { 309 | "ext": "v0", 310 | "const_term": "92642", 311 | "linear_term": "0" 312 | }, 313 | { 314 | "ext": "v0", 315 | "const_term": "100742", 316 | "linear_term": "0" 317 | }, 318 | { 319 | "ext": "v0", 320 | "const_term": "7689", 321 | "linear_term": "0" 322 | }, 323 | { 324 | "ext": "v0", 325 | "const_term": "2458985", 326 | "linear_term": "0" 327 | }, 328 | { 329 | "ext": "v0", 330 | "const_term": "2426722", 331 | "linear_term": "96397671" 332 | }, 333 | { 334 | "ext": "v0", 335 | "const_term": "1541554", 336 | "linear_term": "0" 337 | }, 338 | { 339 | "ext": "v0", 340 | "const_term": "3211191", 341 | "linear_term": "6713" 342 | }, 343 | { 344 | "ext": "v0", 345 | "const_term": "25207", 346 | "linear_term": "0" 347 | }, 348 | { 349 | "ext": "v0", 350 | "const_term": "7873219", 351 | "linear_term": "0" 352 | }, 353 | { 354 | "ext": "v0", 355 | "const_term": "8035968", 356 | "linear_term": "309667335" 357 | }, 358 | { 359 | "ext": "v0", 360 | "const_term": "2420202", 361 | "linear_term": "0" 362 | }, 363 | { 364 | "ext": "v0", 365 | "const_term": "7050564", 366 | "linear_term": "6797" 367 | }, 368 | { 369 | "ext": "v0", 370 | "const_term": "10558948", 371 | "linear_term": "632860943" 372 | }, 373 | { 374 | "ext": "v0", 375 | "const_term": "1994", 376 | "linear_term": "0" 377 | }, 378 | { 379 | "ext": "v0", 380 | "const_term": "1155", 381 | "linear_term": "0" 382 | }, 383 | { 384 | "ext": "v0", 385 | "const_term": "74", 386 | "linear_term": "0" 387 | }, 388 | { 389 | "ext": "v0", 390 | "const_term": "332", 391 | "linear_term": "0" 392 | }, 393 | { 394 | "ext": "v0", 395 | "const_term": "691", 396 | "linear_term": "74558" 397 | }, 398 | { 399 | "ext": "v0", 400 | "const_term": "35421", 401 | "linear_term": "0" 402 | } 403 | ] 404 | }, 405 | { 406 | "contract_cost_params_memory_bytes": [ 407 | { 408 | "ext": "v0", 409 | "const_term": "0", 410 | "linear_term": "0" 411 | }, 412 | { 413 | "ext": "v0", 414 | "const_term": "16", 415 | "linear_term": "128" 416 | }, 417 | { 418 | "ext": "v0", 419 | "const_term": "0", 420 | "linear_term": "0" 421 | }, 422 | { 423 | "ext": "v0", 424 | "const_term": "0", 425 | "linear_term": "0" 426 | }, 427 | { 428 | "ext": "v0", 429 | "const_term": "0", 430 | "linear_term": "0" 431 | }, 432 | { 433 | "ext": "v0", 434 | "const_term": "0", 435 | "linear_term": "0" 436 | }, 437 | { 438 | "ext": "v0", 439 | "const_term": "242", 440 | "linear_term": "384" 441 | }, 442 | { 443 | "ext": "v0", 444 | "const_term": "0", 445 | "linear_term": "384" 446 | }, 447 | { 448 | "ext": "v0", 449 | "const_term": "0", 450 | "linear_term": "0" 451 | }, 452 | { 453 | "ext": "v0", 454 | "const_term": "0", 455 | "linear_term": "0" 456 | }, 457 | { 458 | "ext": "v0", 459 | "const_term": "0", 460 | "linear_term": "0" 461 | }, 462 | { 463 | "ext": "v0", 464 | "const_term": "132773", 465 | "linear_term": "4903" 466 | }, 467 | { 468 | "ext": "v0", 469 | "const_term": "69472", 470 | "linear_term": "1217" 471 | }, 472 | { 473 | "ext": "v0", 474 | "const_term": "14", 475 | "linear_term": "0" 476 | }, 477 | { 478 | "ext": "v0", 479 | "const_term": "0", 480 | "linear_term": "0" 481 | }, 482 | { 483 | "ext": "v0", 484 | "const_term": "0", 485 | "linear_term": "0" 486 | }, 487 | { 488 | "ext": "v0", 489 | "const_term": "181", 490 | "linear_term": "0" 491 | }, 492 | { 493 | "ext": "v0", 494 | "const_term": "99", 495 | "linear_term": "0" 496 | }, 497 | { 498 | "ext": "v0", 499 | "const_term": "99", 500 | "linear_term": "0" 501 | }, 502 | { 503 | "ext": "v0", 504 | "const_term": "99", 505 | "linear_term": "0" 506 | }, 507 | { 508 | "ext": "v0", 509 | "const_term": "99", 510 | "linear_term": "0" 511 | }, 512 | { 513 | "ext": "v0", 514 | "const_term": "99", 515 | "linear_term": "0" 516 | }, 517 | { 518 | "ext": "v0", 519 | "const_term": "0", 520 | "linear_term": "0" 521 | }, 522 | { 523 | "ext": "v0", 524 | "const_term": "17564", 525 | "linear_term": "6457" 526 | }, 527 | { 528 | "ext": "v0", 529 | "const_term": "0", 530 | "linear_term": "47464" 531 | }, 532 | { 533 | "ext": "v0", 534 | "const_term": "0", 535 | "linear_term": "13420" 536 | }, 537 | { 538 | "ext": "v0", 539 | "const_term": "0", 540 | "linear_term": "6285" 541 | }, 542 | { 543 | "ext": "v0", 544 | "const_term": "0", 545 | "linear_term": "64670" 546 | }, 547 | { 548 | "ext": "v0", 549 | "const_term": "0", 550 | "linear_term": "29074" 551 | }, 552 | { 553 | "ext": "v0", 554 | "const_term": "0", 555 | "linear_term": "48095" 556 | }, 557 | { 558 | "ext": "v0", 559 | "const_term": "0", 560 | "linear_term": "103229" 561 | }, 562 | { 563 | "ext": "v0", 564 | "const_term": "0", 565 | "linear_term": "36394" 566 | }, 567 | { 568 | "ext": "v0", 569 | "const_term": "0", 570 | "linear_term": "257" 571 | }, 572 | { 573 | "ext": "v0", 574 | "const_term": "70704", 575 | "linear_term": "0" 576 | }, 577 | { 578 | "ext": "v0", 579 | "const_term": "0", 580 | "linear_term": "14613" 581 | }, 582 | { 583 | "ext": "v0", 584 | "const_term": "0", 585 | "linear_term": "6833" 586 | }, 587 | { 588 | "ext": "v0", 589 | "const_term": "0", 590 | "linear_term": "1025" 591 | }, 592 | { 593 | "ext": "v0", 594 | "const_term": "0", 595 | "linear_term": "0" 596 | }, 597 | { 598 | "ext": "v0", 599 | "const_term": "0", 600 | "linear_term": "129632" 601 | }, 602 | { 603 | "ext": "v0", 604 | "const_term": "0", 605 | "linear_term": "13665" 606 | }, 607 | { 608 | "ext": "v0", 609 | "const_term": "0", 610 | "linear_term": "97637" 611 | }, 612 | { 613 | "ext": "v0", 614 | "const_term": "0", 615 | "linear_term": "9176" 616 | }, 617 | { 618 | "ext": "v0", 619 | "const_term": "0", 620 | "linear_term": "126" 621 | }, 622 | { 623 | "ext": "v0", 624 | "const_term": "0", 625 | "linear_term": "0" 626 | }, 627 | { 628 | "ext": "v0", 629 | "const_term": "0", 630 | "linear_term": "0" 631 | }, 632 | { 633 | "ext": "v0", 634 | "const_term": "0", 635 | "linear_term": "0" 636 | }, 637 | { 638 | "ext": "v0", 639 | "const_term": "0", 640 | "linear_term": "0" 641 | }, 642 | { 643 | "ext": "v0", 644 | "const_term": "0", 645 | "linear_term": "0" 646 | }, 647 | { 648 | "ext": "v0", 649 | "const_term": "0", 650 | "linear_term": "0" 651 | }, 652 | { 653 | "ext": "v0", 654 | "const_term": "0", 655 | "linear_term": "0" 656 | }, 657 | { 658 | "ext": "v0", 659 | "const_term": "0", 660 | "linear_term": "0" 661 | }, 662 | { 663 | "ext": "v0", 664 | "const_term": "0", 665 | "linear_term": "0" 666 | }, 667 | { 668 | "ext": "v0", 669 | "const_term": "0", 670 | "linear_term": "0" 671 | }, 672 | { 673 | "ext": "v0", 674 | "const_term": "0", 675 | "linear_term": "0" 676 | }, 677 | { 678 | "ext": "v0", 679 | "const_term": "0", 680 | "linear_term": "0" 681 | }, 682 | { 683 | "ext": "v0", 684 | "const_term": "109494", 685 | "linear_term": "354667" 686 | }, 687 | { 688 | "ext": "v0", 689 | "const_term": "5552", 690 | "linear_term": "0" 691 | }, 692 | { 693 | "ext": "v0", 694 | "const_term": "9424", 695 | "linear_term": "0" 696 | }, 697 | { 698 | "ext": "v0", 699 | "const_term": "0", 700 | "linear_term": "0" 701 | }, 702 | { 703 | "ext": "v0", 704 | "const_term": "0", 705 | "linear_term": "0" 706 | }, 707 | { 708 | "ext": "v0", 709 | "const_term": "219654", 710 | "linear_term": "354667" 711 | }, 712 | { 713 | "ext": "v0", 714 | "const_term": "3344", 715 | "linear_term": "0" 716 | }, 717 | { 718 | "ext": "v0", 719 | "const_term": "6816", 720 | "linear_term": "0" 721 | }, 722 | { 723 | "ext": "v0", 724 | "const_term": "2204", 725 | "linear_term": "9340474" 726 | }, 727 | { 728 | "ext": "v0", 729 | "const_term": "0", 730 | "linear_term": "0" 731 | }, 732 | { 733 | "ext": "v0", 734 | "const_term": "248", 735 | "linear_term": "0" 736 | }, 737 | { 738 | "ext": "v0", 739 | "const_term": "0", 740 | "linear_term": "0" 741 | }, 742 | { 743 | "ext": "v0", 744 | "const_term": "0", 745 | "linear_term": "0" 746 | }, 747 | { 748 | "ext": "v0", 749 | "const_term": "0", 750 | "linear_term": "128" 751 | }, 752 | { 753 | "ext": "v0", 754 | "const_term": "0", 755 | "linear_term": "0" 756 | } 757 | ] 758 | }, 759 | { 760 | "contract_data_key_size_bytes": 250 761 | }, 762 | { 763 | "contract_data_entry_size_bytes": 65536 764 | }, 765 | { 766 | "state_archival": { 767 | "max_entry_ttl": 3110400, 768 | "min_temporary_ttl": 720, 769 | "min_persistent_ttl": 120960, 770 | "persistent_rent_rate_denominator": "1215", 771 | "temp_rent_rate_denominator": "2430", 772 | "max_entries_to_archive": 1000, 773 | "live_soroban_state_size_window_sample_size": 30, 774 | "live_soroban_state_size_window_sample_period": 64, 775 | "eviction_scan_size": 500000, 776 | "starting_eviction_scan_level": 7 777 | } 778 | }, 779 | { 780 | "contract_execution_lanes": { 781 | "ledger_max_tx_count": 100 782 | } 783 | }, 784 | { 785 | "contract_parallel_compute_v0": { 786 | "ledger_max_dependent_tx_clusters": 1 787 | } 788 | }, 789 | { 790 | "contract_ledger_cost_ext_v0": { 791 | "tx_max_footprint_entries": 100, 792 | "fee_write1_kb": "3500" 793 | } 794 | }, 795 | { 796 | "scp_timing": { 797 | "ledger_target_close_time_milliseconds": 5000, 798 | "nomination_timeout_initial_milliseconds": 1000, 799 | "nomination_timeout_increment_milliseconds": 1000, 800 | "ballot_timeout_initial_milliseconds": 1000, 801 | "ballot_timeout_increment_milliseconds": 1000 802 | } 803 | } 804 | ] 805 | } 806 | -------------------------------------------------------------------------------- /local/core/etc/config-settings/p23/unlimited.json: -------------------------------------------------------------------------------- 1 | { 2 | "updated_entry": [ 3 | { 4 | "contract_max_size_bytes": 4294967295 5 | }, 6 | { 7 | "contract_compute_v0": { 8 | "ledger_max_instructions": "2305843009213693951", 9 | "tx_max_instructions": "2305843009213693951", 10 | "fee_rate_per_instructions_increment": "100", 11 | "tx_memory_limit": 4294967295 12 | } 13 | }, 14 | { 15 | "contract_ledger_cost_v0": { 16 | "ledger_max_disk_read_entries": 4294967295, 17 | "ledger_max_disk_read_bytes": 4294967295, 18 | "ledger_max_write_ledger_entries": 4294967295, 19 | "ledger_max_write_bytes": 4294967295, 20 | "tx_max_disk_read_entries": 4294967295, 21 | "tx_max_disk_read_bytes": 4294967295, 22 | "tx_max_write_ledger_entries": 4294967295, 23 | "tx_max_write_bytes": 4294967295, 24 | "fee_disk_read_ledger_entry": "1000", 25 | "fee_write_ledger_entry": "3000", 26 | "fee_disk_read1_kb": "1000", 27 | "soroban_state_target_size_bytes": "4294967295", 28 | "rent_fee1_kb_soroban_state_size_low": "-17000", 29 | "rent_fee1_kb_soroban_state_size_high": "10000", 30 | "soroban_state_rent_fee_growth_factor": 5000 31 | } 32 | }, 33 | { 34 | "contract_historical_data_v0": { 35 | "fee_historical1_kb": "5000" 36 | } 37 | }, 38 | { 39 | "contract_events_v0": { 40 | "fee_contract_events1_kb": "300", 41 | "tx_max_contract_events_size_bytes": 4294967295 42 | } 43 | }, 44 | { 45 | "contract_bandwidth_v0": { 46 | "fee_tx_size1_kb": "500", 47 | "ledger_max_txs_size_bytes": 4294967295, 48 | "tx_max_size_bytes": 4294965295 49 | } 50 | }, 51 | { 52 | "contract_cost_params_cpu_instructions": [ 53 | { 54 | "ext": "v0", 55 | "const_term": "4", 56 | "linear_term": "0" 57 | }, 58 | { 59 | "ext": "v0", 60 | "const_term": "434", 61 | "linear_term": "16" 62 | }, 63 | { 64 | "ext": "v0", 65 | "const_term": "42", 66 | "linear_term": "16" 67 | }, 68 | { 69 | "ext": "v0", 70 | "const_term": "44", 71 | "linear_term": "16" 72 | }, 73 | { 74 | "ext": "v0", 75 | "const_term": "295", 76 | "linear_term": "0" 77 | }, 78 | { 79 | "ext": "v0", 80 | "const_term": "60", 81 | "linear_term": "0" 82 | }, 83 | { 84 | "ext": "v0", 85 | "const_term": "221", 86 | "linear_term": "26" 87 | }, 88 | { 89 | "ext": "v0", 90 | "const_term": "331", 91 | "linear_term": "4369" 92 | }, 93 | { 94 | "ext": "v0", 95 | "const_term": "3636", 96 | "linear_term": "7013" 97 | }, 98 | { 99 | "ext": "v0", 100 | "const_term": "40256", 101 | "linear_term": "0" 102 | }, 103 | { 104 | "ext": "v0", 105 | "const_term": "377551", 106 | "linear_term": "4059" 107 | }, 108 | { 109 | "ext": "v0", 110 | "const_term": "417482", 111 | "linear_term": "45712" 112 | }, 113 | { 114 | "ext": "v0", 115 | "const_term": "41142", 116 | "linear_term": "634" 117 | }, 118 | { 119 | "ext": "v0", 120 | "const_term": "1945", 121 | "linear_term": "0" 122 | }, 123 | { 124 | "ext": "v0", 125 | "const_term": "6481", 126 | "linear_term": "5943" 127 | }, 128 | { 129 | "ext": "v0", 130 | "const_term": "711", 131 | "linear_term": "0" 132 | }, 133 | { 134 | "ext": "v0", 135 | "const_term": "2314804", 136 | "linear_term": "0" 137 | }, 138 | { 139 | "ext": "v0", 140 | "const_term": "4176", 141 | "linear_term": "0" 142 | }, 143 | { 144 | "ext": "v0", 145 | "const_term": "4716", 146 | "linear_term": "0" 147 | }, 148 | { 149 | "ext": "v0", 150 | "const_term": "4680", 151 | "linear_term": "0" 152 | }, 153 | { 154 | "ext": "v0", 155 | "const_term": "4256", 156 | "linear_term": "0" 157 | }, 158 | { 159 | "ext": "v0", 160 | "const_term": "884", 161 | "linear_term": "0" 162 | }, 163 | { 164 | "ext": "v0", 165 | "const_term": "1059", 166 | "linear_term": "502" 167 | }, 168 | { 169 | "ext": "v0", 170 | "const_term": "73077", 171 | "linear_term": "25410" 172 | }, 173 | { 174 | "ext": "v0", 175 | "const_term": "0", 176 | "linear_term": "540752" 177 | }, 178 | { 179 | "ext": "v0", 180 | "const_term": "0", 181 | "linear_term": "176363" 182 | }, 183 | { 184 | "ext": "v0", 185 | "const_term": "0", 186 | "linear_term": "29989" 187 | }, 188 | { 189 | "ext": "v0", 190 | "const_term": "0", 191 | "linear_term": "1061449" 192 | }, 193 | { 194 | "ext": "v0", 195 | "const_term": "0", 196 | "linear_term": "237336" 197 | }, 198 | { 199 | "ext": "v0", 200 | "const_term": "0", 201 | "linear_term": "328476" 202 | }, 203 | { 204 | "ext": "v0", 205 | "const_term": "0", 206 | "linear_term": "701845" 207 | }, 208 | { 209 | "ext": "v0", 210 | "const_term": "0", 211 | "linear_term": "429383" 212 | }, 213 | { 214 | "ext": "v0", 215 | "const_term": "0", 216 | "linear_term": "28" 217 | }, 218 | { 219 | "ext": "v0", 220 | "const_term": "43030", 221 | "linear_term": "0" 222 | }, 223 | { 224 | "ext": "v0", 225 | "const_term": "0", 226 | "linear_term": "7556" 227 | }, 228 | { 229 | "ext": "v0", 230 | "const_term": "0", 231 | "linear_term": "10711" 232 | }, 233 | { 234 | "ext": "v0", 235 | "const_term": "0", 236 | "linear_term": "3300" 237 | }, 238 | { 239 | "ext": "v0", 240 | "const_term": "0", 241 | "linear_term": "0" 242 | }, 243 | { 244 | "ext": "v0", 245 | "const_term": "0", 246 | "linear_term": "23038" 247 | }, 248 | { 249 | "ext": "v0", 250 | "const_term": "0", 251 | "linear_term": "42488" 252 | }, 253 | { 254 | "ext": "v0", 255 | "const_term": "0", 256 | "linear_term": "828974" 257 | }, 258 | { 259 | "ext": "v0", 260 | "const_term": "0", 261 | "linear_term": "297100" 262 | }, 263 | { 264 | "ext": "v0", 265 | "const_term": "0", 266 | "linear_term": "14" 267 | }, 268 | { 269 | "ext": "v0", 270 | "const_term": "1882", 271 | "linear_term": "0" 272 | }, 273 | { 274 | "ext": "v0", 275 | "const_term": "3000906", 276 | "linear_term": "0" 277 | }, 278 | { 279 | "ext": "v0", 280 | "const_term": "661", 281 | "linear_term": "0" 282 | }, 283 | { 284 | "ext": "v0", 285 | "const_term": "985", 286 | "linear_term": "0" 287 | }, 288 | { 289 | "ext": "v0", 290 | "const_term": "1934", 291 | "linear_term": "0" 292 | }, 293 | { 294 | "ext": "v0", 295 | "const_term": "730510", 296 | "linear_term": "0" 297 | }, 298 | { 299 | "ext": "v0", 300 | "const_term": "5921", 301 | "linear_term": "0" 302 | }, 303 | { 304 | "ext": "v0", 305 | "const_term": "1057822", 306 | "linear_term": "0" 307 | }, 308 | { 309 | "ext": "v0", 310 | "const_term": "92642", 311 | "linear_term": "0" 312 | }, 313 | { 314 | "ext": "v0", 315 | "const_term": "100742", 316 | "linear_term": "0" 317 | }, 318 | { 319 | "ext": "v0", 320 | "const_term": "7689", 321 | "linear_term": "0" 322 | }, 323 | { 324 | "ext": "v0", 325 | "const_term": "2458985", 326 | "linear_term": "0" 327 | }, 328 | { 329 | "ext": "v0", 330 | "const_term": "2426722", 331 | "linear_term": "96397671" 332 | }, 333 | { 334 | "ext": "v0", 335 | "const_term": "1541554", 336 | "linear_term": "0" 337 | }, 338 | { 339 | "ext": "v0", 340 | "const_term": "3211191", 341 | "linear_term": "6713" 342 | }, 343 | { 344 | "ext": "v0", 345 | "const_term": "25207", 346 | "linear_term": "0" 347 | }, 348 | { 349 | "ext": "v0", 350 | "const_term": "7873219", 351 | "linear_term": "0" 352 | }, 353 | { 354 | "ext": "v0", 355 | "const_term": "8035968", 356 | "linear_term": "309667335" 357 | }, 358 | { 359 | "ext": "v0", 360 | "const_term": "2420202", 361 | "linear_term": "0" 362 | }, 363 | { 364 | "ext": "v0", 365 | "const_term": "7050564", 366 | "linear_term": "6797" 367 | }, 368 | { 369 | "ext": "v0", 370 | "const_term": "10558948", 371 | "linear_term": "632860943" 372 | }, 373 | { 374 | "ext": "v0", 375 | "const_term": "1994", 376 | "linear_term": "0" 377 | }, 378 | { 379 | "ext": "v0", 380 | "const_term": "1155", 381 | "linear_term": "0" 382 | }, 383 | { 384 | "ext": "v0", 385 | "const_term": "74", 386 | "linear_term": "0" 387 | }, 388 | { 389 | "ext": "v0", 390 | "const_term": "332", 391 | "linear_term": "0" 392 | }, 393 | { 394 | "ext": "v0", 395 | "const_term": "691", 396 | "linear_term": "74558" 397 | }, 398 | { 399 | "ext": "v0", 400 | "const_term": "35421", 401 | "linear_term": "0" 402 | } 403 | ] 404 | }, 405 | { 406 | "contract_cost_params_memory_bytes": [ 407 | { 408 | "ext": "v0", 409 | "const_term": "0", 410 | "linear_term": "0" 411 | }, 412 | { 413 | "ext": "v0", 414 | "const_term": "16", 415 | "linear_term": "128" 416 | }, 417 | { 418 | "ext": "v0", 419 | "const_term": "0", 420 | "linear_term": "0" 421 | }, 422 | { 423 | "ext": "v0", 424 | "const_term": "0", 425 | "linear_term": "0" 426 | }, 427 | { 428 | "ext": "v0", 429 | "const_term": "0", 430 | "linear_term": "0" 431 | }, 432 | { 433 | "ext": "v0", 434 | "const_term": "0", 435 | "linear_term": "0" 436 | }, 437 | { 438 | "ext": "v0", 439 | "const_term": "242", 440 | "linear_term": "384" 441 | }, 442 | { 443 | "ext": "v0", 444 | "const_term": "0", 445 | "linear_term": "384" 446 | }, 447 | { 448 | "ext": "v0", 449 | "const_term": "0", 450 | "linear_term": "0" 451 | }, 452 | { 453 | "ext": "v0", 454 | "const_term": "0", 455 | "linear_term": "0" 456 | }, 457 | { 458 | "ext": "v0", 459 | "const_term": "0", 460 | "linear_term": "0" 461 | }, 462 | { 463 | "ext": "v0", 464 | "const_term": "132773", 465 | "linear_term": "4903" 466 | }, 467 | { 468 | "ext": "v0", 469 | "const_term": "69472", 470 | "linear_term": "1217" 471 | }, 472 | { 473 | "ext": "v0", 474 | "const_term": "14", 475 | "linear_term": "0" 476 | }, 477 | { 478 | "ext": "v0", 479 | "const_term": "0", 480 | "linear_term": "0" 481 | }, 482 | { 483 | "ext": "v0", 484 | "const_term": "0", 485 | "linear_term": "0" 486 | }, 487 | { 488 | "ext": "v0", 489 | "const_term": "181", 490 | "linear_term": "0" 491 | }, 492 | { 493 | "ext": "v0", 494 | "const_term": "99", 495 | "linear_term": "0" 496 | }, 497 | { 498 | "ext": "v0", 499 | "const_term": "99", 500 | "linear_term": "0" 501 | }, 502 | { 503 | "ext": "v0", 504 | "const_term": "99", 505 | "linear_term": "0" 506 | }, 507 | { 508 | "ext": "v0", 509 | "const_term": "99", 510 | "linear_term": "0" 511 | }, 512 | { 513 | "ext": "v0", 514 | "const_term": "99", 515 | "linear_term": "0" 516 | }, 517 | { 518 | "ext": "v0", 519 | "const_term": "0", 520 | "linear_term": "0" 521 | }, 522 | { 523 | "ext": "v0", 524 | "const_term": "17564", 525 | "linear_term": "6457" 526 | }, 527 | { 528 | "ext": "v0", 529 | "const_term": "0", 530 | "linear_term": "47464" 531 | }, 532 | { 533 | "ext": "v0", 534 | "const_term": "0", 535 | "linear_term": "13420" 536 | }, 537 | { 538 | "ext": "v0", 539 | "const_term": "0", 540 | "linear_term": "6285" 541 | }, 542 | { 543 | "ext": "v0", 544 | "const_term": "0", 545 | "linear_term": "64670" 546 | }, 547 | { 548 | "ext": "v0", 549 | "const_term": "0", 550 | "linear_term": "29074" 551 | }, 552 | { 553 | "ext": "v0", 554 | "const_term": "0", 555 | "linear_term": "48095" 556 | }, 557 | { 558 | "ext": "v0", 559 | "const_term": "0", 560 | "linear_term": "103229" 561 | }, 562 | { 563 | "ext": "v0", 564 | "const_term": "0", 565 | "linear_term": "36394" 566 | }, 567 | { 568 | "ext": "v0", 569 | "const_term": "0", 570 | "linear_term": "257" 571 | }, 572 | { 573 | "ext": "v0", 574 | "const_term": "70704", 575 | "linear_term": "0" 576 | }, 577 | { 578 | "ext": "v0", 579 | "const_term": "0", 580 | "linear_term": "14613" 581 | }, 582 | { 583 | "ext": "v0", 584 | "const_term": "0", 585 | "linear_term": "6833" 586 | }, 587 | { 588 | "ext": "v0", 589 | "const_term": "0", 590 | "linear_term": "1025" 591 | }, 592 | { 593 | "ext": "v0", 594 | "const_term": "0", 595 | "linear_term": "0" 596 | }, 597 | { 598 | "ext": "v0", 599 | "const_term": "0", 600 | "linear_term": "129632" 601 | }, 602 | { 603 | "ext": "v0", 604 | "const_term": "0", 605 | "linear_term": "13665" 606 | }, 607 | { 608 | "ext": "v0", 609 | "const_term": "0", 610 | "linear_term": "97637" 611 | }, 612 | { 613 | "ext": "v0", 614 | "const_term": "0", 615 | "linear_term": "9176" 616 | }, 617 | { 618 | "ext": "v0", 619 | "const_term": "0", 620 | "linear_term": "126" 621 | }, 622 | { 623 | "ext": "v0", 624 | "const_term": "0", 625 | "linear_term": "0" 626 | }, 627 | { 628 | "ext": "v0", 629 | "const_term": "0", 630 | "linear_term": "0" 631 | }, 632 | { 633 | "ext": "v0", 634 | "const_term": "0", 635 | "linear_term": "0" 636 | }, 637 | { 638 | "ext": "v0", 639 | "const_term": "0", 640 | "linear_term": "0" 641 | }, 642 | { 643 | "ext": "v0", 644 | "const_term": "0", 645 | "linear_term": "0" 646 | }, 647 | { 648 | "ext": "v0", 649 | "const_term": "0", 650 | "linear_term": "0" 651 | }, 652 | { 653 | "ext": "v0", 654 | "const_term": "0", 655 | "linear_term": "0" 656 | }, 657 | { 658 | "ext": "v0", 659 | "const_term": "0", 660 | "linear_term": "0" 661 | }, 662 | { 663 | "ext": "v0", 664 | "const_term": "0", 665 | "linear_term": "0" 666 | }, 667 | { 668 | "ext": "v0", 669 | "const_term": "0", 670 | "linear_term": "0" 671 | }, 672 | { 673 | "ext": "v0", 674 | "const_term": "0", 675 | "linear_term": "0" 676 | }, 677 | { 678 | "ext": "v0", 679 | "const_term": "0", 680 | "linear_term": "0" 681 | }, 682 | { 683 | "ext": "v0", 684 | "const_term": "109494", 685 | "linear_term": "354667" 686 | }, 687 | { 688 | "ext": "v0", 689 | "const_term": "5552", 690 | "linear_term": "0" 691 | }, 692 | { 693 | "ext": "v0", 694 | "const_term": "9424", 695 | "linear_term": "0" 696 | }, 697 | { 698 | "ext": "v0", 699 | "const_term": "0", 700 | "linear_term": "0" 701 | }, 702 | { 703 | "ext": "v0", 704 | "const_term": "0", 705 | "linear_term": "0" 706 | }, 707 | { 708 | "ext": "v0", 709 | "const_term": "219654", 710 | "linear_term": "354667" 711 | }, 712 | { 713 | "ext": "v0", 714 | "const_term": "3344", 715 | "linear_term": "0" 716 | }, 717 | { 718 | "ext": "v0", 719 | "const_term": "6816", 720 | "linear_term": "0" 721 | }, 722 | { 723 | "ext": "v0", 724 | "const_term": "2204", 725 | "linear_term": "9340474" 726 | }, 727 | { 728 | "ext": "v0", 729 | "const_term": "0", 730 | "linear_term": "0" 731 | }, 732 | { 733 | "ext": "v0", 734 | "const_term": "248", 735 | "linear_term": "0" 736 | }, 737 | { 738 | "ext": "v0", 739 | "const_term": "0", 740 | "linear_term": "0" 741 | }, 742 | { 743 | "ext": "v0", 744 | "const_term": "0", 745 | "linear_term": "0" 746 | }, 747 | { 748 | "ext": "v0", 749 | "const_term": "0", 750 | "linear_term": "128" 751 | }, 752 | { 753 | "ext": "v0", 754 | "const_term": "0", 755 | "linear_term": "0" 756 | } 757 | ] 758 | }, 759 | { 760 | "contract_data_key_size_bytes": 4294967295 761 | }, 762 | { 763 | "contract_data_entry_size_bytes": 4294967295 764 | }, 765 | { 766 | "state_archival": { 767 | "max_entry_ttl": 3110400, 768 | "min_temporary_ttl": 16, 769 | "min_persistent_ttl": 120960, 770 | "persistent_rent_rate_denominator": "535680", 771 | "temp_rent_rate_denominator": "5356800", 772 | "max_entries_to_archive": 100, 773 | "live_soroban_state_size_window_sample_size": 30, 774 | "live_soroban_state_size_window_sample_period": 64, 775 | "eviction_scan_size": 100000, 776 | "starting_eviction_scan_level": 6 777 | } 778 | }, 779 | { 780 | "contract_execution_lanes": { 781 | "ledger_max_tx_count": 4294967295 782 | } 783 | }, 784 | { 785 | "contract_parallel_compute_v0": { 786 | "ledger_max_dependent_tx_clusters": 1 787 | } 788 | }, 789 | { 790 | "contract_ledger_cost_ext_v0": { 791 | "tx_max_footprint_entries": 4294967295, 792 | "fee_write1_kb": "3500" 793 | } 794 | }, 795 | { 796 | "scp_timing": { 797 | "ledger_target_close_time_milliseconds": 5000, 798 | "nomination_timeout_initial_milliseconds": 1000, 799 | "nomination_timeout_increment_milliseconds": 1000, 800 | "ballot_timeout_initial_milliseconds": 1000, 801 | "ballot_timeout_increment_milliseconds": 1000 802 | } 803 | } 804 | ] 805 | } 806 | -------------------------------------------------------------------------------- /local/core/etc/config-settings/settings_enable_upgrades.json: -------------------------------------------------------------------------------- 1 | { 2 | "updated_entry": [ 3 | { 4 | "contract_ledger_cost_v0": { 5 | "ledger_max_disk_read_entries": 500, 6 | "ledger_max_disk_read_bytes": 3500000, 7 | "ledger_max_write_ledger_entries": 250, 8 | "ledger_max_write_bytes": 143360, 9 | "tx_max_disk_read_entries": 100, 10 | "tx_max_disk_read_bytes": 200000, 11 | "tx_max_write_ledger_entries": 50, 12 | "tx_max_write_bytes": 132096, 13 | "fee_disk_read_ledger_entry": "6250", 14 | "fee_write_ledger_entry": "10000", 15 | "fee_disk_read1_kb": "1786", 16 | "soroban_state_target_size_bytes": "3000000000", 17 | "rent_fee1_kb_soroban_state_size_low": "-17000", 18 | "rent_fee1_kb_soroban_state_size_high": "10000", 19 | "soroban_state_rent_fee_growth_factor": 5000 20 | } 21 | }, 22 | { 23 | "contract_data_entry_size_bytes": 65536 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /local/core/etc/stellar-core.cfg: -------------------------------------------------------------------------------- 1 | # simple configuration for a local test "network" 2 | # see stellar-core_example.cfg for a description of the configuration parameters 3 | 4 | HTTP_PORT=11626 5 | PUBLIC_HTTP_PORT=true 6 | LOG_FILE_PATH="/var/log/stellar-core/stellar-core-{datetime:%Y-%m-%d_%H-%M-%S}.log" 7 | MANUAL_CLOSE=__MANUAL_CLOSE__ 8 | ARTIFICIALLY_ACCELERATE_TIME_FOR_TESTING=true 9 | 10 | NETWORK_PASSPHRASE="__NETWORK__" 11 | NODE_SEED="SDQVDISRYN2JXBS7ICL7QJAEKB3HWBJFP2QECXG7GZICAHBK4UNJCWK2 self" 12 | NODE_IS_VALIDATOR=true 13 | 14 | #DATABASE="postgresql://dbname=stellar user=postgres password=password host=localhost" 15 | #DATABASE="sqlite3://stellar.db" 16 | DATABASE="postgresql://dbname=core host=localhost user=stellar password=__PGPASS__" 17 | 18 | COMMANDS=["ll?level=debug"] 19 | 20 | FAILURE_SAFETY=0 21 | UNSAFE_QUORUM=true 22 | #The public keys of the Stellar testnet servers 23 | [QUORUM_SET] 24 | THRESHOLD_PERCENT=100 25 | VALIDATORS=["$self"] 26 | 27 | [HISTORY.vs] 28 | get="cp /tmp/stellar-core/history/vs/{0} {1}" 29 | put="cp {0} /tmp/stellar-core/history/vs/{1}" 30 | mkdir="mkdir -p /tmp/stellar-core/history/vs/{0}" 31 | -------------------------------------------------------------------------------- /local/horizon/etc/horizon.env: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | export DATABASE_URL="postgres://stellar:__PGPASS__@localhost/horizon" 4 | export STELLAR_CORE_URL="http://localhost:11626" 5 | export STELLAR_CORE_BINARY_PATH=/usr/bin/stellar-core 6 | export LOG_LEVEL="info" 7 | export ENABLE_CAPTIVE_CORE_INGESTION="true" 8 | export CAPTIVE_CORE_USE_DB=true 9 | export STELLAR_CAPTIVE_CORE_HTTP_PORT=0 10 | export INGEST="true" 11 | export PER_HOUR_RATE_LIMIT="72000" 12 | export NETWORK_PASSPHRASE="__NETWORK__" 13 | export DISABLE_ASSET_STATS="true" 14 | export HISTORY_ARCHIVE_URLS="__ARCHIVE__" 15 | export ADMIN_PORT=6060 16 | export PORT=8001 17 | export CHECKPOINT_FREQUENCY=8 18 | -------------------------------------------------------------------------------- /local/horizon/etc/stellar-captive-core.cfg: -------------------------------------------------------------------------------- 1 | # simple captive core configuration for a local test "network" 2 | NETWORK_PASSPHRASE="__NETWORK__" 3 | # disable the web service port, not used 4 | HTTP_PORT=11726 5 | PUBLIC_HTTP_PORT=false 6 | # To avoid conflicts with the core instance 7 | PEER_PORT=11725 8 | DATABASE="__DATABASE__" 9 | ARTIFICIALLY_ACCELERATE_TIME_FOR_TESTING=true 10 | 11 | ENABLE_SOROBAN_DIAGNOSTIC_EVENTS=__ENABLE_SOROBAN_DIAGNOSTIC_EVENTS__ 12 | 13 | UNSAFE_QUORUM=true 14 | FAILURE_SAFETY=0 15 | 16 | [[VALIDATORS]] 17 | NAME="local_core" 18 | HOME_DOMAIN="core.local" 19 | # From "SDQVDISRYN2JXBS7ICL7QJAEKB3HWBJFP2QECXG7GZICAHBK4UNJCWK2" 20 | PUBLIC_KEY="GCTI6HMWRH2QGMFKWVU5M5ZSOTKL7P7JAHZDMJJBKDHGWTEC4CJ7O3DU" 21 | ADDRESS="localhost:11625" 22 | QUALITY="MEDIUM" 23 | HISTORY="curl -sf http://localhost:1570/{0} -o {1}" 24 | -------------------------------------------------------------------------------- /local/nginx/etc/conf.d/friendbot.conf: -------------------------------------------------------------------------------- 1 | location /friendbot { 2 | rewrite /friendbot / break; 3 | proxy_pass http://127.0.0.1:8002; 4 | proxy_redirect off; 5 | } 6 | -------------------------------------------------------------------------------- /local/nginx/etc/conf.d/history-archive.conf: -------------------------------------------------------------------------------- 1 | location /archive { 2 | rewrite /archive/(.*) /$1 break; 3 | proxy_pass http://127.0.0.1:1570; 4 | proxy_redirect off; 5 | } 6 | -------------------------------------------------------------------------------- /local/stellar-rpc/etc/stellar-captive-core.cfg: -------------------------------------------------------------------------------- 1 | # simple captive core configuration for a local test "network" 2 | NETWORK_PASSPHRASE="__NETWORK__" 3 | # disable the web service port, not used 4 | HTTP_PORT=11826 5 | PUBLIC_HTTP_PORT=false 6 | # To avoid conflicts with the core instance 7 | PEER_PORT=11825 8 | DATABASE="__DATABASE__" 9 | ARTIFICIALLY_ACCELERATE_TIME_FOR_TESTING=true 10 | 11 | ENABLE_SOROBAN_DIAGNOSTIC_EVENTS=__ENABLE_SOROBAN_DIAGNOSTIC_EVENTS__ 12 | ENABLE_DIAGNOSTICS_FOR_TX_SUBMISSION=__ENABLE_SOROBAN_DIAGNOSTIC_EVENTS__ 13 | 14 | UNSAFE_QUORUM=true 15 | FAILURE_SAFETY=0 16 | 17 | [[VALIDATORS]] 18 | NAME="local_core" 19 | HOME_DOMAIN="core.local" 20 | # From "SDQVDISRYN2JXBS7ICL7QJAEKB3HWBJFP2QECXG7GZICAHBK4UNJCWK2" 21 | PUBLIC_KEY="GCTI6HMWRH2QGMFKWVU5M5ZSOTKL7P7JAHZDMJJBKDHGWTEC4CJ7O3DU" 22 | ADDRESS="localhost:11625" 23 | QUALITY="MEDIUM" 24 | HISTORY="curl -sf http://localhost:1570/{0} -o {1}" 25 | -------------------------------------------------------------------------------- /local/stellar-rpc/etc/stellar-rpc.cfg: -------------------------------------------------------------------------------- 1 | ENDPOINT="localhost:8003" 2 | ADMIN_ENDPOINT="__STELLAR_RPC_ADMIN_ENDPOINT__" 3 | FRIENDBOT_URL="http://localhost:8000/friendbot" 4 | NETWORK_PASSPHRASE="__NETWORK__" 5 | STELLAR_CORE_URL="http://localhost:11826" 6 | CAPTIVE_CORE_CONFIG_PATH="/opt/stellar/stellar-rpc/etc/stellar-captive-core.cfg" 7 | CAPTIVE_CORE_STORAGE_PATH="/opt/stellar/stellar-rpc/captive-core" 8 | CAPTIVE_CORE_USE_DB=true 9 | STELLAR_CORE_BINARY_PATH="/usr/bin/stellar-core" 10 | HISTORY_ARCHIVE_URLS=["__ARCHIVE__"] 11 | DB_PATH="/opt/stellar/stellar-rpc/rpc_db.sqlite" 12 | STELLAR_CAPTIVE_CORE_HTTP_PORT=11826 13 | CHECKPOINT_FREQUENCY=8 14 | -------------------------------------------------------------------------------- /local/supervisor/etc/supervisord.conf.d/friendbot.conf: -------------------------------------------------------------------------------- 1 | [program:friendbot] 2 | user=stellar 3 | directory=/opt/stellar/friendbot 4 | command=/opt/stellar/friendbot/bin/start 5 | autostart=false 6 | autorestart=true 7 | startretries=100 8 | priority=40 9 | redirect_stderr=true 10 | -------------------------------------------------------------------------------- /local/supervisor/etc/supervisord.conf.d/history-archive.conf: -------------------------------------------------------------------------------- 1 | [program:history-archive] 2 | user=stellar 3 | directory=/tmp/stellar-core/history/vs 4 | command=/usr/bin/python3 -m http.server 1570 5 | autostart=true 6 | autorestart=true 7 | startretries=100 8 | priority=10 9 | redirect_stderr=true 10 | -------------------------------------------------------------------------------- /pubnet/core/etc/stellar-core.cfg: -------------------------------------------------------------------------------- 1 | HTTP_PORT=11626 2 | PUBLIC_HTTP_PORT=true 3 | LOG_FILE_PATH="/var/log/stellar-core/stellar-core-{datetime:%Y-%m-%d_%H-%M-%S}.log" 4 | MANUAL_CLOSE=__MANUAL_CLOSE__ 5 | 6 | DATABASE="postgresql://dbname=core host=localhost user=stellar password=__PGPASS__" 7 | NETWORK_PASSPHRASE="Public Global Stellar Network ; September 2015" 8 | CATCHUP_RECENT=100 9 | 10 | [[HOME_DOMAINS]] 11 | HOME_DOMAIN = "lobstr.co" 12 | QUALITY = "HIGH" 13 | 14 | [[HOME_DOMAINS]] 15 | HOME_DOMAIN = "publicnode.org" 16 | QUALITY = "HIGH" 17 | 18 | [[HOME_DOMAINS]] 19 | HOME_DOMAIN = "satoshipay.io" 20 | QUALITY = "HIGH" 21 | 22 | [[HOME_DOMAINS]] 23 | HOME_DOMAIN = "stellar.blockdaemon.com" 24 | QUALITY = "HIGH" 25 | 26 | [[HOME_DOMAINS]] 27 | HOME_DOMAIN = "stellar.creit.tech" 28 | QUALITY = "HIGH" 29 | 30 | [[HOME_DOMAINS]] 31 | HOME_DOMAIN = "www.franklintempleton.com" 32 | QUALITY = "HIGH" 33 | 34 | [[HOME_DOMAINS]] 35 | HOME_DOMAIN = "www.stellar.org" 36 | QUALITY = "HIGH" 37 | 38 | [[VALIDATORS]] 39 | NAME = "LOBSTR 1 (Europe)" 40 | PUBLIC_KEY = "GCFONE23AB7Y6C5YZOMKUKGETPIAJA4QOYLS5VNS4JHBGKRZCPYHDLW7" 41 | ADDRESS = "v1.stellar.lobstr.co:11625" 42 | HISTORY = "curl -sf https://archive.v1.stellar.lobstr.co/{0} -o {1}" 43 | HOME_DOMAIN = "lobstr.co" 44 | 45 | [[VALIDATORS]] 46 | NAME = "LOBSTR 2 (Europe)" 47 | PUBLIC_KEY = "GCB2VSADESRV2DDTIVTFLBDI562K6KE3KMKILBHUHUWFXCUBHGQDI7VL" 48 | ADDRESS = "v2.stellar.lobstr.co:11625" 49 | HISTORY = "curl -sf https://archive.v2.stellar.lobstr.co/{0} -o {1}" 50 | HOME_DOMAIN = "lobstr.co" 51 | 52 | [[VALIDATORS]] 53 | NAME = "LOBSTR 5 (India)" 54 | PUBLIC_KEY = "GA5STBMV6QDXFDGD62MEHLLHZTPDI77U3PFOD2SELU5RJDHQWBR5NNK7" 55 | ADDRESS = "v5.stellar.lobstr.co:11625" 56 | HISTORY = "curl -sf https://archive.v5.stellar.lobstr.co/{0} -o {1}" 57 | HOME_DOMAIN = "lobstr.co" 58 | 59 | [[VALIDATORS]] 60 | NAME = "Boötes" 61 | PUBLIC_KEY = "GCVJ4Z6TI6Z2SOGENSPXDQ2U4RKH3CNQKYUHNSSPYFPNWTLGS6EBH7I2" 62 | ADDRESS = "bootes.publicnode.org:11625" 63 | HISTORY = "curl -sf https://bootes-history.publicnode.org/{0} -o {1}" 64 | HOME_DOMAIN = "publicnode.org" 65 | 66 | [[VALIDATORS]] 67 | NAME = "Hercules" 68 | PUBLIC_KEY = "GBLJNN3AVZZPG2FYAYTYQKECNWTQYYUUY2KVFN2OUKZKBULXIXBZ4FCT" 69 | ADDRESS = "hercules.publicnode.org:11625" 70 | HISTORY = "curl -sf https://hercules-history.publicnode.org/{0} -o {1}" 71 | HOME_DOMAIN = "publicnode.org" 72 | 73 | [[VALIDATORS]] 74 | NAME = "Lyra" 75 | PUBLIC_KEY = "GCIXVKNFPKWVMKJKVK2V4NK7D4TC6W3BUMXSIJ365QUAXWBRPPJXIR2Z" 76 | ADDRESS = "lyra.publicnode.org:11625" 77 | HISTORY = "curl -sf https://lyra-history.publicnode.org/{0} -o {1}" 78 | HOME_DOMAIN = "publicnode.org" 79 | 80 | [[VALIDATORS]] 81 | NAME = "SatoshiPay Frankfurt" 82 | PUBLIC_KEY = "GC5SXLNAM3C4NMGK2PXK4R34B5GNZ47FYQ24ZIBFDFOCU6D4KBN4POAE" 83 | ADDRESS = "stellar-de-fra.satoshipay.io:11625" 84 | HISTORY = "curl -sf https://stellar-history-de-fra.satoshipay.io/{0} -o {1}" 85 | HOME_DOMAIN = "satoshipay.io" 86 | 87 | [[VALIDATORS]] 88 | NAME = "SatoshiPay Iowa" 89 | PUBLIC_KEY = "GAK6Z5UVGUVSEK6PEOCAYJISTT5EJBB34PN3NOLEQG2SUKXRVV2F6HZY" 90 | ADDRESS = "stellar-us-iowa.satoshipay.io:11625" 91 | HISTORY = "curl -sf https://stellar-history-us-iowa.satoshipay.io/{0} -o {1}" 92 | HOME_DOMAIN = "satoshipay.io" 93 | 94 | [[VALIDATORS]] 95 | NAME = "SatoshiPay Singapore" 96 | PUBLIC_KEY = "GBJQUIXUO4XSNPAUT6ODLZUJRV2NPXYASKUBY4G5MYP3M47PCVI55MNT" 97 | ADDRESS = "stellar-sg-sin.satoshipay.io:11625" 98 | HISTORY = "curl -sf https://stellar-history-sg-sin.satoshipay.io/{0} -o {1}" 99 | HOME_DOMAIN = "satoshipay.io" 100 | 101 | [[VALIDATORS]] 102 | NAME = "Blockdaemon Validator 1" 103 | PUBLIC_KEY = "GAAV2GCVFLNN522ORUYFV33E76VPC22E72S75AQ6MBR5V45Z5DWVPWEU" 104 | ADDRESS = "stellar-full-validator1.bdnodes.net:11625" 105 | HISTORY = "curl -sf https://stellar-full-history1.bdnodes.net/{0} -o {1}" 106 | HOME_DOMAIN = "stellar.blockdaemon.com" 107 | 108 | [[VALIDATORS]] 109 | NAME = "Blockdaemon Validator 2" 110 | PUBLIC_KEY = "GAVXB7SBJRYHSG6KSQHY74N7JAFRL4PFVZCNWW2ARI6ZEKNBJSMSKW7C" 111 | ADDRESS = "stellar-full-validator2.bdnodes.net:11625" 112 | HISTORY = "curl -sf https://stellar-full-history2.bdnodes.net/{0} -o {1}" 113 | HOME_DOMAIN = "stellar.blockdaemon.com" 114 | 115 | [[VALIDATORS]] 116 | NAME = "Blockdaemon Validator 3" 117 | PUBLIC_KEY = "GAYXZ4PZ7P6QOX7EBHPIZXNWY4KCOBYWJCA4WKWRKC7XIUS3UJPT6EZ4" 118 | ADDRESS = "stellar-full-validator3.bdnodes.net:11625" 119 | HISTORY = "curl -sf https://stellar-full-history3.bdnodes.net/{0} -o {1}" 120 | HOME_DOMAIN = "stellar.blockdaemon.com" 121 | 122 | [[VALIDATORS]] 123 | NAME = "Alpha Node Validator" 124 | PUBLIC_KEY = "GBPLJDBFZO2H7QQH7YFCH3HFT6EMC42Z2DNJ2QFROCKETAPY54V4DCZD" 125 | ADDRESS = "alpha.validator.stellar.creit.tech:11625" 126 | HISTORY = "curl -sf https://alpha-history.validator.stellar.creit.tech/{0} -o {1}" 127 | HOME_DOMAIN = "stellar.creit.tech" 128 | 129 | [[VALIDATORS]] 130 | NAME = "Beta Node Validator" 131 | PUBLIC_KEY = "GDDANSYOYSY5EPSFHBRPCLX6XMHPPLIMHVIDXG6IPQLVVLRI2BN4HMH3" 132 | ADDRESS = "beta.validator.stellar.creit.tech:11625" 133 | HISTORY = "curl -sf https://beta-history.validator.stellar.creit.tech/{0} -o {1}" 134 | HOME_DOMAIN = "stellar.creit.tech" 135 | 136 | [[VALIDATORS]] 137 | NAME = "Gamma Node Validator" 138 | PUBLIC_KEY = "GBF7QOLFPTHUEDUPTT4ZTULDTA3QXDIO75JHKJN2IYD7YGQLYUTR75BT" 139 | ADDRESS = "gamma.validator.stellar.creit.tech:11625" 140 | HISTORY = "curl -sf https://gamma-history.validator.stellar.creit.tech/{0} -o {1}" 141 | HOME_DOMAIN = "stellar.creit.tech" 142 | 143 | [[VALIDATORS]] 144 | NAME = "FT SCV 1" 145 | PUBLIC_KEY = "GARYGQ5F2IJEBCZJCBNPWNWVDOFK7IBOHLJKKSG2TMHDQKEEC6P4PE4V" 146 | ADDRESS = "stellar1.franklintempleton.com:11625" 147 | HISTORY = "curl -sf https://stellar-history1.franklintempleton.com/history1/{0} -o {1}" 148 | HOME_DOMAIN = "www.franklintempleton.com" 149 | 150 | [[VALIDATORS]] 151 | NAME = "FT SCV 2" 152 | PUBLIC_KEY = "GCMSM2VFZGRPTZKPH5OABHGH4F3AVS6XTNJXDGCZ3MKCOSUBH3FL6DOB" 153 | ADDRESS = "stellar2.franklintempleton.com:11625" 154 | HISTORY = "curl -sf https://stellar-history2.franklintempleton.com/history2/{0} -o {1}" 155 | HOME_DOMAIN = "www.franklintempleton.com" 156 | 157 | [[VALIDATORS]] 158 | NAME = "FT SCV 3" 159 | PUBLIC_KEY = "GA7DV63PBUUWNUFAF4GAZVXU2OZMYRATDLKTC7VTCG7AU4XUPN5VRX4A" 160 | ADDRESS = "stellar3.franklintempleton.com:11625" 161 | HISTORY = "curl -sf https://stellar-history3.franklintempleton.com/history3/{0} -o {1}" 162 | HOME_DOMAIN = "www.franklintempleton.com" 163 | 164 | [[VALIDATORS]] 165 | NAME = "SDF 1" 166 | PUBLIC_KEY = "GCGB2S2KGYARPVIA37HYZXVRM2YZUEXA6S33ZU5BUDC6THSB62LZSTYH" 167 | ADDRESS = "core-live-a.stellar.org:11625" 168 | HISTORY = "curl -sf http://history.stellar.org/prd/core-live/core_live_001/{0} -o {1}" 169 | HOME_DOMAIN = "www.stellar.org" 170 | 171 | [[VALIDATORS]] 172 | NAME = "SDF 2" 173 | PUBLIC_KEY = "GCM6QMP3DLRPTAZW2UZPCPX2LF3SXWXKPMP3GKFZBDSF3QZGV2G5QSTK" 174 | ADDRESS = "core-live-b.stellar.org:11625" 175 | HISTORY = "curl -sf http://history.stellar.org/prd/core-live/core_live_002/{0} -o {1}" 176 | HOME_DOMAIN = "www.stellar.org" 177 | 178 | [[VALIDATORS]] 179 | NAME = "SDF 3" 180 | PUBLIC_KEY = "GABMKJM6I25XI4K7U6XWMULOUQIQ27BCTMLS6BYYSOWKTBUXVRJSXHYQ" 181 | ADDRESS = "core-live-c.stellar.org:11625" 182 | HISTORY = "curl -sf http://history.stellar.org/prd/core-live/core_live_003/{0} -o {1}" 183 | HOME_DOMAIN = "www.stellar.org" 184 | -------------------------------------------------------------------------------- /pubnet/horizon/etc/stellar-captive-core.cfg: -------------------------------------------------------------------------------- 1 | # captive core config for futurenet 2 | NETWORK_PASSPHRASE="__NETWORK__" 3 | # disable the web service port, not used 4 | HTTP_PORT=11726 5 | PUBLIC_HTTP_PORT=false 6 | # To avoid conflicts with the core instance 7 | PEER_PORT=11725 8 | DATABASE="__DATABASE__" 9 | 10 | ENABLE_SOROBAN_DIAGNOSTIC_EVENTS=__ENABLE_SOROBAN_DIAGNOSTIC_EVENTS__ 11 | 12 | [[HOME_DOMAINS]] 13 | HOME_DOMAIN = "lobstr.co" 14 | QUALITY = "HIGH" 15 | 16 | [[HOME_DOMAINS]] 17 | HOME_DOMAIN = "publicnode.org" 18 | QUALITY = "HIGH" 19 | 20 | [[HOME_DOMAINS]] 21 | HOME_DOMAIN = "satoshipay.io" 22 | QUALITY = "HIGH" 23 | 24 | [[HOME_DOMAINS]] 25 | HOME_DOMAIN = "stellar.blockdaemon.com" 26 | QUALITY = "HIGH" 27 | 28 | [[HOME_DOMAINS]] 29 | HOME_DOMAIN = "stellar.creit.tech" 30 | QUALITY = "HIGH" 31 | 32 | [[HOME_DOMAINS]] 33 | HOME_DOMAIN = "www.franklintempleton.com" 34 | QUALITY = "HIGH" 35 | 36 | [[HOME_DOMAINS]] 37 | HOME_DOMAIN = "www.stellar.org" 38 | QUALITY = "HIGH" 39 | 40 | [[VALIDATORS]] 41 | NAME = "LOBSTR 1 (Europe)" 42 | PUBLIC_KEY = "GCFONE23AB7Y6C5YZOMKUKGETPIAJA4QOYLS5VNS4JHBGKRZCPYHDLW7" 43 | ADDRESS = "v1.stellar.lobstr.co:11625" 44 | HISTORY = "curl -sf https://archive.v1.stellar.lobstr.co/{0} -o {1}" 45 | HOME_DOMAIN = "lobstr.co" 46 | 47 | [[VALIDATORS]] 48 | NAME = "LOBSTR 2 (Europe)" 49 | PUBLIC_KEY = "GCB2VSADESRV2DDTIVTFLBDI562K6KE3KMKILBHUHUWFXCUBHGQDI7VL" 50 | ADDRESS = "v2.stellar.lobstr.co:11625" 51 | HISTORY = "curl -sf https://archive.v2.stellar.lobstr.co/{0} -o {1}" 52 | HOME_DOMAIN = "lobstr.co" 53 | 54 | [[VALIDATORS]] 55 | NAME = "LOBSTR 5 (India)" 56 | PUBLIC_KEY = "GA5STBMV6QDXFDGD62MEHLLHZTPDI77U3PFOD2SELU5RJDHQWBR5NNK7" 57 | ADDRESS = "v5.stellar.lobstr.co:11625" 58 | HISTORY = "curl -sf https://archive.v5.stellar.lobstr.co/{0} -o {1}" 59 | HOME_DOMAIN = "lobstr.co" 60 | 61 | [[VALIDATORS]] 62 | NAME = "Boötes" 63 | PUBLIC_KEY = "GCVJ4Z6TI6Z2SOGENSPXDQ2U4RKH3CNQKYUHNSSPYFPNWTLGS6EBH7I2" 64 | ADDRESS = "bootes.publicnode.org:11625" 65 | HISTORY = "curl -sf https://bootes-history.publicnode.org/{0} -o {1}" 66 | HOME_DOMAIN = "publicnode.org" 67 | 68 | [[VALIDATORS]] 69 | NAME = "Hercules" 70 | PUBLIC_KEY = "GBLJNN3AVZZPG2FYAYTYQKECNWTQYYUUY2KVFN2OUKZKBULXIXBZ4FCT" 71 | ADDRESS = "hercules.publicnode.org:11625" 72 | HISTORY = "curl -sf https://hercules-history.publicnode.org/{0} -o {1}" 73 | HOME_DOMAIN = "publicnode.org" 74 | 75 | [[VALIDATORS]] 76 | NAME = "Lyra" 77 | PUBLIC_KEY = "GCIXVKNFPKWVMKJKVK2V4NK7D4TC6W3BUMXSIJ365QUAXWBRPPJXIR2Z" 78 | ADDRESS = "lyra.publicnode.org:11625" 79 | HISTORY = "curl -sf https://lyra-history.publicnode.org/{0} -o {1}" 80 | HOME_DOMAIN = "publicnode.org" 81 | 82 | [[VALIDATORS]] 83 | NAME = "SatoshiPay Frankfurt" 84 | PUBLIC_KEY = "GC5SXLNAM3C4NMGK2PXK4R34B5GNZ47FYQ24ZIBFDFOCU6D4KBN4POAE" 85 | ADDRESS = "stellar-de-fra.satoshipay.io:11625" 86 | HISTORY = "curl -sf https://stellar-history-de-fra.satoshipay.io/{0} -o {1}" 87 | HOME_DOMAIN = "satoshipay.io" 88 | 89 | [[VALIDATORS]] 90 | NAME = "SatoshiPay Iowa" 91 | PUBLIC_KEY = "GAK6Z5UVGUVSEK6PEOCAYJISTT5EJBB34PN3NOLEQG2SUKXRVV2F6HZY" 92 | ADDRESS = "stellar-us-iowa.satoshipay.io:11625" 93 | HISTORY = "curl -sf https://stellar-history-us-iowa.satoshipay.io/{0} -o {1}" 94 | HOME_DOMAIN = "satoshipay.io" 95 | 96 | [[VALIDATORS]] 97 | NAME = "SatoshiPay Singapore" 98 | PUBLIC_KEY = "GBJQUIXUO4XSNPAUT6ODLZUJRV2NPXYASKUBY4G5MYP3M47PCVI55MNT" 99 | ADDRESS = "stellar-sg-sin.satoshipay.io:11625" 100 | HISTORY = "curl -sf https://stellar-history-sg-sin.satoshipay.io/{0} -o {1}" 101 | HOME_DOMAIN = "satoshipay.io" 102 | 103 | [[VALIDATORS]] 104 | NAME = "Blockdaemon Validator 1" 105 | PUBLIC_KEY = "GAAV2GCVFLNN522ORUYFV33E76VPC22E72S75AQ6MBR5V45Z5DWVPWEU" 106 | ADDRESS = "stellar-full-validator1.bdnodes.net:11625" 107 | HISTORY = "curl -sf https://stellar-full-history1.bdnodes.net/{0} -o {1}" 108 | HOME_DOMAIN = "stellar.blockdaemon.com" 109 | 110 | [[VALIDATORS]] 111 | NAME = "Blockdaemon Validator 2" 112 | PUBLIC_KEY = "GAVXB7SBJRYHSG6KSQHY74N7JAFRL4PFVZCNWW2ARI6ZEKNBJSMSKW7C" 113 | ADDRESS = "stellar-full-validator2.bdnodes.net:11625" 114 | HISTORY = "curl -sf https://stellar-full-history2.bdnodes.net/{0} -o {1}" 115 | HOME_DOMAIN = "stellar.blockdaemon.com" 116 | 117 | [[VALIDATORS]] 118 | NAME = "Blockdaemon Validator 3" 119 | PUBLIC_KEY = "GAYXZ4PZ7P6QOX7EBHPIZXNWY4KCOBYWJCA4WKWRKC7XIUS3UJPT6EZ4" 120 | ADDRESS = "stellar-full-validator3.bdnodes.net:11625" 121 | HISTORY = "curl -sf https://stellar-full-history3.bdnodes.net/{0} -o {1}" 122 | HOME_DOMAIN = "stellar.blockdaemon.com" 123 | 124 | [[VALIDATORS]] 125 | NAME = "Alpha Node Validator" 126 | PUBLIC_KEY = "GBPLJDBFZO2H7QQH7YFCH3HFT6EMC42Z2DNJ2QFROCKETAPY54V4DCZD" 127 | ADDRESS = "alpha.validator.stellar.creit.tech:11625" 128 | HISTORY = "curl -sf https://alpha-history.validator.stellar.creit.tech/{0} -o {1}" 129 | HOME_DOMAIN = "stellar.creit.tech" 130 | 131 | [[VALIDATORS]] 132 | NAME = "Beta Node Validator" 133 | PUBLIC_KEY = "GDDANSYOYSY5EPSFHBRPCLX6XMHPPLIMHVIDXG6IPQLVVLRI2BN4HMH3" 134 | ADDRESS = "beta.validator.stellar.creit.tech:11625" 135 | HISTORY = "curl -sf https://beta-history.validator.stellar.creit.tech/{0} -o {1}" 136 | HOME_DOMAIN = "stellar.creit.tech" 137 | 138 | [[VALIDATORS]] 139 | NAME = "Gamma Node Validator" 140 | PUBLIC_KEY = "GBF7QOLFPTHUEDUPTT4ZTULDTA3QXDIO75JHKJN2IYD7YGQLYUTR75BT" 141 | ADDRESS = "gamma.validator.stellar.creit.tech:11625" 142 | HISTORY = "curl -sf https://gamma-history.validator.stellar.creit.tech/{0} -o {1}" 143 | HOME_DOMAIN = "stellar.creit.tech" 144 | 145 | [[VALIDATORS]] 146 | NAME = "FT SCV 1" 147 | PUBLIC_KEY = "GARYGQ5F2IJEBCZJCBNPWNWVDOFK7IBOHLJKKSG2TMHDQKEEC6P4PE4V" 148 | ADDRESS = "stellar1.franklintempleton.com:11625" 149 | HISTORY = "curl -sf https://stellar-history1.franklintempleton.com/history1/{0} -o {1}" 150 | HOME_DOMAIN = "www.franklintempleton.com" 151 | 152 | [[VALIDATORS]] 153 | NAME = "FT SCV 2" 154 | PUBLIC_KEY = "GCMSM2VFZGRPTZKPH5OABHGH4F3AVS6XTNJXDGCZ3MKCOSUBH3FL6DOB" 155 | ADDRESS = "stellar2.franklintempleton.com:11625" 156 | HISTORY = "curl -sf https://stellar-history2.franklintempleton.com/history2/{0} -o {1}" 157 | HOME_DOMAIN = "www.franklintempleton.com" 158 | 159 | [[VALIDATORS]] 160 | NAME = "FT SCV 3" 161 | PUBLIC_KEY = "GA7DV63PBUUWNUFAF4GAZVXU2OZMYRATDLKTC7VTCG7AU4XUPN5VRX4A" 162 | ADDRESS = "stellar3.franklintempleton.com:11625" 163 | HISTORY = "curl -sf https://stellar-history3.franklintempleton.com/history3/{0} -o {1}" 164 | HOME_DOMAIN = "www.franklintempleton.com" 165 | 166 | [[VALIDATORS]] 167 | NAME = "SDF 1" 168 | PUBLIC_KEY = "GCGB2S2KGYARPVIA37HYZXVRM2YZUEXA6S33ZU5BUDC6THSB62LZSTYH" 169 | ADDRESS = "core-live-a.stellar.org:11625" 170 | HISTORY = "curl -sf http://history.stellar.org/prd/core-live/core_live_001/{0} -o {1}" 171 | HOME_DOMAIN = "www.stellar.org" 172 | 173 | [[VALIDATORS]] 174 | NAME = "SDF 2" 175 | PUBLIC_KEY = "GCM6QMP3DLRPTAZW2UZPCPX2LF3SXWXKPMP3GKFZBDSF3QZGV2G5QSTK" 176 | ADDRESS = "core-live-b.stellar.org:11625" 177 | HISTORY = "curl -sf http://history.stellar.org/prd/core-live/core_live_002/{0} -o {1}" 178 | HOME_DOMAIN = "www.stellar.org" 179 | 180 | [[VALIDATORS]] 181 | NAME = "SDF 3" 182 | PUBLIC_KEY = "GABMKJM6I25XI4K7U6XWMULOUQIQ27BCTMLS6BYYSOWKTBUXVRJSXHYQ" 183 | ADDRESS = "core-live-c.stellar.org:11625" 184 | HISTORY = "curl -sf http://history.stellar.org/prd/core-live/core_live_003/{0} -o {1}" 185 | HOME_DOMAIN = "www.stellar.org" 186 | -------------------------------------------------------------------------------- /pubnet/stellar-rpc/etc/stellar-captive-core.cfg: -------------------------------------------------------------------------------- 1 | # captive core config for testnet 2 | NETWORK_PASSPHRASE="__NETWORK__" 3 | # disable the web service port, not used 4 | HTTP_PORT=11826 5 | PUBLIC_HTTP_PORT=false 6 | # To avoid conflicts with the core instance 7 | PEER_PORT=11825 8 | DATABASE="__DATABASE__" 9 | 10 | ENABLE_SOROBAN_DIAGNOSTIC_EVENTS=__ENABLE_SOROBAN_DIAGNOSTIC_EVENTS__ 11 | ENABLE_DIAGNOSTICS_FOR_TX_SUBMISSION=__ENABLE_SOROBAN_DIAGNOSTIC_EVENTS__ 12 | 13 | # TODO: Connect only to the local node after 14 | # https://github.com/stellar/go/pull/5053 is available. 15 | # PREFERRED_PEERS=["127.0.0.1:11625"] 16 | # PREFERRED_PEER_KEYS=["GCTI6HMWRH2QGMFKWVU5M5ZSOTKL7P7JAHZDMJJBKDHGWTEC4CJ7O3DU"] 17 | # PREFERRED_PEERS_ONLY=true 18 | 19 | [[HOME_DOMAINS]] 20 | HOME_DOMAIN = "lobstr.co" 21 | QUALITY = "HIGH" 22 | 23 | [[HOME_DOMAINS]] 24 | HOME_DOMAIN = "publicnode.org" 25 | QUALITY = "HIGH" 26 | 27 | [[HOME_DOMAINS]] 28 | HOME_DOMAIN = "satoshipay.io" 29 | QUALITY = "HIGH" 30 | 31 | [[HOME_DOMAINS]] 32 | HOME_DOMAIN = "stellar.blockdaemon.com" 33 | QUALITY = "HIGH" 34 | 35 | [[HOME_DOMAINS]] 36 | HOME_DOMAIN = "stellar.creit.tech" 37 | QUALITY = "HIGH" 38 | 39 | [[HOME_DOMAINS]] 40 | HOME_DOMAIN = "www.franklintempleton.com" 41 | QUALITY = "HIGH" 42 | 43 | [[HOME_DOMAINS]] 44 | HOME_DOMAIN = "www.stellar.org" 45 | QUALITY = "HIGH" 46 | 47 | [[VALIDATORS]] 48 | NAME = "LOBSTR 1 (Europe)" 49 | PUBLIC_KEY = "GCFONE23AB7Y6C5YZOMKUKGETPIAJA4QOYLS5VNS4JHBGKRZCPYHDLW7" 50 | ADDRESS = "v1.stellar.lobstr.co:11625" 51 | HISTORY = "curl -sf https://archive.v1.stellar.lobstr.co/{0} -o {1}" 52 | HOME_DOMAIN = "lobstr.co" 53 | 54 | [[VALIDATORS]] 55 | NAME = "LOBSTR 2 (Europe)" 56 | PUBLIC_KEY = "GCB2VSADESRV2DDTIVTFLBDI562K6KE3KMKILBHUHUWFXCUBHGQDI7VL" 57 | ADDRESS = "v2.stellar.lobstr.co:11625" 58 | HISTORY = "curl -sf https://archive.v2.stellar.lobstr.co/{0} -o {1}" 59 | HOME_DOMAIN = "lobstr.co" 60 | 61 | [[VALIDATORS]] 62 | NAME = "LOBSTR 5 (India)" 63 | PUBLIC_KEY = "GA5STBMV6QDXFDGD62MEHLLHZTPDI77U3PFOD2SELU5RJDHQWBR5NNK7" 64 | ADDRESS = "v5.stellar.lobstr.co:11625" 65 | HISTORY = "curl -sf https://archive.v5.stellar.lobstr.co/{0} -o {1}" 66 | HOME_DOMAIN = "lobstr.co" 67 | 68 | [[VALIDATORS]] 69 | NAME = "Boötes" 70 | PUBLIC_KEY = "GCVJ4Z6TI6Z2SOGENSPXDQ2U4RKH3CNQKYUHNSSPYFPNWTLGS6EBH7I2" 71 | ADDRESS = "bootes.publicnode.org:11625" 72 | HISTORY = "curl -sf https://bootes-history.publicnode.org/{0} -o {1}" 73 | HOME_DOMAIN = "publicnode.org" 74 | 75 | [[VALIDATORS]] 76 | NAME = "Hercules" 77 | PUBLIC_KEY = "GBLJNN3AVZZPG2FYAYTYQKECNWTQYYUUY2KVFN2OUKZKBULXIXBZ4FCT" 78 | ADDRESS = "hercules.publicnode.org:11625" 79 | HISTORY = "curl -sf https://hercules-history.publicnode.org/{0} -o {1}" 80 | HOME_DOMAIN = "publicnode.org" 81 | 82 | [[VALIDATORS]] 83 | NAME = "Lyra" 84 | PUBLIC_KEY = "GCIXVKNFPKWVMKJKVK2V4NK7D4TC6W3BUMXSIJ365QUAXWBRPPJXIR2Z" 85 | ADDRESS = "lyra.publicnode.org:11625" 86 | HISTORY = "curl -sf https://lyra-history.publicnode.org/{0} -o {1}" 87 | HOME_DOMAIN = "publicnode.org" 88 | 89 | [[VALIDATORS]] 90 | NAME = "SatoshiPay Frankfurt" 91 | PUBLIC_KEY = "GC5SXLNAM3C4NMGK2PXK4R34B5GNZ47FYQ24ZIBFDFOCU6D4KBN4POAE" 92 | ADDRESS = "stellar-de-fra.satoshipay.io:11625" 93 | HISTORY = "curl -sf https://stellar-history-de-fra.satoshipay.io/{0} -o {1}" 94 | HOME_DOMAIN = "satoshipay.io" 95 | 96 | [[VALIDATORS]] 97 | NAME = "SatoshiPay Iowa" 98 | PUBLIC_KEY = "GAK6Z5UVGUVSEK6PEOCAYJISTT5EJBB34PN3NOLEQG2SUKXRVV2F6HZY" 99 | ADDRESS = "stellar-us-iowa.satoshipay.io:11625" 100 | HISTORY = "curl -sf https://stellar-history-us-iowa.satoshipay.io/{0} -o {1}" 101 | HOME_DOMAIN = "satoshipay.io" 102 | 103 | [[VALIDATORS]] 104 | NAME = "SatoshiPay Singapore" 105 | PUBLIC_KEY = "GBJQUIXUO4XSNPAUT6ODLZUJRV2NPXYASKUBY4G5MYP3M47PCVI55MNT" 106 | ADDRESS = "stellar-sg-sin.satoshipay.io:11625" 107 | HISTORY = "curl -sf https://stellar-history-sg-sin.satoshipay.io/{0} -o {1}" 108 | HOME_DOMAIN = "satoshipay.io" 109 | 110 | [[VALIDATORS]] 111 | NAME = "Blockdaemon Validator 1" 112 | PUBLIC_KEY = "GAAV2GCVFLNN522ORUYFV33E76VPC22E72S75AQ6MBR5V45Z5DWVPWEU" 113 | ADDRESS = "stellar-full-validator1.bdnodes.net:11625" 114 | HISTORY = "curl -sf https://stellar-full-history1.bdnodes.net/{0} -o {1}" 115 | HOME_DOMAIN = "stellar.blockdaemon.com" 116 | 117 | [[VALIDATORS]] 118 | NAME = "Blockdaemon Validator 2" 119 | PUBLIC_KEY = "GAVXB7SBJRYHSG6KSQHY74N7JAFRL4PFVZCNWW2ARI6ZEKNBJSMSKW7C" 120 | ADDRESS = "stellar-full-validator2.bdnodes.net:11625" 121 | HISTORY = "curl -sf https://stellar-full-history2.bdnodes.net/{0} -o {1}" 122 | HOME_DOMAIN = "stellar.blockdaemon.com" 123 | 124 | [[VALIDATORS]] 125 | NAME = "Blockdaemon Validator 3" 126 | PUBLIC_KEY = "GAYXZ4PZ7P6QOX7EBHPIZXNWY4KCOBYWJCA4WKWRKC7XIUS3UJPT6EZ4" 127 | ADDRESS = "stellar-full-validator3.bdnodes.net:11625" 128 | HISTORY = "curl -sf https://stellar-full-history3.bdnodes.net/{0} -o {1}" 129 | HOME_DOMAIN = "stellar.blockdaemon.com" 130 | 131 | [[VALIDATORS]] 132 | NAME = "Alpha Node Validator" 133 | PUBLIC_KEY = "GBPLJDBFZO2H7QQH7YFCH3HFT6EMC42Z2DNJ2QFROCKETAPY54V4DCZD" 134 | ADDRESS = "alpha.validator.stellar.creit.tech:11625" 135 | HISTORY = "curl -sf https://alpha-history.validator.stellar.creit.tech/{0} -o {1}" 136 | HOME_DOMAIN = "stellar.creit.tech" 137 | 138 | [[VALIDATORS]] 139 | NAME = "Beta Node Validator" 140 | PUBLIC_KEY = "GDDANSYOYSY5EPSFHBRPCLX6XMHPPLIMHVIDXG6IPQLVVLRI2BN4HMH3" 141 | ADDRESS = "beta.validator.stellar.creit.tech:11625" 142 | HISTORY = "curl -sf https://beta-history.validator.stellar.creit.tech/{0} -o {1}" 143 | HOME_DOMAIN = "stellar.creit.tech" 144 | 145 | [[VALIDATORS]] 146 | NAME = "Gamma Node Validator" 147 | PUBLIC_KEY = "GBF7QOLFPTHUEDUPTT4ZTULDTA3QXDIO75JHKJN2IYD7YGQLYUTR75BT" 148 | ADDRESS = "gamma.validator.stellar.creit.tech:11625" 149 | HISTORY = "curl -sf https://gamma-history.validator.stellar.creit.tech/{0} -o {1}" 150 | HOME_DOMAIN = "stellar.creit.tech" 151 | 152 | [[VALIDATORS]] 153 | NAME = "FT SCV 1" 154 | PUBLIC_KEY = "GARYGQ5F2IJEBCZJCBNPWNWVDOFK7IBOHLJKKSG2TMHDQKEEC6P4PE4V" 155 | ADDRESS = "stellar1.franklintempleton.com:11625" 156 | HISTORY = "curl -sf https://stellar-history1.franklintempleton.com/history1/{0} -o {1}" 157 | HOME_DOMAIN = "www.franklintempleton.com" 158 | 159 | [[VALIDATORS]] 160 | NAME = "FT SCV 2" 161 | PUBLIC_KEY = "GCMSM2VFZGRPTZKPH5OABHGH4F3AVS6XTNJXDGCZ3MKCOSUBH3FL6DOB" 162 | ADDRESS = "stellar2.franklintempleton.com:11625" 163 | HISTORY = "curl -sf https://stellar-history2.franklintempleton.com/history2/{0} -o {1}" 164 | HOME_DOMAIN = "www.franklintempleton.com" 165 | 166 | [[VALIDATORS]] 167 | NAME = "FT SCV 3" 168 | PUBLIC_KEY = "GA7DV63PBUUWNUFAF4GAZVXU2OZMYRATDLKTC7VTCG7AU4XUPN5VRX4A" 169 | ADDRESS = "stellar3.franklintempleton.com:11625" 170 | HISTORY = "curl -sf https://stellar-history3.franklintempleton.com/history3/{0} -o {1}" 171 | HOME_DOMAIN = "www.franklintempleton.com" 172 | 173 | [[VALIDATORS]] 174 | NAME = "SDF 1" 175 | PUBLIC_KEY = "GCGB2S2KGYARPVIA37HYZXVRM2YZUEXA6S33ZU5BUDC6THSB62LZSTYH" 176 | ADDRESS = "core-live-a.stellar.org:11625" 177 | HISTORY = "curl -sf http://history.stellar.org/prd/core-live/core_live_001/{0} -o {1}" 178 | HOME_DOMAIN = "www.stellar.org" 179 | 180 | [[VALIDATORS]] 181 | NAME = "SDF 2" 182 | PUBLIC_KEY = "GCM6QMP3DLRPTAZW2UZPCPX2LF3SXWXKPMP3GKFZBDSF3QZGV2G5QSTK" 183 | ADDRESS = "core-live-b.stellar.org:11625" 184 | HISTORY = "curl -sf http://history.stellar.org/prd/core-live/core_live_002/{0} -o {1}" 185 | HOME_DOMAIN = "www.stellar.org" 186 | 187 | [[VALIDATORS]] 188 | NAME = "SDF 3" 189 | PUBLIC_KEY = "GABMKJM6I25XI4K7U6XWMULOUQIQ27BCTMLS6BYYSOWKTBUXVRJSXHYQ" 190 | ADDRESS = "core-live-c.stellar.org:11625" 191 | HISTORY = "curl -sf http://history.stellar.org/prd/core-live/core_live_003/{0} -o {1}" 192 | HOME_DOMAIN = "www.stellar.org" 193 | -------------------------------------------------------------------------------- /pubnet/stellar-rpc/etc/stellar-rpc.cfg: -------------------------------------------------------------------------------- 1 | ENDPOINT="localhost:8003" 2 | ADMIN_ENDPOINT="__STELLAR_RPC_ADMIN_ENDPOINT__" 3 | NETWORK_PASSPHRASE="__NETWORK__" 4 | STELLAR_CORE_URL="http://localhost:11826" 5 | CAPTIVE_CORE_CONFIG_PATH="/opt/stellar/stellar-rpc/etc/stellar-captive-core.cfg" 6 | CAPTIVE_CORE_STORAGE_PATH="/opt/stellar/stellar-rpc/captive-core" 7 | CAPTIVE_CORE_USE_DB=true 8 | STELLAR_CORE_BINARY_PATH="/usr/bin/stellar-core" 9 | HISTORY_ARCHIVE_URLS="__ARCHIVE__" 10 | DB_PATH="/opt/stellar/stellar-rpc/rpc_db.sqlite" 11 | STELLAR_CAPTIVE_CORE_HTTP_PORT=11826 12 | CHECKPOINT_FREQUENCY=64 13 | -------------------------------------------------------------------------------- /testnet/core/etc/stellar-core.cfg: -------------------------------------------------------------------------------- 1 | HTTP_PORT=11626 2 | PUBLIC_HTTP_PORT=true 3 | LOG_FILE_PATH="/var/log/stellar-core/stellar-core-{datetime:%Y-%m-%d_%H-%M-%S}.log" 4 | MANUAL_CLOSE=__MANUAL_CLOSE__ 5 | 6 | NETWORK_PASSPHRASE="__NETWORK__" 7 | DATABASE="postgresql://dbname=core host=localhost user=stellar password=__PGPASS__" 8 | CATCHUP_RECENT=100 9 | 10 | UNSAFE_QUORUM=true 11 | FAILURE_SAFETY=1 12 | 13 | [[HOME_DOMAINS]] 14 | HOME_DOMAIN="testnet.stellar.org" 15 | QUALITY="HIGH" 16 | 17 | [[VALIDATORS]] 18 | NAME="sdf_testnet_1" 19 | HOME_DOMAIN="testnet.stellar.org" 20 | PUBLIC_KEY="GDKXE2OZMJIPOSLNA6N6F2BVCI3O777I2OOC4BV7VOYUEHYX7RTRYA7Y" 21 | ADDRESS="core-testnet1.stellar.org" 22 | HISTORY="curl -sf http://history.stellar.org/prd/core-testnet/core_testnet_001/{0} -o {1}" 23 | 24 | [[VALIDATORS]] 25 | NAME="sdf_testnet_2" 26 | HOME_DOMAIN="testnet.stellar.org" 27 | PUBLIC_KEY="GCUCJTIYXSOXKBSNFGNFWW5MUQ54HKRPGJUTQFJ5RQXZXNOLNXYDHRAP" 28 | ADDRESS="core-testnet2.stellar.org" 29 | HISTORY="curl -sf http://history.stellar.org/prd/core-testnet/core_testnet_002/{0} -o {1}" 30 | 31 | [[VALIDATORS]] 32 | NAME="sdf_testnet_3" 33 | HOME_DOMAIN="testnet.stellar.org" 34 | PUBLIC_KEY="GC2V2EFSXN6SQTWVYA5EPJPBWWIMSD2XQNKUOHGEKB535AQE2I6IXV2Z" 35 | ADDRESS="core-testnet3.stellar.org" 36 | HISTORY="curl -sf http://history.stellar.org/prd/core-testnet/core_testnet_003/{0} -o {1}" 37 | -------------------------------------------------------------------------------- /testnet/horizon/etc/stellar-captive-core.cfg: -------------------------------------------------------------------------------- 1 | # captive core config for futurenet 2 | NETWORK_PASSPHRASE="__NETWORK__" 3 | # disable the web service port, not used 4 | HTTP_PORT=11726 5 | PUBLIC_HTTP_PORT=false 6 | # To avoid conflicts with the core instance 7 | PEER_PORT=11725 8 | DATABASE="__DATABASE__" 9 | 10 | ENABLE_SOROBAN_DIAGNOSTIC_EVENTS=__ENABLE_SOROBAN_DIAGNOSTIC_EVENTS__ 11 | 12 | UNSAFE_QUORUM=true 13 | FAILURE_SAFETY=1 14 | 15 | [[HOME_DOMAINS]] 16 | HOME_DOMAIN="testnet.stellar.org" 17 | QUALITY="HIGH" 18 | 19 | [[VALIDATORS]] 20 | NAME="sdf_testnet_1" 21 | HOME_DOMAIN="testnet.stellar.org" 22 | PUBLIC_KEY="GDKXE2OZMJIPOSLNA6N6F2BVCI3O777I2OOC4BV7VOYUEHYX7RTRYA7Y" 23 | ADDRESS="core-testnet1.stellar.org" 24 | HISTORY="curl -sf http://history.stellar.org/prd/core-testnet/core_testnet_001/{0} -o {1}" 25 | 26 | [[VALIDATORS]] 27 | NAME="sdf_testnet_2" 28 | HOME_DOMAIN="testnet.stellar.org" 29 | PUBLIC_KEY="GCUCJTIYXSOXKBSNFGNFWW5MUQ54HKRPGJUTQFJ5RQXZXNOLNXYDHRAP" 30 | ADDRESS="core-testnet2.stellar.org" 31 | HISTORY="curl -sf http://history.stellar.org/prd/core-testnet/core_testnet_002/{0} -o {1}" 32 | 33 | [[VALIDATORS]] 34 | NAME="sdf_testnet_3" 35 | HOME_DOMAIN="testnet.stellar.org" 36 | PUBLIC_KEY="GC2V2EFSXN6SQTWVYA5EPJPBWWIMSD2XQNKUOHGEKB535AQE2I6IXV2Z" 37 | ADDRESS="core-testnet3.stellar.org" 38 | HISTORY="curl -sf http://history.stellar.org/prd/core-testnet/core_testnet_003/{0} -o {1}" 39 | -------------------------------------------------------------------------------- /testnet/nginx/etc/conf.d/friendbot.conf: -------------------------------------------------------------------------------- 1 | location /friendbot { 2 | rewrite /friendbot / break; 3 | proxy_pass https://friendbot.stellar.org; 4 | proxy_ssl_server_name on; 5 | proxy_ssl_name friendbot.stellar.org; 6 | proxy_set_header Host friendbot.stellar.org; 7 | proxy_redirect off; 8 | } 9 | -------------------------------------------------------------------------------- /testnet/stellar-rpc/etc/stellar-captive-core.cfg: -------------------------------------------------------------------------------- 1 | # captive core config for testnet 2 | NETWORK_PASSPHRASE="__NETWORK__" 3 | # disable the web service port, not used 4 | HTTP_PORT=11826 5 | PUBLIC_HTTP_PORT=false 6 | # To avoid conflicts with the core instance 7 | PEER_PORT=11825 8 | DATABASE="__DATABASE__" 9 | 10 | ENABLE_SOROBAN_DIAGNOSTIC_EVENTS=__ENABLE_SOROBAN_DIAGNOSTIC_EVENTS__ 11 | ENABLE_DIAGNOSTICS_FOR_TX_SUBMISSION=__ENABLE_SOROBAN_DIAGNOSTIC_EVENTS__ 12 | 13 | # TODO: Connect only to the local node after 14 | # https://github.com/stellar/go/pull/5053 is available. 15 | # PREFERRED_PEERS=["127.0.0.1:11625"] 16 | # PREFERRED_PEER_KEYS=["GCTI6HMWRH2QGMFKWVU5M5ZSOTKL7P7JAHZDMJJBKDHGWTEC4CJ7O3DU"] 17 | # PREFERRED_PEERS_ONLY=true 18 | 19 | UNSAFE_QUORUM=true 20 | FAILURE_SAFETY=1 21 | 22 | [[HOME_DOMAINS]] 23 | HOME_DOMAIN="testnet.stellar.org" 24 | QUALITY="HIGH" 25 | 26 | [[VALIDATORS]] 27 | NAME="sdf_testnet_1" 28 | HOME_DOMAIN="testnet.stellar.org" 29 | PUBLIC_KEY="GDKXE2OZMJIPOSLNA6N6F2BVCI3O777I2OOC4BV7VOYUEHYX7RTRYA7Y" 30 | ADDRESS="core-testnet1.stellar.org" 31 | HISTORY="curl -sf http://history.stellar.org/prd/core-testnet/core_testnet_001/{0} -o {1}" 32 | 33 | [[VALIDATORS]] 34 | NAME="sdf_testnet_2" 35 | HOME_DOMAIN="testnet.stellar.org" 36 | PUBLIC_KEY="GCUCJTIYXSOXKBSNFGNFWW5MUQ54HKRPGJUTQFJ5RQXZXNOLNXYDHRAP" 37 | ADDRESS="core-testnet2.stellar.org" 38 | HISTORY="curl -sf http://history.stellar.org/prd/core-testnet/core_testnet_002/{0} -o {1}" 39 | 40 | [[VALIDATORS]] 41 | NAME="sdf_testnet_3" 42 | HOME_DOMAIN="testnet.stellar.org" 43 | PUBLIC_KEY="GC2V2EFSXN6SQTWVYA5EPJPBWWIMSD2XQNKUOHGEKB535AQE2I6IXV2Z" 44 | ADDRESS="core-testnet3.stellar.org" 45 | HISTORY="curl -sf http://history.stellar.org/prd/core-testnet/core_testnet_003/{0} -o {1}" 46 | -------------------------------------------------------------------------------- /testnet/stellar-rpc/etc/stellar-rpc.cfg: -------------------------------------------------------------------------------- 1 | ENDPOINT="localhost:8003" 2 | ADMIN_ENDPOINT="__STELLAR_RPC_ADMIN_ENDPOINT__" 3 | FRIENDBOT_URL="https://friendbot.stellar.org/" 4 | NETWORK_PASSPHRASE="__NETWORK__" 5 | STELLAR_CORE_URL="http://localhost:11826" 6 | CAPTIVE_CORE_CONFIG_PATH="/opt/stellar/stellar-rpc/etc/stellar-captive-core.cfg" 7 | CAPTIVE_CORE_STORAGE_PATH="/opt/stellar/stellar-rpc/captive-core" 8 | CAPTIVE_CORE_USE_DB=true 9 | STELLAR_CORE_BINARY_PATH="/usr/bin/stellar-core" 10 | HISTORY_ARCHIVE_URLS="__ARCHIVE__" 11 | DB_PATH="/opt/stellar/stellar-rpc/rpc_db.sqlite" 12 | STELLAR_CAPTIVE_CORE_HTTP_PORT=11826 13 | CHECKPOINT_FREQUENCY=64 14 | -------------------------------------------------------------------------------- /tests/test_core.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "encoding/json" 5 | "log" 6 | "net/http" 7 | "os" 8 | "time" 9 | ) 10 | 11 | type Info struct { 12 | Info struct { 13 | State string `json:"state"` 14 | } `json:"info"` 15 | } 16 | 17 | func main() { 18 | for { 19 | time.Sleep(5 * time.Second) 20 | logLine("Waiting for stellar-core to start catching up and sync") 21 | 22 | resp, err := http.Get("http://localhost:11626/info") 23 | if err != nil { 24 | logLine(err) 25 | continue 26 | } 27 | 28 | var info Info 29 | decoder := json.NewDecoder(resp.Body) 30 | err = decoder.Decode(&info) 31 | if err != nil { 32 | logLine(err) 33 | continue 34 | } 35 | 36 | logLine("Stellar-core is " + info.Info.State) 37 | if info.Info.State == "Catching up" || info.Info.State == "Synced!" { 38 | os.Exit(0) 39 | } 40 | } 41 | } 42 | 43 | func logLine(text interface{}) { 44 | log.Println("\033[32;1m[test]\033[0m", text) 45 | } 46 | -------------------------------------------------------------------------------- /tests/test_friendbot.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "log" 5 | "net/http" 6 | "net/url" 7 | "os" 8 | "time" 9 | ) 10 | 11 | func main() { 12 | for { 13 | time.Sleep(10 * time.Second) 14 | logLine("Waiting for Friendbot to be available") 15 | 16 | params := url.Values{} 17 | params.Set("addr", "GDDVAW5VBBMSKIGNHCZIRZ3BCDQXKO7TCPGEPJR4KL72RHAL2R2ETEST") 18 | resp, err := http.Get("http://localhost:8000/friendbot?" + params.Encode()) 19 | if err != nil { 20 | logLine(err) 21 | continue 22 | } 23 | 24 | if resp.StatusCode == 200 { 25 | logLine("Friendbot is available!") 26 | os.Exit(0) 27 | } 28 | } 29 | } 30 | 31 | func logLine(text interface{}) { 32 | log.Println("\033[32;1m[test_friendbot]\033[0m", text) 33 | } 34 | -------------------------------------------------------------------------------- /tests/test_horizon_core_up.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "encoding/json" 5 | "log" 6 | "net/http" 7 | "os" 8 | "time" 9 | ) 10 | 11 | type Root struct { 12 | CoreSupportedProtocolVersion int32 `json:"core_supported_protocol_version"` 13 | } 14 | 15 | func main() { 16 | for { 17 | time.Sleep(5 * time.Second) 18 | logLine("Waiting for Horizon's stellar-core to start reporting") 19 | 20 | resp, err := http.Get("http://localhost:8000") 21 | if err != nil { 22 | logLine(err) 23 | continue 24 | } 25 | 26 | var root Root 27 | decoder := json.NewDecoder(resp.Body) 28 | err = decoder.Decode(&root) 29 | if err != nil { 30 | logLine(err) 31 | continue 32 | } 33 | 34 | if root.CoreSupportedProtocolVersion > 0 { 35 | logLine("Horizon is communicating with stellar-core!") 36 | os.Exit(0) 37 | } 38 | } 39 | } 40 | 41 | func logLine(text interface{}) { 42 | log.Println("\033[32;1m[test]\033[0m", text) 43 | } 44 | -------------------------------------------------------------------------------- /tests/test_horizon_ingesting.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "encoding/json" 5 | "log" 6 | "net/http" 7 | "os" 8 | "time" 9 | ) 10 | 11 | type Root struct { 12 | HorizonSequence int32 `json:"history_latest_ledger"` 13 | CoreSequence int32 `json:"core_latest_ledger"` 14 | } 15 | 16 | func main() { 17 | for { 18 | time.Sleep(10 * time.Second) 19 | logLine("Waiting for Horizon to start ingesting") 20 | 21 | resp, err := http.Get("http://localhost:8000") 22 | if err != nil { 23 | logLine(err) 24 | continue 25 | } 26 | 27 | var root Root 28 | decoder := json.NewDecoder(resp.Body) 29 | err = decoder.Decode(&root) 30 | if err != nil { 31 | logLine(err) 32 | continue 33 | } 34 | 35 | if root.HorizonSequence > 0 { 36 | logLine("Horizon started ingesting!") 37 | os.Exit(0) 38 | } 39 | } 40 | } 41 | 42 | func logLine(text interface{}) { 43 | log.Println("\033[32;1m[test]\033[0m", text) 44 | } 45 | -------------------------------------------------------------------------------- /tests/test_horizon_up.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "encoding/json" 5 | "log" 6 | "net/http" 7 | "os" 8 | "time" 9 | ) 10 | 11 | type Root struct { 12 | SupportedProtocolVersion int32 `json:"supported_protocol_version"` 13 | } 14 | 15 | func main() { 16 | for { 17 | time.Sleep(5 * time.Second) 18 | logLine("Waiting for Horizon to start") 19 | 20 | resp, err := http.Get("http://localhost:8000") 21 | if err != nil { 22 | logLine(err) 23 | continue 24 | } 25 | 26 | var root Root 27 | decoder := json.NewDecoder(resp.Body) 28 | err = decoder.Decode(&root) 29 | if err != nil { 30 | logLine(err) 31 | continue 32 | } 33 | 34 | if root.SupportedProtocolVersion > 0 { 35 | logLine("Horizon has started!") 36 | os.Exit(0) 37 | } 38 | } 39 | } 40 | 41 | func logLine(text interface{}) { 42 | log.Println("\033[32;1m[test]\033[0m", text) 43 | } 44 | -------------------------------------------------------------------------------- /tests/test_stellar_rpc_healthy.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "bytes" 5 | "encoding/json" 6 | "fmt" 7 | "log" 8 | "net/http" 9 | "os" 10 | "time" 11 | ) 12 | 13 | type RPCResponse struct { 14 | Result struct { 15 | Status string `json:"status"` 16 | } `json:"result"` 17 | Error struct { 18 | Message string `json:"message"` 19 | } `json:"error"` 20 | } 21 | 22 | func main() { 23 | getHealthRPCRequest := []byte(`{ 24 | "jsonrpc": "2.0", 25 | "id": 10235, 26 | "method": "getHealth" 27 | }`) 28 | 29 | for { 30 | time.Sleep(5 * time.Second) 31 | logLine("Waiting for Stellar RPC to start") 32 | 33 | resp, err := http.Post("http://localhost:8000/rpc", "application/json", bytes.NewBuffer(getHealthRPCRequest)) 34 | if err != nil { 35 | logLine(err) 36 | continue 37 | } 38 | 39 | var rpcResponse RPCResponse 40 | decoder := json.NewDecoder(resp.Body) 41 | err = decoder.Decode(&rpcResponse) 42 | if err != nil { 43 | logLine(err) 44 | continue 45 | } 46 | 47 | logLine(fmt.Sprintf("Stellar RPC health reponse %#v", rpcResponse)) 48 | 49 | if rpcResponse.Result.Status == "healthy" { 50 | logLine("Stellar RPC is healthy!") 51 | os.Exit(0) 52 | } 53 | } 54 | } 55 | 56 | func logLine(text interface{}) { 57 | log.Println("\033[32;1m[test]\033[0m", text) 58 | } 59 | -------------------------------------------------------------------------------- /tests/test_stellar_rpc_up.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "bytes" 5 | "encoding/json" 6 | "fmt" 7 | "log" 8 | "net/http" 9 | "os" 10 | "time" 11 | ) 12 | 13 | type RPCResponse struct { 14 | Result struct { 15 | Status string `json:"status"` 16 | } `json:"result"` 17 | Error struct { 18 | Message string `json:"message"` 19 | } `json:"error"` 20 | } 21 | 22 | func main() { 23 | getHealthRPCRequest := []byte(`{ 24 | "jsonrpc": "2.0", 25 | "id": 10235, 26 | "method": "getHealth" 27 | }`) 28 | 29 | for { 30 | time.Sleep(5 * time.Second) 31 | logLine("Waiting for Stellar RPC to start") 32 | 33 | resp, err := http.Post("http://localhost:8000/rpc", "application/json", bytes.NewBuffer(getHealthRPCRequest)) 34 | if err != nil { 35 | logLine(err) 36 | continue 37 | } 38 | 39 | var rpcResponse RPCResponse 40 | decoder := json.NewDecoder(resp.Body) 41 | err = decoder.Decode(&rpcResponse) 42 | if err != nil { 43 | logLine(err) 44 | continue 45 | } 46 | 47 | logLine(fmt.Sprintf("Stellar RPC health reponse %#v", rpcResponse)) 48 | 49 | if rpcResponse.Result.Status != "" || rpcResponse.Error.Message != "" { 50 | logLine("Stellar RPC has started!") 51 | os.Exit(0) 52 | } 53 | } 54 | } 55 | 56 | func logLine(text interface{}) { 57 | log.Println("\033[32;1m[test]\033[0m", text) 58 | } 59 | --------------------------------------------------------------------------------