|
| 1 | +[protocol] |
| 2 | +# Protocol version. |
| 3 | +version = '1.0.0' |
| 4 | +# Whether we need to clear latest blocks back to the switch block just before the activation point or not. |
| 5 | +hard_reset = false |
| 6 | +# This protocol version becomes active at this point. |
| 7 | +# |
| 8 | +# If it is a timestamp string, it represents the timestamp for the genesis block. This is the beginning of era 0. By |
| 9 | +# this time, a sufficient majority (> 50% + F/2 — see finality_threshold_fraction below) of validator nodes must be up |
| 10 | +# and running to start the blockchain. This timestamp is also used in seeding the pseudo-random number generator used |
| 11 | +# in contract-runtime for computing genesis post-state hash. |
| 12 | +# |
| 13 | +# If it is an integer, it represents an era ID, meaning the protocol version becomes active at the start of this era. |
| 14 | +activation_point = '${TIMESTAMP}' |
| 15 | +# Optional era ID in which the last emergency restart happened. |
| 16 | +#last_emergency_restart = 0 |
| 17 | + |
| 18 | +[network] |
| 19 | +# Human readable name for convenience; the genesis_hash is the true identifier. The name influences the genesis hash by |
| 20 | +# contributing to the seeding of the pseudo-random number generator used in contract-runtime for computing genesis |
| 21 | +# post-state hash. |
| 22 | +name = 'casper-example' |
| 23 | +# The maximum size of an acceptable networking message in bytes. Any message larger than this will |
| 24 | +# be rejected at the networking level. |
| 25 | +maximum_net_message_size = 23_068_672 |
| 26 | + |
| 27 | +[core] |
| 28 | +# Era duration. |
| 29 | +era_duration = '41seconds' |
| 30 | +# Minimum number of blocks per era. An era will take longer than `era_duration` if that is necessary to reach the |
| 31 | +# minimum height. |
| 32 | +minimum_era_height = 10 |
| 33 | +# Number of slots available in validator auction. |
| 34 | +validator_slots = 5 |
| 35 | +# Number of eras before an auction actually defines the set of validators. If you bond with a sufficient bid in era N, |
| 36 | +# you will be a validator in era N + auction_delay + 1. |
| 37 | +auction_delay = 3 |
| 38 | +# The period after genesis during which a genesis validator's bid is locked. |
| 39 | +locked_funds_period = '90days' |
| 40 | +# Default number of eras that need to pass to be able to withdraw unbonded funds. |
| 41 | +unbonding_delay = 14 |
| 42 | +# Round seigniorage rate represented as a fraction of the total supply. |
| 43 | +# |
| 44 | +# Annual issuance: 2% |
| 45 | +# Minimum round exponent: 12 |
| 46 | +# Ticks per year: 31536000000 |
| 47 | +# |
| 48 | +# (1+0.02)^((2^12)/31536000000)-1 is expressed as a fractional number below. |
| 49 | +round_seigniorage_rate = [15_959, 6_204_824_582_392] |
| 50 | +# Maximum number of associated keys for a single account. |
| 51 | +max_associated_keys = 100 |
| 52 | +# Maximum height of contract runtime call stack. |
| 53 | +max_runtime_call_stack_height = 12 |
| 54 | +# Maximum serialized size of values stored in global state. |
| 55 | +max_stored_value_size = 8_388_608 |
| 56 | +# Minimum allowed delegation amount in motes |
| 57 | +minimum_delegation_amount = 500_000_000_000 |
| 58 | + |
| 59 | +[highway] |
| 60 | +# A number between 0 and 1 representing the fault tolerance threshold as a fraction, used by the internal finalizer. |
| 61 | +# It is the fraction of validators that would need to equivocate to make two honest nodes see two conflicting blocks as |
| 62 | +# finalized: A higher value F makes it safer to rely on finalized blocks. It also makes it more difficult to finalize |
| 63 | +# blocks, however, and requires strictly more than (F + 1)/2 validators to be working correctly. |
| 64 | +finality_threshold_fraction = [1, 3] |
| 65 | +# Integer between 0 and 255. The power of two that is the number of milliseconds in the minimum round length, and |
| 66 | +# therefore the minimum delay between a block and its child. E.g. 14 means 2^14 milliseconds, i.e. about 16 seconds. |
| 67 | +minimum_round_exponent = 12 |
| 68 | +# Integer between 0 and 255. Must be greater than `minimum_round_exponent`. The power of two that is the number of |
| 69 | +# milliseconds in the maximum round length, and therefore the maximum delay between a block and its child. E.g. 19 |
| 70 | +# means 2^19 milliseconds, i.e. about 8.7 minutes. |
| 71 | +maximum_round_exponent = 19 |
| 72 | +# The factor by which rewards for a round are multiplied if the greatest summit has ≤50% quorum, i.e. no finality. |
| 73 | +# Expressed as a fraction (1/5 by default). |
| 74 | +reduced_reward_multiplier = [1, 5] |
| 75 | + |
| 76 | +[deploys] |
| 77 | +# The maximum number of Motes allowed to be spent during payment. 0 means unlimited. |
| 78 | +max_payment_cost = '0' |
| 79 | +# The duration after the deploy timestamp that it can be included in a block. |
| 80 | +max_ttl = '1day' |
| 81 | +# The maximum number of other deploys a deploy can depend on (require to have been executed before it can execute). |
| 82 | +max_dependencies = 10 |
| 83 | +# Maximum block size in bytes including deploys contained by the block. 0 means unlimited. |
| 84 | +max_block_size = 10_485_760 |
| 85 | +# Maximum deploy size in bytes. Size is of the deploy when serialized via ToBytes. |
| 86 | +max_deploy_size = 1_048_576 |
| 87 | +# The maximum number of non-transfer deploys permitted in a single block. |
| 88 | +block_max_deploy_count = 100 |
| 89 | +# The maximum number of wasm-less transfer deploys permitted in a single block. |
| 90 | +block_max_transfer_count = 1000 |
| 91 | +# The maximum number of approvals permitted in a single block. |
| 92 | +block_max_approval_count = 2600 |
| 93 | +# The upper limit of total gas of all deploys in a block. |
| 94 | +block_gas_limit = 10_000_000_000_000 |
| 95 | +# The limit of length of serialized payment code arguments. |
| 96 | +payment_args_max_length = 1024 |
| 97 | +# The limit of length of serialized session code arguments. |
| 98 | +session_args_max_length = 1024 |
| 99 | +# The minimum amount in motes for a valid native transfer. |
| 100 | +native_transfer_minimum_motes = 2_500_000_000 |
| 101 | + |
| 102 | +[wasm] |
| 103 | +# Amount of free memory (in 64kB pages) each contract can use for stack. |
| 104 | +max_memory = 64 |
| 105 | +# Max stack height (native WebAssembly stack limiter). |
| 106 | +max_stack_height = 188 |
| 107 | + |
| 108 | +[wasm.storage_costs] |
| 109 | +# Gas charged per byte stored in the global state. |
| 110 | +gas_per_byte = 630_000 |
| 111 | + |
| 112 | +[wasm.opcode_costs] |
| 113 | +# Bit operations multiplier. |
| 114 | +bit = 300 |
| 115 | +# Arithmetic add operations multiplier. |
| 116 | +add = 210 |
| 117 | +# Mul operations multiplier. |
| 118 | +mul = 240 |
| 119 | +# Div operations multiplier. |
| 120 | +div = 320 |
| 121 | +# Memory load operation multiplier. |
| 122 | +load = 2_500 |
| 123 | +# Memory store operation multiplier. |
| 124 | +store = 4_700 |
| 125 | +# Const store operation multiplier. |
| 126 | +const = 110 |
| 127 | +# Local operations multiplier. |
| 128 | +local = 390 |
| 129 | +# Global operations multiplier. |
| 130 | +global = 390 |
| 131 | +# Control flow operations multiplier. |
| 132 | +control_flow = 440 |
| 133 | +# Integer operations multiplier. |
| 134 | +integer_comparison = 250 |
| 135 | +# Conversion operations multiplier. |
| 136 | +conversion = 420 |
| 137 | +# Unreachable operation multiplier. |
| 138 | +unreachable = 270 |
| 139 | +# Nop operation multiplier. |
| 140 | +nop = 200 |
| 141 | +# Get current memory operation multiplier. |
| 142 | +current_memory = 290 |
| 143 | +# Grow memory cost, per page (64kb). |
| 144 | +grow_memory = 240_000 |
| 145 | +# Regular opcode cost. |
| 146 | +regular = 210 |
| 147 | + |
| 148 | +# Host function declarations are located in smart_contracts/contract/src/ext_ffi.rs |
| 149 | +[wasm.host_function_costs] |
| 150 | +add = { cost = 5_800, arguments = [0, 0, 0, 0] } |
| 151 | +add_associated_key = { cost = 9_000, arguments = [0, 0, 0] } |
| 152 | +add_contract_version = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } |
| 153 | +blake2b = { cost = 200, arguments = [0, 0, 0, 0] } |
| 154 | +call_contract = { cost = 4_500, arguments = [0, 0, 0, 0, 0, 420, 0] } |
| 155 | +call_versioned_contract = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0, 0] } |
| 156 | +create_contract_package_at_hash = { cost = 200, arguments = [0, 0] } |
| 157 | +create_contract_user_group = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0] } |
| 158 | +create_purse = { cost = 2_500_000_000, arguments = [0, 0] } |
| 159 | +disable_contract_version = { cost = 200, arguments = [0, 0, 0, 0] } |
| 160 | +get_balance = { cost = 3_800, arguments = [0, 0, 0] } |
| 161 | +get_blocktime = { cost = 330, arguments = [0] } |
| 162 | +get_caller = { cost = 380, arguments = [0] } |
| 163 | +get_key = { cost = 2_000, arguments = [0, 440, 0, 0, 0] } |
| 164 | +get_main_purse = { cost = 1_300, arguments = [0] } |
| 165 | +get_named_arg = { cost = 200, arguments = [0, 0, 0, 0] } |
| 166 | +get_named_arg_size = { cost = 200, arguments = [0, 0, 0] } |
| 167 | +get_phase = { cost = 710, arguments = [0] } |
| 168 | +get_system_contract = { cost = 1_100, arguments = [0, 0, 0] } |
| 169 | +has_key = { cost = 1_500, arguments = [0, 840] } |
| 170 | +is_valid_uref = { cost = 760, arguments = [0, 0] } |
| 171 | +load_named_keys = { cost = 42_000, arguments = [0, 0] } |
| 172 | +new_uref = { cost = 17_000, arguments = [0, 0, 590] } |
| 173 | +print = { cost = 20_000, arguments = [0, 4_600] } |
| 174 | +provision_contract_user_group_uref = { cost = 200, arguments = [0, 0, 0, 0, 0] } |
| 175 | +put_key = { cost = 38_000, arguments = [0, 1_100, 0, 0] } |
| 176 | +read_host_buffer = { cost = 3_500, arguments = [0, 310, 0] } |
| 177 | +read_value = { cost = 6_000, arguments = [0, 0, 0] } |
| 178 | +read_value_local = { cost = 5_500, arguments = [0, 590, 0] } |
| 179 | +remove_associated_key = { cost = 4_200, arguments = [0, 0] } |
| 180 | +remove_contract_user_group = { cost = 200, arguments = [0, 0, 0, 0] } |
| 181 | +remove_contract_user_group_urefs = { cost = 200, arguments = [0, 0, 0, 0, 0, 0] } |
| 182 | +remove_key = { cost = 61_000, arguments = [0, 3_200] } |
| 183 | +ret = { cost = 23_000, arguments = [0, 420_000] } |
| 184 | +revert = { cost = 500, arguments = [0] } |
| 185 | +set_action_threshold = { cost = 74_000, arguments = [0, 0] } |
| 186 | +transfer_from_purse_to_account = { cost = 2_500_000_000, arguments = [0, 0, 0, 0, 0, 0, 0, 0, 0] } |
| 187 | +transfer_from_purse_to_purse = { cost = 82_000, arguments = [0, 0, 0, 0, 0, 0, 0, 0] } |
| 188 | +transfer_to_account = { cost = 2_500_000_000, arguments = [0, 0, 0, 0, 0, 0, 0] } |
| 189 | +update_associated_key = { cost = 4_200, arguments = [0, 0, 0] } |
| 190 | +write = { cost = 14_000, arguments = [0, 0, 0, 980] } |
| 191 | +write_local = { cost = 9_500, arguments = [0, 1_800, 0, 520] } |
| 192 | + |
| 193 | +[system_costs] |
| 194 | +wasmless_transfer_cost = 100_000_000 |
| 195 | + |
| 196 | +[system_costs.auction_costs] |
| 197 | +get_era_validators = 10_000 |
| 198 | +read_seigniorage_recipients = 10_000 |
| 199 | +add_bid = 10_000 |
| 200 | +withdraw_bid = 10_000 |
| 201 | +delegate = 10_000 |
| 202 | +undelegate = 10_000 |
| 203 | +run_auction = 10_000 |
| 204 | +slash = 10_000 |
| 205 | +distribute = 10_000 |
| 206 | +withdraw_delegator_reward = 10_000 |
| 207 | +withdraw_validator_reward = 10_000 |
| 208 | +read_era_id = 10_000 |
| 209 | +activate_bid = 10_000 |
| 210 | + |
| 211 | +[system_costs.mint_costs] |
| 212 | +mint = 2_500_000_000 |
| 213 | +reduce_total_supply = 10_000 |
| 214 | +create = 2_500_000_000 |
| 215 | +balance = 10_000 |
| 216 | +transfer = 10_000 |
| 217 | +read_base_round_reward = 10_000 |
| 218 | + |
| 219 | +[system_costs.handle_payment_costs] |
| 220 | +get_payment_purse = 10_000 |
| 221 | +set_refund_purse = 10_000 |
| 222 | +get_refund_purse = 10_000 |
| 223 | +finalize_payment = 10_000 |
| 224 | + |
| 225 | +[system_costs.standard_payment_costs] |
| 226 | +pay = 10_000 |
0 commit comments