Skip to content

Commit

Permalink
[fix] add parameters to swarm; fix docker-compose files and consisten…
Browse files Browse the repository at this point in the history
…cy.sh

Signed-off-by: VAmuzing <amuzik95@gmail.com>
  • Loading branch information
VAmuzing committed Apr 24, 2024
1 parent 255d39c commit 8e920f1
Show file tree
Hide file tree
Showing 8 changed files with 50 additions and 27 deletions.
11 changes: 5 additions & 6 deletions configs/swarm/docker-compose.local.yml
Expand Up @@ -13,10 +13,9 @@ services:
PRIVATE_KEY_PAYLOAD: 8f4c15e5d664da3f13778801d23d4e89b76e94c1b94b389544168b6cb894f84f8ba62848cf767d72e7f7f4b9d2d7ba07fee33760f79abe5597a51520e292a0cb
P2P_ADDRESS: 0.0.0.0:1337
API_ADDRESS: 0.0.0.0:8080
GENESIS_PUBLIC_KEY: ed01204164BF554923ECE1FD412D241036D863A6AE430476C898248B8237D77534CFC4
GENESIS_PRIVATE_KEY_ALGORITHM: ed25519
GENESIS_PRIVATE_KEY_PAYLOAD: 82b3bde54aebeca4146257da0de8d59d8e46d5fe34887dcd8072866792fcb3ad4164bf554923ece1fd412d241036d863a6ae430476c898248b8237d77534cfc4
GENESIS_FILE: /config/genesis.json
GENESIS_PUBLIC_KEY: ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB
GENESIS_SIGNATURE: 9030303030303030302d303030302d303030302d303030302d3030303030303030303030308c4b28660000000000811b2c0400808ba62848cf767d72e7f7f4b9d2d7ba07fee33760f79abe5597a51520e292a0cb0101819b61a8c82fc6565c5acc7f92ca6dc07ccd39fcc47dee3d6f85d59ec7b52fe651b20b985b401546b49a50057b4311beaccb822b8ef2cf4e25ce3fab3769c70e
SUMERAGI_TRUSTED_PEERS: '[{"address":"iroha1:1338","public_key":"ed0120815BBDC9775D28C3633269B25F22D048E2AA2E36017CBE5AD85F15220BEB6F6F"},{"address":"iroha3:1340","public_key":"ed0120A66522370D60B9C09E79ADE2E9BB1EF2E78733A944B999B3A6AEE687CE476D61"},{"address":"iroha2:1339","public_key":"ed0120F417E0371E6ADB32FD66749477402B1AB67F84A8E9B082E997980CC91F327736"}]'
ports:
- 1337:1337
Expand All @@ -41,7 +40,7 @@ services:
PRIVATE_KEY_PAYLOAD: c02ffad5e455e7ec620d74de5769681e4d8385906bce5a437eb67452a9efbbc2815bbdc9775d28c3633269b25f22d048e2aa2e36017cbe5ad85f15220beb6f6f
P2P_ADDRESS: 0.0.0.0:1338
API_ADDRESS: 0.0.0.0:8081
GENESIS_PUBLIC_KEY: ed01204164BF554923ECE1FD412D241036D863A6AE430476C898248B8237D77534CFC4
GENESIS_PUBLIC_KEY: ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB
SUMERAGI_TRUSTED_PEERS: '[{"address":"iroha0:1337","public_key":"ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB"},{"address":"iroha3:1340","public_key":"ed0120A66522370D60B9C09E79ADE2E9BB1EF2E78733A944B999B3A6AEE687CE476D61"},{"address":"iroha2:1339","public_key":"ed0120F417E0371E6ADB32FD66749477402B1AB67F84A8E9B082E997980CC91F327736"}]'
ports:
- 1338:1338
Expand All @@ -65,7 +64,7 @@ services:
PRIVATE_KEY_PAYLOAD: 29c5ed1409cb10fd791bc4ff8a6cb5e22a5fae7e36f448ef3ea2988b1319a88bf417e0371e6adb32fd66749477402b1ab67f84a8e9b082e997980cc91f327736
P2P_ADDRESS: 0.0.0.0:1339
API_ADDRESS: 0.0.0.0:8082
GENESIS_PUBLIC_KEY: ed01204164BF554923ECE1FD412D241036D863A6AE430476C898248B8237D77534CFC4
GENESIS_PUBLIC_KEY: ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB
SUMERAGI_TRUSTED_PEERS: '[{"address":"iroha1:1338","public_key":"ed0120815BBDC9775D28C3633269B25F22D048E2AA2E36017CBE5AD85F15220BEB6F6F"},{"address":"iroha0:1337","public_key":"ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB"},{"address":"iroha3:1340","public_key":"ed0120A66522370D60B9C09E79ADE2E9BB1EF2E78733A944B999B3A6AEE687CE476D61"}]'
ports:
- 1339:1339
Expand All @@ -89,7 +88,7 @@ services:
PRIVATE_KEY_PAYLOAD: 5eed4855fad183c451aac39dfc50831607e4cf408c98e2b977f3ce4a2df42ce2a66522370d60b9c09e79ade2e9bb1ef2e78733a944b999b3a6aee687ce476d61
P2P_ADDRESS: 0.0.0.0:1340
API_ADDRESS: 0.0.0.0:8083
GENESIS_PUBLIC_KEY: ed01204164BF554923ECE1FD412D241036D863A6AE430476C898248B8237D77534CFC4
GENESIS_PUBLIC_KEY: ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB
SUMERAGI_TRUSTED_PEERS: '[{"address":"iroha1:1338","public_key":"ed0120815BBDC9775D28C3633269B25F22D048E2AA2E36017CBE5AD85F15220BEB6F6F"},{"address":"iroha0:1337","public_key":"ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB"},{"address":"iroha2:1339","public_key":"ed0120F417E0371E6ADB32FD66749477402B1AB67F84A8E9B082E997980CC91F327736"}]'
ports:
- 1340:1340
Expand Down
5 changes: 2 additions & 3 deletions configs/swarm/docker-compose.single.yml
Expand Up @@ -13,10 +13,9 @@ services:
PRIVATE_KEY_PAYLOAD: 8f4c15e5d664da3f13778801d23d4e89b76e94c1b94b389544168b6cb894f84f8ba62848cf767d72e7f7f4b9d2d7ba07fee33760f79abe5597a51520e292a0cb
P2P_ADDRESS: 0.0.0.0:1337
API_ADDRESS: 0.0.0.0:8080
GENESIS_PUBLIC_KEY: ed01204164BF554923ECE1FD412D241036D863A6AE430476C898248B8237D77534CFC4
GENESIS_PRIVATE_KEY_ALGORITHM: ed25519
GENESIS_PRIVATE_KEY_PAYLOAD: 82b3bde54aebeca4146257da0de8d59d8e46d5fe34887dcd8072866792fcb3ad4164bf554923ece1fd412d241036d863a6ae430476c898248b8237d77534cfc4
GENESIS_FILE: /config/genesis.json
GENESIS_PUBLIC_KEY: ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB
GENESIS_SIGNATURE: 9030303030303030302d303030302d303030302d303030302d3030303030303030303030308c4b28660000000000811b2c0400808ba62848cf767d72e7f7f4b9d2d7ba07fee33760f79abe5597a51520e292a0cb0101819b61a8c82fc6565c5acc7f92ca6dc07ccd39fcc47dee3d6f85d59ec7b52fe651b20b985b401546b49a50057b4311beaccb822b8ef2cf4e25ce3fab3769c70e
ports:
- 1337:1337
- 8080:8080
Expand Down
11 changes: 5 additions & 6 deletions configs/swarm/docker-compose.yml
Expand Up @@ -13,10 +13,9 @@ services:
PRIVATE_KEY_PAYLOAD: 8f4c15e5d664da3f13778801d23d4e89b76e94c1b94b389544168b6cb894f84f8ba62848cf767d72e7f7f4b9d2d7ba07fee33760f79abe5597a51520e292a0cb
P2P_ADDRESS: 0.0.0.0:1337
API_ADDRESS: 0.0.0.0:8080
GENESIS_PUBLIC_KEY: ed01204164BF554923ECE1FD412D241036D863A6AE430476C898248B8237D77534CFC4
GENESIS_PRIVATE_KEY_ALGORITHM: ed25519
GENESIS_PRIVATE_KEY_PAYLOAD: 82b3bde54aebeca4146257da0de8d59d8e46d5fe34887dcd8072866792fcb3ad4164bf554923ece1fd412d241036d863a6ae430476c898248b8237d77534cfc4
GENESIS_FILE: /config/genesis.json
GENESIS_PUBLIC_KEY: ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB
GENESIS_SIGNATURE: 9030303030303030302d303030302d303030302d303030302d3030303030303030303030308c4b28660000000000811b2c0400808ba62848cf767d72e7f7f4b9d2d7ba07fee33760f79abe5597a51520e292a0cb0101819b61a8c82fc6565c5acc7f92ca6dc07ccd39fcc47dee3d6f85d59ec7b52fe651b20b985b401546b49a50057b4311beaccb822b8ef2cf4e25ce3fab3769c70e
SUMERAGI_TRUSTED_PEERS: '[{"address":"iroha1:1338","public_key":"ed0120815BBDC9775D28C3633269B25F22D048E2AA2E36017CBE5AD85F15220BEB6F6F"},{"address":"iroha3:1340","public_key":"ed0120A66522370D60B9C09E79ADE2E9BB1EF2E78733A944B999B3A6AEE687CE476D61"},{"address":"iroha2:1339","public_key":"ed0120F417E0371E6ADB32FD66749477402B1AB67F84A8E9B082E997980CC91F327736"}]'
ports:
- 1337:1337
Expand All @@ -41,7 +40,7 @@ services:
PRIVATE_KEY_PAYLOAD: c02ffad5e455e7ec620d74de5769681e4d8385906bce5a437eb67452a9efbbc2815bbdc9775d28c3633269b25f22d048e2aa2e36017cbe5ad85f15220beb6f6f
P2P_ADDRESS: 0.0.0.0:1338
API_ADDRESS: 0.0.0.0:8081
GENESIS_PUBLIC_KEY: ed01204164BF554923ECE1FD412D241036D863A6AE430476C898248B8237D77534CFC4
GENESIS_PUBLIC_KEY: ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB
SUMERAGI_TRUSTED_PEERS: '[{"address":"iroha0:1337","public_key":"ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB"},{"address":"iroha3:1340","public_key":"ed0120A66522370D60B9C09E79ADE2E9BB1EF2E78733A944B999B3A6AEE687CE476D61"},{"address":"iroha2:1339","public_key":"ed0120F417E0371E6ADB32FD66749477402B1AB67F84A8E9B082E997980CC91F327736"}]'
ports:
- 1338:1338
Expand All @@ -65,7 +64,7 @@ services:
PRIVATE_KEY_PAYLOAD: 29c5ed1409cb10fd791bc4ff8a6cb5e22a5fae7e36f448ef3ea2988b1319a88bf417e0371e6adb32fd66749477402b1ab67f84a8e9b082e997980cc91f327736
P2P_ADDRESS: 0.0.0.0:1339
API_ADDRESS: 0.0.0.0:8082
GENESIS_PUBLIC_KEY: ed01204164BF554923ECE1FD412D241036D863A6AE430476C898248B8237D77534CFC4
GENESIS_PUBLIC_KEY: ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB
SUMERAGI_TRUSTED_PEERS: '[{"address":"iroha1:1338","public_key":"ed0120815BBDC9775D28C3633269B25F22D048E2AA2E36017CBE5AD85F15220BEB6F6F"},{"address":"iroha0:1337","public_key":"ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB"},{"address":"iroha3:1340","public_key":"ed0120A66522370D60B9C09E79ADE2E9BB1EF2E78733A944B999B3A6AEE687CE476D61"}]'
ports:
- 1339:1339
Expand All @@ -89,7 +88,7 @@ services:
PRIVATE_KEY_PAYLOAD: 5eed4855fad183c451aac39dfc50831607e4cf408c98e2b977f3ce4a2df42ce2a66522370d60b9c09e79ade2e9bb1ef2e78733a944b999b3a6aee687ce476d61
P2P_ADDRESS: 0.0.0.0:1340
API_ADDRESS: 0.0.0.0:8083
GENESIS_PUBLIC_KEY: ed01204164BF554923ECE1FD412D241036D863A6AE430476C898248B8237D77534CFC4
GENESIS_PUBLIC_KEY: ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB
SUMERAGI_TRUSTED_PEERS: '[{"address":"iroha1:1338","public_key":"ed0120815BBDC9775D28C3633269B25F22D048E2AA2E36017CBE5AD85F15220BEB6F6F"},{"address":"iroha0:1337","public_key":"ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB"},{"address":"iroha2:1339","public_key":"ed0120F417E0371E6ADB32FD66749477402B1AB67F84A8E9B082E997980CC91F327736"}]'
ports:
- 1340:1340
Expand Down
2 changes: 1 addition & 1 deletion genesis/src/lib.rs
Expand Up @@ -96,7 +96,7 @@ impl FromStr for GenesisSignature {
type Err = GenesisSignatureParseError;

fn from_str(s: &str) -> Result<Self, Self::Err> {
Ok(GenesisSignature::from_hex_string(&s.as_bytes())?)
GenesisSignature::from_hex_string(&s.as_bytes())
}
}

