---
invalid_nonce:
  default: |
    This transaction has been seen in the chain and is treated as a replay tx.
  poke: |
    `PokeTx.nonce` must be `0`.
  deploy_protocol: |
    `DeployProtocolTx.nonce` must be `0`.

invalid_signature:
  default: |
    This transaction's signature or multi-signature does not match the corresponding pk.

invalid_sender_state:
  default: |
    The sender of this transaction does not exist on this chain.
  declare: |
    `tx.from` already exist on this chain.

invalid_receiver_state:
  default: |
    The receiver of this transaction does not exist on this chain.
  account_migrate: |
    Possible causes:
    1. `AccountMigrateTx.address` is not correctly calculated with `AccountMigrateTx.pk` and `AccountMigrateTx.type`
    2. `AccountMigrateTx.address` already exist on this chain.
  consume_asset: |
    The `signer` included in first `tx.signatures` does not exist on this chain.
  poke: |
    `PokeTx.address` is not correct or does not exist on this chain.
  stake: |
    `tx.to` does not exist on this chain or `tx.to` is not a a valid DID address
  exchange: |
    Either `ExchangeTx.to` or the `signer` included in first `tx.signatures` does not exist on this chain.
  transfer: |
    `TransferTx.to` does not exist on this chain.

insufficient_data:
  default: |
    There is some required data missing to construct this transaction properly.
  account_migrate: |
    `AccountMigrateTx.pk`, `AccountMigrateTx.type`, and `AccountMigrateTx.address` can not be empty.
  declare: |
    `DelcareTx.moniker` can not be empty.
  acquire_asset: |
    `AcquireAssetTx.specs` can not be empty.
  consume_asset: |
    `ConsumeAssetTx.issuer` and `Tx.signatures` can not be empty.
  create_asset: |
    `CreateAssetTx.data` and `CreateAssetTx.address` can not be empty.
  update_asset: |
    `UpdateAssetTx.data` and `UpdateAssetTx.address` can not be empty.
  poke: |
    `PokeTx.date` and `PokeTx.address` can not be empty.
  stake: |
    `StakeTx.to`, `StakeTx.value`, `StakeTx.data`, `StakeTx.address` can not be empty.
  exchange: |
    `ExchangeTx.sender`, `ExchangeTx.receiver`, and `Tx.signatures` can not be empty.
  transfer: |
    `TransferTx.to`, `TransferTx.value`/`TransferTx.asset` can not be empty.

insufficient_fund:
  default: |
    There is not enough balance in participants account.
  poke: |
    Poke account does not have enough balance.

invalid_owner:
  default: |
    One or more of the assets included this tx do not belong to the provided owners.

invalid_tx:
  default: |
    The transaction cannot pass sanity check. Possible Causes:
      1. Anti Land Attack: Sender and receiver address should not be equal
      2. Anti Replay Attack: This transaction has been seen in the chain and is treated as a replay tx.
      3. decode tx: This transaction includes `type-url` that can not be decoded properly.
      4. verify date: the transaction is expired.
      5. verify itx size: The size of itx in this transaction exceeds max size.
      6. verify signer: the multisig signer is invalid
      7. verify tx size: The size of this transaction exceeds max size.
      8. pre_pipeline extract signers: the multisig signer is invalid
  declare: |
    Possible Causes:
    1. The signer in `tx.signatures` should be the same as `DeclareTx.issuer`.
    2. This chain requires a valid issuer to declare a new account.
  acquire_asset: |
    Possible Causes:
    1. Asset Factory does not have enough assets left.
    2. This transaction's sender does not have enough balance.
    3. The asset addresses included in `AcquireAssetTx.specs` are not correct.
  consume_asset: |
    The issuer of the asset to be consumed, should be the same as or issued by `ConsumeAsset.issuer`.
  create_asset: |
    If `tx.data` contains `AssetFactory`, possible causes:
    1. `AssetFactory.description`, `AssetFactory.attributes`, `AssetFactory.price`, `AssetFactory.template`, `AssetFactory.allowed_spec_args`, `AssetFactory.asset_name` can not be empty.
    2. `AssetFactory.template` and `AssetFactory.sllowed_spec_args` should match.
    3. `AssetFactory.asset_name` should contain a deployed protobuf type.
  update_asset: |
    If `tx.data` contains `AssetFactory`, 'AssetFactory.price', `AssetFactory.template`. `AssetFactory.allowed_spec_args` and `AssetFactory.asset_name` can not be empty.
  deploy_protocol: |
    Possible causes:
    1. Sender should be moderator
    2. `DeployProtocolTx.address`, `DeployProtocolTx.name`, `DeployProtocolTx.namespace`, `DeployProtocolTx.code` should not be empty. The size of `DeployProtocolTx.description` should not exceed max size.
    3. `DeployProtocolTx.address` should be correctly calculated using `DeployProtocolTx`.
    4. `type_url` and the module doesn't match.
    5. the binary of the protocol is modified on purpose.
    6. Version of new protocol should be bigger than the old ones.
  upgrade_node: |
    Possible causes:
    1. `tx.from` should be the same as moderator address
    2. `UpgradeNodeTx.version` should be bigger than forge version
    3. `UpgradeNodeTx.height` should be bigger than current block height.
    4. an existing upgrade_node operation is going to be carried out while the new upgrade_node tx has no `override` flag.
  stake: |
    1. `StakeTx.address` should be calculated from `tx.from` and `StakeTx.to`.
    2. `StakeTx.message` should not exceed the max size.

