コード例 #1
0
        public void testCreateAccount()
        {
            BlockchainAccount account = AccountApi.createAccount();

            account.PublicKey.ShouldNotBe(null);
            account.Key.ShouldNotBe(null);
        }
コード例 #2
0
        public async Task testPostCreateTransactionOfObjectMetaDataUsingBuilder()
        {
            BlockchainAccount account = new BlockchainAccount();

            ObjectDummy dummyAsset = new ObjectDummy();

            dummyAsset.id          = "id";
            dummyAsset.description = "asset";

            SomeMetaData metaData = new SomeMetaData();

            metaData.properties.Add("one");
            metaData.properties.Add("two");
            metaData.properties.Add("three");


            var transaction = await BigchainDbTransactionBuilder <ObjectDummy, SomeMetaData>
                              .init()
                              .addAssets(dummyAsset)
                              .addMetaData(metaData)
                              .operation(Operations.CREATE)
                              .buildAndSign(account.PublicKey, account.Key)
                              .sendTransactionAsync();

            transaction.Data.ShouldNotBe(null);
            transaction.Data.Id.ShouldNotBe(null);
            transaction.Data.Operation.ShouldBe("CREATE");

            // check returned transaction to match properties
            transaction.Data.MetaData.Metadata.porperty2.ShouldBe(2);
            transaction.Data.MetaData.Metadata.properties.Count.ShouldBe(3);
            transaction.Data.MetaData.Metadata.properties[2].ShouldBe("three");
        }
コード例 #3
0
        public void testLoadAccount()
        {
            BlockchainAccount account = AccountApi.loadAccount(publicKey, privateKey);

            account.Key.ShouldNotBe(null);
            account.PublicKey.ShouldNotBe(null);
        }
コード例 #4
0
        public void Register()
        {
            Console.WriteLine("Vui lòng nhập đầy đủ các thông tin bên dưới.");
            Console.WriteLine("Tài khoản đăng nhập: ");
            var username = Console.ReadLine();

            Console.WriteLine("Mật khẩu: ");
            var password = Console.ReadLine();

            Console.WriteLine("Nhập lại mật khẩu: ");
            var cpassword = Console.ReadLine();

            Console.WriteLine("Số dư trong tài khoản: ");
            var balance = Utility.GetUnsignedDecimalNumber();
            BlockchainAccount blockchainAccount = new BlockchainAccount(username, password, balance);

            // validate trước khi save.
            if (model.Save(blockchainAccount))
            {
                Console.WriteLine(
                    "Đăng ký tài khoản thành công.");
            }


            Console.WriteLine("Ấn enter để tiếp tục.");
            Console.ReadLine();
        }
コード例 #5
0
        public ActionResult DeleteConfirmed(int id)
        {
            BlockchainAccount blockchainAccount = db.BlockchainAccounts.Find(id);

            db.BlockchainAccounts.Remove(blockchainAccount);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
コード例 #6
0
 public ActionResult Edit([Bind(Include = "BlockChainAccountId,AccountName,AccountAddress,AccountPassword,AccountType,AccountActive,PreferedBlockChainNodeServerId")] BlockchainAccount blockchainAccount)
 {
     if (ModelState.IsValid)
     {
         db.Entry(blockchainAccount).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.PreferedBlockChainNodeServerId = new SelectList(db.BlockchainNodeServers, "BlockChainNodeServerId", "NodeServerName", blockchainAccount.PreferedBlockChainNodeServerId);
     return(View(blockchainAccount));
 }
コード例 #7
0
        // GET: BlockchainAccounts/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            BlockchainAccount blockchainAccount = db.BlockchainAccounts.Find(id);

            if (blockchainAccount == null)
            {
                return(HttpNotFound());
            }
            return(View(blockchainAccount));
        }
コード例 #8
0
        public async Task testBuildTransferTransaction()
        {
            HelloAsset assetData = new HelloAsset("Hello BigchainDB!");
            MetaData<HelloMetadata> metaData = new MetaData<HelloMetadata>();

            Transaction<HelloAsset, HelloMetadata> transaction = BigchainDbTransactionBuilder<HelloAsset, HelloMetadata>
                .init()
                .addAssets(assetData)
                .operation(Operations.TRANSFER)
                .addMetaData(metaData)
                .buildAndSignOnly(BlockchainAccount.publicKeyFromHex(publicKey), BlockchainAccount.privateKeyFromHex(privateKey));

            transaction.Version.ShouldBe("2.0");
            transaction.Operation.ShouldBe("TRANSFER");
        }
コード例 #9
0
        public bool Save(BlockchainAccount blockchainAccount)
        {
            var queryString = "insert into `blkaccount` (accountNumber, username, password, balance)" +
                              " values (@accountNumber, @username, @password, @balance)";
            var cmd = new MySqlCommand(queryString, ConnectionHelper.GetConnection());

            cmd.Parameters.AddWithValue("@accountNumber", blockchainAccount.AccountNumber);
            cmd.Parameters.AddWithValue("@username", blockchainAccount.UserName);
            cmd.Parameters.AddWithValue("@password", blockchainAccount.Password);
            cmd.Parameters.AddWithValue("@balance", blockchainAccount.Balance);
            var result = cmd.ExecuteNonQuery();

            ConnectionHelper.CloseConnection();
            return(result == 1);
        }
コード例 #10
0
        // GET: BlockchainAccounts/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            BlockchainAccount blockchainAccount = db.BlockchainAccounts.Find(id);

            if (blockchainAccount == null)
            {
                return(HttpNotFound());
            }
            ViewBag.PreferedBlockChainNodeServerId = new SelectList(db.BlockchainNodeServers, "BlockChainNodeServerId", "NodeServerName", blockchainAccount.PreferedBlockChainNodeServerId);
            return(View(blockchainAccount));
        }
