Skip to content

Commit e4cf85c

Browse files
authored
feat(altcoins): added digibyte (#1268)
* implemented digibyte * Update DigiByte.cs * fixed regtest and added tests
1 parent 4418d51 commit e4cf85c

File tree

3 files changed

+129
-0
lines changed

3 files changed

+129
-0
lines changed

NBitcoin.Altcoins/AltcoinNetworkSets.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class AltNetworkSets
1212
public static BCash BCash { get; } = BCash.Instance;
1313
public static BGold BGold { get; } = BGold.Instance;
1414
public static Dash Dash { get; } = Dash.Instance;
15+
public static DigiByte DigiByte { get; } = DigiByte.Instance;
1516
public static Verge Verge { get; } = Verge.Instance;
1617
public static Terracoin Terracoin { get; } = Terracoin.Instance;
1718
public static Mogwai Mogwai { get; } = Mogwai.Instance;
@@ -53,6 +54,7 @@ public static IEnumerable<INetworkSet> GetAll()
5354
yield return Viacoin;
5455
yield return Dogecoin;
5556
yield return Dystem;
57+
yield return DigiByte;
5658
yield return BCash;
5759
yield return BGold;
5860
yield return Polis;

NBitcoin.Altcoins/DigiByte.cs

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
using NBitcoin.DataEncoders;
2+
3+
namespace NBitcoin.Altcoins
4+
{
5+
public class DigiByte : NetworkSetBase
6+
{
7+
public static DigiByte Instance { get; } = new();
8+
public override string CryptoCode => "DGB";
9+
10+
private DigiByte() { }
11+
12+
protected override NetworkBuilder CreateMainnet()
13+
{
14+
var builder = new NetworkBuilder();
15+
16+
builder.SetName("dgb-main")
17+
.AddAlias("dgb-mainnet")
18+
.AddAlias("digibyte-main")
19+
.SetConsensus(new Consensus
20+
{
21+
SubsidyHalvingInterval = 210000,
22+
MajorityEnforceBlockUpgrade = 750,
23+
MajorityRejectBlockOutdated = 950,
24+
MajorityWindow = 1000,
25+
})
26+
.SetBase58Bytes(Base58Type.PUBKEY_ADDRESS, [30])
27+
.SetBase58Bytes(Base58Type.SCRIPT_ADDRESS, [63])
28+
.SetBase58Bytes(Base58Type.SECRET_KEY, [128])
29+
.SetBase58Bytes(Base58Type.EXT_PUBLIC_KEY, [0x04, 0x88, 0xB2, 0x1E])
30+
.SetBase58Bytes(Base58Type.EXT_SECRET_KEY, [0x04, 0x88, 0xAD, 0xE4])
31+
.SetBech32(Bech32Type.WITNESS_PUBKEY_ADDRESS, Encoders.Bech32("dgb"))
32+
.SetBech32(Bech32Type.WITNESS_SCRIPT_ADDRESS, Encoders.Bech32("dgb"))
33+
.SetMagic(0xDAB6C3FA)
34+
.SetPort(12024)
35+
.SetRPCPort(14022)
36+
.SetGenesis("0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c")
37+
.AddDNSSeeds([
38+
new DNSSeedData("seed.digibyte.org", "seed.digibyte.org"),
39+
new DNSSeedData("seed.digibyte.co", "seed.digibyte.co"),
40+
new DNSSeedData("digiexplorer.info", "digiexplorer.info")
41+
]);
42+
43+
return builder;
44+
}
45+
46+
protected override NetworkBuilder CreateTestnet()
47+
{
48+
var builder = new NetworkBuilder()
49+
.SetName("dgb-test")
50+
.AddAlias("digibyte-testnet")
51+
.AddAlias("digibyte-test")
52+
.SetConsensus(new Consensus
53+
{
54+
SubsidyHalvingInterval = 210000,
55+
MajorityEnforceBlockUpgrade = 750,
56+
MajorityRejectBlockOutdated = 950,
57+
MajorityWindow = 1000
58+
})
59+
.SetBase58Bytes(Base58Type.PUBKEY_ADDRESS, [0x7E]) // tD
60+
.SetBase58Bytes(Base58Type.SCRIPT_ADDRESS, [0x8C]) // tS
61+
.SetBase58Bytes(Base58Type.SECRET_KEY, [0xFE]) // tWIF
62+
.SetBase58Bytes(Base58Type.EXT_PUBLIC_KEY, [0x04, 0x35, 0x87, 0xCF])
63+
.SetBase58Bytes(Base58Type.EXT_SECRET_KEY, [0x04, 0x35, 0x83, 0x94])
64+
.SetBech32(Bech32Type.WITNESS_PUBKEY_ADDRESS, Encoders.Bech32("dgbt"))
65+
.SetBech32(Bech32Type.WITNESS_SCRIPT_ADDRESS, Encoders.Bech32("dgbt"))
66+
.SetMagic(0xDDB6C3FA)
67+
.SetPort(12026)
68+
.SetRPCPort(14023)
69+
.SetGenesis("0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c")
70+
.AddDNSSeeds([
71+
new DNSSeedData("seed.testnet-1.us.digibyteservers.io", "seed.testnet-1.us.digibyteservers.io"),
72+
new DNSSeedData("seed.testnetexplorer.digibyteservers.io", "seed.testnetexplorer.digibyteservers.io")
73+
]);
74+
75+
return builder;
76+
}
77+
78+
protected override NetworkBuilder CreateRegtest()
79+
{
80+
var builder = new NetworkBuilder()
81+
.SetName("dgb-regtest")
82+
.AddAlias("digibyte-regtest")
83+
.AddAlias("digibyte-reg")
84+
.SetConsensus(new Consensus
85+
{
86+
SubsidyHalvingInterval = 150,
87+
MajorityEnforceBlockUpgrade = 750,
88+
MajorityRejectBlockOutdated = 950,
89+
MajorityWindow = 1000
90+
})
91+
.SetBase58Bytes(Base58Type.PUBKEY_ADDRESS, [126])
92+
.SetBase58Bytes(Base58Type.SCRIPT_ADDRESS, [140])
93+
.SetBase58Bytes(Base58Type.SECRET_KEY, [254])
94+
.SetBase58Bytes(Base58Type.EXT_PUBLIC_KEY, [0x04, 0x35, 0x87, 0xCF])
95+
.SetBase58Bytes(Base58Type.EXT_SECRET_KEY, [0x04, 0x35, 0x83, 0x94])
96+
.SetBech32(Bech32Type.WITNESS_PUBKEY_ADDRESS, Encoders.Bech32("dgbrt"))
97+
.SetBech32(Bech32Type.WITNESS_SCRIPT_ADDRESS, Encoders.Bech32("dgbrt"))
98+
.SetMagic(0xDAB5BFFA)
99+
.SetPort(18444)
100+
.SetRPCPort(18443)
101+
.SetGenesis(
102+
"01000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d01045468652054696d65732030332f4a616e2f32303039204368616e63656c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff010040b743ba000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000");
103+
104+
return builder;
105+
}
106+
}
107+
}

NBitcoin.Tests/AltcoinTests.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,5 +648,25 @@ private bool IsElements(Network nodeNetwork)
648648
{
649649
return nodeNetwork.NetworkSet == Altcoins.Liquid.Instance;
650650
}
651+
652+
[Fact]
653+
public void GIVEN_Digibyte_WHEN_ProvidedAddressForSpecificNetwork_THEN_ShouldParseAddress()
654+
{
655+
// Main net
656+
Network mainnet = AltNetworkSets.DigiByte.Mainnet;
657+
var mainnetAddress = "DSdh4rXmRZizpZh7zKGSsyMqHmFE137G96";
658+
659+
var mainnetAddressParsed = BitcoinAddress.Create(mainnetAddress, mainnet);
660+
Assert.NotNull(mainnetAddressParsed);
661+
Assert.NotNull(mainnetAddressParsed.ScriptPubKey);
662+
663+
// Testnet
664+
Network testnet = AltNetworkSets.DigiByte.Testnet;
665+
var testnetAddress = "dgbt1q6j07ktmykusmkj6qng2x2cs6a4hlnn9d8h3s02";
666+
667+
var testnetAddressParsed = BitcoinAddress.Create(testnetAddress, testnet);
668+
Assert.NotNull(testnetAddressParsed);
669+
Assert.NotNull(testnetAddressParsed.ScriptPubKey);
670+
}
651671
}
652672
}

0 commit comments

Comments
 (0)