Example #1
0
        public void FromJson(string jsonValue)
        {
            switch (jsonValue)
            {
            case string earliest when string.Equals(earliest, "earliest", StringComparison.InvariantCultureIgnoreCase):
                Type = BlockParameterType.Earliest;

                return;

            case string pending when string.Equals(pending, "pending", StringComparison.InvariantCultureIgnoreCase):
                Type = BlockParameterType.Pending;

                return;

            case string latest when string.Equals(latest, "latest", StringComparison.InvariantCultureIgnoreCase):
                Type = BlockParameterType.Latest;

                return;

            case string empty when string.IsNullOrWhiteSpace(empty):
                Type = BlockParameterType.Latest;

                return;

            case null:
                Type = BlockParameterType.Latest;
                return;

            default:
                Type        = BlockParameterType.BlockNumber;
                BlockNumber = LongConverter.FromString(jsonValue.Trim('"'));
                return;
            }
        }
Example #2
0
        public override BlockParameter ReadJson(JsonReader reader, Type objectType, BlockParameter existingValue, bool hasExistingValue, JsonSerializer serializer)
        {
            if (reader.Value == null)
            {
                return(BlockParameter.Latest);
            }

            if (reader.Value.IsNonStringValueType())
            {
                return(new BlockParameter((long)reader.Value));
            }

            string value = reader.Value as string;

            switch (value)
            {
            case "":
            case { } latest when latest.Equals("latest", StringComparison.InvariantCultureIgnoreCase):
                return(BlockParameter.Latest);

            case { } latest when latest.Equals("earliest", StringComparison.InvariantCultureIgnoreCase):
                return(BlockParameter.Earliest);

            case { } latest when latest.Equals("pending", StringComparison.InvariantCultureIgnoreCase):
                return(BlockParameter.Pending);

            default:
                return(new BlockParameter(LongConverter.FromString(value)));
            }
        }
Example #3
0
 public void Convert_ThrowsException_WhenNotInteger()
 {
     var py = Python.Instance();
     var pyStr = py.Eval("\"omershelef\"");
     var converter = new LongConverter();
     Assert.Throws<ConversionException>(() => converter.Convert(pyStr));
 }
    public void LongConverter(object input, long?expected)
    {
        var converter = new LongConverter();
        var result    = converter.Convert(input);

        Assert.AreEqual(expected, result);
    }
Example #5
0
 public void Convert_ReturnLong_WhenLong()
 {
     var py = Python.Instance();
     var pyLong = py.Eval("12345678910");
     var converter = new LongConverter();
     Assert.AreEqual(12345678910L, converter.Convert(pyLong));
 }
Example #6
0
 public void Convert_ReturnLong_WhenInt()
 {
     var py = Python.Instance();
     var pyInt = py.Eval("55");
     var converter = new LongConverter();
     NUnit.Framework.Assert.AreEqual(55, converter.Convert(pyInt));
 }
    public void LongConverterFromDecimal()
    {
        var converter = new LongConverter();
        var result    = converter.Convert(77.5);

        Assert.AreEqual(78L, result);
    }
Example #8
0
        public static BlockParameter FromJson(string jsonValue)
        {
            switch (jsonValue)
            {
            case { } earliest when string.Equals(earliest, "earliest", StringComparison.InvariantCultureIgnoreCase):
                return(Earliest);

            case { } pending when string.Equals(pending, "pending", StringComparison.InvariantCultureIgnoreCase):
                return(Pending);

            case { } latest when string.Equals(latest, "latest", StringComparison.InvariantCultureIgnoreCase):
                return(Latest);

            case { } empty when string.IsNullOrWhiteSpace(empty):
                return(Latest);

            case null:
                return(Latest);

            case { } hash when hash.Length == 66 && hash.StartsWith("0x"):
                return(Latest);

            default:
                return(new BlockParameter(LongConverter.FromString(jsonValue.Trim('"'))));
            }
        }
Example #9
0
        public AddBlockResult Insert(Block block)
        {
            if (!CanAcceptNewBlocks)
            {
                return(AddBlockResult.CannotAccept);
            }

            if (block.Number == 0)
            {
                throw new InvalidOperationException("Genesis block should not be inserted.");
            }

            Rlp newRlp = _blockDecoder.Encode(block);

            _blockDb.Set(block.Hash, newRlp.Bytes);

            long expectedNumber = (LowestInsertedBody?.Number - 1 ?? LongConverter.FromString(_syncConfig.PivotNumber ?? "0"));

            if (block.Number != expectedNumber)
            {
                throw new InvalidOperationException($"Trying to insert out of order block {block.Number} when expected number was {expectedNumber}");
            }

            if (block.Number < (LowestInsertedBody?.Number ?? long.MaxValue))
            {
                LowestInsertedBody = block;
            }

            return(AddBlockResult.Added);
        }
Example #10
0
        public void Test_roundtrip(NumberConversion numberConversion)
        {
            LongConverter converter = new LongConverter(numberConversion);

            TestConverter(int.MaxValue, (a, b) => a.Equals(b), converter);
            TestConverter(1L, (a, b) => a.Equals(b), converter);
            TestConverter(0L, (a, b) => a.Equals(b), converter);
        }
Example #11
0
        public void Unknown_not_supported(NumberConversion notSupportedConversion)
        {
            LongConverter converter = new LongConverter(notSupportedConversion);

            Assert.Throws <NotSupportedException>(
                () => TestConverter(int.MaxValue, (a, b) => a.Equals(b), converter));
            Assert.Throws <NotSupportedException>(
                () => TestConverter(1L, (a, b) => a.Equals(b), converter));
        }
Example #12
0
        public void Throws_on_null()
        {
            LongConverter converter = new LongConverter();
            JsonReader    reader    = new JsonTextReader(new StringReader("null"));

            reader.ReadAsString();
            Assert.Throws <JsonException>(
                () => converter.ReadJson(reader, typeof(long), 0L, false, JsonSerializer.CreateDefault()));
        }
