module
0.0.0-20210528025807-a826b3808dd2
Repository: https://github.com/blockchainworkers/conch.git
Documentation: pkg.go.dev
# README
Conch(贝壳)
一个基于tendermint的共识机制引擎实现的简单虚拟货币
一些相关知识的链接
什么是tendermint
Tendermint Core 是一个拜占庭容错中间件, 它实现了一套共识机制引擎. 可以基于此项目使用任意的编程语言实现基于此共识机制的各种项目。如分布式系统, 虚拟货币等. 下面是一些基于此引擎开源的一些明星项目. 我们使用此共识机制更大的目的是在于学习。 感谢tendermint这个伟大的开源项目. 让开发区块链工程更easy, 也能从此开源项目中学习到很多有用的知识.
测试链已经启动
使用docker镜像连接到测试链
-
创建配置和数据存储路径
mkdir /opt/conch/config mkdir /opt/conch/data
-
将genesis.json, config.toml文件放入/opt/conch/config
genesis.json
{ "genesis_time": "2018-08-31T09:19:29.144335522Z", "chain_id": "conch-testnet-wupeaking", "consensus_params": { "block_size_params": { "max_bytes": "22020096", "max_txs": "10000", "max_gas": "-1" }, "tx_size_params": { "max_bytes": "10240", "max_gas": "-1" }, "block_gossip_params": { "block_part_size_bytes": "65536" }, "evidence_params": { "max_age": "100000" } }, "validators": [ { "pub_key": { "type": "tendermint/PubKeySecp256k1", "value": "A7C1pYP/mrQ6Jnp3oQMpAVKpUOnAQjKpLA95e7MbV/eR" }, "power": "10", "name": "zhangsan" } ], "app_hash": "" }
config.tmol
# TCP or UNIX socket address of the ABCI application, # or the name of an ABCI application compiled in with the Tendermint binary proxy_app = "conchapp" # A custom human readable name for this node moniker = "conchapp-pc" # If this node is many blocks behind the tip of the chain, FastSync # allows them to catchup quickly by downloading blocks in parallel # and verifying their commits fast_sync = true # Database backend: leveldb | memdb db_backend = "leveldb" # Database directory db_path = "data" # Output level for logging, including package level options log_level = "main:info,state:info,*:error" ##### additional base config options ##### # Path to the JSON file containing the initial validator set and other meta data genesis_file = "config/genesis.json" # Path to the JSON file containing the private key to use as a validator in the consensus protocol priv_validator_file = "config/priv_validator.json" # Path to the JSON file containing the private key to use for node authentication in the p2p protocol node_key_file = "config/node_key.json" # Mechanism to connect to the ABCI application: socket | grpc abci = "socket" # TCP or UNIX socket address for the profiling server to listen on prof_laddr = "" # If true, query the ABCI app on connecting to a new peer # so the app can decide if we should keep the connection or not filter_peers = false ##### advanced configuration options ##### ##### rpc server configuration options ##### [rpc] # TCP or UNIX socket address for the RPC server to listen on laddr = "tcp://0.0.0.0:26657" # TCP or UNIX socket address for the gRPC server to listen on # NOTE: This server only supports /broadcast_tx_commit grpc_laddr = "" # Maximum number of simultaneous connections. # Does not include RPC (HTTP&WebSocket) connections. See max_open_connections # If you want to accept more significant number than the default, make sure # you increase your OS limits. # 0 - unlimited. grpc_max_open_connections = 900 # Activate unsafe RPC commands like /dial_seeds and /unsafe_flush_mempool unsafe = false # Maximum number of simultaneous connections (including WebSocket). # Does not include gRPC connections. See grpc_max_open_connections # If you want to accept more significant number than the default, make sure # you increase your OS limits. # 0 - unlimited. max_open_connections = 900 ##### peer to peer configuration options ##### [p2p] # Address to listen for incoming connections 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. external_address = "" # Comma separated list of seed nodes to seeds = "" persistent_peers = "[email protected]:26656" # UPNP port forwarding upnp = false # Path to address book addr_book_file = "config/addrbook.json" # Set true for strict address routability rules addr_book_strict = true # Time to wait before flushing messages out on the connection, in ms flush_throttle_timeout = 100 # Maximum number of peers to connect to max_num_peers = 50 # Maximum size of a message packet payload, in bytes max_packet_msg_payload_size = 1024 # Rate at which packets can be sent, in bytes/second send_rate = 5120000 # Rate at which packets can be received, in bytes/second recv_rate = 5120000 # Set true to enable the peer-exchange reactor pex = true # Seed mode, in which node constantly crawls the network and looks for # peers. If another node asks it for addresses, it responds and disconnects. # # Does not work if the peer-exchange reactor is disabled. seed_mode = false # Comma separated list of peer IDs to keep private (will not be gossiped to other peers) private_peer_ids = "" ##### mempool configuration options ##### [mempool] recheck = true recheck_empty = true broadcast = true wal_dir = "data/mempool.wal" # size of the mempool size = 100000 # size of the cache (used to filter transactions we saw earlier) cache_size = 100000 ##### consensus configuration options ##### [consensus] wal_file = "data/cs.wal/wal" # All timeouts are in milliseconds timeout_propose = 3000 timeout_propose_delta = 500 timeout_prevote = 1000 timeout_prevote_delta = 500 timeout_precommit = 1000 timeout_precommit_delta = 500 timeout_commit = 1000 # Make progress as soon as we have all the precommits (as if TimeoutCommit = 0) skip_timeout_commit = false # EmptyBlocks mode and possible interval between empty blocks in seconds create_empty_blocks = true create_empty_blocks_interval = 20 # Reactor sleep duration parameters are in milliseconds peer_gossip_sleep_duration = 100 peer_query_maj23_sleep_duration = 2000 ##### transactions indexer configuration options ##### [tx_index] # What indexer to use for transactions # # Options: # 1) "null" (default) # 2) "kv" - the simplest possible indexer, backed by key-value storage (defaults to levelDB; see DBBackend). indexer = "kv" # Comma-separated list of tags to index (by default the only tag is tx hash) # # It's recommended to index only a subset of tags due to possible memory # bloat. This is, of course, depends on the indexer's DB and the volume of # transactions. index_tags = "" # When set to true, tells indexer to index all tags. Note this may be not # desirable (see the comment above). IndexTags has a precedence over # IndexAllTags (i.e. when given both, IndexTags will be indexed). index_all_tags = false ##### instrumentation configuration options ##### [instrumentation] # When true, Prometheus metrics are served under /metrics on # PrometheusListenAddr. # Check out the documentation for the list of available metrics. prometheus = false # Address to listen for Prometheus collector(s) connections prometheus_listen_addr = ":26660" # Maximum number of simultaneous connections. # If you want to accept more significant number than the default, make sure # you increase your OS limits. # 0 - unlimited. max_open_connections = 3
-
启动docker镜像
docker run --name=conch-node --net=host -v /opt/conch:/opt/conch/data -d blockchainworkers/conch
使用二进制文件加入测试链
-
编译二进制文件
> mkdir -p /opt/conch/src/github.com/blockchainworkers > mkdir -p /opt/conch/data/config && mkdir -p /opt/conch/data/data > export BUILD_FLAGS=-ldflags "-X github.com/blockchainworkers/conch/version.GitCommit=`git rev-parse --short=8 HEAD`" > export GOPATH=/opt/conch > cd /opt/conch/src/github.com/blockchainworkers && git clone https://github.com/blockchainworkers/conch.git conch > cd conch > go build $(BUILD_FLAGS) -o conchd ./cmd/conch/main.go
-
将genesis.json, config.toml文件放入/opt/conch/data/config
-
启动节点
./conchd node --home /opt/conch/data
关于API说明以及转账说明文档即将到来
未完待续...
# Packages
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Ripemd160 sum := crypto.Ripemd160([]byte("This is consensus")) fmt.Printf("%x\n", sum).
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Package lite allows you to securely validate headers
without a full node.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Package rlp implements the RLP serialization format.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author