Merge pull request #1434 from cosmos/upgrade-wasmd

Upgrade wasmd to 0.40.0
This commit is contained in:
Simon Warta 2023-06-13 12:58:31 +02:00 committed by GitHub
commit e21ce59675
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 514 additions and 117 deletions

View File

@ -400,7 +400,7 @@ describe("CosmWasmClient", () => {
const nonExistentAddress = makeRandomAddress();
const client = await CosmWasmClient.connect(wasmd.endpoint);
await expectAsync(client.queryContractRaw(nonExistentAddress, configKey)).toBeRejectedWithError(
/not found/i,
/no such contract/i,
);
});
});
@ -460,7 +460,7 @@ describe("CosmWasmClient", () => {
const client = await CosmWasmClient.connect(wasmd.endpoint);
await expectAsync(
client.queryContractSmart(nonExistentAddress, { verifier: {} }),
).toBeRejectedWithError(/not found/i);
).toBeRejectedWithError(/no such contract/i);
});
});
});

View File

@ -233,7 +233,9 @@ describe("WasmExtension", () => {
assert(hackatomCodeId);
const client = await makeWasmClient(wasmd.endpoint);
const nonExistentAddress = makeRandomAddress();
await expectAsync(client.wasm.getContractInfo(nonExistentAddress)).toBeRejectedWithError(/not found/i);
await expectAsync(client.wasm.getContractInfo(nonExistentAddress)).toBeRejectedWithError(
/no such contract/i,
);
});
});
@ -301,7 +303,7 @@ describe("WasmExtension", () => {
const client = await makeWasmClient(wasmd.endpoint);
const nonExistentAddress = makeRandomAddress();
await expectAsync(client.wasm.getAllContractState(nonExistentAddress)).toBeRejectedWithError(
/not found/i,
/no such contract/i,
);
});
});
@ -332,7 +334,7 @@ describe("WasmExtension", () => {
const nonExistentAddress = makeRandomAddress();
await expectAsync(
client.wasm.queryContractRaw(nonExistentAddress, hackatomConfigKey),
).toBeRejectedWithError(/not found/i);
).toBeRejectedWithError(/no such contract/i);
});
});
@ -362,7 +364,7 @@ describe("WasmExtension", () => {
const nonExistentAddress = makeRandomAddress();
const request = { verifier: {} };
await expectAsync(client.wasm.queryContractSmart(nonExistentAddress, request)).toBeRejectedWithError(
/not found/i,
/no such contract/i,
);
});
});

View File

@ -98,8 +98,8 @@ describe("SigningCosmWasmClient", () => {
};
const memo = "Go go go";
const gasUsed = await client.simulate(alice.address0, [executeContractMsg], memo);
expect(gasUsed).toBeGreaterThanOrEqual(101_000);
expect(gasUsed).toBeLessThanOrEqual(200_000);
expect(gasUsed).toBeGreaterThanOrEqual(70_000);
expect(gasUsed).toBeLessThanOrEqual(140_000);
client.disconnect();
});
});

View File

@ -105,13 +105,13 @@ export const validator = {
*
* `jq ".app_state.genutil.gen_txs[0].body.messages[0].delegator_address" scripts/wasmd/template/.wasmd/config/genesis.json`
*/
delegatorAddress: "wasm1tjgue6r5kqj5dets24pwaa9u7wuzucpwuva0rv",
delegatorAddress: "wasm1g6kvj7w4c8g0vhl35kjgpe3jmuauet0e5tnevj",
/**
* validator_address from /cosmos.staking.v1beta1.MsgCreateValidator in scripts/wasmd/template/.wasmd/config/genesis.json
*
* `jq ".app_state.genutil.gen_txs[0].body.messages[0].validator_address" scripts/wasmd/template/.wasmd/config/genesis.json`
*/
validatorAddress: "wasmvaloper1tjgue6r5kqj5dets24pwaa9u7wuzucpwfsgndk",
validatorAddress: "wasmvaloper1g6kvj7w4c8g0vhl35kjgpe3jmuauet0ephx9zg",
accountNumber: 0,
sequence: 1,
};

View File

@ -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.2"
CONTAINER_NAME="wasmd"

View File

@ -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")")"

View File

@ -0,0 +1 @@
eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMy0wNS0zMSAxMzo0ODoyNS43NzY1OTU0MjIgKzAwMDAgVVRDIG09KzEuMjc2NTU2NzEwIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiTFF1S3A4bG8yT3RkY2hjWSJ9.Azznc81jL876uGDNiGip1RbCsrKkwyQJb9eOqrAR03YmyHsNPVo56Q.z4LQEsxqYwWrPtc8.8Snx2HnDn9A6psM53b8jRtEcWBfc_ApHqeuZqbn3QVl5NZVLPznCBWIBMJZg530ny2EzUany-VCNcDo_fSEWMsVPu_BX1NdDbeQ71GdWQ1WlrNFjGtUtUF6NUs__q_Hk2jcUSC4wDc9VWIFhOQYu3AF3vbI1KtRG8R0NlVHlqyxKWXWCit4yh6l6bxG33jtSfr-cwhmbQDDg9nZqGfjFVJE3r-1StULrMWuBC7Ed8LeQT6PwLVeQH9aq.4cBIKu90PjNLhbVk28sUnw

View File

