/
generateAliasActivity.ts
76 lines (68 loc) · 2.77 KB
/
generateAliasActivity.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import { IProcessedTransaction } from '../../interfaces'
import { convertHexAddressToBech32, outputContainsValue, hashOutputId } from '..'
import { ActivityType, AliasSubtype } from '@core/wallet/enums'
import { ADDRESS_TYPE_ALIAS, EMPTY_HEX_ID, OUTPUT_TYPE_ALIAS } from '@core/wallet/constants'
import { IAliasOutput } from '@iota/types'
import { AliasActivity } from '@core/wallet/types'
import {
getAmountFromOutput,
getAsyncDataFromOutput,
getGovernorAddressFromAliasOutput,
getMetadataFromOutput,
getSendingInformation,
getStateControllerAddressFromAliasOutput,
getStorageDepositFromOutput,
getTagFromOutput,
} from './helper'
import { IAccountState } from '@core/account'
export function generateAliasActivity(
processedTransaction: IProcessedTransaction,
account: IAccountState
): AliasActivity {
const { outputs, transactionInputs, transactionId, claimingData, time, inclusionState } = processedTransaction
const wrappedOutput = outputs.find((output) => output.output.type === OUTPUT_TYPE_ALIAS)
const output = wrappedOutput.output as IAliasOutput
const outputId = wrappedOutput.outputId
const id = outputId || transactionId
const { storageDeposit: _storageDeposit, giftedStorageDeposit } = getStorageDepositFromOutput(output)
const storageDeposit = getAmountFromOutput(output) + _storageDeposit
const governorAddress = getGovernorAddressFromAliasOutput(output)
const stateControllerAddress = getStateControllerAddressFromAliasOutput(output)
const aliasId = getAliasId(output, outputId)
const aliasSubtype = output.aliasId === EMPTY_HEX_ID ? AliasSubtype.Created : AliasSubtype.Other
const isHidden = false
const isAssetHidden = false
const containsValue = outputContainsValue(processedTransaction, account)
const inputs = transactionInputs
const metadata = getMetadataFromOutput(output)
const tag = getTagFromOutput(output)
const asyncData = getAsyncDataFromOutput(output, outputId, claimingData, account)
const sendingInfo = getSendingInformation(processedTransaction, output, account)
return {
type: ActivityType.Alias,
id,
outputId,
transactionId,
aliasId,
aliasSubtype,
storageDeposit,
giftedStorageDeposit,
governorAddress,
stateControllerAddress,
isHidden,
isAssetHidden,
inputs,
time,
metadata,
tag,
inclusionState,
containsValue,
asyncData,
...sendingInfo,
}
}
function getAliasId(output: IAliasOutput, outputId: string): string {
const isNewAlias = output.aliasId === EMPTY_HEX_ID
const aliasId = isNewAlias ? hashOutputId(outputId) : output.aliasId
return convertHexAddressToBech32(ADDRESS_TYPE_ALIAS, aliasId)
}