Skip to content

Commit 3977b68

Browse files
committed
refactor: move complexity constants to new file
1 parent 0e90227 commit 3977b68

File tree

3 files changed

+242
-211
lines changed

3 files changed

+242
-211
lines changed

src/vms/pvm/txs/fee/complexity.test.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@ import {
1717
} from '../../../../serializable/pvm';
1818
import { hexToBuffer, unpackWithManager } from '../../../../utils';
1919
import { FeeDimensions, makeDimensions } from '../../../common/fees/dimensions';
20+
import {
21+
authComplexity,
22+
inputComplexity,
23+
outputComplexity,
24+
ownerComplexity,
25+
signerComplexity,
26+
txComplexity,
27+
} from './complexity';
2028
import {
2129
INTRINSIC_ADD_PERMISSIONLESS_DELEGATOR_TX_COMPLEXITIES,
2230
INTRINSIC_ADD_PERMISSIONLESS_VALIDATOR_TX_COMPLEXITIES,
@@ -30,13 +38,7 @@ import {
3038
INTRINSIC_INPUT_DB_WRITE,
3139
INTRINSIC_OUTPUT_DB_WRITE,
3240
INTRINSIC_TRANSFER_SUBNET_OWNERSHIP_TX_COMPLEXITIES,
33-
authComplexity,
34-
inputComplexity,
35-
outputComplexity,
36-
ownerComplexity,
37-
signerComplexity,
38-
txComplexity,
39-
} from './complexity';
41+
} from './constants';
4042