コード例 #11
0
        public async Task testBuildCreateTransaction()
        {
            HelloAsset assetData = new HelloAsset("Hello!");


            MetaData <HelloMetadata> metaData = new MetaData <HelloMetadata>();

            metaData.Id = "51ce82a14ca274d43e4992bbce41f6fdeb755f846e48e710a3bbb3b0cf8e4204";
            HelloMetadata data = new HelloMetadata();

            data.msg          = "My first transaction";
            metaData.Metadata = data;

            Transaction <HelloAsset, HelloMetadata> transaction =
                BigchainDbTransactionBuilder <HelloAsset, HelloMetadata>
                .init()
                .addAssets(assetData)
                .addMetaData(metaData)
                .operation(Operations.CREATE)
                .buildAndSignOnly(BlockchainAccount.publicKeyFromHex(publicKey),
                                  BlockchainAccount.privateKeyFromHex(privateKey));

            //string info = transaction.toHashInput();
            transaction.Version.ShouldBe("2.0");
            transaction.Asset.Data.ShouldNotBe(null);
            transaction.Signed.ShouldBe(true);
            transaction.Operation.ShouldBe("CREATE");

            Input input = transaction.Inputs[0];

            input.OwnersBefore.ShouldNotBe(null);
            input.FulFillment.ShouldNotBe(null);
            // was null
            //input.FulFills.ShouldNotBe(null);

            Output output = transaction.Outputs[0];

            output.Amount.ShouldNotBe(null);
            output.Condition.Uri.ShouldNotBe(null);
            output.Condition.Details.PublicKey.ShouldNotBe(null);
            output.Condition.Details.Type.ShouldNotBe(null);
            output.PublicKeys.ShouldNotBe(null);

            transaction.MetaData.Metadata.msg.ShouldBe("My first transaction");
        }
コード例 #12
0
        //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
        //ORIGINAL LINE: public String sendCreateTransaction() throws TimeoutException, Exception
        private async Task <string> sendCreateTransaction(IBlockchainConfigurationBuilder db = null)
        {
            BlockchainAccount account = new BlockchainAccount();


            // create New asset
            Dictionary <string, string> assetData = new Dictionary <string, string>();

            assetData.Add("name", "James Bond");
            assetData.Add("age", "doesn't matter");
            assetData.Add("purpose", "saving the world");
            Console.WriteLine("(*) Assets Prepared..");

            // create metadata
            Dictionary <string, string> metaData = new Dictionary <string, string>();

            metaData.Add("where is he now?", "Thailand");
            Console.WriteLine("(*) Metadata Prepared..");
            //build and send CREATE transaction


            var transaction =
                await BigchainDbTransactionBuilder <Dictionary <string, string>, Dictionary <string, string> >
                .init()
                .addAssets(assetData)
                .addMetaData(metaData)
                .operation(Operations.CREATE)
                .buildAndSign(account.PublicKey, account.Key)
                .sendTransactionAsync(db);


            if (transaction.Data != null)
            {
                Console.WriteLine("(*) CREATE Transaction sent.. - " + transaction.Data.Id);

                return(transaction.Data.Id);
            }
            else
            {
                Console.WriteLine("(*) CREATE Transaction failed.. - ");

                return(null);
            }
        }
コード例 #13
0
        public async Task testPostCreateTransactionUsingBuilderWithCallBack()
        {
            BlockchainAccount account = new BlockchainAccount();

            Dictionary <string, string> metaData = new Dictionary <string, string>();

            metaData.Add("what", "bigchaintrans");

            Dictionary <string, string> assetData = new Dictionary <string, string>();

            assetData.Add("firstname", "alvin");

            var t = await BigchainDbTransactionBuilder <Dictionary <string, string>, Dictionary <string, string> >
                    .init()
                    .addAssets(assetData)
                    .addMetaData(metaData)
                    .operation(Operations.CREATE)
                    .buildAndSign(account.PublicKey, account.Key)
                    .sendTransactionAsync(new GenericCallbackAnonymousInnerClass());
        }
