Skip to content

Commit fd9eeba

Browse files
Joon-Mo YangJoon Mo Yang
authored andcommitted
Initialize custom actions on start
1 parent f2d05b0 commit fd9eeba

File tree

14 files changed

+75
-41
lines changed

14 files changed

+75
-41
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ codechain-merkle = { path = "util/merkle" }
1717
codechain-network = { path = "network" }
1818
codechain-reactor = { path = "util/reactor" }
1919
codechain-rpc = { path = "rpc" }
20+
codechain-state = { path = "state" }
2021
codechain-sync = { path = "sync" }
2122
codechain-types = { path = "types" }
2223
codechain-vm = { path = "vm" }

codechain/config/chain_type.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@
1515
// along with this program. If not, see <https://www.gnu.org/licenses/>.
1616

1717
use std::str::FromStr;
18+
use std::sync::Arc;
1819
use std::{fmt, fs};
1920

2021
use ccore::Spec;
22+
use cstate::ActionHandler;
2123

2224
#[derive(Debug, PartialEq, Deserialize)]
2325
#[serde(rename_all = "snake_case")]
@@ -66,17 +68,17 @@ impl fmt::Display for ChainType {
6668
}
6769

6870
impl ChainType {
69-
pub fn spec<'a>(&self) -> Result<Spec, String> {
71+
pub fn spec<'a>(&self, handlers: Vec<Arc<ActionHandler>>) -> Result<Spec, String> {
7072
match self {
71-
ChainType::Solo => Ok(Spec::new_test_solo()),
72-
ChainType::SoloAuthority => Ok(Spec::new_test_solo_authority()),
73-
ChainType::Tendermint => Ok(Spec::new_test_tendermint()),
74-
ChainType::Cuckoo => Ok(Spec::new_test_cuckoo()),
75-
ChainType::BlakePoW => Ok(Spec::new_test_blake_pow()),
73+
ChainType::Solo => Ok(Spec::new_test_solo(handlers)),
74+
ChainType::SoloAuthority => Ok(Spec::new_test_solo_authority(handlers)),
75+
ChainType::Tendermint => Ok(Spec::new_test_tendermint(handlers)),
76+
ChainType::Cuckoo => Ok(Spec::new_test_cuckoo(handlers)),
77+
ChainType::BlakePoW => Ok(Spec::new_test_blake_pow(handlers)),
7678
ChainType::Custom(filename) => {
7779
let file = fs::File::open(filename)
7880
.map_err(|e| format!("Could not load specification file at {}: {}", filename, e))?;
79-
Spec::load(file)
81+
Spec::load(file, handlers)
8082
}
8183
}
8284
}