unsupported_tx: This transaction contains type_urls that are not registered on the chain.

expired_tx: This transaction has expired.

too_many_txs: There are too many transactions.

invalid_lock_status: The lock status is invalid.

invalid_request: This request is invalid.

invalid_moniker:
  default: |
    This moniker is invalid.
  declare: |
    `DeclareTx.moniker` should have at least 4 characters.

invalid_passphrase:
  default: |
    This passphrase is invalid.

invalid_multisig: This multisig is invalid.

invalid_wallet: This wallet is invalid.

invalid_chain_id: This chain_id is invalid.

consensus_rpc_error: This transaction has already occurred on the chain before.

storage_rpc_error: This is a storage rpc error.

noent: Noent

account_migrated: This account has migrated to a new one.

unsupported_stake: This stake is not supported.

insufficient_stake: The require stake amount should be more than minimum stake.

invalid_stake_state: The required stake state is invalid.

expired_wallet_token: The token included in this transaction has expired.

banned_unstake: This unstake action is banned.

invalid_asset:
  default: |
    The asset included in this transaction is invalid.
  consume_asset: |
    The asset included in `tx.signatures.data` is not valid.
  create_asset: |
    Possible causes:
    1. `CreateAssetTx.address` is not calculated correctly.
    2. `CreateAssetTx.moniker` should have at least 5 characters.
    3. Asset parent does not have a valid state.
    4. Asset already exists on the chain. This is a duplicate asset.
  update_asset: |
    `UpdateAssetTx.address` is not a valid asset.
  exchange: |
    `ExchangeTx.sender.assets` or `ExchangeTx.receiver.assets` contain invalid assets.
  transfer: |
    'TransferTx.assets' contain invalid assets.

invalid_tx_size: |
  The size of `tx.itx` should be smaller than max size.

invalid_signer_state: |
  All signers participating in this tx should have a valid state on this chain.

invalid_forge_state:
  default: |
    The forge state is invalid.
  deploy_protocol: |
    The forge state is invalid.
  upgrade_node: |
    The forge state is invalid.
  stake: |
    The forge state is invalid.

expired_asset: This asset has expired.

untransferrable_asset: This asset can not be transferred.

readonly_asset: This asset is readonly and therefore can not be modified.

consumed_asset: This asset has already been consumed before.

invalid_deposit_value: The deposit value is not valid.

exceed_deposit_cap: The amount exceeds the deposit cap.

invalid_deposit_target: The target of this deposit is invalid.

invalid_depositor: The depositor does not exist on the chain.

invalid_withdrawer: The withdrawer does not exist on the chain.

duplicate_tether: The tether is duplicated.

invalid_expiry_date: The expiry date is invalid.

invalid_deposit: The deposit is invalid.

invalid_custodian: The custodian does not exist on the chain.

invalid_delegation: The delegation parameters are invalid.

invalid_subscribe: the subscription is invalid, most likely the topic or the filter is invalid.

forbidden: Operation is not permitted with current authorization.

internal: Internal error occurred - mainly a server implementation issue.

timeout: Operation is timeout.

invalid_delegation_type_url: The type_url you want to delegate is not allowed in your forge config
