Resource migration to checksum address

pull/349/head
kompotkot 2021-10-28 14:57:52 +00:00
rodzic 3120f39c59
commit 1dde5040a4
3 zmienionych plików z 63 dodań i 0 usunięć

Wyświetl plik

@ -5,6 +5,8 @@ import argparse
from typing import Optional
from . import subscription_types
from .migrations.checksum_address import checksum_all_subscription_addresses
from ..web3_provider import yield_web3_provider
from ..settings import (
BUGOUT_BROOD_URL,
BUGOUT_SPIRE_URL,
@ -22,6 +24,12 @@ def parse_boolean_arg(raw_arg: Optional[str]) -> Optional[bool]:
return False
def migrations_run(args: argparse.Namespace) -> None:
web3_session = yield_web3_provider()
if args.id == 1:
checksum_all_subscription_addresses(web3_session)
def main() -> None:
cli_description = f"""Moonstream Admin CLI
@ -212,6 +220,21 @@ This CLI is configured to work with the following API URLs:
func=subscription_types.cli_ensure_canonical_subscription_types
)
parser_migrations = subcommands.add_parser(
"migrations", description="Manage database, resource and etc migrations"
)
parser_migrations.set_defaults(func=lambda _: parser_migrations.print_help())
subcommands_migrations = parser_migrations.add_subparsers(
description="Migration commands"
)
parser_migrations_run = subcommands_migrations.add_parser(
"run", description="Run migration"
)
parser_migrations_run.add_argument(
"-i", "--id", required=True, type=int, help="Provide migration ID"
)
parser_migrations_run.set_defaults(func=migrations_run)
args = parser.parse_args()
args.func(args)

Wyświetl plik

@ -0,0 +1,40 @@
"""
Convert all addresses in user subscriptions to checksum address.
"""
from bugout.data import BugoutResources
from bugout.exceptions import BugoutResponseException
from web3 import Web3
from ...settings import BUGOUT_REQUEST_TIMEOUT_SECONDS, MOONSTREAM_ADMIN_ACCESS_TOKEN
from ...settings import bugout_client as bc
def checksum_all_subscription_addresses(web3: Web3) -> None:
resources: BugoutResources = bc.list_resources(
token=MOONSTREAM_ADMIN_ACCESS_TOKEN,
params={"type": "subscription"},
timeout=BUGOUT_REQUEST_TIMEOUT_SECONDS,
)
for resource in resources.resources:
resource_data = resource.resource_data
try:
address = resource_data["address"]
resource_data["address"] = web3.toChecksumAddress(address)
updated_resource = bc.update_resource(
token=MOONSTREAM_ADMIN_ACCESS_TOKEN,
resource_id=resource.id,
resource_data={"update": resource_data},
timeout=BUGOUT_REQUEST_TIMEOUT_SECONDS,
)
print(f"Resource id: {updated_resource.id} updated")
except ValueError as e:
print(
f"Not valid checksum address: {address}, probably "
"txpool or whalewatch subscription"
)
continue
except BugoutResponseException as e:
print(f"Bugout error: {e.status_code} with details: {e.detail}")
except Exception as e:
print(f"Unexpected error: {repr(e)}")
continue