diff --git a/.gitea/workflows/triggers/fixturenet-laconicd-test b/.gitea/workflows/triggers/fixturenet-laconicd-test index f377ae09..fb65ac15 100644 --- a/.gitea/workflows/triggers/fixturenet-laconicd-test +++ b/.gitea/workflows/triggers/fixturenet-laconicd-test @@ -5,3 +5,5 @@ Trigger Trigger Trigger Trigger +Trigger +Trigger diff --git a/docs/laconicd-with-console.md b/docs/laconicd-with-console.md index 1589ca07..8d722084 100644 --- a/docs/laconicd-with-console.md +++ b/docs/laconicd-with-console.md @@ -1,9 +1,8 @@ # Running a laconicd fixturenet with console -The following tutorial explains the steps to run a laconicd fixturenet with CLI and web console that displays records in the registry. It is designed as an introduction to Stack Orchestrator and to showcase one component of the Laconic Stack. Prior to Stack Orchestrator, the following 4 repositories had to be cloned and setup manually: +The following tutorial explains the steps to run a laconicd fixturenet with CLI and web console that displays records in the registry. It is designed as an introduction to Stack Orchestrator and to showcase one component of the Laconic Stack. Prior to Stack Orchestrator, the following repositories had to be cloned and setup manually: - https://git.vdb.to/cerc-io/laconicd -- https://git.vdb.to/cerc-io/laconic-sdk - https://git.vdb.to/cerc-io/laconic-registry-cli - https://git.vdb.to/cerc-io/laconic-console @@ -11,7 +10,7 @@ Now, with Stack Orchestrator, it is a few quick commands. Additionally, the `doc ## Setup laconic-so -To avoid hiccups on Mac M1/M2 and any local machine nuances that may affect the user experience, this tutorial is focused on using a fresh Digital Ocean (DO) droplet with similar specs: +To avoid hiccups on Mac M1/M2 and any local machine nuances that may affect the user experience, this tutorial is focused on using a fresh Digital Ocean (DO) droplet with similar specs: 16 GB Memory / 8 Intel vCPUs / 160 GB Disk. 1. Login to the droplet as root (either by SSH key or password set in the DO console) @@ -51,7 +50,7 @@ To avoid hiccups on Mac M1/M2 and any local machine nuances that may affect the 1. Get the repositories ``` - laconic-so --stack fixturenet-laconic-loaded setup-repositories --include git.vdb.to/cerc-io/laconicd,git.vdb.to/cerc-io/laconic-sdk,git.vdb.to/cerc-io/laconic-registry-cli,git.vdb.to/cerc-io/laconic-console + laconic-so --stack fixturenet-laconic-loaded setup-repositories --include git.vdb.to/cerc-io/laconicd ``` 1. Build the containers: @@ -76,6 +75,8 @@ To avoid hiccups on Mac M1/M2 and any local machine nuances that may affect the 1. Create a deployment directory for the stack: ``` laconic-so --stack fixturenet-laconic-loaded deploy init --output laconic-loaded.spec --map-ports-to-host any-same --config LACONIC_HOSTED_ENDPOINT=$BACKEND_ENDPOINT + + # Update port mapping in the laconic-loaded.spec file to resolve port conflicts on host if any ``` ``` laconic-so --stack fixturenet-laconic-loaded deploy create --deployment-dir laconic-loaded-deployment --spec-file laconic-loaded.spec @@ -95,16 +96,15 @@ To avoid hiccups on Mac M1/M2 and any local machine nuances that may affect the You'll see output from `laconicd` and the block height should be >1 to confirm it is running: ``` - laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:29PM INF indexed block exents height=12 module=txindex server=node - laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF Timed out dur=4976.960115 height=13 module=consensus round=0 server=node step=1 - laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF received proposal module=consensus proposal={"Type":32,"block_id":{"hash":"D26C088A711F912ADB97888C269F628DA33153795621967BE44DCB43C3D03CA4","parts":{"hash":"22411A20B7F14CDA33244420FBDDAF24450C0628C7A06034FF22DAC3699DDCC8","total":1}},"height":13,"pol_round":-1,"round":0,"signature":"DEuqnaQmvyYbUwckttJmgKdpRu6eVm9i+9rQ1pIrV2PidkMNdWRZBLdmNghkIrUzGbW8Xd7UVJxtLRmwRASgBg==","timestamp":"2023-04-18T21:30:01.49450663Z"} server=node - laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF received complete proposal block hash=D26C088A711F912ADB97888C269F628DA33153795621967BE44DCB43C3D03CA4 height=13 module=consensus server=node - laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF finalizing commit of block hash={} height=13 module=consensus num_txs=0 root=1A8CA1AF139CCC80EC007C6321D8A63A46A793386EE2EDF9A5CA0AB2C90728B7 server=node - laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF minted coins from module account amount=2059730459416582643aphoton from=mint module=x/bank - laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF executed block height=13 module=state num_invalid_txs=0 num_valid_txs=0 server=node - laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF commit synced commit=436F6D6D697449447B5B363520313037203630203232372039352038352032303820313334203231392032303520313433203130372031343920313431203139203139322038362031323720362031383520323533203137362031333820313735203135392031383620323334203135382031323120313431203230342037335D3A447D - laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF committed state app_hash=416B3CE35F55D086DBCD8F6B958D13C0567F06B9FDB08AAF9FBAEA9E798DCC49 height=13 module=state num_txs=0 server=node - laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF indexed block exents height=13 module=txindex server=node + laconicd-1 | 6:12AM INF indexed block events height=16 module=txindex + laconicd-1 | 6:12AM INF Timed out dur=2993.893332 height=17 module=consensus round=0 step=RoundStepNewHeight + laconicd-1 | 6:12AM INF received proposal module=consensus proposal="Proposal{17/0 (E15D03C180CE607AE8340A1325A0C134DFB4E1ADD992E173C701EBD362523267:1:DF138772FEF0, -1) 6A6F3B0A42B3 @ 2024-07-25T06:12:31.952967053Z}" proposer=86970D950BC9C16F3991A52D9C6DC55BA478A7C6 + laconicd-1 | 6:12AM INF received complete proposal block hash=E15D03C180CE607AE8340A1325A0C134DFB4E1ADD992E173C701EBD362523267 height=17 module=consensus + laconicd-1 | 6:12AM INF finalizing commit of block hash=E15D03C180CE607AE8340A1325A0C134DFB4E1ADD992E173C701EBD362523267 height=17 module=consensus num_txs=0 root=AF4941107DC718ED1425E77A3DC7F1154FB780B7A7DE20288DC43442203527E3 + laconicd-1 | 6:12AM INF finalized block block_app_hash=26A665360BB1EE64E54F97F2A5AB7F621B33A86D9896574000C05DE63F43F788 height=17 module=state num_txs_res=0 num_val_updates=0 + laconicd-1 | 6:12AM INF executed block app_hash=26A665360BB1EE64E54F97F2A5AB7F621B33A86D9896574000C05DE63F43F788 height=17 module=state + laconicd-1 | 6:12AM INF committed state block_app_hash=AF4941107DC718ED1425E77A3DC7F1154FB780B7A7DE20288DC43442203527E3 height=17 module=state + laconicd-1 | 6:12AM INF indexed block events height=17 module=txindex ``` 4. Confirm operation of the registry CLI: @@ -117,30 +117,30 @@ To avoid hiccups on Mac M1/M2 and any local machine nuances that may affect the { "version": "0.3.0", "node": { - "id": "4216af2ac9f68bda33a38803fc1b5c9559312c1d", + "id": "6e072894aa1f5d9535a1127a0d7a7f8e65100a2c", "network": "laconic_9000-1", "moniker": "localtestnet" }, "sync": { - "latest_block_hash": "1BDF4CB9AE2390DA65BCF997C83133C18014FCDDCAE03708488F0B56FCEEA429", - "latest_block_height": "5", - "latest_block_time": "2023-08-09 16:00:30.386903172 +0000 UTC", - "catching_up": false + "latestBlockHash": "260102C283D0411CFBA0270F7DC182650FFCA737A2F6F652A985F6065696F590", + "latestBlockHeight": "49", + "latestBlockTime": "2024-07-25 06:14:05.626744215 +0000 UTC", + "catchingUp": false }, "validator": { - "address": "651FBC700B747C76E90ACFC18CC9508C3D0905B9", - "voting_power": "1000000000000000" + "address": "86970D950BC9C16F3991A52D9C6DC55BA478A7C6", + "votingPower": "1000000000000000" }, "validators": [ { - "address": "651FBC700B747C76E90ACFC18CC9508C3D0905B9", - "voting_power": "1000000000000000", - "proposer_priority": "0" + "address": "86970D950BC9C16F3991A52D9C6DC55BA478A7C6", + "votingPower": "1000000000000000", + "proposerPriority": "0" } ], - "num_peers": "0", + "numPeers": "0", "peers": [], - "disk_usage": "292.0K" + "diskUsage": "688K" } ``` @@ -186,13 +186,13 @@ wns 1. The following command will create a bond and publish a record: ``` -laconic-so --stack fixturenet-laconic-loaded deploy exec cli ./scripts/create-demo-records.sh +laconic-so deployment --dir laconic-loaded-deployment exec cli ./scripts/create-demo-records.sh ``` You'll get an output like: ``` -Balance is: 99998999999999998999600000 +Balance is: 9.9999e+25 Created bond with id: dd88e8d6f9567b32b28e70552aea4419c5dd3307ebae85a284d1fe38904e301a Published demo-record-1.yml with id: bafyreierh3xnfivexlscdwubvczmddsnf46uytyfvrbdhkjzztvsz6ruly ``` @@ -223,5 +223,5 @@ record: - e.g,: ``` -laconic-so --stack fixturenet-laconic-loaded deploy exec cli "laconic registry record list" +laconic-so deployment --dir laconic-loaded-deployment exec cli "laconic registry record list" ``` diff --git a/stack_orchestrator/data/compose/docker-compose-fixturenet-laconicd.yml b/stack_orchestrator/data/compose/docker-compose-fixturenet-laconicd.yml index 38b8d442..0cb8c271 100644 --- a/stack_orchestrator/data/compose/docker-compose-fixturenet-laconicd.yml +++ b/stack_orchestrator/data/compose/docker-compose-fixturenet-laconicd.yml @@ -2,10 +2,11 @@ services: laconicd: restart: unless-stopped image: cerc/laconicd:local - command: ["sh", "/docker-entrypoint-scripts.d/create-fixturenet.sh"] + command: ["bash", "/docker-entrypoint-scripts.d/create-fixturenet.sh"] environment: - TEST_AUCTION_ENABLED: ${TEST_AUCTION_ENABLED} - TEST_REGISTRY_EXPIRY: ${TEST_REGISTRY_EXPIRY} + TEST_AUCTION_ENABLED: ${TEST_AUCTION_ENABLED:-false} + TEST_REGISTRY_EXPIRY: ${TEST_REGISTRY_EXPIRY:-false} + ONBOARDING_ENABLED: ${ONBOARDING_ENABLED:-false} volumes: # The cosmos-sdk node's database directory: - laconicd-data:/root/.laconicd @@ -19,11 +20,9 @@ services: - "26657" - "26656" - "9473" - - "8545" - - "8546" - "9090" - - "9091" - "1317" + cli: image: cerc/laconic-registry-cli:local volumes: diff --git a/stack_orchestrator/data/config/fixturenet-laconicd/create-fixturenet.sh b/stack_orchestrator/data/config/fixturenet-laconicd/create-fixturenet.sh index de3c6679..ed70132d 100644 --- a/stack_orchestrator/data/config/fixturenet-laconicd/create-fixturenet.sh +++ b/stack_orchestrator/data/config/fixturenet-laconicd/create-fixturenet.sh @@ -8,68 +8,67 @@ KEY="mykey" CHAINID="laconic_9000-1" MONIKER="localtestnet" KEYRING="test" -KEYALGO="eth_secp256k1" -LOGLEVEL="info" -# trace evm -TRACE="--trace" -# TRACE="" +KEYALGO="secp256k1" +LOGLEVEL="${LOGLEVEL:-info}" + if [ "$1" == "clean" ] || [ ! -d "$HOME/.laconicd/data/blockstore.db" ]; then # validate dependencies are installed - command -v jq > /dev/null 2>&1 || { echo >&2 "jq not installed. More info: https://stedolan.github.io/jq/download/"; exit 1; } + command -v jq > /dev/null 2>&1 || { + echo >&2 "jq not installed. More info: https://stedolan.github.io/jq/download/" + exit 1 + } # remove existing daemon and client rm -rf $HOME/.laconicd/* - rm -rf $HOME/.laconic/* if [ -n "`which make`" ]; then make install fi - laconicd config keyring-backend $KEYRING - laconicd config chain-id $CHAINID + laconicd config set client chain-id $CHAINID + laconicd config set client keyring-backend $KEYRING # if $KEY exists it should be deleted laconicd keys add $KEY --keyring-backend $KEYRING --algo $KEYALGO # Set moniker and chain-id for Ethermint (Moniker can be anything, chain-id must be an integer) - laconicd init $MONIKER --chain-id $CHAINID + laconicd init $MONIKER --chain-id $CHAINID --default-denom photon - # Change parameter token denominations to aphoton - cat $HOME/.laconicd/config/genesis.json | jq '.app_state["staking"]["params"]["bond_denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json - cat $HOME/.laconicd/config/genesis.json | jq '.app_state["crisis"]["constant_fee"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json - cat $HOME/.laconicd/config/genesis.json | jq '.app_state["gov"]["deposit_params"]["min_deposit"][0]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json - cat $HOME/.laconicd/config/genesis.json | jq '.app_state["mint"]["params"]["mint_denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json - # Custom modules - cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["record_rent"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json - cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_rent"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json - cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_auction_commit_fee"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json - cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_auction_reveal_fee"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json - cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_auction_minimum_bid"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json + update_genesis() { + jq "$1" $HOME/.laconicd/config/genesis.json > $HOME/.laconicd/config/tmp_genesis.json && + mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json + } if [[ "$TEST_REGISTRY_EXPIRY" == "true" ]]; then echo "Setting timers for expiry tests." - cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["record_rent_duration"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json - cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_grace_period"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json - cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_rent_duration"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json + update_genesis '.app_state["registry"]["params"]["record_rent_duration"]="60s"' + update_genesis '.app_state["registry"]["params"]["authority_grace_period"]="60s"' + update_genesis '.app_state["registry"]["params"]["authority_rent_duration"]="60s"' fi if [[ "$TEST_AUCTION_ENABLED" == "true" ]]; then echo "Enabling auction and setting timers." - cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_auction_enabled"]=true' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json - cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_rent_duration"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json - cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_grace_period"]="300s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json - cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_auction_commits_duration"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json - cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_auction_reveals_duration"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json + update_genesis '.app_state["registry"]["params"]["authority_auction_enabled"]=true' + update_genesis '.app_state["registry"]["params"]["authority_rent_duration"]="60s"' + update_genesis '.app_state["registry"]["params"]["authority_grace_period"]="300s"' + update_genesis '.app_state["registry"]["params"]["authority_auction_commits_duration"]="60s"' + update_genesis '.app_state["registry"]["params"]["authority_auction_reveals_duration"]="60s"' + fi + + if [[ "$ONBOARDING_ENABLED" == "true" ]]; then + echo "Enabling validator onboarding." + + update_genesis '.app_state["onboarding"]["params"]["onboarding_enabled"]=true' fi # increase block time (?) - cat $HOME/.laconicd/config/genesis.json | jq '.consensus_params["block"]["time_iota_ms"]="1000"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json + update_genesis '.consensus["params"]["block"]["time_iota_ms"]="1000"' # Set gas limit in genesis - cat $HOME/.laconicd/config/genesis.json | jq '.consensus_params["block"]["max_gas"]="10000000"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json + update_genesis '.consensus["params"]["block"]["max_gas"]="10000000"' # disable produce empty block if [[ "$OSTYPE" == "darwin"* ]]; then @@ -78,30 +77,6 @@ if [ "$1" == "clean" ] || [ ! -d "$HOME/.laconicd/data/blockstore.db" ]; then sed -i 's/create_empty_blocks = true/create_empty_blocks = false/g' $HOME/.laconicd/config/config.toml fi - if [[ $1 == "pending" ]]; then - if [[ "$OSTYPE" == "darwin"* ]]; then - sed -i '' 's/create_empty_blocks_interval = "0s"/create_empty_blocks_interval = "30s"/g' $HOME/.laconicd/config/config.toml - sed -i '' 's/timeout_propose = "3s"/timeout_propose = "30s"/g' $HOME/.laconicd/config/config.toml - sed -i '' 's/timeout_propose_delta = "500ms"/timeout_propose_delta = "5s"/g' $HOME/.laconicd/config/config.toml - sed -i '' 's/timeout_prevote = "1s"/timeout_prevote = "10s"/g' $HOME/.laconicd/config/config.toml - sed -i '' 's/timeout_prevote_delta = "500ms"/timeout_prevote_delta = "5s"/g' $HOME/.laconicd/config/config.toml - sed -i '' 's/timeout_precommit = "1s"/timeout_precommit = "10s"/g' $HOME/.laconicd/config/config.toml - sed -i '' 's/timeout_precommit_delta = "500ms"/timeout_precommit_delta = "5s"/g' $HOME/.laconicd/config/config.toml - sed -i '' 's/timeout_commit = "5s"/timeout_commit = "150s"/g' $HOME/.laconicd/config/config.toml - sed -i '' 's/timeout_broadcast_tx_commit = "10s"/timeout_broadcast_tx_commit = "150s"/g' $HOME/.laconicd/config/config.toml - else - sed -i 's/create_empty_blocks_interval = "0s"/create_empty_blocks_interval = "30s"/g' $HOME/.laconicd/config/config.toml - sed -i 's/timeout_propose = "3s"/timeout_propose = "30s"/g' $HOME/.laconicd/config/config.toml - sed -i 's/timeout_propose_delta = "500ms"/timeout_propose_delta = "5s"/g' $HOME/.laconicd/config/config.toml - sed -i 's/timeout_prevote = "1s"/timeout_prevote = "10s"/g' $HOME/.laconicd/config/config.toml - sed -i 's/timeout_prevote_delta = "500ms"/timeout_prevote_delta = "5s"/g' $HOME/.laconicd/config/config.toml - sed -i 's/timeout_precommit = "1s"/timeout_precommit = "10s"/g' $HOME/.laconicd/config/config.toml - sed -i 's/timeout_precommit_delta = "500ms"/timeout_precommit_delta = "5s"/g' $HOME/.laconicd/config/config.toml - sed -i 's/timeout_commit = "5s"/timeout_commit = "150s"/g' $HOME/.laconicd/config/config.toml - sed -i 's/timeout_broadcast_tx_commit = "10s"/timeout_broadcast_tx_commit = "150s"/g' $HOME/.laconicd/config/config.toml - fi - fi - # Enable telemetry (prometheus metrics: http://localhost:1317/metrics?format=prometheus) if [[ "$OSTYPE" == "darwin"* ]]; then sed -i '' 's/enabled = false/enabled = true/g' $HOME/.laconicd/config/app.toml @@ -114,23 +89,25 @@ if [ "$1" == "clean" ] || [ ! -d "$HOME/.laconicd/data/blockstore.db" ]; then fi # Allocate genesis accounts (cosmos formatted addresses) - laconicd add-genesis-account $KEY 100000000000000000000000000aphoton --keyring-backend $KEYRING + laconicd genesis add-genesis-account $KEY 100000000000000000000000000photon --keyring-backend $KEYRING # Sign genesis transaction - laconicd gentx $KEY 1000000000000000000000aphoton --keyring-backend $KEYRING --chain-id $CHAINID + laconicd genesis gentx $KEY 1000000000000000000000photon --keyring-backend $KEYRING --chain-id $CHAINID # Collect genesis tx - laconicd collect-gentxs + laconicd genesis collect-gentxs # Run this to ensure everything worked and that the genesis file is setup correctly - laconicd validate-genesis - - if [[ $1 == "pending" ]]; then - echo "pending mode is on, please wait for the first block committed." - fi + laconicd genesis validate else echo "Using existing database at $HOME/.laconicd. To replace, run '`basename $0` clean'" fi # Start the node (remove the --pruning=nothing flag if historical queries are not needed) -laconicd start --pruning=nothing --evm.tracer=json $TRACE --log_level $LOGLEVEL --minimum-gas-prices=0.0001aphoton --json-rpc.api eth,txpool,personal,net,debug,web3,miner --api.enable --gql-server --gql-playground +laconicd start \ + --pruning=nothing \ + --log_level $LOGLEVEL \ + --minimum-gas-prices=0.0001photon \ + --api.enable \ + --rpc.laddr="tcp://0.0.0.0:26657" \ + --gql-server --gql-playground diff --git a/stack_orchestrator/data/config/mainnet-laconicd/scripts/run-laconicd.sh b/stack_orchestrator/data/config/mainnet-laconicd/scripts/run-laconicd.sh index 50a82c69..b8972026 100755 --- a/stack_orchestrator/data/config/mainnet-laconicd/scripts/run-laconicd.sh +++ b/stack_orchestrator/data/config/mainnet-laconicd/scripts/run-laconicd.sh @@ -4,15 +4,12 @@ if [[ -n "$CERC_SCRIPT_DEBUG" ]]; then fi #TODO: pass these in from the caller -TRACE="--trace" LOGLEVEL="info" laconicd start \ --pruning=nothing \ - --evm.tracer=json $TRACE \ --log_level $LOGLEVEL \ - --minimum-gas-prices=0.0001aphoton \ - --json-rpc.api eth,txpool,personal,net,debug,web3,miner \ + --minimum-gas-prices=0.0001photon \ --api.enable \ --gql-server \ --gql-playground diff --git a/stack_orchestrator/data/container-build/cerc-laconic-registry-cli/create-demo-records.sh b/stack_orchestrator/data/container-build/cerc-laconic-registry-cli/create-demo-records.sh index a95d73bd..69391f21 100755 --- a/stack_orchestrator/data/container-build/cerc-laconic-registry-cli/create-demo-records.sh +++ b/stack_orchestrator/data/container-build/cerc-laconic-registry-cli/create-demo-records.sh @@ -10,11 +10,11 @@ demo_records_dir="scripts/demo-records" # Check we have funds funds_response=$(${registry_command} account get --address $(cat my-address.txt)) -funds_balance=$(echo ${funds_response} | jq -r .[0].balance[0].quantity) +funds_balance=$(echo ${funds_response} | jq -r ".[0].balance[0].quantity") echo "Balance is: ${funds_balance}" # Create a bond -bond_create_result=$(${registry_command} bond create --type aphoton --quantity 1000000000) +bond_create_result=$(${registry_command} bond create --type photon --quantity 1000000000) bond_id=$(echo ${bond_create_result} | jq -r .bondId) echo "Created bond with id: ${bond_id}" diff --git a/stack_orchestrator/data/container-build/cerc-nextjs-base/scripts/build-app.sh b/stack_orchestrator/data/container-build/cerc-nextjs-base/scripts/build-app.sh index 9842aa0a..2360d2d8 100755 --- a/stack_orchestrator/data/container-build/cerc-nextjs-base/scripts/build-app.sh +++ b/stack_orchestrator/data/container-build/cerc-nextjs-base/scripts/build-app.sh @@ -5,8 +5,11 @@ if [ -n "$CERC_SCRIPT_DEBUG" ]; then fi CERC_MIN_NEXTVER=13.4.2 +CERC_DEFAULT_WEBPACK_VER="5.93.0" CERC_NEXT_VERSION="${CERC_NEXT_VERSION:-keep}" +CERC_WEBPACK_VERSION="${CERC_WEBPACK_VERSION:-keep}" + CERC_BUILD_TOOL="${CERC_BUILD_TOOL}" if [ -z "$CERC_BUILD_TOOL" ]; then if [ -f "pnpm-lock.yaml" ]; then @@ -25,13 +28,21 @@ WORK_DIR="${1:-/app}" cd "${WORK_DIR}" || exit 1 +if [ -f "next.config.mjs" ]; then + NEXT_CONFIG_JS="next.config.mjs" + IMPORT_OR_REQUIRE="import" +else + NEXT_CONFIG_JS="next.config.js" + IMPORT_OR_REQUIRE="require" +fi + # If this file doesn't exist at all, we'll get errors below. -if [ ! -f "next.config.js" ]; then - touch next.config.js +if [ ! -f "${NEXT_CONFIG_JS}" ]; then + touch ${NEXT_CONFIG_JS} fi if [ ! -f "next.config.dist" ]; then - cp next.config.js next.config.dist + cp $NEXT_CONFIG_JS next.config.dist fi which js-beautify >/dev/null @@ -39,17 +50,34 @@ if [ $? -ne 0 ]; then npm i -g js-beautify fi -js-beautify next.config.dist > next.config.js -echo "" >> next.config.js +# js-beautify formats NEXTJS_CONFIG_FILE (ie next.config.js / next.config.mjs) so we can reliably transformable later +js-beautify next.config.dist > ${NEXT_CONFIG_JS} +echo "" >> ${NEXT_CONFIG_JS} -WEBPACK_REQ_LINE=$(grep -n "require([\'\"]webpack[\'\"])" next.config.js | cut -d':' -f1) -if [ -z "$WEBPACK_REQ_LINE" ]; then - cat > next.config.js.0 < ${NEXT_CONFIG_JS}.0 < ${NEXT_CONFIG_JS}.0 <> ${NEXT_CONFIG_JS}.0 < next.config.js.1 < ${NEXT_CONFIG_JS}.1 < { if (v.startsWith('CERC_')) { @@ -66,23 +95,24 @@ try { return a; }, {}); } +console.log(envMap); EOF -CONFIG_LINES=$(wc -l next.config.js | awk '{ print $1 }') -ENV_LINE=$(grep -n 'env:' next.config.js | cut -d':' -f1) -WEBPACK_CONF_LINE=$(egrep -n 'webpack:\s+\([^,]+,' next.config.js | cut -d':' -f1) +CONFIG_LINES=$(wc -l ${NEXT_CONFIG_JS} | awk '{ print $1 }') +ENV_LINE=$(grep -n 'env:' ${NEXT_CONFIG_JS} | cut -d':' -f1) +WEBPACK_CONF_LINE=$(egrep -n 'webpack:\s+\([^,]+,' ${NEXT_CONFIG_JS} | cut -d':' -f1) NEXT_SECTION_ADJUSTMENT=0 if [ -n "$WEBPACK_CONF_LINE" ]; then - WEBPACK_CONF_VAR=$(egrep -n 'webpack:\s+\([^,]+,' next.config.js | cut -d',' -f1 | cut -d'(' -f2) - head -$(( ${WEBPACK_CONF_LINE} )) next.config.js > next.config.js.2 - cat > next.config.js.3 < ${NEXT_CONFIG_JS}.2 + cat > ${NEXT_CONFIG_JS}.3 < next.config.js.2 - cat > next.config.js.3 < ${NEXT_CONFIG_JS}.2 + cat > ${NEXT_CONFIG_JS}.3 < { config.plugins.push(new webpack.DefinePlugin(envMap)); return config; @@ -91,15 +121,24 @@ EOF NEXT_SECTION_ADJUSTMENT=1 NEXT_SECTION_LINE=$ENV_LINE else - echo "WARNING: Cannot find location to insert environment variable map in next.config.js" 1>&2 - rm -f next.config.js.* + echo "WARNING: Cannot find location to insert environment variable map in ${NEXT_CONFIG_JS}" 1>&2 + rm -f ${NEXT_CONFIG_JS}.* NEXT_SECTION_LINE=0 fi -tail -$(( ${CONFIG_LINES} - ${NEXT_SECTION_LINE} + ${NEXT_SECTION_ADJUSTMENT} )) next.config.js > next.config.js.5 +tail -$(( ${CONFIG_LINES} - ${NEXT_SECTION_LINE} + ${NEXT_SECTION_ADJUSTMENT} )) ${NEXT_CONFIG_JS} > ${NEXT_CONFIG_JS}.4 -cat next.config.js.* | sed 's/^ *//g' | js-beautify | grep -v 'process\.\env\.' | js-beautify > next.config.js -rm next.config.js.* +rm -f ${NEXT_CONFIG_JS} +for ((i=0; i <=5; i++)); do + if [ -f "${NEXT_CONFIG_JS}.${i}" ]; then + if [ $i -le 2 ] ; then + cat ${NEXT_CONFIG_JS}.${i} >> ${NEXT_CONFIG_JS} + else + cat ${NEXT_CONFIG_JS}.${i} | sed 's/^ *//g' | js-beautify | grep -v 'process\.\env\.' | js-beautify >> ${NEXT_CONFIG_JS} + fi + fi +done +rm ${NEXT_CONFIG_JS}.* "${SCRIPT_DIR}/find-env.sh" "$(pwd)" > .env-list.json @@ -115,6 +154,19 @@ if [ "$CERC_NEXT_VERSION" != "keep" ] && [ "$CUR_NEXT_VERSION" != "$CERC_NEXT_VE mv package.json.$$ package.json fi +CUR_WEBPACK_VERSION="`jq -r '.dependencies.webpack' package.json`" +if [ -z "$CUR_WEBPACK_VERSION" ]; then + CUR_WEBPACK_VERSION="`jq -r '.devDependencies.webpack' package.json`" +fi +if [ "${CERC_WEBPACK_VERSION}" != "keep" ] || [ "${CUR_WEBPACK_VERSION}" == "null" ]; then + if [ -z "$CERC_WEBPACK_VERSION" ] || [ "$CERC_WEBPACK_VERSION" == "keep" ]; then + CERC_WEBPACK_VERSION="${CERC_DEFAULT_WEBPACK_VER}" + fi + echo "Webpack is required for env variable substitution. Adding to webpack@$CERC_WEBPACK_VERSION to dependencies..." 1>&2 + cat package.json | jq ".dependencies.webpack = \"$CERC_WEBPACK_VERSION\"" > package.json.$$ + mv package.json.$$ package.json +fi + time $CERC_BUILD_TOOL install || exit 1 CUR_NEXT_VERSION=`jq -r '.version' node_modules/next/package.json` diff --git a/stack_orchestrator/data/container-build/cerc-nextjs-base/scripts/find-env.sh b/stack_orchestrator/data/container-build/cerc-nextjs-base/scripts/find-env.sh index 59cb3d49..508017fc 100755 --- a/stack_orchestrator/data/container-build/cerc-nextjs-base/scripts/find-env.sh +++ b/stack_orchestrator/data/container-build/cerc-nextjs-base/scripts/find-env.sh @@ -20,9 +20,11 @@ for d in $(find . -maxdepth 1 -type d | grep -v '\./\.' | grep '/' | cut -d'/' - done done -NEXT_CONF="next.config.js next.config.dist" +NEXT_CONF="next.config.mjs next.config.js next.config.dist" for f in $NEXT_CONF; do - cat "$f" | tr -s '[:blank:]' '\n' | tr -s '[{},()]' '\n' | egrep -o 'process.env.[A-Za-z0-9_]+' >> $TMPF + if [ -f "$f" ]; then + cat "$f" | tr -s '[:blank:]' '\n' | tr -s '[{},()]' '\n' | egrep -o 'process.env.[A-Za-z0-9_]+' >> $TMPF + fi done cat $TMPF | sort -u | jq --raw-input . | jq --slurp . diff --git a/stack_orchestrator/data/container-build/cerc-ping-pub/config/laconic-chaindata-template.json b/stack_orchestrator/data/container-build/cerc-ping-pub/config/laconic-chaindata-template.json index 282a61aa..e4d3c604 100644 --- a/stack_orchestrator/data/container-build/cerc-ping-pub/config/laconic-chaindata-template.json +++ b/stack_orchestrator/data/container-build/cerc-ping-pub/config/laconic-chaindata-template.json @@ -13,7 +13,7 @@ "addr_prefix": "ethm", "logo": "/logos/cosmos.svg", "assets": [{ - "base": "aphoton", + "base": "photon", "symbol": "LNT", "exponent": "6", "coingecko_id": "cosmos", diff --git a/tests/fixturenet-laconicd/run-test.sh b/tests/fixturenet-laconicd/run-test.sh index 1b3f1f34..3946457a 100755 --- a/tests/fixturenet-laconicd/run-test.sh +++ b/tests/fixturenet-laconicd/run-test.sh @@ -37,7 +37,7 @@ initial_block_number=null while [ "$initial_block_number" == "null" ] && [ $elapsed_time -lt $timeout ]; do sleep 10 echo "$(date +"%Y-%m-%d %T"): Waiting for initial block..." - initial_block_number=$(docker exec laconicd-laconicd-1 /usr/bin/laconicd status | jq -r .SyncInfo.latest_block_height) + initial_block_number=$(docker exec laconicd-laconicd-1 /usr/bin/laconicd status | jq -r .sync_info.latest_block_height) current_time=$(date +%s) elapsed_time=$((current_time - start_time)) done @@ -54,7 +54,7 @@ if [[ $initial_block_number != "null" ]]; then while [ "$subsequent_block_number" -le $((initial_block_number + 5)) ] && [ $elapsed_time -lt $timeout ]; do sleep 10 echo "$(date +"%Y-%m-%d %T"): Waiting for five blocks or $timeout seconds..." - subsequent_block_number=$(docker exec laconicd-laconicd-1 /usr/bin/laconicd status | jq -r .SyncInfo.latest_block_height) + subsequent_block_number=$(docker exec laconicd-laconicd-1 /usr/bin/laconicd status | jq -r .sync_info.latest_block_height) current_time=$(date +%s) elapsed_time=$((current_time - start_time)) done