Example #13
0
        public void Regression_0xa00000()
        {
            LongConverter converter = new LongConverter();
            JsonReader    reader    = new JsonTextReader(new StringReader("0xa00000"));

            reader.ReadAsString();
            long result = converter.ReadJson(reader, typeof(long), 0, false, JsonSerializer.CreateDefault());

            Assert.AreEqual(10485760, result);
        }
        public void CanSerializeAndDeserialize()
        {
            long value = long.MaxValue;
            LongConverter converter = new LongConverter();
            byte[] bytes = converter.Serialize(value);

            long valueFromBytes = converter.Deserialize(bytes);

            Assert.Equal(valueFromBytes, value);
        }
Example #15
0
        public void Can_read_0()
        {
            LongConverter converter = new LongConverter();
            JsonReader    reader    = new JsonTextReader(new StringReader("0"));

            reader.ReadAsString();
            long result = converter.ReadJson(reader, typeof(long), 0L, false, JsonSerializer.CreateDefault());

            Assert.AreEqual(long.Parse("0"), result);
        }
Example #16
0
        public void LongConverter_CorrectConversionTest()
        {
            Array[] data = new long[][]
            {
                new long[] { long.MinValue, long.MaxValue },
                new long[] { -30000, 60000 },
            };

            var converter = new LongConverter();
            var sut       = converter.Convert(data, 2, 2);

            var expectation = new ushort[] { 0, ushort.MaxValue, 32767, 32767 };

            sut.Should().BeEquivalentTo(expectation);
        }
Example #17
0
        private void LoadEngine(ChainSpecJson chainSpecJson, ChainSpec chainSpec)
        {
            if (chainSpecJson.Engine?.AuthorityRound != null)
            {
                chainSpec.SealEngineType = SealEngineType.AuRa;
            }
            else if (chainSpecJson.Engine?.Clique != null)
            {
                chainSpec.SealEngineType = SealEngineType.Clique;
                chainSpec.Clique         = new CliqueParameters();
                chainSpec.Clique.Epoch   = chainSpecJson.Engine.Clique.Epoch;
                chainSpec.Clique.Period  = chainSpecJson.Engine.Clique.Period;
                chainSpec.Clique.Reward  = chainSpecJson.Engine.Clique.BlockReward ?? UInt256.Zero;
            }
            else if (chainSpecJson.Engine?.Ethash != null)
            {
                chainSpec.SealEngineType                = SealEngineType.Ethash;
                chainSpec.Ethash                        = new EthashParameters();
                chainSpec.Ethash.MinimumDifficulty      = chainSpecJson.Engine.Ethash.MinimumDifficulty ?? 0L;
                chainSpec.Ethash.DifficultyBoundDivisor = chainSpecJson.Engine.Ethash.DifficultyBoundDivisor ?? 0x0800L;
                chainSpec.Ethash.DurationLimit          = chainSpecJson.Engine.Ethash.DurationLimit ?? 13L;
                chainSpec.Ethash.HomesteadTransition    = chainSpecJson.Engine.Ethash.HomesteadTransition ?? 0;
                chainSpec.Ethash.DaoHardforkTransition  = chainSpecJson.Engine.Ethash.DaoHardforkTransition;
                chainSpec.Ethash.DaoHardforkBeneficiary = chainSpecJson.Engine.Ethash.DaoHardforkBeneficiary;
                chainSpec.Ethash.DaoHardforkAccounts    = chainSpecJson.Engine.Ethash.DaoHardforkAccounts ?? new Address[0];
                chainSpec.Ethash.Eip100bTransition      = chainSpecJson.Engine.Ethash.Eip100bTransition ?? 0L;

                chainSpec.Ethash.BlockRewards = new Dictionary <long, UInt256>();
                foreach (KeyValuePair <string, UInt256> reward in chainSpecJson.Engine.Ethash.BlockReward)
                {
                    chainSpec.Ethash.BlockRewards.Add(LongConverter.FromString(reward.Key), reward.Value);
                }

                chainSpec.Ethash.DifficultyBombDelays = new Dictionary <long, long>();
                foreach (KeyValuePair <string, long> reward in chainSpecJson.Engine.Ethash.DifficultyBombDelays)
                {
                    chainSpec.Ethash.DifficultyBombDelays.Add(LongConverter.FromString(reward.Key), reward.Value);
                }
            }
            else if (chainSpecJson.Engine?.NethDev != null)
            {
                chainSpec.SealEngineType = SealEngineType.NethDev;
            }
            else
            {
                throw new NotSupportedException("unknown seal engine in chainspec");
            }
        }
Example #18
0
        private void LoadLowestInsertedHeader()
        {
            long left  = 0L;
            long right = LongConverter.FromString(_syncConfig.PivotNumber ?? "0x0");

            ChainLevelInfo lowestInsertedLevel = null;

            while (left != right)
            {
                if (_logger.IsTrace)
                {
                    _logger.Trace($"Finding lowest inserted header - L {left} | R {right}");
                }
                long           index = left + (right - left) / 2 + 1;
                ChainLevelInfo level = LoadLevel(index, true);
                if (level == null)
                {
                    left = index;
                }
                else
                {
                    lowestInsertedLevel = level;
                    right = index - 1L;
                }
            }

            if (lowestInsertedLevel == null)
            {
                if (_logger.IsTrace)
                {
                    _logger.Trace($"Lowest inserted header is null - L {left} | R {right}");
                }
                LowestInsertedHeader = null;
            }
            else
            {
                BlockInfo blockInfo = lowestInsertedLevel.BlockInfos[0];
                LowestInsertedHeader = FindHeader(blockInfo.BlockHash);
                if (_logger.IsDebug)
                {
                    _logger.Debug($"Lowest inserted header is {LowestInsertedHeader?.ToString(BlockHeader.Format.Short)} {right} - L {left} | R {right}");
                }
            }
        }
