From 0693e26cda72374876e5c134b3e3c486be0f5afd Mon Sep 17 00:00:00 2001 From: Nuc1eoN <2538022+Nuc1eoN@users.noreply.github.com> Date: Sun, 9 Oct 2022 15:34:20 +0200 Subject: [PATCH 1/3] Update/add German translation --- .../resources/i18n/ApiError_de.properties | 48 ++--- src/main/resources/i18n/SysTray_de.properties | 20 +- .../i18n/TransactionValidity_de.properties | 195 ++++++++++++++++++ 3 files changed, 229 insertions(+), 34 deletions(-) create mode 100644 src/main/resources/i18n/TransactionValidity_de.properties diff --git a/src/main/resources/i18n/ApiError_de.properties b/src/main/resources/i18n/ApiError_de.properties index 8f5bffeb..f00c2b45 100644 --- a/src/main/resources/i18n/ApiError_de.properties +++ b/src/main/resources/i18n/ApiError_de.properties @@ -4,52 +4,52 @@ # "localeLang": "de", ### Common ### -JSON = JSON Nachricht konnte nicht geparst werden +JSON = JSON-Nachricht konnte nicht geparst werden -INSUFFICIENT_BALANCE = Kein Ausgleich +INSUFFICIENT_BALANCE = Guthaben reicht nicht aus UNAUTHORIZED = API-Aufruf nicht autorisiert REPOSITORY_ISSUE = Repository-Fehler -NON_PRODUCTION = Dieser APi-Aufruf ist nicht gestattet für Produtkion +NON_PRODUCTION = dieser API-Aufruf ist für Produktionssysteme nicht gestattet -BLOCKCHAIN_NEEDS_SYNC = Blockchain muss sich erst verbinden +BLOCKCHAIN_NEEDS_SYNC = Blockchain muss sich erst synchronisieren -NO_TIME_SYNC = noch keine Uhrensynchronisation +NO_TIME_SYNC = Uhrzeit noch nicht synchronisiert ### Validation ### -INVALID_SIGNATURE = ungültige Signatur +INVALID_SIGNATURE = Signatur ungültig -INVALID_ADDRESS = ungültige Adresse +INVALID_ADDRESS = Adresse ungültig -INVALID_PUBLIC_KEY = ungültiger public key +INVALID_PUBLIC_KEY = öffentlicher Schlüssel ungültig -INVALID_DATA = ungültige Daten +INVALID_DATA = Daten ungültig -INVALID_NETWORK_ADDRESS = ungültige Netzwerk Adresse +INVALID_NETWORK_ADDRESS = Netzwerk Adresse ungültig -ADDRESS_UNKNOWN = Account Adresse unbekannt +ADDRESS_UNKNOWN = Kontoadresse unbekannt -INVALID_CRITERIA = ungültige Suchkriterien +INVALID_CRITERIA = Suchkriterien ungültig -INVALID_REFERENCE = ungültige Referenz +INVALID_REFERENCE = Referenz ungültig TRANSFORMATION_ERROR = konnte JSON nicht in eine Transaktion umwandeln -INVALID_PRIVATE_KEY = ungültiger private key +INVALID_PRIVATE_KEY = öffentlicher Schlüssel ungültig -INVALID_HEIGHT = ungültige block height +INVALID_HEIGHT = Blockhöhe ungültig -CANNOT_MINT = Account kann nicht minten +CANNOT_MINT = Konto kann nicht prägen ### Blocks ### -BLOCK_UNKNOWN = block unbekannt +BLOCK_UNKNOWN = Block unbekannt ### Transactions ### TRANSACTION_UNKNOWN = Transaktion unbekannt -PUBLIC_KEY_NOT_FOUND = public key wurde nicht gefunden +PUBLIC_KEY_NOT_FOUND = öffentlicher Schlüssel wurde nicht gefunden # this one is special in that caller expected to pass two additional strings, hence the two %s TRANSACTION_INVALID = Transaktion ungültig: %s (%s) @@ -58,19 +58,19 @@ TRANSACTION_INVALID = Transaktion ungültig: %s (%s) NAME_UNKNOWN = Name unbekannt ### Asset ### -INVALID_ASSET_ID = ungültige asset ID +INVALID_ASSET_ID = Vermögenswert-Kennung ungültig -INVALID_ORDER_ID = ungültige asset order ID +INVALID_ORDER_ID = Vermögenswert-Auftragssnummer ungültig -ORDER_UNKNOWN = unbekannte asset order ID +ORDER_UNKNOWN = Vermögenswert-Auftragssnummer unbekannt ### Groups ### GROUP_UNKNOWN = Gruppe unbekannt ### Foreign Blockchain ### -FOREIGN_BLOCKCHAIN_NETWORK_ISSUE = fremde Blockchain oder ElectrumX Netzwerk Problem +FOREIGN_BLOCKCHAIN_NETWORK_ISSUE = fremde Blockchain oder ElectrumX Netzwerkproblem -FOREIGN_BLOCKCHAIN_BALANCE_ISSUE = unzureichend Bilanz auf fremde blockchain +FOREIGN_BLOCKCHAIN_BALANCE_ISSUE = unzureichendes Guthaben auf fremder blockchain FOREIGN_BLOCKCHAIN_TOO_SOON = zu früh um fremde Blockchain-Transaktionen zu übertragen (Sperrzeit/mittlere Blockzeit) @@ -80,4 +80,4 @@ ORDER_SIZE_TOO_SMALL = Bestellmenge zu niedrig ### Data ### FILE_NOT_FOUND = Datei nicht gefunden -NO_REPLY = Peer hat nicht mit Daten verbinden +NO_REPLY = Peer hat nicht in vorgegebener Zeit geantwortet diff --git a/src/main/resources/i18n/SysTray_de.properties b/src/main/resources/i18n/SysTray_de.properties index b949ca8c..f6dbc740 100644 --- a/src/main/resources/i18n/SysTray_de.properties +++ b/src/main/resources/i18n/SysTray_de.properties @@ -1,7 +1,7 @@ #Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) # SysTray pop-up menu -APPLYING_UPDATE_AND_RESTARTING = Automatisches Update anwenden und neu starten … +APPLYING_UPDATE_AND_RESTARTING = Automatisches Update anwenden und neu starten... AUTO_UPDATE = Automatisches Update @@ -17,7 +17,7 @@ CONNECTION = Verbindung CONNECTIONS = Verbindungen -CREATING_BACKUP_OF_DB_FILES = Erstellen Backup von Datenbank Dateien … +CREATING_BACKUP_OF_DB_FILES = Erstelle Backup von Datenbank Dateien... DB_BACKUP = Datenbank Backup @@ -29,18 +29,18 @@ EXIT = Verlassen LITE_NODE = Lite node -MINTING_DISABLED = NOT minting +MINTING_DISABLED = Münzprägung inaktiv -MINTING_ENABLED = \u2714 Minting +MINTING_ENABLED = \u2714 Münzprägung aktiv -OPEN_UI = Öffne UI +OPEN_UI = Öffne Benutzeroberfläche -PERFORMING_DB_CHECKPOINT = Speichern nicht übergebener Datenbank Änderungen … +PERFORMING_DB_CHECKPOINT = Speichere unerfasste Datenbankänderungen... -PERFORMING_DB_MAINTENANCE = Planmäßige Wartung durchführen... +PERFORMING_DB_MAINTENANCE = Planmäßige Wartung wird durchgeführt... -SYNCHRONIZE_CLOCK = Synchronisiere Uhr +SYNCHRONIZE_CLOCK = Synchronisiere Uhrzeit -SYNCHRONIZING_BLOCKCHAIN = Synchronisierung +SYNCHRONIZING_BLOCKCHAIN = Synchronisiere -SYNCHRONIZING_CLOCK = Synchronisierung Uhr +SYNCHRONIZING_CLOCK = Uhrzeit wird synchronisiert diff --git a/src/main/resources/i18n/TransactionValidity_de.properties b/src/main/resources/i18n/TransactionValidity_de.properties new file mode 100644 index 00000000..eab7fb9e --- /dev/null +++ b/src/main/resources/i18n/TransactionValidity_de.properties @@ -0,0 +1,195 @@ +# + +ACCOUNT_ALREADY_EXISTS = Konto existiert bereits + +ACCOUNT_CANNOT_REWARD_SHARE = Konto kann nicht an Belohnungsbeteiligung teilnehmen + +ADDRESS_ABOVE_RATE_LIMIT = Adresse hat festgelegtes Tarif-Limit erreicht + +ADDRESS_BLOCKED = diese Adresse ist gesperrt + +ALREADY_GROUP_ADMIN = bereits Gruppenadmin + +ALREADY_GROUP_MEMBER = bereits Gruppenmitglied + +ALREADY_VOTED_FOR_THAT_OPTION = bereits für diese Option gestimmt + +ASSET_ALREADY_EXISTS = Vermögenswert existiert bereits + +ASSET_DOES_NOT_EXIST = Vermögenswert existiert nicht + +ASSET_DOES_NOT_MATCH_AT = Vermögenswert stimmt nicht mit dem Vermögenswert von AT überein + +ASSET_NOT_SPENDABLE = Vermögenswert ist nicht auszahlbar + +AT_ALREADY_EXISTS = AT existiert bereits + +AT_IS_FINISHED = AT ist beendet + +AT_UNKNOWN = AT unbekannt + +BAN_EXISTS = Bann ist bereits vorhanden + +BAN_UNKNOWN = Bann unbekannt + +BANNED_FROM_GROUP = aus der Gruppe verbannt + +BUYER_ALREADY_OWNER = Käufer ist bereits Eigentümer + +CLOCK_NOT_SYNCED = Uhrzeit ist nicht synchronisiert + +DUPLICATE_MESSAGE = Adresse hat doppelte Nachricht gesendet + +DUPLICATE_OPTION = doppelte Option + +GROUP_ALREADY_EXISTS = Gruppe existiert bereits + +GROUP_APPROVAL_DECIDED = Gruppenzulassung bereits beschlossen + +GROUP_APPROVAL_NOT_REQUIRED = Gruppenzustimmung nicht erforderlich + +GROUP_DOES_NOT_EXIST = Gruppe existiert nicht + +GROUP_ID_MISMATCH = Gruppen-ID stimmt nicht überein + +GROUP_OWNER_CANNOT_LEAVE = Gruppeneigentümer kann Gruppe nicht verlassen + +HAVE_EQUALS_WANT = Haben-Vermögenswert ist derselbe wie Wollen-Vermögenswert + +INCORRECT_NONCE = falsche PoW-Nonce + +INSUFFICIENT_FEE = unzureichende Gebühr + +INVALID_ADDRESS = ungültige Adresse + +INVALID_AMOUNT = ungültiger Betrag + +INVALID_ASSET_OWNER = ungültiger Vermögenswert-Eigentümer + +INVALID_AT_TRANSACTION = ungültige AT-Transaktion + +INVALID_AT_TYPE_LENGTH = ungültige AT-Typ-Länge + +INVALID_BUT_OK = ungültig, aber OK + +INVALID_CREATION_BYTES = ungültige Erstellungsbytes + +INVALID_DATA_LENGTH = unzulässige Datenlänge + +INVALID_DESCRIPTION_LENGTH = unzulässige Länge der Beschreibung + +INVALID_GROUP_APPROVAL_THRESHOLD = ungültiger Schwellenwert für die Gruppenzulassung + +INVALID_GROUP_BLOCK_DELAY = ungültige Blockverzögerung bei der Gruppenfreigabe + +INVALID_GROUP_ID = ungültige Gruppen-ID + +INVALID_GROUP_OWNER = ungültiger Gruppeneigentümer + +INVALID_LIFETIME = unzulässige Gültigkeitsdauer + +INVALID_NAME_LENGTH = ungültige Namenslänge + +INVALID_NAME_OWNER = ungültiger Eigentümer des Namens + +INVALID_OPTION_LENGTH = ungültige Länge der Optionen + +INVALID_OPTIONS_COUNT = ungültige Anzahl von Optionen + +INVALID_ORDER_CREATOR = ungültiger Auftragsersteller + +INVALID_PAYMENTS_COUNT = ungültige Anzahl der Zahlungen + +INVALID_PUBLIC_KEY = ungültiger öffentlicher Schlüssel + +INVALID_QUANTITY = ungültige Menge + +INVALID_REFERENCE = ungültige Referenz + +INVALID_RETURN = ungültige Rückgabe + +INVALID_REWARD_SHARE_PERCENT = ungültiger Belohnungsbeteiligungs-Anteil + +INVALID_SELLER = ungültiger Verkäufer + +INVALID_TAGS_LENGTH = ungültige 'tags'-Länge + +INVALID_TIMESTAMP_SIGNATURE = ungültige Zeitstempel-Signatur + +INVALID_TX_GROUP_ID = ungültige Transaktionsgruppen-ID + +INVALID_VALUE_LENGTH = ungültige 'value'-Länge + +INVITE_UNKNOWN = Gruppeneinladung unbekannt + +JOIN_REQUEST_EXISTS = Gruppenverbindungsanfrage existiert bereits + +MAXIMUM_REWARD_SHARES = maximale Anzahl von Belohnungsbeteiligungen für dieses Konto bereits erreicht + +MISSING_CREATOR = fehlender Ersteller + +MULTIPLE_NAMES_FORBIDDEN = mehrere registrierte Namen pro Konto sind verboten + +NAME_ALREADY_FOR_SALE = Name steht bereits zum Verkauf + +NAME_ALREADY_REGISTERED = Name bereits registriert + +NAME_BLOCKED = dieser Name ist gesperrt + +NAME_DOES_NOT_EXIST = Name existiert nicht + +NAME_NOT_FOR_SALE = Name steht nicht zum Verkauf + +NAME_NOT_NORMALIZED = Name nicht in Unicode-'normalisierter' Form + +NEGATIVE_AMOUNT = ungültiger/negativer Betrag + +NEGATIVE_FEE = ungültige/negative Gebühr + +NEGATIVE_PRICE = ungültiger/negativer Preis + +NO_BALANCE = unzureichendes Guthaben + +NO_BLOCKCHAIN_LOCK = die Blockchain des Knotens ist derzeit beschäftigt + +NO_FLAG_PERMISSION = Konto hat diese Berechtigung nicht + +NOT_GROUP_ADMIN = Konto ist kein Gruppenadmin + +NOT_GROUP_MEMBER = Konto ist kein Gruppenmitglied + +NOT_MINTING_ACCOUNT = Konto kann nicht prägen + +NOT_YET_RELEASED = Funktion noch nicht freigegeben + +OK = OK + +ORDER_ALREADY_CLOSED = Vermögenswert-Handelsauftrag ist bereits geschlossen + +ORDER_DOES_NOT_EXIST = Vermögenswert-Handelsauftrag existiert nicht + +POLL_ALREADY_EXISTS = Umfrage existiert bereits + +POLL_DOES_NOT_EXIST = Umfrage existiert nicht + +POLL_OPTION_DOES_NOT_EXIST = Umfrageoption nicht vorhanden + +PUBLIC_KEY_UNKNOWN = öffentlicher Schlüssel unbekannt + +REWARD_SHARE_UNKNOWN = Belohnungsbeteiligung unbekannt + +SELF_SHARE_EXISTS = Selbst-Beteiligung (Belohnungsbeteiligung) existiert bereits + +TIMESTAMP_TOO_NEW = Zeitstempel zu neu + +TIMESTAMP_TOO_OLD = Zeitstempel zu alt + +TOO_MANY_UNCONFIRMED = Konto hat zu viele ausstehende unbestätigte Transaktionen + +TRANSACTION_ALREADY_CONFIRMED = Transaktion wurde bereits bestätigt + +TRANSACTION_ALREADY_EXISTS = Transaktion existiert bereits + +TRANSACTION_UNKNOWN = Transaktion unbekannt + +TX_GROUP_ID_MISMATCH = die Gruppen-ID der Transaktion stimmt nicht überein From ac433b1527f7d7ae5abed9f52fd121eb7321df4b Mon Sep 17 00:00:00 2001 From: crowetic <5431064+crowetic@users.noreply.github.com> Date: Tue, 27 Jun 2023 13:29:10 -0700 Subject: [PATCH 2/3] Add files via upload --- tools/qdn | 122 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 105 insertions(+), 17 deletions(-) diff --git a/tools/qdn b/tools/qdn index ea52e3c9..adbe861d 100755 --- a/tools/qdn +++ b/tools/qdn @@ -5,10 +5,10 @@ host="localhost" port=12391 if [ -z "$*" ]; then - echo "Usage:" + echo "Usage:" echo echo "Host/update data:" - echo "qdn POST [service] [name] PATH [dirpath] " + echo "qdn POST [service] [name] PATH [dirpath] <description> <tags=tag1,tag2,tag3> <category> <fee> <preview (true or false)>" echo "qdn POST [service] [name] STRING [data-string] <identifier>" echo echo "Fetch data:" @@ -22,6 +22,21 @@ if [ -z "$*" ]; then exit fi + +# Default ports for Qortal +mainnet_port=12391 +testnet_port=62391 + +# Check if the '-t' operator is passed, if so change to utilizing testnet. +if [[ "$1" == "-t" ]]; then + # Use testnet port + port=$testnet_port + shift +else + # Use mainnet port + port=$mainnet_port +fi + script_dir=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) if [ -f "apikey.txt" ]; then @@ -37,32 +52,46 @@ service=$2 name=$3 if [ -z "${method}" ]; then - echo "Error: missing method"; exit + echo "Error: missing method" + exit 1 fi if [ -z "${service}" ]; then - echo "Error: missing service"; exit + echo "Error: missing service" + exit 1 fi if [ -z "${name}" ]; then - echo "Error: missing name"; exit + echo "Error: missing name" + exit 1 fi - if [[ "${method}" == "POST" ]]; then type=$4 data=$5 identifier=$6 + title=$7 + description=$8 + tags=$9 + category=${10} + fee=${11} + preview=${12} + + if [ -z "${data}" ]; then if [[ "${type}" == "PATH" ]]; then - echo "Error: missing directory"; exit + echo "Error: missing directory - please use a path to a directory with a SINGLE file wishing to be published" + exit 1 elif [[ "${type}" == "STRING" ]]; then - echo "Error: missing data string"; exit + echo "Error: missing data string - please input the data string you wish to publish" + exit 1 else - echo "Error: unrecognized type"; exit + echo "Error: unrecognized type" + exit 1 fi fi if [ -z "${QORTAL_PRIVKEY}" ]; then - echo "Error: missing private key. Set it by running: export QORTAL_PRIVKEY=privkeyhere"; exit + echo "Error: missing private key. Set it by running: export QORTAL_PRIVKEY=privkeyhere" + exit 1 fi if [ -z "${identifier}" ]; then @@ -75,30 +104,88 @@ if [[ "${method}" == "POST" ]]; then elif [[ "${type}" == "STRING" ]]; then type_component="/string" fi + + # Create tags component in URL, comma-separated list of tags, will be added to the tags call. + tags_component="" + if [ -n "${tags}" ]; then + IFS=',' read -ra tag_array <<< "${tags}" + for tag in "${tag_array[@]}"; do + tags_component+="&tags=${tag}" + done + fi + + if [ -z ${tags_component} ]; then + tags_component="" + echo "nothing in tags, using empty tags" + fi + + #Create category component with pre-defined list of categories. Error if category is specified but not in list. + allowed_categories=("ART" "AUTOMOTIVE" "BEAUTY" "BOOKS" "BUSINESS" "COMMUNICATIONS" "CRYPTOCURRENCY" "CULTURE" "DATING" "DESIGN" "ENTERTAINMENT" "EVENTS" "FAITH" "FASHION" "FINANCE" "FOOD" "GAMING" "GEOGRAPHY" "HEALTH" "HISTORY" "HOME" "KNOWLEDGE" "LANGUAGE" "LIFESTYLE" "MANUFACTURING" "MAPS" "MUSIC" "NEWS" "OTHER" "PETS" "PHILOSOPHY" "PHOTOGRAPHY" "POLITICS" "PRODUCE" "PRODUCTIVITY" "PSYCHOLOGY" "QORTAL" "SCIENCE" "SELF_CARE" "SELF_SUFFICIENCY" "SHOPPING" "SOCIAL" "SOFTWARE" "SPIRITUALITY" "SPORTS" "STORYTELLING" "TECHNOLOGY" "TOOLS" "TRAVEL" "UNCATEGORIZED" "VIDEO" "WEATHER") + + if [[ -n "$category" && ! " ${allowed_categories[@]} " =~ " $category " ]]; then + echo "Error: Invalid category. Allowed categories are: ${allowed_categories[*]} be sure to place your overall script inputs in the correct order" + exit 1 + elif [ -z "$category" ]; then + category="" + echo "No category is being set" + fi + + if [ -n "$fee" ]; then + if [[ "$fee" == "1" || "$fee" == ".001" ]]; then + fee="100000" + elif [ -z "$fee" ]; then + fee="" + else + echo "Error: Invalid fee value. Expected '1', '.001' or no input." + exit 1 + fi + final_fee="${fee}" + fi + + + # check that preview is true/false + if [[ -n "$preview" && ! ( "$preview" == "true" || "$preview" == "false" ) ]]; then + echo "Error: Invalid preview value. Expected 'true' or 'false'. Please retry with boolean as preview entry." + exit 1 + elif [ -z "$preview" ]; then + preview="" + fi + + # Build the API URL + api_url="http://${host}:${port}/arbitrary/${service}/${name}/${identifier}${type_component}" + api_url+="?title=${title}&description=${description}&tags=${tags_component}&category=${category}&fee=${final_fee}&preview=${preview}" + echo "Creating transaction - this can take a while..." - tx_data=$(curl --silent --insecure -X ${method} "http://${host}:${port}/arbitrary/${service}/${name}/${identifier}${type_component}" -H "X-API-KEY: ${apikey}" -d "${data}") + tx_data=$(curl --silent --insecure -X ${method} "${api_url}" -H "accept: text/plain" -H "X-API-KEY: ${apikey}" -H "Content-Type: text/plain" -d "${data}") if [[ "${tx_data}" == *"error"* || "${tx_data}" == *"ERROR"* ]]; then - echo "${tx_data}"; exit + echo "Error creating transaction: ${tx_data}" + exit 1 elif [ -z "${tx_data}" ]; then - echo "Error: no transaction data returned"; exit + echo "Error: no transaction data returned" + exit 1 fi echo "Computing nonce..." computed_tx_data=$(curl --silent --insecure -X POST "http://${host}:${port}/arbitrary/compute" -H "Content-Type: application/json" -H "X-API-KEY: ${apikey}" -d "${tx_data}") + if [[ "${computed_tx_data}" == *"error"* || "${computed_tx_data}" == *"ERROR"* ]]; then - echo "${computed_tx_data}"; exit + echo "Error computing nonce: ${computed_tx_data}" + exit 1 fi echo "Signing..." signed_tx_data=$(curl --silent --insecure -X POST "http://${host}:${port}/transactions/sign" -H "Content-Type: application/json" -d "{\"privateKey\":\"${QORTAL_PRIVKEY}\",\"transactionBytes\":\"${computed_tx_data}\"}") + if [[ "${signed_tx_data}" == *"error"* || "${signed_tx_data}" == *"ERROR"* ]]; then - echo "${signed_tx_data}"; exit + echo "Error signing transaction: ${signed_tx_data}" + exit 1 fi echo "Broadcasting..." success=$(curl --silent --insecure -X POST "http://${host}:${port}/transactions/process" -H "Content-Type: text/plain" -d "${signed_tx_data}") + if [[ "${success}" == "true" ]]; then echo "Transaction broadcast successfully" else @@ -131,9 +218,10 @@ elif [[ "${method}" == "GET" ]]; then echo "Empty response from ${host}:${port}" fi if [[ "${response}" == *"error"* || "${response}" == *"ERROR"* ]]; then - echo "${response}"; exit + echo "${response}" + exit 1 fi echo "${response}" - fi + From d453e80c6b9bce924531e6b2abff1ba0376f34fb Mon Sep 17 00:00:00 2001 From: QuickMythril <quickmythril@protonmail.com> Date: Fri, 8 Sep 2023 03:30:06 -0400 Subject: [PATCH 3/3] Update fee in qdn script --- tools/qdn | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/qdn b/tools/qdn index adbe861d..b8f58141 100755 --- a/tools/qdn +++ b/tools/qdn @@ -131,12 +131,12 @@ if [[ "${method}" == "POST" ]]; then fi if [ -n "$fee" ]; then - if [[ "$fee" == "1" || "$fee" == ".001" ]]; then - fee="100000" + if [[ "$fee" == "1" || "$fee" == ".01" ]]; then + fee="1000000" elif [ -z "$fee" ]; then fee="" else - echo "Error: Invalid fee value. Expected '1', '.001' or no input." + echo "Error: Invalid fee value. Expected '1', '.01' or no input." exit 1 fi final_fee="${fee}"