use of com.radixdlt.crypto.ECKeyPair in project radixdlt by radixdlt.
the class CMTokensTest method when_correct_1_to_1_token_send__then_should_not_error.
@Test
public void when_correct_1_to_1_token_send__then_should_not_error() {
ECKeyPair sender = ECKeyPair.generateNew();
RadixAddress senderAddress = new RadixAddress((byte) 0, sender.getPublicKey());
RadixAddress receiverAddress = new RadixAddress((byte) 0, ECKeyPair.generateNew().getPublicKey());
TransferrableTokensParticle input = new TransferrableTokensParticle(senderAddress, UInt256.ONE, this.granularity, this.token, this.permissions);
TransferrableTokensParticle output = new TransferrableTokensParticle(receiverAddress, UInt256.ONE, this.granularity, this.token, this.permissions);
HashCode witness = HashUtils.random256();
CMInstruction cmInstruction = new CMInstruction(ImmutableList.of(CMMicroInstruction.checkSpinAndPush(input, Spin.UP), CMMicroInstruction.checkSpinAndPush(output, Spin.NEUTRAL), CMMicroInstruction.particleGroup()), ImmutableMap.of(sender.euid(), sender.sign(witness)));
Optional<CMError> error = cm.validate(cmInstruction, witness, PermissionLevel.USER);
assertThat(error).isEmpty();
}
use of com.radixdlt.crypto.ECKeyPair in project radixdlt by radixdlt.
the class CMTokensTest method when_another_correct_2_inputs_to_1_output_token_send__then_should_not_error.
@Test
public void when_another_correct_2_inputs_to_1_output_token_send__then_should_not_error() {
ECKeyPair sender = ECKeyPair.generateNew();
RadixAddress senderAddress = new RadixAddress((byte) 0, sender.getPublicKey());
RadixAddress receiverAddress = new RadixAddress((byte) 0, ECKeyPair.generateNew().getPublicKey());
TransferrableTokensParticle input0 = new TransferrableTokensParticle(senderAddress, UInt256.ONE, this.granularity, this.token, this.permissions);
TransferrableTokensParticle input1 = new TransferrableTokensParticle(senderAddress, UInt256.TWO, UInt256.ONE, this.token, this.permissions);
TransferrableTokensParticle output = new TransferrableTokensParticle(receiverAddress, UInt256.THREE, this.granularity, this.token, this.permissions);
HashCode witness = HashUtils.random256();
CMInstruction cmInstruction = new CMInstruction(ImmutableList.of(CMMicroInstruction.checkSpinAndPush(output, Spin.NEUTRAL), CMMicroInstruction.checkSpinAndPush(input0, Spin.UP), CMMicroInstruction.checkSpinAndPush(input1, Spin.UP), CMMicroInstruction.particleGroup()), ImmutableMap.of(sender.euid(), sender.sign(witness)));
Optional<CMError> error = cm.validate(cmInstruction, witness, PermissionLevel.USER);
error.map(CMError::getCmValidationState).ifPresent(System.out::println);
assertThat(error).isEmpty();
}
use of com.radixdlt.crypto.ECKeyPair in project radixdlt by radixdlt.
the class CMTokensTest method when_correct_2_inputs_to_1_output_token_send__then_should_not_error.
@Test
public void when_correct_2_inputs_to_1_output_token_send__then_should_not_error() {
ECKeyPair sender = ECKeyPair.generateNew();
RadixAddress senderAddress = new RadixAddress((byte) 0, sender.getPublicKey());
RadixAddress receiverAddress = new RadixAddress((byte) 0, ECKeyPair.generateNew().getPublicKey());
TransferrableTokensParticle input0 = new TransferrableTokensParticle(senderAddress, UInt256.ONE, this.granularity, this.token, this.permissions);
TransferrableTokensParticle input1 = new TransferrableTokensParticle(senderAddress, UInt256.TWO, UInt256.ONE, this.token, this.permissions);
TransferrableTokensParticle output = new TransferrableTokensParticle(receiverAddress, UInt256.THREE, this.granularity, this.token, this.permissions);
HashCode witness = HashUtils.random256();
CMInstruction cmInstruction = new CMInstruction(ImmutableList.of(CMMicroInstruction.checkSpinAndPush(input0, Spin.UP), CMMicroInstruction.checkSpinAndPush(output, Spin.NEUTRAL), CMMicroInstruction.checkSpinAndPush(input1, Spin.UP), CMMicroInstruction.particleGroup()), ImmutableMap.of(sender.euid(), sender.sign(witness)));
Optional<CMError> error = cm.validate(cmInstruction, witness, PermissionLevel.USER);
error.map(CMError::getCmValidationState).ifPresent(System.out::println);
assertThat(error).isEmpty();
}
use of com.radixdlt.crypto.ECKeyPair 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.ECKeyPair in project radixdlt by radixdlt.
the class ConsensusModuleTest method getExternalModule.
private Module getExternalModule() {
return new AbstractModule() {
@Override
protected void configure() {
bind(Ledger.class).toInstance(mock(Ledger.class));
bind(new TypeLiteral<EventDispatcher<LocalTimeoutOccurrence>>() {
}).toInstance(rmock(EventDispatcher.class));
bind(new TypeLiteral<EventDispatcher<ViewUpdate>>() {
}).toInstance(rmock(EventDispatcher.class));
bind(new TypeLiteral<EventDispatcher<BFTInsertUpdate>>() {
}).toInstance(rmock(EventDispatcher.class));
bind(new TypeLiteral<EventDispatcher<BFTRebuildUpdate>>() {
}).toInstance(rmock(EventDispatcher.class));
bind(new TypeLiteral<EventDispatcher<BFTHighQCUpdate>>() {
}).toInstance(rmock(EventDispatcher.class));
bind(new TypeLiteral<EventDispatcher<BFTCommittedUpdate>>() {
}).toInstance(rmock(EventDispatcher.class));
bind(new TypeLiteral<EventDispatcher<LocalSyncRequest>>() {
}).toInstance(rmock(EventDispatcher.class));
bind(new TypeLiteral<ScheduledEventDispatcher<GetVerticesRequest>>() {
}).toInstance(rmock(ScheduledEventDispatcher.class));
bind(new TypeLiteral<ScheduledEventDispatcher<ScheduledLocalTimeout>>() {
}).toInstance(rmock(ScheduledEventDispatcher.class));
bind(new TypeLiteral<EventDispatcher<ViewQuorumReached>>() {
}).toInstance(rmock(EventDispatcher.class));
bind(new TypeLiteral<RemoteEventDispatcher<Vote>>() {
}).toInstance(rmock(RemoteEventDispatcher.class));
bind(new TypeLiteral<RemoteEventDispatcher<Proposal>>() {
}).toInstance(rmock(RemoteEventDispatcher.class));
bind(new TypeLiteral<RemoteEventDispatcher<GetVerticesRequest>>() {
}).toInstance(requestSender);
bind(new TypeLiteral<RemoteEventDispatcher<GetVerticesResponse>>() {
}).toInstance(responseSender);
bind(new TypeLiteral<RemoteEventDispatcher<GetVerticesErrorResponse>>() {
}).toInstance(errorResponseSender);
bind(new TypeLiteral<EventDispatcher<NoVote>>() {
}).toInstance(rmock(EventDispatcher.class));
bind(new TypeLiteral<ScheduledEventDispatcher<View>>() {
}).toInstance(rmock(ScheduledEventDispatcher.class));
bind(new TypeLiteral<ScheduledEventDispatcher<VertexRequestTimeout>>() {
}).toInstance(rmock(ScheduledEventDispatcher.class));
bind(PersistentVertexStore.class).toInstance(mock(PersistentVertexStore.class));
bind(PersistentSafetyStateStore.class).toInstance(mock(PersistentSafetyStateStore.class));
bind(NextTxnsGenerator.class).toInstance(mock(NextTxnsGenerator.class));
bind(SystemCounters.class).toInstance(mock(SystemCounters.class));
bind(TimeSupplier.class).toInstance(mock(TimeSupplier.class));
bind(BFTConfiguration.class).toInstance(bftConfiguration);
LedgerProof proof = mock(LedgerProof.class);
when(proof.getView()).thenReturn(View.genesis());
bind(LedgerProof.class).annotatedWith(LastProof.class).toInstance(proof);
bind(RateLimiter.class).annotatedWith(GetVerticesRequestRateLimit.class).toInstance(RateLimiter.create(Double.MAX_VALUE));
bindConstant().annotatedWith(BFTSyncPatienceMillis.class).to(200);
bindConstant().annotatedWith(PacemakerTimeout.class).to(1000L);
bindConstant().annotatedWith(PacemakerRate.class).to(2.0);
bindConstant().annotatedWith(PacemakerMaxExponent.class).to(6);
ECKeyPair ecKeyPair = ECKeyPair.generateNew();
bind(HashSigner.class).toInstance(ecKeyPair::sign);
}
@Provides
ViewUpdate viewUpdate(@Self BFTNode node) {
return ViewUpdate.create(View.of(1), mock(HighQC.class), node, node);
}
@Provides
@Self
private BFTNode bftNode() {
return BFTNode.create(ecKeyPair.getPublicKey());
}
};
}
Aggregations