Migration#

This is a migration guide from the Pragma SDK v1.x.x to v2.x.x.

If you want the full changelog please refer to our official Github release.

Also please refer to our updated publishing guide if you are a data provider.

The main changes are :

Important

Keystores are now supported in the SDK and it is highly recommended to use them as plain private keys are unsafe. The Keystore type has been introduced which is a tuple with the following fields:

  • path: The path to the keystore file.

  • password: The password to unlock the keystore file.

To use a keystore, you can pass it as an argument to the PragmaOnChainClient constructor.

from pragma_sdk.onchain.client import PragmaOnChainClient

publisher_client = PragmaOnChainClient(
    account_private_key=("/path/to/keystore", keystore_password),
    account_contract_address=publisher_address,
    network="https://my.custom.mainnet.rpc.url",
    chain_name="mainnet"
)
  • The type PragmaAsset does not exist anymore. Now the main type is the Pair type.

  • There is no more global variable PRAGMA_ALL_ASSETS, you should create yourself the list of pairs you want to publish.

from pragma_sdk.common.types.pair import Pair

pairs = [
    Pair.from_tickers("BTC","USD"),
    Pair.from_tickers("ETH","USD"),
]
  • You do not need to use the currency_pair_to_pair_id(*asset[“pair”]) utils, now simply use pair.id

  • To get the decimals of the pair just use pair.decimals()

  • There is no more PragmaPublisherClient now you should use the PragmaOnChainClient to publish data on-chain.

  • To publish data on the Pragma API, you should use the PragmaAPIClient class.

  • To fetch data from external APIs, you should now use the PragmaFetcherClient class.

  • Volume autoscaling has been removed, now you should provide the volume in the correct unit (24h cumulative volume in base asset).

Danger

There is no more testnet network, now you should use sepolia for the testnet.

  • If you want to pay your gas fees in STRK you can enable it in the execution_config constructor argument.

from pragma_sdk.onchain.types.execution_config import ExecutionConfig
from pragma_sdk.onchain.client import PragmaOnChainClient

publisher_client = PragmaOnChainClient(
    account_private_key=("/path/to/keystore", keystore_password),
    account_contract_address=publisher_address,
    network="https://my.custom.mainnet.rpc.url",
    chain_name="mainnet",
    execution_config=ExecutionConfig(enable_strk_fees=True)
)