コード例 #14
0
        public async Task testBuildOnlyCreateTransaction()
        {
            HelloAsset assetData = new HelloAsset("Hello BigchainDB!");

            PublicKey edDSAPublicKey = BlockchainAccount.publicKeyFromHex(publicKey);
            FulFill   fulFill        = new FulFill();

            fulFill.OutputIndex   = 0;
            fulFill.TransactionId = "2d431073e1477f3073a4693ac7ff9be5634751de1b8abaa1f4e19548ef0b4b0e";

            Transaction <HelloAsset, object> transaction = BigchainDbTransactionBuilder <HelloAsset, object>
                                                           .init()
                                                           .addAssets(assetData)
                                                           .addInput("pGSAIDE5i63cn4X8T8N1sZ2mGkJD5lNRnBM4PZgI_zvzbr-cgUCy4BR6gKaYT-tdyAGPPpknIqI4JYQQ-p2nCg3_9BfOI-15vzldhyz-j_LZVpqAlRmbTzKS-Q5gs7ZIFaZCA_UD",
                                                                     fulFill, edDSAPublicKey)
                                                           .addOutput("1", edDSAPublicKey)
                                                           .operation(Operations.CREATE).buildOnly(edDSAPublicKey);

            transaction.Version.ShouldBe("2.0");
            transaction.Signed.ShouldBe(null);
            transaction.Operation.ShouldBe("CREATE");

            Input input = transaction.Inputs[0];

            input.OwnersBefore.ShouldNotBe(null);
            input.FulFillment.ShouldNotBe(null);
            input.FulFills.ShouldNotBe(null);
            input.FulFills.OutputIndex.ShouldBe(0);
            input.FulFills.TransactionId.ShouldBe("2d431073e1477f3073a4693ac7ff9be5634751de1b8abaa1f4e19548ef0b4b0e");

            Output output = transaction.Outputs[0];

            output.Amount.ShouldNotBe(null);
            output.Condition.Uri.ShouldNotBe(null);
            output.Condition.Details.PublicKey.ShouldNotBe(null);
            output.Condition.Details.Type.ShouldNotBe(null);
            output.PublicKeys.ShouldNotBe(null);
        }
コード例 #15
0
        public async Task testPostTransactionOfCreateUsingBuilder()
        {
            BlockchainAccount account    = new BlockchainAccount();
            ObjectDummy       dummyAsset = new ObjectDummy();

            dummyAsset.id          = "id";
            dummyAsset.description = "asset";

            ObjectDummy dummyMeta = new ObjectDummy();

            dummyMeta.id          = "id";
            dummyMeta.description = "meta";

            var transaction = await BigchainDbTransactionBuilder <ObjectDummy, ObjectDummy>
                              .init().addAssets(dummyAsset)
                              .addMetaData(dummyMeta)
                              .operation(Operations.CREATE)
                              .buildAndSign(account.PublicKey, account.Key).sendTransactionAsync();

            transaction.Data.ShouldNotBe(null);
            transaction.Data.Id.ShouldNotBe(null);
            transaction.Data.Operation.ShouldBe("CREATE");
        }
コード例 #16
0
        public void testExportKeys()
        {
            var algorithm             = SignatureAlgorithm.Ed25519;
            BlockchainAccount account = AccountApi.createAccount(true);

            account.PublicKey.ShouldNotBe(null);
            account.Key.ShouldNotBe(null);

            var data = Encoding.UTF8.GetBytes("Hello world!");
            // sign the data with the private key
            var signature = algorithm.Sign(account.Key, data);


            var key = account.Export();

            key.ShouldNotBe(null);
            var privateStr = Utils.ByteArrayToString(key);
            var pub        = account.ExportPublic();

            pub.ShouldNotBe(null);
            var publicStr = Utils.ByteArrayToString(pub);


            using (var newKey = Key.Import(algorithm, Utils.StringToByteArray(privateStr), KeyBlobFormat.PkixPrivateKey))
            {
                var publicKey = PublicKey.Import(algorithm, Utils.StringToByteArray(publicStr), KeyBlobFormat.PkixPublicKey);

                // sign the data with the private key
                var signature2 = algorithm.Sign(newKey, data);
                signature2.ShouldBe(signature);
                // verify the data with the signature and the public key
                var done = algorithm.Verify(publicKey, data, signature2);
                done.ShouldBe(true);
            }

            // now user
        }
