Skip to content

Commit

Permalink
fetch only specific chain vars (#254)
Browse files Browse the repository at this point in the history
* fetch only specific chain vars

* review changes
  • Loading branch information
tyler-whitman authored Nov 4, 2021
1 parent 35e28c6 commit b9cb8c0
Show file tree
Hide file tree
Showing 5 changed files with 134 additions and 29 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,5 @@ coverage
.idea
*.tgz
docs/
.yalc
yalc.lock
52 changes: 48 additions & 4 deletions packages/http/src/resources/Vars.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,60 @@
import type Client from '../Client'
import camelcaseKeys from 'camelcase-keys'
import type Client from '../Client'

interface TransactionVars {
txnFeeMultiplier?: number
dcPayloadSize?: number
stakingFeeTxnAssertLocationV1?: number
stakingFeeTxnAddGatewayV1?: number
}

export default class Vars {
private client!: Client

/**
* The chain vars needed for transaction configuration.
* @private
*/
private TXN_VARS: string[] = [
'txn_fee_multiplier',
'dc_payload_size',
'staking_fee_txn_assert_location_v1',
'staking_fee_txn_add_gateway_v1',
]

private baseUrl = '/vars'

constructor(client: Client) {
this.client = client
}

async get(): Promise<any> {
const url = `/vars`
const { data: { data: vars } } = await this.client.get(url)
/**
* Fetches the chain vars required to configure helium-js for blockchain transactions.
*/
async getTransactionVars(): Promise<TransactionVars> {
const { data: { data: vars } } = await this.client.get(this.baseUrl, { keys: this.TXN_VARS.join(',') })
return camelcaseKeys(vars)
}

/**
* Fetches the specific chain vars passed in keys. If called without keys it will fetch the
* transaction vars returned by {@link getTransactionVars}.
* @param keys array of chain vars to fetch eg 'poc_v4_prob_no_rssi'
*/
async get(keys: string[] = []): Promise<any> {
if (keys.length === 0) {
return this.getTransactionVars()
}
const { data: { data: vars } } = await this.client.get(this.baseUrl, { keys: keys.join(',') })
return camelcaseKeys(vars)
}

/**
* WARNING: This will be return over 10 MB of data.
* Fetches all chain vars.
*/
async getAll(): Promise<any> {
const { data: { data: vars } } = await this.client.get(this.baseUrl)
return camelcaseKeys(vars)
}
}
3 changes: 3 additions & 0 deletions packages/http/src/resources/__mocks__/varsMock.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const MOCK_CHAIN_VARS = '{"poc_v4_prob_no_rssi":0.5,"poc_addr_hash_byte_count":8,"min_score":0.15,"nonce":92,"max_antenna_gain":150,"assert_loc_txn_version":2,"var_gw_inactivity_threshold":600,"poc_v4_target_challenge_age":1000,"price_oracle_refresh_interval":10,"net_emissions_enabled":true,"sc_open_validation_bugfix":1,"dkg_penalty":1.0,"poc_challenge_sync_interval":90,"hip17_res_1":[2,100000,100000],"net_emissions_max_rate":3424000000,"witness_refresh_interval":200,"region_cn470_params":"CjUI4LLx5wEQyNAHGL8BIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CKDN_ecBEMjQBxi_ASImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAIKNQjg54noARDI0AcYvwEiJgoECAYQGQoECAUQGQoECAQQGQoECAMQQwoFCAIQiwEKBQgBEIACCjUIoIKW6AEQyNAHGL8BIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1COCcougBEMjQBxi_ASImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAIKNQigt67oARDI0AcYvwEiJgoECAYQGQoECAUQGQoECAQQGQoECAMQQwoFCAIQiwEKBQgBEIACCjUI4NG66AEQyNAHGL8BIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CKDsxugBEMjQBxi_ASImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAI","poc_challengers_percent":0.009,"region_ru864_params":"CjUIoL2EnAMQyNAHGKABIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CODXkJwDEMjQBxigASImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAIKNQig8pycAxDI0AcYoAEiJgoECAYQGQoECAUQGQoECAQQGQoECAMQQwoFCAIQiwEKBQgBEIACCjUI4IypnAMQyNAHGKABIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CKCntZwDEMjQBxigASImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAIKNQiguameAxDI0AcYoAEiJgoECAYQGQoECAUQGQoECAQQGQoECAMQQwoFCAIQiwEKBQgBEIACCjUI4NO1ngMQyNAHGKABIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAg","election_cluster_res":4,"dc_percent":0.35,"poc_v4_prob_rssi_wt":0.0,"sc_overcommit":2,"min_antenna_gain":10,"poc_good_bucket_low":-130,"region_as923_1_params":"CjUIgNSbuAMQyNAHGKABIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CMDup7gDEMjQBxigASImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAIKNQiAibS4AxDI0AcYoAEiJgoECAYQGQoECAUQGQoECAQQGQoECAMQQwoFCAIQiwEKBQgBEIACCjUIwKPAuAMQyNAHGKABIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CIC-zLgDEMjQBxigASImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAIKNQjA2Ni4AxDI0AcYoAEiJgoECAYQGQoECAUQGQoECAQQGQoECAMQQwoFCAIQiwEKBQgBEIACCjUIgPPkuAMQyNAHGKABIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CMCN8bgDEMjQBxigASImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAI","poc_v4_prob_count_wt":0.0,"validator_liveness_interval":100,"poc_v4_prob_good_rssi":1.0,"poc_v4_target_prob_score_wt":0.0,"election_bba_penalty":0.1,"dataonly_gateway_capabilities_mask":1,"hip17_res_0":[2,100000,100000],"sc_gc_interval":10,"poc_centrality_wt":0.5,"price_oracle_height_delta":10,"poc_witnesses_percent":0.2008,"consensus_percent":0.06,"poc_v4_target_prob_edge_wt":0.0,"staking_fee_txn_assert_location_dataonly_gateway_v1":500000,"election_replacement_slope":20,"transfer_hotspot_stale_poc_blocks":1200,"poc_v4_randomness_wt":0.5,"staking_fee_txn_add_dataonly_gateway_v1":1000000,"min_expire_within":15,"beta_decay":0.002,"hip15_tx_reward_unit_cap":2.0,"poc_challengees_percent":0.0502,"region_as923_4_params":"CjUIoMaztQMQyNAHGKABIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CODgv7UDEMjQBxigASImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAIKNQig-8u1AxDI0AcYoAEiJgoECAYQGQoECAUQGQoECAQQGQoECAMQQwoFCAIQiwEKBQgBEIACCjUI4JXYtQMQyNAHGKABIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CKCw5LUDEMjQBxigASImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAIKNQjgyvC1AxDI0AcYoAEiJgoECAYQGQoECAUQGQoECAQQGQoECAMQQwoFCAIQiwEKBQgBEIACCjUIoOX8tQMQyNAHGKABIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1COD_iLYDEMjQBxigASImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAI","poc_witness_consideration_limit":20,"vars_commit_delay":1,"region_in865_params":"CjUI5Jy_nAMQyNAHGKwCIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CIT905wDEMjQBxisAiImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAIKNQjow_ecAxDI0AcYrAIiJgoECAYQGQoECAUQGQoECAQQGQoECAMQQwoFCAIQiwEKBQgBEIAC","predicate_callback_fun":"version","hip17_res_12":[2,100000,100000],"penalty_history_limit":20160,"light_gateway_capabilities_mask":31,"election_restart_interval":5,"poc_v4_prob_time_wt":0.0,"poc_target_hex_parent_res":5,"poc_v4_parent_res":11,"block_version":"v1","hip17_res_11":[2,100000,100000],"poc_v5_target_prob_randomness_wt":1.0,"election_version":6,"hip17_res_6":[1,25,100],"election_restart_interval_range":3,"price_oracle_price_scan_delay":3600,"price_oracle_price_scan_max":90000,"allow_payment_v2_memos":true,"staking_keys_to_mode_mappings":{"14sKWeeYWQWrBSnLGq79uRQqZyw3Ldi7oBdxbF6a54QboTNBXDL":"full","14rb2UcfS9U89QmKswpZpjRCUVCVu1haSyqyGY486EvsYtvdJmR":"full","14iLrXUuGVhb7w1P8X3iBvRwoT9oemgbDonm5VVZJk56TdV8NV1":"full","14iC6N1HkqUjH7WEChHVQhPqJ1hbWBKpZXZVeHHykCA7tNDYF2C":"full","14h2zf1gEr9NmvDb2U53qucLN2jLrKU1ECBoxGnSnQ6tiT6V2kM":"full","14go8hvEDnotWTyhYv6Hu5PTnRUAQzJqbB6dsDm1oThkCcZe9zd":"full","14eUfY1GsjK4WH6uZYoeagnFtigBKdvPruAXLmc5UsUMEDj3yib":"full","14NBXJE5kAAZTMigY4dcjXSMG4CSqjYwvteQWwQsYhsu2TKN6AF":"full","14DdSjvEkBQ46xQ24LAtHwQkAeoUUZHfGCosgJe33nRQ6rZwPG3":"full","143QF5dTGyAg1FqaE85mPApvjauFU8fUy6wavirQfJJDgSkC4gn":"full","13y2EqUUzyQhQGtDSoXktz8m5jHNSiwAKLTYnHNxZq2uH5GGGym":"full","13v9iGhjvQUtVaZXcFFRCEbL1nPR4R8QJowBgMUcaGM2v1aV6mn":"full","13daGGWvDQyTyHFDCPz8zDSVTWgPNNfJ4oh31Teec4TRWfjMx53":"full","13Zni1he7KY9pUmkXMhEhTwfUpL9AcEV1m2UbbvFsrU9QPTMgE3":"full","13XuP2DjHEHVkKguDDZD2ev5AeqMLuJ8UQ44efEcDmVTnBcvc6F":"full","13Mpg5hCNjSxHJvWjaanwJPBuTXu1d4g5pGvGBkqQe3F8mAwXhK":"full","13MS2kZHU4h6wp3tExgoHdDFjBsb9HB9JBvcbK9XmfNyJ7jqzVv":"full","13LVwCqZEKLTVnf3sjGPY1NMkTE7fWtUVjmDfeuscMFgeK3f9pn":"full","13H6RpJojJjkqPRfzdrFBDbpYw4b3A6HyMxgGFRgXf31Nuwq4xJ":"full","13ENbEQPAvytjLnqavnbSAzurhGoCSNkGECMx7eHHDAfEaDirdY":"full","134C7Hn3vhfBLQZex4PVwtxQ2uPJH97h9YD2bhzy1W2XhMJyY6d":"full","12zX4jgDGMbJgRwmCfRNGXBuphkQRqkUTcLzYHTQvd4Qgu8kiL4":"full"},"hip17_res_7":[2,5,20],"max_xor_filter_num":5,"region_eu433_params":"CjMI_PHTFBDI0AcYeSImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAIKMwicjtUUEMjQBxh5IiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgozCLyq1hQQyNAHGHkiJgoECAYQGQoECAUQGQoECAQQGQoECAMQQwoFCAIQiwEKBQgBEIAC","hip17_res_10":[2,1,1],"poc_reward_decay_rate":0.8,"allow_zero_amount":false,"sc_grace_blocks":10,"election_selection_pct":1,"validator_minimum_stake":1000000000000,"staking_fee_txn_add_gateway_v1":4000000,"tenure_penalty":0.5,"block_time":60000,"snapshot_interval":720,"securities_percent":0.33,"region_au915_params":"CjUIgISVtQMQyNAHGKwCIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CMCeobUDEMjQBxisAiImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAIKNQiAua21AxDI0AcYrAIiJgoECAYQGQoECAUQGQoECAQQGQoECAMQQwoFCAIQiwEKBQgBEIACCjUIwNO5tQMQyNAHGKwCIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CIDuxbUDEMjQBxisAiImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAIKNQjAiNK1AxDI0AcYrAIiJgoECAYQGQoECAUQGQoECAQQGQoECAMQQwoFCAIQiwEKBQgBEIACCjUIgKPetQMQyNAHGKwCIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CMC96rUDEMjQBxisAiImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAI","snapshot_version":1,"rewards_txn_version":2,"txn_fees":true,"predicate_threshold":0.95,"dkg_curve":"SS512","poc_challenge_interval":240,"poc_max_hop_cells":2000,"predicate_callback_mod":"miner","density_tgt_res":4,"batch_size":1500,"poc_per_hop_max_witnesses":18,"region_as923_2_params":"CjUIwOWttwMQyNAHGKABIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CICAurcDEMjQBxigASImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAIKNQjAmsa3AxDI0AcYoAEiJgoECAYQGQoECAUQGQoECAQQGQoECAMQQwoFCAIQiwEKBQgBEIACCjUIgLXStwMQyNAHGKABIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CMDP3rcDEMjQBxigASImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAIKNQiA6uq3AxDI0AcYoAEiJgoECAYQGQoECAUQGQoECAQQGQoECAMQQwoFCAIQiwEKBQgBEIACCjUIwIT3twMQyNAHGKABIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CICfg7gDEMjQBxigASImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAI","dc_payload_size":24,"region_us915_params":"CikI4NaBrwMQyNAHGOgCIhoKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgopCKDxja8DEMjQBxjoAiIaCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAIKKQjgi5qvAxDI0AcY6AIiGgoECAQQGQoECAMQQwoFCAIQiwEKBQgBEIACCikIoKamrwMQyNAHGOgCIhoKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgopCODAsq8DEMjQBxjoAiIaCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAIKKQig276vAxDI0AcY6AIiGgoECAQQGQoECAMQQwoFCAIQiwEKBQgBEIACCikI4PXKrwMQyNAHGOgCIhoKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgopCKCQ168DEMjQBxjoAiIaCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAI","full_gateway_capabilities_mask":63,"stake_withdrawal_cooldown":250000,"validator_penalty_filter":10.0,"poc_v4_target_score_curve":5,"alpha_decay":0.0035,"stake_withdrawal_max":60,"monthly_reward":250000000000000,"h3_max_grid_distance":120,"poc_v4_target_exclusion_cells":6000,"max_subnet_size":65536,"sc_only_count_open_active":true,"hip17_res_2":[2,100000,100000],"min_assert_h3_res":12,"staking_fee_txn_oui_v1_per_address":10000000,"max_payments":50,"staking_fee_txn_oui_v1":10000000,"max_open_sc":25,"poc_v4_exclusion_cells":8,"poc_v4_prob_bad_rssi":0.01,"witness_refresh_rand_n":1000,"h3_exclusion_ring_dist":6,"poc_typo_fixes":true,"hip17_res_3":[2,100000,100000],"hip17_interactivity_blocks":3600,"num_consensus_members":43,"staking_keys":["13ENbEQPAvytjLnqavnbSAzurhGoCSNkGECMx7eHHDAfEaDirdY","13daGGWvDQyTyHFDCPz8zDSVTWgPNNfJ4oh31Teec4TRWfjMx53","13Zni1he7KY9pUmkXMhEhTwfUpL9AcEV1m2UbbvFsrU9QPTMgE3","14rb2UcfS9U89QmKswpZpjRCUVCVu1haSyqyGY486EvsYtvdJmR","14sKWeeYWQWrBSnLGq79uRQqZyw3Ldi7oBdxbF6a54QboTNBXDL","12zX4jgDGMbJgRwmCfRNGXBuphkQRqkUTcLzYHTQvd4Qgu8kiL4","13MS2kZHU4h6wp3tExgoHdDFjBsb9HB9JBvcbK9XmfNyJ7jqzVv","14h2zf1gEr9NmvDb2U53qucLN2jLrKU1ECBoxGnSnQ6tiT6V2kM","13Mpg5hCNjSxHJvWjaanwJPBuTXu1d4g5pGvGBkqQe3F8mAwXhK","13LVwCqZEKLTVnf3sjGPY1NMkTE7fWtUVjmDfeuscMFgeK3f9pn","14NBXJE5kAAZTMigY4dcjXSMG4CSqjYwvteQWwQsYhsu2TKN6AF","134C7Hn3vhfBLQZex4PVwtxQ2uPJH97h9YD2bhzy1W2XhMJyY6d","13XuP2DjHEHVkKguDDZD2ev5AeqMLuJ8UQ44efEcDmVTnBcvc6F","14eUfY1GsjK4WH6uZYoeagnFtigBKdvPruAXLmc5UsUMEDj3yib","14go8hvEDnotWTyhYv6Hu5PTnRUAQzJqbB6dsDm1oThkCcZe9zd","14iC6N1HkqUjH7WEChHVQhPqJ1hbWBKpZXZVeHHykCA7tNDYF2C","13y2EqUUzyQhQGtDSoXktz8m5jHNSiwAKLTYnHNxZq2uH5GGGym","13v9iGhjvQUtVaZXcFFRCEbL1nPR4R8QJowBgMUcaGM2v1aV6mn","14DdSjvEkBQ46xQ24LAtHwQkAeoUUZHfGCosgJe33nRQ6rZwPG3","143QF5dTGyAg1FqaE85mPApvjauFU8fUy6wavirQfJJDgSkC4gn","14iLrXUuGVhb7w1P8X3iBvRwoT9oemgbDonm5VVZJk56TdV8NV1","13H6RpJojJjkqPRfzdrFBDbpYw4b3A6HyMxgGFRgXf31Nuwq4xJ"],"hip17_res_5":[1,100,400],"region_kr920_params":"CjUIoMLYtwMQyNAHGIwBIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CODc5LcDEMjQBxiMASImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAIKNQig9_C3AxDI0AcYjAEiJgoECAYQGQoECAUQGQoECAQQGQoECAMQQwoFCAIQiwEKBQgBEIACCjUI4JH9twMQyNAHGIwBIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CKCsibgDEMjQBxiMASImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAIKNQjgxpW4AxDI0AcYjAEiJgoECAYQGQoECAUQGQoECAQQGQoECAMQQwoFCAIQiwEKBQgBEIACCjUIoOGhuAMQyNAHGIwBIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAg","sc_max_actors":2000,"witness_redundancy":4,"region_as923_3_params":"CjUIwOmItQMQyNAHGKABIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CICElbUDEMjQBxigASImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAIKNQjAnqG1AxDI0AcYoAEiJgoECAYQGQoECAUQGQoECAQQGQoECAMQQwoFCAIQiwEKBQgBEIACCjUIgLmttQMQyNAHGKABIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CMDTubUDEMjQBxigASImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAIKNQiA7sW1AxDI0AcYoAEiJgoECAYQGQoECAUQGQoECAQQGQoECAMQQwoFCAIQiwEKBQgBEIACCjUIwIjStQMQyNAHGKABIiYKBAgGEBkKBAgFEBkKBAgEEBkKBAgDEEMKBQgCEIsBCgUIARCAAgo1CICj3rUDEMjQBxigASImCgQIBhAZCgQIBRAZCgQIBBAZCgQIAxBDCgUIAhCLAQoFCAEQgAI","data_aggregation_version":3,"staking_fee_txn_assert_location_light_gateway_v1":1000000,"reward_version":6,"election_seen_penalty":0.33,"election_removal_pct":40,"staking_fee_txn_add_light_gateway_v1":4000000,"hip17_res_4":[1,250,800],"hip17_res_9":[2,1,2],"txn_fee_multiplier":5000,"price_oracle_public_keys":["13CFFcmPtMvNQCpWQRXCTqXPnXtcsibDWVwiQRKpUCt4nqtF7RE","1431WVQvoV7RAJpoLCaBrTKner1Soed4bk69DddcrHUTCWHV6pj","136n9BEbreGUNgXJWtyzkBQcXiNzdMQ5GBoP8L2J6ZReFUAwUjy","14sqAYg1qxzjKTtyHLYZdH6yDtA3KgyoARhWN1cvLZ94dZw5vEc","145J6Aye86pKTJrUHREiXu7qqppZBcWY1bvWo8id7ZjxyuainYj","14EzXp4i1xYA7SNyim6R4J5aXN1yHYKNiPrrJ2WEvoDnxmLgaCg","147yRbowD1krUCC1DhhSMhpFEqnkwb26mHBow5nk9q43AakSHNA","13ZGgWX4Ajz9g9t3tM9ohDyso12o2E2CpYbMF2RBaT93rj7souE","1489qpKWAoLrURcaQEM1wJEViD4mk9WcqZMGhiTFfNGmaz8NFdX","14hntpRicek9pxzHBDPVWPwYHHmExrksaxzAsTjjstgLfnfG5Ve","14aQaRARuwLTLHLygiDNNapKZ7bcLSyXhHq9DeZ5kB2dnCxiiKv"],"max_xor_filter_size":102400,"validator_liveness_grace_period":50,"max_subnet_num":5,"min_subnet_size":8,"poc_path_limit":1,"election_interval":30,"sc_causality_fix":1,"hip17_res_8":[2,1,4],"validator_version":3,"staking_fee_txn_assert_location_v1":1000000,"poc_good_bucket_high":-70,"chain_vars_version":2,"poc_version":10,"max_staleness":100000,"election_replacement_factor":4,"h3_neighbor_res":12,"region_eu868_params":"CiMI4Mq7nQMQyNAHGKEBIhQKBAgGEEEKBQgDEIEBCgUIAhDuAQojCKDlx50DEMjQBxihASIUCgQIBhBBCgUIAxCBAQoFCAIQ7gEKIwjg_9OdAxDI0AcYoQEiFAoECAYQQQoFCAMQgQEKBQgCEO4BCiMIoJrgnQMQyNAHGKEBIhQKBAgGEEEKBQgDEIEBCgUIAhDuAQojCOC07J0DEMjQBxihASIUCgQIBhBBCgUIAxCBAQoFCAIQ7gEKIwigz_idAxDI0AcYoQEiFAoECAYQQQoFCAMQgQEKBQgCEO4BCiMI4OmEngMQyNAHGKEBIhQKBAgGEEEKBQgDEIEBCgUIAhDuAQojCKCEkZ4DEMjQBxihASIUCgQIBhBBCgUIAxCBAQoFCAIQ7gE","sc_version":2}'

export default MOCK_CHAIN_VARS
94 changes: 69 additions & 25 deletions packages/http/src/resources/__tests__/Vars.spec.ts
Original file line number Diff line number Diff line change
@@ -1,36 +1,80 @@
import nock from 'nock'
import Client from '../../Client'
import MOCK_CHAIN_VARS from '../__mocks__/varsMock'

const varsFixture = () => ({
election_seen_penalty: 0.0033333,
election_removal_pct: 40,
price_oracle_public_keys: [
'13Btezbvbwr9LhKmDQLgBnJUgjhZighEjNPLeu79dqBbmXRwoWm',
'13CFFcmPtMvNQCpWQRXCTqXPnXtcsibDWVwiQRKpUCt4nqtF7RE',
'1431WVQvoV7RAJpoLCaBrTKner1Soed4bk69DddcrHUTCWHV6pj',
'136n9BEbreGUNgXJWtyzkBQcXiNzdMQ5GBoP8L2J6ZReFUAwUjy',
'14sqAYg1qxzjKTtyHLYZdH6yDtA3KgyoARhWN1cvLZ94dZw5vEc',
'145J6Aye86pKTJrUHREiXu7qqppZBcWY1bvWo8id7ZjxyuainYj',
'13dUGHis1PdrSwxdseoyZKzQhc8WuWcueAWdT95sDVGDNhGRWV9',
'14EzXp4i1xYA7SNyim6R4J5aXN1yHYKNiPrrJ2WEvoDnxmLgaCg',
'147yRbowD1krUCC1DhhSMhpFEqnkwb26mHBow5nk9q43AakSHNA',
],
max_xor_filter_size: 102400,
max_subnet_num: 5,
min_subnet_size: 8,
})
const varsFixture = (keys: string[] = []) => {
const vars = JSON.parse(MOCK_CHAIN_VARS)
if (keys.length === 0) {
return vars
}
return Object.keys(vars)
.filter((key) => keys.includes(key))
.reduce((res, key) => Object.assign(res, { [key]: vars[key] }), {})
}

describe('get vars', () => {
nock('https://api.helium.io').get('/v1/vars').reply(200, {
data: varsFixture(),
nock('https://api.helium.io')
.get('/v1/vars')
.reply(200, {
data: varsFixture(),
})

nock('https://api.helium.io')
.get('/v1/vars?keys=txn_fee_multiplier%2Cdc_payload_size%2Cstaking_fee_txn_assert_location_v1%2Cstaking_fee_txn_add_gateway_v1')
.reply(200, {
data: varsFixture([
'txn_fee_multiplier',
'dc_payload_size',
'staking_fee_txn_assert_location_v1',
'staking_fee_txn_add_gateway_v1',
]),
})

nock('https://api.helium.io')
.get('/v1/vars?keys=poc_v4_prob_no_rssi')
.reply(200, {
data: varsFixture([
'poc_v4_prob_no_rssi',
]),
})

nock('https://api.helium.io')
.get('/v1/vars?keys=poc_v4_prob_no_rssi%2Cpoc_addr_hash_byte_count')
.reply(200, {
data: varsFixture([
'poc_v4_prob_no_rssi',
'poc_addr_hash_byte_count',
]),
})

it('getAll retrieves all chain vars', async () => {
const client = new Client()
const vars = await client.vars.getAll()
expect(Object.keys(vars).length).toBe(158)
})

it('retrieves chain vars', async () => {
it('get retrieves txn chain vars by default', async () => {
const client = new Client()
const vars = await client.vars.get()
expect(vars.electionRemovalPct).toBe(40)
expect(vars.priceOraclePublicKeys[0]).toBe(
'13Btezbvbwr9LhKmDQLgBnJUgjhZighEjNPLeu79dqBbmXRwoWm',
)
expect(vars.txnFeeMultiplier).toBe(5000)
expect(vars.dcPayloadSize).toBe(24)
expect(vars.stakingFeeTxnAssertLocationV1).toBe(1000000)
expect(vars.stakingFeeTxnAddGatewayV1).toBe(4000000)
expect(Object.keys(vars).length).toBe(4)
})

it('get retrieves one specific chain var', async () => {
const client = new Client()
const vars = await client.vars.get(['poc_v4_prob_no_rssi'])
expect(vars.pocV4ProbNoRssi).toBe(0.5)
expect(Object.keys(vars).length).toBe(1)
})

it('get retrieves multiple specific chain vars', async () => {
const client = new Client()
const vars = await client.vars.get(['poc_v4_prob_no_rssi', 'poc_addr_hash_byte_count'])
expect(vars.pocV4ProbNoRssi).toBe(0.5)
expect(vars.pocAddrHashByteCount).toBe(8)
expect(Object.keys(vars).length).toBe(2)
})
})
12 changes: 12 additions & 0 deletions packages/http/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@
# yarn lockfile v1


"@helium/currency@^3.45.0":
version "3.45.0"
resolved "https://registry.yarnpkg.com/@helium/currency/-/currency-3.45.0.tgz#326933225047601f447209fb9c77c6d4b114c381"
integrity sha512-6hajnB+L5OQgbQJyGzzYrHlcpRnt1j9thjt+zKhLP672VgfqJWaBs5unI+yhqHvF3JPB2/DsLj3/oT4hL0z84A==
dependencies:
bignumber.js "^9.0.0"

"@types/[email protected]":
version "6.9.5"
resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b"
Expand All @@ -14,6 +21,11 @@ axios@^0.21.1:
dependencies:
follow-redirects "^1.10.0"

bignumber.js@^9.0.0:
version "9.0.1"
resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5"
integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==

camelcase-keys@^6.2.2:
version "6.2.2"
resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0"
Expand Down

0 comments on commit b9cb8c0

Please sign in to comment.