from __future__ import annotations
from typing import Final
from evmos.eip712.base import (
Domain,
EIPToSign,
MsgInterface,
create_eip712,
generate_fee,
generate_message,
generate_message_with_multiple_transactions,
generate_types,
)
from evmos.eip712.erc20 import (
MSG_CONVERT_COIN_TYPES,
MSG_CONVERT_ERC20_TYPES,
create_msg_convert_coin,
create_msg_convert_erc20,
)
from evmos.eip712.staking import (
MSG_BEGIN_REDELEGATE_TYPES,
MSG_DELEGATE_TYPES,
MSG_SET_WITHDRAW_ADDRESS_TYPES,
MSG_UNDELEGATE_TYPES,
MSG_WITHDRAW_DELEGATOR_REWARD_TYPES,
MSG_WITHDRAW_VALIDATOR_COMMISSION_TYPES,
create_msg_begin_redelegate,
create_msg_delegate,
create_msg_set_withdraw_address,
create_msg_undelegate,
create_msg_withdraw_delegator_reward,
create_msg_withdraw_validator_commission,
)
from evmos.eip712.validator import MSG_EDIT_VALIDATOR_TYPES, create_msg_edit_validator
__all__ = [
"IBC_MSG_TRANSFER_TYPES",
"MSG_BEGIN_REDELEGATE_TYPES",
"MSG_CONVERT_COIN_TYPES",
"MSG_CONVERT_ERC20_TYPES",
"MSG_DELEGATE_TYPES",
"MSG_EDIT_VALIDATOR_TYPES",
"MSG_SEND_TYPES",
"MSG_SET_WITHDRAW_ADDRESS_TYPES",
"MSG_UNDELEGATE_TYPES",
"MSG_VOTE_TYPES",
"MSG_WITHDRAW_DELEGATOR_REWARD_TYPES",
"MSG_WITHDRAW_VALIDATOR_COMMISSION_TYPES",
"Domain",
"EIPToSign",
"create_eip712",
"create_ibc_msg_transfer",
"create_msg_begin_redelegate",
"create_msg_convert_coin",
"create_msg_convert_erc20",
"create_msg_delegate",
"create_msg_edit_validator",
"create_msg_send",
"create_msg_set_withdraw_address",
"create_msg_undelegate",
"create_msg_vote",
"create_msg_withdraw_delegator_reward",
"create_msg_withdraw_validator_commission",
"generate_fee",
"generate_message",
"generate_message_with_multiple_transactions",
"generate_types",
]
# gov.ts
MSG_VOTE_TYPES: Final = {
"MsgValue": [
{"name": "proposal_id", "type": "uint64"},
{"name": "voter", "type": "string"},
{"name": "option", "type": "int32"},
],
}
"""Types for voting message."""
[docs]
def create_msg_vote(proposal_id: int, option: int, sender: str) -> MsgInterface:
"""Create voting (governmental) message."""
return {
"type": "cosmos-sdk/MsgVote",
"value": {
"proposalId": proposal_id,
"voter": sender,
"option": option,
},
}
# ibcMsgTransfer.ts
IBC_MSG_TRANSFER_TYPES: Final = {
"MsgValue": [
{"name": "sourcePort", "type": "string"},
{"name": "sourceChannel", "type": "string"},
{"name": "token", "type": "TypeToken"},
{"name": "sender", "type": "string"},
{"name": "receiver", "type": "string"},
{"name": "timeoutHeight", "type": "TypeTimeoutHeight"},
{"name": "timeoutTimestamp", "type": "uint64"},
],
"TypeToken": [
{"name": "denom", "type": "string"},
{"name": "amount", "type": "string"},
],
"TypeTimeoutHeight": [
{"name": "revisionNumber", "type": "uint64"},
{"name": "revisionHeight", "type": "uint64"},
],
}
"""Types for IBC message."""
[docs]
def create_ibc_msg_transfer(
receiver: str,
sender: str,
source_channel: str,
source_port: str,
revision_height: int,
revision_number: int,
timeout_timestamp: str,
amount: str,
denom: str,
) -> MsgInterface:
"""Create IBC (inter-blockchain) message transfer.
See Also:
https://tutorials.cosmos.network/academy/4-ibc/what-is-ibc.html
"""
return {
"type": "cosmos-sdk/MsgTransfer",
"value": {
"receiver": receiver,
"sender": sender,
"sourceChannel": source_channel,
"sourcePort": source_port,
"timeoutHeight": {
"revisionHeight": str(revision_height),
"revisionNumber": str(revision_number),
},
"timeoutTimestamp": timeout_timestamp,
"token": {"amount": amount, "denom": denom},
},
}
# msgSend.ts
MSG_SEND_TYPES: Final = {
"MsgValue": [
{"name": "from_address", "type": "string"},
{"name": "to_address", "type": "string"},
{"name": "amount", "type": "TypeAmount[]"},
],
"TypeAmount": [
{"name": "denom", "type": "string"},
{"name": "amount", "type": "string"},
],
}
"""Types for message sending."""
[docs]
def create_msg_send(
amount: str,
denom: str,
from_address: str,
to_address: str,
) -> MsgInterface:
"""Create message for sending."""
return {
"type": "cosmos-sdk/MsgSend",
"value": {
"amount": [
{"amount": amount, "denom": denom},
],
"from_address": from_address,
"to_address": to_address,
},
}