Expand Down
9 changes: 6 additions & 3 deletions scripts/tests/consistency.sh
Expand Up @@ -29,16 +29,19 @@ case $1 in
}
}

genesis_keypair="--key-pair '{\"public_key\": \"ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB\",\"private_key\": {\"algorithm\": \"ed25519\",\"payload\": \"8f4c15e5d664da3f13778801d23d4e89b76e94c1b94b389544168b6cb894f84f8ba62848cf767d72e7f7f4b9d2d7ba07fee33760f79abe5597a51520e292a0cb\"}}'"
genesis_signature="--signature 9030303030303030302d303030302d303030302d303030302d3030303030303030303030308c4b28660000000000811b2c0400808ba62848cf767d72e7f7f4b9d2d7ba07fee33760f79abe5597a51520e292a0cb0101819b61a8c82fc6565c5acc7f92ca6dc07ccd39fcc47dee3d6f85d59ec7b52fe651b20b985b401546b49a50057b4311beaccb822b8ef2cf4e25ce3fab3769c70e"

command_base_for_single() {
echo "cargo run --release --bin iroha_swarm -- -p 1 -s Iroha --force --config-dir ./configs/swarm --health-check --build ."
echo "cargo run --release --bin iroha_swarm -- -p 1 -s Iroha --force --config-dir ./configs/swarm --health-check --build . $genesis_keypair $genesis_signature"
}

