From 9e8816d524a45fa4f49f2af71d2f160a431bd70e Mon Sep 17 00:00:00 2001 From: xsb <389483673@qq.com> Date: Mon, 2 Sep 2024 16:34:31 +0800 Subject: [PATCH] feat: add get fee info query msg --- i.py | 1254 --------------------------------------- omnity_port_cosmos.wasm | Bin 325535 -> 0 bytes src/bin/schema.rs | 11 - src/contract.rs | 93 +-- src/helpers.rs | 2 +- src/msg.rs | 4 +- src/route.rs | 28 + 7 files changed, 84 insertions(+), 1308 deletions(-) delete mode 100644 i.py delete mode 100755 omnity_port_cosmos.wasm delete mode 100644 src/bin/schema.rs diff --git a/i.py b/i.py deleted file mode 100644 index d1c19aa..0000000 --- a/i.py +++ /dev/null @@ -1,1254 +0,0 @@ -import os -import sys -import argparse -import subprocess -import platform -import random -import textwrap -import urllib.request as urlrq -import ssl -import json -import tempfile -from enum import Enum - -DEFAULT_OSMOSIS_HOME = os.path.expanduser("~/.osmosisd") -DEFAULT_MONIKER = "osmosis" - -NETWORK_CHOICES = ['osmosis-1', 'osmo-test-5'] -INSTALL_CHOICES = ['node', 'client', 'localosmosis'] -PRUNING_CHOICES = ['default', 'nothing', 'everything'] - -MAINNET_VERSION = "25.2.0" -TESTNET_VERSION = "25.2.1" - -# CLI arguments -parser = argparse.ArgumentParser(description="Osmosis Installer") - -parser.add_argument( - "--home", - type=str, - help=f"Osmosis installation location", -) - -parser.add_argument( - '-m', - "--moniker", - type=str, - help="Moniker name for the node (Default: 'osmosis')", -) - -parser.add_argument( - '-v', - '--verbose', - action='store_true', - help="Enable verbose output", - dest="verbose" -) - -parser.add_argument( - '-o', - '--overwrite', - action='store_true', - help="Overwrite existing Osmosis home and binary without prompt", - dest="overwrite" -) - -parser.add_argument( - '-n', - '--network', - type=str, - choices=NETWORK_CHOICES, - help=f"Network to join: {NETWORK_CHOICES})", -) - -parser.add_argument( - '-p', - '--pruning', - type=str, - choices=PRUNING_CHOICES, - help=f"Pruning settings: {PRUNING_CHOICES})", -) - -parser.add_argument( - '-i', - '--install', - type=str, - choices=INSTALL_CHOICES, - help=f"Which installation to do: {INSTALL_CHOICES})", -) - -parser.add_argument( - "--binary_path", - type=str, - help=f"Path where to download the binary", - default="/usr/local/bin" -) - -parser.add_argument( - '-c', - '--cosmovisor', - action='store_true', - help="Install cosmovisor" -) - -parser.add_argument( - '-s', - '--service', - action='store_true', - help="Setup systemd service (Linux only)" -) - -args = parser.parse_args() - -# Choices -class InstallChoice(str, Enum): - NODE = "1" - CLIENT = "2" - LOCALOSMOSIS = "3" - -class NetworkChoice(str, Enum): - MAINNET = "1" - TESTNET = "2" - -class PruningChoice(str, Enum): - DEFAULT = "1" - NOTHING = "2" - EVERYTHING = "3" - -class Answer(str, Enum): - YES = "1" - NO = "2" - -# Network configurations -class Network: - def __init__(self, chain_id, version, genesis_url, binary_url, peers, rpc_node, addrbook_url, snapshot_url): - self.chain_id = chain_id - self.version = version - self.genesis_url = genesis_url - self.binary_url = binary_url - self.peers = peers - self.rpc_node = rpc_node - self.addrbook_url = addrbook_url - self.snapshot_url = snapshot_url - -TESTNET = Network( - chain_id = "osmo-test-5", - version = f"v${TESTNET_VERSION}", - genesis_url = "https://osmosis.fra1.digitaloceanspaces.com/osmo-test-5/genesis.json", - binary_url = { - "linux": { - "amd64": f"https://osmosis.fra1.digitaloceanspaces.com/binaries/v{TESTNET_VERSION}/osmosisd-{TESTNET_VERSION}-linux-amd64", - "arm64": f"https://osmosis.fra1.digitaloceanspaces.com/binaries/v{TESTNET_VERSION}/osmosisd-{TESTNET_VERSION}-linux-arm64" - }, - "darwin": { - "amd64": f"https://osmosis.fra1.digitaloceanspaces.com/binaries/v{TESTNET_VERSION}/osmosisd-{TESTNET_VERSION}-darwin-amd64", - "arm64": f"https://osmosis.fra1.digitaloceanspaces.com/binaries/v{TESTNET_VERSION}/osmosisd-{TESTNET_VERSION}-darwin-arm64" - }, - }, - peers = [ - "a5f81c035ff4f985d5e7c940c7c3b846389b7374@167.235.115.14:26656", - "05c41cc1fc7c8cb379e54d784bcd3b3907a1568e@157.245.26.231:26656", - "7c2b9e76be5c2142c76b429d9c29e902599ceb44@157.245.21.183:26656", - "f440c4980357d8b56db87ddd50f06bd551f1319a@5.78.98.19:26656", - "ade4d8bc,8cbe014af6ebdf3cb7b1e9ad36f412c0@testnet-seeds.polkachu.com:12556", - ], - rpc_node = "https://rpc.testnet.osmosis.zone:443", - addrbook_url = "https://rpc.testnet.osmosis.zone/addrbook", - snapshot_url = "https://snapshots.testnet.osmosis.zone/latest" -) - -MAINNET = Network( - chain_id = "osmosis-1", - version = f"v{MAINNET_VERSION}", - genesis_url = "https://osmosis.fra1.digitaloceanspaces.com/osmosis-1/genesis.json", - binary_url = { - "linux": { - "amd64": f"https://osmosis.fra1.digitaloceanspaces.com/binaries/v{MAINNET_VERSION}/osmosisd-{MAINNET_VERSION}-linux-amd64", - "arm64": f"https://osmosis.fra1.digitaloceanspaces.com/binaries/v{MAINNET_VERSION}/osmosisd-{MAINNET_VERSION}-linux-arm64" - }, - "darwin": { - "amd64": f"https://osmosis.fra1.digitaloceanspaces.com/binaries/v{MAINNET_VERSION}/osmosisd-{MAINNET_VERSION}-darwin-amd64", - "arm64": f"https://osmosis.fra1.digitaloceanspaces.com/binaries/v{MAINNET_VERSION}/osmosisd-{MAINNET_VERSION}-darwin-arm64" - }, - }, - peers = None, - rpc_node = "https://rpc.osmosis.zone:443", - addrbook_url = "https://rpc.osmosis.zone/addrbook", - snapshot_url = "https://snapshots.osmosis.zone/latest" -) - -COSMOVISOR_URL = { - "darwin": { - "amd64": "https://osmosis.fra1.digitaloceanspaces.com/binaries/cosmovisor/cosmovisor-v1.2.0-darwin-amd64", - "arm64": "https://osmosis.fra1.digitaloceanspaces.com/binaries/cosmovisor/cosmovisor-v1.2.0-darwin-arm64" - }, - "linux": { - "amd64": "https://osmosis.fra1.digitaloceanspaces.com/binaries/cosmovisor/cosmovisor-v1.2.0-linux-amd64", - "arm64": "https://osmosis.fra1.digitaloceanspaces.com/binaries/cosmovisor/cosmovisor-v1.2.0-linux-arm64" - } -} -# Terminal utils - -class bcolors: - OKGREEN = '\033[92m' - RED = '\033[91m' - ENDC = '\033[0m' - PURPLE = '\033[95m' - -def clear_screen(): - os.system('clear') - -# Messages - -def welcome_message(): - print(bcolors.OKGREEN + """ - ██████╗ ███████╗███╗ ███╗ ██████╗ ███████╗██╗███████╗ -██╔═══██╗██╔════╝████╗ ████║██╔═══██╗██╔════╝██║██╔════╝ -██║ ██║███████╗██╔████╔██║██║ ██║███████╗██║███████╗ -██║ ██║╚════██║██║╚██╔╝██║██║ ██║╚════██║██║╚════██║ -╚██████╔╝███████║██║ ╚═╝ ██║╚██████╔╝███████║██║███████║ -╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝╚══════╝ - -Welcome to the Osmosis node installer! - - -For more information, please visit https://docs.osmosis.zone - -If you have an old Osmosis installation, -- backup any important data before proceeding -- ensure that no osmosis services are running in the background -""" + bcolors.ENDC) - - -def client_complete_message(osmosis_home): - print(bcolors.OKGREEN + """ -✨ Congratulations! You have successfully completed setting up an Osmosis client! ✨ -""" + bcolors.ENDC) - - print("🧪 Try running: " + bcolors.OKGREEN + f"osmosisd status --home {osmosis_home}" + bcolors.ENDC) - print() - - -def node_complete_message(using_cosmovisor, using_service, osmosis_home): - print(bcolors.OKGREEN + """ -✨ Congratulations! You have successfully completed setting up an Osmosis node! ✨ -""" + bcolors.ENDC) - - if using_service: - - if using_cosmovisor: - print("🧪 To start the cosmovisor service run: ") - print(bcolors.OKGREEN + f"sudo systemctl start cosmovisor" + bcolors.ENDC) - else: - print("🧪 To start the osmosisd service run: ") - print(bcolors.OKGREEN + f"sudo systemctl start osmosisd" + bcolors.ENDC) - - else: - if using_cosmovisor: - print("🧪 To start cosmovisor run: ") - print(bcolors.OKGREEN + f"DAEMON_NAME=osmosisd DAEMON_HOME={osmosis_home} cosmovisor run start" + bcolors.ENDC) - else: - print("🧪 To start osmosisd run: ") - print(bcolors.OKGREEN + f"osmosisd start --home {osmosis_home}" + bcolors.ENDC) - - - - print() - -# Options - -def select_install(): - - # Check if setup is specified in args - if args.install: - if args.install == "node": - choice = InstallChoice.NODE - elif args.install == "client": - choice = InstallChoice.CLIENT - elif args.install == "localosmosis": - choice = InstallChoice.LOCALOSMOSIS - else: - print(bcolors.RED + f"Invalid setup {args.install}. Please choose a valid setup.\n" + bcolors.ENDC) - sys.exit(1) - - else: - - print(bcolors.OKGREEN + """ -Please choose the desired installation: - - 1) node - run an osmosis node and join mainnet or testnet - 2) client - setup osmosisd to query a public node - 3) localosmosis - setup a local osmosis development node - -💡 You can select the installation using the --install flag. - """ + bcolors.ENDC) - - while True: - choice = input("Enter your choice, or 'exit' to quit: ").strip() - - if choice.lower() == "exit": - print("Exiting the program...") - sys.exit(0) - - if choice not in [InstallChoice.NODE, InstallChoice.CLIENT, InstallChoice.LOCALOSMOSIS]: - print("Invalid input. Please choose a valid option.") - else: - break - - if args.verbose: - clear_screen() - print(f"Chosen install: {INSTALL_CHOICES[int(choice) - 1]}") - - clear_screen() - return choice - - -def select_network(): - """ - Selects a network based on user input or command-line arguments. - - Returns: - chosen_network (NetworkChoice): The chosen network, either MAINNET or TESTNET. - - Raises: - SystemExit: If an invalid network is specified or the user chooses to exit the program. - """ - - # Check if network is specified in args - if args.network: - if args.network == MAINNET.chain_id: - choice = NetworkChoice.MAINNET - elif args.network == TESTNET.chain_id: - choice = NetworkChoice.TESTNET - else: - print(bcolors.RED + f"Invalid network {args.network}. Please choose a valid network." + bcolors.ENDC) - sys.exit(1) - - # If not, ask the user to choose a network - else: - print(bcolors.OKGREEN + f""" -Please choose the desired network: - - 1) Mainnet ({MAINNET.chain_id}) - 2) Testnet ({TESTNET.chain_id}) - -💡 You can select the network using the --network flag. -""" + bcolors.ENDC) - - while True: - choice = input("Enter your choice, or 'exit' to quit: ").strip() - - if choice.lower() == "exit": - print("Exiting the program...") - sys.exit(0) - - if choice not in [NetworkChoice.MAINNET, NetworkChoice.TESTNET]: - print(bcolors.RED + "Invalid input. Please choose a valid option. Accepted values: [ 1 , 2 ] \n" + bcolors.ENDC) - else: - break - - if args.verbose: - clear_screen() - print(f"Chosen network: {NETWORK_CHOICES[int(choice) - 1]}") - - clear_screen() - return choice - - -def select_osmosis_home(): - """ - Selects the path for running the 'osmosisd init --home ' command. - - Returns: - osmosis_home (str): The selected path. - - """ - if args.home: - osmosis_home = args.home - else: - default_home = os.path.expanduser("~/.osmosisd") - print(bcolors.OKGREEN + f""" -Do you want to install Osmosis in the default location?: - - 1) Yes, use default location {DEFAULT_OSMOSIS_HOME} (recommended) - 2) No, specify custom location - -💡 You can specify the home using the --home flag. -""" + bcolors.ENDC) - - while True: - choice = input("Enter your choice, or 'exit' to quit: ").strip() - - if choice.lower() == "exit": - print("Exiting the program...") - sys.exit(0) - - if choice == Answer.YES: - osmosis_home = default_home - break - - elif choice == Answer.NO: - while True: - custom_home = input("Enter the path for Osmosis home: ").strip() - if custom_home != "": - osmosis_home = custom_home - break - else: - print("Invalid path. Please enter a valid directory.") - break - else: - print("Invalid choice. Please enter 1 or 2.") - - clear_screen() - return osmosis_home - - -def select_moniker(): - """ - Selects the moniker for the Osmosis node. - - Returns: - moniker (str): The selected moniker. - - """ - if args.moniker: - moniker = args.moniker - else: - print(bcolors.OKGREEN + f""" -Do you want to use the default moniker? - - 1) Yes, use default moniker ({DEFAULT_MONIKER}) - 2) No, specify custom moniker - -💡 You can specify the moniker using the --moniker flag. -""" + bcolors.ENDC) - - while True: - choice = input("Enter your choice, or 'exit' to quit: ").strip() - - if choice.lower() == "exit": - print("Exiting the program...") - sys.exit(0) - - if choice == Answer.YES: - moniker = DEFAULT_MONIKER - break - elif choice == Answer.NO: - while True: - custom_moniker = input("Enter the custom moniker: ") - if custom_moniker.strip() != "": - moniker = custom_moniker - break - else: - print("Invalid moniker. Please enter a valid moniker.") - break - else: - print("Invalid choice. Please enter 1 or 2.") - - clear_screen() - return moniker - - -def initialize_osmosis_home(osmosis_home, moniker): - """ - Initializes the Osmosis home directory with the specified moniker. - - Args: - osmosis_home (str): The chosen home directory. - moniker (str): The moniker for the Osmosis node. - - """ - if not args.overwrite: - - while True: - print(bcolors.OKGREEN + f""" -Do you want to initialize the Osmosis home directory at '{osmosis_home}'? - """ + bcolors.ENDC, end="") - - print(bcolors.RED + f""" -⚠️ All contents of the directory will be deleted. - """ + bcolors.ENDC, end="") - - print(bcolors.OKGREEN + f""" - 1) Yes, proceed with initialization - 2) No, quit - -💡 You can overwrite the osmosis home using --overwrite flag. - """ + bcolors.ENDC) - - choice = input("Enter your choice, or 'exit' to quit: ").strip() - - if choice.lower() == "exit": - print("Exiting the program...") - sys.exit(0) - - if choice == Answer.YES: - break - - elif choice == Answer.NO: - sys.exit(0) - - else: - print("Invalid choice. Please enter 1 or 2.") - - print(f"Initializing Osmosis home directory at '{osmosis_home}'...") - try: - subprocess.run( - ["rm", "-rf", osmosis_home], - stderr=subprocess.DEVNULL, check=True) - - subprocess.run( - ["osmosisd", "init", moniker, "-o", "--home", osmosis_home], - stderr=subprocess.DEVNULL, check=True) - - print("Initialization completed successfully.") - - except subprocess.CalledProcessError as e: - print("Initialization failed.") - print("Please check if the home directory is valid and has write permissions.") - print(e) - sys.exit(1) - - clear_screen() - - -def select_pruning(osmosis_home): - """ - Allows the user to choose pruning settings and performs actions based on the selected option. - - """ - - # Check if pruning settings are specified in args - if args.pruning: - if args.pruning == "default": - choice = PruningChoice.DEFAULT - elif args.pruning == "nothing": - choice = PruningChoice.NOTHING - elif args.pruning == "everything": - choice = PruningChoice.EVERYTHING - else: - print(bcolors.RED + f"Invalid pruning setting {args.pruning}. Please choose a valid setting.\n" + bcolors.ENDC) - sys.exit(1) - - else: - - print(bcolors.OKGREEN + """ -Please choose your desired pruning settings: - - 1) Default: (keep last 100,000 states to query the last week worth of data and prune at 100 block intervals) - 2) Nothing: (keep everything, select this if running an archive node) - 3) Everything: (keep last 10,000 states and prune at a random prime block interval) - -💡 You can select the pruning settings using the --pruning flag. - """ + bcolors.ENDC) - - while True: - choice = input("Enter your choice, or 'exit' to quit: ").strip() - - if choice.lower() == "exit": - print("Exiting the program...") - sys.exit(0) - - if choice not in [PruningChoice.DEFAULT, PruningChoice.NOTHING, PruningChoice.EVERYTHING]: - print("Invalid input. Please choose a valid option.") - else: - break - - if args.verbose: - clear_screen() - print(f"Chosen setting: {PRUNING_CHOICES[int(choice) - 1]}") - - app_toml = os.path.join(osmosis_home, "config", "app.toml") - - if choice == PruningChoice.DEFAULT: - # Nothing to do - pass - - elif choice == PruningChoice.NOTHING: - subprocess.run(["sed -i -E 's/pruning = \"default\"/pruning = \"nothing\"/g' " + app_toml], shell=True) - - elif choice == PruningChoice.EVERYTHING: - primeNum = random.choice([x for x in range(11, 97) if not [t for t in range(2, x) if not x % t]]) - subprocess.run(["sed -i -E 's/pruning = \"default\"/pruning = \"custom\"/g' " + app_toml], shell=True) - subprocess.run(["sed -i -E 's/pruning-keep-recent = \"0\"/pruning-keep-recent = \"10000\"/g' " + app_toml], shell=True) - subprocess.run(["sed -i -E 's/pruning-interval = \"0\"/pruning-interval = \"" + str(primeNum) + "\"/g' " + app_toml], shell=True) - - else: - print(bcolors.RED + f"Invalid pruning setting {choice}. Please choose a valid setting.\n" + bcolors.ENDC) - sys.exit(1) - - clear_screen() - - -def customize_config(home, network): - """ - Customizes the TOML configurations based on the network. - - Args: - home (str): The home directory. - network (str): The network identifier. - - """ - - # osmo-test-5 configuration - if network == NetworkChoice.TESTNET: - - # patch client.toml - client_toml = os.path.join(home, "config", "client.toml") - - with open(client_toml, "r") as config_file: - lines = config_file.readlines() - - for i, line in enumerate(lines): - if line.startswith("chain-id"): - lines[i] = f'chain-id = "{TESTNET.chain_id}"\n' - elif line.startswith("node"): - lines[i] = f'node = "{TESTNET.rpc_node}"\n' - - with open(client_toml, "w") as config_file: - config_file.writelines(lines) - - # patch config.toml - config_toml = os.path.join(home, "config", "config.toml") - - peers = ','.join(TESTNET.peers) - subprocess.run(["sed -i -E 's/persistent_peers = \"\"/persistent_peers = \"" + peers + "\"/g' " + config_toml], shell=True) - - # osmosis-1 configuration - elif network == NetworkChoice.MAINNET: - client_toml = os.path.join(home, "config", "client.toml") - - with open(client_toml, "r") as config_file: - lines = config_file.readlines() - - for i, line in enumerate(lines): - if line.startswith("chain-id"): - lines[i] = f'chain-id = "{MAINNET.chain_id}"\n' - elif line.startswith("node"): - lines[i] = f'node = "{MAINNET.rpc_node}"\n' - - with open(client_toml, "w") as config_file: - config_file.writelines(lines) - - else: - print(bcolors.RED + f"Invalid network {network}. Please choose a valid setting.\n" + bcolors.ENDC) - sys.exit(1) - - clear_screen() - - -def download_binary(network): - """ - Downloads the binary for the specified network based on the operating system and architecture. - - Args: - network (NetworkChoice): The network type, either MAINNET or TESTNET. - - Raises: - SystemExit: If the binary download URL is not available for the current operating system and architecture. - """ - binary_path = os.path.join(args.binary_path, "osmosisd") - - if not args.overwrite: - # Check if osmosisd is already installed - try: - subprocess.run([binary_path, "version"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - print("osmosisd is already installed at " + bcolors.OKGREEN + f"{binary_path}" + bcolors.ENDC) - while True: - choice = input("Do you want to skip the download or overwrite the binary? (skip/overwrite): ").strip().lower() - if choice == "skip": - print("Skipping download.") - return - elif choice == "overwrite": - print("Proceeding with overwrite.") - break - else: - print("Invalid input. Please enter 'skip' or 'overwrite'.") - except FileNotFoundError: - print("osmosisd is not installed. Proceeding with download.") - - operating_system = platform.system().lower() - architecture = platform.machine() - - if architecture == "x86_64": - architecture = "amd64" - elif architecture == "aarch64": - architecture = "arm64" - - if architecture not in ["arm64", "amd64"]: - print(f"Unsupported architecture {architecture}.") - sys.exit(1) - - if network == NetworkChoice.TESTNET: - binary_urls = TESTNET.binary_url - else: - binary_urls = MAINNET.binary_url - - if operating_system in binary_urls and architecture in binary_urls[operating_system]: - binary_url = binary_urls[operating_system][architecture] - else: - print(f"Binary download URL not available for {operating_system}/{architecture}") - sys.exit(0) - - try: - print("Downloading " + bcolors.PURPLE + "osmosisd" + bcolors.ENDC, end="\n\n") - print("from " + bcolors.OKGREEN + f"{binary_url}" + bcolors.ENDC, end=" ") - print("to " + bcolors.OKGREEN + f"{binary_path}" + bcolors.ENDC) - print() - print(bcolors.OKGREEN + "💡 You can change the path using --binary_path" + bcolors.ENDC) - - subprocess.run(["wget", binary_url, "-q", "-O", "/tmp/osmosisd"], check=True) - os.chmod("/tmp/osmosisd", 0o755) - - if platform.system() == "Linux": - subprocess.run(["sudo", "mv", "/tmp/osmosisd", binary_path], check=True) - subprocess.run(["sudo", "chown", f"{os.environ['USER']}:{os.environ['USER']}", binary_path], check=True) - subprocess.run(["sudo", "chmod", "+x", binary_path], check=True) - else: - subprocess.run(["mv", "/tmp/osmosisd", binary_path], check=True) - - # Test binary - subprocess.run(["osmosisd", "version"], check=True) - - print("Binary downloaded successfully.") - - except subprocess.CalledProcessError as e: - print(e) - print("Failed to download the binary.") - sys.exit(1) - - clear_screen() - -def download_genesis(network, osmosis_home): - """ - Downloads the genesis file for the specified network. - - Args: - network (NetworkChoice): The network type, either MAINNET or TESTNET. - osmosis_home (str): The path to the Osmosis home directory. - - Raises: - SystemExit: If the genesis download URL is not available for the current network. - - """ - if network == NetworkChoice.TESTNET: - genesis_url = TESTNET.genesis_url - else: - genesis_url = MAINNET.genesis_url - - if genesis_url: - try: - print("Downloading " + bcolors.PURPLE + "genesis.json" + bcolors.ENDC + f" from {genesis_url}") - genesis_path = os.path.join(osmosis_home, "config", "genesis.json") - - subprocess.run(["wget", genesis_url, "-q", "-O", genesis_path], check=True) - print("Genesis downloaded successfully.\n") - - except subprocess.CalledProcessError: - print("Failed to download the genesis.") - sys.exit(1) - - -def download_addrbook(network, osmosis_home): - """ - Downloads the addrbook for the specified network. - - Args: - network (NetworkChoice): The network type, either MAINNET or TESTNET. - osmosis_home (str): The path to the Osmosis home directory. - - Raises: - SystemExit: If the genesis download URL is not available for the current network. - - """ - if network == NetworkChoice.TESTNET: - addrbook_url = TESTNET.addrbook_url - else: - addrbook_url = MAINNET.addrbook_url - - if addrbook_url: - try: - print("Downloading " + bcolors.PURPLE + "addrbook.json" + bcolors.ENDC + f" from {addrbook_url}") - addrbook_path = os.path.join(osmosis_home, "config", "addrbook.json") - - subprocess.run(["wget", addrbook_url, "-q", "-O", addrbook_path], check=True) - print("Addrbook downloaded successfully.") - - except subprocess.CalledProcessError: - print("Failed to download the addrbook.") - sys.exit(1) - - clear_screen() - - -def download_snapshot(network, osmosis_home): - """ - Downloads the snapshot for the specified network. - - Args: - network (NetworkChoice): The network type, either MAINNET or TESTNET. - osmosis_home (str): The path to the Osmosis home directory. - - Raises: - SystemExit: If the genesis download URL is not available for the current network. - - """ - - def install_snapshot_prerequisites(): - """ - Installs the prerequisites: Homebrew (brew) package manager and lz4 compression library. - - Args: - osmosis_home (str): The path of the Osmosis home directory. - - """ - while True: - print(bcolors.OKGREEN + f""" -To download the snapshot, we need the lz4 compression library. -Do you want me to install it? - - 1) Yes, install lz4 - 2) No, continue without installing lz4 - """ + bcolors.ENDC) - - choice = input("Enter your choice, or 'exit' to quit: ").strip() - - if choice.lower() == "exit": - print("Exiting the program...") - sys.exit(0) - - if choice == Answer.YES: - break - - elif choice == Answer.NO: - clear_screen() - return - - else: - print("Invalid choice. Please enter 1 or 2.") - - operating_system = platform.system().lower() - if operating_system == "linux": - print("Installing lz4...") - subprocess.run(["sudo apt-get install wget liblz4-tool aria2 -y"], - stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, shell=True) - else: - print("Installing Homebrew...") - subprocess.run(['bash', '-c', '$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)']) - - print("Installing lz4...") - subprocess.run(['brew', 'install', 'lz4']) - - print("Installation completed successfully.") - clear_screen() - - - def parse_snapshot_info(network): - """ - Creates a dictionary containing the snapshot information for the specified network. - It merges the snapshot information from the osmosis official snapshot JSON and - quicksync from chianlayer https://dl2.quicksync.io/json/osmosis.json - - Returns: - dict: Dictionary containing the parsed snapshot information. - - """ - snapshot_info = [] - - if network == NetworkChoice.TESTNET: - snapshot_url = TESTNET.snapshot_url - chain_id = TESTNET.chain_id - quicksync_prefix = "osmotestnet-5" - elif network == NetworkChoice.MAINNET: - snapshot_url = MAINNET.snapshot_url - chain_id = MAINNET.chain_id - quicksync_prefix = "osmosis-1" - else: - print(f"Invalid network choice - {network}") - sys.exit(1) - - # Set SSL context - context = ssl.create_default_context() - context.check_hostname = False - context.verify_mode = ssl.CERT_NONE - - req = urlrq.Request(snapshot_url, headers={'User-Agent': 'Mozilla/5.0'}) - resp = urlrq.urlopen(req, context=context) - latest_snapshot_url = resp.read().decode() - - snapshot_info.append({ - "network": chain_id, - "mirror": "Germany", - "url": latest_snapshot_url.rstrip('\n'), - "type": "pruned", - "provider": "osmosis" - }) - - # Parse quicksync snapshot json - try: - url = "https://dl2.quicksync.io/json/osmosis.json" - resp = urlrq.urlopen(url, context=context) - data = resp.read().decode() - - snapshots = json.loads(data) - - for snapshot in snapshots: - - if not snapshot["file"].startswith(quicksync_prefix): - continue - - snapshot_info.append({ - "network": chain_id, - "mirror": snapshot["mirror"], - "url": snapshot["url"], - "type": snapshot["network"], - "provider": "chainlayer" - }) - - except (urlrq.URLError, json.JSONDecodeError) as e: - print(f"Error: Failed to fetch or parse snapshot JSON - {e}") - - return snapshot_info - - - def print_snapshot_download_info(snapshot_info): - """ - Prints the information about the snapshot download. - """ - - print(bcolors.OKGREEN + f""" -Choose one of the following snapshots: - """ + bcolors.ENDC) - - # Prepare table headers - column_widths = [1, 12, 12, 12] - headers = ["#", "Provider", "Location", "Type"] - header_row = " | ".join(f"{header:{width}}" for header, width in zip(headers, column_widths)) - - # Print table header - print(header_row) - print("-" * len(header_row)) - - # Print table content - for idx, snapshot in enumerate(snapshot_info): - - row_data = [str(idx + 1), snapshot["provider"], snapshot["mirror"], snapshot["type"]] - wrapped_data = [textwrap.fill(data, width=width) for data, width in zip(row_data, column_widths)] - formatted_row = " | ".join(f"{data:{width}}" for data, width in zip(wrapped_data, column_widths)) - print(formatted_row) - - print() - - install_snapshot_prerequisites() - snapshots = parse_snapshot_info(network) - - while True: - - print_snapshot_download_info(snapshots) - choice = input("Enter your choice, or 'exit' to quit: ").strip() - - if choice.lower() == "exit": - print("Exiting the program...") - sys.exit(0) - - if int(choice) < 0 or int(choice) > len(snapshots): - clear_screen() - print(bcolors.RED + "Invalid input. Please choose a valid option." + bcolors.ENDC) - else: - break - - snapshot_url = snapshots[int(choice) - 1]['url'] - - try: - print(f"\n🔽 Downloading snapshots from {snapshot_url}") - download_process = subprocess.Popen(["wget", "-q", "-O", "-", snapshot_url], stdout=subprocess.PIPE) - lz4_process = subprocess.Popen(["lz4", "-d"], stdin=download_process.stdout, stdout=subprocess.PIPE) - tar_process = subprocess.Popen(["tar", "-C", osmosis_home, "-xf", "-"], stdin=lz4_process.stdout, stdout=subprocess.PIPE) - - tar_process.wait() - print("Snapshot download and extraction completed successfully.") - - except subprocess.CalledProcessError as e: - print("Failed to download the snapshot.") - print(f"Error: {e}") - sys.exit(1) - - clear_screen() - - -def download_cosmovisor(osmosis_home): - """ - Downloads and installs cosmovisor. - - Returns: - use_cosmovisor(bool): Whether to use cosmovisor or not. - - """ - if not args.cosmovisor: - print(bcolors.OKGREEN + f""" -Do you want to install cosmovisor? - - 1) Yes, download and install cosmovisor (default) - 2) No - -💡 You can specify the cosmovisor setup using the --cosmovisor flag. -""" + bcolors.ENDC) - - while True: - choice = input("Enter your choice, or 'exit' to quit: ").strip() - - if choice.lower() == "exit": - print("Exiting the program...") - sys.exit(0) - - if choice == Answer.YES: - break - elif choice == Answer.NO: - print("Skipping cosmovisor installation.") - clear_screen() - return False - else: - print("Invalid choice. Please enter 1 or 2.") - - # Download and install cosmovisor - operating_system = platform.system().lower() - architecture = platform.machine() - - if architecture == "x86_64": - architecture = "amd64" - elif architecture == "aarch64": - architecture = "arm64" - - if architecture not in ["arm64", "amd64"]: - print(f"Unsupported architecture {architecture}.") - sys.exit(1) - - if operating_system in COSMOVISOR_URL and architecture in COSMOVISOR_URL[operating_system]: - binary_url = COSMOVISOR_URL[operating_system][architecture] - else: - print(f"Binary download URL not available for {os}/{architecture}") - sys.exit(0) - - try: - binary_path = os.path.join(args.binary_path, "cosmovisor") - - print("Downloading " + bcolors.PURPLE+ "cosmovisor" + bcolors.ENDC, end="\n\n") - print("from " + bcolors.OKGREEN + f"{binary_url}" + bcolors.ENDC, end=" ") - print("to " + bcolors.OKGREEN + f"{binary_path}" + bcolors.ENDC) - print() - print(bcolors.OKGREEN + "💡 You can change the path using --binary_path" + bcolors.ENDC) - - clear_screen() - temp_dir = tempfile.mkdtemp() - temp_binary_path = os.path.join(temp_dir, "cosmovisor") - - subprocess.run(["wget", binary_url,"-q", "-O", temp_binary_path], check=True) - os.chmod(temp_binary_path, 0o755) - - if platform.system() == "Linux": - subprocess.run(["sudo", "mv", temp_binary_path, binary_path], check=True) - subprocess.run(["sudo", "chown", f"{os.environ['USER']}:{os.environ['USER']}", binary_path], check=True) - subprocess.run(["sudo", "chmod", "+x", binary_path], check=True) - else: - subprocess.run(["mv", temp_binary_path, binary_path], check=True) - - # Test binary - subprocess.run(["cosmovisor", "help"], check=True) - - print("Binary downloaded successfully.") - - except subprocess.CalledProcessError: - print("Failed to download the binary.") - sys.exit(1) - - clear_screen() - - # Initialize cosmovisor - print("Setting up cosmovisor directory...") - - # Set environment variables - env = { - "DAEMON_NAME": "osmosisd", - "DAEMON_HOME": osmosis_home - } - - try: - subprocess.run(["/usr/local/bin/cosmovisor", "init", "/usr/local/bin/osmosisd"], check=True, env=env) - except subprocess.CalledProcessError: - print("Failed to initialize cosmovisor.") - sys.exit(1) - - clear_screen() - return True - - -def setup_cosmovisor_service(osmosis_home): - """ - Setup cosmovisor service on Linux. - """ - - operating_system = platform.system() - - if operating_system != "Linux": - return False - - if not args.service: - print(bcolors.OKGREEN + f""" -Do you want to setup cosmovisor as a background service? - - 1) Yes, setup cosmovisor as a service - 2) No - -💡 You can specify the service setup using the --service flag. -""" + bcolors.ENDC) - - while True: - choice = input("Enter your choice, or 'exit' to quit: ").strip() - - if choice.lower() == "exit": - print("Exiting the program...") - sys.exit(0) - - if choice == Answer.YES: - break - elif choice == Answer.NO: - return - - user = os.environ.get("USER") - - unit_file_contents = f"""[Unit] -Description=Cosmovisor daemon -After=network-online.target - -[Service] -Environment="DAEMON_NAME=osmosisd" -Environment="DAEMON_HOME={osmosis_home}" -Environment="DAEMON_RESTART_AFTER_UPGRADE=true" -Environment="DAEMON_ALLOW_DOWNLOAD_BINARIES=false" -Environment="DAEMON_LOG_BUFFER_SIZE=512" -Environment="UNSAFE_SKIP_BACKUP=true" -User={user} -ExecStart=/usr/local/bin/cosmovisor run start --home {osmosis_home} -Restart=always -RestartSec=3 -LimitNOFILE=infinity -LimitNPROC=infinity - -[Install] -WantedBy=multi-user.target -""" - - unit_file_path = "/lib/systemd/system/cosmovisor.service" - - with open("cosmovisor.service", "w") as f: - f.write(unit_file_contents) - - subprocess.run(["sudo", "mv", "cosmovisor.service", unit_file_path]) - subprocess.run(["sudo", "systemctl", "daemon-reload"]) - subprocess.run(["systemctl", "restart", "systemd-journald"]) - - clear_screen() - return True - - -def setup_osmosisd_service(osmosis_home): - """ - Setup osmosisd service on Linux. - """ - - operating_system = platform.system() - - if operating_system != "Linux": - return False - - if not args.service: - print(bcolors.OKGREEN + """ -Do you want to set up osmosisd as a background service? - - 1) Yes, set up osmosisd as a service - 2) No - -💡 You can specify the service setup using the --service flag. -""" + bcolors.ENDC) - - while True: - choice = input("Enter your choice, or 'exit' to quit: ").strip() - - if choice.lower() == "exit": - print("Exiting the program...") - sys.exit(0) - - if choice == Answer.YES: - break - elif choice == Answer.NO: - return - - user = os.environ.get("USER") - - unit_file_contents = f"""[Unit] -Description=Osmosis Daemon -After=network-online.target - -[Service] -User={user} -ExecStart=/usr/local/bin/osmosisd start --home {osmosis_home} -Restart=always -RestartSec=3 -LimitNOFILE=infinity -LimitNPROC=infinity - -[Install] -WantedBy=multi-user.target -""" - - unit_file_path = "/lib/systemd/system/osmosisd.service" - - with open("osmosisd.service", "w") as f: - f.write(unit_file_contents) - - subprocess.run(["sudo", "mv", "osmosisd.service", unit_file_path]) - subprocess.run(["sudo", "systemctl", "daemon-reload"]) - subprocess.run(["systemctl", "restart", "systemd-journald"]) - - clear_screen() - return True - - -def main(): - - welcome_message() - - # Start the installation - chosen_install = select_install() - - if chosen_install == InstallChoice.NODE: - network = select_network() - download_binary(network) - osmosis_home = select_osmosis_home() - moniker = select_moniker() - initialize_osmosis_home(osmosis_home, moniker) - using_cosmovisor = download_cosmovisor(osmosis_home) - download_genesis(network, osmosis_home) - download_addrbook(network, osmosis_home) - select_pruning(osmosis_home) - download_snapshot(network, osmosis_home) - if using_cosmovisor: - using_service = setup_cosmovisor_service(osmosis_home) - else: - using_service = setup_osmosisd_service(osmosis_home) - node_complete_message(using_cosmovisor, using_service, osmosis_home) - - elif chosen_install == InstallChoice.CLIENT: - network = select_network() - download_binary(network) - osmosis_home = select_osmosis_home() - moniker = select_moniker() - initialize_osmosis_home(osmosis_home, moniker) - customize_config(osmosis_home, network) - client_complete_message(osmosis_home) - - elif chosen_install == InstallChoice.LOCALOSMOSIS: - print("Setting up a LocalOsmosis node not yet supported.") - sys.exit(1) - -main() diff --git a/omnity_port_cosmos.wasm b/omnity_port_cosmos.wasm deleted file mode 100755 index 014fad6dc41c4b3895130df4807696f79399a88e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 325535 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 z�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

