Commit 2edbb663 authored by Pavel Pavlov's avatar Pavel Pavlov

Added classes DeStreamMain, DeStreamTest, DeStreamRegTest

parent 99885838
...@@ -17,308 +17,49 @@ namespace NBitcoin ...@@ -17,308 +17,49 @@ namespace NBitcoin
/// <summary> The default name used for the Stratis configuration file. </summary> /// <summary> The default name used for the Stratis configuration file. </summary>
public const string DeStreamDefaultConfigFilename = "destream.conf"; public const string DeStreamDefaultConfigFilename = "destream.conf";
public static Network DeStreamMain => NetworksContainer.GetNetwork("DeStreamMain") ?? NetworksContainer.Register(new DeStreamMain()); public const int StratisMaxTimeOffsetSeconds = 25 * 60;
public static Network DeStreamTest => NetworksContainer.GetNetwork("DeStreamTest") ?? InitDeStreamTest();
public static Network DeStreamRegTest => NetworksContainer.GetNetwork("DeStreamRegTest") ?? InitDeStreamRegTest();
//private static Network InitDeStreamMain()
//{
// // The message start string is designed to be unlikely to occur in normal data.
// // The characters are rarely used upper ASCII, not valid as UTF-8, and produce
// // a large 4-byte int at any alignment.
// var messageStart = new byte[4];
// messageStart[0] = 0x70;
// messageStart[1] = 0x35;
// messageStart[2] = 0x22;
// messageStart[3] = 0x05;
// var magic = BitConverter.ToUInt32(messageStart, 0); //0x5223570;
// Network network = new Network
// {
// Name = "DeStreamMain",
// RootFolderName = DeStreamRootFolderName,
// DefaultConfigFilename = DeStreamDefaultConfigFilename,
// Magic = magic,
// DefaultPort = 0xDE01, // 56833,
// RPCPort = 0xDE00, // 56832,
// MinTxFee = 10000,
// FallbackFee = 60000,
// MinRelayTxFee = 10000,
// MaxTimeOffsetSeconds = StratisMaxTimeOffsetSeconds,
// MaxTipAge = StratisDefaultMaxTipAgeInSeconds
// };
// network.Consensus.SubsidyHalvingInterval = 210000;
// network.Consensus.MajorityEnforceBlockUpgrade = 750;
// network.Consensus.MajorityRejectBlockOutdated = 950;
// network.Consensus.MajorityWindow = 1000;
// network.Consensus.BuriedDeployments[BuriedDeployments.BIP34] = 0;
// network.Consensus.BuriedDeployments[BuriedDeployments.BIP65] = 0;
// network.Consensus.BuriedDeployments[BuriedDeployments.BIP66] = 0;
// network.Consensus.BIP34Hash = new uint256("0x000000000000024b89b42a942fe0d9fea3bb44ab7bd1b19115dd6a759c0808b8");
// network.Consensus.PowLimit = new Target(new uint256("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"));
// network.Consensus.PowTargetTimespan = TimeSpan.FromSeconds(14 * 24 * 60 * 60); // two weeks
// network.Consensus.PowTargetSpacing = TimeSpan.FromSeconds(10 * 60);
// network.Consensus.PowAllowMinDifficultyBlocks = false;
// network.Consensus.PowNoRetargeting = false;
// network.Consensus.RuleChangeActivationThreshold = 1916; // 95% of 2016
// network.Consensus.MinerConfirmationWindow = 2016; // nPowTargetTimespan / nPowTargetSpacing
// network.Consensus.LastPOWBlock = 12500;
// network.Consensus.IsProofOfStake = true;
// network.Consensus.ConsensusFactory = new PosConsensusFactory() { Consensus = network.Consensus };
// network.Consensus.ProofOfStakeLimit = new BigInteger(uint256.Parse("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").ToBytes(false));
// network.Consensus.ProofOfStakeLimitV2 = new BigInteger(uint256.Parse("000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff").ToBytes(false));
// network.Consensus.CoinType = 105;
// network.Consensus.DefaultAssumeValid = new uint256("0x55a8205ae4bbf18f4d238c43f43005bd66e0b1f679b39e2c5c62cf6903693a5e"); // 795970
// network.genesis = CreateStratisGenesisBlock(network.Consensus.ConsensusFactory, 1470467000, 1831645, 0x1e0fffff, 1, Money.Zero);
// network.Consensus.HashGenesisBlock = network.genesis.GetHash();
// Assert(network.Consensus.HashGenesisBlock == uint256.Parse("0x0000066e91e46e5a264d42c89e1204963b2ee6be230b443e9159020539d972af"));
// Assert(network.genesis.Header.HashMerkleRoot == uint256.Parse("0x65a26bc20b0351aebf05829daefa8f7db2f800623439f3c114257c91447f1518"));
// network.Checkpoints = new Dictionary<int, CheckpointInfo>
// {
// { 0, new CheckpointInfo(new uint256("0x0000066e91e46e5a264d42c89e1204963b2ee6be230b443e9159020539d972af"), new uint256("0x0000000000000000000000000000000000000000000000000000000000000000")) },
// { 2, new CheckpointInfo(new uint256("0xbca5936f638181e74a5f1e9999c95b0ce77da48c2688399e72bcc53a00c61eff"), new uint256("0x7d61c139a471821caa6b7635a4636e90afcfe5e195040aecbc1ad7d24924db1e")) }, // Premine
// { 50, new CheckpointInfo(new uint256("0x0353b43f4ce80bf24578e7c0141d90d7962fb3a4b4b4e5a17925ca95e943b816"), new uint256("0x7c2af3b10d13f9d2bc6063baaf7f0860d90d870c994378144f9bf85d0d555061")) },
// { 100, new CheckpointInfo(new uint256("0x688468a8aa48cd1c2197e42e7d8acd42760b7e2ac4bcab9d18ac149a673e16f6"), new uint256("0xcf2b1e9e76aaa3d96f255783eb2d907bf6ccb9c1deeb3617149278f0e4a1ab1b")) },
// { 150, new CheckpointInfo(new uint256("0xe4ae9663519abec15e28f68bdb2cb89a739aee22f53d1573048d69141db6ee5d"), new uint256("0xa6c17173e958dc716cc0892ce33dad8bc327963d78a16c436264ceae43d584ce")) },
// { 127500, new CheckpointInfo(new uint256("0x4773ca7512489df22de03aa03938412fab5b46154b05df004b97bcbeaa184078"), new uint256("0x619743c02ebaff06b90fcc5c60c52dba8aa3fdb6ba3800aae697cbb3c5483f17")) },
// { 128943, new CheckpointInfo(new uint256("0x36bcaa27a53d3adf22b2064150a297adb02ac39c24263a5ceb73856832d49679"), new uint256("0xa3a6fd04e41fcaae411a3990aaabcf5e086d2d06c72c849182b27b4de8c2c42a")) },
// { 136601, new CheckpointInfo(new uint256("0xf5c5210c55ff1ef9c04715420a82728e1647f3473e31dc478b3745a97b4a6d10"), new uint256("0x42058fabe21f7b118a9e358eaf9ef574dadefd024244899e71f2f6d618161e16")) }, // Hardfork to V2 - Drifting Bug Fix
// { 170000, new CheckpointInfo(new uint256("0x22b10952e0cf7e85bfc81c38f1490708f195bff34d2951d193cc20e9ca1fc9d5"), new uint256("0xa4942a6c99cba397cf2b18e4b912930fe1e64a7413c3d97c5a926c2af9073091")) },
// { 200000, new CheckpointInfo(new uint256("0x2391dd493be5d0ff0ef57c3b08c73eefeecc2701b80f983054bb262f7a146989"), new uint256("0x253152d129e82c30c584197deb6833502eff3ec2f30014008f75842d7bb48453")) },
// { 250000, new CheckpointInfo(new uint256("0x681c70fab7c1527246138f0cf937f0eb013838b929fbe9a831af02a60fc4bf55"), new uint256("0x24eed95e00c90618aa9d137d2ee273267285c444c9cde62a25a3e880c98a3685")) },
// { 300000, new CheckpointInfo(new uint256("0xd10ca8c2f065a49ae566c7c9d7a2030f4b8b7f71e4c6fc6b2a02509f94cdcd44"), new uint256("0x39c4dd765b49652935524248b4de4ccb604df086d0723bcd81faf5d1c2489304")) },
// { 350000, new CheckpointInfo(new uint256("0xe2b76d1a068c4342f91db7b89b66e0f2146d3a4706c21f3a262737bb7339253a"), new uint256("0xd1dd94985eaaa028c893687a7ddf89143dcf0176918f958c2d01f33d64910399")) },
// { 390000, new CheckpointInfo(new uint256("0x4682737abc2a3257fdf4c3c119deb09cbac75981969e2ffa998b4f76b7c657bb"), new uint256("0xd84b204ee94499ff65262328a428851fb4f4d2741e928cdd088fdf1deb5413b8")) },
// { 394000, new CheckpointInfo(new uint256("0x42857fa2bc15d45cdcaae83411f755b95985da1cb464ee23f6d40936df523e9f"), new uint256("0x2314b336906a2ed2a39cbdf6fc0622530709c62dbb3a3729de17154fc9d1a7c4")) },
// { 528000, new CheckpointInfo(new uint256("0x7aff2c48b398446595d01e27b5cd898087cec63f94ff73f9ad695c6c9bcee33a"), new uint256("0x3bdc865661390c7681b078e52ed3ad3c53ec7cff97b8c45b74abed3ace289fcc")) },
// { 576000, new CheckpointInfo(new uint256("0xe705476b940e332098d1d5b475d7977312ff8c08cbc8256ce46a3e2c6d5408b8"), new uint256("0x10e31bb5e245ea19650280cfd3ac1a76259fa0002d02e861d2ab5df290534b56")) },
// };
// network.Base58Prefixes[(int)Base58Type.PUBKEY_ADDRESS] = new byte[] { (63) }; public const int StratisDefaultMaxTipAgeInSeconds = 2 * 60 * 60;
// network.Base58Prefixes[(int)Base58Type.SCRIPT_ADDRESS] = new byte[] { (125) };
// network.Base58Prefixes[(int)Base58Type.SECRET_KEY] = new byte[] { (63 + 128) };
// network.Base58Prefixes[(int)Base58Type.ENCRYPTED_SECRET_KEY_NO_EC] = new byte[] { 0x01, 0x42 };
// network.Base58Prefixes[(int)Base58Type.ENCRYPTED_SECRET_KEY_EC] = new byte[] { 0x01, 0x43 };
// network.Base58Prefixes[(int)Base58Type.EXT_PUBLIC_KEY] = new byte[] { (0x04), (0x88), (0xB2), (0x1E) };
// network.Base58Prefixes[(int)Base58Type.EXT_SECRET_KEY] = new byte[] { (0x04), (0x88), (0xAD), (0xE4) };
// network.Base58Prefixes[(int)Base58Type.PASSPHRASE_CODE] = new byte[] { 0x2C, 0xE9, 0xB3, 0xE1, 0xFF, 0x39, 0xE2 };
// network.Base58Prefixes[(int)Base58Type.CONFIRMATION_CODE] = new byte[] { 0x64, 0x3B, 0xF6, 0xA8, 0x9A };
// network.Base58Prefixes[(int)Base58Type.STEALTH_ADDRESS] = new byte[] { 0x2a };
// network.Base58Prefixes[(int)Base58Type.ASSET_ID] = new byte[] { 23 };
// network.Base58Prefixes[(int)Base58Type.COLORED_ADDRESS] = new byte[] { 0x13 };
// var encoder = new Bech32Encoder("bc"); public static Network DeStreamMain => NetworksContainer.GetNetwork("DeStreamMain") ?? NetworksContainer.Register(new DeStreamMain());
// network.Bech32Encoders[(int)Bech32Type.WITNESS_PUBKEY_ADDRESS] = encoder;
// network.Bech32Encoders[(int)Bech32Type.WITNESS_SCRIPT_ADDRESS] = encoder;
// network.DNSSeeds.AddRange(new[]
// {
// new DNSSeedData("node1.destream.io", "node1.destream.io"),
// new DNSSeedData("node2.destream.io", "node2.destream.io")
// });
// var seeds = new[] { "95.128.181.103", "95.128.181.80" };
// // Convert the seeds array into usable address objects.
// Random rand = new Random();
// TimeSpan oneWeek = TimeSpan.FromDays(7);
// foreach (string seed in seeds)
// {
// // It'll only connect to one or two seed nodes because once it connects,
// // it'll get a pile of addresses with newer timestamps.
// // Seed nodes are given a random 'last seen time' of between one and two weeks ago.
// NetworkAddress addr = new NetworkAddress
// {
// Time = DateTime.UtcNow - (TimeSpan.FromSeconds(rand.NextDouble() * oneWeek.TotalSeconds)) - oneWeek,
// Endpoint = Utils.ParseIpEndpoint(seed, network.DefaultPort)
// };
// network.SeedNodes.Add(addr); public static Network DeStreamTest => NetworksContainer.GetNetwork("DeStreamTest") ?? NetworksContainer.Register(new DeStreamTest());
// }
// Network.Register(network); public static Network DeStreamRegTest => NetworksContainer.GetNetwork("DeStreamRegTest") ?? NetworksContainer.Register(new DeStreamRegTest());
// return network;
//}
private static Network InitDeStreamTest() internal static Block CreateStratisGenesisBlock(ConsensusFactory consensusFactory, uint nTime, uint nNonce, uint nBits, int nVersion, Money genesisReward)
{ {
// The message start string is designed to be unlikely to occur in normal data. string pszTimestamp = "http://www.theonion.com/article/olympics-head-priestess-slits-throat-official-rio--53466";
// The characters are rarely used upper ASCII, not valid as UTF-8, and produce return CreateStratisGenesisBlock(consensusFactory, pszTimestamp, nTime, nNonce, nBits, nVersion, genesisReward);
// a large 4-byte int at any alignment.
//var messageStart = new byte[4];
//messageStart[0] = 0x71;
//messageStart[1] = 0x31;
//messageStart[2] = 0x21;
//messageStart[3] = 0x11;
//var magic = BitConverter.ToUInt32(messageStart, 0); // 0x11213171;
//Network network = new Network
//{
// Name = "DeStreamTest",
// RootFolderName = DeStreamRootFolderName,
// DefaultConfigFilename = DeStreamDefaultConfigFilename,
// Magic = magic,
// DefaultPort = 0xDE11, //56849,
// RPCPort = 0xDE10, //56848,
// MaxTimeOffsetSeconds = StratisMaxTimeOffsetSeconds,
// MaxTipAge = StratisDefaultMaxTipAgeInSeconds,
// MinTxFee = 10000,
// FallbackFee = 60000,
// MinRelayTxFee = 10000
//};
//network.Consensus.SubsidyHalvingInterval = 210000;
//network.Consensus.MajorityEnforceBlockUpgrade = 750;
//network.Consensus.MajorityRejectBlockOutdated = 950;
//network.Consensus.MajorityWindow = 1000;
//network.Consensus.BuriedDeployments[BuriedDeployments.BIP34] = 0;
//network.Consensus.BuriedDeployments[BuriedDeployments.BIP65] = 0;
//network.Consensus.BuriedDeployments[BuriedDeployments.BIP66] = 0;
//network.Consensus.BIP34Hash = new uint256("0x000000000000024b89b42a942fe0d9fea3bb44ab7bd1b19115dd6a759c0808b8");
//network.Consensus.PowLimit = new Target(new uint256("0000ffff00000000000000000000000000000000000000000000000000000000"));
//network.Consensus.PowTargetTimespan = TimeSpan.FromSeconds(14 * 24 * 60 * 60); // two weeks
//network.Consensus.PowTargetSpacing = TimeSpan.FromSeconds(10 * 60);
//network.Consensus.PowAllowMinDifficultyBlocks = false;
//network.Consensus.PowNoRetargeting = false;
//network.Consensus.RuleChangeActivationThreshold = 1916; // 95% of 2016
//network.Consensus.MinerConfirmationWindow = 2016; // nPowTargetTimespan / nPowTargetSpacing
//network.Consensus.LastPOWBlock = 12500;
//network.Consensus.IsProofOfStake = true;
//network.Consensus.ConsensusFactory = new PosConsensusFactory() { Consensus = network.Consensus };
//network.Consensus.ProofOfStakeLimit = new BigInteger(uint256.Parse("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").ToBytes(false));
//network.Consensus.ProofOfStakeLimitV2 = new BigInteger(uint256.Parse("000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff").ToBytes(false));
//network.Consensus.CoinType = 105;
//network.Consensus.DefaultAssumeValid = new uint256("0x98fa6ef0bca5b431f15fd79dc6f879dc45b83ed4b1bbe933a383ef438321958e"); // 372652
//Block genesis = CreateStratisGenesisBlock(network.Consensus.ConsensusFactory, 1470467000, 1831645, 0x1e0fffff, 1, Money.Zero);
//genesis.Header.Time = 1493909211;
//genesis.Header.Nonce = 2433759;
//genesis.Header.Bits = network.Consensus.PowLimit;
//network.genesis = genesis;
//network.Consensus.HashGenesisBlock = genesis.GetHash();
//Assert(network.Consensus.HashGenesisBlock == uint256.Parse("0x00000e246d7b73b88c9ab55f2e5e94d9e22d471def3df5ea448f5576b1d156b9"));
//network.Checkpoints = new Dictionary<int, CheckpointInfo>
//{
// { 0, new CheckpointInfo(new uint256("0x00000e246d7b73b88c9ab55f2e5e94d9e22d471def3df5ea448f5576b1d156b9"), new uint256("0x0000000000000000000000000000000000000000000000000000000000000000")) },
// { 2, new CheckpointInfo(new uint256("0x56959b1c8498631fb0ca5fe7bd83319dccdc6ac003dccb3171f39f553ecfa2f2"), new uint256("0x13f4c27ca813aefe2d9018077f8efeb3766796b9144fcc4cd51803bf4376ab02")) },
// { 50000, new CheckpointInfo(new uint256("0xb42c18eacf8fb5ed94eac31943bd364451d88da0fd44cc49616ffea34d530ad4"), new uint256("0x824934ddc5f935e854ac59ae7f5ed25f2d29a7c3914cac851f3eddb4baf96d78")) },
// { 100000, new CheckpointInfo(new uint256("0xf9e2f7561ee4b92d3bde400d251363a0e8924204c326da7f4ad9ccc8863aad79"), new uint256("0xdef8d92d20becc71f662ee1c32252aca129f1bf4744026b116d45d9bfe67e9fb")) },
// { 115000, new CheckpointInfo(new uint256("0x8496c77060c8a2b5c9a888ade991f25aa33c232b4413594d556daf9043fad400"), new uint256("0x1886430484a9a36b56a7eb8bd25e9ebe4fc8eec8f9a84f5073f71e08f2feac90")) },
// { 163000, new CheckpointInfo(new uint256("0x4e44a9e0119a2e7cbf15e570a3c649a5605baa601d953a465b5ebd1c1982212a"), new uint256("0x0646fc7db8f3426eb209e1228c7d82724faa46a060f5bbbd546683ef30be245c")) },
//};
//network.Base58Prefixes[(int)Base58Type.PUBKEY_ADDRESS] = new byte[] { (65) };
//network.Base58Prefixes[(int)Base58Type.SCRIPT_ADDRESS] = new byte[] { (196) };
//network.Base58Prefixes[(int)Base58Type.SECRET_KEY] = new byte[] { (65 + 128) };
//network.Base58Prefixes[(int)Base58Type.ENCRYPTED_SECRET_KEY_NO_EC] = new byte[] { 0x01, 0x42 };
//network.Base58Prefixes[(int)Base58Type.ENCRYPTED_SECRET_KEY_EC] = new byte[] { 0x01, 0x43 };
//network.Base58Prefixes[(int)Base58Type.EXT_PUBLIC_KEY] = new byte[] { (0x04), (0x88), (0xB2), (0x1E) };
//network.Base58Prefixes[(int)Base58Type.EXT_SECRET_KEY] = new byte[] { (0x04), (0x88), (0xAD), (0xE4) };
//network.Base58Prefixes[(int)Base58Type.PASSPHRASE_CODE] = new byte[] { 0x2C, 0xE9, 0xB3, 0xE1, 0xFF, 0x39, 0xE2 };
//network.Base58Prefixes[(int)Base58Type.CONFIRMATION_CODE] = new byte[] { 0x64, 0x3B, 0xF6, 0xA8, 0x9A };
//network.Base58Prefixes[(int)Base58Type.STEALTH_ADDRESS] = new byte[] { 0x2a };
//network.Base58Prefixes[(int)Base58Type.ASSET_ID] = new byte[] { 23 };
//network.Base58Prefixes[(int)Base58Type.COLORED_ADDRESS] = new byte[] { 0x13 };
//var encoder = new Bech32Encoder("bc");
//network.Bech32Encoders[(int)Bech32Type.WITNESS_PUBKEY_ADDRESS] = encoder;
//network.Bech32Encoders[(int)Bech32Type.WITNESS_SCRIPT_ADDRESS] = encoder;
//network.DNSSeeds.AddRange(new[]
//{
// new DNSSeedData("testnode1.destream.io", "testnode1.destream.io")
//});
//network.SeedNodes.AddRange(new[]
//{
// new NetworkAddress(IPAddress.Parse("95.128.181.196"), network.DefaultPort), //peak-srv-12
// new NetworkAddress(IPAddress.Parse("40.121.9.206"), network.DefaultPort)
//});
//Network.Register(network);
//return network;
return null;
} }
private static Network InitDeStreamRegTest() internal static Block CreateStratisGenesisBlock(ConsensusFactory consensusFactory, string pszTimestamp, uint nTime, uint nNonce, uint nBits, int nVersion, Money genesisReward)
{ {
// TODO: move this to Networks Transaction txNew = consensusFactory.CreateTransaction();
//var messageStart = new byte[4]; txNew.Version = 1;
//messageStart[0] = 0xcd; txNew.Time = nTime;
//messageStart[1] = 0xf2; txNew.AddInput(new TxIn()
//messageStart[2] = 0xc0; {
//messageStart[3] = 0xef; ScriptSig = new Script(Op.GetPushOp(0), new Op()
//var magic = BitConverter.ToUInt32(messageStart, 0); // 0xefc0f2cd {
Code = (OpcodeType)0x1,
//Network network = new Network PushData = new[] { (byte)42 }
//{ }, Op.GetPushOp(Encoders.ASCII.DecodeData(pszTimestamp)))
// Name = "DeStreamRegTest", });
// RootFolderName = DeStreamRootFolderName, txNew.AddOutput(new TxOut()
// DefaultConfigFilename = DeStreamDefaultConfigFilename, {
// Magic = magic, Value = genesisReward,
// DefaultPort = 18444, });
// RPCPort = 18442, Block genesis = consensusFactory.CreateBlock();
// MaxTimeOffsetSeconds = StratisMaxTimeOffsetSeconds, genesis.Header.BlockTime = Utils.UnixTimeToDateTime(nTime);
// MaxTipAge = StratisDefaultMaxTipAgeInSeconds genesis.Header.Bits = nBits;
//}; genesis.Header.Nonce = nNonce;
genesis.Header.Version = nVersion;
//network.Consensus.SubsidyHalvingInterval = 210000; genesis.Transactions.Add(txNew);
//network.Consensus.MajorityEnforceBlockUpgrade = 750; genesis.Header.HashPrevBlock = uint256.Zero;
//network.Consensus.MajorityRejectBlockOutdated = 950; genesis.UpdateMerkleRoot();
//network.Consensus.MajorityWindow = 1000; return genesis;
//network.Consensus.BuriedDeployments[BuriedDeployments.BIP34] = 0;
//network.Consensus.BuriedDeployments[BuriedDeployments.BIP65] = 0;
//network.Consensus.BuriedDeployments[BuriedDeployments.BIP66] = 0;
//network.Consensus.BIP34Hash = new uint256("0x000000000000024b89b42a942fe0d9fea3bb44ab7bd1b19115dd6a759c0808b8");
//network.Consensus.PowLimit = new Target(uint256.Parse("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"));
//network.Consensus.PowTargetTimespan = TimeSpan.FromSeconds(14 * 24 * 60 * 60); // two weeks
//network.Consensus.PowTargetSpacing = TimeSpan.FromSeconds(10 * 60);
//network.Consensus.PowAllowMinDifficultyBlocks = true;
//network.Consensus.PowNoRetargeting = true;
//network.Consensus.RuleChangeActivationThreshold = 1916; // 95% of 2016
//network.Consensus.MinerConfirmationWindow = 2016; // nPowTargetTimespan / nPowTargetSpacing
//network.Consensus.LastPOWBlock = 12500;
//network.Consensus.IsProofOfStake = true;
//network.Consensus.ConsensusFactory = new PosConsensusFactory() { Consensus = network.Consensus };
//network.Consensus.ProofOfStakeLimit = new BigInteger(uint256.Parse("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").ToBytes(false));
//network.Consensus.ProofOfStakeLimitV2 = new BigInteger(uint256.Parse("000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff").ToBytes(false));
//network.Consensus.CoinType = 105;
//network.Consensus.DefaultAssumeValid = null; // turn off assumevalid for regtest.
//Block genesis = CreateStratisGenesisBlock(network.Consensus.ConsensusFactory, 1470467000, 1831645, 0x1e0fffff, 1, Money.Zero);
//genesis.Header.Time = 1494909211;
//genesis.Header.Nonce = 2433759;
//genesis.Header.Bits = network.Consensus.PowLimit;
//network.genesis = genesis;
//network.Consensus.HashGenesisBlock = genesis.GetHash();
//Assert(network.Consensus.HashGenesisBlock == uint256.Parse("0x93925104d664314f581bc7ecb7b4bad07bcfabd1cfce4256dbd2faddcf53bd1f"));
//network.Base58Prefixes[(int)Base58Type.PUBKEY_ADDRESS] = new byte[] { (65) };
//network.Base58Prefixes[(int)Base58Type.SCRIPT_ADDRESS] = new byte[] { (196) };
//network.Base58Prefixes[(int)Base58Type.SECRET_KEY] = new byte[] { (65 + 128) };
//network.Base58Prefixes[(int)Base58Type.ENCRYPTED_SECRET_KEY_NO_EC] = new byte[] { 0x01, 0x42 };
//network.Base58Prefixes[(int)Base58Type.ENCRYPTED_SECRET_KEY_EC] = new byte[] { 0x01, 0x43 };
//network.Base58Prefixes[(int)Base58Type.EXT_PUBLIC_KEY] = new byte[] { (0x04), (0x88), (0xB2), (0x1E) };
//network.Base58Prefixes[(int)Base58Type.EXT_SECRET_KEY] = new byte[] { (0x04), (0x88), (0xAD), (0xE4) };
//network.Base58Prefixes[(int)Base58Type.PASSPHRASE_CODE] = new byte[] { 0x2C, 0xE9, 0xB3, 0xE1, 0xFF, 0x39, 0xE2 };
//network.Base58Prefixes[(int)Base58Type.CONFIRMATION_CODE] = new byte[] { 0x64, 0x3B, 0xF6, 0xA8, 0x9A };
//network.Base58Prefixes[(int)Base58Type.STEALTH_ADDRESS] = new byte[] { 0x2a };
//network.Base58Prefixes[(int)Base58Type.ASSET_ID] = new byte[] { 23 };
//network.Base58Prefixes[(int)Base58Type.COLORED_ADDRESS] = new byte[] { 0x13 };
//var encoder = new Bech32Encoder("bc");
//network.Bech32Encoders[(int)Bech32Type.WITNESS_PUBKEY_ADDRESS] = encoder;
//network.Bech32Encoders[(int)Bech32Type.WITNESS_SCRIPT_ADDRESS] = encoder;
//Network.Register(network);
//return network;
return null;
} }
} }
} }
...@@ -9,15 +9,6 @@ namespace NBitcoin.Networks ...@@ -9,15 +9,6 @@ namespace NBitcoin.Networks
{ {
public class DeStreamMain : Network public class DeStreamMain : Network
{ {
/// <summary> The name of the root folder containing the different Stratis blockchains (StratisMain, StratisTest, StratisRegTest). </summary>
public const string DeStreamRootFolderName = "destream";
/// <summary> The default name used for the Stratis configuration file. </summary>
public const string DeStreamDefaultConfigFilename = "destream.conf";
public const int StratisMaxTimeOffsetSeconds = 25 * 60;
public const int StratisDefaultMaxTipAgeInSeconds = 2 * 60 * 60;
public DeStreamMain() public DeStreamMain()
{ {
...@@ -131,39 +122,5 @@ namespace NBitcoin.Networks ...@@ -131,39 +122,5 @@ namespace NBitcoin.Networks
this.SeedNodes.Add(addr); this.SeedNodes.Add(addr);
} }
} }
private static Block CreateStratisGenesisBlock(ConsensusFactory consensusFactory, uint nTime, uint nNonce, uint nBits, int nVersion, Money genesisReward)
{
string pszTimestamp = "http://www.theonion.com/article/olympics-head-priestess-slits-throat-official-rio--53466";
return CreateStratisGenesisBlock(consensusFactory, pszTimestamp, nTime, nNonce, nBits, nVersion, genesisReward);
}
private static Block CreateStratisGenesisBlock(ConsensusFactory consensusFactory, string pszTimestamp, uint nTime, uint nNonce, uint nBits, int nVersion, Money genesisReward)
{
Transaction txNew = consensusFactory.CreateTransaction();
txNew.Version = 1;
txNew.Time = nTime;
txNew.AddInput(new TxIn()
{
ScriptSig = new Script(Op.GetPushOp(0), new Op()
{
Code = (OpcodeType)0x1,
PushData = new[] { (byte)42 }
}, Op.GetPushOp(Encoders.ASCII.DecodeData(pszTimestamp)))
});
txNew.AddOutput(new TxOut()
{
Value = genesisReward,
});
Block genesis = consensusFactory.CreateBlock();
genesis.Header.BlockTime = Utils.UnixTimeToDateTime(nTime);
genesis.Header.Bits = nBits;
genesis.Header.Nonce = nNonce;
genesis.Header.Version = nVersion;
genesis.Transactions.Add(txNew);
genesis.Header.HashPrevBlock = uint256.Zero;
genesis.UpdateMerkleRoot();
return genesis;
}
} }
} }
using System;
using System.Collections.Generic;
using System.Text;
namespace NBitcoin.Networks
{
class DeStreamRegTest
{
}
}
using System;
using System.Collections.Generic;
using System.Net;
using System.Text;
using NBitcoin.BouncyCastle.Math;
using NBitcoin.DataEncoders;
using NBitcoin.Protocol;
namespace NBitcoin.Networks
{
public class DeStreamTest : Network
{
public DeStreamTest()
{
//The message start string is designed to be unlikely to occur in normal data.
// The characters are rarely used upper ASCII, not valid as UTF - 8, and produce
// a large 4 - byte int at any alignment.
var messageStart = new byte[4];
messageStart[0] = 0x71;
messageStart[1] = 0x31;
messageStart[2] = 0x21;
messageStart[3] = 0x11;
var magic = BitConverter.ToUInt32(messageStart, 0); // 0x11213171;
this.Name = "DeStreamTest";
this.RootFolderName = DeStreamRootFolderName;
this.DefaultConfigFilename = DeStreamDefaultConfigFilename;
this.Magic = magic;
this.DefaultPort = 0xDE11; //56849,
this.RPCPort = 0xDE10; //56848,
this.MaxTimeOffsetSeconds = StratisMaxTimeOffsetSeconds;
this.MaxTipAge = StratisDefaultMaxTipAgeInSeconds;
this.MinTxFee = 10000;
this.FallbackFee = 60000;
this.MinRelayTxFee = 10000;
this..Consensus.SubsidyHalvingInterval = 210000;
this.Consensus.MajorityEnforceBlockUpgrade = 750;
this.Consensus.MajorityRejectBlockOutdated = 950;
this.Consensus.MajorityWindow = 1000;
this.Consensus.BuriedDeployments[BuriedDeployments.BIP34] = 0;
this.Consensus.BuriedDeployments[BuriedDeployments.BIP65] = 0;
this.Consensus.BuriedDeployments[BuriedDeployments.BIP66] = 0;
this.Consensus.BIP34Hash = new uint256("0x000000000000024b89b42a942fe0d9fea3bb44ab7bd1b19115dd6a759c0808b8");
this.Consensus.PowLimit = new Target(new uint256("0000ffff00000000000000000000000000000000000000000000000000000000"));
this.Consensus.PowTargetTimespan = TimeSpan.FromSeconds(14 * 24 * 60 * 60); // two weeks
this.Consensus.PowTargetSpacing = TimeSpan.FromSeconds(10 * 60);
this.Consensus.PowAllowMinDifficultyBlocks = false;
this.Consensus.PowNoRetargeting = false;
this.Consensus.RuleChangeActivationThreshold = 1916; // 95% of 2016
this.Consensus.MinerConfirmationWindow = 2016; // nPowTargetTimespan / nPowTargetSpacing
this.Consensus.LastPOWBlock = 12500;
this.Consensus.IsProofOfStake = true;
this.Consensus.ConsensusFactory = new PosConsensusFactory() { Consensus = network.Consensus };
this.Consensus.ProofOfStakeLimit = new BigInteger(uint256.Parse("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").ToBytes(false));
this.Consensus.ProofOfStakeLimitV2 = new BigInteger(uint256.Parse("000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff").ToBytes(false));
this.Consensus.CoinType = 105;
this.Consensus.DefaultAssumeValid = new uint256("0x98fa6ef0bca5b431f15fd79dc6f879dc45b83ed4b1bbe933a383ef438321958e"); // 372652
Block genesis = CreateStratisGenesisBlock(this.Consensus.ConsensusFactory, 1470467000, 1831645, 0x1e0fffff, 1, Money.Zero);
genesis.Header.Time = 1493909211;
genesis.Header.Nonce = 2433759;
genesis.Header.Bits = this.Consensus.PowLimit;
this.Genesis = genesis;
this.Consensus.HashGenesisBlock = genesis.GetHash();
Assert(this.Consensus.HashGenesisBlock == uint256.Parse("0x00000e246d7b73b88c9ab55f2e5e94d9e22d471def3df5ea448f5576b1d156b9"));
this.Checkpoints = new Dictionary<int, CheckpointInfo>
{
{ 0, new CheckpointInfo(new uint256("0x00000e246d7b73b88c9ab55f2e5e94d9e22d471def3df5ea448f5576b1d156b9"), new uint256("0x0000000000000000000000000000000000000000000000000000000000000000")) },
{ 2, new CheckpointInfo(new uint256("0x56959b1c8498631fb0ca5fe7bd83319dccdc6ac003dccb3171f39f553ecfa2f2"), new uint256("0x13f4c27ca813aefe2d9018077f8efeb3766796b9144fcc4cd51803bf4376ab02")) },
{ 50000, new CheckpointInfo(new uint256("0xb42c18eacf8fb5ed94eac31943bd364451d88da0fd44cc49616ffea34d530ad4"), new uint256("0x824934ddc5f935e854ac59ae7f5ed25f2d29a7c3914cac851f3eddb4baf96d78")) },
{ 100000, new CheckpointInfo(new uint256("0xf9e2f7561ee4b92d3bde400d251363a0e8924204c326da7f4ad9ccc8863aad79"), new uint256("0xdef8d92d20becc71f662ee1c32252aca129f1bf4744026b116d45d9bfe67e9fb")) },
{ 115000, new CheckpointInfo(new uint256("0x8496c77060c8a2b5c9a888ade991f25aa33c232b4413594d556daf9043fad400"), new uint256("0x1886430484a9a36b56a7eb8bd25e9ebe4fc8eec8f9a84f5073f71e08f2feac90")) },
{ 163000, new CheckpointInfo(new uint256("0x4e44a9e0119a2e7cbf15e570a3c649a5605baa601d953a465b5ebd1c1982212a"), new uint256("0x0646fc7db8f3426eb209e1228c7d82724faa46a060f5bbbd546683ef30be245c")) },
};
this.Base58Prefixes[(int)Base58Type.PUBKEY_ADDRESS] = new byte[] { (65) };
this.Base58Prefixes[(int)Base58Type.SCRIPT_ADDRESS] = new byte[] { (196) };
this.Base58Prefixes[(int)Base58Type.SECRET_KEY] = new byte[] { (65 + 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.STEALTH_ADDRESS] = new byte[] { 0x2a };
this.Base58Prefixes[(int)Base58Type.ASSET_ID] = new byte[] { 23 };
this.Base58Prefixes[(int)Base58Type.COLORED_ADDRESS] = new byte[] { 0x13 };
var encoder = new Bech32Encoder("bc");
this.Bech32Encoders[(int)Bech32Type.WITNESS_PUBKEY_ADDRESS] = encoder;
this.Bech32Encoders[(int)Bech32Type.WITNESS_SCRIPT_ADDRESS] = encoder;
this.DNSSeeds.AddRange(new[]
{
new DNSSeedData("testnode1.destream.io", "testnode1.destream.io")
});
this.SeedNodes.AddRange(new[]
{
new NetworkAddress(IPAddress.Parse("95.128.181.196"), this.DefaultPort), //peak-srv-12
new NetworkAddress(IPAddress.Parse("40.121.9.206"), this.DefaultPort)
});
//Network.Register(network);
//return network;
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment