Ejemplo n.º 1
0
        public async Task <IActionResult> GenerateUnconfirmedScript([FromBody] MultisigModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState.Values.SelectMany(v => v.Errors).FirstOrDefault().ErrorMessage));
            }

            var trx = await _transactionRepository.GetByHash(model.Hash);

            if (trx == null)
            {
                return(BadRequest($"Unable to load transaction '{model.Hash}'."));
            }

            var merchant = await _merchantRepository.GetByUser(trx.UserId);

            if (string.IsNullOrWhiteSpace(merchant.XPubKey))
            {
                return(BadRequest("You can not continue to create a transaction because the seller's xPub key is incorrect."));
            }

            try
            {
                var founds = MAD.Deposit(trx.Amount);
                Tuple <string, string> script = null;

                script = _bitcoinService.CreateTransactionElectrum(
                    model.XPubKey, merchant.XPubKey, founds.Item1, founds.Item2);

                if (script != null)
                {
                    trx.XPubKey = model.XPubKey;
                    trx.UnconfirmedDepositTx = script.Item1;
                    trx.RedeemScript         = script.Item2;
                    trx.Status = StatusTransaction.UnconfirmedDeposit;
                    trx.Email  = model.Email;

                    await _transactionRepository.Update(trx);
                }

                return(Json(new { unconfirmedScript = script?.Item1 }));
            }
            catch (Exception e)
            {
                _logger.LogError(e, e.Message);

                return(this.BadRequest("Something bad happened while transaction was created."));
            }
        }
        public async Task <ActionResult> Create([Bind(Include = "MAD_ID,MAD_LIEU_ENLEV,MAD_ADRES_ENLEV,MAD_DATE,MAD_OBS")] MAD mAD)
        {
            try {
                if (ModelState.IsValid)
                {
                    db.MADs.Add(mAD);
                    await db.SaveChangesAsync();

                    return(RedirectToAction("Index"));
                }
            }
            catch (RetryLimitExceededException /* dex */)
            {
                ModelState.AddModelError(" ", "Unable to save changes. Try again, and if the problem persists see your system administrator");
            }
            return(View(mAD));
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> DeployContract([FromBody] ContractModel model)
        {
            var trx = await _transactionRepository.GetByHash(model.Hash);

            var userMerchant = await _merchantRepository.GetByUser(trx.UserId);

            var user = await _userManager.FindByIdAsync(trx.UserId);

            if (trx == null)
            {
                throw new ApplicationException($"Unable to load transaction '{model.Hash}'.");
            }

            var contract = new Tuple <string, string>(null, null);

            if (await CompareBalance(trx))
            {
                var foundsWithdraw = MAD.Withdraw(trx.Amount);
                var foundsDeposit  = MAD.Deposit(trx.Amount);

                var balance = await this._ethereumService.GetBalance(trx.Address);

                contract = await _ethereumService.DeployContract(trx.EtherId, userMerchant.EthereumAddress, trx.XPubKey, foundsWithdraw.Item1, foundsWithdraw.Item2, foundsDeposit.Item1,
                                                                 balance, trx.Address, trx.PassPhrase);

                trx.ContractAddress = contract.Item1;
                trx.Status          = StatusTransaction.Deployed;

                var message = "Buyer has deploy contract on blockchain.";

                await _transactionRepository.Update(trx);

                await _logRepository.Add(trx.Id, message);

                await _emailSender.SendEmailTransactionAsync(user.Email, message);
            }

            return(Json(new { Abi = contract.Item2, ContractAddress = contract.Item1 }));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Init electrum transaction.
        /// </summary>
        /// <param name="trx">Transaction data model.</param>
        /// <param name="model">Transaction view model.</param>
        private async Task InitializationElectrum(Transaction trx, TransactionViewModel model)
        {
            if (trx.Status == StatusTransaction.FullDeposit && _bitcoinService.CheckInTransaction(trx.TrxDepositId, trx.RedeemScript))
            {
                var userMerchant = await _merchantRepository.GetByUser(trx.UserId);

                var founds = MAD.Withdraw(trx.Amount);

                var script = _bitcoinService.CreateOutTransactionElectrum(
                    trx.RedeemScript, trx.XPubKey, userMerchant.XPubKey, founds.Item1, founds.Item2);

                if (script != null)
                {
                    trx.UnconfirmedWithdrawTx = script;
                    trx.Status = StatusTransaction.UnconfirmedWithdraw;

                    model.UnconfirmedWithdrawTx = script;

                    await _transactionRepository.Update(trx);
                }
            }
        }
 /// <summary>
 /// methode permettant d'ajouter une MAD à la BDD
 /// </summary>
 /// <param name="rezMad"></param>
 public void AddMad(MAD rezMad)
 {
     madDao.AddMad(rezMad);
 }
Ejemplo n.º 6
0
 public bool crediter(MAD montant)
 {
     this.solde = this.solde.ajouter(montant);
     return(true);
 }
Ejemplo n.º 7
0
 /// <summary>
 /// methode permettant d'ajouter une MAD à la BDD
 /// </summary>
 /// <param name="rezMad"></param>
 public void AddMad(MAD rezMad)
 {
     db.MADs.Add(rezMad);
     db.SaveChanges();
 }