Dragonchain .Net SDK
Talk to your dragonchain.
Installation
First, install NuGet. Then, install Dragonchain .Net SDK from the package manager console:
Pre -release
PM> Install-Package dragonchain-sdk-dotnet -Version 1.0.0-alpha
Examples
Import
using dragonchain_sdk;
using dragonchain_sdk.Framework.Web;
GetBlock
var myDcId = "3f2fef78-0000-0000-0000-9f2971607130";
var client = new DragonchainClient(myDcId);
const call = await client.getBlock('block-id-here');
try
{
var block = await client.GetBlock("block-id-here");
var block = call.Response;
Console.WriteLine("Successful call!");
Console.WriteLine($"Block: {block.Header.BlockId}");
}
catch(DragonchainApiException exception)
{
Console.WriteLine("Something went wrong!");
Console.WriteLine($"HTTP status code from chain: {exception.Status}");
Console.WriteLine($"Error response from chain: {exception.Message}");
}
QueryTransactions
var searchResult = await client.QueryTransactions("tag=MyAwesomeTransactionTag");
var totalTransactionsCount = searchResult.Response.Total;
var transactions = searchResult.Response.Results;
Register Transaction Type
var registerTransactionTypeResult = await _dragonchainLevel1Client.RegisterTransactionType(
new TransactionTypeStructure
{
Version = "1",
TransactionType = "apple",
CustomIndexes = new List<CustomIndexStructure>
{
new CustomIndexStructure{ Key ="SomeKey", Path="SomePath" }
}
});
Create a Transaction
var newTransaction = new DragonchainTransactionCreatePayload
{
TransactionType = "apple",
Version = "1",
Tag = "pottery",
Payload = new {}
};
var createResult = await _dragonchainLevel1Client.CreateTransaction(newTransaction);
Inject into Asp.net Core Web App
Program.cs
Configure logging and configuration choices.
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseSerilog()
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(Directory.GetCurrentDirectory());
config.AddJsonFile("config.json", optional: true, reloadOnChange: true);
})
.UseStartup<Startup>()
.Build();
}
Startup.cs
Add the dragonchain client service using the ConfigureServices method
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IDragonchainClient, DragonchainClient>();
services.AddMvc();
}
Controller.cs
Consume the service in controllers or middleware
public class HomeController : Controller
{
private IDragonchainClient _client;
public HomeController(IDragonchainClient client)
{
_client = client;
}
public IActionResult Index()
{
var transactionTypes = _client.ListTransactionTypes();
return View(transactionTypes);
}
Configuration
In order to use this SDK, you need to have an Auth Key as well as an Auth Key ID for a given dragonchain. This can be loaded into the sdk in various ways using an IConfiguration provider:
- The environment variables
AUTH_KEY
andAUTH_KEY_ID
can be set with the appropriate values - Write a json, ini or xml file and use the required Configuration Builder extension like so:
Environment Variables
var config = new ConfigurationBuilder()
.AddEnvironmentVariables()
.Build();
var client = new DragonchainClient(myDcId, config);
Json
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
var client = new DragonchainClient(myDcId, config);
{
"dragonchainId": "3f2fef78-0000-0000-0000-9f2971607130",
"AUTH_KEY": "MyAuthKey",
"AUTH_KEY_ID": "MyAuthKeyId"
}
or
{
"dragonchainId": "3f2fef78-0000-0000-0000-9f2971607130",
"3f2fef78-0000-0000-0000-9f2971607130": {
"AUTH_KEY": "MyAuthKey",
"AUTH_KEY_ID": "MyAuthKeyId"
}
}
INI
var config = new ConfigurationBuilder()
.AddIniFile("config.ini")
.Build();
var client = new DragonchainClient(myDcId, config);
dragonchainId=3f2fef78-0000-0000-0000-9f2971607130
AUTH_KEY=MyAuthKey
AUTH_KEY_ID=MyAuthKeyId
or
dragonchainId=3f2fef78-0000-0000-0000-9f2971607130
[3f2fef78-0000-0000-0000-9f2971607130]
AUTH_KEY=MyAuthKey
AUTH_KEY_ID=MyAuthKeyId
XML
var config = new ConfigurationBuilder()
.AddXmlFile("config.xml")
.Build();
var client = new DragonchainClient(myDcId, config);
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<dragonchainId>3f2fef78-0000-0000-0000-9f2971607130</dragonchainId>
<AUTH_KEY>MyAuthKey</AUTH_KEY>
<AUTH_KEY_ID>MyAuthKeyId</AUTH_KEY_ID>
</configuration>
or
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<dragonchainId>3f2fef78-0000-0000-0000-9f2971607130</dragonchainId>
<3f2fef78-0000-0000-0000-9f2971607130>
<AUTH_KEY>MyAuthKey</AUTH_KEY>
<AUTH_KEY_ID>MyAuthKeyId</AUTH_KEY_ID>
</3f2fef78-0000-0000-0000-9f2971607130>
</configuration>
Logging
In order to get the logging output of the sdk, a logger must be set (by default all logging is thrown away).
In order to set the logger, simply inject a Microsoft.Extensions.Logging implementation. Read here for more information Microsoft Logging Docs. For example, if you just wanted to log to the console you can set the logger like the following:
var webHost = new WebHostBuilder()
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConsole();
})
.UseStartup<Startup>()
.Build();
You can also create your own implemnations of ILogger
var logger = new MyLogger();
var client = new DragonchainClient(myDcId, config, logger);