Skip to content

Commit

Permalink
Master merge 2.0.0 (#2927)
Browse files Browse the repository at this point in the history
* create 2.0.0 branch

* fix humansize version

* update grin.yml version

* PoW HardFork (#2866)

* allow version 2 blocks for next 6 months

* add cuckarood.rs with working tests

* switch cuckaroo to cuckarood at right heights

* reorder to reduce conditions

* remove _ prefix on used args; fix typo

* Make Valid Header Version dependant on ChainType

* Rustfmt

* Add tests, uncomment header v2

* Rustfmt

* Add FLOONET_FIRST_HARD_FORK height and simplify logic

* assume floonet stays closer to avg 60s block time

* move floonet hf forward by half a day

* update version in new block when previous no longer valid

* my next commit:-)

* micro optimization

* Support new Bulletproof rewind scheme (#2848)

* Update keychain with new rewind scheme

* Refactor: proof builder trait

* Update tests, cleanup

* rustfmt

* Move conversion of SwitchCommitmentType

* Add proof build trait to tx builders

* Cache hashes in proof builders

* Proof builder tests

* Add ViewKey struct

* Fix some warnings

* Zeroize proof builder secrets on drop

* Modify mine_block to use wallet V2 API (#2892)

* update mine_block to use V2 wallet API

* rustfmt

* Add version endpoint to node API, rename pool/push (#2897)

* add node version API, tweak pool/push parameter

* rustfmt

* Upate version api call (#2899)

* Update version number for next (potential) release

* zeroize: Upgrade to v0.9 (#2914)

* zeroize: Upgrade to v0.9

* missed Cargo.lock

* [PENDING APPROVAL] put phase outs of C32 and beyond on hold (#2714)

* put phase outs of C32 and beyond on hold

* update tests for phaseouts on hold

* Don't wait for p2p-server thread (#2917)

Currently p2p.stop() stops and wait for all peers to exit, that's
basically all we need. However we also run a TCP listener in this thread
which is blocked on `accept` most of the time. We do an attempt to stop
it but it would work only if we get an incoming connection during the
shutdown, which is a week guarantee.

This fix remove joining to p2p-server thread, it stops all peers and
makes an attempt to stop the listener.

Fixes [#2906]

* rustfmt
  • Loading branch information
yeastplume authored Jun 27, 2019
1 parent fd6fe35 commit 1609b04
Show file tree
Hide file tree
Showing 55 changed files with 2,456 additions and 844 deletions.
988 changes: 515 additions & 473 deletions Cargo.lock

Large diffs are not rendered by default.

20 changes: 10 additions & 10 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "grin"
version = "1.1.1-beta.1"
version = "2.0.0-beta.2"
authors = ["Grin Developers <[email protected]>"]
description = "Simple, private and scalable cryptocurrency implementation based on the MimbleWimble chain format."
license = "Apache-2.0"
Expand Down Expand Up @@ -32,13 +32,13 @@ term = "0.5"
failure = "0.1"
failure_derive = "0.1"

grin_api = { path = "./api", version = "1.1.1-beta.1" }
grin_config = { path = "./config", version = "1.1.1-beta.1" }
grin_core = { path = "./core", version = "1.1.1-beta.1" }
grin_keychain = { path = "./keychain", version = "1.1.1-beta.1" }
grin_p2p = { path = "./p2p", version = "1.1.1-beta.1" }
grin_servers = { path = "./servers", version = "1.1.1-beta.1" }
grin_util = { path = "./util", version = "1.1.1-beta.1" }
grin_api = { path = "./api", version = "2.0.0-beta.2" }
grin_config = { path = "./config", version = "2.0.0-beta.2" }
grin_core = { path = "./core", version = "2.0.0-beta.2" }
grin_keychain = { path = "./keychain", version = "2.0.0-beta.2" }
grin_p2p = { path = "./p2p", version = "2.0.0-beta.2" }
grin_servers = { path = "./servers", version = "2.0.0-beta.2" }
grin_util = { path = "./util", version = "2.0.0-beta.2" }

[target.'cfg(windows)'.dependencies]
cursive = { version = "0.12", default-features = false, features = ["pancurses-backend"] }
Expand All @@ -52,5 +52,5 @@ cursive = "0.12"
built = "0.3"

[dev-dependencies]
grin_chain = { path = "./chain", version = "1.1.1-beta.1" }
grin_store = { path = "./store", version = "1.1.1-beta.1" }
grin_chain = { path = "./chain", version = "2.0.0-beta.2" }
grin_store = { path = "./store", version = "2.0.0-beta.2" }
14 changes: 7 additions & 7 deletions api/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "grin_api"
version = "1.1.1-beta.1"
version = "2.0.0-beta.2"
authors = ["Grin Developers <[email protected]>"]
description = "APIs for grin, a simple, private and scalable cryptocurrency implementation based on the MimbleWimble chain format."
license = "Apache-2.0"
Expand Down Expand Up @@ -30,9 +30,9 @@ futures = "0.1.21"
rustls = "0.13"
url = "1.7.0"

grin_core = { path = "../core", version = "1.1.1-beta.1" }
grin_chain = { path = "../chain", version = "1.1.1-beta.1" }
grin_p2p = { path = "../p2p", version = "1.1.1-beta.1" }
grin_pool = { path = "../pool", version = "1.1.1-beta.1" }
grin_store = { path = "../store", version = "1.1.1-beta.1" }
grin_util = { path = "../util", version = "1.1.1-beta.1" }
grin_core = { path = "../core", version = "2.0.0-beta.2" }
grin_chain = { path = "../chain", version = "2.0.0-beta.2" }
grin_p2p = { path = "../p2p", version = "2.0.0-beta.2" }
grin_pool = { path = "../pool", version = "2.0.0-beta.2" }
grin_store = { path = "../store", version = "2.0.0-beta.2" }
grin_util = { path = "../util", version = "2.0.0-beta.2" }
13 changes: 10 additions & 3 deletions api/src/handlers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ mod pool_api;
mod server_api;
mod transactions_api;
mod utils;
mod version_api;

use self::blocks_api::BlockHandler;
use self::blocks_api::HeaderHandler;
Expand All @@ -32,9 +33,10 @@ use self::peers_api::PeersConnectedHandler;
use self::pool_api::PoolInfoHandler;
use self::pool_api::PoolPushHandler;
use self::server_api::IndexHandler;
use self::server_api::StatusHandler;
use self::server_api::KernelDownloadHandler;
use self::server_api::StatusHandler;
use self::transactions_api::TxHashSetHandler;
use self::version_api::VersionHandler;
use crate::auth::{BasicAuthMiddleware, GRIN_BASIC_REALM};
use crate::chain;
use crate::p2p;
Expand Down Expand Up @@ -104,12 +106,13 @@ pub fn build_router(
"get txhashset/outputs?start_index=1&max=100".to_string(),
"get txhashset/merkleproof?n=1".to_string(),
"get pool".to_string(),
"post pool/push".to_string(),
"post pool/push_tx".to_string(),
"post peers/a.b.c.d:p/ban".to_string(),
"post peers/a.b.c.d:p/unban".to_string(),
"get peers/all".to_string(),
"get peers/connected".to_string(),
"get peers/a.b.c.d".to_string(),
"get version".to_string(),
];
let index_handler = IndexHandler { list: route_list };

Expand Down Expand Up @@ -157,6 +160,9 @@ pub fn build_router(
let peer_handler = PeerHandler {
peers: Arc::downgrade(&peers),
};
let version_handler = VersionHandler {
chain: Arc::downgrade(&chain),
};

let mut router = Router::new();

Expand All @@ -171,9 +177,10 @@ pub fn build_router(
router.add_route("/v1/status", Arc::new(status_handler))?;
router.add_route("/v1/kerneldownload", Arc::new(kernel_download_handler))?;
router.add_route("/v1/pool", Arc::new(pool_info_handler))?;
router.add_route("/v1/pool/push", Arc::new(pool_push_handler))?;
router.add_route("/v1/pool/push_tx", Arc::new(pool_push_handler))?;
router.add_route("/v1/peers/all", Arc::new(peers_all_handler))?;
router.add_route("/v1/peers/connected", Arc::new(peers_connected_handler))?;
router.add_route("/v1/peers/**", Arc::new(peer_handler))?;
router.add_route("/v1/version", Arc::new(version_handler))?;
Ok(router)
}
2 changes: 1 addition & 1 deletion api/src/handlers/pool_api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ struct TxWrapper {
}

/// Push new transaction to our local transaction pool.
/// POST /v1/pool/push
/// POST /v1/pool/push_tx
pub struct PoolPushHandler {
pub tx_pool: Weak<RwLock<pool::TransactionPool>>,
}
Expand Down
49 changes: 49 additions & 0 deletions api/src/handlers/version_api.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// Copyright 2018 The Grin Developers
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

use super::utils::w;
use crate::chain;
use crate::rest::*;
use crate::router::{Handler, ResponseFuture};
use crate::types::Version;
use crate::web::*;
use hyper::{Body, Request};
use std::sync::Weak;

const CRATE_VERSION: &'static str = env!("CARGO_PKG_VERSION");

/// Version handler. Get running node API version
/// GET /v1/version
pub struct VersionHandler {
pub chain: Weak<chain::Chain>,
}

impl VersionHandler {
fn get_version(&self) -> Result<Version, Error> {
let head = w(&self.chain)?
.head_header()
.map_err(|e| ErrorKind::Internal(format!("can't get head: {}", e)))?;

Ok(Version {
node_version: CRATE_VERSION.to_owned(),
block_header_version: head.version.into(),
})
}
}

impl Handler for VersionHandler {
fn get(&self, _req: Request<Body>) -> ResponseFuture {
result_to_response(self.get_version())
}
}
9 changes: 9 additions & 0 deletions api/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,15 @@ macro_rules! no_dup {
};
}

/// API Version Information
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Version {
/// Current node API Version (api crate version)
pub node_version: String,
/// Block header version
pub block_header_version: u16,
}

/// The state of the current fork tip
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Tip {
Expand Down
10 changes: 5 additions & 5 deletions chain/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "grin_chain"
version = "1.1.1-beta.1"
version = "2.0.0-beta.2"
authors = ["Grin Developers <[email protected]>"]
description = "Chain implementation for grin, a simple, private and scalable cryptocurrency implementation based on the MimbleWimble chain format."
license = "Apache-2.0"
Expand All @@ -23,10 +23,10 @@ lru-cache = "0.1"
lazy_static = "1"
regex = "1"

grin_core = { path = "../core", version = "1.1.1-beta.1" }
grin_keychain = { path = "../keychain", version = "1.1.1-beta.1" }
grin_store = { path = "../store", version = "1.1.1-beta.1" }
grin_util = { path = "../util", version = "1.1.1-beta.1" }
grin_core = { path = "../core", version = "2.0.0-beta.2" }
grin_keychain = { path = "../keychain", version = "2.0.0-beta.2" }
grin_store = { path = "../store", version = "2.0.0-beta.2" }
grin_util = { path = "../util", version = "2.0.0-beta.2" }

[dev-dependencies]
env_logger = "0.5"
Expand Down
12 changes: 10 additions & 2 deletions chain/tests/data_file_integrity.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,14 @@ fn data_files() {
let prev = chain.head_header().unwrap();
let next_header_info = consensus::next_difficulty(1, chain.difficulty_iter().unwrap());
let pk = ExtKeychainPath::new(1, n as u32, 0, 0, 0).to_identifier();
let reward = libtx::reward::output(&keychain, &pk, 0, false).unwrap();
let reward = libtx::reward::output(
&keychain,
&libtx::ProofBuilder::new(&keychain),
&pk,
0,
false,
)
.unwrap();
let mut b =
core::core::Block::new(&prev, vec![], next_header_info.clone().difficulty, reward)
.unwrap();
Expand Down Expand Up @@ -154,7 +161,8 @@ fn _prepare_block_nosum(
let key_id = ExtKeychainPath::new(1, diff as u32, 0, 0, 0).to_identifier();

let fees = txs.iter().map(|tx| tx.fee()).sum();
let reward = libtx::reward::output(kc, &key_id, fees, false).unwrap();
let reward =
libtx::reward::output(kc, &libtx::ProofBuilder::new(kc), &key_id, fees, false).unwrap();
let mut b = match core::core::Block::new(
prev,
txs.into_iter().cloned().collect(),
Expand Down
30 changes: 25 additions & 5 deletions chain/tests/mine_simple_chain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ use self::core::core::verifier_cache::LruVerifierCache;
use self::core::core::{Block, BlockHeader, OutputIdentifier, Transaction};
use self::core::genesis;
use self::core::global::ChainTypes;
use self::core::libtx::{self, build, reward};
use self::core::libtx::{self, build, reward, ProofBuilder};
use self::core::pow::Difficulty;
use self::core::{consensus, global, pow};
use self::keychain::{ExtKeychain, ExtKeychainPath, Keychain};
Expand Down Expand Up @@ -106,7 +106,14 @@ fn mine_genesis_reward_chain() {
let mut genesis = genesis::genesis_dev();
let keychain = keychain::ExtKeychain::from_random_seed(false).unwrap();
let key_id = keychain::ExtKeychain::derive_key_id(0, 1, 0, 0, 0);
let reward = reward::output(&keychain, &key_id, 0, false).unwrap();
let reward = reward::output(
&keychain,
&libtx::ProofBuilder::new(&keychain),
&key_id,
0,
false,
)
.unwrap();
genesis = genesis.with_reward(reward.0, reward.1);

let tmp_chain_dir = ".grin.tmp";
Expand Down Expand Up @@ -143,7 +150,9 @@ where
let prev = chain.head_header().unwrap();
let next_header_info = consensus::next_difficulty(1, chain.difficulty_iter().unwrap());
let pk = ExtKeychainPath::new(1, n as u32, 0, 0, 0).to_identifier();
let reward = libtx::reward::output(keychain, &pk, 0, false).unwrap();
let reward =
libtx::reward::output(keychain, &libtx::ProofBuilder::new(keychain), &pk, 0, false)
.unwrap();
let mut b =
core::core::Block::new(&prev, vec![], next_header_info.clone().difficulty, reward)
.unwrap();
Expand Down Expand Up @@ -401,6 +410,7 @@ fn spend_in_fork_and_compact() {
let chain = setup(".grin6", pow::mine_genesis_block().unwrap());
let prev = chain.head_header().unwrap();
let kc = ExtKeychain::from_random_seed(false).unwrap();
let pb = ProofBuilder::new(&kc);

let mut fork_head = prev;

Expand Down Expand Up @@ -434,6 +444,7 @@ fn spend_in_fork_and_compact() {
build::with_fee(20000),
],
&kc,
&pb,
)
.unwrap();

Expand All @@ -451,6 +462,7 @@ fn spend_in_fork_and_compact() {
build::with_fee(20000),
],
&kc,
&pb,
)
.unwrap();

Expand Down Expand Up @@ -540,7 +552,14 @@ fn output_header_mappings() {
let prev = chain.head_header().unwrap();
let next_header_info = consensus::next_difficulty(1, chain.difficulty_iter().unwrap());
let pk = ExtKeychainPath::new(1, n as u32, 0, 0, 0).to_identifier();
let reward = libtx::reward::output(&keychain, &pk, 0, false).unwrap();
let reward = libtx::reward::output(
&keychain,
&libtx::ProofBuilder::new(&keychain),
&pk,
0,
false,
)
.unwrap();
reward_outputs.push(reward.0.clone());
let mut b =
core::core::Block::new(&prev, vec![], next_header_info.clone().difficulty, reward)
Expand Down Expand Up @@ -643,7 +662,8 @@ where
let key_id = ExtKeychainPath::new(1, diff as u32, 0, 0, 0).to_identifier();

let fees = txs.iter().map(|tx| tx.fee()).sum();
let reward = libtx::reward::output(kc, &key_id, fees, false).unwrap();
let reward =
libtx::reward::output(kc, &libtx::ProofBuilder::new(kc), &key_id, fees, false).unwrap();
let mut b = match core::core::Block::new(
prev,
txs.into_iter().cloned().collect(),
Expand Down
9 changes: 8 additions & 1 deletion chain/tests/store_indices.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,14 @@ fn test_various_store_indices() {

setup_chain(&genesis, chain_store.clone()).unwrap();

let reward = libtx::reward::output(&keychain, &key_id, 0, false).unwrap();
let reward = libtx::reward::output(
&keychain,
&libtx::ProofBuilder::new(&keychain),
&key_id,
0,
false,
)
.unwrap();
let block = Block::new(&genesis.header, vec![], Difficulty::min(), reward).unwrap();
let block_hash = block.hash();

Expand Down
Loading

0 comments on commit 1609b04

Please sign in to comment.