Exemple #1
0
        public async Task testGetUnspentOutputs()
        {
            var outputs = await OutputsApi.getUnspentOutputsAsync(publicKey);

            outputs.Count.ShouldBe(1);
            outputs[0].OutputIndex.ShouldBe(1);
            outputs[0].TransactionId.ShouldBe("2d431073e1477f3073a4693ac7ff9be5634751de1b8abaa1f4e19548ef0b4b0e");
        }
 public AnalyticsApi(IBitmovinApiClientFactory apiClientFactory)
 {
     Exports     = new ExportsApi(apiClientFactory);
     Impressions = new ImpressionsApi(apiClientFactory);
     Insights    = new InsightsApi(apiClientFactory);
     Metrics     = new MetricsApi(apiClientFactory);
     Ads         = new AdsApi(apiClientFactory);
     Queries     = new QueriesApi(apiClientFactory);
     Licenses    = new LicensesApi(apiClientFactory);
     Outputs     = new OutputsApi(apiClientFactory);
 }
        public List <AssetsMetadatas <A, M> > GetAllTypeRecordsFromDPublicPPublicKey <A, M>
            (AssetType type, string doctorSignPublicKey, string patientSignPublicKey)
        {
            // get unspent outputs of the patient, this means get all outputs that he owns
            var           rawPublicKey    = EncryptionService.getRawBase58PublicKey(patientSignPublicKey);
            var           unspentOutsList = OutputsApi.getUnspentOutputsAsync(rawPublicKey).GetAwaiter().GetResult();
            List <string> transactionIDs  = new List <string>();

            foreach (var unspentOutput in unspentOutsList)
            {
                transactionIDs.Add(unspentOutput.TransactionId);
            }
            var assets     = bigchainDatabase.GetCollection <Assets <A> >("assets").AsQueryable();
            var TypeAssets = assets.Where(x => x.data.Type == type);
            // reduce to get only metadata where both public keys are present and is in the unspent list
            var metadata        = bigchainDatabase.GetCollection <Metadatas <object> >("metadata").AsQueryable();
            var metadataReduced = metadata.Where(x => transactionIDs.Contains(x.id));
            List <Metadatas <object> > metadataList = new List <Metadatas <object> >();

            foreach (var a in metadataReduced)
            {
                if (a.metadata.metadata.AccessList != null &&
                    a.metadata.metadata.AccessList.Keys.ToList().Contains(doctorSignPublicKey) &&
                    a.metadata.metadata.AccessList.Keys.ToList().Contains(patientSignPublicKey))
                {
                    metadataList.Add(a);
                }
            }

            var transaction         = (bigchainDatabase.GetCollection <Transactions <string> >("transactions").AsQueryable());
            var transactionsReduced = transaction.Where(x => transactionIDs.Contains(x.id));

            transactionsReduced = transactionsReduced.Select(r => new Transactions <string> {
                id = r.id, asset = r.asset, _id = r._id
            });
            var r = from t1 in metadataList
                    join t2 in transactionsReduced on t1.id equals t2.id
                    join t3 in TypeAssets on 1 equals 1
                    where (t2.id == t3.id || (t2.asset != null && t2.asset.id == t3.id))
                    select new AssetsMetadatas <A, M>()
            {
                id       = t3.id,
                data     = t3.data,
                metadata = new MetaDataSaved <M>
                {
                    AccessList = new Dictionary <string, string>(t1.metadata.metadata.AccessList),
                    data       = JsonConvert.DeserializeObject <M>(JsonConvert.SerializeObject(t1.metadata.metadata.data))
                },
                transID = t2.id
            };

            return(r.ToList());
        }
 public EncodingApi(IBitmovinApiClientFactory apiClientFactory)
 {
     Inputs           = new InputsApi(apiClientFactory);
     Outputs          = new OutputsApi(apiClientFactory);
     Configurations   = new ConfigurationsApi(apiClientFactory);
     Filters          = new FiltersApi(apiClientFactory);
     Encodings        = new EncodingsApi(apiClientFactory);
     Manifests        = new ManifestsApi(apiClientFactory);
     Infrastructure   = new InfrastructureApi(apiClientFactory);
     Statistics       = new StatisticsApi(apiClientFactory);
     ErrorDefinitions = new ErrorDefinitionsApi(apiClientFactory);
 }
        public M GetMetadataFromAssetPublicKey <M>(string assetID, string signPublicKey)
        {
            var rawPublicKey      = EncryptionService.getRawBase58PublicKey(signPublicKey);
            var unspentOutsList   = OutputsApi.getUnspentOutputsAsync(rawPublicKey).GetAwaiter().GetResult();
            var assetTransactions = TransactionsApi <object, object> .getTransactionsByAssetIdAsync(assetID).GetAwaiter().GetResult();

            var neededTransaction = from a in unspentOutsList.AsQueryable()
                                    join b in assetTransactions.AsQueryable()
                                    on a.TransactionId equals b.Id
                                    select b.MetaData.Metadata;
            MetaDataSaved <M> result = JsonConvert.DeserializeObject <MetaDataSaved <M> >(neededTransaction.FirstOrDefault().ToString());

            return(result.data);
        }
        public MetaData <MetaDataSaved <M> > GetMetadataIDFromAssetPublicKey <M>(string assetID, string signPublicKey)
        {
            var rawPublicKey      = EncryptionService.getRawBase58PublicKey(signPublicKey);
            var unspentOutsList   = OutputsApi.getUnspentOutputsAsync(rawPublicKey).GetAwaiter().GetResult();
            var assetTransactions = TransactionsApi <object, MetaDataSaved <M> > .getTransactionsByAssetIdAsync(assetID).GetAwaiter().GetResult();

            var neededTransaction = from a in unspentOutsList.AsQueryable()
                                    join b in assetTransactions.AsQueryable()
                                    on a.TransactionId equals b.Id
                                    select new MetaData <MetaDataSaved <M> >
            {
                Id       = b.Id,
                Metadata = b.MetaData.Metadata
            };
            var result = neededTransaction.FirstOrDefault();

            return(result);
        }
 public OutputsApiTests()
 {
     instance = new OutputsApi();
 }
Exemple #8
0
        public async Task testGetOutputs()
        {
            var outputs = await OutputsApi.getOutputsAsync(publicKey);

            outputs.Count.ShouldBe(2);
        }
        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);
            }
        }
Exemple #10
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);
            }
        }