app, docs: update Bech32 HRP to ethm
(#476)
* changelog * app, docs: update Bech32 HRP * changelog
This commit is contained in:
parent
83f5ab671b
commit
9dcbebafb8
@ -39,6 +39,12 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
|||||||
|
|
||||||
### State Machine Breaking
|
### State Machine Breaking
|
||||||
|
|
||||||
|
* (app) [tharsis#476](https://github.com/tharsis/ethermint/pull/476) Update Bech32 HRP to `ethm`.
|
||||||
|
|
||||||
|
## [v0.5.0] - 2021-08-20
|
||||||
|
|
||||||
|
### State Machine Breaking
|
||||||
|
|
||||||
* (app, rpc) [tharsis#447](https://github.com/tharsis/ethermint/pull/447) Chain ID format has been changed from `<identifier>-<epoch>` to `<identifier>_<EIP155_number>-<epoch>`
|
* (app, rpc) [tharsis#447](https://github.com/tharsis/ethermint/pull/447) Chain ID format has been changed from `<identifier>-<epoch>` to `<identifier>_<EIP155_number>-<epoch>`
|
||||||
in order to clearly distinguish permanent vs impermanent components.
|
in order to clearly distinguish permanent vs impermanent components.
|
||||||
* (app, evm) [tharsis#434](https://github.com/tharsis/ethermint/pull/434) EVM `Keeper` struct and `NewEVM` function now have a new `trace` field to define
|
* (app, evm) [tharsis#434](https://github.com/tharsis/ethermint/pull/434) EVM `Keeper` struct and `NewEVM` function now have a new `trace` field to define
|
||||||
|
@ -71,7 +71,7 @@ func AddrCmd() *cobra.Command {
|
|||||||
Short: "Convert an address between hex and bech32",
|
Short: "Convert an address between hex and bech32",
|
||||||
Long: "Convert an address between hex encoding and bech32.",
|
Long: "Convert an address between hex encoding and bech32.",
|
||||||
Example: fmt.Sprintf(
|
Example: fmt.Sprintf(
|
||||||
`$ %s debug addr eth10jmp6sgh4cc6zt3e8gw05wavvejgr5pw2unfju
|
`$ %s debug addr ethm10jmp6sgh4cc6zt3e8gw05wavvejgr5pw2unfju
|
||||||
$ %s debug addr 0xA588C66983a81e800Db4dF74564F09f91c026351`, version.AppName, version.AppName),
|
$ %s debug addr 0xA588C66983a81e800Db4dF74564F09f91c026351`, version.AppName, version.AppName),
|
||||||
Args: cobra.ExactArgs(1),
|
Args: cobra.ExactArgs(1),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -7,21 +7,21 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// EthBech32Prefix defines the Bech32 prefix used for EthAccounts
|
// Bech32Prefix defines the Bech32 prefix used for EthAccounts
|
||||||
EthBech32Prefix = "eth"
|
Bech32Prefix = "ethm"
|
||||||
|
|
||||||
// Bech32PrefixAccAddr defines the Bech32 prefix of an account's address
|
// Bech32PrefixAccAddr defines the Bech32 prefix of an account's address
|
||||||
Bech32PrefixAccAddr = EthBech32Prefix
|
Bech32PrefixAccAddr = Bech32Prefix
|
||||||
// Bech32PrefixAccPub defines the Bech32 prefix of an account's public key
|
// Bech32PrefixAccPub defines the Bech32 prefix of an account's public key
|
||||||
Bech32PrefixAccPub = EthBech32Prefix + sdk.PrefixPublic
|
Bech32PrefixAccPub = Bech32Prefix + sdk.PrefixPublic
|
||||||
// Bech32PrefixValAddr defines the Bech32 prefix of a validator's operator address
|
// Bech32PrefixValAddr defines the Bech32 prefix of a validator's operator address
|
||||||
Bech32PrefixValAddr = EthBech32Prefix + sdk.PrefixValidator + sdk.PrefixOperator
|
Bech32PrefixValAddr = Bech32Prefix + sdk.PrefixValidator + sdk.PrefixOperator
|
||||||
// Bech32PrefixValPub defines the Bech32 prefix of a validator's operator public key
|
// Bech32PrefixValPub defines the Bech32 prefix of a validator's operator public key
|
||||||
Bech32PrefixValPub = EthBech32Prefix + sdk.PrefixValidator + sdk.PrefixOperator + sdk.PrefixPublic
|
Bech32PrefixValPub = Bech32Prefix + sdk.PrefixValidator + sdk.PrefixOperator + sdk.PrefixPublic
|
||||||
// Bech32PrefixConsAddr defines the Bech32 prefix of a consensus node address
|
// Bech32PrefixConsAddr defines the Bech32 prefix of a consensus node address
|
||||||
Bech32PrefixConsAddr = EthBech32Prefix + sdk.PrefixValidator + sdk.PrefixConsensus
|
Bech32PrefixConsAddr = Bech32Prefix + sdk.PrefixValidator + sdk.PrefixConsensus
|
||||||
// Bech32PrefixConsPub defines the Bech32 prefix of a consensus node public key
|
// Bech32PrefixConsPub defines the Bech32 prefix of a consensus node public key
|
||||||
Bech32PrefixConsPub = EthBech32Prefix + sdk.PrefixValidator + sdk.PrefixConsensus + sdk.PrefixPublic
|
Bech32PrefixConsPub = Bech32Prefix + sdk.PrefixValidator + sdk.PrefixConsensus + sdk.PrefixPublic
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -24,8 +24,8 @@ The root HD path for Ethermint-based accounts is `m/44'/60'/0'/0`.
|
|||||||
[BIP-0173](https://github.com/satoshilabs/slips/blob/master/slip-0173.md) defines a new format for segregated witness output addresses that contains a human-readable part that identifies the Bech32 usage. Ethermint uses the following HRP (human readable prefix) as the base HRP:
|
[BIP-0173](https://github.com/satoshilabs/slips/blob/master/slip-0173.md) defines a new format for segregated witness output addresses that contains a human-readable part that identifies the Bech32 usage. Ethermint uses the following HRP (human readable prefix) as the base HRP:
|
||||||
|
|
||||||
| Network | Mainnet | Testnet | Regtest |
|
| Network | Mainnet | Testnet | Regtest |
|
||||||
| --------- | ------- | ------- | ------- |
|
|-----------|---------|---------|---------|
|
||||||
| Ethermint | `eth` | `eth` | |
|
| Ethermint | `ethm` | `ethm` | |
|
||||||
|
|
||||||
There are 3 main types of HRP for the `Addresses`/`PubKeys` available by default on Ethermint:
|
There are 3 main types of HRP for the `Addresses`/`PubKeys` available by default on Ethermint:
|
||||||
|
|
||||||
@ -35,19 +35,19 @@ There are 3 main types of HRP for the `Addresses`/`PubKeys` available by default
|
|||||||
|
|
||||||
| | Address bech32 Prefix | Pubkey bech32 Prefix | Curve | Address byte length | Pubkey byte length |
|
| | Address bech32 Prefix | Pubkey bech32 Prefix | Curve | Address byte length | Pubkey byte length |
|
||||||
|--------------------|-----------------------|----------------------|-----------------|---------------------|--------------------|
|
|--------------------|-----------------------|----------------------|-----------------|---------------------|--------------------|
|
||||||
| Accounts | `eth` | `ethpub` | `eth_secp256k1` | `20` | `33` (compressed) |
|
| Accounts | `ethm` | `ethpub` | `eth_secp256k1` | `20` | `33` (compressed) |
|
||||||
| Validator Operator | `ethvaloper` | `ethvaloperpub` | `eth_secp256k1` | `20` | `33` (compressed) |
|
| Validator Operator | `ethmvaloper` | `ethmvaloperpub` | `eth_secp256k1` | `20` | `33` (compressed) |
|
||||||
| Consensus Nodes | `ethvalcons` | `ethvalconspub` | `ed25519` | `20` | `32` |
|
| Consensus Nodes | `ethmvalcons` | `ethmvalconspub` | `ed25519` | `20` | `32` |
|
||||||
|
|
||||||
## Address formats for clients
|
## Address formats for clients
|
||||||
|
|
||||||
`EthAccount` can be represented in both [Bech32](https://en.bitcoin.it/wiki/Bech32) (`eth1...`) and hex (`0x...`) formats for Ethereum's Web3 tooling compatibility.
|
`EthAccount` can be represented in both [Bech32](https://en.bitcoin.it/wiki/Bech32) (`ethm1...`) and hex (`0x...`) formats for Ethereum's Web3 tooling compatibility.
|
||||||
|
|
||||||
The Bech32 format is the default format for Cosmos-SDK queries and transactions through CLI and REST
|
The Bech32 format is the default format for Cosmos-SDK queries and transactions through CLI and REST
|
||||||
clients. The hex format on the other hand, is the Ethereum `common.Address` representation of a
|
clients. The hex format on the other hand, is the Ethereum `common.Address` representation of a
|
||||||
Cosmos `sdk.AccAddress`.
|
Cosmos `sdk.AccAddress`.
|
||||||
|
|
||||||
- **Address (Bech32)**: `eth14au322k9munkmx5wrchz9q30juf5wjgz2cfqku`
|
- **Address (Bech32)**: `ethm14au322k9munkmx5wrchz9q30juf5wjgz2cfqku`
|
||||||
- **Address ([EIP55](https://eips.ethereum.org/EIPS/eip-55) Hex)**: `0xAF79152AC5dF276D9A8e1E2E22822f9713474902`
|
- **Address ([EIP55](https://eips.ethereum.org/EIPS/eip-55) Hex)**: `0xAF79152AC5dF276D9A8e1E2E22822f9713474902`
|
||||||
- **Compressed Public Key**: `{"@type":"/ethermint.crypto.v1beta1.ethsecp256k1.PubKey","key":"ApNNebT58zlZxO2yjHiRTJ7a7ufjIzeq5HhLrbmtg9Y/"}`
|
- **Compressed Public Key**: `{"@type":"/ethermint.crypto.v1beta1.ethsecp256k1.PubKey","key":"ApNNebT58zlZxO2yjHiRTJ7a7ufjIzeq5HhLrbmtg9Y/"}`
|
||||||
|
|
||||||
@ -56,18 +56,18 @@ Cosmos `sdk.AccAddress`.
|
|||||||
The `ethermintd debug addr <address>` can be used to convert an address between hex and bech32 formats. For example:
|
The `ethermintd debug addr <address>` can be used to convert an address between hex and bech32 formats. For example:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ethermintd debug addr eth10jmp6sgh4cc6zt3e8gw05wavvejgr5pw2unfju
|
ethermintd debug addr ethm10jmp6sgh4cc6zt3e8gw05wavvejgr5pw2unfju
|
||||||
Address bytes: [124 182 29 65 23 174 49 161 46 57 58 28 250 59 172 102 100 129 208 46]
|
Address bytes: [124 182 29 65 23 174 49 161 46 57 58 28 250 59 172 102 100 129 208 46]
|
||||||
Address (hex): 7CB61D4117AE31A12E393A1CFA3BAC666481D02E
|
Address (hex): 7CB61D4117AE31A12E393A1CFA3BAC666481D02E
|
||||||
Address (EIP-55): 0x7cB61D4117AE31a12E393a1Cfa3BaC666481D02E
|
Address (EIP-55): 0x7cB61D4117AE31a12E393a1Cfa3BaC666481D02E
|
||||||
Bech32 Acc: eth10jmp6sgh4cc6zt3e8gw05wavvejgr5pw2unfju
|
Bech32 Acc: ethm10jmp6sgh4cc6zt3e8gw05wavvejgr5pw2unfju
|
||||||
Bech32 Val: ethvaloper10jmp6sgh4cc6zt3e8gw05wavvejgr5pw5wdauz
|
Bech32 Val: ethvaloper10jmp6sgh4cc6zt3e8gw05wavvejgr5pw5wdauz
|
||||||
|
|
||||||
ethermintd debug addr 0x7cB61D4117AE31a12E393a1Cfa3BaC666481D02E
|
ethermintd debug addr 0x7cB61D4117AE31a12E393a1Cfa3BaC666481D02E
|
||||||
Address bytes: [124 182 29 65 23 174 49 161 46 57 58 28 250 59 172 102 100 129 208 46]
|
Address bytes: [124 182 29 65 23 174 49 161 46 57 58 28 250 59 172 102 100 129 208 46]
|
||||||
Address (hex): 7CB61D4117AE31A12E393A1CFA3BAC666481D02E
|
Address (hex): 7CB61D4117AE31A12E393A1CFA3BAC666481D02E
|
||||||
Address (EIP-55): 0x7cB61D4117AE31a12E393a1Cfa3BaC666481D02E
|
Address (EIP-55): 0x7cB61D4117AE31a12E393a1Cfa3BaC666481D02E
|
||||||
Bech32 Acc: eth10jmp6sgh4cc6zt3e8gw05wavvejgr5pw2unfju
|
Bech32 Acc: ethm10jmp6sgh4cc6zt3e8gw05wavvejgr5pw2unfju
|
||||||
Bech32 Val: ethvaloper10jmp6sgh4cc6zt3e8gw05wavvejgr5pw5wdauz
|
Bech32 Val: ethvaloper10jmp6sgh4cc6zt3e8gw05wavvejgr5pw5wdauz
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -84,7 +84,7 @@ obtain the addresses and keys as mentioned above,
|
|||||||
ethermintd keys show mykey --bech acc
|
ethermintd keys show mykey --bech acc
|
||||||
- name: mykey
|
- name: mykey
|
||||||
type: local
|
type: local
|
||||||
address: eth1qsklxwt77qrxur494uvw07zjynu03dq9alwh37
|
address: ethm1qsklxwt77qrxur494uvw07zjynu03dq9alwh37
|
||||||
pubkey: '{"@type":"/ethermint.crypto.v1.ethsecp256k1.PubKey","key":"A8nbJ3eW9oAb2RNZoS8L71jFMfjk6zVa1UISYgKK9HPm"}'
|
pubkey: '{"@type":"/ethermint.crypto.v1.ethsecp256k1.PubKey","key":"A8nbJ3eW9oAb2RNZoS8L71jFMfjk6zVa1UISYgKK9HPm"}'
|
||||||
mnemonic: ""
|
mnemonic: ""
|
||||||
|
|
||||||
@ -126,7 +126,7 @@ ethermintd q auth account $(ethermintd keys show <MYKEY> -a) -o text
|
|||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
# GET /cosmos/auth/v1beta1/accounts/{address}
|
# GET /cosmos/auth/v1beta1/accounts/{address}
|
||||||
curl -X GET "http://localhost:10337/cosmos/auth/v1beta1/accounts/eth14au322k9munkmx5wrchz9q30juf5wjgz2cfqku" -H "accept: application/json"
|
curl -X GET "http://localhost:10337/cosmos/auth/v1beta1/accounts/ethm14au322k9munkmx5wrchz9q30juf5wjgz2cfqku" -H "accept: application/json"
|
||||||
```
|
```
|
||||||
|
|
||||||
### JSON-RPC
|
### JSON-RPC
|
||||||
|
@ -65,12 +65,12 @@ We view testnet participation as a great way to signal to the community that you
|
|||||||
In short, there are two types of keys:
|
In short, there are two types of keys:
|
||||||
|
|
||||||
- **Tendermint Key**: This is a unique key used to sign consensus votes.
|
- **Tendermint Key**: This is a unique key used to sign consensus votes.
|
||||||
- It is associated with a public key `ethvalconspub` (Get this value with `ethermintd tendermint show-validator`)
|
- It is associated with a public key `ethmvalconspub` (Get this value with `ethermintd tendermint show-validator`)
|
||||||
- It is generated when the node is created with `ethermintd init`.
|
- It is generated when the node is created with `ethermintd init`.
|
||||||
- **Application key**: This key is created from `ethermintd` and used to sign transactions. Application keys are associated with a public key prefixed by `ethpub` and an address prefixed by `eth`. Both are derived from account keys generated by `ethermintd keys add`.
|
- **Application key**: This key is created from `ethermintd` and used to sign transactions. Application keys are associated with a public key prefixed by `ethpub` and an address prefixed by `ethm`. Both are derived from account keys generated by `ethermintd keys add`.
|
||||||
|
|
||||||
Note: A validator's operator key is directly tied to an application key, but
|
Note: A validator's operator key is directly tied to an application key, but
|
||||||
uses reserved prefixes solely for this purpose: `ethvaloper` and `ethvaloperpub`
|
uses reserved prefixes solely for this purpose: `ethmvaloper` and `ethmvaloperpub`
|
||||||
|
|
||||||
### What are the different states a validator can be in?
|
### What are the different states a validator can be in?
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ To run testnet nodes, you will need a machine with the following minimum require
|
|||||||
|
|
||||||
## Create Your Validator
|
## Create Your Validator
|
||||||
|
|
||||||
Your `ethvalconspub` can be used to create a new validator by staking tokens. You can find your validator pubkey by running:
|
Your `ethmvalconspub` can be used to create a new validator by staking tokens. You can find your validator pubkey by running:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ethermintd tendermint show-validator
|
ethermintd tendermint show-validator
|
||||||
@ -80,7 +80,7 @@ You can confirm that you are in the validator set by using a third party explore
|
|||||||
If you want to participate in genesis as a validator, you need to justify that
|
If you want to participate in genesis as a validator, you need to justify that
|
||||||
you have some stake at genesis, create one (or multiple) transactions to bond this stake to your validator address, and include this transaction in the genesis file.
|
you have some stake at genesis, create one (or multiple) transactions to bond this stake to your validator address, and include this transaction in the genesis file.
|
||||||
|
|
||||||
Your `ethvalconspub` can be used to create a new validator by staking tokens. You can find your validator pubkey by running:
|
Your `ethmvalconspub` can be used to create a new validator by staking tokens. You can find your validator pubkey by running:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ethermintd tendermint show-validator
|
ethermintd tendermint show-validator
|
||||||
|
@ -11,10 +11,10 @@ There are multiple ways to interact with a node: using the CLI, using gRPC or us
|
|||||||
Now that your very own node is running, it is time to try sending tokens from the first account you created to a second account. In a new terminal window, start by running the following query command:
|
Now that your very own node is running, it is time to try sending tokens from the first account you created to a second account. In a new terminal window, start by running the following query command:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ethermintd query bank balances $MY_VALIDATOR_ADDRESS --chain-id=ethermintd-1
|
ethermintd query bank balances $MY_VALIDATOR_ADDRESS --chain-id=ethermint_9000-1
|
||||||
```
|
```
|
||||||
|
|
||||||
You should see the current balance of the account you created, equal to the original balance of `eth` you granted it minus the amount you delegated via the `gentx`. Now, create a second account:
|
You should see the current balance of the account you created, equal to the original balance of tokens you granted it minus the amount you delegated via the `gentx`. Now, create a second account:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ethermintd keys add recipient --keyring-backend=file
|
ethermintd keys add recipient --keyring-backend=file
|
||||||
@ -26,19 +26,19 @@ RECIPIENT=$(ethermintd keys show recipient -a --keyring-backend=file)
|
|||||||
The command above creates a local key-pair that is not yet registered on the chain. An account is created the first time it receives tokens from another account. Now, run the following command to send tokens to the `recipient` account:
|
The command above creates a local key-pair that is not yet registered on the chain. An account is created the first time it receives tokens from another account. Now, run the following command to send tokens to the `recipient` account:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ethermintd tx bank send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000000aphoton --chain-id=ethermintd-1 --keyring-backend=file
|
ethermintd tx bank send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000000aphoton --chain-id=ethermint_9000-1 --keyring-backend=file
|
||||||
|
|
||||||
# Check that the recipient account did receive the tokens.
|
# Check that the recipient account did receive the tokens.
|
||||||
ethermintd query bank balances $RECIPIENT --chain-id=ethermintd-1
|
ethermintd query bank balances $RECIPIENT --chain-id=ethermint_9000-1
|
||||||
```
|
```
|
||||||
|
|
||||||
Finally, delegate some of the stake tokens sent to the `recipient` account to the validator:
|
Finally, delegate some of the stake tokens sent to the `recipient` account to the validator:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ethermintd tx staking delegate $(ethermintd keys show my_validator --bech val -a --keyring-backend=file) 500aphoton --from=recipient --chain-id=ethermintd-1 --keyring-backend=file
|
ethermintd tx staking delegate $(ethermintd keys show my_validator --bech val -a --keyring-backend=file) 500aphoton --from=recipient --chain-id=ethermint_9000-1 --keyring-backend=file
|
||||||
|
|
||||||
# Query the total delegations to `validator`.
|
# Query the total delegations to `validator`.
|
||||||
ethermintd query staking delegations-to $(ethermintd keys show my_validator --bech val -a --keyring-backend=file) --chain-id=ethermintd-1
|
ethermintd query staking delegations-to $(ethermintd keys show my_validator --bech val -a --keyring-backend=file) --chain-id=ethermint_9000-1
|
||||||
```
|
```
|
||||||
|
|
||||||
You should see two delegations, the first one made from the `gentx`, and the second one you just performed from the `recipient` account.
|
You should see two delegations, the first one made from the `gentx`, and the second one you just performed from the `recipient` account.
|
||||||
|
@ -47,12 +47,12 @@ When in doubt, you can also run the tests against a Ganache instance via `yarn t
|
|||||||
|
|
||||||
The [`init-test-node.sh`](./init-test-node.sh) script sets up ethermint with the following accounts:
|
The [`init-test-node.sh`](./init-test-node.sh) script sets up ethermint with the following accounts:
|
||||||
|
|
||||||
- `eth18de995q8qk0leqk3d5pzmg7tlxvj6tmsku084d` (Validator)
|
- `ethm10jmp6sgh4cc6zt3e8gw05wavvejgr5pwtu750w` (Validator)
|
||||||
- `0x3b7252d007059ffc82d16d022da3cbf9992d2f70`
|
- `0x7cB61D4117AE31a12E393a1Cfa3BaC666481D02E`
|
||||||
- `eth1mhtyk3cj7ly0rt8rc9zuj5pnnmw67gsapygwyq` (User 1)
|
- `ethm1cml96vmptgw99syqrrz8az79xer2pcgp767p9e` (User 1)
|
||||||
- `0xddd64b4712f7c8f1ace3c145c950339eddaf221d`
|
- `0xC6Fe5D33615a1C52c08018c47E8Bc53646A0E101`
|
||||||
- `eth1pa20g7lehr330vs5ent20slr3wyne4lsy8qae3` (user 2)
|
- `ethm1jcltmuhplrdcwp7stlr4hlhlhgd4htqhgjpff2` (user 2)
|
||||||
- `0x0f54f47bf9b8e317b214ccd6a7c3e38b893cd7f0`
|
- `0x963EBDf2e1f8DB8707D05FC75bfeFFBa1B5BaC17`
|
||||||
|
|
||||||
Each with roughly 100 ETH available (1e18 photon).
|
Each with roughly 100 ETH available (1e18 photon).
|
||||||
|
|
||||||
@ -63,19 +63,19 @@ Running `ethermintd keys list --keyring-backend=test` should output:
|
|||||||
{
|
{
|
||||||
"name": "localkey",
|
"name": "localkey",
|
||||||
"type": "local",
|
"type": "local",
|
||||||
"address": "eth18de995q8qk0leqk3d5pzmg7tlxvj6tmsku084d",
|
"address": "ethm18de995q8qk0leqk3d5pzmg7tlxvj6tmsku084d",
|
||||||
"pubkey": "ethpub1pfqnmk6pq3ycjs34vv4n6rkty89f6m02qcsal3ecdzn7a3uunx0e5ly0846pzg903hxf2zp5gq4grh8jcatcemfrscdfl797zhg5crkcsx43gujzppge3n"
|
"pubkey": "ethpub1pfqnmk6pq3ycjs34vv4n6rkty89f6m02qcsal3ecdzn7a3uunx0e5ly0846pzg903hxf2zp5gq4grh8jcatcemfrscdfl797zhg5crkcsx43gujzppge3n"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "user1",
|
"name": "user1",
|
||||||
"type": "local",
|
"type": "local",
|
||||||
"address": "eth1mhtyk3cj7ly0rt8rc9zuj5pnnmw67gsapygwyq",
|
"address": "ethm1mhtyk3cj7ly0rt8rc9zuj5pnnmw67gsapygwyq",
|
||||||
"pubkey": "ethpub1pfqnmk6pq3wrkx6lh7uug8ss0thggact3n49m5gkmpca4vylldpur5qrept57e0rrxfmeq5mp5xt3cyf4kys53qcv66qxttv970das69hlpkf8cnyd2a2x"
|
"pubkey": "ethpub1pfqnmk6pq3wrkx6lh7uug8ss0thggact3n49m5gkmpca4vylldpur5qrept57e0rrxfmeq5mp5xt3cyf4kys53qcv66qxttv970das69hlpkf8cnyd2a2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "user2",
|
"name": "user2",
|
||||||
"type": "local",
|
"type": "local",
|
||||||
"address": "eth1pa20g7lehr330vs5ent20slr3wyne4lsy8qae3",
|
"address": "ethm1pa20g7lehr330vs5ent20slr3wyne4lsy8qae3",
|
||||||
"pubkey": "ethpub1pfqnmk6pq3art9y45zw5ntyktt2qrt0skmsl0ux9qwk8458ed3d8sgnrs99zlgvj3rt2vggvkh0x56hffugwsyddwqla48npx46pglgs6xhcqpall58tgn"
|
"pubkey": "ethpub1pfqnmk6pq3art9y45zw5ntyktt2qrt0skmsl0ux9qwk8458ed3d8sgnrs99zlgvj3rt2vggvkh0x56hffugwsyddwqla48npx46pglgs6xhcqpall58tgn"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
Loading…
Reference in New Issue
Block a user