/
extract.ts
87 lines (81 loc) · 2.1 KB
/
extract.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
77
78
79
80
81
82
83
84
85
86
87
import { CONST, tx, u } from "@cityofzion/neon-core";
const requiresProcessing = [
tx.TxAttrUsage.Description,
tx.TxAttrUsage.DescriptionUrl,
tx.TxAttrUsage.Remark,
tx.TxAttrUsage.Remark2,
tx.TxAttrUsage.Remark3,
tx.TxAttrUsage.Remark4,
tx.TxAttrUsage.Remark5,
tx.TxAttrUsage.Remark6,
tx.TxAttrUsage.Remark7,
tx.TxAttrUsage.Remark8,
tx.TxAttrUsage.Remark9,
tx.TxAttrUsage.Remark10,
tx.TxAttrUsage.Remark11,
tx.TxAttrUsage.Remark12,
tx.TxAttrUsage.Remark13,
tx.TxAttrUsage.Remark14,
tx.TxAttrUsage.Remark15
];
export function extractAsset(params: {
[key: string]: string;
}): string | undefined {
if (!params.asset) {
return undefined;
}
switch (params.asset) {
case "neo":
return CONST.ASSET_ID.NEO;
case "gas":
return CONST.ASSET_ID.GAS;
default:
return params.asset;
}
}
export function extractAmount(params: {
[key: string]: string;
}): number | undefined {
if (!params.amount) {
return undefined;
}
return parseFloat(params.amount);
}
function processAscii(data: string): string {
return u.str2hexstring(decodeURIComponent(data));
}
function matchAttribute(
key: string,
data: string
): tx.TransactionAttributeLike | undefined {
const camelCasedKey = key.replace(/^[a-z]/, c => c.toUpperCase());
if (camelCasedKey in tx.TxAttrUsage) {
const usage = tx.TxAttrUsage[camelCasedKey as keyof typeof tx.TxAttrUsage];
return {
usage,
data: requiresProcessing.indexOf(usage) >= 0 ? processAscii(data) : data
};
}
switch (key) {
case "ecdh02":
return {
usage: tx.TxAttrUsage.ECDH02,
data
};
case "ecdh03":
return {
usage: tx.TxAttrUsage.ECDH03,
data
};
default:
return undefined;
}
}
export function extractAttributes(params: {
[key: string]: string;
}): tx.TransactionAttributeLike[] {
const attributes = Object.keys(params).map(key =>
matchAttribute(key, params[key])
);
return attributes.filter(a => a) as tx.TransactionAttributeLike[];
}