Search in sources :

Example 1 with TxAction

use of com.radixdlt.atom.TxAction 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());
        }
    }
}
Also used : IntStream(java.util.stream.IntStream) CryptoModule(com.radixdlt.modules.CryptoModule) SimpleLedgerAccumulatorAndVerifier(com.radixdlt.ledger.SimpleLedgerAccumulatorAndVerifier) TxAction(com.radixdlt.atom.TxAction) Key(com.google.inject.Key) MaxValidators(com.radixdlt.statecomputer.MaxValidators) Options(org.apache.commons.cli.Options) Security(java.security.Security) ForkBuilder(com.radixdlt.statecomputer.forks.ForkBuilder) Forks(com.radixdlt.statecomputer.forks.Forks) HelpFormatter(org.apache.commons.cli.HelpFormatter) ECPublicKey(com.radixdlt.crypto.ECPublicKey) DefaultParser(org.apache.commons.cli.DefaultParser) HashSet(java.util.HashSet) JSONObject(org.json.JSONObject) ImmutableList(com.google.common.collect.ImmutableList) CurrentForkView(com.radixdlt.statecomputer.forks.CurrentForkView) ForkConfig(com.radixdlt.statecomputer.forks.ForkConfig) CommandLine(org.apache.commons.cli.CommandLine) UInt256(com.radixdlt.utils.UInt256) Genesis(com.radixdlt.statecomputer.checkpoint.Genesis) PrivateKeys(com.radixdlt.utils.PrivateKeys) SystemCounters(com.radixdlt.counters.SystemCounters) Addressing(com.radixdlt.networks.Addressing) NewestForkConfig(com.radixdlt.statecomputer.forks.NewestForkConfig) Network(com.radixdlt.networks.Network) CommandLineParser(org.apache.commons.cli.CommandLineParser) BufferedWriter(java.io.BufferedWriter) FileWriter(java.io.FileWriter) GenesisProvider(com.radixdlt.statecomputer.checkpoint.GenesisProvider) Set(java.util.Set) REAddr(com.radixdlt.identifiers.REAddr) Instant(java.time.Instant) Collectors(java.util.stream.Collectors) BouncyCastleProvider(org.bouncycastle.jce.provider.BouncyCastleProvider) SystemCountersImpl(com.radixdlt.counters.SystemCountersImpl) List(java.util.List) Provides(com.google.inject.Provides) ECKeyPair(com.radixdlt.crypto.ECKeyPair) Bytes(com.radixdlt.utils.Bytes) MainnetForksModule(com.radixdlt.statecomputer.forks.modules.MainnetForksModule) OptionalBinder(com.google.inject.multibindings.OptionalBinder) Guice(com.google.inject.Guice) Amount(com.radixdlt.application.tokens.Amount) TypeLiteral(com.google.inject.TypeLiteral) LedgerAccumulator(com.radixdlt.ledger.LedgerAccumulator) AbstractModule(com.google.inject.AbstractModule) Singleton(com.google.inject.Singleton) Options(org.apache.commons.cli.Options) HashSet(java.util.HashSet) Set(java.util.Set) CurrentForkView(com.radixdlt.statecomputer.forks.CurrentForkView) ImmutableList(com.google.common.collect.ImmutableList) FileWriter(java.io.FileWriter) BufferedWriter(java.io.BufferedWriter) TypeLiteral(com.google.inject.TypeLiteral) MainnetForksModule(com.radixdlt.statecomputer.forks.modules.MainnetForksModule) TxAction(com.radixdlt.atom.TxAction) ImmutableList(com.google.common.collect.ImmutableList) List(java.util.List) CommandLineParser(org.apache.commons.cli.CommandLineParser) BouncyCastleProvider(org.bouncycastle.jce.provider.BouncyCastleProvider) DefaultParser(org.apache.commons.cli.DefaultParser) HashSet(java.util.HashSet) Forks(com.radixdlt.statecomputer.forks.Forks) MaxValidators(com.radixdlt.statecomputer.MaxValidators) ForkConfig(com.radixdlt.statecomputer.forks.ForkConfig) NewestForkConfig(com.radixdlt.statecomputer.forks.NewestForkConfig) LedgerAccumulator(com.radixdlt.ledger.LedgerAccumulator) CryptoModule(com.radixdlt.modules.CryptoModule) SystemCounters(com.radixdlt.counters.SystemCounters) NewestForkConfig(com.radixdlt.statecomputer.forks.NewestForkConfig) Provides(com.google.inject.Provides) ForkBuilder(com.radixdlt.statecomputer.forks.ForkBuilder) AbstractModule(com.google.inject.AbstractModule) CommandLine(org.apache.commons.cli.CommandLine) JSONObject(org.json.JSONObject) Singleton(com.google.inject.Singleton) SystemCountersImpl(com.radixdlt.counters.SystemCountersImpl) Genesis(com.radixdlt.statecomputer.checkpoint.Genesis)

Aggregations

ImmutableList (com.google.common.collect.ImmutableList)1 AbstractModule (com.google.inject.AbstractModule)1 Guice (com.google.inject.Guice)1 Key (com.google.inject.Key)1 Provides (com.google.inject.Provides)1 Singleton (com.google.inject.Singleton)1 TypeLiteral (com.google.inject.TypeLiteral)1 OptionalBinder (com.google.inject.multibindings.OptionalBinder)1 Amount (com.radixdlt.application.tokens.Amount)1 TxAction (com.radixdlt.atom.TxAction)1 SystemCounters (com.radixdlt.counters.SystemCounters)1 SystemCountersImpl (com.radixdlt.counters.SystemCountersImpl)1 ECKeyPair (com.radixdlt.crypto.ECKeyPair)1 ECPublicKey (com.radixdlt.crypto.ECPublicKey)1 REAddr (com.radixdlt.identifiers.REAddr)1 LedgerAccumulator (com.radixdlt.ledger.LedgerAccumulator)1 SimpleLedgerAccumulatorAndVerifier (com.radixdlt.ledger.SimpleLedgerAccumulatorAndVerifier)1 CryptoModule (com.radixdlt.modules.CryptoModule)1 Addressing (com.radixdlt.networks.Addressing)1 Network (com.radixdlt.networks.Network)1