protected APIResultCodes ValidateReceiveTransAmount(ReceiveTransferBlock block, TransactionInfo receiveTransaction)
        {
            //find the corresponding send block and validate the added transaction amount
            var sourceBlock = _accountCollection.FindBlockByHash(block.SourceHash);

            if (sourceBlock == null)
            {
                return(APIResultCodes.SourceSendBlockNotFound);
            }


            // find the actual amount of transaction

            TransactionBlock prevToSendBlock = _accountCollection.FindBlockByHash(sourceBlock.PreviousHash);

            if (prevToSendBlock == null)
            {
                return(APIResultCodes.CouldNotTraceSendBlockChain);
            }


            TransactionInfo sendTransaction;

            if (block.BlockType == BlockTypes.ReceiveTransfer || block.BlockType == BlockTypes.OpenAccountWithReceiveTransfer)
            {
                if ((sourceBlock as SendTransferBlock).DestinationAccountId != block.AccountID)
                {
                    return(APIResultCodes.InvalidDestinationAccountId);
                }

                sendTransaction = sourceBlock.GetTransaction(prevToSendBlock);

                if (!sourceBlock.ValidateTransaction(prevToSendBlock))
                {
                    return(APIResultCodes.SendTransactionValidationFailed);
                }
                //originallySentAmount = sendTransaction.Amount;
                //originallySentAmount =
                //    prevToSendBlock.Balances[LyraGlobal.LYRA_TICKER_CODE] - sourceBlock.Balances[LyraGlobal.LYRA_TICKER_CODE] - (sourceBlock as IFeebleBlock).Fee;
            }
            else
            if (block.BlockType == BlockTypes.ReceiveFee || block.BlockType == BlockTypes.OpenAccountWithReceiveFee)
            {
                sendTransaction = new TransactionInfo()
                {
                    TokenCode = LyraGlobal.LYRA_TICKER_CODE, Amount = sourceBlock.Fee
                };
            }
            else
            {
                return(APIResultCodes.InvalidBlockType);
            }

            if (sendTransaction.Amount != receiveTransaction.Amount)
            {
                return(APIResultCodes.TransactionAmountDoesNotMatch);
            }

            if (sendTransaction.TokenCode != receiveTransaction.TokenCode)
            {
                return(APIResultCodes.TransactionTokenDoesNotMatch);
            }

            return(APIResultCodes.Success);
        }
Ejemplo n.º 2
0
 public async Task <AuthorizationAPIResult> ReceiveTransfer(ReceiveTransferBlock block)
 {
     return(await PostBlock("ReceiveTransfer", block));
 }
Ejemplo n.º 3
0
 public async Task <AuthorizationAPIResult> ReceiveTransfer(ReceiveTransferBlock receiveBlock)
 {
     return(await Pre_PrepareAsync(receiveBlock).ConfigureAwait(false));
 }