gnosis.eth.oracles package

Subpackages

Submodules

gnosis.eth.oracles.oracles module

class gnosis.eth.oracles.oracles.AaveOracle(ethereum_client: EthereumClient, price_oracle: PriceOracle)

Bases: PriceOracle

get_price(token_address: str) float
class gnosis.eth.oracles.oracles.BalancerOracle(ethereum_client: EthereumClient, price_oracle: PriceOracle)

Bases: PricePoolOracle

Oracle for Balancer. More info on https://balancer.exchange

get_pool_token_price(pool_token_address: ChecksumAddress) float

Estimate balancer pool token price based on its components

Parameters

pool_token_address – Balancer pool token address

Returns

Eth price for pool token

Raises

CannotGetPriceFromOracle

exception gnosis.eth.oracles.oracles.CannotGetPriceFromOracle

Bases: OracleException

class gnosis.eth.oracles.oracles.ComposedPriceOracle

Bases: ABC

abstract get_underlying_tokens(*args) List[Tuple[UnderlyingToken]]
class gnosis.eth.oracles.oracles.CreamOracle(ethereum_client: EthereumClient, price_oracle: PriceOracle)

Bases: PriceOracle

get_price(token_address: str) float
class gnosis.eth.oracles.oracles.CurveOracle(ethereum_client: EthereumClient, zerion_adapter_address: Optional[str] = None)

Bases: ZerionComposedOracle

Curve pool Oracle. More info on https://curve.fi/

ZERION_ADAPTER_ADDRESS = '0x99b0bEadc3984eab9842AF81f9fad0C2219108cc'
get_underlying_tokens(token_address: ChecksumAddress) List[UnderlyingToken]

Check if passed token address is a Curve gauge deposit token, if it’s a gauge we replace the address with the corresponding LP token address More info on https://resources.curve.fi/base-features/understanding-gauges

class gnosis.eth.oracles.oracles.EnzymeOracle(ethereum_client: EthereumClient, zerion_adapter_address: Optional[str] = None)

Bases: ZerionComposedOracle

Enzyme pool Oracle. More info on https://enzyme.finance/

ZERION_ADAPTER_ADDRESS = '0x9e71455D748C23566b19493D09435574097C7D67'
exception gnosis.eth.oracles.oracles.InvalidPriceFromOracle

Bases: OracleException

class gnosis.eth.oracles.oracles.KyberOracle(ethereum_client: EthereumClient, kyber_network_proxy_address: Optional[str] = None)

Bases: PriceOracle