Example #19
0
        private void LoadLowestInsertedBody()
        {
            long left  = 0L;
            long right = LongConverter.FromString(_syncConfig.PivotNumber ?? "0x0");

            Block lowestInsertedBlock = null;

            while (left != right)
            {
                if (_logger.IsDebug)
                {
                    _logger.Debug($"Finding lowest inserted body - L {left} | R {right}");
                }
                long           index = left + (right - left) / 2 + 1;
                ChainLevelInfo level = LoadLevel(index, true);
                Block          block = level == null ? null : FindBlock(level.BlockInfos[0].BlockHash, false);
                if (block == null)
                {
                    left = index;
                }
                else
                {
                    lowestInsertedBlock = block;
                    right = index - 1;
                }
            }

            if (lowestInsertedBlock == null)
            {
                if (_logger.IsTrace)
                {
                    _logger.Trace($"Lowest inserted body is null - L {left} | R {right}");
                }
                LowestInsertedBody = null;
            }
            else
            {
                if (_logger.IsDebug)
                {
                    _logger.Debug($"Lowest inserted body is {LowestInsertedBody?.ToString(Block.Format.Short)} {right} - L {left} | R {right}");
                }
                LowestInsertedBody = lowestInsertedBlock;
            }
        }
        public override ChainSpecJson.BlockRewardJson ReadJson(JsonReader reader, Type objectType, ChainSpecJson.BlockRewardJson existingValue, bool hasExistingValue, JsonSerializer serializer)
        {
            existingValue ??= new ChainSpecJson.BlockRewardJson();
            if (reader.TokenType == JsonToken.String || reader.TokenType == JsonToken.Integer)
            {
                var blockReward = serializer.Deserialize <UInt256>(reader);
                existingValue.Add(0, blockReward);
            }
            else
            {
                var blockRewards = serializer.Deserialize <Dictionary <string, UInt256> >(reader);
                foreach (var blockReward in blockRewards ?? throw new ArgumentException("Cannot deserialize BlockReward."))
                {
                    existingValue.Add(LongConverter.FromString(blockReward.Key), blockReward.Value);
                }
            }

            return(existingValue);
        }
        public override ChainSpecJson.AuraEngineParamsJson.StepDurationJson ReadJson(JsonReader reader, Type objectType, ChainSpecJson.AuraEngineParamsJson.StepDurationJson existingValue, bool hasExistingValue, JsonSerializer serializer)
        {
            existingValue ??= new ChainSpecJson.AuraEngineParamsJson.StepDurationJson();
            if (reader.TokenType == JsonToken.String || reader.TokenType == JsonToken.Integer)
            {
                var stepDuration = serializer.Deserialize <long>(reader);
                existingValue.Add(0, stepDuration);
            }
            else
            {
                var stepDurations = serializer.Deserialize <Dictionary <string, long> >(reader);
                foreach (var stepDuration in stepDurations ?? throw new ArgumentException("Cannot deserialize StepDuration."))
                {
                    existingValue.Add(LongConverter.FromString(stepDuration.Key), stepDuration.Value);
                }
            }

            return(existingValue);
        }
Example #22
0
        public virtual IList <MetricsIntervalResultDto> interval(UriInfo uriInfo)
        {
            MultivaluedMap <string, string> queryParameters = uriInfo.QueryParameters;
            MetricsQuery query = processEngine.ManagementService.createMetricsQuery().name(queryParameters.getFirst(QUERY_PARAM_NAME)).reporter(queryParameters.getFirst(QUERY_PARAM_REPORTER));

            applyQueryParams(query, queryParameters);

            IList <MetricIntervalValue> metrics;
            LongConverter longConverter = new LongConverter();

            longConverter.ObjectMapper = objectMapper;
            if (queryParameters.getFirst(QUERY_PARAM_INTERVAL) != null)
            {
                long interval = longConverter.convertQueryParameterToType(queryParameters.getFirst(QUERY_PARAM_INTERVAL)).Value;
                metrics = query.interval(interval);
            }
            else
            {
                metrics = query.interval();
            }

            return(convertToDtos(metrics));
        }
Example #23
0
 /// <summary>
 /// Converts array element into a long or returns default value if conversion is not possible.
 /// </summary>
 /// <param name="index">an index of element to get.</param>
 /// <param name="defaultValue">the default value</param>
 /// <returns>long value of element or default value if conversion is not supported.</returns>
 /// See <see cref="LongConverter.ToLongWithDefault(object, long)"/>
 public long GetAsLongWithDefault(int index, long defaultValue)
 {
     return(LongConverter.ToLongWithDefault(this[index], defaultValue));
 }
Example #24
0
 /// <summary>
 /// Converts array element into a long or returns null if conversion is not possible.
 /// </summary>
 /// <param name="index">an index of element to get.</param>
 /// <returns>long value of element or null if conversion is not supported.</returns>
 /// See <see cref="LongConverter.ToNullableLong(object)"/>
 public long?GetAsNullableLong(int index)
 {
     return(LongConverter.ToNullableLong(this[index]));
 }