codechain/main.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ extern crate codechain_logger as clogger;
3535
extern crate codechain_network as cnetwork;
3636
extern crate codechain_reactor as creactor;
3737
extern crate codechain_rpc as crpc;
38+
extern crate codechain_state as cstate;
3839
extern crate codechain_sync as csync;
3940
extern crate codechain_types as ctypes;
4041
extern crate ctrlc;
@@ -263,7 +264,10 @@ fn run_node(matches: ArgMatches) -> Result<(), String> {
263264

264265
let _event_loop = EventLoop::spawn();
265266
let config = load_config(&matches)?;
266-
let spec = config.operating.chain.spec()?;
267+
268+
// Add handlers here to accept additional custom actions
269+
let custom_action_handlers = vec![];
270+
let spec = config.operating.chain.spec(custom_action_handlers)?;
267271

268272
let instance_id = config.operating.instance_id.unwrap_or(
269273
SystemTime::now()

core/src/block.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ mod tests {
453453

454454
#[test]
455455
fn open_block() {
456-
let spec = Spec::new_test();
456+
let spec = Spec::new_test(Vec::new());
457457
let genesis_header = spec.genesis_header();
458458
let db = spec.ensure_genesis_state(get_temp_state_db(), &Default::default()).unwrap();
459459
let b = OpenBlock::new(&*spec.engine, Default::default(), db, &genesis_header, Address::zero(), vec![], false)

core/src/client/test_client.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ impl TestBlockChainClient {
114114

115115
/// Creates new test client with specified extra data for each block
116116
pub fn new_with_extra_data(extra_data: Bytes) -> Self {
117-
let spec = Spec::new_test();
117+
let spec = Spec::new_test(Vec::new());
118118
TestBlockChainClient::new_with_spec_and_extra(spec, extra_data)
119119
}
120120

core/src/consensus/solo/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ mod tests {
8888

8989
#[test]
9090
fn solo_can_seal() {
91-
let spec = Spec::new_test_solo();
91+
let spec = Spec::new_test_solo(Vec::new());
9292
let engine = &*spec.engine;
9393
let db = spec.ensure_genesis_state(get_temp_state_db(), &Default::default()).unwrap();
9494
let genesis_header = spec.genesis_header();
@@ -104,7 +104,7 @@ mod tests {
104104

105105
#[test]
106106
fn solo_cant_verify() {
107-
let engine = Spec::new_test_solo().engine;
107+
let engine = Spec::new_test_solo(Vec::new()).engine;
108108
let mut header: Header = Header::default();
109109

110110
assert!(engine.verify_block_basic(&header).is_ok());

core/src/consensus/solo_authority/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -207,13 +207,13 @@ mod tests {
207207

208208
#[test]
209209
fn has_valid_metadata() {
210-
let engine = Spec::new_test_solo_authority().engine;
210+
let engine = Spec::new_test_solo_authority(Vec::new()).engine;
211211
assert!(!engine.name().is_empty());
212212
}
213213

214214
#[test]
215215
fn can_do_signature_verification_fail() {
216-
let engine = Spec::new_test_solo_authority().engine;
216+
let engine = Spec::new_test_solo_authority(Vec::new()).engine;
217217
let mut header: Header = Header::default();
218218
header.set_seal(vec![::rlp::encode(&SignatureData::default()).into_vec()]);
219219

@@ -223,7 +223,7 @@ mod tests {
223223

224224
#[test]
225225
fn can_generate_seal() {
226-
let spec = Spec::new_test_solo_authority();
226+
let spec = Spec::new_test_solo_authority(Vec::new());
227227
let engine = &*spec.engine;
228228
let db = spec.ensure_genesis_state(get_temp_state_db(), &Default::default()).unwrap();
229229
let genesis_header = spec.genesis_header();
@@ -239,7 +239,7 @@ mod tests {
239239

240240
#[test]
241241
fn seals_internally() {
242-
let engine = Spec::new_test_solo_authority().engine;
242+
let engine = Spec::new_test_solo_authority(Vec::new()).engine;
243243
assert!(!engine.seals_internally().unwrap());
244244
}
245245
}

core/src/consensus/tendermint/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -953,13 +953,13 @@ mod tests {
953953

954954
#[test]
955955
fn has_valid_metadata() {
956-
let engine = Spec::new_test_tendermint().engine;
956+
let engine = Spec::new_test_tendermint(Vec::new()).engine;
957957
assert!(!engine.name().is_empty());
958958
}
959959

960960
#[test]
961961
fn verification_fails_on_short_seal() {
962-
let engine = Spec::new_test_tendermint().engine;
962+
let engine = Spec::new_test_tendermint(Vec::new()).engine;
963963
let header = Header::default();
964964

965965
let verify_result = engine.verify_block_basic(&header);

core/src/miner/sealing_queue.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ mod tests {
8282
const QUEUE_SIZE: usize = 2;
8383

8484
fn create_closed_block(address: Address) -> ClosedBlock {
85-
let spec = Spec::new_test();
85+
let spec = Spec::new_test(Vec::new());
8686
let genesis_header = spec.genesis_header();
8787
let db = spec.ensure_genesis_state(get_temp_state_db(), &Default::default()).unwrap();
8888
let b = OpenBlock::new(&*spec.engine, Default::default(), db, &genesis_header, address, vec![], false).unwrap();

0 commit comments

Comments
 (0)