/// <summary>
        ///     Initializes a new instance of the <see cref="RegisterNamespaceTransaction" /> class.
        /// </summary>
        /// <param name="networkType"></param>
        /// <param name="version"></param>
        /// <param name="deadline"></param>
        /// <param name="maxFee"></param>
        /// <param name="namespaceName"></param>
        /// <param name="namespaceId"></param>
        /// <param name="namespaceType"></param>
        /// <param name="duration"></param>
        /// <param name="parentId"></param>
        /// <param name="signature"></param>
        /// <param name="signer"></param>
        /// <param name="transactionInfo"></param>
        public RegisterNamespaceTransaction(NetworkType networkType, int version, Deadline deadline, ulong?maxFee,
                                            string namespaceName, NamespaceId namespaceId, NamespaceType namespaceType, ulong?duration,
                                            NamespaceId parentId            = null, string signature = null, PublicAccount signer = null,
                                            TransactionInfo transactionInfo = null)
            : base(networkType, version, EntityType.REGISTER_NAMESPACE, deadline, maxFee, signature, signer,
                   transactionInfo)
        {
            if (string.IsNullOrEmpty(namespaceName))
            {
                throw new ArgumentNullException(nameof(namespaceName));
            }

            if (!Enum.IsDefined(typeof(NetworkType), networkType))
            {
                throw new InvalidEnumArgumentException(nameof(networkType), networkType.GetValue(),
                                                       typeof(NetworkType));
            }
            if (namespaceType != NamespaceType.ROOT_NAMESPACE && namespaceType != NamespaceType.SUB_NAMESPACE)
            {
                throw new ArgumentOutOfRangeException(nameof(namespaceType));
            }
            if (namespaceType == NamespaceType.ROOT_NAMESPACE)
            {
                if (!duration.HasValue)
                {
                    throw new ArgumentNullException(nameof(duration));
                }
            }
            else
            {
                if (parentId == null)
                {
                    throw new ArgumentNullException(nameof(parentId));
                }
            }


            Duration      = duration;
            NamespaceName = namespaceName;
            NamespaceType = namespaceType;
            NamespaceId   = namespaceId;
            ParentId      = parentId;
        }
 /// <summary>
 /// Get value of the version field for serialization
 /// </summary>
 /// <returns>4 bytes</returns>
 protected int GetTxVersionSerialization()
 {
     return(TransactionMappingUtils.SerializeVersion(Version, NetworkType.GetValue()));
 }
 private static void NetworkTypeValueIsX(NetworkType networkType, int expectedValue)
 {
     networkType.GetValue().Should().Be(expectedValue);
 }