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); }
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); }