Skip to content

Commit e467c0e

Browse files
authored
Merge pull request #458 from multiversx/TOOL-379-custom-hrp
Added address hrp as a config entry
2 parents 2a77e9d + 0ee9036 commit e467c0e

12 files changed

Lines changed: 36 additions & 25 deletions

File tree

multiversx_sdk_cli/accounts.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
TransactionComputer, UserSigner)
77
from multiversx_sdk.network_providers.accounts import AccountOnNetwork
88

9-
from multiversx_sdk_cli.constants import DEFAULT_HRP
9+
from multiversx_sdk_cli.config import get_address_hrp
1010
from multiversx_sdk_cli.interfaces import IAccount, IAddress, ITransaction
1111
from multiversx_sdk_cli.ledger.config import compare_versions
1212
from multiversx_sdk_cli.ledger.ledger_app_handler import \
@@ -61,11 +61,11 @@ def __init__(self,
6161
if pem_file:
6262
pem_path = Path(pem_file).expanduser().resolve()
6363
self.signer = UserSigner.from_pem_file(pem_path, pem_index)
64-
self.address = Address(self.signer.get_pubkey().buffer, DEFAULT_HRP)
64+
self.address = Address(self.signer.get_pubkey().buffer, get_address_hrp())
6565
elif key_file and password:
6666
key_file_path = Path(key_file).expanduser().resolve()
6767
self.signer = UserSigner.from_wallet(key_file_path, password)
68-
self.address = Address(self.signer.get_pubkey().buffer, DEFAULT_HRP)
68+
self.address = Address(self.signer.get_pubkey().buffer, get_address_hrp())
6969

7070
def sign_transaction(self, transaction: ITransaction) -> str:
7171
assert self.signer is not None

multiversx_sdk_cli/cli.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from typing import Any, List
77

88
import argcomplete
9+
from multiversx_sdk import LibraryConfig
910
from rich.logging import RichHandler
1011

1112
import multiversx_sdk_cli.cli_accounts
@@ -53,6 +54,8 @@ def _do_main(cli_args: List[str]):
5354
logging.basicConfig(level="INFO", format='%(name)s: %(message)s', handlers=[RichHandler(show_time=False, rich_tracebacks=True)])
5455

5556
verify_deprecated_entries_in_config_file()
57+
default_hrp = config.get_address_hrp()
58+
LibraryConfig.default_address_hrp = default_hrp
5659

5760
if not hasattr(args, "func"):
5861
parser.print_help()

multiversx_sdk_cli/cli_dns.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
from typing import Any, List
22

3-
from multiversx_sdk import Address, ProxyNetworkProvider
3+
from multiversx_sdk import ProxyNetworkProvider
44
from prettytable import PrettyTable
55

66
from multiversx_sdk_cli import cli_shared
77
from multiversx_sdk_cli.config import get_config_for_network_providers
8-
from multiversx_sdk_cli.constants import ADDRESS_ZERO_BECH32
8+
from multiversx_sdk_cli.constants import ADDRESS_ZERO_HEX
99
from multiversx_sdk_cli.dns import (compute_dns_address_for_shard_id,
1010
dns_address_for_name, name_hash, register,
1111
registration_cost, resolve, validate_name,
@@ -82,7 +82,7 @@ def dns_resolve(args: Any):
8282

8383
config = get_config_for_network_providers()
8484
addr = resolve(args.name, ProxyNetworkProvider(url=args.proxy, config=config))
85-
if addr.to_hex() != Address.new_from_bech32(ADDRESS_ZERO_BECH32).to_hex():
85+
if addr.to_hex() != ADDRESS_ZERO_HEX:
8686
print(addr.to_bech32())
8787

8888

multiversx_sdk_cli/cli_wallet.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
from multiversx_sdk.core.address import get_shard_of_pubkey
1111

1212
from multiversx_sdk_cli import cli_shared, utils
13-
from multiversx_sdk_cli.constants import DEFAULT_HRP, NUMBER_OF_SHARDS
13+
from multiversx_sdk_cli.config import get_address_hrp
14+
from multiversx_sdk_cli.constants import NUMBER_OF_SHARDS
1415
from multiversx_sdk_cli.errors import (BadUserInput, KnownError,
1516
WalletGenerationError)
1617
from multiversx_sdk_cli.sign_verify import SignedMessage, sign_message
@@ -54,7 +55,7 @@ def setup_parser(args: List[str], subparsers: Any) -> Any:
5455
)
5556
sub.add_argument("--format", choices=WALLET_FORMATS, help="the format of the generated wallet file (default: %(default)s)", default=None)
5657
sub.add_argument("--outfile", help="the output path and base file name for the generated wallet files (default: %(default)s)", type=str)
57-
sub.add_argument("--address-hrp", help=f"the human-readable part of the address, when format is {WALLET_FORMAT_KEYSTORE_SECRET_KEY} or {WALLET_FORMAT_PEM} (default: %(default)s)", type=str, default=DEFAULT_HRP)
58+
sub.add_argument("--address-hrp", help=f"the human-readable part of the address, when format is {WALLET_FORMAT_KEYSTORE_SECRET_KEY} or {WALLET_FORMAT_PEM} (default: %(default)s)", type=str, default=get_address_hrp())
5859
sub.add_argument("--shard", type=int, help="the shard in which the address will be generated; (default: random)")
5960
sub.set_defaults(func=wallet_new)
6061

@@ -69,7 +70,7 @@ def setup_parser(args: List[str], subparsers: Any) -> Any:
6970
sub.add_argument("--in-format", required=True, choices=WALLET_FORMATS, help="the format of the input file")
7071
sub.add_argument("--out-format", required=True, choices=WALLET_FORMATS_AND_ADDRESSES, help="the format of the output file")
7172
sub.add_argument("--address-index", help=f"the address index, if input format is {WALLET_FORMAT_RAW_MNEMONIC}, {WALLET_FORMAT_KEYSTORE_MNEMONIC} or {WALLET_FORMAT_PEM} (with multiple entries) and the output format is {WALLET_FORMAT_KEYSTORE_SECRET_KEY} or {WALLET_FORMAT_PEM}", type=int, default=0)
72-
sub.add_argument("--address-hrp", help=f"the human-readable part of the address, when the output format is {WALLET_FORMAT_KEYSTORE_SECRET_KEY} or {WALLET_FORMAT_PEM} (default: %(default)s)", type=str, default=DEFAULT_HRP)
73+
sub.add_argument("--address-hrp", help=f"the human-readable part of the address, when the output format is {WALLET_FORMAT_KEYSTORE_SECRET_KEY} or {WALLET_FORMAT_PEM} (default: %(default)s)", type=str, default=get_address_hrp())
7374
sub.set_defaults(func=convert_wallet)
7475

7576
sub = cli_shared.add_command_subparser(
@@ -82,6 +83,7 @@ def setup_parser(args: List[str], subparsers: Any) -> Any:
8283
group = sub.add_mutually_exclusive_group(required=True)
8384
group.add_argument("--encode", action="store_true", help="whether to encode")
8485
group.add_argument("--decode", action="store_true", help="whether to decode")
86+
sub.add_argument("--hrp", type=str, help="the human readable part; only used for encoding to bech32 (default: %(default)s)", default=get_address_hrp())
8587
sub.set_defaults(func=do_bech32)
8688

8789
sub = cli_shared.add_command_subparser(
@@ -288,7 +290,8 @@ def do_bech32(args: Any):
288290
value = args.value
289291

290292
if encode:
291-
address = Address.new_from_hex(value, DEFAULT_HRP)
293+
hrp = args.hrp
294+
address = Address.new_from_hex(value, hrp)
292295
result = address.to_bech32()
293296
else:
294297
address = Address.new_from_bech32(value)

multiversx_sdk_cli/config.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ def get_value(name: str) -> str:
6060
return value
6161

6262

63+
def get_address_hrp():
64+
return get_value("default_address_hrp")
65+
66+
6367
def set_value(name: str, value: Any):
6468
_guard_valid_name(name)
6569
data = read_file()
@@ -162,6 +166,7 @@ def get_defaults() -> Dict[str, Any]:
162166
"dependencies.testwallets.urlTemplate.windows": "https://github.com/multiversx/mx-sdk-testwallets/archive/{TAG}.tar.gz",
163167
"dependencies.wasm-opt.tag": "0.112.0",
164168
"github_api_token": "",
169+
"default_address_hrp": "erd"
165170
}
166171

167172

multiversx_sdk_cli/constants.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
DEFAULT_TX_VERSION = 2
1111

12-
DEFAULT_HRP = "erd"
13-
ADDRESS_ZERO_BECH32 = "erd1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq6gq4hu"
12+
ADDRESS_ZERO_HEX = "0000000000000000000000000000000000000000000000000000000000000000"
1413

1514
NUMBER_OF_SHARDS = 3

multiversx_sdk_cli/contracts.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
from multiversx_sdk_cli import errors
1313
from multiversx_sdk_cli.accounts import Account
14-
from multiversx_sdk_cli.constants import DEFAULT_HRP
14+
from multiversx_sdk_cli.config import get_address_hrp
1515
from multiversx_sdk_cli.interfaces import IAddress
1616

1717
logger = logging.getLogger("contracts")
@@ -211,7 +211,7 @@ def _prepare_args_for_factory(self, arguments: List[str]) -> List[Any]:
211211
args.append(self._hex_to_bytes(arg))
212212
elif arg.isnumeric():
213213
args.append(int(arg))
214-
elif arg.startswith(DEFAULT_HRP):
214+
elif arg.startswith(get_address_hrp()):
215215
args.append(Address.new_from_bech32(arg))
216216
elif arg.lower() == FALSE_STR_LOWER:
217217
args.append(False)
@@ -253,7 +253,7 @@ def _to_hex(arg: str):
253253

254254
if arg.isnumeric():
255255
return _prepare_decimal(arg)
256-
elif arg.startswith(DEFAULT_HRP):
256+
elif arg.startswith(get_address_hrp()):
257257
addr = Address.from_bech32(arg)
258258
return _prepare_hexadecimal(f"{HEX_PREFIX}{addr.hex()}")
259259
elif arg.lower() == FALSE_STR_LOWER or arg.lower() == TRUE_STR_LOWER:

multiversx_sdk_cli/dns.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66

77
from multiversx_sdk_cli import cli_shared, utils
88
from multiversx_sdk_cli.accounts import Account
9-
from multiversx_sdk_cli.constants import ADDRESS_ZERO_BECH32, DEFAULT_HRP
9+
from multiversx_sdk_cli.config import get_address_hrp
10+
from multiversx_sdk_cli.constants import ADDRESS_ZERO_HEX
1011
from multiversx_sdk_cli.contracts import SmartContract
1112
from multiversx_sdk_cli.transactions import (compute_relayed_v1_data,
1213
do_prepare_transaction)
@@ -36,10 +37,10 @@ def resolve(name: str, proxy: INetworkProvider) -> Address:
3637
)
3738

3839
if len(response) == 0:
39-
return Address.from_bech32(ADDRESS_ZERO_BECH32)
40+
return Address.new_from_hex(ADDRESS_ZERO_HEX, get_address_hrp())
4041

4142
result = response[0].get("returnDataParts")[0]
42-
return Address.from_hex(result, DEFAULT_HRP)
43+
return Address.new_from_hex(result, get_address_hrp())
4344

4445

4546
def validate_name(name: str, shard_id: int, proxy: INetworkProvider):
@@ -137,7 +138,7 @@ def compute_dns_address_for_shard_id(shard_id: int) -> Address:
137138
deployer_pubkey_prefix = InitialDNSAddress[:len(InitialDNSAddress) - ShardIdentiferLen]
138139

139140
deployer_pubkey = deployer_pubkey_prefix + bytes([0, shard_id])
140-
deployer = Account(address=Address(deployer_pubkey, DEFAULT_HRP))
141+
deployer = Account(address=Address(deployer_pubkey, get_address_hrp()))
141142
deployer.nonce = 0
142143
address_computer = AddressComputer(number_of_shards=3)
143144
contract_address = address_computer.compute_contract_address(deployer.address, deployer.nonce)

multiversx_sdk_cli/sign_verify.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def verify_signature(self) -> bool:
2323
verifiable_message.signature = bytes.fromhex(self.signature)
2424
message_computer = MessageComputer()
2525

26-
verifier = UserVerifier.from_address(Address.from_bech32(self.address))
26+
verifier = UserVerifier.from_address(Address.new_from_bech32(self.address))
2727
is_signed = verifier.verify(message_computer.compute_bytes_for_signing(verifiable_message), verifiable_message.signature)
2828
return is_signed
2929

@@ -37,4 +37,4 @@ def to_dictionary(self) -> Dict[str, str]:
3737

3838
def sign_message(message: str, account: Account) -> SignedMessage:
3939
signature = account.sign_message(message.encode())
40-
return SignedMessage(account.address.bech32(), message, signature)
40+
return SignedMessage(account.address.to_bech32(), message, signature)

multiversx_sdk_cli/transactions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ def get_guardian_account_from_args(args: Any):
136136
account = Account(key_file=args.guardian_keyfile, password=password)
137137
elif args.guardian_ledger:
138138
address = do_get_ledger_address(account_index=args.guardian_ledger_account_index, address_index=args.guardian_ledger_address_index)
139-
account = Account(address=Address.from_bech32(address))
139+
account = Account(address=Address.new_from_bech32(address))
140140
else:
141141
raise errors.NoWalletProvided()
142142

0 commit comments

Comments
 (0)