@ -1 +0,0 @@
eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMS0wNC0yOCAxOToxMjo0OS4yNjIyMDgwNzUgKzAwMDAgVVRDIG09KzAuMDk2ODczMTgxIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiSF9XUWNudGY2VGxqNFQxNiJ9.WAjSXIdvgurfHpOcsbGbDfF_dkYzuDgsqzwvaCVVC_ZWs_QJPabMcQ.0JKzC9a_gwfHG8BX.gNg23iY-12eghObLGoExcCO71scieougnJ5IWxUL_0G_-kSuMnUsms_MY4M4XtoaOFJudIXHbEOirKCjUjGeht91Zhiw6zD7pF0drzonXbzb_A-oce5xUt6fdw6S85uIZLOR0WDBsbNLOLKyHwIQoQUDf0i9kjpAksycSsnEpRlw4Wc3mIpA8bBebX0xZ4hanYuIBBeMSLdIH0g0NBm8EyIqW5kfT-Jxw1lC7Pqk_aIQT6nehP8T5Jgl.M696Eo97gziveGPF8dkGEA

View File

@ -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 =

View File

@ -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"
# <host>:<port> to Tendermint RPC interface for this chain
node = "tcp://localhost:26657"
# Transaction broadcasting mode (sync|async)
broadcast-mode = "sync"

View File

@ -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://<user>:<password>@<host>:<port>/<db>?<opts>
psql-conn = ""
#######################################################
### Instrumentation Configuration Options ###
#######################################################
@ -390,4 +468,4 @@ prometheus_listen_addr = ":26660"
max_open_connections = 3
# Instrumentation namespace
namespace = "tendermint"
namespace = "cometbft"

View File

@ -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"
}

View File

@ -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=="]}

View File

@ -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=="]}

View File

@ -1 +1 @@
{"priv_key":{"type":"tendermint/PrivKeyEd25519","value":"DW7KyPeVXdiFn7hFFhA1rYzv5d5+5SJHo4bN8coxLicvNrTDtpWgf8GjVMdgvJlR1xOY8h3Rg8vlm+7TfXxSDQ=="}}
{"priv_key":{"type":"tendermint/PrivKeyEd25519","value":"A6ZsZSk2zdZL3YeCiem6mL8pBlI++ETuaoWX45/5/rUN/QglRAokL1S2EBWyl6t5B0CZ5ilRy/vdzcywgdhS5A=="}}

View File

@ -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=="
}
}

View File

@ -1 +1 @@
$2a$10$k8hjFNzXqTtzIHmnlmf7Hev7Y70vx39r1bD7Htj8hLXJPNnYhg4pi
$2a$10$Mbw.f93oEBpmvaOBQyyUR.TdPqVGmQVDeOEcF6nYj8UNvQqzXyOze

View File

@ -1 +1 @@
eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMS0wNC0yOCAxOToxMjo0OS4yNTgwODMwMzIgKzAwMDAgVVRDIG09KzAuMDkyNzQ4MTM4IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiOE55NktPTHZ0Z0wyeWdZdyJ9.aUeIj6LPohJ7r9m_pByAP_DSfDPGUY-lsUvPt9cJfsnT_D43PrUuzA.XV5oqJrLiM9mwcwd.8EsHSAHV9pdl29Tw9A5EKdmcdCjWEo3pWjp3t52DwPEHnn-NGmzeKv0t0DWuvYtaY8t0AAadtiAv1VQqp5J0-PpUtwpc9YsMUNrb2Z-3f7swkRbhap4qofoqZ3XSBRpFGdcmT7MpZbQdMlG5tkJUoG0vOtuxyMsXc_xl9t6uaX5yhzIvTMV0Qp8LJ0lPr3P8I52weihxLvp3a5_-cgWdPvQuTaVBJHh3eI10hna_mkewwYxOmBaXsH1XAkr_VhGc54BkA8h64XAu9Ci8jKmnyjd-N9n6tAwyLJgn_VTVl8IYf_NY64_MCVvPlffhSKRi74_kz2CzCsH_y776giIWvwW69xaulYVk8AB5G8qLFfxNjBgC.SmgI7IFtsABQCNlgveqMmw
eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMy0wNS0zMSAxMzo0ODoyNS43MzkxNTE3MTQgKzAwMDAgVVRDIG09KzEuMjM5MTEyOTYwIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiZHBTeDBLLUpnbGRfelFVLSJ9.rt9aldqmQvbubYRm-WrkP2wFkrD-Iw6UaF1rubXbdUQYTKcMauoofw.80DUPvcF4gmT1g7W.1Q-DGKR718nIVyOLgFDQZBbbCjNcjXyTTzt5W_3wi9gaiGyq4y1pU-KIyl7VCP9x5ccdM3sTRofVzhoCa4jthwPJT1uzx80_qiCazTwBqrcb6tdCbBQUNDAvXteOIjxqaow3dYufD6LvJ0hszAnydSKU_25dk9qzW8d0Kqv4U1KkwJMq7ryQLJrWv_wtXVcrd4Gwfz4qszbA3WiGgpsxr5nB5mIxEoIzFdRhaX6hBoZ5Cy8vas_DQpVO0eMU_z9vmcwxV0qqk8jOkVGh2pjSIfeZcKdSlRiIoThaaoA4KG660tfOwuoUii1LxZmCsEQN7TnPu6yvbS7C3zQUMmbE0eReR0z3lF8XQE5gJpQ3kdZA-9UWOI7_KoLTF0VMafd18DD3mMUU3XZW3gQ1xpSgYjeXj3MCQT3_ZWaL5z9c8lMPoJeyHJgo-6T51p4h3H1rQPraHs0x27U.pLqlPlIHGb4rU8rQ5Wm7OQ