public StraxRegTest() { this.Name = "StraxRegTest"; this.NetworkType = NetworkType.Regtest; this.Magic = BitConverter.ToUInt32(Encoding.ASCII.GetBytes("RtrX")); this.DefaultPort = 37105; this.DefaultMaxOutboundConnections = 16; this.DefaultMaxInboundConnections = 109; this.DefaultRPCPort = 37104; this.DefaultAPIPort = 37103; //this.DefaultSignalRPort = 37102; this.MaxTipAge = 2 * 60 * 60; this.MinTxFee = 10000; this.FallbackFee = 10000; this.MinRelayTxFee = 10000; this.RootFolderName = StraxNetwork.StraxRootFolderName; this.DefaultConfigFilename = StraxNetwork.StraxDefaultConfigFilename; this.MaxTimeOffsetSeconds = 25 * 60; this.CoinTicker = "TSTRAX"; this.DefaultBanTimeSeconds = 11250; // 500 (MaxReorg) * 45 (TargetSpacing) / 2 = 3 hours, 7 minutes and 30 seconds this.CirrusRewardDummyAddress = "PDpvfcpPm9cjQEoxWzQUL699N8dPaf8qML"; // Cirrus test address var powLimit = new Target(new uint256("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")); var consensusFactory = new StraxConsensusFactory(); // Create the genesis block. this.GenesisTime = 1470467000; this.GenesisNonce = 1; this.GenesisBits = powLimit.ToCompact(); this.GenesisVersion = 1; this.GenesisReward = Money.Zero; Block genesisBlock = StraxNetwork.CreateGenesisBlock(consensusFactory, this.GenesisTime, this.GenesisNonce, this.GenesisBits, this.GenesisVersion, this.GenesisReward, "regteststraxgenesisblock"); this.Genesis = genesisBlock; // Taken from Stratis. var consensusOptions = new PosConsensusOptions { MaxBlockBaseSize = 1_000_000, MaxBlockSerializedSize = 4_000_000, MaxStandardVersion = 2, MaxStandardTxWeight = 150_000, MaxBlockSigopsCost = 20_000, MaxStandardTxSigopsCost = 20_000 / 5, WitnessScaleFactor = 4 }; var buriedDeployments = new BuriedDeploymentsArray { [BuriedDeployments.BIP34] = 0, [BuriedDeployments.BIP65] = 0, [BuriedDeployments.BIP66] = 0 }; var bip9Deployments = new StraxBIP9Deployments() { // Always active. [StraxBIP9Deployments.CSV] = new BIP9DeploymentsParameters("CSV", 0, BIP9DeploymentsParameters.AlwaysActive, 999999999, BIP9DeploymentsParameters.DefaultRegTestThreshold), [StraxBIP9Deployments.Segwit] = new BIP9DeploymentsParameters("Segwit", 1, BIP9DeploymentsParameters.AlwaysActive, 999999999, BIP9DeploymentsParameters.DefaultRegTestThreshold), [StraxBIP9Deployments.ColdStaking] = new BIP9DeploymentsParameters("ColdStaking", 2, BIP9DeploymentsParameters.AlwaysActive, 999999999, BIP9DeploymentsParameters.DefaultRegTestThreshold) }; // To successfully process the OP_FEDERATION opcode the federations should be known. this.Federations = new Federations(); // Cirrus federation. var cirrusFederationMnemonics = new[] { "ensure feel swift crucial bridge charge cloud tell hobby twenty people mandate", "quiz sunset vote alley draw turkey hill scrap lumber game differ fiction", "exchange rent bronze pole post hurry oppose drama eternal voice client state" }.Select(m => new Mnemonic(m, Wordlist.English)).ToList(); // Will replace the last multisig member. var newFederationMemberMnemonics = new string[] { "fat chalk grant major hair possible adjust talent magnet lobster retreat siren" }.Select(m => new Mnemonic(m, Wordlist.English)).ToList(); // Mimic the code found in CirrusRegTest. var cirrusFederationKeys = cirrusFederationMnemonics.Take(2).Concat(newFederationMemberMnemonics).Select(m => m.DeriveExtKey().PrivateKey).ToList(); List <PubKey> cirrusFederationPubKeys = cirrusFederationKeys.Select(k => k.PubKey).ToList(); // Transaction-signing keys! this.Federations.RegisterFederation(new Federation.Federation(cirrusFederationPubKeys.ToArray())); this.Consensus = new Consensus.Consensus( consensusFactory: consensusFactory, consensusOptions: consensusOptions, coinType: 1, // Per https://github.com/satoshilabs/slips/blob/master/slip-0044.md - testnets share a cointype hashGenesisBlock: genesisBlock.GetHash(), subsidyHalvingInterval: 210000, majorityEnforceBlockUpgrade: 750, majorityRejectBlockOutdated: 950, majorityWindow: 1000, buriedDeployments: buriedDeployments, bip9Deployments: bip9Deployments, bip34Hash: null, minerConfirmationWindow: 2016, // nPowTargetTimespan / nPowTargetSpacing maxReorgLength: 500, defaultAssumeValid: null, // turn off assumevalid for regtest. maxMoney: long.MaxValue, coinbaseMaturity: 10, premineHeight: 2, premineReward: Money.Coins(130000000), proofOfWorkReward: Money.Coins(18), targetTimespan: TimeSpan.FromSeconds(14 * 24 * 60 * 60), // two weeks targetSpacing: TimeSpan.FromSeconds(45), powAllowMinDifficultyBlocks: true, posNoRetargeting: true, powNoRetargeting: true, powLimit: powLimit, minimumChainWork: null, isProofOfStake: true, lastPowBlock: 12500, proofOfStakeLimit: new BigInteger(uint256.Parse("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").ToBytes(false)), proofOfStakeLimitV2: new BigInteger(uint256.Parse("000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff").ToBytes(false)), proofOfStakeReward: Money.Coins(18), proofOfStakeTimestampMask: 0x0000000F // 16 sec ); this.Consensus.PosEmptyCoinbase = false; this.Base58Prefixes = new byte[12][]; this.Base58Prefixes[(int)Base58Type.PUBKEY_ADDRESS] = new byte[] { (120) }; this.Base58Prefixes[(int)Base58Type.SCRIPT_ADDRESS] = new byte[] { (127) }; this.Base58Prefixes[(int)Base58Type.SECRET_KEY] = new byte[] { (120 + 128) }; // Copied from StraxTest: this.Base58Prefixes[(int)Base58Type.ENCRYPTED_SECRET_KEY_NO_EC] = new byte[] { 0x01, 0x42 }; this.Base58Prefixes[(int)Base58Type.ENCRYPTED_SECRET_KEY_EC] = new byte[] { 0x01, 0x43 }; this.Base58Prefixes[(int)Base58Type.EXT_PUBLIC_KEY] = new byte[] { (0x04), (0x88), (0xB2), (0x1E) }; this.Base58Prefixes[(int)Base58Type.EXT_SECRET_KEY] = new byte[] { (0x04), (0x88), (0xAD), (0xE4) }; this.Base58Prefixes[(int)Base58Type.PASSPHRASE_CODE] = new byte[] { 0x2C, 0xE9, 0xB3, 0xE1, 0xFF, 0x39, 0xE2 }; this.Base58Prefixes[(int)Base58Type.CONFIRMATION_CODE] = new byte[] { 0x64, 0x3B, 0xF6, 0xA8, 0x9A }; this.Base58Prefixes[(int)Base58Type.ASSET_ID] = new byte[] { 23 }; this.Checkpoints = new Dictionary <int, CheckpointInfo>() { }; this.Bech32Encoders = new Bech32Encoder[2]; var encoder = new Bech32Encoder("tstrax"); this.Bech32Encoders[(int)Bech32Type.WITNESS_PUBKEY_ADDRESS] = encoder; this.Bech32Encoders[(int)Bech32Type.WITNESS_SCRIPT_ADDRESS] = encoder; this.DNSSeeds = new List <DNSSeedData>(); this.SeedNodes = new List <NetworkAddress>(); this.StandardScriptsRegistry = new StraxStandardScriptsRegistry(); Assert(this.DefaultBanTimeSeconds <= this.Consensus.MaxReorgLength * this.Consensus.TargetSpacing.TotalSeconds / 2); Assert(this.Consensus.HashGenesisBlock == uint256.Parse("0x77283cca51b83fe3bda9ce8966248613036b0dc55a707ce76ca7b79aaa9962e4")); StraxNetwork.RegisterRules(this.Consensus); StraxNetwork.RegisterMempoolRules(this.Consensus); } }
public StraxMain() { this.Name = "StraxMain"; this.NetworkType = NetworkType.Mainnet; this.Magic = BitConverter.ToUInt32(Encoding.ASCII.GetBytes("StrX")); this.DefaultPort = 17105; this.DefaultMaxOutboundConnections = 16; this.DefaultMaxInboundConnections = 109; this.DefaultRPCPort = 17104; this.DefaultAPIPort = 17103; //this.DefaultSignalRPort = 17102; this.MaxTipAge = 2 * 60 * 60; this.MinTxFee = 10000; this.MaxTxFee = Money.Coins(1).Satoshi; this.FallbackFee = 10000; this.MinRelayTxFee = 10000; this.RootFolderName = StraxNetwork.StraxRootFolderName; this.DefaultConfigFilename = StraxNetwork.StraxDefaultConfigFilename; this.MaxTimeOffsetSeconds = 25 * 60; this.CoinTicker = "STRAX"; this.DefaultBanTimeSeconds = 11250; // 500 (MaxReorg) * 45 (TargetSpacing) / 2 = 3 hours, 7 minutes and 30 seconds this.CirrusRewardDummyAddress = "CPqxvnzfXngDi75xBJKqi4e6YrFsinrJka"; // Cirrus main address // To successfully process the OP_FEDERATION opcode the federations should be known. this.Federations = new Federations(); this.Federations.RegisterFederation(new Federation.Federation(new[] { new PubKey("03797a2047f84ba7dcdd2816d4feba45ae70a59b3aa97f46f7877df61aa9f06a21"), new PubKey("0209cfca2490dec022f097114090c919e85047de0790c1c97451e0f50c2199a957"), new PubKey("032e4088451c5a7952fb6a862cdad27ea18b2e12bccb718f13c9fdcc1caf0535b4"), new PubKey("035bf78614171397b080c5b375dbb7a5ed2a4e6fb43a69083267c880f66de5a4f9"), new PubKey("02387a219b1de54d4dc73a710a2315d957fc37ab04052a6e225c89205b90a881cd"), new PubKey("028078c0613033e5b4d4745300ede15d87ed339e379daadc6481d87abcb78732fa"), new PubKey("02b3e16d2e4bbad6dba1e699934a52d58d9b60b6e7eed303e400e95f2dbc2ef3fd"), new PubKey("02ba8b842997ce50c8e29c24a5452de5482f1584ae79778950b7bae24d4cc68dad"), new PubKey("02cbd907b0bf4d757dee7ea4c28e63e46af19dc8df0c924ee5570d9457be2f4c73"), new PubKey("02d371f3a0cffffcf5636e6d4b79d9f018a1a18fbf64c39542b382c622b19af9de"), new PubKey("02f891910d28fc26f272da8d7f548fdc18c286704907673e839dc07e8df416c15e"), new PubKey("0337e816a3433c71c4bbc095a54a0715a6da7a70526d2afb8dba3d8d78d33053bf"), new PubKey("035569e42835e25c854daa7de77c20f1009119a5667494664a46b5154db7ee768a"), new PubKey("03cda7ea577e8fbe5d45b851910ec4a795e5cc12d498cf80d39ba1d9a455942188"), new PubKey("02680321118bce869933b07ea42cc04d2a2804134b06db582427d6b9688b3536a4") })); var consensusFactory = new StraxConsensusFactory(); // Create the genesis block. this.GenesisTime = 1604913812; // ~9 November 2020 - https://www.unixtimestamp.com/ this.GenesisNonce = 747342; // Set to 1 until correct value found this.GenesisBits = 0x1e0fffff; // The difficulty target this.GenesisVersion = 536870912; // 'Empty' BIP9 deployments as they are all activated from genesis already this.GenesisReward = Money.Zero; Block genesisBlock = StraxNetwork.CreateGenesisBlock(consensusFactory, this.GenesisTime, this.GenesisNonce, this.GenesisBits, this.GenesisVersion, this.GenesisReward, "stratisplatform.com/2020/09/25/introducing-strax/"); this.Genesis = genesisBlock; // Taken from Stratis. var consensusOptions = new PosConsensusOptions { MaxBlockBaseSize = 1_000_000, MaxBlockSerializedSize = 4_000_000, MaxStandardVersion = 2, MaxStandardTxWeight = 150_000, MaxBlockSigopsCost = 20_000, MaxStandardTxSigopsCost = 20_000 / 5, WitnessScaleFactor = 4 }; var buriedDeployments = new BuriedDeploymentsArray { [BuriedDeployments.BIP34] = 0, [BuriedDeployments.BIP65] = 0, [BuriedDeployments.BIP66] = 0 }; var bip9Deployments = new StraxBIP9Deployments() { // Always active. [StraxBIP9Deployments.CSV] = new BIP9DeploymentsParameters("CSV", 0, BIP9DeploymentsParameters.AlwaysActive, 999999999, BIP9DeploymentsParameters.DefaultMainnetThreshold), [StraxBIP9Deployments.Segwit] = new BIP9DeploymentsParameters("Segwit", 1, BIP9DeploymentsParameters.AlwaysActive, 999999999, BIP9DeploymentsParameters.DefaultMainnetThreshold), [StraxBIP9Deployments.ColdStaking] = new BIP9DeploymentsParameters("ColdStaking", 2, BIP9DeploymentsParameters.AlwaysActive, 999999999, BIP9DeploymentsParameters.DefaultMainnetThreshold) }; this.Consensus = new Consensus.Consensus( consensusFactory: consensusFactory, consensusOptions: consensusOptions, coinType: 105105, // https://github.com/satoshilabs/slips/blob/master/slip-0044.md hashGenesisBlock: genesisBlock.GetHash(), subsidyHalvingInterval: 210000, majorityEnforceBlockUpgrade: 750, majorityRejectBlockOutdated: 950, majorityWindow: 1000, buriedDeployments: buriedDeployments, bip9Deployments: bip9Deployments, bip34Hash: null, minerConfirmationWindow: 2016, maxReorgLength: 500, defaultAssumeValid: null, // TODO: Set this once some checkpoint candidates have elapsed maxMoney: long.MaxValue, coinbaseMaturity: 50, premineHeight: 2, premineReward: Money.Coins(124987850), proofOfWorkReward: Money.Coins(18), targetTimespan: TimeSpan.FromSeconds(14 * 24 * 60 * 60), targetSpacing: TimeSpan.FromSeconds(45), powAllowMinDifficultyBlocks: false, posNoRetargeting: false, powNoRetargeting: false, powLimit: new Target(new uint256("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")), minimumChainWork: null, isProofOfStake: true, lastPowBlock: 675, proofOfStakeLimit: new BigInteger(uint256.Parse("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").ToBytes(false)), proofOfStakeLimitV2: new BigInteger(uint256.Parse("000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff").ToBytes(false)), proofOfStakeReward: Money.Coins(18), proofOfStakeTimestampMask: 0x0000000F // 16 sec ); this.Consensus.PosEmptyCoinbase = false; this.Base58Prefixes = new byte[12][]; this.Base58Prefixes[(int)Base58Type.PUBKEY_ADDRESS] = new byte[] { 75 }; // X this.Base58Prefixes[(int)Base58Type.SCRIPT_ADDRESS] = new byte[] { 140 }; // y this.Base58Prefixes[(int)Base58Type.SECRET_KEY] = new byte[] { (75 + 128) }; this.Base58Prefixes[(int)Base58Type.ENCRYPTED_SECRET_KEY_NO_EC] = new byte[] { 0x01, 0x42 }; this.Base58Prefixes[(int)Base58Type.ENCRYPTED_SECRET_KEY_EC] = new byte[] { 0x01, 0x43 }; this.Base58Prefixes[(int)Base58Type.EXT_PUBLIC_KEY] = new byte[] { (0x04), (0x88), (0xB2), (0x1E) }; this.Base58Prefixes[(int)Base58Type.EXT_SECRET_KEY] = new byte[] { (0x04), (0x88), (0xAD), (0xE4) }; this.Base58Prefixes[(int)Base58Type.PASSPHRASE_CODE] = new byte[] { 0x2C, 0xE9, 0xB3, 0xE1, 0xFF, 0x39, 0xE2 }; this.Base58Prefixes[(int)Base58Type.CONFIRMATION_CODE] = new byte[] { 0x64, 0x3B, 0xF6, 0xA8, 0x9A }; this.Base58Prefixes[(int)Base58Type.ASSET_ID] = new byte[] { 23 }; this.Checkpoints = new Dictionary <int, CheckpointInfo> { { 0, new CheckpointInfo(new uint256("0xebe158d09325c470276619ebc5f7f87c98c0ed4b211c46a17a6457655811d082"), new uint256("0x0000000000000000000000000000000000000000000000000000000000000000")) },
public StraxTest() { this.Name = "StraxTest"; this.NetworkType = NetworkType.Testnet; this.Magic = BitConverter.ToUInt32(Encoding.ASCII.GetBytes("TtrX")); this.DefaultPort = 27105; this.DefaultMaxOutboundConnections = 16; this.DefaultMaxInboundConnections = 109; this.DefaultRPCPort = 27104; this.DefaultAPIPort = 27103; //this.DefaultSignalRPort = 27102; this.MaxTipAge = 2 * 60 * 60; this.MinTxFee = 10000; this.FallbackFee = 10000; this.MinRelayTxFee = 10000; this.RootFolderName = StraxNetwork.StraxRootFolderName; this.DefaultConfigFilename = StraxNetwork.StraxDefaultConfigFilename; this.MaxTimeOffsetSeconds = 25 * 60; this.CoinTicker = "TSTRAX"; this.DefaultBanTimeSeconds = 11250; // 500 (MaxReorg) * 45 (TargetSpacing) / 2 = 3 hours, 7 minutes and 30 seconds this.CirrusRewardDummyAddress = "tGXZrZiU44fx3SQj8tAQ3Zexy2VuELZtoh"; var consensusFactory = new StraxConsensusFactory(); // Create the genesis block. this.GenesisTime = 1598918400; // 1 September 2020 this.GenesisNonce = 109534; this.GenesisBits = new Target(new uint256("0000ffff00000000000000000000000000000000000000000000000000000000")).ToCompact(); // This should be set to the same as the PowLimit this.GenesisVersion = 1; this.GenesisReward = Money.Zero; Block genesisBlock = StraxNetwork.CreateGenesisBlock(consensusFactory, this.GenesisTime, this.GenesisNonce, this.GenesisBits, this.GenesisVersion, this.GenesisReward, "teststraxgenesisblock"); this.Genesis = genesisBlock; // Taken from Stratis. var consensusOptions = new PosConsensusOptions { MaxBlockBaseSize = 1_000_000, MaxBlockSerializedSize = 4_000_000, MaxStandardVersion = 2, MaxStandardTxWeight = 150_000, MaxBlockSigopsCost = 20_000, MaxStandardTxSigopsCost = 20_000 / 5, WitnessScaleFactor = 4 }; var buriedDeployments = new BuriedDeploymentsArray { [BuriedDeployments.BIP34] = 0, [BuriedDeployments.BIP65] = 0, [BuriedDeployments.BIP66] = 0 }; var bip9Deployments = new StraxBIP9Deployments() { // Always active. [StraxBIP9Deployments.CSV] = new BIP9DeploymentsParameters("CSV", 0, BIP9DeploymentsParameters.AlwaysActive, 999999999, BIP9DeploymentsParameters.DefaultTestnetThreshold), [StraxBIP9Deployments.Segwit] = new BIP9DeploymentsParameters("Segwit", 1, BIP9DeploymentsParameters.AlwaysActive, 999999999, BIP9DeploymentsParameters.DefaultTestnetThreshold), [StraxBIP9Deployments.ColdStaking] = new BIP9DeploymentsParameters("ColdStaking", 2, BIP9DeploymentsParameters.AlwaysActive, 999999999, BIP9DeploymentsParameters.DefaultTestnetThreshold) }; // To successfully process the OP_FEDERATION opcode the federations should be known. this.Federations = new Federations(); // This should mirror the federation registered in CirrusTest. this.Federations.RegisterFederation(new Federation.Federation(new[] { new PubKey("021040ef28c82fcffb63028e69081605ed4712910c8384d5115c9ffeacd9dbcae4"), //Node1 new PubKey("0244290a31824ba7d53e59c7a29d13dbeca15a9b0d36fdd4d28fce426753107bfc"), //Node2 new PubKey("032df4a2d62c0db12cd1d66201819a10788637c9b90a1cd2a5a3f5196fdab7a621"), //Node3 new PubKey("028ed190eb4ed6e46440ac6af21d8a67a537bd1bd7edb9cc5177d36d5a0972244d"), //Node4 new PubKey("02ff9923324399a188daf4310825a85dd3b89e2301d0ad073295b6f33ae1c72f7a"), //Node5 new PubKey("030e03b808ddb51701d4d3dbc0a74a6f9aedfecf23d5f874914641fc81197b239a"), //Node7 new PubKey("02270d6c20d3393fad7f74c59d2d26b0824ed016ccbc15e698e7354314459a60a5"), //Node8 })); this.Consensus = new Consensus.Consensus( consensusFactory: consensusFactory, consensusOptions: consensusOptions, coinType: 1, // Per https://github.com/satoshilabs/slips/blob/master/slip-0044.md - testnets share a cointype hashGenesisBlock: genesisBlock.GetHash(), subsidyHalvingInterval: 210000, majorityEnforceBlockUpgrade: 750, majorityRejectBlockOutdated: 950, majorityWindow: 1000, buriedDeployments: buriedDeployments, bip9Deployments: bip9Deployments, bip34Hash: null, minerConfirmationWindow: 2016, maxReorgLength: 500, defaultAssumeValid: null, maxMoney: long.MaxValue, coinbaseMaturity: 50, premineHeight: 2, premineReward: Money.Coins(130000000), proofOfWorkReward: Money.Coins(18), targetTimespan: TimeSpan.FromSeconds(14 * 24 * 60 * 60), targetSpacing: TimeSpan.FromSeconds(45), powAllowMinDifficultyBlocks: false, posNoRetargeting: false, powNoRetargeting: false, powLimit: new Target(new uint256("0000ffff00000000000000000000000000000000000000000000000000000000")), minimumChainWork: null, isProofOfStake: true, lastPowBlock: 12500, proofOfStakeLimit: new BigInteger(uint256.Parse("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").ToBytes(false)), proofOfStakeLimitV2: new BigInteger(uint256.Parse("000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff").ToBytes(false)), proofOfStakeReward: Money.Coins(18), proofOfStakeTimestampMask: 0x0000000F // 16 sec ); this.Consensus.PosEmptyCoinbase = false; this.Base58Prefixes = new byte[12][]; this.Base58Prefixes[(int)Base58Type.PUBKEY_ADDRESS] = new byte[] { 120 }; // q this.Base58Prefixes[(int)Base58Type.SCRIPT_ADDRESS] = new byte[] { 127 }; // t this.Base58Prefixes[(int)Base58Type.SECRET_KEY] = new byte[] { (120 + 128) }; this.Base58Prefixes[(int)Base58Type.ENCRYPTED_SECRET_KEY_NO_EC] = new byte[] { 0x01, 0x42 }; this.Base58Prefixes[(int)Base58Type.ENCRYPTED_SECRET_KEY_EC] = new byte[] { 0x01, 0x43 }; this.Base58Prefixes[(int)Base58Type.EXT_PUBLIC_KEY] = new byte[] { (0x04), (0x88), (0xB2), (0x1E) }; this.Base58Prefixes[(int)Base58Type.EXT_SECRET_KEY] = new byte[] { (0x04), (0x88), (0xAD), (0xE4) }; this.Base58Prefixes[(int)Base58Type.PASSPHRASE_CODE] = new byte[] { 0x2C, 0xE9, 0xB3, 0xE1, 0xFF, 0x39, 0xE2 }; this.Base58Prefixes[(int)Base58Type.CONFIRMATION_CODE] = new byte[] { 0x64, 0x3B, 0xF6, 0xA8, 0x9A }; this.Base58Prefixes[(int)Base58Type.ASSET_ID] = new byte[] { 23 }; this.Checkpoints = new Dictionary <int, CheckpointInfo> { { 0, new CheckpointInfo(new uint256("0x0000db68ff9e74fbaf7654bab4fa702c237318428fa9186055c243ddde6354ca"), new uint256("0x0000000000000000000000000000000000000000000000000000000000000000")) },