コード例 #17
0
        public async Task testBuildAndTransferPartingTransaction()
        {
            var publicKeyObj  = BlockchainAccount.publicKeyFromHex(publicKey);
            var privateKeyObj = BlockchainAccount.privateKeyFromHex(privateKey);

            Vehicle car = new Vehicle();

            car.id          = "92832938203903" + DateTime.Now.ToLongDateString();
            car.consumption = "20.9";

            // Set up, sign, and send your transaction
            var transaction = BigchainDbTransactionBuilder <Vehicle, object>
                              .init()
                              .addAssets(car)
                              .operation(Operations.CREATE)
                              .buildAndSignOnly(publicKeyObj, privateKeyObj);

            //.buildAndSign(account.PublicKey, account.PrivateKey);

            //var info = transaction.toHashInput();
            var createTransaction = await TransactionsApi <Vehicle, object> .sendTransactionAsync(transaction);

            createTransaction.Data.ShouldNotBe(null);
            // the asset's ID is equal to the ID of the transaction that created it
            if (createTransaction != null)
            {
                string testId2   = createTransaction.Data.Id;
                var    testTran2 = await TransactionsApi <object, object> .getTransactionByIdAsync(testId2);

                testTran2.ShouldNotBe(null);
            }

            // Describe the output you are fulfilling on the previous transaction
            FulFill spendFrom = new FulFill();

            // the asset's ID is equal to the ID of the transaction that created it
            spendFrom.TransactionId = createTransaction.Data.Id;
            spendFrom.OutputIndex   = 0;

            Mileage m = new Mileage();

            m.Amount = "2000";

            // By default, the 'amount' of a created digital asset == "1". So we spend "1" in our TRANSFER.
            string  amount  = "1";
            Details details = null;
            // Use the previous transaction's asset and TRANSFER it
            var build2 = BigchainDbTransactionBuilder <Mileage, object> .
                         init().
                         addInput(details, spendFrom, publicKeyObj).
                         addOutput(amount, publicKeyObj).
                         addAssets(createTransaction.Data.Id).
                         operation(Operations.TRANSFER).
                         buildAndSignOnly(publicKeyObj, privateKeyObj);

            var transferTransaction = await TransactionsApi <Mileage, object> .sendTransactionAsync(build2);

            transferTransaction.Data.ShouldNotBe(null);

            if (transferTransaction != null)
            {
                string tran2     = transferTransaction.Data.Id;
                var    testTran2 = await TransactionsApi <object, object> .getTransactionByIdAsync(tran2);

                testTran2.ShouldNotBe(null);
            }
        }
コード例 #18
0
        public async Task testBuildAndTransferPartingTransaction()
        {
            var publicKeyObj  = BlockchainAccount.publicKeyFromHex(publicKey);
            var privateKeyObj = BlockchainAccount.privateKeyFromHex(privateKey);

            TestAsset assetData = new TestAsset();

            assetData.msg         = "Hello!";
            assetData.city        = "San Diego";
            assetData.temperature = "74";
            assetData.datetime    = DateTime.Now;

            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(publicKeyObj, privateKeyObj);

            //.buildAndSign(account.PublicKey, account.PrivateKey);

            //var info = transaction.toHashInput();
            var createTransaction = await TransactionsApi <TestAsset, TestMetadata> .sendTransactionAsync(transaction);

            createTransaction.Data.ShouldNotBe(null);
            // the asset's ID is equal to the ID of the transaction that created it
            if (createTransaction != null)
            {
                string testId2   = createTransaction.Data.Id;
                var    testTran2 = await TransactionsApi <object, object> .getTransactionByIdAsync(testId2);

                testTran2.ShouldNotBe(null);
            }

            // Describe the output you are fulfilling on the previous transaction
            FulFill spendFrom = new FulFill();

            // the asset's ID is equal to the ID of the transaction that created it
            spendFrom.TransactionId = createTransaction.Data.Id;
            spendFrom.OutputIndex   = 0;

            // Change the metadata if you want
            TestMetadata transferMetadata = new TestMetadata();

            transferMetadata.msg = "My second transaction";

            // 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(transferMetadata).
                         addInput(details, spendFrom, publicKeyObj).
                         addOutput(amount, account.Key.PublicKey).
                         addAssets(createTransaction.Data.Id).
                         operation(Operations.TRANSFER).
                         buildAndSignOnly(publicKeyObj, privateKeyObj);

            var transferTransaction = await TransactionsApi <Asset <string>, TestMetadata> .sendTransactionAsync(build2);

            transferTransaction.Data.ShouldNotBe(null);

            if (transferTransaction != null)
            {
                string tran2     = transferTransaction.Data.Id;
                var    testTran2 = await TransactionsApi <object, object> .getTransactionByIdAsync(tran2);

                testTran2.ShouldNotBe(null);
            }
        }
