@tech-bureau/mijin-catapult-tools
Version:
This tool is for easy operation of mijin Catapult(v.2)
246 lines (241 loc) • 10.5 kB
text/typescript
import {
AccountAddressRestrictionTransaction,
AccountOperationRestrictionTransaction,
Convert,
HashLockTransaction,
MosaicAliasTransaction,
MosaicDefinitionTransaction,
MosaicMetadataTransaction,
MosaicSupplyChangeTransaction,
MultisigAccountModificationTransaction,
NamespaceMetadataTransaction,
NamespaceRegistrationTransaction,
SecretLockTransaction,
SecretProofTransaction,
Transaction,
TransactionType,
TransferTransaction,
MessageType,
Account,
AddressAliasTransaction,
MosaicGlobalRestrictionTransaction,
} from '@tech-bureau/symbol-sdk'
import { TransactionInfoDto } from '../types/TransactionInfoDto'
import Constants from '../constants'
import MessageServices from './MessageServices'
import AccountServices from './AccountServices'
export default class TransactionCheckServicesServices {
constructor() {}
static aggregateCheck(tx: Transaction): boolean {
return tx.type === TransactionType.AGGREGATE_COMPLETE || tx.type === TransactionType.AGGREGATE_BONDED ? true : false
}
static format(tx: Transaction, account?: Account): TransactionInfoDto {
const defaultTx = {
type: Constants.TransactionType[tx.type],
network: Constants.NetworkType[tx.networkType],
signerAddress: tx.signer ? tx.signer?.address.plain() : '',
}
if (tx.type === TransactionType.TRANSFER) {
const transferTx = tx as TransferTransaction
return {
...defaultTx,
mosaics: transferTx.mosaics.map((mosaic) => {
return { mosaicId: mosaic.id.toHex(), amount: mosaic.amount.compact() }
}),
message: transferTx.message
? transferTx.message.type === MessageType.EncryptedMessage && account && transferTx.signer
? MessageServices.createDecrypt(
transferTx.message,
AccountServices.createPublicAccount(transferTx.signer.publicKey, transferTx.networkType),
account
).payload
: transferTx.message.payload
: '',
}
} else if (tx.type === TransactionType.MOSAIC_DEFINITION) {
const mosaicDefinitionTx = tx as MosaicDefinitionTransaction
return {
...defaultTx,
mosaicDifinition: {
mosaicId: mosaicDefinitionTx.mosaicId.toHex(),
divisibility: mosaicDefinitionTx.divisibility,
duration: mosaicDefinitionTx.duration.compact(),
flags: {
transferable: mosaicDefinitionTx.flags.transferable,
supplyMutable: mosaicDefinitionTx.flags.supplyMutable,
restrictable: mosaicDefinitionTx.flags.restrictable,
revokable: mosaicDefinitionTx.flags.revokable,
},
},
}
} else if (tx.type === TransactionType.MOSAIC_ALIAS) {
const mosaicAliasTx = tx as MosaicAliasTransaction
return {
...defaultTx,
mosaicAlias: {
mosaicId: mosaicAliasTx.mosaicId.toHex(),
namespaceId: mosaicAliasTx.namespaceId.toHex(),
alias: Constants.AliasAction[mosaicAliasTx.aliasAction],
},
}
} else if (tx.type === TransactionType.MOSAIC_SUPPLY_CHANGE) {
const mosaicSupplyChangeTx = tx as MosaicSupplyChangeTransaction
return {
...defaultTx,
mosaicSupplyChange: {
mosaicId: mosaicSupplyChangeTx.mosaicId.toHex(),
delta: mosaicSupplyChangeTx.delta.compact(),
},
}
} else if (tx.type === TransactionType.MOSAIC_METADATA) {
const mosaicMetadataTx = tx as MosaicMetadataTransaction
return {
...defaultTx,
mosaicMetadata: {
mosaicId: mosaicMetadataTx.targetMosaicId.toHex(),
metadataKey: mosaicMetadataTx.scopedMetadataKey.toHex(),
metadataValue: Convert.uint8ToUtf8(mosaicMetadataTx.value),
},
}
} else if (tx.type === TransactionType.ACCOUNT_METADATA) {
const accountMetadataTx = tx as MosaicMetadataTransaction
return {
...defaultTx,
accountMetadata: {
targetAddress: accountMetadataTx.targetAddress.plain(),
metadataKey: accountMetadataTx.scopedMetadataKey.toHex(),
metadataValue: Convert.uint8ToUtf8(accountMetadataTx.value),
},
}
} else if (tx.type === TransactionType.ACCOUNT_ADDRESS_RESTRICTION) {
const accountAddressRestrictionTx = tx as AccountAddressRestrictionTransaction
return {
...defaultTx,
accountAddressRestriction: {
restrictionFlags: Constants.AddressRestrictionFlag[accountAddressRestrictionTx.restrictionFlags],
restrictionAdditions: accountAddressRestrictionTx.restrictionAdditions
? accountAddressRestrictionTx.restrictionAdditions.map((addition) => addition.plain())
: [],
restrictionDeletions: accountAddressRestrictionTx.restrictionDeletions
? accountAddressRestrictionTx.restrictionDeletions.map((deletion) => deletion.plain())
: [],
},
}
} else if (tx.type === TransactionType.ACCOUNT_OPERATION_RESTRICTION) {
const accountOperationRestrictionTx = tx as AccountOperationRestrictionTransaction
return {
...defaultTx,
accountOperationRestriction: {
restrictionFlags: Constants.OperationRestrictionFlag[accountOperationRestrictionTx.restrictionFlags],
restrictionAdditions: accountOperationRestrictionTx.restrictionAdditions
? accountOperationRestrictionTx.restrictionAdditions.map((addition) => Constants.TransactionType[addition])
: [],
restrictionDeletions: accountOperationRestrictionTx.restrictionDeletions
? accountOperationRestrictionTx.restrictionDeletions.map((deletion) => Constants.TransactionType[deletion])
: [],
},
}
} else if (tx.type === TransactionType.NAMESPACE_REGISTRATION) {
const namespaceRegistrationTx = tx as NamespaceRegistrationTransaction
return {
...defaultTx,
namespaceRegistration: {
name: namespaceRegistrationTx.namespaceName,
registrationType: Constants.NamespaceRegistrationType[namespaceRegistrationTx.registrationType],
namespaceId: namespaceRegistrationTx.namespaceId.toHex(),
parentId: namespaceRegistrationTx.parentId ? namespaceRegistrationTx.parentId.toHex() : 'none',
duration: namespaceRegistrationTx.duration ? namespaceRegistrationTx.duration.compact() : 0,
},
}
} else if (tx.type === TransactionType.NAMESPACE_METADATA) {
const namespaceMetadataTx = tx as NamespaceMetadataTransaction
return {
...defaultTx,
namespaceMetadata: {
namespaceId: namespaceMetadataTx.targetNamespaceId.toHex(),
metadataKey: namespaceMetadataTx.scopedMetadataKey.toHex(),
metadataValue: Convert.uint8ToUtf8(namespaceMetadataTx.value),
},
}
} else if (tx.type === TransactionType.HASH_LOCK) {
const hashLockTx = tx as HashLockTransaction
return {
...defaultTx,
hashLock: {
hash: hashLockTx.hash,
duration: hashLockTx.duration.compact(),
},
}
} else if (tx.type === TransactionType.SECRET_LOCK) {
const secretLockTx = tx as SecretLockTransaction
return {
...defaultTx,
secretLock: {
secret: secretLockTx.secret,
duration: secretLockTx.duration.compact(),
hashAlgorithm: Constants.HashAlgorithmType[secretLockTx.hashAlgorithm],
recipientAddress: secretLockTx.recipientAddress.plain(),
},
}
} else if (tx.type === TransactionType.SECRET_PROOF) {
const secretProofTx = tx as SecretProofTransaction
return {
...defaultTx,
secretProof: {
secret: secretProofTx.secret,
hashAlgorithm: Constants.HashAlgorithmType[secretProofTx.hashAlgorithm],
proof: secretProofTx.proof,
recipientAddress: secretProofTx.recipientAddress.plain(),
},
}
} else if (tx.type === TransactionType.MULTISIG_ACCOUNT_MODIFICATION) {
const multisigAccountModificationTx = tx as MultisigAccountModificationTransaction
return {
...defaultTx,
multisigAccountModification: {
minApprovalDelta: multisigAccountModificationTx.minApprovalDelta,
minRemovalDelta: multisigAccountModificationTx.minRemovalDelta,
addressAdditions: multisigAccountModificationTx.addressAdditions
? multisigAccountModificationTx.addressAdditions.map((address) => address.plain())
: [],
addressDeletions: multisigAccountModificationTx.addressDeletions
? multisigAccountModificationTx.addressDeletions.map((address) => address.plain())
: [],
},
}
} else if (tx.type === TransactionType.ADDRESS_ALIAS) {
const addressAliasTx = tx as AddressAliasTransaction
return {
...defaultTx,
addressAlias: {
address: addressAliasTx.address.plain(),
namespaceId: addressAliasTx.namespaceId ? addressAliasTx.namespaceId.toHex() : 'none',
aliasAction: Constants.AliasAction[addressAliasTx.aliasAction],
},
}
} else if (tx.type === TransactionType.MOSAIC_GLOBAL_RESTRICTION) {
const mosaicGlobalRestrictionTx = tx as MosaicGlobalRestrictionTransaction
return {
...defaultTx,
mosaicGlobalRestriction: {
mosaicId: mosaicGlobalRestrictionTx.mosaicId.toHex(),
referenceMosaicId: mosaicGlobalRestrictionTx.referenceMosaicId.toHex(),
restrictionKey: mosaicGlobalRestrictionTx.restrictionKey.toHex(),
previousRestrictionValue: mosaicGlobalRestrictionTx.previousRestrictionValue.compact(),
newRestrictionValue: mosaicGlobalRestrictionTx.newRestrictionValue.compact(),
previousRestrictionType: Constants.MosaicRestrictionType[mosaicGlobalRestrictionTx.previousRestrictionType],
newRestrictionType: Constants.MosaicRestrictionType[mosaicGlobalRestrictionTx.newRestrictionType],
},
}
// } else if (tx.type === TransactionType.ACCOUNT_KEY_LINK) {
// } else if (tx.type === TransactionType.NODE_KEY_LINK) {
// } else if (tx.type === TransactionType.VOTING_KEY_LINK) {
// } else if (tx.type === TransactionType.VRF_KEY_LINK) {
} else {
return {
...defaultTx,
txInfo: tx,
}
}
}
}