# Transaction Signature and Proofs
proofs array can contain the transaction signature, or several signatures, or other data.
Transaction proofs are used for transaction verification, that is, the check that the transaction is allowed by sender's account:
- In case of ordinary account (without script) the sender's signature is verified, see Transaction Signature below.
- In case of dApp or smart account the transaction is verified by the script assigned to the account. The script can use the
proofsarray, see Proofs: Verification by Script.
The maximum number of proofs is 8. Each proof is up to 64 bytes.
In earlier versions of some types of transactions the
signaturefield is used instead of
# Transaction Signature
If the transaction sender is an ordinary account (without script), the array of proofs must contain sender's digital signature.
The sender generates a signature using account's private key. Waves protocol uses Curve25519 (ED25519 with X25519 keys) to create and verify signatures. Signature generation is described in the Cryptographic Practical Details article.
Along with the signature, the transaction contains sender's public key, so the node (and anyone) can verify the integrity of the transaction data and the authenticity of the signature, that is, make sure that the signature of the transaction matches the public key.
# Proofs: Verification by Script
If the transaction sender is a dApp or a smart account, then the transaction is verified by the script assigned to the account instead of signature verification. The script allows or denies the transaction depending on whether it meets the specified conditions. In particular, the script can run various verifications of the proofs.
A common example is a smart account with a multisignature where three co-owner users store shared funds. The account script allows the transaction on behalf of the smart account if the array of proofs contains valid signatures of at least two of the three co-owner accounts. The script code is available in Waves IDE: Library → smart-accounts → Multisig.ride.