# Tx

Tx module allows you to sign or broadcast transactions

# Available Commands

Name Description
sign Sign transactions generated offline
broadcast Broadcast a signed transaction to the network
multisign Sign the same transaction by multiple accounts
tx Query for a transaction by hash in a committed block
txs Search for transactions that match the exact given events where results are paginated

# iris tx sign

Sign transactions in generated offline file. The file created with the --generate-only flag.

iris tx sign <file> [flags]

# Flags

Name, shorthand Type Required Default Description
--append bool true true Attach a signature to an existing signature.
--from string true Key name for signature
--offline bool true Offline mode.
--signature-only bool true Print only the generated signature, then exit
--multisig string true Address of the multisig account on behalf of which the transaction shall be signed

# Generate an offline tx

TIP

You can generate any type of txs offline by appending the flag --generate-only

We use a transfer tx in the following examples:

iris tx bank send iaa1w9lvhwlvkwqvg08q84n2k4nn896u9pqx93velx iaa15uys54epmd2xzhcn32szps56wvev40tt908h62 10iris --chain-id=irishub --generate-only

The unsigned.json should look like:

{
    "type": "cosmos-sdk/StdTx",
    "value": {
        "msg": [
            {
                "type": "cosmos-sdk/MsgSend",
                "value": {
                    "from_address": "iaa1w9lvhwlvkwqvg08q84n2k4nn896u9pqx93velx",
                    "to_address": "iaa15uys54epmd2xzhcn32szps56wvev40tt908h62",
                    "amount": [
                        {
                            "denom": "iris",
                            "amount": "10"
                        }
                    ]
                }
            }
        ],
        "fee": {
            "amount": [],
            "gas": "200000"
        },
        "signatures": null,
        "memo": ""
    }
}

# Sign tx offline

iris tx sign unsigned.json --name=<key-name> > signed.tx

The signed.json should look like:

{
    "type": "auth/StdTx",
    "value": {
        "msg": [
            {
                "type": "cosmos-sdk/Send",
                "value": {
                    "inputs": [
                        {
                            "address": "iaa106nhdckyf996q69v3qdxwe6y7408pvyvyxzhxh",
                            "coins": [
                                {
                                    "denom": "uiris",
                                    "amount": "1000000"
                                }
                            ]
                        }
                    ],
                    "outputs": [
                        {
                            "address": "iaa1893x4l2rdshytfzvfpduecpswz7qtpstevr742",
                            "coins": [
                                {
                                    "denom": "uiris",
                                    "amount": "1000000"
                                }
                            ]
                        }
                    ]
                }
            }
        ],
        "fee": {
            "amount": [
                {
                    "denom": "uiris",
                    "amount": "4000000"
                }
            ],
            "gas": "200000"
        },
        "signatures": [
            {
                "pub_key": {
                    "type": "tendermint/PubKeySecp256k1",
                    "value": "Auouudrg0P86v2kq2lykdr97AJYGHyD6BJXAQtjR1gzd"
                },
                "signature": "sJewd6lKjma49rAiGVfdT+V0YYerKNx6ZksdumVCvuItqGm24bEN9msh7IJ12Sil1lYjqQjdAcjVCX/77FKlIQ==",
                "account_number": "0",
                "sequence": "3"
            }
        ],
        "memo": "test"
    }
}

Note the signature in the signed.json should no longer be empty after signing.

Now it's ready to broadcast the signed tx to the IRIS Hub.

# iris tx broadcast

This command is used to broadcast an offline signed transaction to the network.

# Broadcast offline signed transaction

iris tx broadcast signed.json --chain-id=irishub

# iris tx multisign

Sign a transaction by multiple accounts. The tx could be broadcasted only when the number of signatures meets the multisig-threshold.

iris tx multisign <file> <key-name> <[signature]...> [flags]

# Generate an offline tx by multisig key

TIP

No multisig key? Create one

iris tx bank send <from> <to> 10iris --fees=0.3iris --chain-id=irishub --from=<multisig-keyname> --generate-only > unsigned.json

# Sign the multisig tx

# Query the multisig address

iris keys show <multisig-keyname>

# Sign the unsigned.json

Assume the multisig-threshold is 2, here we sign the unsigned.json by 2 of the signers

Sign the tx by signer-1:

iris tx sign unsigned.json --from=<signer-keyname-1> --chain-id=irishub --multisig=<multisig-address> --signature-only > signed-1.json

Sign the tx by signer-2:

iris tx sign unsigned.json --from=<signer-keyname-2> --chain-id=irishub --multisig=<multisig-address> --signature-only > signed-2.json

# Merge the signatures

Merge all the signatures into signed.json

iris tx multisign --chain-id=irishub unsigned.json <multisig-keyname> signed-1.json signed-2.json > signed.json

Now you can broadcast the signed tx.

# iris query tx

iris query tx [hash] [flags]

# iris query txs

iris query txs --events 'message.sender=<iaa...>&message.action=xxxx' --page 1 --limit 30

Among the possible values of message.action:

module Msg action
bank cosmos-sdk/MsgSend transfer
cosmos-sdk/MsgMultiSend transfer
distribution cosmos-sdk/MsgModifyWithdrawAddress set_withdraw_address
cosmos-sdk/MsgWithdrawValidatorCommission withdraw_commission
cosmos-sdk/MsgWithdrawDelegatorReward withdraw_rewards
gov cosmos-sdk/MsgSubmitProposal submit_proposal
cosmos-sdk/MsgDeposit proposal_deposit
cosmos-sdk/MsgVote proposal_vote
stake cosmos-sdk/MsgCreateValidator create_validator
cosmos-sdk/MsgEditValidator edit_validator
cosmos-sdk/MsgDelegate delegate
cosmos-sdk/MsgBeginRedelegate redelegate
cosmos-sdk/MsgUndelegate unbond
slashing cosmos-sdk/MsgUnjail unjail
coinswap irismod/MsgSwapOrder swap
irismod/MsgAddLiquidity add_liquidity
irismod/MsgRemoveLiquidity remove_liquidity
htlc irismod/MsgCreateHTLC create_htlc
irismod/MsgClaimHTLC claim_htlc
irismod/MsgRefundHTLC refund_htlc
nft irismod/MsgIssueDenom issue_denom
irismod/MsgMintNFT mint_nft
irismod/MsgBurnNFT burn_nft
irismod/MsgTransferNFT transfer_nft
irismod/MsgEditNFT edit_nft
record irismod/MsgCreateRecord create_record
token irismod/MsgIssueToken issue_token
irismod/MsgEditToken edit_token
irismod/MsgTransferTokenOwner transfer_token_owner
irismod/MsgMintToken mint_token