{
    "Function": "sendTxns",
    "File": "contracts/wallet/QuickAccManager.sol",
    "Parent Contracts": [],
    "High-Level Calls": [
        "Identity",
        "Identity",
        "SignatureValidator",
        "SignatureValidator"
    ],
    "Internal Calls": [
        "require(bool,string)",
        "abi.encode()",
        "require(bool,string)",
        "abi.encode()",
        "keccak256(bytes)",
        "abi.encodePacked()",
        "keccak256(bytes)",
        "abi.encode()",
        "keccak256(bytes)",
        "require(bool,string)",
        "abi.encodePacked()",
        "keccak256(bytes)",
        "keccak256(bytes)"
    ],
    "Library Calls": [
        "recoverAddr",
        "recoverAddr"
    ],
    "Low-Level Calls": [],
    "Code": "function sendTxns(Identity identity, QuickAccount calldata acc, bytes calldata sigOne, bytes calldata sigTwo, Txn[] calldata txns) external {\n\t\trequire(identity.privileges(address(this)) == keccak256(abi.encode(acc)), 'WRONG_ACC_OR_NO_PRIV');\n\n\t\t// hashing + prepping args\n\t\tbytes32[] memory txnBytes = new bytes32[](txns.length);\n\t\tIdentity.Transaction[] memory identityTxns = new Identity.Transaction[](txns.length);\n\t\tfor (uint256 i = 0; i < txns.length; i++) {\n\t\t\ttxnBytes[i] = keccak256(abi.encode(TXNS_TYPEHASH, txns[i].description, txns[i].to, txns[i].value, txns[i].data));\n\t\t\tidentityTxns[i].to = txns[i].to;\n\t\t\tidentityTxns[i].value = txns[i].value;\n\t\t\tidentityTxns[i].data = txns[i].data;\n\t\t}\n\t\tbytes32 txnsHash = keccak256(abi.encodePacked(txnBytes));\n\t\tbytes32 hash = keccak256(abi.encodePacked(\n\t\t\t'\\x19\\x01',\n\t\t\tDOMAIN_SEPARATOR,\n\t\t\tkeccak256(abi.encode(BUNDLE_TYPEHASH, nonces[address(identity)]++, txnsHash))\n\t\t));\n\t\trequire(acc.one == SignatureValidator.recoverAddr(hash, sigOne), 'SIG_ONE');\n\t\trequire(acc.two == SignatureValidator.recoverAddr(hash, sigTwo), 'SIG_TWO');\n\t\tidentity.executeBySender(identityTxns);\n\t}"
}