Skip to content

Commit

Permalink
Add Zerion configuration to Chain (#1153)
Browse files Browse the repository at this point in the history
Add Chain['balances_provider'] field, holding chainName and enabled properties
  • Loading branch information
hectorgomezv committed Jun 13, 2024
1 parent 46e916d commit 43ed504
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Generated by Django 4.2.2 on 2024-06-13 11:11

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("chains", "0041_chain_prices_provider_chain_name_and_more"),
]

operations = [
migrations.AddField(
model_name="chain",
name="balances_provider_chain_name",
field=models.CharField(blank=True, max_length=255, null=True),
),
migrations.AddField(
model_name="chain",
name="balances_provider_enabled",
field=models.BooleanField(
default=False,
help_text="This flag informs API clients whether the balances provider is enabled for the chain",
),
),
]
45 changes: 45 additions & 0 deletions src/chains/migrations/tests/test_migration_0042.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
from django.db.migrations.state import StateApps

from chains.migrations.tests.utils import TestMigrations


class Migration0042TestCase(TestMigrations):
migrate_from = "0041_chain_prices_provider_chain_name_and_more"
migrate_to = "0042_chain_balances_provider_chain_name_and_more"

def setUpBeforeMigration(self, apps: StateApps) -> None:
Chain = apps.get_model("chains", "Chain")
Chain.objects.create(
id=1,
name="Mainnet",
short_name="eth",
description="",
l2=False,
rpc_authentication="API_KEY_PATH",
rpc_uri="https://mainnet.infura.io/v3/",
safe_apps_rpc_authentication="API_KEY_PATH",
safe_apps_rpc_uri="https://mainnet.infura.io/v3/",
block_explorer_uri_address_template="https://etherscan.io/address/{{address}}",
block_explorer_uri_tx_hash_template="https://etherscan.io/tx/{{txHash}}",
currency_name="Ether",
currency_symbol="ETH",
currency_decimals=18,
currency_logo_uri="https://gnosis-safe-token-logos.s3.amazonaws.com/ethereum-eth-logo.png",
transaction_service_uri="http://mainnet-safe-transaction-web.safe.svc.cluster.local",
vpc_transaction_service_uri="",
theme_text_color="#001428",
theme_background_color="#E8E7E6",
ens_registry_address="0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
recommended_master_copy_version="1.3.0",
prices_provider_native_coin="ethereum",
prices_provider_chain_name="ethereum",
hidden=False,
)

def test_new_fields(self) -> None:
Chain = self.apps_registry.get_model("chains", "Chain")

chain = Chain.objects.get(id=1)

self.assertEqual(chain.balances_provider_chain_name, None)
self.assertEqual(chain.balances_provider_enabled, False)
7 changes: 7 additions & 0 deletions src/chains/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,13 @@ class RpcAuthentication(models.TextChoices):
max_length=255, null=True, blank=True
)
prices_provider_chain_name = models.CharField(max_length=255, null=True, blank=True)
balances_provider_chain_name = models.CharField(
max_length=255, null=True, blank=True
)
balances_provider_enabled = models.BooleanField(
default=False,
help_text="This flag informs API clients whether the balances provider is enabled for the chain",
)
hidden = models.BooleanField(default=False)

def get_disabled_wallets(self) -> QuerySet["Wallet"]:
Expand Down
11 changes: 11 additions & 0 deletions src/chains/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,11 @@ class PricesProviderSerializer(serializers.Serializer[Chain]):
chain_name = serializers.CharField(source="prices_provider_chain_name")


class BalancesProviderSerializer(serializers.Serializer[Chain]):
chain_name = serializers.CharField(source="balances_provider_chain_name")
enabled = serializers.BooleanField(source="balances_provider_enabled")


class BaseRpcUriSerializer(serializers.Serializer[Chain]):
authentication = serializers.SerializerMethodField()
value = serializers.SerializerMethodField(method_name="get_rpc_value")
Expand Down Expand Up @@ -162,6 +167,7 @@ class ChainSerializer(serializers.ModelSerializer[Chain]):
block_explorer_uri_template = serializers.SerializerMethodField()
native_currency = serializers.SerializerMethodField()
prices_provider = serializers.SerializerMethodField()
balances_provider = serializers.SerializerMethodField()
transaction_service = serializers.URLField(
source="transaction_service_uri", default=None
)
Expand All @@ -188,6 +194,7 @@ class Meta:
"block_explorer_uri_template",
"native_currency",
"prices_provider",
"balances_provider",
"transaction_service",
"vpc_transaction_service",
"theme",
Expand Down Expand Up @@ -247,3 +254,7 @@ def get_features(self, instance: Chain) -> ReturnDict[Any, Any]:
@swagger_serializer_method(serializer_or_field=PricesProviderSerializer) # type: ignore[misc]
def get_prices_provider(self, instance: Chain) -> ReturnDict[Any, Any]:
return PricesProviderSerializer(instance).data

@swagger_serializer_method(serializer_or_field=BalancesProviderSerializer) # type: ignore[misc]
def get_balances_provider(self, instance: Chain) -> ReturnDict[Any, Any]:
return BalancesProviderSerializer(instance).data
2 changes: 2 additions & 0 deletions src/chains/tests/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ class Meta:
recommended_master_copy_version = "1.3.0"
prices_provider_native_coin = factory.Faker("cryptocurrency_code")
prices_provider_chain_name = factory.Faker("company")
balances_provider_chain_name = factory.Faker("company")
balances_provider_enabled = factory.Faker("pybool")
hidden = False


Expand Down
8 changes: 8 additions & 0 deletions src/chains/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,10 @@ def test_json_payload_format(self) -> None:
"nativeCoin": chain.prices_provider_native_coin,
"chainName": chain.prices_provider_chain_name,
},
"balancesProvider": {
"chainName": chain.balances_provider_chain_name,
"enabled": chain.balances_provider_enabled,
},
"transactionService": chain.transaction_service_uri,
"vpcTransactionService": chain.vpc_transaction_service_uri,
"theme": {
Expand Down Expand Up @@ -193,6 +197,10 @@ def test_json_payload_format(self) -> None:
"nativeCoin": chain.prices_provider_native_coin,
"chainName": chain.prices_provider_chain_name,
},
"balancesProvider": {
"chainName": chain.balances_provider_chain_name,
"enabled": chain.balances_provider_enabled,
},
"transactionService": chain.transaction_service_uri,
"vpcTransactionService": chain.vpc_transaction_service_uri,
"theme": {
Expand Down

0 comments on commit 43ed504

Please sign in to comment.