---
tags: Client library
order: 5
---
# Transaction Module - Pyband
This module provides a preparation component that is required for sending a transaction.
## with_message(msgs)
This function add one or multiple messages to `<Transaction>`
The message can be in any message listed [here](https://github.com/bandprotocol/cosmoscan/blob/1f55f3c88b462fc02d0b2c9fca1391a5daa3bdc6/src/subscriptions/TxSub.re#L1032). Please note that our message should be imported from the generated protobuf files.
### Parameter
- **msgs** `<google-protobuf.message.Message>`: Messages to be included into the transaction.
### Return
`<Transaction>`
---
## with_sender(client, sender)
This function set `account_num` and `sequence` from `<Client>` with the address from `sender`. `<Transaction>` must have at least 1 message added before calling `with_sender()`
### Parameter
- **client** `<Client>`: Client used to set `account_num` and `sequence` by calling `get_address()`.
- **sender** `<str>`: Address of the sender.
### Return
`<Transaction>`
### Exception
| Type | Description |
| -------- | -------- |
| EmptyMsgError | Messsage is empty, please use with_messages at least 1 message |
| NotFoundError | Account doesn't exist |
---
## with_account_num(account_num)
This function set the account number in `<Transaction>`.
### Parameter
- **account_num** `<int>`
### Return
`<Transaction>`
---
## with_sequence(sequence)
This function set the sequence number in `<Transaction>`.
### Parameter
- **sequence** `<int>`
### Return
`<Transaction>`
---
## with_chain_id(chain_id)
This function set the chain ID in `<Transaction>`.
### Parameter
- **chain_id** `<str>`
### Return
`<Transaction>`
---
## with_fee(fee)
This function set the fee by using the given fee and gas limit `<Transaction>`.
### Parameter
- **fee** `<List[Coin]>`
### Return
`<Transaction>`
---
## with_gas(gas)
This function set the gas limit in `<Transaction>`.
### Parameter
- **gas** `<int>`
### Return
`<Transaction>`
---
## with_memo(memo)
This function set the memo in `<Transaction>`.
### Parameter
- **memo** `<str>`: Maximum length of memo is 256.
### Return
`<Transaction>`
### Exception
| Type | Description |
| -------- | -------- |
| ValueTooLargeError | Memo is too large |
---
## get_sign_doc(public_key)
This function returns a sign data from `<Transaction>`.
### Parameter
- **public_key** `<PublicKey>`, default = None: Public key.
### Return
`<cosmos_tx_type.SignDoc>`
### Exception
| Type | Description |
| -------- | -------- |
| EmptyMsgError | message is empty |
| UndefinedError | account_num should be defined
| UndefinedError | sequence should be defined |
| UndefinedError | chain_id should be defined |
---
## get_tx_data(signature, public_key)
This function returns a transaction that need to be sent.
### Parameter
- **signature** `<bytes>`: Signature from sign from get_sign_doc
- **public_key** `<PublicKey`, default = None: Public key
### Return
`<bytes>`
### Usecase Example
``` python
import os
from pyband.client import Client
from pyband.transaction import Transaction
from pyband.wallet import PrivateKey
from pyband.proto.cosmos.base.v1beta1.coin_pb2 import Coin
from pyband.proto.oracle.v1.tx_pb2 import MsgRequestData
grpc_url = "rpc-laozi-testnet2.bandchain.org:9090"
c = Client(grpc_url)
MNEMONIC = os.getenv("MNEMONIC")
private_key = PrivateKey.from_mnemonic(MNEMONIC)
public_key = private_key.to_public_key()
sender_addr = public_key.to_address()
sender = sender_addr.to_acc_bech32()
request_msg = MsgRequestData(
oracle_script_id=37,
calldata=bytes.fromhex("0000000200000003425443000000034554480000000000000064"),
ask_count=4,
min_count=3,
client_id="BandProtocol",
fee_limit=[Coin(amount="100", denom="uband")],
prepare_gas=50000,
execute_gas=200000,
sender=sender,
)
account = c.get_account(sender)
account_num = account.account_number
sequence = account.sequence
fee = [Coin(amount="0", denom="uband")]
chain_id = c.get_chain_id()
txn = (
Transaction()
.with_messages(request_msg)
.with_sequence(sequence)
.with_account_num(account_num)
.with_chain_id(chain_id)
.with_gas(2000000)
.with_fee(fee)
.with_memo("")
)
sign_doc = txn.get_sign_doc(public_key)
signature = private_key.sign(sign_doc.SerializeToString())
tx_raw_bytes = txn.get_tx_data(signature, public_key)
print(tx_raw_bytes.hex())
```
### Result
```
0a93010a90010a192f6f7261636c652e76312e4d7367526571756573744461746112730825121a0000000200000003425443000000034554480000000000000064180420032a0c42616e6450726f746f636f6c320c0a057562616e64120331303038d0860340c09a0c4a2b62616e643138703237796c3936326c38323833637437737272356c3367377964617a6a303764717277706812640a500a460a1f2f636f736d6f732e63727970746f2e736563703235366b312e5075624b657912230a2102fc535feadd4a048479a49255b620d54871970676d5a4ec5de214c80d387410f612040a020801181812100a0a0a057562616e641201301080897a1a407de416066bedfa16c518563dbc71184aebb24968232901c2b06f0714850f5557188750839331923bf0568069f5770b020bc83dc710480ca3726fc0dd3d3427c4
```