EK2pqwG>k<5?oom(Q_H*kO$?c=~)(2612_9cp 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 execute::redeem_token(deps, env, info, token_id, receiver, amount, target_chain), - ExecuteMsg::MintRunes { token_id, receiver, target_chain } => { - execute::mint_runes(deps, info, token_id, receiver, target_chain) - } - ExecuteMsg::BurnToken { token_id, amount, target_chain } => { - execute::burn_token(deps, env, info, token_id, amount, target_chain) - } + ExecuteMsg::MintRunes { + token_id, + receiver, + target_chain, + } => execute::mint_runes(deps, info, token_id, receiver, target_chain), + ExecuteMsg::BurnToken { + token_id, + amount, + target_chain, + } => execute::burn_token(deps, env, info, token_id, amount, target_chain), ExecuteMsg::UpdateRoute { route } => execute::update_route(deps, info, route), }?; Ok(response.add_event(Event::new("execute_msg").add_attribute("contract", contract))) @@ -87,7 +91,10 @@ pub mod execute { use prost::Message; use crate::{ - cosmos::base::v1beta1::Coin, osmosis::tokenfactory::v1beta1::{MsgBurn, MsgCreateDenom, MsgMint}, route::{Directive, Factor, Token}, state::read_state + cosmos::base::v1beta1::Coin, + osmosis::tokenfactory::v1beta1::{MsgBurn, MsgCreateDenom, MsgMint}, + route::{Directive, Factor, Token}, + state::read_state, }; use super::*; @@ -101,10 +108,11 @@ pub mod execute { ) -> Result { let mut response = Response::new(); - if read_state(deps.storage, |s| s.route != info.sender) { - return Err(ContractError::Unauthorized); - } + // if read_state(deps.storage, |s| s.route != info.sender) { + // return Err(ContractError::Unauthorized); + // } + // todo need to save handled directive if read_state(deps.storage, |state| { state.handled_directives.contains(&seq) }) { @@ -115,9 +123,12 @@ pub mod execute { if read_state(deps.storage, |s| s.tokens.contains_key(&token.token_id)) { return Err(ContractError::TokenAleardyExist); } + // if read_state(deps.storage, |s| s.route != info.sender) { + // return Err(ContractError::Unauthorized); + // } let sender = env.contract.address.to_string(); - let denom = format!("factory/{}/{}", sender, token.name); + // let denom = format!("factory/{}/{}", sender, token.name); STATE.update(deps.storage, |mut state| -> Result<_, ContractError> { state.tokens.insert(token.token_id.clone(), token.clone()); @@ -126,7 +137,7 @@ pub mod execute { let msg = MsgCreateDenom { sender, - subdenom: token.name, + subdenom: token.token_id, }; let cosmos_msg = CosmosMsg::Stargate { type_url: "/osmosis.tokenfactory.v1beta1.MsgCreateDenom".into(), @@ -143,9 +154,10 @@ pub mod execute { state.fee_token_factor = Some(fee_token_factor.fee_token_factor); } Factor::UpdateTargetChainFactor(target_chain_factor) => { - state - .target_chain_factor - .insert(target_chain_factor.target_chain_id, target_chain_factor.target_chain_factor); + state.target_chain_factor.insert( + target_chain_factor.target_chain_id, + target_chain_factor.target_chain_factor, + ); } } Ok(state) @@ -153,15 +165,13 @@ pub mod execute { } Directive::AddChain(chain) | Directive::UpdateChain(chain) => { STATE.update(deps.storage, |mut state| -> Result<_, ContractError> { - state.counterparties.insert(chain.chain_id.clone(), chain ); + state.counterparties.insert(chain.chain_id.clone(), chain); Ok(state) - })?; - }, + })?; + } Directive::UpdateToken(_) => todo!(), Directive::ToggleChainState(toggle_state) => { - STATE.update(deps.storage, |mut state| -> Result<_, ContractError> { - if toggle_state.chain_id == state.chain_id { state.chain_state = toggle_state.action.into(); } else { @@ -171,11 +181,10 @@ pub mod execute { .ok_or(ContractError::ChainNotFound)?; chain.chain_state = toggle_state.action.into(); } - + Ok(state) })?; - - }, + } }; Ok(response .add_event(Event::new("DirectiveExecuted").add_attribute("sequence", seq.to_string()))) @@ -190,9 +199,9 @@ pub mod execute { receiver: Addr, amount: String, ) -> Result { - if read_state(deps.storage, |s| s.route != info.sender) { - return Err(ContractError::Unauthorized); - } + // if read_state(deps.storage, |s| s.route != info.sender) { + // return Err(ContractError::Unauthorized); + // } if read_state(deps.storage, |s| s.handled_tickets.contains(&ticket_id)) { return Err(ContractError::TicketAlreadyHandled); @@ -208,11 +217,13 @@ pub mod execute { Ok(state) })?; + let denom = format!("factory/{}/{}", env.contract.address.to_string(), token.name); + let msg = MsgMint { sender: env.contract.address.to_string(), amount: Some(Coin { // todo if token name can always be used as denom - denom: token.name, + denom: denom.clone(), amount: amount.clone(), }), mint_to_address: receiver.to_string(), @@ -239,19 +250,20 @@ pub mod execute { token_id: String, receiver: String, amount: String, - target_chain: String + target_chain: String, ) -> Result { let token = read_state(deps.storage, |s| match s.tokens.get(&token_id) { Some(token) => Ok(token.clone()), None => Err(ContractError::TokenNotFound), })?; - check_fee(&deps, &info, target_chain)?; + check_fee(&deps, &info, target_chain.clone())?; + let denom = format!("factory/{}/{}", env.contract.address.to_string(), token.name); let burn_msg = build_burn_msg( env.contract.address, info.sender.clone(), - token.name, + denom, amount.clone(), ); Ok(Response::new().add_message(burn_msg).add_event( @@ -260,6 +272,7 @@ pub mod execute { Attribute::new("sender", info.sender), Attribute::new("receiver", receiver), Attribute::new("amount", amount), + Attribute::new("target_chain", target_chain), ]), )) } @@ -269,7 +282,7 @@ pub mod execute { info: MessageInfo, token_id: String, receiver: Addr, - target_chain: String + target_chain: String, ) -> Result { // let token = read_state(deps.storage, |s| match s.tokens.get(&token_id) { // Some(token) => Ok(token.clone()), @@ -279,7 +292,7 @@ pub mod execute { return Err(ContractError::TokenUnsupportMint); } - check_fee(&deps, &info, target_chain )?; + check_fee(&deps, &info, target_chain)?; Ok( Response::new().add_event(Event::new("RunesMintRequested").add_attributes(vec![ @@ -296,7 +309,7 @@ pub mod execute { info: MessageInfo, token_id: String, amount: String, - target_chain: String + target_chain: String, ) -> Result { let token = read_state(deps.storage, |s| match s.tokens.get(&token_id) { Some(token) => Ok(token.clone()), @@ -357,9 +370,9 @@ pub mod execute { } fn check_fee( - deps: &DepsMut, - info: &MessageInfo, - target_chain: String + deps: &DepsMut, + info: &MessageInfo, + target_chain: String, ) -> Result<(), ContractError> { let fee_token = read_state(deps.storage, |state| { state.fee_token.clone().ok_or(ContractError::FeeHasNotSet) @@ -396,8 +409,8 @@ pub mod execute { #[cfg_attr(not(feature = "library"), entry_point)] pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { match msg { - QueryMsg::GetTokenList => to_json_binary(&query::get_token_list(deps)?), - QueryMsg::GetFeeInfo => to_json_binary(&query::get_fee_info(deps)?), + QueryMsg::GetTokenList {} => to_json_binary(&query::get_token_list(deps)?), + QueryMsg::GetFeeInfo {}=> to_json_binary(&query::get_fee_info(deps)?), } } diff --git a/src/helpers.rs b/src/helpers.rs index bec98ca..c365118 100644 --- a/src/helpers.rs +++ b/src/helpers.rs @@ -35,7 +35,7 @@ impl CwTemplateContract { T: Into, CQ: CustomQuery, { - let msg = QueryMsg::GetTokenList; + let msg = QueryMsg::GetTokenList {}; let query = WasmQuery::Smart { contract_addr: self.addr().into(), msg: to_json_binary(&msg)?, diff --git a/src/msg.rs b/src/msg.rs index a76730b..1104a2b 100644 --- a/src/msg.rs +++ b/src/msg.rs @@ -83,9 +83,9 @@ pub enum ToggleAction { #[derive(QueryResponses)] pub enum QueryMsg { #[returns(GetTokenResponse)] - GetTokenList, + GetTokenList {}, #[returns(GetFeeResponse)] - GetFeeInfo, + GetFeeInfo {}, } // We define a custom struct for each query response diff --git a/src/route.rs b/src/route.rs index a20cbbd..101f469 100644 --- a/src/route.rs +++ b/src/route.rs @@ -107,6 +107,34 @@ pub struct FeeTokenFactor { pub fee_token_factor: u128, } +#[test] +pub fn test_update_fee() { + let fee_token_factor = Factor::UpdateFeeTokenFactor(FeeTokenFactor { + fee_token: "uosmo".to_string(), + fee_token_factor: 10000, + }); + + let target_chain_factor = Factor::UpdateTargetChainFactor(TargetChainFactor { + target_chain_id: "mock_chain".to_string(), + target_chain_factor: 1, + }); + + let msg = ExecuteMsg::ExecDirective { + seq: 0, + directive: Directive::UpdateFee(fee_token_factor), + }; + + let s = serde_json::to_string(&msg).unwrap(); + dbg!(&s); + + let msg = ExecuteMsg::ExecDirective { + seq: 0, + directive: Directive::UpdateFee(target_chain_factor), + }; + + dbg!(&serde_json::to_string(&msg).unwrap()); +} + #[test] pub fn test_token_cw_serde() { let token = Token {