Smart Contracts will most likely need access to certain values during execution which were specified at Account creation time or earlier. These can be considered the "configuration" of the particular Account instance, and their values can be divided into three tiers:
GLOBAL: Bank-wide values such as the native currency or central bank interest rate as mentioned above
TEMPLATE (PRODUCT): Values common to all accounts running on a particular Smart Contract - e.g. a product-specific interest rate, overdraft rate, or deposit limit
INSTANCE: Values specific to one account running on the Smart Contract - e.g. a day-of-month the customer would like their interest paid on, or a particular limit placed on the customer's individual account
GLOBAL parameters are defined elsewhere in Vault; they are optionally set via the Configuration Layer Utility (CLU) at the time of bank instantiation and can be updated via the Core API. Their definitions do not need to be repeated by each Smart Contract that uses them; it is enough to specify them by name in the global_parameters list in the metadata section.
TEMPLATE and INSTANCE level parameters must have their structures defined in full inside the Smart Contract as they are unique to the given contract. Initial values for TEMPLATE parameters must be provided at the time the Smart Contract is uploaded, and initial INSTANCE level values must be provided on Account creation. Parameters of both types are updatable during the lifecycle of any given Smart Contract, via the Core API.
Parameters can also be derived parameters. This means that rather than defining its own value, a derived parameter's value is instead programmatically generated from other parameters or account data. More information about derived parameters can be found at Parameter and derived_parameters.