4143
const makeOutputOwners = (numOfAddresses = 0) =>
4244
new OutputOwners(

src/vms/pvm/txs/fee/complexity.ts

Lines changed: 27 additions & 204 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,3 @@
1-
import {
2-
PUBLIC_KEY_LENGTH,
3-
SIGNATURE_LENGTH as BLS_SIGNATURE_LENGTH,
4-
} from '../../../../crypto/bls';
5-
import { SIGNATURE_LENGTH } from '../../../../crypto/secp256k1';
61
import type { OutputOwners } from '../../../../serializable';
72
import { Input } from '../../../../serializable/fxs/secp256k1';
83
import {
@@ -50,205 +45,33 @@ import {
5045
} from '../../../common/fees/dimensions';
5146
import type { Serializable } from '../../../common/types';
5247
import type { Transaction } from '../../../common';
53-
54-
/**
55-
* Number of bytes per long.
56-
*/
57-
const LONG_LEN = 8;
58-
59-
const ID_LEN = 32;
60-
61-
/**
62-
* Number of bytes per short.
63-
*/
64-
const SHORT_LEN = 2;
65-
66-
const SHORT_ID_LEN = 20;
67-
68-
/**
69-
* Number of bytes per int.
70-
*/
71-
const INT_LEN = 4;
72-
73-
const INTRINSIC_VALIDATOR_BANDWIDTH =
74-
SHORT_ID_LEN + // Node ID (Short ID = 20)
75-
LONG_LEN + // Start
76-
LONG_LEN + // End
77-
LONG_LEN; // Weight
78-
79-
const INTRINSIC_SUBNET_VALIDATOR_BANDWIDTH =
80-
INTRINSIC_VALIDATOR_BANDWIDTH + // Validator
81-
ID_LEN; // Subnet ID (ID Length = 32)
82-
83-
const INTRINSIC_OUTPUT_BANDWIDTH =
84-
ID_LEN + // assetID
85-
INT_LEN; // output typeID
86-
87-
const INTRINSIC_STAKEABLE_LOCKED_OUTPUT_BANDWIDTH =
88-
LONG_LEN + // locktime
89-
INT_LEN; // output typeID
90-
91-
const INTRINSIC_SECP256K1_FX_OUTPUT_OWNERS_BANDWIDTH =
92-
LONG_LEN + // locktime
93-
INT_LEN + // threshold
94-
INT_LEN; // number of addresses
95-
96-
const INTRINSIC_SECP256K1_FX_OUTPUT_BANDWIDTH =
97-
LONG_LEN + // amount
98-
INTRINSIC_SECP256K1_FX_OUTPUT_OWNERS_BANDWIDTH;
99-
100-
const INTRINSIC_INPUT_BANDWIDTH =
101-
ID_LEN + // txID
102-
INT_LEN + // output index
103-
ID_LEN + // assetID
104-
INT_LEN + // input typeID
105-
INT_LEN; // credential typeID
106-
107-
const INTRINSIC_STAKEABLE_LOCKED_INPUT_BANDWIDTH =
108-
LONG_LEN + // locktime
109-
INT_LEN; // input typeID
110-
111-
const INTRINSIC_SECP256K1_FX_INPUT_BANDWIDTH =
112-
INT_LEN + // num indices
113-
INT_LEN; // num signatures
114-
115-
const INTRINSIC_SECP256K1_FX_TRANSFERABLE_INPUT_BANDWIDTH =
116-
LONG_LEN + // amount
117-
INTRINSIC_SECP256K1_FX_INPUT_BANDWIDTH;
118-
119-
const INTRINSIC_SECP256K1_FX_SIGNATURE_BANDWIDTH =
120-
INT_LEN + // Signature index
121-
SIGNATURE_LENGTH; // Signature
122-
123-
const INTRINSIC_POP_BANDWIDTH =
124-
PUBLIC_KEY_LENGTH + // Public key
125-
BLS_SIGNATURE_LENGTH; // Signature
126-
127-
export const INTRINSIC_INPUT_DB_READ = 1;
128-
export const INTRINSIC_INPUT_DB_WRITE = 1;
129-
export const INTRINSIC_OUTPUT_DB_WRITE = 1;
130-
131-
export const INTRINSIC_BASE_TX_COMPLEXITIES: Dimensions = {
132-
[FeeDimensions.Bandwidth]:
133-
2 + // codec version
134-
INT_LEN + // typeID
135-
INT_LEN + // networkID
136-
ID_LEN + // blockchainID
137-
INT_LEN + // number of outputs
138-
INT_LEN + // number of inputs
139-
INT_LEN + // length of memo
140-
INT_LEN, // number of credentials
141-
[FeeDimensions.DBRead]: 0,
142-
[FeeDimensions.DBWrite]: 0,
143-
[FeeDimensions.Compute]: 0,
144-
};
145-
146-
export const INTRINSIC_CREATE_CHAIN_TX_COMPLEXITIES: Dimensions = {
147-
[FeeDimensions.Bandwidth]:
148-
INTRINSIC_BASE_TX_COMPLEXITIES[FeeDimensions.Bandwidth] +
149-
ID_LEN + // Subnet ID
150-
SHORT_LEN + // Chain name length
151-
ID_LEN + // vmID
152-
INT_LEN + // num fIds
153-
INT_LEN + // genesis length
154-
INT_LEN + // subnetAuth typeID
155-
INT_LEN, // subnetAuthCredential typeID
156-
[FeeDimensions.DBRead]: 1,
157-
[FeeDimensions.DBWrite]: 1,
158-
[FeeDimensions.Compute]: 0,
159-
};
160-
161-
export const INTRINSIC_CREATE_SUBNET_TX_COMPLEXITIES: Dimensions = {
162-
[FeeDimensions.Bandwidth]:
163-
INTRINSIC_BASE_TX_COMPLEXITIES[FeeDimensions.Bandwidth] + INT_LEN, // owner typeID
164-
[FeeDimensions.DBRead]: 0,
165-
[FeeDimensions.DBWrite]: 1,
166-
[FeeDimensions.Compute]: 0,
167-
};
168-
169-
export const INTRINSIC_ADD_PERMISSIONLESS_VALIDATOR_TX_COMPLEXITIES: Dimensions =
170-
{
171-
[FeeDimensions.Bandwidth]:
172-
INTRINSIC_BASE_TX_COMPLEXITIES[FeeDimensions.Bandwidth] +
173-
INTRINSIC_VALIDATOR_BANDWIDTH + // Validator
174-
ID_LEN + // Subnet ID
175-
INT_LEN + // Signer typeID
176-
INT_LEN + // Num stake outs
177-
INT_LEN + // Validator rewards typeID
178-
INT_LEN + // Delegator rewards typeID
179-
INT_LEN, // Delegation shares
180-
[FeeDimensions.DBRead]: 1,
181-
[FeeDimensions.DBWrite]: 1,
182-
[FeeDimensions.Compute]: 0,
183-
};
184-
185-
export const INTRINSIC_ADD_PERMISSIONLESS_DELEGATOR_TX_COMPLEXITIES: Dimensions =
186-
{
187-
[FeeDimensions.Bandwidth]:
188-
INTRINSIC_BASE_TX_COMPLEXITIES[FeeDimensions.Bandwidth] +
189-
INTRINSIC_VALIDATOR_BANDWIDTH + // Validator
190-
ID_LEN + // Subnet ID
191-
INT_LEN + // Num stake outs
192-
INT_LEN, // Delegator rewards typeID
193-
[FeeDimensions.DBRead]: 1,
194-
[FeeDimensions.DBWrite]: 1,
195-
[FeeDimensions.Compute]: 0,
196-
};
197-
198-
export const INTRINSIC_ADD_SUBNET_VALIDATOR_TX_COMPLEXITIES: Dimensions = {
199-
[FeeDimensions.Bandwidth]:
200-
INTRINSIC_BASE_TX_COMPLEXITIES[FeeDimensions.Bandwidth] +
201-
INTRINSIC_SUBNET_VALIDATOR_BANDWIDTH + // Subnet Validator
202-
INT_LEN + // Subnet auth typeID
203-
INT_LEN, // Subnet auth credential typeID
204-
[FeeDimensions.DBRead]: 2,
205-
[FeeDimensions.DBWrite]: 1,
206-
[FeeDimensions.Compute]: 0,
207-
};
208-
209-
export const INTRINSIC_EXPORT_TX_COMPLEXITIES: Dimensions = {
210-
[FeeDimensions.Bandwidth]:
211-
INTRINSIC_BASE_TX_COMPLEXITIES[FeeDimensions.Bandwidth] +
212-
ID_LEN + // destination chain ID
213-
INT_LEN, // num exported outputs
214-
[FeeDimensions.DBRead]: 0,
215-
[FeeDimensions.DBWrite]: 0,
216-
[FeeDimensions.Compute]: 0,
217-
};
218-
219-
export const INTRINSIC_IMPORT_TX_COMPLEXITIES: Dimensions = {
220-
[FeeDimensions.Bandwidth]:
221-
INTRINSIC_BASE_TX_COMPLEXITIES[FeeDimensions.Bandwidth] +
222-
ID_LEN + // source chain ID
223-
INT_LEN, // num imported inputs
224-
[FeeDimensions.DBRead]: 0,
225-
[FeeDimensions.DBWrite]: 0,
226-
[FeeDimensions.Compute]: 0,
227-
};
228-
229-
export const INTRINSIC_REMOVE_SUBNET_VALIDATOR_TX_COMPLEXITIES: Dimensions = {
230-
[FeeDimensions.Bandwidth]:
231-
INTRINSIC_BASE_TX_COMPLEXITIES[FeeDimensions.Bandwidth] +
232-
SHORT_ID_LEN + // nodeID
233-
ID_LEN + // subnetID
234-
INT_LEN + // subnetAuth typeId
235-
INT_LEN, // subnetAuth credential typeId
236-
[FeeDimensions.DBRead]: 2,
237-
[FeeDimensions.DBWrite]: 1,
238-
[FeeDimensions.Compute]: 0,
239-
};
240-
241-
export const INTRINSIC_TRANSFER_SUBNET_OWNERSHIP_TX_COMPLEXITIES: Dimensions = {
242-
[FeeDimensions.Bandwidth]:
243-
INTRINSIC_BASE_TX_COMPLEXITIES[FeeDimensions.Bandwidth] +
244-
ID_LEN + // subnetID
245-
INT_LEN + // subnetAuth typeID
246-
INT_LEN + // owner typeID
247-
INT_LEN, // subnetAuth credential typeID
248-
[FeeDimensions.DBRead]: 1,
249-
[FeeDimensions.DBWrite]: 1,
250-
[FeeDimensions.Compute]: 0,
251-
};
48+
import {
49+
ID_LEN,
50+
INTRINSIC_ADD_PERMISSIONLESS_DELEGATOR_TX_COMPLEXITIES,
51+
INTRINSIC_ADD_PERMISSIONLESS_VALIDATOR_TX_COMPLEXITIES,
52+
INTRINSIC_ADD_SUBNET_VALIDATOR_TX_COMPLEXITIES,
53+
INTRINSIC_BASE_TX_COMPLEXITIES,
54+
INTRINSIC_CREATE_CHAIN_TX_COMPLEXITIES,
55+
INTRINSIC_CREATE_SUBNET_TX_COMPLEXITIES,
56+
INTRINSIC_EXPORT_TX_COMPLEXITIES,
57+
INTRINSIC_IMPORT_TX_COMPLEXITIES,
58+
INTRINSIC_INPUT_BANDWIDTH,
59+
INTRINSIC_INPUT_DB_READ,
60+
INTRINSIC_INPUT_DB_WRITE,
61+
INTRINSIC_OUTPUT_BANDWIDTH,
62+
INTRINSIC_OUTPUT_DB_WRITE,
63+
INTRINSIC_POP_BANDWIDTH,
64+
INTRINSIC_REMOVE_SUBNET_VALIDATOR_TX_COMPLEXITIES,
65+
INTRINSIC_SECP256K1_FX_INPUT_BANDWIDTH,
66+
INTRINSIC_SECP256K1_FX_OUTPUT_BANDWIDTH,
67+
INTRINSIC_SECP256K1_FX_OUTPUT_OWNERS_BANDWIDTH,
68+
INTRINSIC_SECP256K1_FX_SIGNATURE_BANDWIDTH,
69+
INTRINSIC_SECP256K1_FX_TRANSFERABLE_INPUT_BANDWIDTH,
70+
INTRINSIC_STAKEABLE_LOCKED_INPUT_BANDWIDTH,
71+
INTRINSIC_STAKEABLE_LOCKED_OUTPUT_BANDWIDTH,
72+
INTRINSIC_TRANSFER_SUBNET_OWNERSHIP_TX_COMPLEXITIES,
73+
SHORT_ID_LEN,
74+
} from './constants';
25275

25376
/**
25477
* Returns the complexity outputs add to a transaction.

0 commit comments

Comments
 (0)