command_base_for_multiple_local() {
echo "cargo run --release --bin iroha_swarm -- -p 4 -s Iroha --force --config-dir ./configs/swarm --health-check --build ."
echo "cargo run --release --bin iroha_swarm -- -p 4 -s Iroha --force --config-dir ./configs/swarm --health-check --build . $genesis_keypair $genesis_signature"
}

command_base_for_default() {
echo "cargo run --release --bin iroha_swarm -- -p 4 -s Iroha --force --config-dir ./configs/swarm --health-check --image hyperledger/iroha2:dev"
echo "cargo run --release --bin iroha_swarm -- -p 4 -s Iroha --force --config-dir ./configs/swarm --health-check --image hyperledger/iroha2:dev $genesis_keypair $genesis_signature"
}


Expand Down
6 changes: 6 additions & 0 deletions tools/swarm/src/cli.rs
Expand Up @@ -10,6 +10,12 @@ pub struct Cli {
/// The Unicode `seed` string for deterministic key-generation.
#[arg(long, short)]
pub seed: Option<String>,
/// Explicit keypair in json format. Takes precedence over seed parameter.
#[arg(long)]
pub key_pair: Option<String>,
/// Genesis signature. Should be set with --key-pair.
#[arg(long, requires = "key_pair")]
pub signature: Option<String>,
/// Includes a health check configuration to each service in the Docker Compose output.
///
/// The health checks use predefined settings.
Expand Down
28 changes: 20 additions & 8 deletions tools/swarm/src/compose.rs
Expand Up @@ -164,13 +164,10 @@ impl DockerComposeServiceBuilder {
PairColon(peer.port_api, peer.port_api),
];

let (command, genesis_signature) = if genesis_signature.is_some() {
(
ServiceCommand::SubmitGenesis,
Some(generate_hex_string_signature(&chain_id, &peer.key_pair)),
)
let command = if genesis_signature.is_some() {
ServiceCommand::SubmitGenesis
} else {
(ServiceCommand::None, None)
ServiceCommand::None
};

let compact_env = CompactPeerEnv {
Expand Down Expand Up @@ -367,6 +364,9 @@ pub struct DockerComposeBuilder<'a> {
pub peers: NonZeroU16,
/// Crypto seed to use for keys generation
pub seed: Option<&'a [u8]>,
/// Keypair that takes precedence over seed if present
pub key_pair: Option<String>,
pub signature: Option<String>,
pub health_check: bool,
}

Expand All @@ -382,7 +382,12 @@ impl DockerComposeBuilder<'_> {
let chain_id = ChainId::from("00000000-0000-0000-0000-000000000000");
let peers = peer_generator::generate_peers(self.peers, self.seed)
.wrap_err("Failed to generate peers")?;
let genesis_key_pair = generate_key_pair(self.seed, GENESIS_KEYPAIR_SEED);

let genesis_key_pair = self.key_pair.clone().map_or(
Ok(generate_key_pair(self.seed, GENESIS_KEYPAIR_SEED)),
|json_key| serde_json::from_str(json_key.as_str()).map_err(|e| eyre!(e.to_string())),
)?;

let service_source = match &self.image_source {
ResolvedImageSource::Build { path } => {
ServiceSource::Build(path.relative_to(target_file_dir)?)
Expand All @@ -402,6 +407,11 @@ impl DockerComposeBuilder<'_> {

let mut peers_iter = peers.iter();

let signature = self.signature.clone().map_or(
generate_hex_string_signature(&chain_id, &genesis_key_pair),
|sign| sign,
);

let first_peer_service = {
let (name, peer) = peers_iter.next().expect("There is non-zero count of peers");
let service = DockerComposeServiceBuilder::new(
Expand All @@ -418,7 +428,7 @@ impl DockerComposeBuilder<'_> {
genesis_key_pair.public_key().clone(),
None,
)
.submit_genesis_with(generate_hex_string_signature(&chain_id, &genesis_key_pair))
.submit_genesis_with(signature)
.set_health_check(self.health_check)
.build();

Expand Down Expand Up @@ -781,6 +791,8 @@ mod tests {
},
seed,
health_check: true,
key_pair: None,
signature: None,
}
.build()
.expect("should build with no errors");
Expand Down
5 changes: 5 additions & 0 deletions tools/swarm/src/main.rs
Expand Up @@ -15,6 +15,7 @@ use crate::{cli::SourceParsed, compose::ResolvedImageSource};
fn main() -> Result<()> {
color_eyre::install()?;

#[allow(unused_variables)]
let Cli {
peers,
seed,
Expand All @@ -24,6 +25,8 @@ fn main() -> Result<()> {
out_file: target_file_raw,
config_dir: config_dir_raw,
health_check,
key_pair,
signature,
} = Cli::parse();

let seed = seed.map(String::into_bytes);
Expand Down Expand Up @@ -54,6 +57,8 @@ fn main() -> Result<()> {
peers,
seed,
health_check,
key_pair,
signature,
}
.build_and_write(banner_enabled)?;

Expand Down

0 comments on commit 8e920f1

Please sign in to comment.