Skip to content

Commit

Permalink
Finished bootstrapping wallet and key generation with both sollet and…
Browse files Browse the repository at this point in the history
… solana-keygen compatibility.
  • Loading branch information
hoakbuilds committed May 16, 2021
1 parent e6f2ba2 commit c4af196
Show file tree
Hide file tree
Showing 45 changed files with 876 additions and 719 deletions.
4 changes: 0 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
![solnet](docs/assets/solnet-horizontal.png)

# Solnet

Technical support, chat and collaboration at the [Solnet Discord]().

# What is Solnet?

Solnet is Solana's .NET integration library.
Expand Down
42 changes: 12 additions & 30 deletions Solnet.sln
Original file line number Diff line number Diff line change
@@ -1,59 +1,33 @@

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Solnet.Web3", "src\Solnet.Web3\Solnet.Web3.csproj", "{9185CC62-0674-48B2-9FFC-09D4887E3BAA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Solnet.Web3.Accounts", "src\Solnet.Web3.Accounts\Solnet.Web3.Accounts.csproj", "{750E6A53-38C2-4A54-A37F-0F76CC9616BB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Solnet.Rpc", "src\Solnet.Rpc\Solnet.Rpc.csproj", "{FE8D270F-30AE-4818-AC7B-030591820419}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Solnet.Accounts", "src\Solnet.Accounts\Solnet.Accounts.csproj", "{B1FB0091-A25A-4B6C-AAC6-68BB0409D2EE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Solnet.Models", "src\Solnet.Models\Solnet.Models.csproj", "{8B503BC5-F1C8-4F87-8C53-AD4D6CEFFCF4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Solnet.Hex", "src\Solnet.Hex\Solnet.Hex.csproj", "{E1E63AAD-23DC-494B-9C8F-7912EB9784EA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Solnet.Signer", "src\Solnet.Signer\Solnet.Signer.csproj", "{48E0662C-A237-469E-B60A-FD472D92E012}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Solnet.KeyStore", "src\Solnet.KeyStore\Solnet.KeyStore.csproj", "{BA5BFA52-8010-4438-BC87-153A34464CAA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Solnet.Wallet", "src\Solnet.Wallet\Solnet.Wallet.csproj", "{DA22B717-4FD7-4D08-A546-DFF3B21B7BAE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Solnet.Examples", "src\Solnet.Examples\Solnet.Examples.csproj", "{1198ED67-B1F1-4DE9-BDE8-AE6C96DA33A6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Solnet.Util", "src\Solnet.Util\Solnet.Util.csproj", "{5B8896C9-4B06-41C9-B0F9-05B9F6190CA5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Solnet.KeyGen", "src\Solnet.KeyGen\Solnet.KeyGen.csproj", "{3C534072-1F5F-4625-9831-ACBBA28E5C47}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{9185CC62-0674-48B2-9FFC-09D4887E3BAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9185CC62-0674-48B2-9FFC-09D4887E3BAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9185CC62-0674-48B2-9FFC-09D4887E3BAA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9185CC62-0674-48B2-9FFC-09D4887E3BAA}.Release|Any CPU.Build.0 = Release|Any CPU
{750E6A53-38C2-4A54-A37F-0F76CC9616BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{750E6A53-38C2-4A54-A37F-0F76CC9616BB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{750E6A53-38C2-4A54-A37F-0F76CC9616BB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{750E6A53-38C2-4A54-A37F-0F76CC9616BB}.Release|Any CPU.Build.0 = Release|Any CPU
{FE8D270F-30AE-4818-AC7B-030591820419}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FE8D270F-30AE-4818-AC7B-030591820419}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FE8D270F-30AE-4818-AC7B-030591820419}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FE8D270F-30AE-4818-AC7B-030591820419}.Release|Any CPU.Build.0 = Release|Any CPU
{B1FB0091-A25A-4B6C-AAC6-68BB0409D2EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B1FB0091-A25A-4B6C-AAC6-68BB0409D2EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B1FB0091-A25A-4B6C-AAC6-68BB0409D2EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B1FB0091-A25A-4B6C-AAC6-68BB0409D2EE}.Release|Any CPU.Build.0 = Release|Any CPU
{8B503BC5-F1C8-4F87-8C53-AD4D6CEFFCF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8B503BC5-F1C8-4F87-8C53-AD4D6CEFFCF4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8B503BC5-F1C8-4F87-8C53-AD4D6CEFFCF4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8B503BC5-F1C8-4F87-8C53-AD4D6CEFFCF4}.Release|Any CPU.Build.0 = Release|Any CPU
{E1E63AAD-23DC-494B-9C8F-7912EB9784EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E1E63AAD-23DC-494B-9C8F-7912EB9784EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E1E63AAD-23DC-494B-9C8F-7912EB9784EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E1E63AAD-23DC-494B-9C8F-7912EB9784EA}.Release|Any CPU.Build.0 = Release|Any CPU
{48E0662C-A237-469E-B60A-FD472D92E012}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{48E0662C-A237-469E-B60A-FD472D92E012}.Debug|Any CPU.Build.0 = Debug|Any CPU
{48E0662C-A237-469E-B60A-FD472D92E012}.Release|Any CPU.ActiveCfg = Release|Any CPU
{48E0662C-A237-469E-B60A-FD472D92E012}.Release|Any CPU.Build.0 = Release|Any CPU
{BA5BFA52-8010-4438-BC87-153A34464CAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BA5BFA52-8010-4438-BC87-153A34464CAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BA5BFA52-8010-4438-BC87-153A34464CAA}.Release|Any CPU.ActiveCfg = Release|Any CPU
Expand All @@ -66,5 +40,13 @@ Global
{1198ED67-B1F1-4DE9-BDE8-AE6C96DA33A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1198ED67-B1F1-4DE9-BDE8-AE6C96DA33A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1198ED67-B1F1-4DE9-BDE8-AE6C96DA33A6}.Release|Any CPU.Build.0 = Release|Any CPU
{5B8896C9-4B06-41C9-B0F9-05B9F6190CA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5B8896C9-4B06-41C9-B0F9-05B9F6190CA5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5B8896C9-4B06-41C9-B0F9-05B9F6190CA5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5B8896C9-4B06-41C9-B0F9-05B9F6190CA5}.Release|Any CPU.Build.0 = Release|Any CPU
{3C534072-1F5F-4625-9831-ACBBA28E5C47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3C534072-1F5F-4625-9831-ACBBA28E5C47}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3C534072-1F5F-4625-9831-ACBBA28E5C47}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3C534072-1F5F-4625-9831-ACBBA28E5C47}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal
73 changes: 0 additions & 73 deletions src/Solnet.Accounts/Account.cs

This file was deleted.

17 changes: 0 additions & 17 deletions src/Solnet.Accounts/Solnet.Accounts.csproj

This file was deleted.

39 changes: 39 additions & 0 deletions src/Solnet.Examples/SolanaKeygenKeyGeneration.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using NBitcoin;
using Solnet.Wallet;

namespace Solnet.Examples
{
public class SolanaKeygenWallet
{
static void Example()
{
const string expectedSolKeygenPublicKey = "AZzmpdbZWARkPzL8GKRHjjwY74st4URgk9v7QBubeWba";
const string expectedSolKeygenPrivateKey = "2RitwnKZwoigHk9S3ftvFQhoTy5QQKAipNjZHDgCet8hyciUbJSuhMWDKRL8JKE784pK8jJPFaNerFsS6KXhY9K6";

// mnemonic and passphrase to derive seed
var passphrase = "thisiseightbytesithink";
var mnemonic = new Mnemonic("route clerk disease box emerge airport loud waste attitude film army tray forward deal onion eight catalog surface unit card window walnut wealth medal", Wordlist.English);

var solKeygenWallet = new Wallet.Wallet(mnemonic, passphrase, SeedMode.Bip39);

Console.WriteLine($"SOLLET publicKey>b58 {solKeygenWallet.Account.EncodedPublicKey}");
Console.WriteLine($"SOLLET privateKey>b58 {solKeygenWallet.Account.EncodedPrivateKey}");

Debug.Assert(solKeygenWallet.Account.EncodedPublicKey == expectedSolKeygenPublicKey && solKeygenWallet.Account.EncodedPrivateKey == expectedSolKeygenPrivateKey);

if (solKeygenWallet.Account.EncodedPublicKey != expectedSolKeygenPublicKey ||
solKeygenWallet.Account.EncodedPrivateKey != expectedSolKeygenPrivateKey)
{
Console.WriteLine("NOT GOOD FOR THE SOL");
}
else
{
Console.WriteLine("GOOD FOR THE SOL");
}

}
}
}
57 changes: 57 additions & 0 deletions src/Solnet.Examples/SolletKeyGeneration.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using NBitcoin;

namespace Solnet.Examples
{
public class SolletKeyGeneration
{
static void Example()
{
var expectedSolletAddresses = new List<string[]>
{
new []{"6bhhceZToGG9RsTe1nfNFXEMjavhj6CV55EsvearAt2z", "5S1UT7L6bQ8sVaPjpJyYFEEYh8HAXRXPFUEuj6kHQXs6ZE9F6a2wWrjdokAmSPP5HVP46bYxsrU8yr2FxxYmVBi6"},
new []{"9we6kjtbcZ2vy3GSLLsZTEhbAqXPTRvEyoxa8wxSqKp5", "22J7rH3DFJb1yz8JuWUWfrpsQrNsvZKov8sznfwHbPGTznSgQ8u6LQ6KixPC2mYCJDsfzME1FbdX1x89zKq4MU3K"},
new []{"3F2RNf2f2kWYgJ2XsqcjzVeh3rsEQnwf6cawtBiJGyKV", "5954a6aMxVnPTyMNdVKrSiqoVMRvZcwU7swGp9kHsV9HP9Eu81TebS4Mbq5ZGmZwUaJkkKoCJ2eJSY9cTdWzRXeF"},
new []{"GyWQGKYpvzFmjhnG5Pfw9jfvgDM7LB31HnTRPopCCS9", "tUV1EeY6CARAbuEfVqKS46X136PRBea8PcmYfHRWNQc6yYB14GkSBZ6PTybUt5W14A7FSJ6Mm6NN22fLhUhDUGu"},
new []{"GjtWSPacUQFVShQKRKPc342MLCdNiusn3WTJQKxuDfXi", "iLtErFEn6w5xbsUW63QLYMTJeX8TAgFTUDTgat3gxpaiN3AJbebv6ybtmTj1t1yvkqqY2k1uwFxaKZoCQAPcDZe"},
new []{"DjGCyxjGxpvEo921Ad4tUUWquiRG6dziJUCk8HKZoaKK", "3uvEiJiMyXqQmELLjxV8r3E7CyRFg42LUAxzz6q7fPhzTCxCzPkaMCQ9ARpWYDNiDXhue2Uma1C7KR9AkiiWUS8y"},
new []{"HU6aKFapq4RssJqV96rfE7vv1pepz5A5miPAMxGFso4X", "4xFZDEhhw3oVewE3UCvzLmhRWjjcqvVMxuYiETWiyaV2wJwEJ4ceDDE359NMirh43VYisViHAwsXjZ3F9fk6dAxB"},
new []{"HunD57AAvhBiX2SxmEDMbrgQ9pcqrtRyWKy7dWPEWYkJ", "2Z5CFuVDPQXxrB3iw5g6SAnKqApE1djAqtTZDA83rLZ1NDi6z13rwDX17qdyUDCxK9nDwKAHdVuy3h6jeXspcYxA"},
new []{"9KmfMX4Ne5ocb8C7PwjmJTWTpQTQcPhkeD2zY35mawhq", "c1BzdtL4RByNQnzcaUq3WuNLuyY4tQogGT7JWwy4YGBE8FGSgWUH8eNJFyJgXNYtwTKq4emhC4V132QX9REwujm"},
new []{"7MrtfwpJBw2hn4eopB2CVEKR1kePJV5kKmKX3wUAFsJ9", "4skUmBVmaLoriN9Ge8xcF4xQFJmF554rnRRa2u1yDbre2zj2wUpgCXUaPETLSAWNudCkNAkWM5oJFJRaeZY1g9JR"}
};

// mnemonic and passphrase to derive seed
var mnemonic = new Mnemonic("route clerk disease box emerge airport loud waste attitude film army tray forward deal onion eight catalog surface unit card window walnut wealth medal", Wordlist.English);

// The passphrase isn't used to harden the mnemonic in this case.
var solletWallet = new Wallet.Wallet(mnemonic);
var flag = true;

// Mimic sollet key generation
for (int i = 0; i < 10; i++)
{
var account = solletWallet.GetAccount(i);

Console.WriteLine($"SOLLET publicKey>b58 {account.EncodedPublicKey}");
Console.WriteLine($"SOLLET privateKey>b58 {account.EncodedPrivateKey}");

Debug.Assert(account.EncodedPublicKey == expectedSolletAddresses.get_Item(i)[0] && account.EncodedPrivateKey == expectedSolletAddresses.get_Item(i)[1]);

if (account.EncodedPublicKey != expectedSolletAddresses.get_Item(i)[0] ||
account.EncodedPrivateKey != expectedSolletAddresses.get_Item(i)[1])
flag = false;
}
if (flag)
{
Console.WriteLine("GOOD FOR THE SOLLET");
}
else
{
Console.WriteLine("NOT GOOD FOR THE SOLLET");
}
}
}
}
9 changes: 9 additions & 0 deletions src/Solnet.Examples/Solnet.Examples.csproj
Original file line number Diff line number Diff line change
@@ -1,12 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<OutputType>Exe</OutputType>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\Solnet.Rpc\Solnet.Rpc.csproj" />
<ProjectReference Include="..\Solnet.Models\Solnet.Models.csproj" />
<ProjectReference Include="..\Solnet.Util\Solnet.Util.csproj" />
<ProjectReference Include="..\Solnet.Wallet\Solnet.Wallet.csproj" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Chaos.NaCl.Standard" Version="1.0.0" />
<PackageReference Include="NBitcoin" Version="5.0.78" />
</ItemGroup>

</Project>
2 changes: 1 addition & 1 deletion src/Solnet.Examples/SolnetRpcTester.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ namespace Solnet.Examples
class SolnetRpcTester
{

static void Main(string[] args)
static void Example(string[] args)
{

SolanaJsonRpcClient c = new SolanaJsonRpcClient();
Expand Down
20 changes: 0 additions & 20 deletions src/Solnet.KeyStore/Crypto/DecryptionException.cs

This file was deleted.

22 changes: 0 additions & 22 deletions src/Solnet.KeyStore/Crypto/IRandomBytesGenerator.cs

This file was deleted.

7 changes: 0 additions & 7 deletions src/Solnet.KeyStore/Crypto/KeyStoreCrypto.cs

This file was deleted.

Loading

0 comments on commit c4af196

Please sign in to comment.