public async Task <TxDetails> LoadTxDetails(string txid, NeblioAccount account)
    {
        var tinfo = await NeblioTransactionHelpers.GetTransactionInfo(txid);

        string sender = await NeblioTransactionHelpers.GetTransactionSender(txid, tinfo);

        bool fromAnotherAccount = true;
        bool fromSubAccount     = true;

        if (sender == account.Address)
        {
            sender             = "Main Account";
            fromAnotherAccount = false;
            fromSubAccount     = false;
        }
        else if (account.SubAccounts.TryGetValue(sender, out var sacc))
        {
            if (!string.IsNullOrEmpty(sacc.Name))
            {
                sender = sacc.Name;
            }
            else
            {
                sender = sacc.BookmarkFromAccount.Name;
            }
            fromAnotherAccount = false;
            fromSubAccount     = true;
        }

        string rec = await NeblioTransactionHelpers.GetTransactionReceiver(txid, tinfo);

        string receiver = string.Empty;
        var    recbkm   = account.IsInTheBookmarks(rec);

        if (rec == account.Address)
        {
            receiver = "Main Account";
        }
        else if (recbkm.Item1)
        {
            receiver = recbkm.Item2.Name;
        }

        if (string.IsNullOrEmpty(receiver))
        {
            receiver = NeblioTransactionHelpers.ShortenAddress(rec);
        }

        var time = TimeHelpers.UnixTimestampToDateTime((double)tinfo.Blocktime);

        return(new TxDetails()
        {
            FromAnotherAccount = fromAnotherAccount,
            FromSubAccount = fromSubAccount,
            Info = tinfo,
            Receiver = receiver,
            Sender = sender,
            Time = time,
        });
    }
        public async Task GetReceiver()
        {
            var rec = await NeblioTransactionHelpers.GetTransactionReceiver(Utxo, TxDetails);

            if (!string.IsNullOrEmpty(rec))
            {
                Partner = rec;
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// this function will decrypt the NFT if it is possile
        /// It needs the owner Private Key to create shared password which the combination of the sender public key.
        /// </summary>
        /// <param name="secret">Owner Private Key</param>
        /// <param name="decryptEvenOnSameAddress">Set true when you have preset the partner address manually - for example encryption on same address. </param>
        /// <returns>true if success</returns>
        public async Task <bool> Decrypt(NBitcoin.BitcoinSecret secret, bool decryptEvenOnSameAddress = false)
        {
            if (runningDecryption)
            {
                return(false);
            }

            if (Decrypted)
            {
                return(false);
            }

            if (string.IsNullOrEmpty(Partner))
            {
                return(false);//throw new Exception("Cannot decrypt without loaded Partner address.");
            }
            var add = secret.PubKey.GetAddress(NBitcoin.ScriptPubKeyType.Legacy, NeblioTransactionHelpers.Network);

            if (Partner == add.ToString() && !decryptEvenOnSameAddress)
            {
                IsReceivedMessage = false;
                Partner           = await NeblioTransactionHelpers.GetTransactionReceiver(Utxo);

                if (string.IsNullOrEmpty(Partner))
                {
                    return(false);//throw new Exception("Cannot decrypt without loaded Partner address.");
                }
            }
            else
            {
                IsReceivedMessage = true;
            }

            runningDecryption = true;
            if (await LoadSharedKeyForEncrypt(secret))
            {
                Description = await DecryptProperty(Description, secret, "", Partner, sharedkey : SharedKey);

                Name = await DecryptProperty(Name, secret, "", Partner, sharedkey : SharedKey);

                Text = await DecryptProperty(Text, secret, "", Partner, sharedkey : SharedKey);

                ImageLink = await DecryptProperty(ImageLink, secret, "", Partner, sharedkey : SharedKey);

                Link = await DecryptProperty(Link, secret, "", Partner, sharedkey : SharedKey);
            }
            else
            {
                Console.WriteLine("Cannot decrypt NFT. Shared key not found.");
            }
            Decrypted         = true;
            runningDecryption = false;

            return(true);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Parse specific parameters
        /// </summary>
        /// <param name="metadata"></param>
        public override void ParseSpecific(IDictionary <string, string> metadata)
        {
            if (metadata.TryGetValue("NFTUtxoTxId", out var nfttxid))
            {
                NFTUtxoTxId   = nfttxid;
                NFTOriginTxId = nfttxid;
            }
            if (metadata.TryGetValue("Sender", out var sender))
            {
                Sender = sender;
            }
            if (metadata.TryGetValue("NFTUtxoIndex", out var index))
            {
                if (!string.IsNullOrEmpty(index))
                {
                    NFTUtxoIndex = Convert.ToInt32(index);
                }
            }
            if (metadata.TryGetValue("SoldPrice", out var soldprice))
            {
                if (!string.IsNullOrEmpty(soldprice))
                {
                    var prc = soldprice.Replace(',', '.');
                    SoldPrice = Convert.ToDouble(prc, CultureInfo.InvariantCulture);
                }
            }

            if (metadata.TryGetValue("ReceiptFromPaymentUtxo", out var rfp))
            {
                ReceiptFromPaymentUtxo = rfp;
            }
            if (metadata.TryGetValue("OriginalPaymentTxId", out var optxid))
            {
                OriginalPaymentTxId = optxid;
            }

            Buyer = NeblioTransactionHelpers.GetTransactionReceiver(Utxo, TxDetails).GetAwaiter().GetResult();
        }