---
# System prepended metadata

title: Transaction Module - Pyband
tags: [Client library]

---

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