# Transaction

## Generating Signed Transaction

You can use Visionweb to complete the tasks of this section, for more details, please refer to:\
[Visionweb Github](https://github.com/vision-consensus/visionweb)

Here is mainly Visionweb, using freezeBalance as an example.

## Creating a Transaction

Create an unsigned transaction for freezing balance.\
[Visionweb freezeBalance](https://developers.v.network/reference/freezebalance-1)

## Signing the Transaction

Sign the transaction with your private key.\
[Visionweb sign](https://developers.v.network/reference/sign)

❗️\
Never use this in any web / user-facing applications, as it will expose your private key.\
For security reasons, please use a local full node.

## Broadcast the Transaction

Broadcast the signed transaction.\
[Visionweb Broadcast transaction](https://developers.v.network/reference/sendrawtransaction)

📘\
The broadcasting function in Visionweb is sendrawtransaction without a 'broadcast' keyword, refer to the source code for details.

## Transaction Confirmation

The mechanism of VISION's block validation is that a block is validated after this block is produced and 12 different FVs produce subsequent blocks based on this block.

When a block is confirmed, transactions inside are all confirmed. Vision provides the /walletsolidty/ interface to make it easier for users to search for confirmed transactions; the following describes how to confirm different types of transactions.

| Transaction Type                           | Method of transaction confirmation                                                                                                                                                                                                                                                                                                                                                                                        |
| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| transferContract and transferAssetContract | As long as the transaction can query the results via walletsolidity/gettransactioninfobyid or walletsolidity/gettransactionbyid.                                                                                                                                                                                                                                                                                          |
| TriggerSmartContract                       | <p>There are two ways to judge:<br><br>1. Find transactionInfo.receipt.result=success via the /walletsolidity/gettransactioninfobyid interface (It is not recommended to use transactionInfo.result to judge, because for the http interface, successful transactions do not return this field by default).<br><br>2. Via /walletsolidity/gettransactionbyid The interface found transaction.ret.contractRet =success</p> |
| InternalTransaction                        | <p>Query by /walletsolidity/gettransactioninfobyid.<br><br><br>Http interface: For successful transactions, the rejected field is not returned by default. For failed transactions, rejected=true.<br><br>Grpc interface: For successful transactions, rejected=false (indicating that the current internalTransaction has not been discarded), For failed transactions, rejected=true</p>                                |

## Multi-type transactions

There are many types of transactions in VISION network:\
[protobuf](https://github.com/vision-consensus/vision-core/blob/master/vprotocol/src/main/protos/core/Vision.proto)\
[VISIONWEB.TRANSACTIONBUILDER](https://developers.v.network/reference/applyforfv)\
Please read these contents for more details.
