Replace RemoteVoteSigner with a user-supplied keypair
Vote program currently offers no path to vote with the authorized voter. There should be a VoteInstruction::new_authorized_vote() that accepts the keypair of the authorized voter and the pubkey of the vote account. The only option in current code is VoteInstruction::new_vote() that accepts the voter's keypair and assumes that pubkey is the vote account.
This commit is contained in:
parent
02eb234399
commit
0ef1fa7c76
@ -4,10 +4,8 @@ use solana::cluster_info::{Node, NodeInfo, FULLNODE_PORT_RANGE};
|
|||||||
use solana::fullnode::{Fullnode, FullnodeConfig};
|
use solana::fullnode::{Fullnode, FullnodeConfig};
|
||||||
use solana::local_vote_signer_service::LocalVoteSignerService;
|
use solana::local_vote_signer_service::LocalVoteSignerService;
|
||||||
use solana::service::Service;
|
use solana::service::Service;
|
||||||
use solana::voting_keypair::{RemoteVoteSigner, VotingKeypair};
|
|
||||||
use solana_sdk::genesis_block::GenesisBlock;
|
use solana_sdk::genesis_block::GenesisBlock;
|
||||||
use solana_sdk::signature::{read_keypair, Keypair, KeypairUtil};
|
use solana_sdk::signature::{read_keypair, Keypair, KeypairUtil};
|
||||||
use solana_vote_signer::rpc::{LocalVoteSigner, VoteSigner};
|
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
@ -33,6 +31,13 @@ fn main() {
|
|||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.help("File containing an identity (keypair)"),
|
.help("File containing an identity (keypair)"),
|
||||||
)
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("staker_keypair")
|
||||||
|
.long("staker-keypair")
|
||||||
|
.value_name("PATH")
|
||||||
|
.takes_value(true)
|
||||||
|
.help("File containing the staker's keypair"),
|
||||||
|
)
|
||||||
.arg(
|
.arg(
|
||||||
Arg::with_name("init_complete_file")
|
Arg::with_name("init_complete_file")
|
||||||
.long("init-complete-file")
|
.long("init-complete-file")
|
||||||
@ -136,6 +141,14 @@ fn main() {
|
|||||||
} else {
|
} else {
|
||||||
Keypair::new()
|
Keypair::new()
|
||||||
};
|
};
|
||||||
|
let staker_keypair = if let Some(identity) = matches.value_of("staker_keypair") {
|
||||||
|
read_keypair(identity).unwrap_or_else(|err| {
|
||||||
|
eprintln!("{}: Unable to open keypair file: {}", err, identity);
|
||||||
|
exit(1);
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
Keypair::new()
|
||||||
|
};
|
||||||
let ledger_path = matches.value_of("ledger").unwrap();
|
let ledger_path = matches.value_of("ledger").unwrap();
|
||||||
|
|
||||||
fullnode_config.sigverify_disabled = matches.is_present("no_sigverify");
|
fullnode_config.sigverify_disabled = matches.is_present("no_sigverify");
|
||||||
@ -172,7 +185,7 @@ fn main() {
|
|||||||
let gossip_addr = network.parse().expect("failed to parse network address");
|
let gossip_addr = network.parse().expect("failed to parse network address");
|
||||||
NodeInfo::new_entry_point(&gossip_addr)
|
NodeInfo::new_entry_point(&gossip_addr)
|
||||||
});
|
});
|
||||||
let (_signer_service, signer_addr) = if let Some(signer_addr) = matches.value_of("signer") {
|
let (_signer_service, _signer_addr) = if let Some(signer_addr) = matches.value_of("signer") {
|
||||||
(
|
(
|
||||||
None,
|
None,
|
||||||
signer_addr.to_string().parse().expect("Signer IP Address"),
|
signer_addr.to_string().parse().expect("Signer IP Address"),
|
||||||
@ -210,22 +223,11 @@ fn main() {
|
|||||||
fullnode_config.voting_disabled = true;
|
fullnode_config.voting_disabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
let vote_signer: Box<dyn VoteSigner + Sync + Send> = if !no_signer {
|
|
||||||
info!("Vote signer service address: {:?}", signer_addr);
|
|
||||||
Box::new(RemoteVoteSigner::new(signer_addr))
|
|
||||||
} else {
|
|
||||||
info!("Node will not vote");
|
|
||||||
Box::new(LocalVoteSigner::default())
|
|
||||||
};
|
|
||||||
let vote_signer = VotingKeypair::new_with_signer(&keypair, vote_signer);
|
|
||||||
let vote_account_id = vote_signer.pubkey();
|
|
||||||
info!("New vote account ID is {:?}", vote_account_id);
|
|
||||||
|
|
||||||
let fullnode = Fullnode::new(
|
let fullnode = Fullnode::new(
|
||||||
node,
|
node,
|
||||||
&keypair,
|
&keypair,
|
||||||
ledger_path,
|
ledger_path,
|
||||||
vote_signer,
|
staker_keypair,
|
||||||
cluster_entrypoint.as_ref(),
|
cluster_entrypoint.as_ref(),
|
||||||
&fullnode_config,
|
&fullnode_config,
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user