Example #25
0
        private void LoadEngine(ChainSpecJson chainSpecJson, ChainSpec chainSpec)
        {
            AuRaParameters.Validator LoadValidator(ChainSpecJson.AuRaValidatorJson validatorJson, int level = 0)
            {
                var validatorType = validatorJson.GetValidatorType();
                var validator     = new AuRaParameters.Validator()
                {
                    ValidatorType = validatorType
                };

                switch (validator.ValidatorType)
                {
                case AuRaParameters.ValidatorType.List:
                    validator.Addresses = validatorJson.List;
                    break;

                case AuRaParameters.ValidatorType.Contract:
                    validator.Addresses = new[] { validatorJson.SafeContract };
                    break;

                case AuRaParameters.ValidatorType.ReportingContract:
                    validator.Addresses = new[] { validatorJson.Contract };
                    break;

                case AuRaParameters.ValidatorType.Multi:
                    if (level != 0)
                    {
                        throw new ArgumentException("AuRa multi validator cannot be inner validator.");
                    }
                    validator.Validators = validatorJson.Multi
                                           .ToDictionary(kvp => kvp.Key, kvp => LoadValidator(kvp.Value, level + 1))
                                           .ToImmutableSortedDictionary();
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                return(validator);
            }

            if (chainSpecJson.Engine?.AuthorityRound != null)
            {
                chainSpec.SealEngineType = SealEngineType.AuRa;
                chainSpec.AuRa           = new AuRaParameters
                {
                    MaximumUncleCount           = chainSpecJson.Engine.AuthorityRound.MaximumUncleCount,
                    MaximumUncleCountTransition = chainSpecJson.Engine.AuthorityRound.MaximumUncleCountTransition,
                    StepDuration = chainSpecJson.Engine.AuthorityRound.StepDuration,
                    BlockReward  = chainSpecJson.Engine.AuthorityRound.BlockReward,
                    BlockRewardContractAddress     = chainSpecJson.Engine.AuthorityRound.BlockRewardContractAddress,
                    BlockRewardContractTransition  = chainSpecJson.Engine.AuthorityRound.BlockRewardContractTransition,
                    BlockRewardContractTransitions = chainSpecJson.Engine.AuthorityRound.BlockRewardContractTransitions,
                    ValidateScoreTransition        = chainSpecJson.Engine.AuthorityRound.ValidateScoreTransition,
                    ValidateStepTransition         = chainSpecJson.Engine.AuthorityRound.ValidateStepTransition,
                    Validators = LoadValidator(chainSpecJson.Engine.AuthorityRound.Validator),
                    RandomnessContractAddress        = chainSpecJson.Engine.AuthorityRound.RandomnessContractAddress,
                    BlockGasLimitContractTransitions = chainSpecJson.Engine.AuthorityRound.BlockGasLimitContractTransitions,
                };
            }
            else if (chainSpecJson.Engine?.Clique != null)
            {
                chainSpec.SealEngineType = SealEngineType.Clique;
                chainSpec.Clique         = new CliqueParameters
                {
                    Epoch  = chainSpecJson.Engine.Clique.Epoch,
                    Period = chainSpecJson.Engine.Clique.Period,
                    Reward = chainSpecJson.Engine.Clique.BlockReward ?? UInt256.Zero
                };
            }
            else if (chainSpecJson.Engine?.Ethash != null)
            {
                chainSpec.SealEngineType = SealEngineType.Ethash;
                chainSpec.Ethash         = new EthashParameters
                {
                    MinimumDifficulty      = chainSpecJson.Engine.Ethash.MinimumDifficulty ?? 0L,
                    DifficultyBoundDivisor = chainSpecJson.Engine.Ethash.DifficultyBoundDivisor ?? 0x0800L,
                    DurationLimit          = chainSpecJson.Engine.Ethash.DurationLimit ?? 13L,
                    HomesteadTransition    = chainSpecJson.Engine.Ethash.HomesteadTransition ?? 0,
                    DaoHardforkTransition  = chainSpecJson.Engine.Ethash.DaoHardforkTransition,
                    DaoHardforkBeneficiary = chainSpecJson.Engine.Ethash.DaoHardforkBeneficiary,
                    DaoHardforkAccounts    = chainSpecJson.Engine.Ethash.DaoHardforkAccounts ?? new Address[0],
                    Eip100bTransition      = chainSpecJson.Engine.Ethash.Eip100bTransition ?? 0L,
                    BlockRewards           = new Dictionary <long, UInt256>()
                };

                foreach (KeyValuePair <string, UInt256> reward in chainSpecJson.Engine.Ethash.BlockReward)
                {
                    chainSpec.Ethash.BlockRewards.Add(LongConverter.FromString(reward.Key), reward.Value);
                }

                chainSpec.Ethash.DifficultyBombDelays = new Dictionary <long, long>();
                foreach (KeyValuePair <string, long> reward in chainSpecJson.Engine.Ethash.DifficultyBombDelays)
                {
                    chainSpec.Ethash.DifficultyBombDelays.Add(LongConverter.FromString(reward.Key), reward.Value);
                }
            }
            else if (chainSpecJson.Engine?.NethDev != null)
            {
                chainSpec.SealEngineType = SealEngineType.NethDev;
            }
            else
            {
                throw new NotSupportedException("unknown seal engine in chainspec");
            }
        }
Example #26
0
			/**
			 * Matches a signature to the MsArg and if the signature matches unpacks the component values of a MsgArg into an object. 
			 * This function resolved through variants, so if the MsgArg is a variant that references a 32 bit integer is can be unpacked
			 * directly into a 32 bit integer pointer.
			 *
			 *  - @c 'a'  An object containing an array 
			 *  - @c 'b'  An object containing a bool
			 *  - @c 'd'  An object containing a double (64 bits)
			 *  - @c 'g'  An object containing a string that represents an AllJoyn signature
			 *  - @c 'h'  An object containing a Socket file desciptor
			 *  - @c 'i'  An object containing an int
			 *  - @c 'n'  An object containing a short
			 *  - @c 'o'  An object containing a string that represents the name of an AllJoyn object
			 *  - @c 'q'  An object containing a ushort
			 *  - @c 's'  An object containing a string
			 *  - @c 't'  An object containing a ulong
			 *  - @c 'u'  An object containing a uint
			 *  - @c 'v'  An object containing a MsgArg
			 *  - @c 'x'  An object containing a long
			 *  - @c 'y'  An object containing a byte
			 *
			 *  - @c '(' and @c ')'  An object containing a struct
			 *  - @c '{' and @c '}'  An object containing the key and value pair of a dictonary
			 *
			 *  - @c '*' This matches any value type. This should not show up in a signature it is used by AllJoyn for matching
			 *
			 * @param      sig    The signature for MsgArg value
			 * @param[out] value  object to hold the values unpacked from the MsgArg
			 * @return
			 *      - QStatus.OK if the signature matched and MsgArg was successfully unpacked.
			 *      - QStatus.BUS_SIGNATURE_MISMATCH if the signature did not match.
			 *      - An error status otherwise
			 */
			//TODO add in examples into the Get documentation
			public QStatus Get(string sig, out object value)
			{
				QStatus status = QStatus.OK;
				value = null;
				// handle multiple signatures in one get command
				if (sig.Length > 1)
				{
					string[] sigs = splitSignature(sig);
					if (sigs.Length > 1)
					{
						//is the signature larger than the passed in MsgArg?
						if (sigs.Length > _length)
						{
							return AllJoyn.QStatus.BUS_BAD_SIGNATURE;
						}
						object[] values = new object[sigs.Length];
						for (int j = 0; j < sigs.Length; ++j)
						{
							status = this[j].Get(sigs[j], out values[j]);
							if (AllJoyn.QStatus.OK != status)
							{
								return status;
							}
						}
						value = values;
						return status;
					}
				}
				switch ((AllJoynTypeId)sig[0])
				{
					case AllJoynTypeId.ALLJOYN_BYTE:
						byte y;
						status = alljoyn_msgarg_get_uint8(_msgArg, out y);
						value = y;
						break;
					case AllJoynTypeId.ALLJOYN_BOOLEAN:
						bool b;
						status = alljoyn_msgarg_get_bool(_msgArg, out b);
						value = b;
						break;
					case AllJoynTypeId.ALLJOYN_INT16:
						short n;
						status = alljoyn_msgarg_get_int16(_msgArg, out n);
						value = n;
						break;
					case AllJoynTypeId.ALLJOYN_UINT16:
						ushort q;
						status = alljoyn_msgarg_get_uint16(_msgArg, out q);
						value = q;
						break;
					case AllJoynTypeId.ALLJOYN_INT32:
						int i;
						status = alljoyn_msgarg_get_int32(_msgArg, out i);
						value = i;
						break;
					case AllJoynTypeId.ALLJOYN_UINT32:
						uint u;
						status = alljoyn_msgarg_get_uint32(_msgArg, out u);
						value = u;
						break;
					case AllJoynTypeId.ALLJOYN_INT64:
						long x;
						status = alljoyn_msgarg_get_int64(_msgArg, out x);
						value = x;
						break;
					case AllJoynTypeId.ALLJOYN_UINT64:
						ulong t;
						status = alljoyn_msgarg_get_uint64(_msgArg, out t);
						value = t;
						break;
					case AllJoynTypeId.ALLJOYN_DOUBLE:
						double d;
						status = alljoyn_msgarg_get_double(_msgArg, out d);
						value = d;
						break;
					case AllJoynTypeId.ALLJOYN_STRING:
						IntPtr s;
						status = alljoyn_msgarg_get_string(_msgArg, out s);
						value = Marshal.PtrToStringAnsi(s);
						break;
					case AllJoynTypeId.ALLJOYN_OBJECT_PATH:
						IntPtr o;
						status = alljoyn_msgarg_get_objectpath(_msgArg, out o);
						value = Marshal.PtrToStringAnsi(o);
						break;
					case AllJoynTypeId.ALLJOYN_SIGNATURE:
						IntPtr g;
						status = alljoyn_msgarg_get_signature(_msgArg, out g);
						value = Marshal.PtrToStringAnsi(g);
						break;
					case AllJoynTypeId.ALLJOYN_VARIANT:
						IntPtr v;
						status = alljoyn_msgarg_get_variant(_msgArg, out v);
						if (status)
						{
							value = new MsgArg(v);
						}
						break;
					case AllJoynTypeId.ALLJOYN_ARRAY:
						int length;
						switch ((AllJoynTypeId)sig[1])
						{
							case AllJoynTypeId.ALLJOYN_BYTE:
								IntPtr ay;
								status = alljoyn_msgarg_get_uint8_array(_msgArg, out length, out ay);
								byte[] ay_result = new byte[length];
								Marshal.Copy(ay, ay_result, 0, length);
								value = ay_result;
								break;
							case AllJoynTypeId.ALLJOYN_BOOLEAN:
								IntPtr ab;
								status = alljoyn_msgarg_get_bool_array(_msgArg, out length, out ab);
								int[] ab_result = new int[length];
								Marshal.Copy(ab, ab_result, 0, length);
								bool[] ab_retValue = new bool[length];
								for (int j = 0; j < length; j++)
								{
									if (ab_result[j] == 0)
									{
										ab_retValue[j] = false;
									}
									else
									{
										ab_retValue[j] = true;
									}
								}
								value = ab_retValue;
								break;
							case AllJoynTypeId.ALLJOYN_INT16:
								IntPtr an;
								status = alljoyn_msgarg_get_int16_array(_msgArg, out length, out an);
								short[] an_result = new short[length];
								Marshal.Copy(an, an_result, 0, length);
								value = an_result;
								break;
							case AllJoynTypeId.ALLJOYN_UINT16:
								IntPtr aq;
								status = alljoyn_msgarg_get_uint16_array(_msgArg, out length, out aq);
								short[] aq_result = new short[length];
								Marshal.Copy(aq, aq_result, 0, length);
								ShortConverter shortConverter = new ShortConverter();
								shortConverter.Shorts = aq_result;
								value = shortConverter.UShorts;
								break;
							case AllJoynTypeId.ALLJOYN_INT32:
								IntPtr ai;
								status = alljoyn_msgarg_get_int32_array(_msgArg, out length, out ai);
								int[] ai_result = new int[length];
								Marshal.Copy(ai, ai_result, 0, length);
								value = ai_result;
								break;
							case AllJoynTypeId.ALLJOYN_UINT32:
								IntPtr au;
								status = alljoyn_msgarg_get_uint32_array(_msgArg, out length, out au);
								int[] au_result = new int[length];
								Marshal.Copy(au, au_result, 0, length);

								IntConverter intConverter = new IntConverter();
								intConverter.Ints = au_result;
								value = intConverter.UInts;
								break;
							case AllJoynTypeId.ALLJOYN_INT64:
								IntPtr ax;
								status = alljoyn_msgarg_get_int64_array(_msgArg, out length, out ax);
								long[] ax_result = new long[length];
								Marshal.Copy(ax, ax_result, 0, length);
								value = ax_result;
								break;
							case AllJoynTypeId.ALLJOYN_UINT64:
								IntPtr at;
								status = alljoyn_msgarg_get_uint64_array(_msgArg, out length, out at);
								long[] at_result = new long[length];
								Marshal.Copy(at, at_result, 0, length);

								LongConverter longConverter = new LongConverter();
								longConverter.Longs = at_result;
								value = longConverter.ULongs;
								break;
							case AllJoynTypeId.ALLJOYN_DOUBLE:
								IntPtr ad;
								status = alljoyn_msgarg_get_double_array(_msgArg, out length, out ad);
								double[] ad_result = new double[length];
								Marshal.Copy(ad, ad_result, 0, length);
								value = ad_result;
								break;
							case AllJoynTypeId.ALLJOYN_STRING:
								IntPtr sa;
								status = alljoyn_msgarg_get_variant_array(_msgArg, "as", out length, out sa);
								if (status)
								{
									string[] as_result = new string[length];
									for (int j = 0; j < length; ++j)
									{
										if (status)
										{
											IntPtr inner_s;
											status = alljoyn_msgarg_get_string(alljoyn_msgarg_array_element(sa, (UIntPtr)j), out inner_s);
											as_result[j] = Marshal.PtrToStringAnsi(inner_s);
										}
										else
										{
											break;
										}
									}
									value = as_result;
								}
								break;
							case AllJoynTypeId.ALLJOYN_OBJECT_PATH:
								IntPtr ao;
								status = alljoyn_msgarg_get_variant_array(_msgArg, "ao", out length, out ao);
								if (status)
								{
									string[] ao_result = new string[length];
									for (int j = 0; j < length; ++j)
									{
										if (status)
										{
											IntPtr inner_o;
											status = alljoyn_msgarg_get_objectpath(alljoyn_msgarg_array_element(ao, (UIntPtr)j), out inner_o);
											ao_result[j] = Marshal.PtrToStringAnsi(inner_o);
										}
										else
										{
											break;
										}
									}
									value = ao_result;
								}
								break;
							case AllJoynTypeId.ALLJOYN_SIGNATURE:
								IntPtr ag;
								status = alljoyn_msgarg_get_variant_array(_msgArg, "ag", out length, out ag);
								if (status)
								{
									string[] ag_result = new string[length];
									for (int j = 0; j < length; ++j)
									{
										if (status)
										{
											IntPtr inner_g;
											status = alljoyn_msgarg_get_signature(alljoyn_msgarg_array_element(ag, (UIntPtr)j), out inner_g);
											ag_result[j] = Marshal.PtrToStringAnsi(inner_g);
										}
										else
										{
											break;
										}
									}
									value = ag_result;
								}
								break;
							case AllJoynTypeId.ALLJOYN_VARIANT:
								IntPtr av;
								status = alljoyn_msgarg_get_variant_array(_msgArg, "av", out length, out av);
								if (status)
								{
									MsgArg av_result = new MsgArg(av);
									av_result._length = length;
									value = av_result;
								}
								break;
							case AllJoynTypeId.ALLJOYN_DICT_ENTRY_OPEN:
								int dict_size = alljoyn_msgarg_get_array_numberofelements(_msgArg);
								System.Collections.Generic.Dictionary<object, object> dict = new System.Collections.Generic.Dictionary<object, object>();
								// signature of form a{KV} where key is always one letter value
								// just must be a complete signature lenght - 1 for K  - 2 for 'a{' and '}'
								string key_sig = sig.Substring(2, 1);
								string value_sig = sig.Substring(3, sig.Length - 4);
								if (key_sig == null || value_sig == null)
								{
									status = AllJoyn.QStatus.BUS_SIGNATURE_MISMATCH;
								}
								for (int j = 0; j < dict_size; ++j)
								{
									IntPtr inner_data_ptr;
									alljoyn_msgarg_get_array_element(_msgArg, (UIntPtr)j, out inner_data_ptr);
									Object actualKey;
									Object actualValue;
									MsgArg key_MsgArg = new MsgArg(alljoyn_msgarg_getkey(inner_data_ptr));
									MsgArg value_MsgArg = new MsgArg(alljoyn_msgarg_getvalue(inner_data_ptr));
									key_MsgArg.Get(key_sig, out actualKey);
									value_MsgArg.Get(value_sig, out actualValue);
									dict.Add(actualKey, actualValue);
								}
								value = dict;
								break;
							case AllJoynTypeId.ALLJOYN_STRUCT_OPEN:
								int struct_array_size = alljoyn_msgarg_get_array_numberofelements(_msgArg);
								MsgArg struct_array = new MsgArg(struct_array_size);
								for (int j = 0; j < struct_array_size; ++j)
								{
									IntPtr struct_array_ptr;
									alljoyn_msgarg_get_array_element(_msgArg, (UIntPtr)j, out struct_array_ptr);
									AllJoyn.MsgArg tmp = new MsgArg(struct_array_ptr);
									struct_array[j] = tmp;
								}
								value = struct_array;
								break;
							case AllJoynTypeId.ALLJOYN_ARRAY:
								int outer_array_size = alljoyn_msgarg_get_array_numberofelements(_msgArg);
								object[] outerArray = new object[outer_array_size];
								for (int j = 0; j < outer_array_size; j++)
								{
									if (status)
									{
										IntPtr inner_data_ptr;
										alljoyn_msgarg_get_array_element(_msgArg, (UIntPtr)j, out inner_data_ptr);
										MsgArg tmp = new MsgArg(inner_data_ptr);
										string inner_array_sig = Marshal.PtrToStringAnsi(alljoyn_msgarg_get_array_elementsignature(_msgArg, (UIntPtr)j));
										status = tmp.Get(inner_array_sig, out outerArray[j]);
									}
									else
									{
										break;
									}
								}
								value = outerArray;
								break;
							default:
								status = QStatus.WRITE_ERROR;
								break;
						}
						break;
					case AllJoynTypeId.ALLJOYN_STRUCT_OPEN:
						if ((AllJoynTypeId)sig[sig.Length - 1] != AllJoynTypeId.ALLJOYN_STRUCT_CLOSE)
						{
							return AllJoyn.QStatus.BUS_BAD_SIGNATURE;
						}
						string[] struct_sigs = splitSignature(sig.Substring(1, sig.Length - 2));
						if (struct_sigs == null)
						{
							return AllJoyn.QStatus.BUS_BAD_SIGNATURE;
						}
						int numMembers = alljoyn_msgarg_getnummembers(_msgArg);
						if (numMembers != struct_sigs.Length)
						{
							return AllJoyn.QStatus.BUS_BAD_SIGNATURE;
						}

						object[] structObjects = new object[numMembers];
						for (int j = 0; j < struct_sigs.Length; ++j)
						{
							MsgArg arg = new MsgArg(alljoyn_msgarg_getmember(_msgArg, (UIntPtr)j));
							status = arg.Get(struct_sigs[j], out structObjects[j]);
							if (AllJoyn.QStatus.OK != status)
							{
								return status;
							}
						}
						value = structObjects;
						break;
					case AllJoynTypeId.ALLJOYN_DICT_ENTRY_OPEN:
						// A dictionary entry must start with 'a' followed by '{'
						// if it starts with '{' it is an invalid signature.
						status = QStatus.BUS_BAD_SIGNATURE;
						break;
					default:
						status = QStatus.WRITE_ERROR;
						break;
				}
				return status;
			}
Example #27
0
        /// <summary>
        /// Converts map element into a long or returns default value if conversion is not possible.
        /// </summary>
        /// <param name="key">a key of element to get.</param>
        /// <param name="defaultValue">the default value</param>
        /// <returns>long value of the element or default value if conversion is not supported.</returns>
        /// See <see cref="LongConverter.ToLongWithDefault(object, long)"/>
        public long GetAsLongWithDefault(string key, long defaultValue)
        {
            var value = Get(key);

            return(LongConverter.ToLongWithDefault(value, defaultValue));
        }
Example #28
0
        /// <summary>
        /// Converts map element into a long or returns null if conversion is not possible.
        /// </summary>
        /// <param name="key">a key of element to get.</param>
        /// <returns>long value of the element or null if conversion is not supported.</returns>
        /// See <see cref="LongConverter.ToNullableLong(object)"/>
        public long?GetAsNullableLong(string key)
        {
            var value = Get(key);

            return(LongConverter.ToNullableLong(value));
        }
Example #29
0
 internal static LongConverter Get(byte[] bytes)
 {
     LongConverter converter = new LongConverter();
     converter.Bytes = bytes;
     return converter;
 }
Example #30
0
 /// <summary>
 /// Creates a new instance and sets its values.
 /// </summary>
 /// <param name="skip">the number of items to skip.</param>
 /// <param name="take">the number of items to return.</param>
 /// <param name="total">true to return the total number of items.</param>
 public PagingParams(object skip, object take, object total = null)
 {
     Skip  = LongConverter.ToNullableLong(skip);
     Take  = LongConverter.ToNullableLong(take);
     Total = BooleanConverter.ToBooleanWithDefault(total, false);
 }
Example #31
0
        private int InsertBodies(BodiesSyncBatch batch)
        {
            List <Block> validResponses = new List <Block>();

            for (int i = 0; i < batch.Response.Length; i++)
            {
                BlockBody blockBody = batch.Response[i];
                if (blockBody == null)
                {
                    break;
                }

                Block block = new Block(batch.Headers[i], blockBody.Transactions, blockBody.Ommers);
                if (new TxTrie(block.Transactions).RootHash != block.TxRoot ||
                    OmmersHash.Calculate(block) != block.OmmersHash)
                {
                    if (_logger.IsWarn)
                    {
                        _logger.Warn($"{batch} - reporting INVALID - tx or ommers");
                    }
                    _syncPeerPool.ReportBreachOfProtocol(batch.ResponseSourcePeer, $"invalid tx or ommers root");
                    break;
                }

                validResponses.Add(block);
            }

            int validResponsesCount = validResponses.Count;

            if (validResponses.Count < batch.Request.Length)
            {
                BodiesSyncBatch fillerBatch = new BodiesSyncBatch();
                fillerBatch.MinNumber = batch.MinNumber;

                int originalLength = batch.Request.Length;
                fillerBatch.Request = new Keccak[originalLength - validResponsesCount];
                fillerBatch.Headers = new BlockHeader[originalLength - validResponsesCount];

                for (int i = validResponsesCount; i < originalLength; i++)
                {
                    fillerBatch.Request[i - validResponsesCount] = batch.Request[i];
                    fillerBatch.Headers[i - validResponsesCount] = batch.Headers[i];
                }

                if (_logger.IsDebug)
                {
                    _logger.Debug($"{batch} -> FILLER {fillerBatch}");
                }
                _pending.Enqueue(fillerBatch);
            }

            if (validResponses.Any())
            {
                long expectedNumber = _blockTree.LowestInsertedBody?.Number - 1 ?? LongConverter.FromString(_syncConfig.PivotNumber ?? "0");
                if (validResponses.Last().Number != expectedNumber)
                {
                    _dependencies.TryAdd(validResponses.Last().Number, validResponses);
                }
                else
                {
                    validResponses.Reverse();
                    InsertBlocks(validResponses);
                }

                if (_blockTree.LowestInsertedBody != null)
                {
                    _syncReport.FastBlocksBodies.Update(_pivotNumber - _blockTree.LowestInsertedBody.Number + 1);
                }
            }

            if (_logger.IsDebug)
            {
                _logger.Debug($"LOWEST_INSERTED {_blockTree.LowestInsertedBody?.Number} | HANDLED {batch}");
            }

            _syncReport.BodiesInQueue.Update(BodiesInQueue);
            return(validResponsesCount);
        }
Example #32
0
        public void ValidateConvertToObjectFromString()
        {
            var val = new LongConverter("4294967296").ConvertToObject("", CultureInfo.CurrentCulture);

            Assert.AreEqual(0x100000000, val);
        }
            static AuRaParameters.Validator LoadValidator(ChainSpecJson.AuRaValidatorJson validatorJson, int level = 0)
            {
                AuRaParameters.ValidatorType validatorType = validatorJson.GetValidatorType();
                AuRaParameters.Validator     validator     = new() { ValidatorType = validatorType };
                switch (validator.ValidatorType)
                {
                case AuRaParameters.ValidatorType.List:
                    validator.Addresses = validatorJson.List;
                    break;

                case AuRaParameters.ValidatorType.Contract:
                    validator.Addresses = new[] { validatorJson.SafeContract };
                    break;

                case AuRaParameters.ValidatorType.ReportingContract:
                    validator.Addresses = new[] { validatorJson.Contract };
                    break;

                case AuRaParameters.ValidatorType.Multi:
                    if (level != 0)
                    {
                        throw new ArgumentException("AuRa multi validator cannot be inner validator.");
                    }
                    validator.Validators = validatorJson.Multi
                                           .ToDictionary(kvp => kvp.Key, kvp => LoadValidator(kvp.Value, level + 1))
                                           .ToImmutableSortedDictionary();
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                return(validator);
            }

            if (chainSpecJson.Engine?.AuthorityRound != null)
            {
                chainSpec.SealEngineType = SealEngineType.AuRa;
                chainSpec.AuRa           = new AuRaParameters
                {
                    MaximumUncleCount           = chainSpecJson.Engine.AuthorityRound.MaximumUncleCount,
                    MaximumUncleCountTransition = chainSpecJson.Engine.AuthorityRound.MaximumUncleCountTransition,
                    StepDuration = chainSpecJson.Engine.AuthorityRound.StepDuration,
                    BlockReward  = chainSpecJson.Engine.AuthorityRound.BlockReward,
                    BlockRewardContractAddress     = chainSpecJson.Engine.AuthorityRound.BlockRewardContractAddress,
                    BlockRewardContractTransition  = chainSpecJson.Engine.AuthorityRound.BlockRewardContractTransition,
                    BlockRewardContractTransitions = chainSpecJson.Engine.AuthorityRound.BlockRewardContractTransitions,
                    ValidateScoreTransition        = chainSpecJson.Engine.AuthorityRound.ValidateScoreTransition,
                    ValidateStepTransition         = chainSpecJson.Engine.AuthorityRound.ValidateStepTransition,
                    Validators = LoadValidator(chainSpecJson.Engine.AuthorityRound.Validator),
                    RandomnessContractAddress        = chainSpecJson.Engine.AuthorityRound.RandomnessContractAddress,
                    BlockGasLimitContractTransitions = chainSpecJson.Engine.AuthorityRound.BlockGasLimitContractTransitions,
                    TwoThirdsMajorityTransition      = chainSpecJson.Engine.AuthorityRound.TwoThirdsMajorityTransition ?? AuRaParameters.TransitionDisabled,
                    PosdaoTransition = chainSpecJson.Engine.AuthorityRound.PosdaoTransition ?? AuRaParameters.TransitionDisabled,
                    RewriteBytecode  = chainSpecJson.Engine.AuthorityRound.RewriteBytecode,
                };
            }
            else if (chainSpecJson.Engine?.Clique != null)
            {
                chainSpec.SealEngineType = SealEngineType.Clique;
                chainSpec.Clique         = new CliqueParameters
                {
                    Epoch  = chainSpecJson.Engine.Clique.Epoch,
                    Period = chainSpecJson.Engine.Clique.Period,
                    Reward = chainSpecJson.Engine.Clique.BlockReward ?? UInt256.Zero
                };
            }
            else if (chainSpecJson.Engine?.Ethash != null)
            {
                chainSpec.SealEngineType = SealEngineType.Ethash;
                chainSpec.Ethash         = new EthashParameters
                {
                    MinimumDifficulty      = chainSpecJson.Engine.Ethash.MinimumDifficulty ?? 0L,
                    DifficultyBoundDivisor = chainSpecJson.Engine.Ethash.DifficultyBoundDivisor ?? 0x0800L,
                    DurationLimit          = chainSpecJson.Engine.Ethash.DurationLimit ?? 13L,
                    HomesteadTransition    = chainSpecJson.Engine.Ethash.HomesteadTransition ?? 0,
                    DaoHardforkTransition  = chainSpecJson.Engine.Ethash.DaoHardforkTransition,
                    DaoHardforkBeneficiary = chainSpecJson.Engine.Ethash.DaoHardforkBeneficiary,
                    DaoHardforkAccounts    = chainSpecJson.Engine.Ethash.DaoHardforkAccounts ?? Array.Empty <Address>(),
                    Eip100bTransition      = chainSpecJson.Engine.Ethash.Eip100bTransition ?? 0L,
                    FixedDifficulty        = chainSpecJson.Engine.Ethash.FixedDifficulty,
                    BlockRewards           = chainSpecJson.Engine.Ethash.BlockReward
                };

                chainSpec.Ethash.DifficultyBombDelays = new Dictionary <long, long>();
                if (chainSpecJson.Engine.Ethash.DifficultyBombDelays != null)
                {
                    foreach (KeyValuePair <string, long> reward in chainSpecJson.Engine.Ethash.DifficultyBombDelays)
                    {
                        chainSpec.Ethash.DifficultyBombDelays.Add(LongConverter.FromString(reward.Key), reward.Value);
                    }
                }
            }
            else if (chainSpecJson.Engine?.NethDev != null)
            {
                chainSpec.SealEngineType = SealEngineType.NethDev;
            }

            var customEngineType = chainSpecJson.Engine?.CustomEngineData?.FirstOrDefault().Key;

            if (!string.IsNullOrEmpty(customEngineType))
            {
                chainSpec.SealEngineType = customEngineType;
            }

            if (string.IsNullOrEmpty(chainSpec.SealEngineType))
            {
                throw new NotSupportedException("unknown seal engine in chainspec");
            }
        }
Example #34
0
 public long?GetAsNullableLong()
 {
     return(LongConverter.ToNullableLong(Value));
 }
Example #35
0
 public long GetAsLongWithDefault(long defaultValue)
 {
     return(LongConverter.ToLongWithDefault(Value, defaultValue));
 }
Example #36
0
 static MyJsonResult()
 {
     LongConverter           = new LongConverter();
     IsoDateTimeConverterMap = new Dictionary <string, IsoDateTimeConverter>();
 }