static void Main(string[] args) { BigchainDbConfigBuilder .baseUrl("https://test.bigchaindb.com/") .webSocketMonitor(new ValidTransactionMessageHandler()) .setup(); Console.ReadKey(true); }
public async Task <IActionResult> ValidateAsync(string transactionId) { if (string.IsNullOrWhiteSpace(transactionId)) { return(NotFound()); } try { var conn1Config = new Dictionary <string, object>(); //config connection 1 conn1Config.Add("baseUrl", "http://ebcl1.ici.ro"); BlockchainConnection conn1 = new BlockchainConnection(conn1Config); var conn2Config = new Dictionary <string, object>(); var headers2 = new Dictionary <string, string>(); //config connection 2 conn2Config.Add("baseUrl", "http://ebcl2.ici.ro"); BlockchainConnection conn2 = new BlockchainConnection(conn2Config); var conn3Config = new Dictionary <string, object>(); var headers3 = new Dictionary <string, string>(); //config connection 2 conn3Config.Add("baseUrl", "http://ebcl3.ici.ro"); BlockchainConnection conn3 = new BlockchainConnection(conn2Config); //add connections IList <BlockchainConnection> connections = new List <BlockchainConnection>(); connections.Add(conn1); connections.Add(conn2); connections.Add(conn3); //multiple connections var builderWithConnections = BigchainDbConfigBuilder .addConnections(connections) .setTimeout(60000); //override default timeout of 20000 milliseconds await builderWithConnections.setup(); var testTran2 = await TransactionsApi <object, object> .getTransactionByIdAsync(transactionId); BlockchainTransaction bt = JsonConvert.DeserializeObject <BlockchainTransaction>(testTran2.Asset.Data.ToString()); return(View(bt)); } catch (Exception e) { return(Content("Error connecting to the blockchain")); } }
private async Task init() { try { var configuration = GetIConfigurationRoot(Directory.GetCurrentDirectory()); var appConfig = configuration.GetSection("AppConfig"); builder = BigchainDbConfigBuilder .baseUrl(appConfig["api:url"]); var ret = await builder.setup(); ret.ShouldBe(true); } catch (Exception e) { Console.WriteLine(e); } }
public virtual async Task secondNodeIsUsedIfFirstNodeGoesDown() { //check that nodes are up if (!bdbNode1.IsStarted) { bdbNode1.Reset(); } ; if (!bdbNode2.IsStarted) { bdbNode2.Reset(); } ; //start listening on node 1 stub(bdbNode1); //start listening on node 2 stub(bdbNode2); await BigchainDbConfigBuilder.addConnections(connections).setTimeout(10000).setup(); //check if driver is connected to first node string actualBaseUrl = (string)BigchainDbConfigBuilder.Builder.CurrentNode.getConnection()["baseUrl"]; actualBaseUrl.ShouldBe(server1); //shut down node 1 bdbNode1.Stop(); //now transaction should be send by node 2 await sendCreateTransaction(); //verify driver is connected to node 2 string newBaseUrl = (string)BigchainDbConfigBuilder.Builder.CurrentNode.getConnection()["baseUrl"]; newBaseUrl.ShouldBe(server2); }
public BigChainDbService(string url) { Console.Write("Connecting to NodeURL: "); Console.WriteLine(url); var builder = BigchainDbConfigBuilder .baseUrl(url) .addToken("header1", "header1_value") .addToken("header2", "header2_value"); if (!AsyncContext.Run(() => builder.setup())) { Console.WriteLine("Failed to setup"); } ; // Use MongoDB for READ-ONLY access //connect directly to MongoDB service running on the node to enable better query options var client = new MongoClient("mongodb://*****:*****@cnode.lifeblocks.site:27017/?authSource=bigchain"); bigchainDatabase = client.GetDatabase("bigchain"); }
public virtual async Task nodeIsReusedOnSuccessfulConnection() { //check that node is up if (!bdbNode1.IsStarted) { bdbNode1.Reset(); } ; stub(bdbNode1); await BigchainDbConfigBuilder.addConnections(connections).setTimeout(10000).setup(); string actualBaseUrl = (string)BigchainDbConfigBuilder.Builder.CurrentNode.getConnection()["baseUrl"]; actualBaseUrl.ShouldBe(server1); await sendCreateTransaction(); string newBaseUrl = (string)BigchainDbConfigBuilder.Builder.CurrentNode.getConnection()["baseUrl"]; newBaseUrl.ShouldBe(server1); }
public BigChainDbService(string[] urls) { // Create a list of connections List <BlockchainConnection> connections = new List <BlockchainConnection>(); Console.WriteLine("NodeURLs: "); Random rnd = new Random(); string[] MyRandomArray = urls.OrderBy(x => rnd.Next()).ToArray(); foreach (var url in MyRandomArray) { // print urls that we're connecting to Console.WriteLine(url); var conn_conf = new Dictionary <string, object>(); conn_conf.Add("baseUrl", "https://" + url); BlockchainConnection bc_conn = new BlockchainConnection(conn_conf); connections.Add(bc_conn); } var builder = BigchainDbConfigBuilder .addConnections(connections) .setTimeout(60000); if (!AsyncContext.Run(() => builder.setup())) { Console.WriteLine("Failed Multi-Node Setup"); } var baseURL = builder.BaseUrl.Split("/")[2];; Console.WriteLine("Finished connecting to multiple nodes"); var client = new MongoClient($"mongodb://*****:*****@{baseURL}:27017/?authSource=bigchain"); bigchainDatabase = client.GetDatabase("bigchain"); ipfs = new IpfsClient("http://" + baseURL + ":5001"); return; }
public async Task <IActionResult> Create([Bind("Id,HolderFullName,DateOfIssue,TransactionId,CourseName")] SignedDiploma signedDiploma) { if (ModelState.IsValid) { try { //Sign the transaction to the blockchain var conn1Config = new Dictionary <string, object>(); //config connection 1 conn1Config.Add("baseUrl", "http://ebcl1.ici.ro"); BlockchainConnection conn1 = new BlockchainConnection(conn1Config); var conn2Config = new Dictionary <string, object>(); var headers2 = new Dictionary <string, string>(); //config connection 2 conn2Config.Add("baseUrl", "http://ebcl2.ici.ro"); BlockchainConnection conn2 = new BlockchainConnection(conn2Config); var conn3Config = new Dictionary <string, object>(); var headers3 = new Dictionary <string, string>(); //config connection 2 conn3Config.Add("baseUrl", "http://ebcl3.ici.ro"); BlockchainConnection conn3 = new BlockchainConnection(conn2Config); //add connections IList <BlockchainConnection> connections = new List <BlockchainConnection>(); connections.Add(conn1); connections.Add(conn2); connections.Add(conn3); //multiple connections var builderWithConnections = BigchainDbConfigBuilder .addConnections(connections) .setTimeout(60000); //override default timeout of 20000 milliseconds await builderWithConnections.setup(); // prepare your key var algorithm = SignatureAlgorithm.Ed25519; var privateKey = Key.Import(algorithm, Utils.StringToByteArray(privateKeyString), KeyBlobFormat.PkixPrivateKey); var publicKey = PublicKey.Import(algorithm, Utils.StringToByteArray(publicKeyString), KeyBlobFormat.PkixPublicKey); BlockchainTransaction assetData = new BlockchainTransaction(); assetData.HoldersName = signedDiploma.HolderFullName; assetData.DateOfIssue = signedDiploma.DateOfIssue; assetData.CourseName = signedDiploma.CourseName; //TestMetadata metaData = new TestMetadata(); TransactionsMetadata metaData = new TransactionsMetadata(); string externalip = new WebClient().DownloadString("http://icanhazip.com"); metaData.SignerIP = externalip; // Set up, sign, and send your transaction var transaction = BigchainDbTransactionBuilder <BlockchainTransaction, TransactionsMetadata> .init() .addAssets(assetData) .addMetaData(metaData) .operation(Operations.CREATE) .buildAndSignOnly(publicKey, privateKey); var createTransaction = await TransactionsApi <BlockchainTransaction, TransactionsMetadata> .sendTransactionAsync(transaction); string assetId2 = ""; // the asset's ID is equal to the ID of the transaction that created it if (createTransaction != null && createTransaction.Data != null) { assetId2 = createTransaction.Data.Id; signedDiploma.TransactionId = assetId2; _context.SignedDiplomas.Add(signedDiploma); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } else if (createTransaction != null) { return(Content("Could not send it: " + createTransaction.Messsage.Message)); } } catch (Exception e) { return(Content(e.ToString())); } return(RedirectToAction(nameof(Index))); } return(View()); }
static void Main(string[] args) { // The code provided will print ‘Hello World’ to the console. // Press Ctrl+F5 (or go to Debug > Start Without Debugging) to run your app. Console.WriteLine("Hello Omnibasis!"); var testTransfer = false; //define connections var conn1Config = new Dictionary <string, object>(); //config connection 1 conn1Config.Add("baseUrl", "https://test.ipdb.io"); BlockchainConnection conn1 = new BlockchainConnection(conn1Config); var conn2Config = new Dictionary <string, object>(); var headers2 = new Dictionary <string, string>(); //config connection 2 conn2Config.Add("baseUrl", "https://test.ipdb.io"); BlockchainConnection conn2 = new BlockchainConnection(conn2Config); //add connections IList <BlockchainConnection> connections = new List <BlockchainConnection>(); connections.Add(conn1); connections.Add(conn2); //...You can add as many nodes as you want //multiple connections var builderWithConnections = BigchainDbConfigBuilder .addConnections(connections) .setTimeout(60000); //override default timeout of 20000 milliseconds // single connection var builder = BigchainDbConfigBuilder .baseUrl("https://test.ipdb.io"); if (!AsyncContext.Run(() => builder.setup())) { Console.WriteLine("Failed to setup"); } ; // prepare your key var algorithm = SignatureAlgorithm.Ed25519; var privateKey = Key.Import(algorithm, Utils.StringToByteArray(privateKeyString), KeyBlobFormat.PkixPrivateKey); var publicKey = PublicKey.Import(algorithm, Utils.StringToByteArray(publicKeyString), KeyBlobFormat.PkixPublicKey); //Account account = new Account(); //Dictionary<string, string> assetData = new Dictionary<string, string>(); //assetData.Add("msg", "Hello!"); Random random = new Random(); TestAsset assetData = new TestAsset(); assetData.msg = "Hello Omnibasis!"; assetData.city = "I was born in San Diego"; assetData.temperature = random.Next(60, 80); assetData.datetime = DateTime.Now; //MetaData metaData = new MetaData(); //metaData.setMetaData("msg", "My first transaction"); TestMetadata metaData = new TestMetadata(); metaData.msg = "My first transaction"; // Set up, sign, and send your transaction var transaction = BigchainDbTransactionBuilder <TestAsset, TestMetadata> .init() .addAssets(assetData) .addMetaData(metaData) .operation(Operations.CREATE) .buildAndSignOnly(publicKey, privateKey); //.buildAndSign(account.PublicKey, account.PrivateKey); //var info = transaction.toHashInput(); var createTransaction = AsyncContext.Run(() => TransactionsApi <TestAsset, TestMetadata> .sendTransactionAsync(transaction)); string assetId2 = ""; // the asset's ID is equal to the ID of the transaction that created it if (createTransaction != null && createTransaction.Data != null) { assetId2 = createTransaction.Data.Id; //"2984ac294290ce6f15124140dad652fc8a306aca62c38237174988dfcf31a3e6" var testTran2 = AsyncContext.Run(() => TransactionsApi <object, object> .getTransactionByIdAsync(assetId2)); if (testTran2 != null) { Console.WriteLine("Hello assetId: " + assetId2); } else { Console.WriteLine("Failed to find assetId: " + assetId2); } } else if (createTransaction != null) { Console.WriteLine("Failed to send transaction: " + createTransaction.Messsage.Message); } //} if (!string.IsNullOrEmpty(assetId2) && testTransfer) { // Describe the output you are fulfilling on the previous transaction FulFill spendFrom = new FulFill(); spendFrom.TransactionId = assetId2; spendFrom.OutputIndex = 0; // Change the metadata if you want //MetaData transferMetadata = new MetaData(); //metaData.setMetaData("msg", "My second transaction"); TestMetadata transferMetadata = new TestMetadata(); transferMetadata.msg = "My second transaction"; // the asset's ID is equal to the ID of the transaction that created it // By default, the 'amount' of a created digital asset == "1". So we spend "1" in our TRANSFER. string amount = "1"; BlockchainAccount account = new BlockchainAccount(); Details details = null; // Use the previous transaction's asset and TRANSFER it var build2 = BigchainDbTransactionBuilder <Asset <string>, TestMetadata> . init(). addMetaData(metaData). addInput(details, spendFrom, publicKey). addOutput("1", account.Key.PublicKey). addAssets(assetId2). operation(Operations.TRANSFER). buildAndSignOnly(publicKey, privateKey); var transferTransaction = AsyncContext.Run(() => TransactionsApi <Asset <string>, TestMetadata> .sendTransactionAsync(build2)); if (transferTransaction != null && transferTransaction.Data != null) { string assetIdTransfer = transferTransaction.Data.Id; var testTran2 = AsyncContext.Run(() => TransactionsApi <object, object> .getTransactionByIdAsync(assetIdTransfer)); if (testTran2 != null) { Console.WriteLine("Hello transfer assetId: " + assetIdTransfer); } else { Console.WriteLine("Failed to find transfer assetId: " + assetIdTransfer); } } else if (transferTransaction != null) { Console.WriteLine("Failed to send transaction: " + createTransaction.Messsage.Message); } } Console.ReadKey(true); // Go to http://aka.ms/dotnet-get-started-console to continue learning how to build a console app! }
static void Main(string[] args) { Console.WriteLine("Hello World!"); //define connections var conn1Config = new Dictionary <string, object>(); //define headers for connections var headers1 = new Dictionary <string, string>(); //config connection 1 conn1Config.Add("baseUrl", "https://test.ipdb.io/"); conn1Config.Add("headers", headers1); BlockchainConnection conn1 = new BlockchainConnection(conn1Config); var conn2Config = new Dictionary <string, object>(); var headers2 = new Dictionary <string, string>(); //config connection 2 conn2Config.Add("baseUrl", "https://test.ipdb.io/"); conn2Config.Add("headers", headers2); BlockchainConnection conn2 = new BlockchainConnection(conn2Config); //add connections IList <BlockchainConnection> connections = new List <BlockchainConnection>(); connections.Add(conn1); connections.Add(conn2); //...You can add as many nodes as you want //multiple connections var builder = BigchainDbConfigBuilder .addConnections(connections) .setTimeout(60000); //override default timeout of 20000 milliseconds // single connection //var builder = BigchainDbConfigBuilder // .baseUrl("https://test.ipdb.io/") // .addToken("app_id", "204d77e0") // .addToken("app_key", "910c0943ce05e76b568395986d3b33d9"); if (!AsyncContext.Run(() => builder.setup())) { Console.WriteLine("Failed to setup"); } ; // prepare your key var algorithm = SignatureAlgorithm.Ed25519; var privateKey = Key.Import(algorithm, Utils.StringToByteArray(privateKeyString), KeyBlobFormat.PkixPrivateKey); var publicKey = PublicKey.Import(algorithm, Utils.StringToByteArray(publicKeyString), KeyBlobFormat.PkixPublicKey); //Account account = new Account(); //Dictionary<string, string> assetData = new Dictionary<string, string>(); //assetData.Add("msg", "Hello!"); TestAsset assetData = new TestAsset(); assetData.msg = "Hello!"; assetData.city = "San Diego"; assetData.temperature = "74"; assetData.datetime = DateTime.Now; //MetaData metaData = new MetaData(); //metaData.setMetaData("msg", "My first transaction"); TestMetadata metaData = new TestMetadata(); metaData.msg = "My first transaction"; var createTransaction2 = AsyncContext.Run(() => TransactionsApi <object, object> .getTransactionByIdAsync("a30a6858185b9382fed0053e51a1e6faae490132c307a7cd488097c12a55b763")); //if(true) //{ // Set up, sign, and send your transaction var transaction = BigchainDbTransactionBuilder <TestAsset, TestMetadata> .init() .addAssets(assetData) .addMetaData(metaData) .operation(Operations.CREATE) .buildAndSignOnly(publicKey, privateKey); //.buildAndSign(account.PublicKey, account.PrivateKey); //var info = transaction.toHashInput(); var createTransaction = AsyncContext.Run(() => TransactionsApi <TestAsset, TestMetadata> .sendTransactionAsync(transaction)); // the asset's ID is equal to the ID of the transaction that created it if (createTransaction != null && createTransaction.Data != null) { string assetId2 = createTransaction.Data.Id; //"2984ac294290ce6f15124140dad652fc8a306aca62c38237174988dfcf31a3e6" var testTran2 = AsyncContext.Run(() => TransactionsApi <object, object> .getTransactionByIdAsync(assetId2)); Console.WriteLine("Hello assetId: " + assetId2); } else { Console.WriteLine("Failed to send transaction"); } //} // Describe the output you are fulfilling on the previous transaction FulFill spendFrom = new FulFill(); spendFrom.TransactionId = createTransaction.Data.Id; spendFrom.OutputIndex = 0; // Change the metadata if you want //MetaData transferMetadata = new MetaData(); //metaData.setMetaData("msg", "My second transaction"); TestMetadata transferMetadata = new TestMetadata(); transferMetadata.msg = "My second transaction"; // the asset's ID is equal to the ID of the transaction that created it // By default, the 'amount' of a created digital asset == "1". So we spend "1" in our TRANSFER. string amount = "1"; BlockchainAccount account = new BlockchainAccount(); Details details = null; // Use the previous transaction's asset and TRANSFER it var build2 = BigchainDbTransactionBuilder <Asset <string>, TestMetadata> . init(). addMetaData(metaData). addInput(details, spendFrom, publicKey). addOutput("1", account.Key.PublicKey). addAssets(createTransaction.Data.Id). operation(Operations.TRANSFER). buildAndSignOnly(publicKey, privateKey); var transferTransaction = AsyncContext.Run(() => TransactionsApi <Asset <string>, TestMetadata> .sendTransactionAsync(build2)); if (transferTransaction != null) { string assetId2 = transferTransaction.Data.Id; //"2984ac294290ce6f15124140dad652fc8a306aca62c38237174988dfcf31a3e6" var testTran2 = AsyncContext.Run(() => TransactionsApi <object, object> .getTransactionByIdAsync(assetId2)); Console.WriteLine("Hello assetId: " + assetId2); } else { Console.WriteLine("Failed to send transaction"); } Console.ReadKey(true); }
public virtual async Task shouldThrowTimeoutException() { //check that nodes are up if (!bdbNode1.IsStarted) { bdbNode1.Reset(); } ; if (!bdbNode2.IsStarted) { bdbNode2.Reset(); } ; if (!bdbNode3.IsStarted) { bdbNode3.Reset(); } ; //start listening on node 1 stub(bdbNode1); //start listening on node 2 stub(bdbNode2); //start listening on node 3 stub(bdbNode3); await BigchainDbConfigBuilder.addConnections(connections).setTimeout(10000).setup(); //check if driver is connected to first node string url1 = (string)BigchainDbConfigBuilder.Builder.CurrentNode.getConnection()["baseUrl"]; url1.ShouldBe(server1); //shut down node 1 bdbNode1.Stop(); //now transaction should be send by node 2 await sendCreateTransaction(); //check if driver is connected to node 2 string url2 = (string)BigchainDbConfigBuilder.Builder.CurrentNode.getConnection()["baseUrl"]; url2.ShouldBe(server2); //shut down node 2 bdbNode2.Stop(); //now transaction should be send by node 2 await sendCreateTransaction(); //check if driver is connected to node 3 string url3 = (string)BigchainDbConfigBuilder.Builder.CurrentNode.getConnection()["baseUrl"]; url3.ShouldBe(server3); //shut down node 3 bdbNode3.Stop(); //now transaction cannot be send as all nodes are down await sendCreateTransaction(); }
public virtual async Task verifyMetaValuesForNodesAreUpdatedCorrectly() { //check that nodes are up if (!bdbNode1.IsStarted) { bdbNode1.Reset(); } ; if (!bdbNode2.IsStarted) { bdbNode2.Reset(); } ; if (!bdbNode3.IsStarted) { bdbNode3.Reset(); } ; //start listening on node 1 stub(bdbNode1); //start listening on node 2 stub(bdbNode2); //start listening on node 3 stub(bdbNode3); await BigchainDbConfigBuilder.addConnections(connections).setTimeout(10000).setup(); //verify meta values of nodes are initialized as 0 foreach (BlockchainConnection conn in BigchainDbConfigBuilder.Builder.Connections) { (conn.TimeToRetryForConnection == 0).ShouldBe(true); (conn.RetryCount == 0).ShouldBe(true); } //check if driver is connected to first node string actualBaseUrl = (string)BigchainDbConfigBuilder.Builder.CurrentNode.getConnection()["baseUrl"]; actualBaseUrl.ShouldBe(server1); //shut down node 1 bdbNode1.Stop(); //now transaction should be send by node 2 await sendCreateTransaction(); string baseUrl1 = "", baseUrl2 = ""; //verify meta values of nodes are initialized as 0 foreach (BlockchainConnection conn in BigchainDbConfigBuilder.Builder.Connections) { baseUrl1 = (string)conn.getConnection()["baseUrl"]; if (baseUrl1.Equals(server1)) { (conn.TimeToRetryForConnection != 0).ShouldBe(true); ((conn.TimeToRetryForConnection - DateTimeHelper.CurrentUnixTimeMillis()) <= BigchainDbConfigBuilder.Builder.Timeout).ShouldBe(true); (conn.RetryCount == 1).ShouldBe(true); } } //verify driver is connected to node 2 string newBaseUrl = (string)BigchainDbConfigBuilder.Builder.CurrentNode.getConnection()["baseUrl"]; newBaseUrl.ShouldBe(server2); //shut down node 2 bdbNode2.Stop(); //now transaction should be send by node 3 await sendCreateTransaction(); long T1 = 0, T2 = 0; //verify meta values of nodes foreach (BlockchainConnection conn in BigchainDbConfigBuilder.Builder.Connections) { baseUrl2 = (string)conn.getConnection()["baseUrl"]; if (baseUrl2.Equals(server2)) { T2 = conn.TimeToRetryForConnection; (T2 != 0).ShouldBe(true); ((T2 - DateTimeHelper.CurrentUnixTimeMillis()) <= BigchainDbConfigBuilder.Builder.Timeout).ShouldBe(true); (conn.RetryCount == 1).ShouldBe(true); } baseUrl1 = (string)conn.getConnection()["baseUrl"]; if (baseUrl1.Equals(server1)) { T1 = conn.TimeToRetryForConnection; (T1 != 0).ShouldBe(true); (conn.RetryCount == 1).ShouldBe(true); } } //verify that T1 < T2 (T1 < T2).ShouldBe(true); }