# 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 |