ADDRESSES = {<EthereumNetwork.MAINNET: 1>: '0x9AAb3f75489902f3a48495025729a0AF77d4b11e', <EthereumNetwork.RINKEBY: 4>: '0x0d5371e5EE23dec7DF251A8957279629aa79E9C5', <EthereumNetwork.ROPSTEN: 3>: '0xd719c34261e099Fdb33030ac8909d5788D3039C4', <EthereumNetwork.KOVAN: 42>: '0xc153eeAD19e0DBbDb3462Dcc2B703cC6D738A37c'}
ETH_TOKEN_ADDRESS = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE'
get_price(token_address_1: str, token_address_2: str = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE') float
property kyber_network_proxy_address
property kyber_network_proxy_contract
class gnosis.eth.oracles.oracles.MooniswapOracle(ethereum_client: EthereumClient, price_oracle: PriceOracle)

Bases: BalancerOracle

get_pool_token_price(pool_token_address: ChecksumAddress) float

Estimate balancer pool token price based on its components

Parameters

pool_token_address – Moniswap pool token address

Returns

Eth price for pool token

Raises

CannotGetPriceFromOracle

exception gnosis.eth.oracles.oracles.OracleException

Bases: Exception

class gnosis.eth.oracles.oracles.PoolTogetherOracle(ethereum_client: EthereumClient, zerion_adapter_address: Optional[str] = None)

Bases: ZerionComposedOracle

PoolTogether pool Oracle. More info on https://pooltogether.com/

ZERION_ADAPTER_ADDRESS = '0xb4E0E1672fFd9b128784dB9f3BE9158fac3f1DFc'
class gnosis.eth.oracles.oracles.PriceOracle

Bases: ABC

abstract get_price(*args) float
class gnosis.eth.oracles.oracles.PricePoolOracle

Bases: ABC

abstract get_pool_token_price(pool_token_address: ChecksumAddress) float
class gnosis.eth.oracles.oracles.SushiswapOracle(ethereum_client: EthereumClient, router_address: Optional[str] = None)

Bases: UniswapV2Oracle

pair_init_code = HexBytes('0xe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303')
router_address: str = '0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F'
class gnosis.eth.oracles.oracles.UnderlyingToken(address: <function NewType.<locals>.new_type at 0x7fe1df3cab80>, quantity: int)

Bases: object

address: ChecksumAddress
quantity: int
class gnosis.eth.oracles.oracles.UniswapOracle(ethereum_client: EthereumClient, uniswap_factory_address: Optional[str] = None)

Bases: PriceOracle

ADDRESSES = {<EthereumNetwork.MAINNET: 1>: '0xc0a47dFe034B400B47bDaD5FecDa2621de6c4d95', <EthereumNetwork.RINKEBY: 4>: '0xf5D915570BC477f9B8D6C0E980aA81757A3AaC36', <EthereumNetwork.ROPSTEN: 3>: '0x9c83dCE8CA20E9aAF9D3efc003b2ea62aBC08351', <EthereumNetwork.KOVAN: 42>: '0xD3E51Ef092B2845f10401a0159B2B96e8B6c3D30', <EthereumNetwork.GOERLI: 5>: '0x6Ce570d02D73d4c384b46135E87f8C592A8c86dA'}
get_price(token_address: str) float
get_uniswap_exchange(token_address: str) str
property uniswap_factory
property uniswap_factory_address
class gnosis.eth.oracles.oracles.UniswapV2Oracle(ethereum_client: EthereumClient, router_address: Optional[str] = None)

Bases: PricePoolOracle, PriceOracle

calculate_pair_address(token_address: str, token_address_2: str)

Calculate pair address without querying blockchain. https://uniswap.org/docs/v2/smart-contract-integration/getting-pair-addresses/#docs-header

Parameters
  • token_address

  • token_address_2

Returns

Checksummed address for token pair. It could be not created yet

property factory
property factory_address: str
Returns

Uniswap factory checksummed address

Raises

BadFunctionCallOutput: If router contract is not deployed

get_decimals(token_address: str, token_address_2: str) Tuple[int, int]
get_pair_address(token_address: str, token_address_2: str) Optional[str]

Get uniswap pair address. token_address and token_address_2 are interchangeable. https://uniswap.org/docs/v2/smart-contracts/factory/

Parameters
  • token_address

  • token_address_2

Returns

Address of the pair for token_address and token_address_2, if it has been created, else None.

get_pool_token_price(pool_token_address: ChecksumAddress) float

Estimate pool token price based on its components

Parameters

pool_token_address

Returns

Pool token eth price per unit (total pool token supply / 1e18)

Raises

CannotGetPriceFromOracle

get_price(token_address: str, token_address_2: Optional[str] = None) float
get_price_without_exception(token_address: str, token_address_2: Optional[str] = None) float
Parameters
  • token_address

  • token_address_2

Returns

Call get_price, return 0. instead on an exception if there’s any issue

get_reserves(pair_address: str) Tuple[int, int]

Returns the Also returns the block.timestamp (mod 2**32) of the last block during which an interaction occured for the pair. https://uniswap.org/docs/v2/smart-contracts/pair/ :return: Reserves of token_address and token_address_2 used to price trades and distribute liquidity.

pair_init_code = HexBytes('0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f')
router_address: str = '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'
property weth_address: str
Returns

Wrapped ether checksummed address

Raises

BadFunctionCallOutput: If router contract is not deployed

class gnosis.eth.oracles.oracles.UsdPricePoolOracle

Bases: ABC

abstract get_pool_usd_token_price(pool_token_address: ChecksumAddress) float
class gnosis.eth.oracles.oracles.YearnOracle(ethereum_client: EthereumClient, yearn_vault_token_adapter: Optional[str] = '0xb460FcC1B6c1CBD7D03F47B6BD5F03994d286c75', iearn_token_adapter: Optional[str] = '0x65B23774daE2a5be02dD275918DDF048d177a5B4')

Bases: ComposedPriceOracle

Yearn oracle. More info on https://docs.yearn.finance

get_underlying_tokens(token_address: ChecksumAddress) List[Tuple[float, ChecksumAddress]]
Parameters

token_address

Returns

Price per share and underlying token

Raises

CannotGetPriceFromOracle

class gnosis.eth.oracles.oracles.ZerionComposedOracle(ethereum_client: EthereumClient, zerion_adapter_address: Optional[str] = None)

Bases: ComposedPriceOracle

ZERION_ADAPTER_ADDRESS = None
get_underlying_tokens(token_address: ChecksumAddress) List[UnderlyingToken]

Use Zerion Token adapter to return underlying components for pool

Parameters

token_address – Pool token address

Returns

Price per share and underlying token

Raises

CannotGetPriceFromOracle

property zerion_adapter_contract: Optional[Contract]
Returns

https://curve.readthedocs.io/registry-registry.html

Module contents