diff --git a/scripts/wasmd/env b/scripts/wasmd/env index 618ce744..d6645dc5 100644 --- a/scripts/wasmd/env +++ b/scripts/wasmd/env @@ -1,5 +1,5 @@ # Choose from https://hub.docker.com/r/cosmwasm/wasmd/tags REPOSITORY="cosmwasm/wasmd" -VERSION="v0.31.0-rc0" +VERSION="v0.40.0" CONTAINER_NAME="wasmd" diff --git a/scripts/wasmd/init.sh b/scripts/wasmd/init.sh index a88d06d6..6e991625 100755 --- a/scripts/wasmd/init.sh +++ b/scripts/wasmd/init.sh @@ -2,12 +2,12 @@ set -o errexit -o nounset -o pipefail command -v shellcheck >/dev/null && shellcheck "$0" -echo "Waiting for blockchain and LCD server to be available ..." -timeout 60 bash -c "until curl -s http://localhost:1319/node_info > /dev/null; do sleep 0.5; done" +echo "Waiting for blockchain and Tendermint RPC server to be available ..." +timeout 60 bash -c "until curl -s http://localhost:26659/health > /dev/null; do sleep 0.5; done" # The chain is unreliable in the first second of its existence (https://gist.github.com/webmaster128/8175692d4af5e6c572fddda7a9ef437c) sleep 2 echo "Waiting for height to be >= 1 ..." -timeout 20 bash -c "until [ \"\$( curl -s http://localhost:1319/blocks/latest | jq -r '.block.header.height // 0' )\" -ge 1 ]; do sleep 0.5; done" +timeout 20 bash -c "until [ \"\$( curl -s http://localhost:26659/status | jq -r '.result.sync_info.latest_block_height // 0' )\" -ge 1 ]; do sleep 0.5; done" echo "Okay, thank you for your patience." SCRIPT_DIR="$(realpath "$(dirname "$0")")" diff --git a/scripts/wasmd/template/.wasmd/46acc979d5c1d0f65ff1a5a480e632df3bccadf9.address b/scripts/wasmd/template/.wasmd/46acc979d5c1d0f65ff1a5a480e632df3bccadf9.address new file mode 100644 index 00000000..d57369f7 --- /dev/null +++ b/scripts/wasmd/template/.wasmd/46acc979d5c1d0f65ff1a5a480e632df3bccadf9.address @@ -0,0 +1 @@ +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMy0wNS0zMSAxMzo0ODoyNS43NzY1OTU0MjIgKzAwMDAgVVRDIG09KzEuMjc2NTU2NzEwIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiTFF1S3A4bG8yT3RkY2hjWSJ9.Azznc81jL876uGDNiGip1RbCsrKkwyQJb9eOqrAR03YmyHsNPVo56Q.z4LQEsxqYwWrPtc8.8Snx2HnDn9A6psM53b8jRtEcWBfc_ApHqeuZqbn3QVl5NZVLPznCBWIBMJZg530ny2EzUany-VCNcDo_fSEWMsVPu_BX1NdDbeQ71GdWQ1WlrNFjGtUtUF6NUs__q_Hk2jcUSC4wDc9VWIFhOQYu3AF3vbI1KtRG8R0NlVHlqyxKWXWCit4yh6l6bxG33jtSfr-cwhmbQDDg9nZqGfjFVJE3r-1StULrMWuBC7Ed8LeQT6PwLVeQH9aq.4cBIKu90PjNLhbVk28sUnw \ No newline at end of file diff --git a/scripts/wasmd/template/.wasmd/5c91cce874b02546e5705542eef4bcf3b82e602e.address b/scripts/wasmd/template/.wasmd/5c91cce874b02546e5705542eef4bcf3b82e602e.address deleted file mode 100644 index dce13f24..00000000 --- a/scripts/wasmd/template/.wasmd/5c91cce874b02546e5705542eef4bcf3b82e602e.address +++ /dev/null @@ -1 +0,0 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMS0wNC0yOCAxOToxMjo0OS4yNjIyMDgwNzUgKzAwMDAgVVRDIG09KzAuMDk2ODczMTgxIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiSF9XUWNudGY2VGxqNFQxNiJ9.WAjSXIdvgurfHpOcsbGbDfF_dkYzuDgsqzwvaCVVC_ZWs_QJPabMcQ.0JKzC9a_gwfHG8BX.gNg23iY-12eghObLGoExcCO71scieougnJ5IWxUL_0G_-kSuMnUsms_MY4M4XtoaOFJudIXHbEOirKCjUjGeht91Zhiw6zD7pF0drzonXbzb_A-oce5xUt6fdw6S85uIZLOR0WDBsbNLOLKyHwIQoQUDf0i9kjpAksycSsnEpRlw4Wc3mIpA8bBebX0xZ4hanYuIBBeMSLdIH0g0NBm8EyIqW5kfT-Jxw1lC7Pqk_aIQT6nehP8T5Jgl.M696Eo97gziveGPF8dkGEA \ No newline at end of file diff --git a/scripts/wasmd/template/.wasmd/config/app.toml b/scripts/wasmd/template/.wasmd/config/app.toml index 4855c250..ecabaa9a 100644 --- a/scripts/wasmd/template/.wasmd/config/app.toml +++ b/scripts/wasmd/template/.wasmd/config/app.toml @@ -8,17 +8,16 @@ # The minimum gas prices a validator is willing to accept for processing a # transaction. A transaction's fees must meet the minimum of any denomination # specified in this config (e.g. 0.25token1;0.0001token2). -minimum-gas-prices = "" +minimum-gas-prices = "0stake" -# default: the last 100 states are kept in addition to every 500th state; pruning at 10 block intervals +# default: the last 362880 states are kept, pruning at 10 block intervals # nothing: all historic states will be saved, nothing will be deleted (i.e. archiving node) -# everything: all saved states will be deleted, storing only the current state; pruning at 10 block intervals -# custom: allow pruning options to be manually specified through 'pruning-keep-recent', 'pruning-keep-every', and 'pruning-interval' +# everything: 2 latest states will be kept; pruning at 10 block intervals. +# custom: allow pruning options to be manually specified through 'pruning-keep-recent', and 'pruning-interval' pruning = "default" # These are applied if and only if the pruning strategy is custom. pruning-keep-recent = "0" -pruning-keep-every = "0" pruning-interval = "0" # HaltHeight contains a non-zero block height at which a node will gracefully @@ -60,6 +59,23 @@ inter-block-cache = true # ["message.sender", "message.recipient"] index-events = [] +# IavlCacheSize set the size of the iavl tree cache (in number of nodes). +iavl-cache-size = 781250 + +# IAVLDisableFastNode enables or disables the fast node feature of IAVL. +# Default is false. +iavl-disable-fastnode = false + +# IAVLLazyLoading enable/disable the lazy loading of iavl store. +# Default is false. +iavl-lazy-loading = false + +# AppDBBackend defines the database backend type to use for the application and snapshots DBs. +# An empty string indicates that a fallback will be used. +# First fallback is the deprecated compile-time types.DBBackend value. +# Second fallback (if the types.DBBackend also isn't set), is the db-backend value set in Tendermint's config.toml. +app-db-backend = "" + ############################################################################### ### Telemetry Configuration ### ############################################################################### @@ -118,12 +134,48 @@ rpc-read-timeout = 10 # RPCWriteTimeout defines the Tendermint RPC write timeout (in seconds). rpc-write-timeout = 0 -# RPCMaxBodyBytes defines the Tendermint maximum response body (in bytes). +# RPCMaxBodyBytes defines the Tendermint maximum request body (in bytes). rpc-max-body-bytes = 1000000 # EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk). enabled-unsafe-cors = true +############################################################################### +### Rosetta Configuration ### +############################################################################### + +[rosetta] + +# Enable defines if the Rosetta API server should be enabled. +enable = true + +# Address defines the Rosetta API server to listen on. +address = ":8080" + +# Network defines the name of the blockchain that will be returned by Rosetta. +blockchain = "app" + +# Network defines the name of the network that will be returned by Rosetta. +network = "network" + +# Retries defines the number of retries when connecting to the node before failing. +retries = 3 + +# Offline defines if Rosetta server should run in offline mode. +offline = false + +# EnableDefaultSuggestedFee defines if the server should suggest fee by default. +# If 'construction/medata' is called without gas limit and gas price, +# suggested fee based on gas-to-suggest and denom-to-suggest will be given. +enable-fee-suggestion = false + +# GasToSuggest defines gas limit when calculating the fee +gas-to-suggest = 200000 + +# DenomToSuggest defines the defult denom for fee suggestion. +# Price must be in minimum-gas-prices. +denom-to-suggest = "uatom" + ############################################################################### ### gRPC Configuration ### ############################################################################### @@ -134,7 +186,31 @@ enabled-unsafe-cors = true enable = true # Address defines the gRPC server address to bind to. -address = "0.0.0.0:9090" +address = "localhost:9090" + +# MaxRecvMsgSize defines the max message size in bytes the server can receive. +# The default value is 10MB. +max-recv-msg-size = "10485760" + +# MaxSendMsgSize defines the max message size in bytes the server can send. +# The default value is math.MaxInt32. +max-send-msg-size = "2147483647" + +############################################################################### +### gRPC Web Configuration ### +############################################################################### + +[grpc-web] + +# GRPCWebEnable defines if the gRPC-web should be enabled. +# NOTE: gRPC must also be enabled, otherwise, this configuration is a no-op. +enable = true + +# Address defines the gRPC-web server address to bind to. +address = "localhost:9091" + +# EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk). +enable-unsafe-cors = false ############################################################################### ### State Sync Configuration ### @@ -145,8 +221,56 @@ address = "0.0.0.0:9090" [state-sync] # snapshot-interval specifies the block interval at which local state sync snapshots are -# taken (0 to disable). Must be a multiple of pruning-keep-every. +# taken (0 to disable). snapshot-interval = 0 # snapshot-keep-recent specifies the number of recent snapshots to keep and serve (0 to keep all). snapshot-keep-recent = 2 + +############################################################################### +### Store / State Streaming ### +############################################################################### + +[store] +streamers = [] + +[streamers] +[streamers.file] +keys = ["*", ] +write_dir = "" +prefix = "" + +# output-metadata specifies if output the metadata file which includes the abci request/responses +# during processing the block. +output-metadata = "true" + +# stop-node-on-error specifies if propagate the file streamer errors to consensus state machine. +stop-node-on-error = "true" + +# fsync specifies if call fsync after writing the files. +fsync = "false" + +############################################################################### +### Mempool ### +############################################################################### + +[mempool] +# Setting max-txs to 0 will allow for a unbounded amount of transactions in the mempool. +# Setting max_txs to negative 1 (-1) will disable transactions from being inserted into the mempool. +# Setting max_txs to a positive number (> 0) will limit the number of transactions in the mempool, by the specified amount. +# +# Note, this configuration only applies to SDK built-in app-side mempool +# implementations. +max-txs = "5000" + +[wasm] +# Smart query gas limit is the max gas to be used in a smart query contract call +query_gas_limit = 3000000 + +# in-memory cache for Wasm contracts. Set to 0 to disable. +# The value is in MiB not bytes +memory_cache_size = 100 + +# Simulation gas limit is the max gas to be used in a tx simulation call. +# When not set the consensus max block gas is used instead +# simulation_gas_limit = diff --git a/scripts/wasmd/template/.wasmd/config/client.toml b/scripts/wasmd/template/.wasmd/config/client.toml new file mode 100644 index 00000000..04ab702e --- /dev/null +++ b/scripts/wasmd/template/.wasmd/config/client.toml @@ -0,0 +1,17 @@ +# This is a TOML config file. +# For more information, see https://github.com/toml-lang/toml + +############################################################################### +### Client Configuration ### +############################################################################### + +# The network chain ID +chain-id = "testing" +# The keyring's backend, where the keys are stored (os|file|kwallet|pass|test|memory) +keyring-backend = "os" +# CLI output format (text|json) +output = "text" +# : to Tendermint RPC interface for this chain +node = "tcp://localhost:26657" +# Transaction broadcasting mode (sync|async) +broadcast-mode = "sync" diff --git a/scripts/wasmd/template/.wasmd/config/config.toml b/scripts/wasmd/template/.wasmd/config/config.toml index f210de17..db0abe7e 100644 --- a/scripts/wasmd/template/.wasmd/config/config.toml +++ b/scripts/wasmd/template/.wasmd/config/config.toml @@ -3,7 +3,7 @@ # NOTE: Any path below can be absolute (e.g. "/var/myawesomeapp/data") or # relative to the home directory (e.g. "data"). The home directory is -# "$HOME/.tendermint" by default, but could be changed via $TMHOME env variable +# "$HOME/.cometbft" by default, but could be changed via $CMTHOME env variable # or --home cmd flag. ####################################################################### @@ -11,16 +11,19 @@ ####################################################################### # TCP or UNIX socket address of the ABCI application, -# or the name of an ABCI application compiled in with the Tendermint binary +# or the name of an ABCI application compiled in with the CometBFT binary proxy_app = "tcp://127.0.0.1:26658" # A custom human readable name for this node moniker = "node001" -# If this node is many blocks behind the tip of the chain, FastSync +# If this node is many blocks behind the tip of the chain, BlockSync # allows them to catchup quickly by downloading blocks in parallel # and verifying their commits -fast_sync = true +# +# Deprecated: this key will be removed and BlockSync will be enabled +# unconditionally in the next major release. +block_sync = true # Database backend: goleveldb | cleveldb | boltdb | rocksdb | badgerdb # * goleveldb (github.com/syndtr/goleveldb - most popular implementation) @@ -63,7 +66,7 @@ priv_validator_key_file = "config/priv_validator_key.json" # Path to the JSON file containing the last sign state of a validator priv_validator_state_file = "data/priv_validator_state.json" -# TCP or UNIX socket address for Tendermint to listen on for +# TCP or UNIX socket address for CometBFT to listen on for # connections from an external PrivValidator process priv_validator_laddr = "" @@ -136,6 +139,33 @@ max_subscription_clients = 100 # the estimated # maximum number of broadcast_tx_commit calls per block. max_subscriptions_per_client = 5 +# Experimental parameter to specify the maximum number of events a node will +# buffer, per subscription, before returning an error and closing the +# subscription. Must be set to at least 100, but higher values will accommodate +# higher event throughput rates (and will use more memory). +experimental_subscription_buffer_size = 200 + +# Experimental parameter to specify the maximum number of RPC responses that +# can be buffered per WebSocket client. If clients cannot read from the +# WebSocket endpoint fast enough, they will be disconnected, so increasing this +# parameter may reduce the chances of them being disconnected (but will cause +# the node to use more memory). +# +# Must be at least the same as "experimental_subscription_buffer_size", +# otherwise connections could be dropped unnecessarily. This value should +# ideally be somewhat higher than "experimental_subscription_buffer_size" to +# accommodate non-subscription-related RPC responses. +experimental_websocket_write_buffer_size = 200 + +# If a WebSocket client cannot read fast enough, at present we may +# silently drop events instead of generating an error or disconnecting the +# client. +# +# Enabling this experimental parameter will cause the WebSocket connection to +# be closed instead if it cannot read fast enough, allowing for greater +# predictability in subscription behavior. +experimental_close_on_slow_client = false + # How long to wait for a tx to be committed during /broadcast_tx_commit. # WARNING: Using a value larger than 10s will result in increasing the # global HTTP write timeout, which applies to all connections and endpoints. @@ -149,17 +179,17 @@ max_body_bytes = 1000000 max_header_bytes = 1048576 # The path to a file containing certificate that is used to create the HTTPS server. -# Might be either absolute path or path related to Tendermint's config directory. +# Might be either absolute path or path related to CometBFT's config directory. # If the certificate is signed by a certificate authority, # the certFile should be the concatenation of the server's certificate, any intermediates, # and the CA's certificate. -# NOTE: both tls_cert_file and tls_key_file must be present for Tendermint to create HTTPS server. +# NOTE: both tls_cert_file and tls_key_file must be present for CometBFT to create HTTPS server. # Otherwise, HTTP server is run. tls_cert_file = "" # The path to a file containing matching private key that is used to create the HTTPS server. -# Might be either absolute path or path related to Tendermint's config directory. -# NOTE: both tls-cert-file and tls-key-file must be present for Tendermint to create HTTPS server. +# Might be either absolute path or path related to CometBFT's config directory. +# NOTE: both tls-cert-file and tls-key-file must be present for CometBFT to create HTTPS server. # Otherwise, HTTP server is run. tls_key_file = "" @@ -177,7 +207,8 @@ laddr = "tcp://0.0.0.0:26656" # Address to advertise to peers for them to dial # If empty, will use the same port as the laddr, # and will introspect on the listener or use UPnP -# to figure out the address. +# to figure out the address. ip and port are required +# example: 159.89.10.97:26656 external_address = "" # Comma separated list of seed nodes to connect to @@ -244,6 +275,11 @@ dial_timeout = "3s" ####################################################### [mempool] +# Mempool version to use: +# 1) "v0" - (default) FIFO mempool. +# 2) "v1" - prioritized mempool (deprecated; will be removed in the next release). +version = "v0" + recheck = true broadcast = true wal_dir = "" @@ -273,6 +309,22 @@ max_tx_bytes = 1048576 # XXX: Unused due to https://github.com/tendermint/tendermint/issues/5796 max_batch_bytes = 0 +# ttl-duration, if non-zero, defines the maximum amount of time a transaction +# can exist for in the mempool. +# +# Note, if ttl-num-blocks is also defined, a transaction will be removed if it +# has existed in the mempool at least ttl-num-blocks number of blocks or if it's +# insertion time into the mempool is beyond ttl-duration. +ttl-duration = "0s" + +# ttl-num-blocks, if non-zero, defines the maximum number of blocks a transaction +# can exist for in the mempool. +# +# Note, if ttl-duration is also defined, a transaction will be removed if it +# has existed in the mempool at least ttl-num-blocks number of blocks or if +# it's insertion time into the mempool is beyond ttl-duration. +ttl-num-blocks = 0 + ####################################################### ### State Sync Configuration Options ### ####################################################### @@ -302,15 +354,24 @@ discovery_time = "15s" # Will create a new, randomly named directory within, and remove it when done. temp_dir = "" -####################################################### -### Fast Sync Configuration Connections ### -####################################################### -[fastsync] +# The timeout duration before re-requesting a chunk, possibly from a different +# peer (default: 1 minute). +chunk_request_timeout = "10s" -# Fast Sync version to use: -# 1) "v0" (default) - the legacy fast sync implementation -# 2) "v1" - refactor of v0 version for better testability -# 2) "v2" - complete redesign of v0, optimized for testability & readability +# The number of concurrent chunk fetchers to run (default: 1). +chunk_fetchers = "4" + +####################################################### +### Block Sync Configuration Options ### +####################################################### +[blocksync] + +# Block Sync version to use: +# +# In v0.37, v1 and v2 of the block sync protocols were deprecated. +# Please use v0 instead. +# +# 1) "v0" - the default block sync implementation version = "v0" ####################################################### @@ -354,6 +415,17 @@ create_empty_blocks_interval = "0s" peer_gossip_sleep_duration = "100ms" peer_query_maj23_sleep_duration = "2s" +####################################################### +### Storage Configuration Options ### +####################################################### +[storage] + +# Set to true to discard ABCI responses from the state store, which can save a +# considerable amount of disk space. Set to false to ensure ABCI responses are +# persisted. ABCI responses are required for /block_results RPC queries, and to +# reindex events in the command-line tool. +discard_abci_responses = false + ####################################################### ### Transaction Indexer Configuration Options ### ####################################################### @@ -368,8 +440,14 @@ peer_query_maj23_sleep_duration = "2s" # 1) "null" # 2) "kv" (default) - the simplest possible indexer, backed by key-value storage (defaults to levelDB; see DBBackend). # - When "kv" is chosen "tx.height" and "tx.hash" will always be indexed. +# 3) "psql" - the indexer services backed by PostgreSQL. +# When "kv" or "psql" is chosen "tx.height" and "tx.hash" will always be indexed. indexer = "kv" +# The PostgreSQL connection configuration, the connection format: +# postgresql://:@:/? +psql-conn = "" + ####################################################### ### Instrumentation Configuration Options ### ####################################################### @@ -390,4 +468,4 @@ prometheus_listen_addr = ":26660" max_open_connections = 3 # Instrumentation namespace -namespace = "tendermint" +namespace = "cometbft" diff --git a/scripts/wasmd/template/.wasmd/config/genesis.json b/scripts/wasmd/template/.wasmd/config/genesis.json index 51b894b3..296c4688 100644 --- a/scripts/wasmd/template/.wasmd/config/genesis.json +++ b/scripts/wasmd/template/.wasmd/config/genesis.json @@ -1,123 +1,211 @@ { "app_hash": "", "app_state": { + "07-tendermint": null, "auth": { "accounts": [ { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1tjgue6r5kqj5dets24pwaa9u7wuzucpwuva0rv" + "account_number": "0", + "address": "wasm1g6kvj7w4c8g0vhl35kjgpe3jmuauet0e5tnevj", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1pkptre7fdkl6gfrzlesjjvhxhlc3r4gm32kke3" + "account_number": "1", + "address": "wasm1pkptre7fdkl6gfrzlesjjvhxhlc3r4gm32kke3", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm10dyr9899g6t0pelew4nvf4j5c3jcgv0r5d3a5l" + "account_number": "2", + "address": "wasm10dyr9899g6t0pelew4nvf4j5c3jcgv0r5d3a5l", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1xy4yqngt0nlkdcenxymg8tenrghmek4n3u2lwa" + "account_number": "3", + "address": "wasm1xy4yqngt0nlkdcenxymg8tenrghmek4n3u2lwa", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm142u9fgcjdlycfcez3lw8x6x5h7rfjlnfaallkd" + "account_number": "4", + "address": "wasm142u9fgcjdlycfcez3lw8x6x5h7rfjlnfaallkd", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1hsm76p4ahyhl5yh3ve9ur49r5kemhp2r93f89d" + "account_number": "5", + "address": "wasm1hsm76p4ahyhl5yh3ve9ur49r5kemhp2r93f89d", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm14qemq0vw6y3gc3u3e0aty2e764u4gs5lndxgyk" + "account_number": "6", + "address": "wasm14qemq0vw6y3gc3u3e0aty2e764u4gs5lndxgyk", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1hhg2rlu9jscacku2wwckws7932qqqu8xm5ca8y" + "account_number": "7", + "address": "wasm1hhg2rlu9jscacku2wwckws7932qqqu8xm5ca8y", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1xv9tklw7d82sezh9haa573wufgy59vmwnxhnsl" + "account_number": "8", + "address": "wasm1xv9tklw7d82sezh9haa573wufgy59vmwnxhnsl", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm17yg9mssjenmc3jkqth6ulcwj9cxujrxxg9nmzk" + "account_number": "9", + "address": "wasm17yg9mssjenmc3jkqth6ulcwj9cxujrxxg9nmzk", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1f7j7ryulwjfe9ljplvhtcaxa6wqgula3nh873j" + "account_number": "10", + "address": "wasm1f7j7ryulwjfe9ljplvhtcaxa6wqgula3nh873j", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1lvrwcvrqlc5ktzp2c4t22xgkx29q3y83426at5" + "account_number": "11", + "address": "wasm1lvrwcvrqlc5ktzp2c4t22xgkx29q3y83426at5", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1vkv9sfwaak76weyamqx0flmng2vuquxqjq3flu" + "account_number": "12", + "address": "wasm1vkv9sfwaak76weyamqx0flmng2vuquxqjq3flu", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm106jwym4s9aujcmes26myzzwqsccw09sd3nap5h" + "account_number": "13", + "address": "wasm106jwym4s9aujcmes26myzzwqsccw09sd3nap5h", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1c7wpeen2uv8thayf7g8q2rgpm29clj0dzlu7t9" + "account_number": "14", + "address": "wasm1c7wpeen2uv8thayf7g8q2rgpm29clj0dzlu7t9", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1mjxpv9ft30wer7ma7kwfxhm42l379xuttrjcl3" + "account_number": "15", + "address": "wasm1mjxpv9ft30wer7ma7kwfxhm42l379xuttrjcl3", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1cjsxept9rkggzxztslae9ndgpdyt240842kpxh" + "account_number": "16", + "address": "wasm1cjsxept9rkggzxztslae9ndgpdyt240842kpxh", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm17d0jcz59jf68g52vq38tuuncmwwjk42us8fnse" + "account_number": "17", + "address": "wasm17d0jcz59jf68g52vq38tuuncmwwjk42us8fnse", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1p6xs63q4g7np99ttv5nd3yzkt8n4qxa45jkgsk" + "account_number": "18", + "address": "wasm1p6xs63q4g7np99ttv5nd3yzkt8n4qxa45jkgsk", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1meeu3jl268txxytwmmrsljk8rawh6n2mhwp76p" + "account_number": "19", + "address": "wasm1meeu3jl268txxytwmmrsljk8rawh6n2mhwp76p", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1cak6lnpfxs035xd88sq8e4zujsm8g2g953hfan" + "account_number": "20", + "address": "wasm1cak6lnpfxs035xd88sq8e4zujsm8g2g953hfan", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1x3x8kyypx8z6q7fx3gw65x29mhl5gg8qtf4xkg" + "account_number": "21", + "address": "wasm1x3x8kyypx8z6q7fx3gw65x29mhl5gg8qtf4xkg", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm18c27m2rj4lg74md03ujralvt562c097nd7scqw" + "account_number": "22", + "address": "wasm18c27m2rj4lg74md03ujralvt562c097nd7scqw", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1q2y53e6x7s5mlddtd2qkcjr3nwr4dszvs4js2q" + "account_number": "23", + "address": "wasm1q2y53e6x7s5mlddtd2qkcjr3nwr4dszvs4js2q", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1paa2gstlk7c98n27dw2g6tp6fyqvf32m3x04t6" + "account_number": "24", + "address": "wasm1paa2gstlk7c98n27dw2g6tp6fyqvf32m3x04t6", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1rvxjd8k6xvssz2eerfzemvat35pttfgrsz43tx" + "account_number": "25", + "address": "wasm1rvxjd8k6xvssz2eerfzemvat35pttfgrsz43tx", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm12zejt8d9xl70jd2333p4p265m2nr9h8g6pgmly" + "account_number": "26", + "address": "wasm12zejt8d9xl70jd2333p4p265m2nr9h8g6pgmly", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1exctm2036jtwyc9v3ftqfzmgnv9tdhj2sskt4u" + "account_number": "27", + "address": "wasm1exctm2036jtwyc9v3ftqfzmgnv9tdhj2sskt4u", + "pub_key": null, + "sequence": "0" }, { "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "wasm1f3pws3ztnp3s4nn5zxqdrl9vlqv5avkq3rjfe7" + "account_number": "28", + "address": "wasm1f3pws3ztnp3s4nn5zxqdrl9vlqv5avkq3rjfe7", + "pub_key": null, + "sequence": "0" } ], "params": { @@ -128,6 +216,9 @@ "tx_size_cost_per_byte": "10" } }, + "authz": { + "authorization": [] + }, "bank": { "balances": [ { @@ -247,6 +338,19 @@ } ] }, + { + "address": "wasm1g6kvj7w4c8g0vhl35kjgpe3jmuauet0e5tnevj", + "coins": [ + { + "amount": "1000000000", + "denom": "ucosm" + }, + { + "amount": "1000000000", + "denom": "ustake" + } + ] + }, { "address": "wasm1f3pws3ztnp3s4nn5zxqdrl9vlqv5avkq3rjfe7", "coins": [ @@ -286,19 +390,6 @@ } ] }, - { - "address": "wasm1tjgue6r5kqj5dets24pwaa9u7wuzucpwuva0rv", - "coins": [ - { - "amount": "1000000000", - "denom": "ucosm" - }, - { - "amount": "1000000000", - "denom": "ustake" - } - ] - }, { "address": "wasm1vkv9sfwaak76weyamqx0flmng2vuquxqjq3flu", "coins": [ @@ -513,12 +604,23 @@ "default_send_enabled": true, "send_enabled": [] }, - "supply": [] + "send_enabled": [], + "supply": [ + { + "amount": "29000000000", + "denom": "ucosm" + }, + { + "amount": "29000000000", + "denom": "ustake" + } + ] }, "capability": { "index": "1", "owners": [] }, + "consensus": null, "crisis": { "constant_fee": { "amount": "1000", @@ -533,11 +635,12 @@ }, "outstanding_rewards": [], "params": { - "base_proposer_reward": "0.010000000000000000", - "bonus_proposer_reward": "0.040000000000000000", + "base_proposer_reward": "0.000000000000000000", + "bonus_proposer_reward": "0.000000000000000000", "community_tax": "0.020000000000000000", "withdraw_addr_enabled": true }, + "previous_proposer": "", "validator_accumulated_commissions": [], "validator_current_rewards": [], "validator_historical_rewards": [], @@ -546,6 +649,16 @@ "evidence": { "evidence": [] }, + "feegrant": { + "allowances": [] + }, + "feeibc": { + "fee_enabled_channels": [], + "forward_relayers": [], + "identified_fees": [], + "registered_counterparty_payees": [], + "registered_payees": [] + }, "genutil": { "gen_txs": [ { @@ -565,15 +678,16 @@ }, "public_key": { "@type": "/cosmos.crypto.secp256k1.PubKey", - "key": "AjOB0SSyyLVBcOe0GK0TuLmXlCVWY/h8cnhKvwbnbdII" + "key": "AuFzwOjmNa2qCjK5SyaWwu2DH8tpIcqhm2EdwoWeZVs1" }, "sequence": "0" } - ] + ], + "tip": null }, "body": { "extension_options": [], - "memo": "aea250e19e1f2274c0be3059609fc10ffa79dd64@172.17.0.3:26656", + "memo": "219053a07bda81b7669c126f8308c668fe0b217a@172.17.0.2:26656", "messages": [ { "@type": "/cosmos.staking.v1beta1.MsgCreateValidator", @@ -582,7 +696,7 @@ "max_rate": "0.200000000000000000", "rate": "0.100000000000000000" }, - "delegator_address": "wasm1tjgue6r5kqj5dets24pwaa9u7wuzucpwuva0rv", + "delegator_address": "wasm1g6kvj7w4c8g0vhl35kjgpe3jmuauet0e5tnevj", "description": { "details": "", "identity": "", @@ -593,9 +707,9 @@ "min_self_delegation": "1", "pubkey": { "@type": "/cosmos.crypto.ed25519.PubKey", - "key": "BP6bNEKlXpH+HUe7x0NO/GhSvz08dXgNUI+PSkjUiM4=" + "key": "Wl41mDACwzdenqf7Ehq9jvDGRJ3AyFp0J9N6jAbnV3s=" }, - "validator_address": "wasmvaloper1tjgue6r5kqj5dets24pwaa9u7wuzucpwfsgndk", + "validator_address": "wasmvaloper1g6kvj7w4c8g0vhl35kjgpe3jmuauet0ephx9zg", "value": { "amount": "250000000", "denom": "ustake" @@ -606,30 +720,46 @@ "timeout_height": "0" }, "signatures": [ - "RqDfX8WkDlyJNIlTZw13yBi/HhujaSjuJBUij+izS5MI3b6zAi6yALzR2+18McjzqjqaE61kLvg+07ETJuE+0g==" + "xBiKWraC8m+L0KCtBGWnQlD0eEKEqcwPdjDY02YNefsTr52v1xwoFieFuUbfuLkUEBQXWp/cRNwBFR9qTkV0rA==" ] } ] }, "gov": { - "deposit_params": { + "deposit_params": null, + "deposits": [], + "params": { + "burn_proposal_deposit_prevote": false, + "burn_vote_quorum": false, + "burn_vote_veto": true, "max_deposit_period": "172800s", "min_deposit": [ { "amount": "10000000", "denom": "ustake" } - ] - }, - "starting_proposal_id": "1", - "tally_params": { + ], + "min_initial_deposit_ratio": "0.000000000000000000", "quorum": "0.334000000000000000", "threshold": "0.500000000000000000", - "veto_threshold": "0.334000000000000000" - }, - "voting_params": { + "veto_threshold": "0.334000000000000000", "voting_period": "172800s" - } + }, + "proposals": [], + "starting_proposal_id": "1", + "tally_params": null, + "votes": [], + "voting_params": null + }, + "group": { + "group_members": [], + "group_policies": [], + "group_policy_seq": "0", + "group_seq": "0", + "groups": [], + "proposal_seq": "0", + "proposals": [], + "votes": [] }, "ibc": { "channel_genesis": { @@ -637,6 +767,7 @@ "acknowledgements": [], "channels": [], "commitments": [], + "next_channel_sequence": "0", "receipts": [], "recv_sequences": [], "send_sequences": [] @@ -644,6 +775,9 @@ "client_genesis": { "clients": [], "clients_consensus": [], + "clients_metadata": [], + "create_localhost": false, + "next_client_sequence": "0", "params": { "allowed_clients": [ "06-solomachine", @@ -653,7 +787,32 @@ }, "connection_genesis": { "client_connection_paths": [], - "connections": [] + "connections": [], + "next_connection_sequence": "0", + "params": { + "max_expected_time_per_block": "30000000000" + } + } + }, + "interchainaccounts": { + "controller_genesis_state": { + "active_channels": [], + "interchain_accounts": [], + "params": { + "controller_enabled": true + }, + "ports": [] + }, + "host_genesis_state": { + "active_channels": [], + "interchain_accounts": [], + "params": { + "allow_messages": [ + "*" + ], + "host_enabled": true + }, + "port": "icahost" } }, "mint": { @@ -670,6 +829,10 @@ "mint_denom": "ustake" } }, + "nft": { + "classes": [], + "entries": [] + }, "params": null, "slashing": { "missed_blocks": [], @@ -683,14 +846,21 @@ "signing_infos": [] }, "staking": { + "delegations": [], + "exported": false, "last_total_power": "0", + "last_validator_powers": [], "params": { "bond_denom": "ustake", "historical_entries": 10000, "max_entries": 7, "max_validators": 100, + "min_commission_rate": "0.000000000000000000", "unbonding_time": "1814400s" - } + }, + "redelegations": [], + "unbonding_delegations": [], + "validators": [] }, "transfer": { "denom_traces": [], @@ -703,20 +873,24 @@ "upgrade": {}, "vesting": {}, "wasm": { + "codes": [], + "contracts": [], "params": { "code_upload_access": { + "address": "", + "addresses": [], "permission": "Everybody" }, "instantiate_default_permission": "Everybody" - } + }, + "sequences": [] } }, "chain_id": "testing", "consensus_params": { "block": { "max_bytes": "22020096", - "max_gas": "-1", - "time_iota_ms": "10" + "max_gas": "-1" }, "evidence": { "max_age_duration": "172800000000000", @@ -728,8 +902,10 @@ "ed25519" ] }, - "version": {} + "version": { + "app": "0" + } }, - "genesis_time": "2021-04-28T19:12:49.122276671Z", + "genesis_time": "2023-05-31T13:48:23.278155129Z", "initial_height": "1" } diff --git a/scripts/wasmd/template/.wasmd/config/gentx/gentx-219053a07bda81b7669c126f8308c668fe0b217a.json b/scripts/wasmd/template/.wasmd/config/gentx/gentx-219053a07bda81b7669c126f8308c668fe0b217a.json new file mode 100644 index 00000000..64ee2ca5 --- /dev/null +++ b/scripts/wasmd/template/.wasmd/config/gentx/gentx-219053a07bda81b7669c126f8308c668fe0b217a.json @@ -0,0 +1 @@ +{"body":{"messages":[{"@type":"/cosmos.staking.v1beta1.MsgCreateValidator","description":{"moniker":"node001","identity":"","website":"","security_contact":"","details":""},"commission":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"min_self_delegation":"1","delegator_address":"wasm1g6kvj7w4c8g0vhl35kjgpe3jmuauet0e5tnevj","validator_address":"wasmvaloper1g6kvj7w4c8g0vhl35kjgpe3jmuauet0ephx9zg","pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Wl41mDACwzdenqf7Ehq9jvDGRJ3AyFp0J9N6jAbnV3s="},"value":{"denom":"ustake","amount":"250000000"}}],"memo":"219053a07bda81b7669c126f8308c668fe0b217a@172.17.0.2:26656","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[{"public_key":{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AuFzwOjmNa2qCjK5SyaWwu2DH8tpIcqhm2EdwoWeZVs1"},"mode_info":{"single":{"mode":"SIGN_MODE_DIRECT"}},"sequence":"0"}],"fee":{"amount":[],"gas_limit":"200000","payer":"","granter":""},"tip":null},"signatures":["xBiKWraC8m+L0KCtBGWnQlD0eEKEqcwPdjDY02YNefsTr52v1xwoFieFuUbfuLkUEBQXWp/cRNwBFR9qTkV0rA=="]} diff --git a/scripts/wasmd/template/.wasmd/config/gentx/gentx-aea250e19e1f2274c0be3059609fc10ffa79dd64.json b/scripts/wasmd/template/.wasmd/config/gentx/gentx-aea250e19e1f2274c0be3059609fc10ffa79dd64.json deleted file mode 100644 index db66307f..00000000 --- a/scripts/wasmd/template/.wasmd/config/gentx/gentx-aea250e19e1f2274c0be3059609fc10ffa79dd64.json +++ /dev/null @@ -1 +0,0 @@ -{"body":{"messages":[{"@type":"/cosmos.staking.v1beta1.MsgCreateValidator","description":{"moniker":"node001","identity":"","website":"","security_contact":"","details":""},"commission":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"min_self_delegation":"1","delegator_address":"wasm1tjgue6r5kqj5dets24pwaa9u7wuzucpwuva0rv","validator_address":"wasmvaloper1tjgue6r5kqj5dets24pwaa9u7wuzucpwfsgndk","pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"BP6bNEKlXpH+HUe7x0NO/GhSvz08dXgNUI+PSkjUiM4="},"value":{"denom":"ustake","amount":"250000000"}}],"memo":"aea250e19e1f2274c0be3059609fc10ffa79dd64@172.17.0.3:26656","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[{"public_key":{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AjOB0SSyyLVBcOe0GK0TuLmXlCVWY/h8cnhKvwbnbdII"},"mode_info":{"single":{"mode":"SIGN_MODE_DIRECT"}},"sequence":"0"}],"fee":{"amount":[],"gas_limit":"200000","payer":"","granter":""}},"signatures":["RqDfX8WkDlyJNIlTZw13yBi/HhujaSjuJBUij+izS5MI3b6zAi6yALzR2+18McjzqjqaE61kLvg+07ETJuE+0g=="]} diff --git a/scripts/wasmd/template/.wasmd/config/node_key.json b/scripts/wasmd/template/.wasmd/config/node_key.json index a23f5a9d..f95b4a59 100644 --- a/scripts/wasmd/template/.wasmd/config/node_key.json +++ b/scripts/wasmd/template/.wasmd/config/node_key.json @@ -1 +1 @@ -{"priv_key":{"type":"tendermint/PrivKeyEd25519","value":"DW7KyPeVXdiFn7hFFhA1rYzv5d5+5SJHo4bN8coxLicvNrTDtpWgf8GjVMdgvJlR1xOY8h3Rg8vlm+7TfXxSDQ=="}} \ No newline at end of file +{"priv_key":{"type":"tendermint/PrivKeyEd25519","value":"A6ZsZSk2zdZL3YeCiem6mL8pBlI++ETuaoWX45/5/rUN/QglRAokL1S2EBWyl6t5B0CZ5ilRy/vdzcywgdhS5A=="}} \ No newline at end of file diff --git a/scripts/wasmd/template/.wasmd/config/priv_validator_key.json b/scripts/wasmd/template/.wasmd/config/priv_validator_key.json index af1c1faa..746d3e76 100644 --- a/scripts/wasmd/template/.wasmd/config/priv_validator_key.json +++ b/scripts/wasmd/template/.wasmd/config/priv_validator_key.json @@ -1,11 +1,11 @@ { - "address": "3D447C15EAE7C1121E00435AB012F124A514DE5F", + "address": "A705A5DDB2B289539B3FC9023274D19A807F52DD", "pub_key": { "type": "tendermint/PubKeyEd25519", - "value": "BP6bNEKlXpH+HUe7x0NO/GhSvz08dXgNUI+PSkjUiM4=" + "value": "Wl41mDACwzdenqf7Ehq9jvDGRJ3AyFp0J9N6jAbnV3s=" }, "priv_key": { "type": "tendermint/PrivKeyEd25519", - "value": "Pz/Tz88OySXwTEy6cdygCcZkZOHnJyUpM8h0vYO3JrAE/ps0QqVekf4dR7vHQ078aFK/PTx1eA1Qj49KSNSIzg==" + "value": "yXLB65vCSDp7MnaXiP4CR4h1T8u0PoTNx9oaZ+pV7I5aXjWYMALDN16ep/sSGr2O8MZEncDIWnQn03qMBudXew==" } } \ No newline at end of file diff --git a/scripts/wasmd/template/.wasmd/keyhash b/scripts/wasmd/template/.wasmd/keyhash index b9f378b7..a9483311 100755 --- a/scripts/wasmd/template/.wasmd/keyhash +++ b/scripts/wasmd/template/.wasmd/keyhash @@ -1 +1 @@ -$2a$10$k8hjFNzXqTtzIHmnlmf7Hev7Y70vx39r1bD7Htj8hLXJPNnYhg4pi \ No newline at end of file +$2a$10$Mbw.f93oEBpmvaOBQyyUR.TdPqVGmQVDeOEcF6nYj8UNvQqzXyOze \ No newline at end of file diff --git a/scripts/wasmd/template/.wasmd/validator.info b/scripts/wasmd/template/.wasmd/validator.info index e1070645..73b5883e 100644 --- a/scripts/wasmd/template/.wasmd/validator.info +++ b/scripts/wasmd/template/.wasmd/validator.info @@ -1 +1 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMS0wNC0yOCAxOToxMjo0OS4yNTgwODMwMzIgKzAwMDAgVVRDIG09KzAuMDkyNzQ4MTM4IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiOE55NktPTHZ0Z0wyeWdZdyJ9.aUeIj6LPohJ7r9m_pByAP_DSfDPGUY-lsUvPt9cJfsnT_D43PrUuzA.XV5oqJrLiM9mwcwd.8EsHSAHV9pdl29Tw9A5EKdmcdCjWEo3pWjp3t52DwPEHnn-NGmzeKv0t0DWuvYtaY8t0AAadtiAv1VQqp5J0-PpUtwpc9YsMUNrb2Z-3f7swkRbhap4qofoqZ3XSBRpFGdcmT7MpZbQdMlG5tkJUoG0vOtuxyMsXc_xl9t6uaX5yhzIvTMV0Qp8LJ0lPr3P8I52weihxLvp3a5_-cgWdPvQuTaVBJHh3eI10hna_mkewwYxOmBaXsH1XAkr_VhGc54BkA8h64XAu9Ci8jKmnyjd-N9n6tAwyLJgn_VTVl8IYf_NY64_MCVvPlffhSKRi74_kz2CzCsH_y776giIWvwW69xaulYVk8AB5G8qLFfxNjBgC.SmgI7IFtsABQCNlgveqMmw \ No newline at end of file +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMy0wNS0zMSAxMzo0ODoyNS43MzkxNTE3MTQgKzAwMDAgVVRDIG09KzEuMjM5MTEyOTYwIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiZHBTeDBLLUpnbGRfelFVLSJ9.rt9aldqmQvbubYRm-WrkP2wFkrD-Iw6UaF1rubXbdUQYTKcMauoofw.80DUPvcF4gmT1g7W.1Q-DGKR718nIVyOLgFDQZBbbCjNcjXyTTzt5W_3wi9gaiGyq4y1pU-KIyl7VCP9x5ccdM3sTRofVzhoCa4jthwPJT1uzx80_qiCazTwBqrcb6tdCbBQUNDAvXteOIjxqaow3dYufD6LvJ0hszAnydSKU_25dk9qzW8d0Kqv4U1KkwJMq7ryQLJrWv_wtXVcrd4Gwfz4qszbA3WiGgpsxr5nB5mIxEoIzFdRhaX6hBoZ5Cy8vas_DQpVO0eMU_z9vmcwxV0qqk8jOkVGh2pjSIfeZcKdSlRiIoThaaoA4KG660tfOwuoUii1LxZmCsEQN7TnPu6yvbS7C3zQUMmbE0eReR0z3lF8XQE5gJpQ3kdZA-9UWOI7_KoLTF0VMafd18DD3mMUU3XZW3gQ1xpSgYjeXj3MCQT3_ZWaL5z9c8lMPoJeyHJgo-6T51p4h3H1rQPraHs0x27U.pLqlPlIHGb4rU8rQ5Wm7OQ \ No newline at end of file