Пример #1
0
        public Metadata Apply(JObject input)
        {
            var      metadata     = input["metadata"].ToObject <JObject>();
            var      metadataType = MetadataTypeExtension.GetRawValue(metadata["metadataType"].ToObject <int>());
            var      fields       = metadata["fields"].ToObject <List <FieldDTO> >();
            var      fieldList    = fields.Select(f => new Field(f.Key, f.Value)).ToList();
            Metadata metadataInfo = null;

            switch (metadataType)
            {
            case MetadataType.ACCOUNT:
                var address = Address.CreateFromHex(metadata["metadataId"].ToObject <string>());
                metadataInfo = new AddressMetadata(fieldList, address);
                break;

            case MetadataType.NAMESPACE:
                var namespaceId = new NamespaceId(metadata["metadataId"].ToObject <UInt64DTO>().ToUInt64());
                metadataInfo = new NamespaceMetadata(fieldList, namespaceId);
                break;

            case MetadataType.MOSAIC:
                var mosaicId = new MosaicId(metadata["metadataId"].ToObject <UInt64DTO>().ToUInt64());
                metadataInfo = new MosaicMetadata(fieldList, mosaicId);
                break;

            case MetadataType.NONE:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(metadataInfo);
        }
Пример #2
0
        private static ModifyMetadataTransaction ToModifyMetadataTransaction(JObject tx, TransactionInfo txInfo)
        {
            var transaction = tx["transaction"].ToObject <JObject>();
            var version     = transaction["version"];

            //Bug - It seems the dotnetcore does not
            //understand the Integer.
            //The workaround it to double cast the version
            int versionValue;

            try
            {
                versionValue = (int)((uint)version);
            }
            catch (Exception)
            {
                versionValue = (int)version;
            }

            var network   = TransactionMappingUtils.ExtractNetworkType(versionValue);
            var txVersion = TransactionMappingUtils.ExtractTransactionVersion(versionValue);
            var deadline  = new Deadline(transaction["deadline"].ToObject <UInt64DTO>().ToUInt64());
            var maxFee    = transaction["maxFee"]?.ToObject <UInt64DTO>().ToUInt64();
            var signature = transaction["signature"].ToObject <string>();
            var signer    = new PublicAccount(transaction["signer"].ToObject <string>(), network);
            var type      = EntityTypeExtension.GetRawValue(transaction["type"].ToObject <int>());
            var metaType  = MetadataTypeExtension.GetRawValue(transaction["metadataType"].ToObject <int>());


            var modifications    = transaction["modifications"];
            var modificationList = modifications == null
                ? new List <MetadataModification>()
                : modifications.Select(e =>
            {
                var modificationType =
                    MetadataModificationTypeExtension.GetRawValue(e["modificationType"].ToObject <int>());
                var key   = e["key"].ToObject <string>();
                var value = e["value"]?.ToObject <string>();
                MetadataModification metadataModification = null;
                switch (modificationType)
                {
                case MetadataModificationType.ADD:
                    metadataModification = MetadataModification.Add(key, value);
                    break;

                case MetadataModificationType.REMOVE:
                    metadataModification = MetadataModification.Remove(key);
                    break;
                }

                return(metadataModification);
            }).ToList();

            ModifyMetadataTransaction modifyMetadataTransaction = null;

            switch (type)
            {
            case EntityType.MODIFY_ADDRESS_METADATA:
                var address = Address.CreateFromHex(transaction["metadataId"].ToObject <string>());
                modifyMetadataTransaction = new ModifyMetadataTransaction(
                    network, txVersion, type, deadline, maxFee, metaType, null, address,
                    modificationList, signature, signer, txInfo);
                break;

            case EntityType.MODIFY_MOSAIC_METADATA:
                var mosaicId = transaction["metadataId"].ToObject <UInt64DTO>().ToUInt64();
                modifyMetadataTransaction = new ModifyMetadataTransaction(
                    network, txVersion, type, deadline, maxFee, metaType, mosaicId, null,
                    modificationList, signature, signer, txInfo);
                break;

            case EntityType.MODIFY_NAMESPACE_METADATA:
                var namespaceId = transaction["metadataId"].ToObject <UInt64DTO>().ToUInt64();
                modifyMetadataTransaction = new ModifyMetadataTransaction(
                    network, txVersion, type, deadline, maxFee, metaType, namespaceId, null,
                    modificationList, signature, signer, txInfo);
                break;
            }

            return(modifyMetadataTransaction);
        }