コード例 #19
0
        public async Task testTokensBuildAndTransferPartingTransaction()
        {
            var publicKeyObj  = BlockchainAccount.publicKeyFromHex(publicKey);
            var privateKeyObj = BlockchainAccount.privateKeyFromHex(privateKey);

            int       tokens    = 10000;
            TestToken assetData = new TestToken();

            assetData.token         = "My Token on" + DateTime.Now.Ticks.ToString();
            assetData.number_tokens = tokens;

            TestMetadata metaData = new TestMetadata();

            metaData.msg = "My first transaction";

            // Set up, sign, and send your transaction
            var transaction = BigchainDbTransactionBuilder <TestToken, TestMetadata>
                              .init()
                              .addAssets(assetData)
                              .addMetaData(metaData)
                              .addOutput(tokens.ToString(), publicKeyObj)
                              .operation(Operations.CREATE)
                              .buildAndSignOnly(publicKeyObj, privateKeyObj);

            //.buildAndSign(account.PublicKey, account.PrivateKey);

            //var info = transaction.toHashInput();
            var createTransaction = await TransactionsApi <TestToken, TestMetadata> .sendTransactionAsync(transaction);

            createTransaction.Data.ShouldNotBe(null);
            // the asset's ID is equal to the ID of the transaction that created it
            if (createTransaction.Data != null)
            {
                string testId2   = createTransaction.Data.Id;
                var    testTran2 = await TransactionsApi <object, object> .getTransactionByIdAsync(testId2);

                testTran2.ShouldNotBe(null);
            }

            // Describe the output you are fulfilling on the previous transaction
            FulFill spendFrom = new FulFill();

            // the asset's ID is equal to the ID of the transaction that created it
            spendFrom.TransactionId = createTransaction.Data.Id;
            spendFrom.OutputIndex   = 0;


            // we want to transfer 200 tokens.
            int amount = 200;
            //int amountFake = 20000;
            BlockchainAccount account      = new BlockchainAccount();
            Details           details      = null;
            TestToken         transferData = new TestToken();

            assetData.token         = "To my cat";
            assetData.number_tokens = amount;
            int amountLeft = tokens - amount;
            // Use the previous transaction's asset and TRANSFER it
            var build2 = BigchainDbTransactionBuilder <Asset <string>, TestToken> .
                         init().
                         addMetaData(transferData).
                         addInput(details, spendFrom, publicKeyObj).
                         addOutput(amountLeft.ToString(), publicKeyObj).
                         addOutput(amount.ToString(), account.PublicKey).
                         addAssets(createTransaction.Data.Id).
                         operation(Operations.TRANSFER).
                         buildAndSignOnly(publicKeyObj, privateKeyObj);

            var transferTransaction = await TransactionsApi <Asset <string>, TestToken> .sendTransactionAsync(build2);

            transferTransaction.Data.ShouldNotBe(null);

            if (transferTransaction != null)
            {
                string tran2     = transferTransaction.Data.Id;
                var    testTran2 = await TransactionsApi <object, object> .getTransactionByIdAsync(tran2);

                testTran2.ShouldNotBe(null);
            }
            var useThisKey = transferTransaction.Data.Outputs[0].PublicKeys[0];
            var compKey    = KeyPairUtils.encodePublicKeyInBase58(publicKeyObj);
            // get unspent outputs
            var list = await OutputsApi.getUnspentOutputsAsync(useThisKey);

            //list.Count.ShouldBe(1);
            // Describe the output you are fulfilling on spent outputs
            FulFill spendFrom2 = new FulFill();

            // the asset's ID is equal to the ID of the transaction that created it
            spendFrom2.TransactionId = transferTransaction.Data.Id; // list[0].TransactionId;
            spendFrom2.OutputIndex   = 0;

            BlockchainAccount dogAccount    = new BlockchainAccount();
            Details           details2      = null;
            TestToken         transferData2 = new TestToken();

            transferData2.token         = "To my dog";
            transferData2.number_tokens = amount;

            amountLeft = amountLeft - amount;
            // Use the previous transaction's asset and TRANSFER it
            var build3 = BigchainDbTransactionBuilder <Asset <string>, TestToken> .
                         init().
                         addMetaData(transferData2).
                         addInput(details2, spendFrom2, publicKeyObj).
                         addOutput(amountLeft.ToString(), publicKeyObj).
                         addOutput(amount.ToString(), dogAccount.PublicKey).
                         addAssets(createTransaction.Data.Id).
                         operation(Operations.TRANSFER).
                         buildAndSignOnly(publicKeyObj, privateKeyObj);

            var transferTransaction3 = await TransactionsApi <Asset <string>, TestToken> .sendTransactionAsync(build3);

            transferTransaction3.Data.ShouldNotBe(null);

            if (transferTransaction3 != null)
            {
                string tran2     = transferTransaction3.Data.Id;
                var    testTran2 = await TransactionsApi <object, object> .getTransactionByIdAsync(tran2);

                testTran2.ShouldNotBe(null);
            }

            //// Describe the output you are fulfilling on spent outputs
            //FulFill spendFrom2a = new FulFill();
            //// the asset's ID is equal to the ID of the transaction that created it
            //spendFrom2a.TransactionId = transferTransaction3.Data.Id; // list[0].TransactionId;
            //spendFrom2a.OutputIndex = 0;
            //Details details2a = null;
            //TestToken transferData2a = new TestToken();
            //transferData2a.token = "To my dog named Bingo";
            //transferData2a.number_tokens = amount;

            //// Use the previous transaction's asset and TRANSFER it
            //var build3a = BigchainDbTransactionBuilder<Asset<string>, TestToken>.
            //    init().
            //    addMetaData(transferData2a).
            //    addInput(details2a, spendFrom2a, dogAccount.PublicKey).
            //    addOutput(amountLeft.ToString(), publicKeyObj).
            //    addOutput(amount.ToString(), dogAccount.PublicKey).
            //    addAssets(createTransaction.Data.Id).
            //    operation(Operations.TRANSFER).
            //    buildAndSignOnly(dogAccount.PublicKey, dogAccount.Key);

            //var transferTransaction3a = await TransactionsApi<Asset<string>, TestToken>.sendTransactionAsync(build3a);
            //transferTransaction3.Data.ShouldNotBe(null);

            //if (transferTransaction3 != null)
            //{
            //    string tran2 = transferTransaction3.Data.Id;
            //    var testTran2 = await TransactionsApi<object, object>.getTransactionByIdAsync(tran2);
            //    testTran2.ShouldNotBe(null);

            //}

            // now dog wants to share with puppy
            BlockchainAccount puppyAccount  = new BlockchainAccount();
            Details           details3      = null;
            TestToken         transferData3 = new TestToken();

            transferData3.token = "To my puppy";
            int topuppy = 100;

            transferData3.number_tokens = topuppy;

            FulFill spendFrom3 = new FulFill();

            // the asset's ID is equal to the ID of the transaction that created it
            spendFrom3.TransactionId = transferTransaction3.Data.Id; // list[0].TransactionId;
            spendFrom3.OutputIndex   = 1;

            amountLeft = amount - topuppy;
            // Use the previous transaction's asset and TRANSFER it
            var build4 = BigchainDbTransactionBuilder <Asset <string>, TestToken> .
                         init().
                         addMetaData(transferData3).
                         addInput(details3, spendFrom3, dogAccount.PublicKey).
                         addOutput(amountLeft.ToString(), dogAccount.PublicKey).
                         addOutput(topuppy.ToString(), puppyAccount.PublicKey).
                         addAssets(createTransaction.Data.Id).
                         operation(Operations.TRANSFER).
                         buildAndSignOnly(dogAccount.PublicKey, dogAccount.Key);



            var transferTransaction4 = await TransactionsApi <Asset <string>, TestToken> .sendTransactionAsync(build4);

            if (transferTransaction4.Messsage != null)
            {
                var msg = transferTransaction4.Messsage.Message;
            }

            transferTransaction4.Data.ShouldNotBe(null);

            if (transferTransaction4 != null)
            {
                string tran2     = transferTransaction4.Data.Id;
                var    testTran2 = await TransactionsApi <object, object> .getTransactionByIdAsync(tran2);

                testTran2.ShouldNotBe(null);
            }
        }
        public async Task testTokensBuildAndCombineTransferPartingTransaction()
        {
            var publicKeyObj  = BlockchainAccount.publicKeyFromHex(publicKey);
            var privateKeyObj = BlockchainAccount.privateKeyFromHex(privateKey);

            // initial tokens amount
            int       tokens    = 10000;
            TestToken assetData = new TestToken();

            assetData.token         = "My Token on " + DateTime.Now.Ticks.ToString();
            assetData.number_tokens = tokens;

            TestMetadata metaData = new TestMetadata();

            metaData.msg = "My first transaction";

            // Set up, sign, and send your transaction
            var transaction = BigchainDbTransactionBuilder <TestToken, TestMetadata>
                              .init()
                              .addAssets(assetData)
                              .addMetaData(metaData)
                              .addOutput(tokens.ToString(), publicKeyObj)
                              .operation(Operations.CREATE)
                              .buildAndSignOnly(publicKeyObj, privateKeyObj);

            //.buildAndSign(account.PublicKey, account.PrivateKey);

            //var info = transaction.toHashInput();
            var createTransaction = await TransactionsApi <TestToken, TestMetadata> .sendTransactionAsync(transaction);

            Thread.Sleep(5000);
            createTransaction.Data.ShouldNotBe(null);
            // the asset's ID is equal to the ID of the transaction that created it
            if (createTransaction.Data != null)
            {
                string testId2   = createTransaction.Data.Id;
                var    testTran2 = await TransactionsApi <object, object> .getTransactionByIdAsync(testId2);

                testTran2.ShouldNotBe(null);
            }

            // Describe the output you are fulfilling on the previous transaction
            FulFill spendFrom = new FulFill();

            // the asset's ID is equal to the ID of the transaction that created it
            spendFrom.TransactionId = createTransaction.Data.Id;
            spendFrom.OutputIndex   = 0;


            // we want to transfer 200 tokens to my cat
            int amount = 200;
            BlockchainAccount catAccount   = new BlockchainAccount();
            Details           details      = null;
            TestToken         transferData = new TestToken();

            assetData.token         = "To my cat";
            assetData.number_tokens = amount;
            int amountLeft = tokens - amount;

            // Use the previous transaction's asset and TRANSFER it
            var build2 = BigchainDbTransactionBuilder <Asset <string>, TestToken> .
                         init().
                         addMetaData(transferData).
                         addInput(details, spendFrom, publicKeyObj).
                         addOutput(amountLeft.ToString(), publicKeyObj).
                         addOutput(amount.ToString(), catAccount.PublicKey).
                         addAssets(createTransaction.Data.Id).
                         operation(Operations.TRANSFER).
                         buildAndSignOnly(publicKeyObj, privateKeyObj);

            var transferTransaction = await TransactionsApi <Asset <string>, TestToken> .sendTransactionAsync(build2);

            Thread.Sleep(5000);
            transferTransaction.Data.ShouldNotBe(null);

            if (transferTransaction != null)
            {
                string tran2     = transferTransaction.Data.Id;
                var    testTran2 = await TransactionsApi <object, object> .getTransactionByIdAsync(tran2);

                testTran2.ShouldNotBe(null);
            }

            var useThisKey = transferTransaction.Data.Outputs[0].PublicKeys[0];

            var compKey = KeyPairUtils.encodePublicKeyInBase58(publicKeyObj);
            // get unspent outputs
            var list = await OutputsApi.getUnspentOutputsAsync(useThisKey);

            //list.Count.ShouldBe(1);

            // Describe the output you are fulfilling on spent outputs
            FulFill spendFrom2 = new FulFill();

            // the asset's ID is equal to the ID of the transaction that created it
            spendFrom2.TransactionId = transferTransaction.Data.Id; // list[0].TransactionId;
            spendFrom2.OutputIndex   = 0;

            // now we want to send 100 tokens to my dog
            BlockchainAccount dogAccount    = new BlockchainAccount();
            Details           details2      = null;
            TestToken         transferData2 = new TestToken();

            transferData2.token         = "To my dog";
            transferData2.number_tokens = amount;

            amountLeft = amountLeft - amount;
            // Use the previous transaction's asset and TRANSFER it
            var build3 = BigchainDbTransactionBuilder <Asset <string>, TestToken> .
                         init().
                         addMetaData(transferData2).
                         addInput(details2, spendFrom2, publicKeyObj).
                         addOutput(amountLeft.ToString(), publicKeyObj).
                         addOutput(amount.ToString(), dogAccount.PublicKey).
                         addAssets(createTransaction.Data.Id).
                         operation(Operations.TRANSFER).
                         buildAndSignOnly(publicKeyObj, privateKeyObj);

            var transferTransaction3 = await TransactionsApi <Asset <string>, TestToken> .sendTransactionAsync(build3);

            Thread.Sleep(5000);
            transferTransaction3.Data.ShouldNotBe(null);

            if (transferTransaction3 != null)
            {
                string tran2     = transferTransaction3.Data.Id;
                var    testTran2 = await TransactionsApi <object, object> .getTransactionByIdAsync(tran2);

                testTran2.ShouldNotBe(null);
            }

            // now dog wants to share with puppy 100 tokens
            BlockchainAccount puppyAccount  = new BlockchainAccount();
            Details           details3      = null;
            TestToken         transferData3 = new TestToken();

            transferData3.token = "To my puppy";
            int topuppy = 100;

            transferData3.number_tokens = topuppy;

            FulFill spendFrom3 = new FulFill();

            // the asset's ID is equal to the ID of the transaction that created it
            spendFrom3.TransactionId = transferTransaction3.Data.Id; // list[0].TransactionId;
            spendFrom3.OutputIndex   = 1;

            var dogAmountLeft = amount - topuppy;
            // Use the previous transaction's asset and TRANSFER it
            var build4 = BigchainDbTransactionBuilder <Asset <string>, TestToken> .
                         init().
                         addMetaData(transferData3).
                         addInput(details3, spendFrom3, dogAccount.PublicKey).
                         addOutput(dogAmountLeft.ToString(), dogAccount.PublicKey).
                         addOutput(topuppy.ToString(), puppyAccount.PublicKey).
                         addAssets(createTransaction.Data.Id).
                         operation(Operations.TRANSFER).
                         buildAndSignOnly(dogAccount.PublicKey, dogAccount.Key);



            var transferTransaction4 = await TransactionsApi <Asset <string>, TestToken> .sendTransactionAsync(build4);

            Thread.Sleep(5000);
            if (transferTransaction4.Messsage != null)
            {
                var msg = transferTransaction4.Messsage.Message;
            }

            transferTransaction4.Data.ShouldNotBe(null);

            if (transferTransaction4 != null)
            {
                string tran2     = transferTransaction4.Data.Id;
                var    testTran2 = await TransactionsApi <object, object> .getTransactionByIdAsync(tran2);

                testTran2.ShouldNotBe(null);
            }

            // now we feel bad for puppy and want to give puppy another 100

            // Describe the output you are fulfilling on the previous transaction
            FulFill spendFrom5 = new FulFill();

            // the asset's ID is equal to the ID of the transaction that created it
            // last transfer transaction id to dog
            spendFrom5.TransactionId = transferTransaction3.Data.Id;
            spendFrom5.OutputIndex   = 0;


            // we want to transfer 100 tokens.
            int       amount5       = 100;
            Details   details5      = null;
            TestToken transferData5 = new TestToken();

            transferData5.token         = "To my puppy extra 100";
            transferData5.number_tokens = amount5;
            amountLeft = amountLeft - amount5;
            // Use the previous transaction's asset and TRANSFER it
            var build5 = BigchainDbTransactionBuilder <Asset <string>, TestToken> .
                         init().
                         addMetaData(transferData5).
                         addInput(details5, spendFrom5, publicKeyObj).
                         addOutput(amountLeft.ToString(), publicKeyObj).
                         addOutput(amount5.ToString(), puppyAccount.PublicKey).
                         addAssets(createTransaction.Data.Id).
                         operation(Operations.TRANSFER).
                         buildAndSignOnly(publicKeyObj, privateKeyObj);

            var transferTransaction5 = await TransactionsApi <Asset <string>, TestToken> .sendTransactionAsync(build5);

            Thread.Sleep(5000);
            transferTransaction5.Data.ShouldNotBe(null);

            if (transferTransaction5 != null)
            {
                string tran5     = transferTransaction5.Data.Id;
                var    testTran5 = await TransactionsApi <object, object> .getTransactionByIdAsync(tran5);

                testTran5.ShouldNotBe(null);
            }

            // at this point, puppy has 2 transactions, with 100 tokens each. we want to combine those into
            Details   details6      = null;
            TestToken transferData6 = new TestToken();

            transferData5.token         = "Puppy combined account";
            transferData5.number_tokens = amount5 + topuppy;
            // we need to spend 2 previous transactions and create new one
            FulFill spendFromA = new FulFill();

            // the asset's ID is equal to the ID of the transaction that created it
            spendFromA.TransactionId = transferTransaction4.Data.Id; // list[0].TransactionId;
            spendFromA.OutputIndex   = 1;

            FulFill spendFromB = new FulFill();

            // the asset's ID is equal to the ID of the transaction that created it
            spendFromB.TransactionId = transferTransaction5.Data.Id; // list[0].TransactionId;
            spendFromB.OutputIndex   = 1;
            var combinedAmount = amount5 + topuppy;
            var build6         = BigchainDbTransactionBuilder <Asset <string>, TestToken> .
                                 init().
                                 addMetaData(transferData5).
                                 addInput(details6, spendFromA, puppyAccount.PublicKey).
                                 addInput(details6, spendFromB, puppyAccount.PublicKey).
                                 addOutput(combinedAmount.ToString(), puppyAccount.PublicKey).
                                 addAssets(createTransaction.Data.Id).
                                 operation(Operations.TRANSFER).
                                 buildAndSignOnly(puppyAccount.PublicKey, puppyAccount.Key);

            var transferTransaction6 = await TransactionsApi <Asset <string>, TestToken> .sendTransactionAsync(build6);

            Thread.Sleep(5000);
            transferTransaction6.Data.ShouldNotBe(null);
            transferTransaction6.Data.Outputs[0].Amount.ShouldBe("200");

            if (transferTransaction6 != null)
            {
                string tran6     = transferTransaction6.Data.Id;
                var    testTran6 = await TransactionsApi <object, object> .getTransactionByIdAsync(tran6);

                testTran6.ShouldNotBe(null);
            }
        }
コード例 #21
0
        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);
        }
コード例 #22
0
        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!
        }