public static Class ForResult(TransactionEngineResult result)
            {
                if (result._ord >= telLOCAL_ERROR._starts && result._ord < temMALFORMED._starts)
                {
                    return(telLOCAL_ERROR);
                }

                if (result._ord >= temMALFORMED._starts && result._ord < tefFAILURE._starts)
                {
                    return(telLOCAL_ERROR);
                }

                if (result._ord >= tefFAILURE._starts && result._ord < terRETRY._starts)
                {
                    return(telLOCAL_ERROR);
                }

                if (result._ord >= terRETRY._starts && result._ord < tesSUCCESS._starts)
                {
                    return(telLOCAL_ERROR);
                }

                if (result._ord >= tesSUCCESS._starts && result._ord < tecCLAIMED._starts)
                {
                    return(tesSUCCESS);
                }

                return(tecCLAIMED);
            }
Example #2
0
        public TransactionResult(JObject json, Source resultMessageSource)
        {
            Message = json;

            try
            {
                if (resultMessageSource == Source.transaction_subscription_notification)
                {
                    EngineResult = TransactionEngineResult.FromString(json.GetValue("engine_result").ToObject<string>());
                    Validated = json.GetValue("validated").ToObject<bool>();
                    LedgerHash = Hash256.Translate.FromString(json.GetValue("ledger_hash").ToObject<string>());
                    LedgerIndex = new UInt32(json.GetValue("ledger_index").ToObject<long>());

                    JToken transaction;
                    if (json.TryGetValue("transaction", out transaction))
                    {
                        Txn = (Transaction) StObject.FromJObject(transaction.ToObject<JObject>());
                        Hash = Txn[Hash256.hash];
                    }

                    JToken meta;
                    if (json.TryGetValue("meta", out meta))
                    {
                        Meta = (TransactionMeta)StObject.FromJObject(meta.ToObject<JObject>());
                    }
                }
                else if (resultMessageSource == Source.request_tx_result)
                {
                    JToken validated;
                    Validated = json.TryGetValue("validated", out validated) && validated.ToObject<bool>();

                    JToken meta;
                    if (Validated && !json.TryGetValue("meta", out meta))
                    {
                        throw new InvalidOperationException("It's validated, why doesn't it have meta??");
                    }

                    if (Validated)
                    {
                        Meta = (TransactionMeta)StObject.FromJObject(json.GetValue("meta").ToObject<JObject>());
                        EngineResult = TransactionEngineResult.FromNumber(Meta[UInt8.TransactionResult]);
                        Txn = (Transaction)StObject.FromJObject(json);
                        Hash = Txn[Hash256.hash];
                        LedgerHash = null; // XXXXXX
                    }
                }
                else if (resultMessageSource == Source.request_account_tx)
                {
                    JToken validated;
                    Validated = json.TryGetValue("validated", out validated) && validated.ToObject<bool>();

                    JToken meta;
                    if (Validated && !json.TryGetValue("meta", out meta))
                    {
                        throw new InvalidOperationException("It's validated, why doesn't it have meta??");
                    }

                    if (Validated)
                    {
                        var tx = json.GetValue("tx").ToObject<JObject>();
                        Meta = (TransactionMeta)StObject.FromJObject(json.GetValue("meta").ToObject<JObject>());
                        EngineResult = TransactionEngineResult.FromNumber(Meta[UInt8.TransactionResult]);
                        Txn = (Transaction)StObject.FromJObject(tx);
                        Hash = Txn[Hash256.hash];
                        LedgerIndex = new UInt32(tx.GetValue("ledger_index").ToObject<long>());
                        LedgerHash = null;
                    }
                }
                else if (resultMessageSource == Source.request_account_tx_binary)
                {
                    JToken validated;
                    Validated = json.TryGetValue("validated", out validated) && validated.ToObject<bool>();

                    JToken meta;
                    if (Validated && !json.TryGetValue("meta", out meta))
                    {
                        throw new InvalidOperationException("It's validated, why doesn't it have meta??");
                    }

                    if (Validated)
                    {
                        /*
                        {
                            "ledger_index": 3378767,
                            "meta": "201 ...",
                            "tx_blob": "120 ...",
                            "validated": true
                        },
                        */

                        var tx = json.GetValue("tx_blob").ToObject<string>();
                        byte[] decodedTx = B16.Decode(tx);
                        Meta = (TransactionMeta)StObject.Translate.FromHex(json.GetValue("meta").ToObject<string>());
                        Txn = (Transaction)StObject.Translate.FromBytes(decodedTx);
                        Hash = Hash256.TransactionId(decodedTx);
                        Txn.Add(Field.hash, Hash);

                        EngineResult = Meta.TransactionResult();
                        LedgerIndex = new UInt32(json.GetValue("ledger_index").ToObject<long>());
                        LedgerHash = null;
                    }
                }
            }
            catch (JsonException e)
            {
                throw new ApplicationException("Json deserialization failed.", e);
            }
        }
            public static Class ForResult(TransactionEngineResult result)
            {
                if (result._ord >= telLOCAL_ERROR._starts && result._ord < temMALFORMED._starts)
                {
                    return telLOCAL_ERROR;
                }

                if (result._ord >= temMALFORMED._starts && result._ord < tefFAILURE._starts)
                {
                    return telLOCAL_ERROR;
                }

                if (result._ord >= tefFAILURE._starts && result._ord < terRETRY._starts)
                {
                    return telLOCAL_ERROR;
                }

                if (result._ord >= terRETRY._starts && result._ord < tesSUCCESS._starts)
                {
                    return telLOCAL_ERROR;
                }

                if (result._ord >= tesSUCCESS._starts && result._ord < tecCLAIMED._starts)
                {
                    return tesSUCCESS;
                }

                return tecCLAIMED;
            }