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; } }
/// <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); }
/// <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(); }