use of com.radixdlt.crypto.ECPublicKey in project radixdlt by radixdlt.
the class MessageCentralBFTNetworkTest method when_send_vote__then_message_central_should_be_sent_vote_message.
@Test
public void when_send_vote__then_message_central_should_be_sent_vote_message() {
Vote vote = mock(Vote.class);
ECPublicKey leaderPk = ECKeyPair.generateNew().getPublicKey();
BFTNode leader = mock(BFTNode.class);
when(leader.getKey()).thenReturn(leaderPk);
network.voteDispatcher().dispatch(leader, vote);
verify(messageCentral, times(1)).send(eq(NodeId.fromPublicKey(leaderPk)), any(ConsensusEventMessage.class));
}
use of com.radixdlt.crypto.ECPublicKey in project radixdlt by radixdlt.
the class MessageCentralValidatorSyncTest method when_send_response__then_message_central_will_send_response.
@Test
public void when_send_response__then_message_central_will_send_response() {
VerifiedVertex vertex = mock(VerifiedVertex.class);
when(vertex.toSerializable()).thenReturn(mock(UnverifiedVertex.class));
ImmutableList<VerifiedVertex> vertices = ImmutableList.of(vertex);
BFTNode node = mock(BFTNode.class);
ECPublicKey ecPublicKey = mock(ECPublicKey.class);
when(node.getKey()).thenReturn(ecPublicKey);
sync.verticesResponseDispatcher().dispatch(node, new GetVerticesResponse(vertices));
verify(messageCentral, times(1)).send(any(), any(GetVerticesResponseMessage.class));
}
use of com.radixdlt.crypto.ECPublicKey in project radixdlt by radixdlt.
the class SimulationNodes method createBFTModule.
private Module createBFTModule(ECKeyPair self) {
Module module = Modules.combine(new AbstractModule() {
@Provides
@Self
private BFTNode self() {
return BFTNode.create(self.getPublicKey());
}
@Provides
@Self
private ECPublicKey key() {
return self.getPublicKey();
}
@Provides
private ECKeyPair keyPair() {
return self;
}
@Provides
@LocalSigner
HashSigner hashSigner() {
return self::sign;
}
}, new NodeNetworkMessagesModule(underlyingNetwork), baseModule);
// can break network behavior if incorrect modules are used
if (overrideModules.containsKey(self.getPublicKey())) {
final var nodeOverrideModules = overrideModules.get(self.getPublicKey());
module = Modules.override(module).with(nodeOverrideModules);
}
return module;
}
use of com.radixdlt.crypto.ECPublicKey in project radixdlt by radixdlt.
the class GenerateUniverses method main.
public static void main(String[] args) throws Exception {
Security.insertProviderAt(new BouncyCastleProvider(), 1);
Options options = new Options();
options.addOption("h", "help", false, "Show usage information (this message)");
options.addOption("p", "public-keys", true, "Specify validator keys");
options.addOption("v", "validator-count", true, "Specify number of validators to generate");
CommandLineParser parser = new DefaultParser();
CommandLine cmd = parser.parse(options, args);
if (!cmd.getArgList().isEmpty()) {
System.err.println("Extra arguments: " + String.join(" ", cmd.getArgList()));
usage(options);
return;
}
if (cmd.hasOption('h')) {
usage(options);
return;
}
var validatorKeys = new HashSet<ECPublicKey>();
if (cmd.getOptionValue("p") != null) {
var hexKeys = cmd.getOptionValue("p").split(",");
for (var hexKey : hexKeys) {
validatorKeys.add(ECPublicKey.fromHex(hexKey));
}
}
final int validatorsCount = cmd.getOptionValue("v") != null ? Integer.parseInt(cmd.getOptionValue("v")) : 0;
var generatedValidatorKeys = PrivateKeys.numeric(6).limit(validatorsCount).toList();
generatedValidatorKeys.stream().map(ECKeyPair::getPublicKey).forEach(validatorKeys::add);
// Issuances to mnemomic account, keys 1-5, and 1st validator
final var mnemomicKey = ECPublicKey.fromHex(mnemomicKeyHex);
final ImmutableList.Builder<TokenIssuance> tokenIssuancesBuilder = ImmutableList.builder();
tokenIssuancesBuilder.add(TokenIssuance.of(mnemomicKey, DEFAULT_ISSUANCE));
PrivateKeys.numeric(1).limit(5).map(k -> TokenIssuance.of(k.getPublicKey(), DEFAULT_ISSUANCE)).forEach(tokenIssuancesBuilder::add);
// Issue tokens to initial validators for now to support application services
validatorKeys.forEach(pk -> tokenIssuancesBuilder.add(TokenIssuance.of(pk, DEFAULT_ISSUANCE)));
// Stakes issued by mnemomic account
var stakes = validatorKeys.stream().map(pk -> new StakeTokens(REAddr.ofPubKeyAccount(mnemomicKey), pk, DEFAULT_STAKE)).collect(Collectors.toSet());
var timestamp = String.valueOf(Instant.now().getEpochSecond());
var genesisProvider = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
install(new CryptoModule());
install(new AbstractModule() {
@Provides
@Singleton
private Forks forks(Set<ForkBuilder> forkBuilders) {
return Forks.create(forkBuilders.stream().map(ForkBuilder::build).collect(Collectors.toSet()));
}
@Provides
@Singleton
private CurrentForkView currentForkView(Forks forks) {
return new CurrentForkView(forks, forks.genesisFork());
}
@Provides
@Singleton
@NewestForkConfig
private ForkConfig newestForkConfig(Forks forks) {
return forks.newestFork();
}
});
install(new MainnetForksModule());
bind(new TypeLiteral<List<TxAction>>() {
}).annotatedWith(Genesis.class).toInstance(List.of());
bind(LedgerAccumulator.class).to(SimpleLedgerAccumulatorAndVerifier.class);
bind(SystemCounters.class).toInstance(new SystemCountersImpl());
bindConstant().annotatedWith(Genesis.class).to(timestamp);
bind(new TypeLiteral<Set<StakeTokens>>() {
}).annotatedWith(Genesis.class).toInstance(stakes);
bind(new TypeLiteral<ImmutableList<TokenIssuance>>() {
}).annotatedWith(Genesis.class).toInstance(tokenIssuancesBuilder.build());
bind(new TypeLiteral<Set<ECPublicKey>>() {
}).annotatedWith(Genesis.class).toInstance(validatorKeys);
bindConstant().annotatedWith(MaxValidators.class).to(100);
OptionalBinder.newOptionalBinder(binder(), Key.get(new TypeLiteral<List<TxAction>>() {
}, Genesis.class));
}
}).getInstance(GenesisProvider.class);
var genesis = genesisProvider.get().getTxns().get(0);
IntStream.range(0, generatedValidatorKeys.size()).forEach(i -> {
System.out.format("export RADIXDLT_VALIDATOR_%s_PRIVKEY=%s%n", i, Bytes.toBase64String(generatedValidatorKeys.get(i).getPrivateKey()));
System.out.format("export RADIXDLT_VALIDATOR_%s_PUBKEY=%s%n", i, Addressing.ofNetwork(Network.LOCALNET).forNodes().of(generatedValidatorKeys.get(i).getPublicKey()));
});
if (validatorsCount > 0) {
System.out.format("export RADIXDLT_GENESIS_TXN=%s%n", Bytes.toHexString(genesis.getPayload()));
} else {
try (var writer = new BufferedWriter(new FileWriter("genesis.json"))) {
writer.write(new JSONObject().put("genesis", Bytes.toHexString(genesis.getPayload())).toString());
}
}
}
use of com.radixdlt.crypto.ECPublicKey in project radixdlt by radixdlt.
the class ValidatorRegisterConstraintScrypt method main.
@Override
public void main(Loader os) {
os.substate(new SubstateDefinition<>(ValidatorRegisteredCopy.class, SubstateTypeId.VALIDATOR_REGISTERED_FLAG_COPY.id(), buf -> {
REFieldSerialization.deserializeReservedByte(buf);
var epochUpdate = REFieldSerialization.deserializeOptionalNonNegativeLong(buf);
var key = REFieldSerialization.deserializeKey(buf);
var flag = REFieldSerialization.deserializeBoolean(buf);
return new ValidatorRegisteredCopy(epochUpdate, key, flag);
}, (s, buf) -> {
REFieldSerialization.serializeReservedByte(buf);
REFieldSerialization.serializeOptionalLong(buf, s.epochUpdate());
REFieldSerialization.serializeKey(buf, s.validatorKey());
buf.put((byte) (s.isRegistered() ? 1 : 0));
}, buf -> REFieldSerialization.deserializeKey(buf), (k, buf) -> REFieldSerialization.serializeKey(buf, (ECPublicKey) k), k -> new ValidatorRegisteredCopy(OptionalLong.empty(), (ECPublicKey) k, false)));
os.procedure(new DownProcedure<>(VoidReducerState.class, ValidatorRegisteredCopy.class, d -> new Authorization(PermissionLevel.USER, (r, c) -> {
if (!c.key().map(d.validatorKey()::equals).orElse(false)) {
throw new AuthorizationException("Key does not match.");
}
}), (d, s, r, c) -> {
return ReducerResult.incomplete(new UpdatingRegisteredNeedToReadEpoch(d.validatorKey()));
}));
os.procedure(new ReadProcedure<>(UpdatingRegisteredNeedToReadEpoch.class, EpochData.class, u -> new Authorization(PermissionLevel.USER, (r, c) -> {
}), (s, u, r) -> ReducerResult.incomplete(s.readEpoch(u))));
os.procedure(new UpProcedure<>(UpdatingRegistered.class, ValidatorRegisteredCopy.class, u -> new Authorization(PermissionLevel.USER, (r, c) -> {
}), (s, u, c, r) -> {
s.update(u);
return ReducerResult.complete();
}));
}
Aggregations