@trustline.id/web3sdk 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/artifacts/build-info/b10e3fa14fea75fdb2ecc56bfe679f1a.json +1 -0
- package/artifacts/contracts/Trustlined.sol/Trustlined.dbg.json +1 -1
- package/artifacts/contracts/examples/PaymentFirewall.sol/PaymentFirewall.dbg.json +1 -1
- package/artifacts/contracts/examples/PaymentFirewall.sol/PaymentFirewall.json +3 -3
- package/artifacts/contracts/interfaces/IValidationEngine.sol/IValidationEngine.dbg.json +1 -1
- package/contracts/examples/PaymentFirewall.sol +5 -7
- package/contracts/interfaces/IValidationEngine.sol +3 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"b10e3fa14fea75fdb2ecc56bfe679f1a","_format":"hh-sol-build-info-1","solcVersion":"0.8.28","solcLongVersion":"0.8.28+commit.7893614a","input":{"language":"Solidity","sources":{"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"contracts/examples/PaymentFirewall.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8;\n\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n//import {Trustlined} from \"@trustline.id/web3sdk/contracts/Trustlined.sol\";\nimport {Trustlined} from \"../Trustlined.sol\";\n\n/// @title PaymentFirewall\n/// @author Trustline\n/// @notice This contract is a firewall ensuring all funds going in and out are compliant\ncontract PaymentFirewall is Trustlined {\n constructor(address validationEngine) Trustlined(validationEngine) {}\n\n /// @notice Pay native ethers to a recipient\n /// @param destination The recipient address\n function payEthers(address payable destination) public payable {\n address[] memory addresses = new address[](1);\n addresses[0] = destination;\n requireTrustline(addresses);\n (bool sent, ) = destination.call{value: msg.value}(\"\");\n require(sent, \"Unable to pay ethers\");\n }\n\n /// @notice Pay ERC20 tokens to a recipient\n /// @param destination The recipient address\n /// @param token The ERC20 token address\n /// @param value The amount of tokens to pay\n function payTokens(address destination, address token, uint256 value) external {\n address[] memory addresses = new address[](1);\n addresses[0] = destination;\n requireTrustline(addresses);\n bool sent = IERC20(token).transferFrom(msg.sender, destination, value);\n require(sent, \"Unable to pay tokens\");\n }\n}\n"},"contracts/interfaces/IValidationEngine.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8;\n\n/// @title Trustline's Validation interface\n/// @author Trustline\n/// @notice This interface defines the functions that must be implemented by the validation contract\n/// @dev This interface is used by the Trustlined contract to interact with Trustline's Validation contract\ninterface IValidationEngine {\n enum ValidationMode {\n Dapp,\n UniswapV4,\n MorphoV2,\n ERC3643\n }\n\n /// @notice Checks whether a transaction is trusted and verifies msg.sender + addresses[] against sanctions lists (advanced)\n /// @dev This call is required only in complex scenarios\n /// @dev WARNING: Improper use of this call may introduce security vulnerabilities in the calling contract\n /// @param mode The validation mode\n /// @param sender The transaction sender\n /// @param value Transaction value in wei\n /// @param data Transaction payload data\n /// @param addresses An array of addresses that will be verified by the policy\n function checkTrustlineStatus(\n ValidationMode mode,\n address sender,\n uint256 value,\n bytes calldata data,\n address[] memory addresses\n ) external view returns (bool);\n\n /// @notice Checks whether a transaction is trusted and verifies msg.sender + addresses[] against sanctions lists\n /// @param sender The transaction sender\n /// @param value Transaction value in wei\n /// @param data Transaction payload data\n /// @param addresses An array of addresses that will be verified by the policy\n function checkTrustlineStatus(\n address sender,\n uint256 value,\n bytes calldata data,\n address[] memory addresses\n ) external view returns (bool);\n\n /// @notice Checks whether a transaction is trusted and verifies msg.sender against sanctions lists\n /// @param sender The transaction sender\n /// @param value Transaction value in wei\n /// @param data Transaction payload data\n function checkTrustlineStatus(\n address sender,\n uint256 value,\n bytes calldata data\n ) external view returns (bool);\n\n /// @notice Requires a trusted transaction and non‑sanctioned msg.sender + addresses[] (advanced)\n /// @dev This call is required only in complex scenarios\n /// @dev WARNING: Improper use of this call may introduce security vulnerabilities in the calling contract\n /// @param mode The validation mode\n /// @param sender The transaction sender\n /// @param value Transaction value in wei\n /// @param data Transaction payload data\n /// @param addresses An array of addresses that will be verified by the policy\n function requireTrustline(\n ValidationMode mode,\n address sender,\n uint256 value,\n bytes calldata data,\n address[] memory addresses\n ) external;\n\n /// @notice Requires a trusted transaction and non‑sanctioned msg.sender + addresses[]\n /// @dev reverts if the transaction is not compliant\n /// @param sender The transaction sender\n /// @param value Transaction value in wei\n /// @param data Transaction payload data\n /// @param addresses An array of addresses that will be verified by the policy\n function requireTrustline(\n address sender,\n uint256 value,\n bytes calldata data,\n address[] memory addresses\n ) external;\n\n /// @notice Requires a trusted transaction and a non‑sanctioned msg.sender\n /// @dev reverts if the transaction is not compliant\n /// @param sender The transaction sender\n /// @param value Transaction value in wei\n /// @param data Transaction payload data\n function requireTrustline(\n address sender,\n uint256 value,\n bytes calldata data\n ) external;\n}\n"},"contracts/Trustlined.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8;\n\nimport {IValidationEngine} from \"./interfaces/IValidationEngine.sol\";\n\n/// @title Trustline's Base Contract\n/// @author Trustline\n/// @notice This library provides functions for verifying the trust status of a transaction\nabstract contract Trustlined {\n /// @notice The Trustline ValidationEngine contract address. It must be set before any of the provided functions can be used\n /// @dev Multiple dapps can share the same ValidationEngine contract\n /// @dev This contract is set by the owner and must implement the IValidationEngine interface\n IValidationEngine public validationEngine;\n\n /// @dev Both a constructor and initializer functions are defined to support both upgradeable and non-upgradeable deployment scenarios\n constructor(address validationEngine_) {\n __Trustlined_init(validationEngine_);\n }\n\n function __Trustlined_init(address validation_) internal {\n __Trustlined_init_unchained(validation_);\n }\n\n function __Trustlined_init_unchained(address validationEngine_) internal {\n require(address(validationEngine) == address(0), \"Already initialized\");\n validationEngine = IValidationEngine(validationEngine_);\n }\n\n /// @notice Checks whether a transaction is trusted and verifies msg.sender + addresses[] against sanctions lists\n /// @param addresses An array of addresses that will be verified by the policy\n function checkTrustlineStatus(address[] memory addresses) internal view returns (bool) {\n return validationEngine.checkTrustlineStatus(msg.sender, msg.value, msg.data, addresses);\n }\n\n /// @notice Checks whether a transaction is trusted and verifies msg.sender against sanctions lists\n function checkTrustlineStatus() internal view returns (bool) {\n return validationEngine.checkTrustlineStatus(msg.sender, msg.value, msg.data);\n }\n\n /// @notice Requires a trusted transaction and non‑sanctioned msg.sender + addresses[]\n /// @param addresses An array of addresses that will be verified by the policy\n function requireTrustline(address[] memory addresses) internal {\n validationEngine.requireTrustline(msg.sender, msg.value, msg.data, addresses);\n }\n\n /// @notice Requires a trusted transaction and a non‑sanctioned msg.sender\n function requireTrustline() internal {\n validationEngine.requireTrustline(msg.sender, msg.value, msg.data);\n }\n}\n"}},"settings":{"optimizer":{"enabled":true,"runs":1000000},"evmVersion":"cancun","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}}}},"output":{"sources":{"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","exportedSymbols":{"IERC20":[77]},"id":78,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"106:24:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":2,"nodeType":"StructuredDocumentation","src":"132:71:0","text":" @dev Interface of the ERC-20 standard as defined in the ERC."},"fullyImplemented":false,"id":77,"linearizedBaseContracts":[77],"name":"IERC20","nameLocation":"214:6:0","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":3,"nodeType":"StructuredDocumentation","src":"227:158:0","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":11,"name":"Transfer","nameLocation":"396:8:0","nodeType":"EventDefinition","parameters":{"id":10,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"421:4:0","nodeType":"VariableDeclaration","scope":11,"src":"405:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4,"name":"address","nodeType":"ElementaryTypeName","src":"405:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"443:2:0","nodeType":"VariableDeclaration","scope":11,"src":"427:18:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6,"name":"address","nodeType":"ElementaryTypeName","src":"427:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"455:5:0","nodeType":"VariableDeclaration","scope":11,"src":"447:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8,"name":"uint256","nodeType":"ElementaryTypeName","src":"447:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"404:57:0"},"src":"390:72:0"},{"anonymous":false,"documentation":{"id":12,"nodeType":"StructuredDocumentation","src":"468:148:0","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":20,"name":"Approval","nameLocation":"627:8:0","nodeType":"EventDefinition","parameters":{"id":19,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"652:5:0","nodeType":"VariableDeclaration","scope":20,"src":"636:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13,"name":"address","nodeType":"ElementaryTypeName","src":"636:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"675:7:0","nodeType":"VariableDeclaration","scope":20,"src":"659:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15,"name":"address","nodeType":"ElementaryTypeName","src":"659:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"692:5:0","nodeType":"VariableDeclaration","scope":20,"src":"684:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17,"name":"uint256","nodeType":"ElementaryTypeName","src":"684:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"635:63:0"},"src":"621:78:0"},{"documentation":{"id":21,"nodeType":"StructuredDocumentation","src":"705:65:0","text":" @dev Returns the value of tokens in existence."},"functionSelector":"18160ddd","id":26,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"784:11:0","nodeType":"FunctionDefinition","parameters":{"id":22,"nodeType":"ParameterList","parameters":[],"src":"795:2:0"},"returnParameters":{"id":25,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26,"src":"821:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23,"name":"uint256","nodeType":"ElementaryTypeName","src":"821:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"820:9:0"},"scope":77,"src":"775:55:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":27,"nodeType":"StructuredDocumentation","src":"836:71:0","text":" @dev Returns the value of tokens owned by `account`."},"functionSelector":"70a08231","id":34,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"921:9:0","nodeType":"FunctionDefinition","parameters":{"id":30,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29,"mutability":"mutable","name":"account","nameLocation":"939:7:0","nodeType":"VariableDeclaration","scope":34,"src":"931:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28,"name":"address","nodeType":"ElementaryTypeName","src":"931:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"930:17:0"},"returnParameters":{"id":33,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34,"src":"971:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31,"name":"uint256","nodeType":"ElementaryTypeName","src":"971:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"970:9:0"},"scope":77,"src":"912:68:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":35,"nodeType":"StructuredDocumentation","src":"986:213:0","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":44,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1213:8:0","nodeType":"FunctionDefinition","parameters":{"id":40,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37,"mutability":"mutable","name":"to","nameLocation":"1230:2:0","nodeType":"VariableDeclaration","scope":44,"src":"1222:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36,"name":"address","nodeType":"ElementaryTypeName","src":"1222:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39,"mutability":"mutable","name":"value","nameLocation":"1242:5:0","nodeType":"VariableDeclaration","scope":44,"src":"1234:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38,"name":"uint256","nodeType":"ElementaryTypeName","src":"1234:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1221:27:0"},"returnParameters":{"id":43,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44,"src":"1267:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41,"name":"bool","nodeType":"ElementaryTypeName","src":"1267:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1266:6:0"},"scope":77,"src":"1204:69:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":45,"nodeType":"StructuredDocumentation","src":"1279:264:0","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":54,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1557:9:0","nodeType":"FunctionDefinition","parameters":{"id":50,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47,"mutability":"mutable","name":"owner","nameLocation":"1575:5:0","nodeType":"VariableDeclaration","scope":54,"src":"1567:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":46,"name":"address","nodeType":"ElementaryTypeName","src":"1567:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":49,"mutability":"mutable","name":"spender","nameLocation":"1590:7:0","nodeType":"VariableDeclaration","scope":54,"src":"1582:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48,"name":"address","nodeType":"ElementaryTypeName","src":"1582:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1566:32:0"},"returnParameters":{"id":53,"nodeType":"ParameterList","parameters":[{"constant":false,"id":52,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54,"src":"1622:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51,"name":"uint256","nodeType":"ElementaryTypeName","src":"1622:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1621:9:0"},"scope":77,"src":"1548:83:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":55,"nodeType":"StructuredDocumentation","src":"1637:667:0","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":64,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2318:7:0","nodeType":"FunctionDefinition","parameters":{"id":60,"nodeType":"ParameterList","parameters":[{"constant":false,"id":57,"mutability":"mutable","name":"spender","nameLocation":"2334:7:0","nodeType":"VariableDeclaration","scope":64,"src":"2326:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56,"name":"address","nodeType":"ElementaryTypeName","src":"2326:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":59,"mutability":"mutable","name":"value","nameLocation":"2351:5:0","nodeType":"VariableDeclaration","scope":64,"src":"2343:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58,"name":"uint256","nodeType":"ElementaryTypeName","src":"2343:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2325:32:0"},"returnParameters":{"id":63,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":64,"src":"2376:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":61,"name":"bool","nodeType":"ElementaryTypeName","src":"2376:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2375:6:0"},"scope":77,"src":"2309:73:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":65,"nodeType":"StructuredDocumentation","src":"2388:297:0","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":76,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2699:12:0","nodeType":"FunctionDefinition","parameters":{"id":72,"nodeType":"ParameterList","parameters":[{"constant":false,"id":67,"mutability":"mutable","name":"from","nameLocation":"2720:4:0","nodeType":"VariableDeclaration","scope":76,"src":"2712:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":66,"name":"address","nodeType":"ElementaryTypeName","src":"2712:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":69,"mutability":"mutable","name":"to","nameLocation":"2734:2:0","nodeType":"VariableDeclaration","scope":76,"src":"2726:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":68,"name":"address","nodeType":"ElementaryTypeName","src":"2726:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":71,"mutability":"mutable","name":"value","nameLocation":"2746:5:0","nodeType":"VariableDeclaration","scope":76,"src":"2738:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":70,"name":"uint256","nodeType":"ElementaryTypeName","src":"2738:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2711:41:0"},"returnParameters":{"id":75,"nodeType":"ParameterList","parameters":[{"constant":false,"id":74,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76,"src":"2771:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":73,"name":"bool","nodeType":"ElementaryTypeName","src":"2771:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2770:6:0"},"scope":77,"src":"2690:87:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":78,"src":"204:2575:0","usedErrors":[],"usedEvents":[11,20]}],"src":"106:2674:0"},"id":0},"contracts/Trustlined.sol":{"ast":{"absolutePath":"contracts/Trustlined.sol","exportedSymbols":{"IValidationEngine":[411],"Trustlined":[207]},"id":208,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":79,"literals":["solidity","^","0.8"],"nodeType":"PragmaDirective","src":"32:21:1"},{"absolutePath":"contracts/interfaces/IValidationEngine.sol","file":"./interfaces/IValidationEngine.sol","id":81,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":208,"sourceUnit":412,"src":"55:69:1","symbolAliases":[{"foreign":{"id":80,"name":"IValidationEngine","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":411,"src":"63:17:1","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"Trustlined","contractDependencies":[],"contractKind":"contract","documentation":{"id":82,"nodeType":"StructuredDocumentation","src":"126:151:1","text":"@title Trustline's Base Contract\n @author Trustline\n @notice This library provides functions for verifying the trust status of a transaction"},"fullyImplemented":true,"id":207,"linearizedBaseContracts":[207],"name":"Trustlined","nameLocation":"295:10:1","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":83,"nodeType":"StructuredDocumentation","src":"312:295:1","text":"@notice The Trustline ValidationEngine contract address. It must be set before any of the provided functions can be used\n @dev Multiple dapps can share the same ValidationEngine contract\n @dev This contract is set by the owner and must implement the IValidationEngine interface"},"functionSelector":"7d4f064e","id":86,"mutability":"mutable","name":"validationEngine","nameLocation":"637:16:1","nodeType":"VariableDeclaration","scope":207,"src":"612:41:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IValidationEngine_$411","typeString":"contract IValidationEngine"},"typeName":{"id":85,"nodeType":"UserDefinedTypeName","pathNode":{"id":84,"name":"IValidationEngine","nameLocations":["612:17:1"],"nodeType":"IdentifierPath","referencedDeclaration":411,"src":"612:17:1"},"referencedDeclaration":411,"src":"612:17:1","typeDescriptions":{"typeIdentifier":"t_contract$_IValidationEngine_$411","typeString":"contract IValidationEngine"}},"visibility":"public"},{"body":{"id":96,"nodeType":"Block","src":"838:53:1","statements":[{"expression":{"arguments":[{"id":93,"name":"validationEngine_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89,"src":"866:17:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":92,"name":"__Trustlined_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":107,"src":"848:17:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":94,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"848:36:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":95,"nodeType":"ExpressionStatement","src":"848:36:1"}]},"documentation":{"id":87,"nodeType":"StructuredDocumentation","src":"660:134:1","text":"@dev Both a constructor and initializer functions are defined to support both upgradeable and non-upgradeable deployment scenarios"},"id":97,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":90,"nodeType":"ParameterList","parameters":[{"constant":false,"id":89,"mutability":"mutable","name":"validationEngine_","nameLocation":"819:17:1","nodeType":"VariableDeclaration","scope":97,"src":"811:25:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":88,"name":"address","nodeType":"ElementaryTypeName","src":"811:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"810:27:1"},"returnParameters":{"id":91,"nodeType":"ParameterList","parameters":[],"src":"838:0:1"},"scope":207,"src":"799:92:1","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":106,"nodeType":"Block","src":"954:57:1","statements":[{"expression":{"arguments":[{"id":103,"name":"validation_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99,"src":"992:11:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":102,"name":"__Trustlined_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":132,"src":"964:27:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"964:40:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":105,"nodeType":"ExpressionStatement","src":"964:40:1"}]},"id":107,"implemented":true,"kind":"function","modifiers":[],"name":"__Trustlined_init","nameLocation":"906:17:1","nodeType":"FunctionDefinition","parameters":{"id":100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99,"mutability":"mutable","name":"validation_","nameLocation":"932:11:1","nodeType":"VariableDeclaration","scope":107,"src":"924:19:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":98,"name":"address","nodeType":"ElementaryTypeName","src":"924:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"923:21:1"},"returnParameters":{"id":101,"nodeType":"ParameterList","parameters":[],"src":"954:0:1"},"scope":207,"src":"897:114:1","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":131,"nodeType":"Block","src":"1090:153:1","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":115,"name":"validationEngine","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86,"src":"1116:16:1","typeDescriptions":{"typeIdentifier":"t_contract$_IValidationEngine_$411","typeString":"contract IValidationEngine"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IValidationEngine_$411","typeString":"contract IValidationEngine"}],"id":114,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1108:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":113,"name":"address","nodeType":"ElementaryTypeName","src":"1108:7:1","typeDescriptions":{}}},"id":116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1108:25:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":119,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1145:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":118,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1137:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":117,"name":"address","nodeType":"ElementaryTypeName","src":"1137:7:1","typeDescriptions":{}}},"id":120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1137:10:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1108:39:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416c726561647920696e697469616c697a6564","id":122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1149:21:1","typeDescriptions":{"typeIdentifier":"t_stringliteral_d3814fd4e72cfd7651525eee846049aca388165c613a1085fb56751abcdd36c0","typeString":"literal_string \"Already initialized\""},"value":"Already initialized"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d3814fd4e72cfd7651525eee846049aca388165c613a1085fb56751abcdd36c0","typeString":"literal_string \"Already initialized\""}],"id":112,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1100:7:1","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1100:71:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":124,"nodeType":"ExpressionStatement","src":"1100:71:1"},{"expression":{"id":129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":125,"name":"validationEngine","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86,"src":"1181:16:1","typeDescriptions":{"typeIdentifier":"t_contract$_IValidationEngine_$411","typeString":"contract IValidationEngine"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":127,"name":"validationEngine_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109,"src":"1218:17:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":126,"name":"IValidationEngine","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":411,"src":"1200:17:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IValidationEngine_$411_$","typeString":"type(contract IValidationEngine)"}},"id":128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1200:36:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IValidationEngine_$411","typeString":"contract IValidationEngine"}},"src":"1181:55:1","typeDescriptions":{"typeIdentifier":"t_contract$_IValidationEngine_$411","typeString":"contract IValidationEngine"}},"id":130,"nodeType":"ExpressionStatement","src":"1181:55:1"}]},"id":132,"implemented":true,"kind":"function","modifiers":[],"name":"__Trustlined_init_unchained","nameLocation":"1026:27:1","nodeType":"FunctionDefinition","parameters":{"id":110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109,"mutability":"mutable","name":"validationEngine_","nameLocation":"1062:17:1","nodeType":"VariableDeclaration","scope":132,"src":"1054:25:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":108,"name":"address","nodeType":"ElementaryTypeName","src":"1054:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1053:27:1"},"returnParameters":{"id":111,"nodeType":"ParameterList","parameters":[],"src":"1090:0:1"},"scope":207,"src":"1017:226:1","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":152,"nodeType":"Block","src":"1537:105:1","statements":[{"expression":{"arguments":[{"expression":{"id":143,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1592:3:1","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1596:6:1","memberName":"sender","nodeType":"MemberAccess","src":"1592:10:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":145,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1604:3:1","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1608:5:1","memberName":"value","nodeType":"MemberAccess","src":"1604:9:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":147,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1615:3:1","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1619:4:1","memberName":"data","nodeType":"MemberAccess","src":"1615:8:1","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":149,"name":"addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":136,"src":"1625:9:1","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"expression":{"id":141,"name":"validationEngine","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86,"src":"1554:16:1","typeDescriptions":{"typeIdentifier":"t_contract$_IValidationEngine_$411","typeString":"contract IValidationEngine"}},"id":142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1571:20:1","memberName":"checkTrustlineStatus","nodeType":"MemberAccess","referencedDeclaration":359,"src":"1554:37:1","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_bool_$","typeString":"function (address,uint256,bytes memory,address[] memory) view external returns (bool)"}},"id":150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1554:81:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":140,"id":151,"nodeType":"Return","src":"1547:88:1"}]},"documentation":{"id":133,"nodeType":"StructuredDocumentation","src":"1249:196:1","text":"@notice Checks whether a transaction is trusted and verifies msg.sender + addresses[] against sanctions lists\n @param addresses An array of addresses that will be verified by the policy"},"id":153,"implemented":true,"kind":"function","modifiers":[],"name":"checkTrustlineStatus","nameLocation":"1459:20:1","nodeType":"FunctionDefinition","parameters":{"id":137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":136,"mutability":"mutable","name":"addresses","nameLocation":"1497:9:1","nodeType":"VariableDeclaration","scope":153,"src":"1480:26:1","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":134,"name":"address","nodeType":"ElementaryTypeName","src":"1480:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":135,"nodeType":"ArrayTypeName","src":"1480:9:1","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1479:28:1"},"returnParameters":{"id":140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":139,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":153,"src":"1531:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":138,"name":"bool","nodeType":"ElementaryTypeName","src":"1531:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1530:6:1"},"scope":207,"src":"1450:192:1","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":169,"nodeType":"Block","src":"1813:94:1","statements":[{"expression":{"arguments":[{"expression":{"id":161,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1868:3:1","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1872:6:1","memberName":"sender","nodeType":"MemberAccess","src":"1868:10:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":163,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1880:3:1","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1884:5:1","memberName":"value","nodeType":"MemberAccess","src":"1880:9:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":165,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1891:3:1","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1895:4:1","memberName":"data","nodeType":"MemberAccess","src":"1891:8:1","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":159,"name":"validationEngine","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86,"src":"1830:16:1","typeDescriptions":{"typeIdentifier":"t_contract$_IValidationEngine_$411","typeString":"contract IValidationEngine"}},"id":160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1847:20:1","memberName":"checkTrustlineStatus","nodeType":"MemberAccess","referencedDeclaration":371,"src":"1830:37:1","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,uint256,bytes memory) view external returns (bool)"}},"id":167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1830:70:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":158,"id":168,"nodeType":"Return","src":"1823:77:1"}]},"documentation":{"id":154,"nodeType":"StructuredDocumentation","src":"1648:99:1","text":"@notice Checks whether a transaction is trusted and verifies msg.sender against sanctions lists"},"id":170,"implemented":true,"kind":"function","modifiers":[],"name":"checkTrustlineStatus","nameLocation":"1761:20:1","nodeType":"FunctionDefinition","parameters":{"id":155,"nodeType":"ParameterList","parameters":[],"src":"1781:2:1"},"returnParameters":{"id":158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":157,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":170,"src":"1807:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":156,"name":"bool","nodeType":"ElementaryTypeName","src":"1807:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1806:6:1"},"scope":207,"src":"1752:155:1","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":189,"nodeType":"Block","src":"2152:94:1","statements":[{"expression":{"arguments":[{"expression":{"id":180,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2196:3:1","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2200:6:1","memberName":"sender","nodeType":"MemberAccess","src":"2196:10:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":182,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2208:3:1","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2212:5:1","memberName":"value","nodeType":"MemberAccess","src":"2208:9:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":184,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2219:3:1","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2223:4:1","memberName":"data","nodeType":"MemberAccess","src":"2219:8:1","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":186,"name":"addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":174,"src":"2229:9:1","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"expression":{"id":177,"name":"validationEngine","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86,"src":"2162:16:1","typeDescriptions":{"typeIdentifier":"t_contract$_IValidationEngine_$411","typeString":"contract IValidationEngine"}},"id":179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2179:16:1","memberName":"requireTrustline","nodeType":"MemberAccess","referencedDeclaration":400,"src":"2162:33:1","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory,address[] memory) external"}},"id":187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2162:77:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":188,"nodeType":"ExpressionStatement","src":"2162:77:1"}]},"documentation":{"id":171,"nodeType":"StructuredDocumentation","src":"1913:171:1","text":"@notice Requires a trusted transaction and non‑sanctioned msg.sender + addresses[]\n @param addresses An array of addresses that will be verified by the policy"},"id":190,"implemented":true,"kind":"function","modifiers":[],"name":"requireTrustline","nameLocation":"2098:16:1","nodeType":"FunctionDefinition","parameters":{"id":175,"nodeType":"ParameterList","parameters":[{"constant":false,"id":174,"mutability":"mutable","name":"addresses","nameLocation":"2132:9:1","nodeType":"VariableDeclaration","scope":190,"src":"2115:26:1","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":172,"name":"address","nodeType":"ElementaryTypeName","src":"2115:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":173,"nodeType":"ArrayTypeName","src":"2115:9:1","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2114:28:1"},"returnParameters":{"id":176,"nodeType":"ParameterList","parameters":[],"src":"2152:0:1"},"scope":207,"src":"2089:157:1","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":205,"nodeType":"Block","src":"2370:83:1","statements":[{"expression":{"arguments":[{"expression":{"id":197,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2414:3:1","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2418:6:1","memberName":"sender","nodeType":"MemberAccess","src":"2414:10:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":199,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2426:3:1","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2430:5:1","memberName":"value","nodeType":"MemberAccess","src":"2426:9:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":201,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2437:3:1","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2441:4:1","memberName":"data","nodeType":"MemberAccess","src":"2437:8:1","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":194,"name":"validationEngine","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86,"src":"2380:16:1","typeDescriptions":{"typeIdentifier":"t_contract$_IValidationEngine_$411","typeString":"contract IValidationEngine"}},"id":196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2397:16:1","memberName":"requireTrustline","nodeType":"MemberAccess","referencedDeclaration":410,"src":"2380:33:1","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory) external"}},"id":203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2380:66:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":204,"nodeType":"ExpressionStatement","src":"2380:66:1"}]},"documentation":{"id":191,"nodeType":"StructuredDocumentation","src":"2252:76:1","text":"@notice Requires a trusted transaction and a non‑sanctioned msg.sender"},"id":206,"implemented":true,"kind":"function","modifiers":[],"name":"requireTrustline","nameLocation":"2342:16:1","nodeType":"FunctionDefinition","parameters":{"id":192,"nodeType":"ParameterList","parameters":[],"src":"2358:2:1"},"returnParameters":{"id":193,"nodeType":"ParameterList","parameters":[],"src":"2370:0:1"},"scope":207,"src":"2333:120:1","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":208,"src":"277:2178:1","usedErrors":[],"usedEvents":[]}],"src":"32:2424:1"},"id":1},"contracts/examples/PaymentFirewall.sol":{"ast":{"absolutePath":"contracts/examples/PaymentFirewall.sol","exportedSymbols":{"IERC20":[77],"PaymentFirewall":[318],"Trustlined":[207]},"id":319,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":209,"literals":["solidity","^","0.8"],"nodeType":"PragmaDirective","src":"32:21:2"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":211,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":319,"sourceUnit":78,"src":"55:70:2","symbolAliases":[{"foreign":{"id":210,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77,"src":"63:6:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/Trustlined.sol","file":"../Trustlined.sol","id":213,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":319,"sourceUnit":208,"src":"203:45:2","symbolAliases":[{"foreign":{"id":212,"name":"Trustlined","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":207,"src":"211:10:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":215,"name":"Trustlined","nameLocations":["417:10:2"],"nodeType":"IdentifierPath","referencedDeclaration":207,"src":"417:10:2"},"id":216,"nodeType":"InheritanceSpecifier","src":"417:10:2"}],"canonicalName":"PaymentFirewall","contractDependencies":[],"contractKind":"contract","documentation":{"id":214,"nodeType":"StructuredDocumentation","src":"250:139:2","text":"@title PaymentFirewall\n @author Trustline\n @notice This contract is a firewall ensuring all funds going in and out are compliant"},"fullyImplemented":true,"id":318,"linearizedBaseContracts":[318,207],"name":"PaymentFirewall","nameLocation":"398:15:2","nodeType":"ContractDefinition","nodes":[{"body":{"id":224,"nodeType":"Block","src":"501:2:2","statements":[]},"id":225,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":221,"name":"validationEngine","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":218,"src":"483:16:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":222,"kind":"baseConstructorSpecifier","modifierName":{"id":220,"name":"Trustlined","nameLocations":["472:10:2"],"nodeType":"IdentifierPath","referencedDeclaration":207,"src":"472:10:2"},"nodeType":"ModifierInvocation","src":"472:28:2"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":219,"nodeType":"ParameterList","parameters":[{"constant":false,"id":218,"mutability":"mutable","name":"validationEngine","nameLocation":"454:16:2","nodeType":"VariableDeclaration","scope":225,"src":"446:24:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":217,"name":"address","nodeType":"ElementaryTypeName","src":"446:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"445:26:2"},"returnParameters":{"id":223,"nodeType":"ParameterList","parameters":[],"src":"501:0:2"},"scope":318,"src":"434:69:2","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":267,"nodeType":"Block","src":"670:246:2","statements":[{"assignments":[235],"declarations":[{"constant":false,"id":235,"mutability":"mutable","name":"addresses","nameLocation":"697:9:2","nodeType":"VariableDeclaration","scope":267,"src":"680:26:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":233,"name":"address","nodeType":"ElementaryTypeName","src":"680:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":234,"nodeType":"ArrayTypeName","src":"680:9:2","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":241,"initialValue":{"arguments":[{"hexValue":"31","id":239,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"723:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":238,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"709:13:2","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":236,"name":"address","nodeType":"ElementaryTypeName","src":"713:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":237,"nodeType":"ArrayTypeName","src":"713:9:2","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"709:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"680:45:2"},{"expression":{"id":246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":242,"name":"addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":235,"src":"735:9:2","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":244,"indexExpression":{"hexValue":"30","id":243,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"745:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"735:12:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":245,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":228,"src":"750:11:2","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"735:26:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":247,"nodeType":"ExpressionStatement","src":"735:26:2"},{"expression":{"arguments":[{"id":249,"name":"addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":235,"src":"788:9:2","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":248,"name":"requireTrustline","nodeType":"Identifier","overloadedDeclarations":[190,206],"referencedDeclaration":190,"src":"771:16:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory)"}},"id":250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"771:27:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":251,"nodeType":"ExpressionStatement","src":"771:27:2"},{"assignments":[253,null],"declarations":[{"constant":false,"id":253,"mutability":"mutable","name":"sent","nameLocation":"814:4:2","nodeType":"VariableDeclaration","scope":267,"src":"809:9:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":252,"name":"bool","nodeType":"ElementaryTypeName","src":"809:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":261,"initialValue":{"arguments":[{"hexValue":"","id":259,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"859:2:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":254,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":228,"src":"824:11:2","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"836:4:2","memberName":"call","nodeType":"MemberAccess","src":"824:16:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":256,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"848:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"852:5:2","memberName":"value","nodeType":"MemberAccess","src":"848:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"824:34:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"824:38:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"808:54:2"},{"expression":{"arguments":[{"id":263,"name":"sent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":253,"src":"880:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"556e61626c6520746f2070617920657468657273","id":264,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"886:22:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_c056992782810757ac218a0ddf8c5ba73b3c93859b191993a129d4ce88ee4211","typeString":"literal_string \"Unable to pay ethers\""},"value":"Unable to pay ethers"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c056992782810757ac218a0ddf8c5ba73b3c93859b191993a129d4ce88ee4211","typeString":"literal_string \"Unable to pay ethers\""}],"id":262,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"872:7:2","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"872:37:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":266,"nodeType":"ExpressionStatement","src":"872:37:2"}]},"documentation":{"id":226,"nodeType":"StructuredDocumentation","src":"509:93:2","text":"@notice Pay native ethers to a recipient\n @param destination The recipient address"},"functionSelector":"666c6f23","id":268,"implemented":true,"kind":"function","modifiers":[],"name":"payEthers","nameLocation":"616:9:2","nodeType":"FunctionDefinition","parameters":{"id":229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":228,"mutability":"mutable","name":"destination","nameLocation":"642:11:2","nodeType":"VariableDeclaration","scope":268,"src":"626:27:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":227,"name":"address","nodeType":"ElementaryTypeName","src":"626:15:2","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"625:29:2"},"returnParameters":{"id":230,"nodeType":"ParameterList","parameters":[],"src":"670:0:2"},"scope":318,"src":"607:309:2","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":316,"nodeType":"Block","src":"1192:262:2","statements":[{"assignments":[282],"declarations":[{"constant":false,"id":282,"mutability":"mutable","name":"addresses","nameLocation":"1219:9:2","nodeType":"VariableDeclaration","scope":316,"src":"1202:26:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":280,"name":"address","nodeType":"ElementaryTypeName","src":"1202:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":281,"nodeType":"ArrayTypeName","src":"1202:9:2","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":288,"initialValue":{"arguments":[{"hexValue":"31","id":286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1245:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":285,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1231:13:2","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":283,"name":"address","nodeType":"ElementaryTypeName","src":"1235:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":284,"nodeType":"ArrayTypeName","src":"1235:9:2","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":287,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1231:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1202:45:2"},{"expression":{"id":293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":289,"name":"addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":282,"src":"1257:9:2","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":291,"indexExpression":{"hexValue":"30","id":290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1267:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1257:12:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":292,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":271,"src":"1272:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1257:26:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":294,"nodeType":"ExpressionStatement","src":"1257:26:2"},{"expression":{"arguments":[{"id":296,"name":"addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":282,"src":"1310:9:2","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":295,"name":"requireTrustline","nodeType":"Identifier","overloadedDeclarations":[190,206],"referencedDeclaration":190,"src":"1293:16:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory)"}},"id":297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1293:27:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":298,"nodeType":"ExpressionStatement","src":"1293:27:2"},{"assignments":[300],"declarations":[{"constant":false,"id":300,"mutability":"mutable","name":"sent","nameLocation":"1335:4:2","nodeType":"VariableDeclaration","scope":316,"src":"1330:9:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":299,"name":"bool","nodeType":"ElementaryTypeName","src":"1330:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":310,"initialValue":{"arguments":[{"expression":{"id":305,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1369:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1373:6:2","memberName":"sender","nodeType":"MemberAccess","src":"1369:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":307,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":271,"src":"1381:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":308,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":275,"src":"1394:5:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":302,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":273,"src":"1349:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":301,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77,"src":"1342:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$77_$","typeString":"type(contract IERC20)"}},"id":303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1342:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$77","typeString":"contract IERC20"}},"id":304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1356:12:2","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":76,"src":"1342:26:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":309,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1342:58:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"1330:70:2"},{"expression":{"arguments":[{"id":312,"name":"sent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":300,"src":"1418:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"556e61626c6520746f2070617920746f6b656e73","id":313,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1424:22:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_3ada5563b608b4f12ef921b7de8a60eef3445e269146e5af08d99e18136078aa","typeString":"literal_string \"Unable to pay tokens\""},"value":"Unable to pay tokens"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3ada5563b608b4f12ef921b7de8a60eef3445e269146e5af08d99e18136078aa","typeString":"literal_string \"Unable to pay tokens\""}],"id":311,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1410:7:2","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1410:37:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":315,"nodeType":"ExpressionStatement","src":"1410:37:2"}]},"documentation":{"id":269,"nodeType":"StructuredDocumentation","src":"922:186:2","text":"@notice Pay ERC20 tokens to a recipient\n @param destination The recipient address\n @param token The ERC20 token address\n @param value The amount of tokens to pay"},"functionSelector":"2be277aa","id":317,"implemented":true,"kind":"function","modifiers":[],"name":"payTokens","nameLocation":"1122:9:2","nodeType":"FunctionDefinition","parameters":{"id":276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":271,"mutability":"mutable","name":"destination","nameLocation":"1140:11:2","nodeType":"VariableDeclaration","scope":317,"src":"1132:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":270,"name":"address","nodeType":"ElementaryTypeName","src":"1132:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":273,"mutability":"mutable","name":"token","nameLocation":"1161:5:2","nodeType":"VariableDeclaration","scope":317,"src":"1153:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":272,"name":"address","nodeType":"ElementaryTypeName","src":"1153:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":275,"mutability":"mutable","name":"value","nameLocation":"1176:5:2","nodeType":"VariableDeclaration","scope":317,"src":"1168:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":274,"name":"uint256","nodeType":"ElementaryTypeName","src":"1168:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1131:51:2"},"returnParameters":{"id":277,"nodeType":"ParameterList","parameters":[],"src":"1192:0:2"},"scope":318,"src":"1113:341:2","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":319,"src":"389:1067:2","usedErrors":[],"usedEvents":[]}],"src":"32:1425:2"},"id":2},"contracts/interfaces/IValidationEngine.sol":{"ast":{"absolutePath":"contracts/interfaces/IValidationEngine.sol","exportedSymbols":{"IValidationEngine":[411]},"id":412,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":320,"literals":["solidity","^","0.8"],"nodeType":"PragmaDirective","src":"32:21:3"},{"abstract":false,"baseContracts":[],"canonicalName":"IValidationEngine","contractDependencies":[],"contractKind":"interface","documentation":{"id":321,"nodeType":"StructuredDocumentation","src":"55:275:3","text":"@title Trustline's Validation interface\n @author Trustline\n @notice This interface defines the functions that must be implemented by the validation contract\n @dev This interface is used by the Trustlined contract to interact with Trustline's Validation contract"},"fullyImplemented":false,"id":411,"linearizedBaseContracts":[411],"name":"IValidationEngine","nameLocation":"340:17:3","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IValidationEngine.ValidationMode","id":326,"members":[{"id":322,"name":"Dapp","nameLocation":"394:4:3","nodeType":"EnumValue","src":"394:4:3"},{"id":323,"name":"UniswapV4","nameLocation":"408:9:3","nodeType":"EnumValue","src":"408:9:3"},{"id":324,"name":"MorphoV2","nameLocation":"427:8:3","nodeType":"EnumValue","src":"427:8:3"},{"id":325,"name":"ERC3643","nameLocation":"445:7:3","nodeType":"EnumValue","src":"445:7:3"}],"name":"ValidationMode","nameLocation":"369:14:3","nodeType":"EnumDefinition","src":"364:94:3"},{"documentation":{"id":327,"nodeType":"StructuredDocumentation","src":"464:555:3","text":"@notice Checks whether a transaction is trusted and verifies msg.sender + addresses[] against sanctions lists (advanced)\n @dev This call is required only in complex scenarios\n @dev WARNING: Improper use of this call may introduce security vulnerabilities in the calling contract\n @param mode The validation mode\n @param sender The transaction sender\n @param value Transaction value in wei\n @param data Transaction payload data\n @param addresses An array of addresses that will be verified by the policy"},"functionSelector":"1a27f395","id":344,"implemented":false,"kind":"function","modifiers":[],"name":"checkTrustlineStatus","nameLocation":"1033:20:3","nodeType":"FunctionDefinition","parameters":{"id":340,"nodeType":"ParameterList","parameters":[{"constant":false,"id":330,"mutability":"mutable","name":"mode","nameLocation":"1078:4:3","nodeType":"VariableDeclaration","scope":344,"src":"1063:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ValidationMode_$326","typeString":"enum IValidationEngine.ValidationMode"},"typeName":{"id":329,"nodeType":"UserDefinedTypeName","pathNode":{"id":328,"name":"ValidationMode","nameLocations":["1063:14:3"],"nodeType":"IdentifierPath","referencedDeclaration":326,"src":"1063:14:3"},"referencedDeclaration":326,"src":"1063:14:3","typeDescriptions":{"typeIdentifier":"t_enum$_ValidationMode_$326","typeString":"enum IValidationEngine.ValidationMode"}},"visibility":"internal"},{"constant":false,"id":332,"mutability":"mutable","name":"sender","nameLocation":"1100:6:3","nodeType":"VariableDeclaration","scope":344,"src":"1092:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":331,"name":"address","nodeType":"ElementaryTypeName","src":"1092:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":334,"mutability":"mutable","name":"value","nameLocation":"1124:5:3","nodeType":"VariableDeclaration","scope":344,"src":"1116:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":333,"name":"uint256","nodeType":"ElementaryTypeName","src":"1116:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":336,"mutability":"mutable","name":"data","nameLocation":"1154:4:3","nodeType":"VariableDeclaration","scope":344,"src":"1139:19:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":335,"name":"bytes","nodeType":"ElementaryTypeName","src":"1139:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":339,"mutability":"mutable","name":"addresses","nameLocation":"1185:9:3","nodeType":"VariableDeclaration","scope":344,"src":"1168:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":337,"name":"address","nodeType":"ElementaryTypeName","src":"1168:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":338,"nodeType":"ArrayTypeName","src":"1168:9:3","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1053:147:3"},"returnParameters":{"id":343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":342,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":344,"src":"1224:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":341,"name":"bool","nodeType":"ElementaryTypeName","src":"1224:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1223:6:3"},"scope":411,"src":"1024:206:3","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":345,"nodeType":"StructuredDocumentation","src":"1236:332:3","text":"@notice Checks whether a transaction is trusted and verifies msg.sender + addresses[] against sanctions lists\n @param sender The transaction sender\n @param value Transaction value in wei\n @param data Transaction payload data\n @param addresses An array of addresses that will be verified by the policy"},"functionSelector":"8ad79ae3","id":359,"implemented":false,"kind":"function","modifiers":[],"name":"checkTrustlineStatus","nameLocation":"1582:20:3","nodeType":"FunctionDefinition","parameters":{"id":355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":347,"mutability":"mutable","name":"sender","nameLocation":"1620:6:3","nodeType":"VariableDeclaration","scope":359,"src":"1612:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":346,"name":"address","nodeType":"ElementaryTypeName","src":"1612:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":349,"mutability":"mutable","name":"value","nameLocation":"1644:5:3","nodeType":"VariableDeclaration","scope":359,"src":"1636:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":348,"name":"uint256","nodeType":"ElementaryTypeName","src":"1636:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":351,"mutability":"mutable","name":"data","nameLocation":"1674:4:3","nodeType":"VariableDeclaration","scope":359,"src":"1659:19:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":350,"name":"bytes","nodeType":"ElementaryTypeName","src":"1659:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":354,"mutability":"mutable","name":"addresses","nameLocation":"1705:9:3","nodeType":"VariableDeclaration","scope":359,"src":"1688:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":352,"name":"address","nodeType":"ElementaryTypeName","src":"1688:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":353,"nodeType":"ArrayTypeName","src":"1688:9:3","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1602:118:3"},"returnParameters":{"id":358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":357,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":359,"src":"1744:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":356,"name":"bool","nodeType":"ElementaryTypeName","src":"1744:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1743:6:3"},"scope":411,"src":"1573:177:3","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":360,"nodeType":"StructuredDocumentation","src":"1756:235:3","text":"@notice Checks whether a transaction is trusted and verifies msg.sender against sanctions lists\n @param sender The transaction sender\n @param value Transaction value in wei\n @param data Transaction payload data"},"functionSelector":"16128135","id":371,"implemented":false,"kind":"function","modifiers":[],"name":"checkTrustlineStatus","nameLocation":"2005:20:3","nodeType":"FunctionDefinition","parameters":{"id":367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":362,"mutability":"mutable","name":"sender","nameLocation":"2043:6:3","nodeType":"VariableDeclaration","scope":371,"src":"2035:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":361,"name":"address","nodeType":"ElementaryTypeName","src":"2035:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":364,"mutability":"mutable","name":"value","nameLocation":"2067:5:3","nodeType":"VariableDeclaration","scope":371,"src":"2059:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":363,"name":"uint256","nodeType":"ElementaryTypeName","src":"2059:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":366,"mutability":"mutable","name":"data","nameLocation":"2097:4:3","nodeType":"VariableDeclaration","scope":371,"src":"2082:19:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":365,"name":"bytes","nodeType":"ElementaryTypeName","src":"2082:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2025:82:3"},"returnParameters":{"id":370,"nodeType":"ParameterList","parameters":[{"constant":false,"id":369,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":371,"src":"2131:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":368,"name":"bool","nodeType":"ElementaryTypeName","src":"2131:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2130:6:3"},"scope":411,"src":"1996:141:3","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":372,"nodeType":"StructuredDocumentation","src":"2143:530:3","text":"@notice Requires a trusted transaction and non‑sanctioned msg.sender + addresses[] (advanced)\n @dev This call is required only in complex scenarios\n @dev WARNING: Improper use of this call may introduce security vulnerabilities in the calling contract\n @param mode The validation mode\n @param sender The transaction sender\n @param value Transaction value in wei\n @param data Transaction payload data\n @param addresses An array of addresses that will be verified by the policy"},"functionSelector":"ff7c9eff","id":387,"implemented":false,"kind":"function","modifiers":[],"name":"requireTrustline","nameLocation":"2687:16:3","nodeType":"FunctionDefinition","parameters":{"id":385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":375,"mutability":"mutable","name":"mode","nameLocation":"2728:4:3","nodeType":"VariableDeclaration","scope":387,"src":"2713:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ValidationMode_$326","typeString":"enum IValidationEngine.ValidationMode"},"typeName":{"id":374,"nodeType":"UserDefinedTypeName","pathNode":{"id":373,"name":"ValidationMode","nameLocations":["2713:14:3"],"nodeType":"IdentifierPath","referencedDeclaration":326,"src":"2713:14:3"},"referencedDeclaration":326,"src":"2713:14:3","typeDescriptions":{"typeIdentifier":"t_enum$_ValidationMode_$326","typeString":"enum IValidationEngine.ValidationMode"}},"visibility":"internal"},{"constant":false,"id":377,"mutability":"mutable","name":"sender","nameLocation":"2750:6:3","nodeType":"VariableDeclaration","scope":387,"src":"2742:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":376,"name":"address","nodeType":"ElementaryTypeName","src":"2742:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":379,"mutability":"mutable","name":"value","nameLocation":"2774:5:3","nodeType":"VariableDeclaration","scope":387,"src":"2766:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":378,"name":"uint256","nodeType":"ElementaryTypeName","src":"2766:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":381,"mutability":"mutable","name":"data","nameLocation":"2804:4:3","nodeType":"VariableDeclaration","scope":387,"src":"2789:19:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":380,"name":"bytes","nodeType":"ElementaryTypeName","src":"2789:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":384,"mutability":"mutable","name":"addresses","nameLocation":"2835:9:3","nodeType":"VariableDeclaration","scope":387,"src":"2818:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":382,"name":"address","nodeType":"ElementaryTypeName","src":"2818:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":383,"nodeType":"ArrayTypeName","src":"2818:9:3","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2703:147:3"},"returnParameters":{"id":386,"nodeType":"ParameterList","parameters":[],"src":"2859:0:3"},"scope":411,"src":"2678:182:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":388,"nodeType":"StructuredDocumentation","src":"2866:364:3","text":"@notice Requires a trusted transaction and non‑sanctioned msg.sender + addresses[]\n @dev reverts if the transaction is not compliant\n @param sender The transaction sender\n @param value Transaction value in wei\n @param data Transaction payload data\n @param addresses An array of addresses that will be verified by the policy"},"functionSelector":"6cfd0c09","id":400,"implemented":false,"kind":"function","modifiers":[],"name":"requireTrustline","nameLocation":"3244:16:3","nodeType":"FunctionDefinition","parameters":{"id":398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":390,"mutability":"mutable","name":"sender","nameLocation":"3278:6:3","nodeType":"VariableDeclaration","scope":400,"src":"3270:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":389,"name":"address","nodeType":"ElementaryTypeName","src":"3270:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":392,"mutability":"mutable","name":"value","nameLocation":"3302:5:3","nodeType":"VariableDeclaration","scope":400,"src":"3294:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":391,"name":"uint256","nodeType":"ElementaryTypeName","src":"3294:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":394,"mutability":"mutable","name":"data","nameLocation":"3332:4:3","nodeType":"VariableDeclaration","scope":400,"src":"3317:19:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":393,"name":"bytes","nodeType":"ElementaryTypeName","src":"3317:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":397,"mutability":"mutable","name":"addresses","nameLocation":"3363:9:3","nodeType":"VariableDeclaration","scope":400,"src":"3346:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":395,"name":"address","nodeType":"ElementaryTypeName","src":"3346:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":396,"nodeType":"ArrayTypeName","src":"3346:9:3","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3260:118:3"},"returnParameters":{"id":399,"nodeType":"ParameterList","parameters":[],"src":"3387:0:3"},"scope":411,"src":"3235:153:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":401,"nodeType":"StructuredDocumentation","src":"3394:269:3","text":"@notice Requires a trusted transaction and a non‑sanctioned msg.sender\n @dev reverts if the transaction is not compliant\n @param sender The transaction sender\n @param value Transaction value in wei\n @param data Transaction payload data"},"functionSelector":"1b93c32f","id":410,"implemented":false,"kind":"function","modifiers":[],"name":"requireTrustline","nameLocation":"3677:16:3","nodeType":"FunctionDefinition","parameters":{"id":408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":403,"mutability":"mutable","name":"sender","nameLocation":"3711:6:3","nodeType":"VariableDeclaration","scope":410,"src":"3703:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":402,"name":"address","nodeType":"ElementaryTypeName","src":"3703:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":405,"mutability":"mutable","name":"value","nameLocation":"3735:5:3","nodeType":"VariableDeclaration","scope":410,"src":"3727:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":404,"name":"uint256","nodeType":"ElementaryTypeName","src":"3727:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":407,"mutability":"mutable","name":"data","nameLocation":"3765:4:3","nodeType":"VariableDeclaration","scope":410,"src":"3750:19:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":406,"name":"bytes","nodeType":"ElementaryTypeName","src":"3750:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3693:82:3"},"returnParameters":{"id":409,"nodeType":"ParameterList","parameters":[],"src":"3784:0:3"},"scope":411,"src":"3668:117:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":412,"src":"330:3457:3","usedErrors":[],"usedEvents":[]}],"src":"32:3756:3"},"id":3}},"contracts":{"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"IERC20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-20 standard as defined in the ERC.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]}},\"version\":1}"}},"contracts/Trustlined.sol":{"Trustlined":{"abi":[{"inputs":[],"name":"validationEngine","outputs":[{"internalType":"contract IValidationEngine","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"validationEngine()":"7d4f064e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"validationEngine\",\"outputs\":[{\"internalType\":\"contract IValidationEngine\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Trustline\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Both a constructor and initializer functions are defined to support both upgradeable and non-upgradeable deployment scenarios\"}},\"stateVariables\":{\"validationEngine\":{\"details\":\"Multiple dapps can share the same ValidationEngine contractThis contract is set by the owner and must implement the IValidationEngine interface\"}},\"title\":\"Trustline's Base Contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"validationEngine()\":{\"notice\":\"The Trustline ValidationEngine contract address. It must be set before any of the provided functions can be used\"}},\"notice\":\"This library provides functions for verifying the trust status of a transaction\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/Trustlined.sol\":\"Trustlined\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"contracts/Trustlined.sol\":{\"keccak256\":\"0x72aa4c01a175b6fe353d5543c2bc17d0dd8a99709979479ae5485bb9c35ddf81\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8db9e122fe209ec1ea509650d9ecd9e8a531fd5da02913ae5a476f4e52a85d2b\",\"dweb:/ipfs/QmbJAMLsjKmw6af4GCzyEkooDzn1My92gRt4G7tTZi2MyN\"]},\"contracts/interfaces/IValidationEngine.sol\":{\"keccak256\":\"0xabc18c2ce04a797bf6c486d8100ed9d0f2f3002d9ba8c59258a8a32fce895a45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b30e4603cb427d074c73d5af95fb106d804572abb55e25cbf0f5153e3e87282\",\"dweb:/ipfs/QmbPhqBPaMSzdyREoKHJXjZhhY7HtSbqgTv4EpHsA8FL6T\"]}},\"version\":1}"}},"contracts/examples/PaymentFirewall.sol":{"PaymentFirewall":{"abi":[{"inputs":[{"internalType":"address","name":"validationEngine","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address payable","name":"destination","type":"address"}],"name":"payEthers","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"payTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"validationEngine","outputs":[{"internalType":"contract IValidationEngine","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"@_225":{"entryPoint":null,"id":225,"parameterSlots":1,"returnSlots":0},"@_97":{"entryPoint":null,"id":97,"parameterSlots":1,"returnSlots":0},"@__Trustlined_init_107":{"entryPoint":63,"id":107,"parameterSlots":1,"returnSlots":0},"@__Trustlined_init_unchained_132":{"entryPoint":75,"id":132,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":200,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d3814fd4e72cfd7651525eee846049aca388165c613a1085fb56751abcdd36c0__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nativeSrc":"0:654:4","nodeType":"YulBlock","src":"0:654:4","statements":[{"nativeSrc":"6:3:4","nodeType":"YulBlock","src":"6:3:4","statements":[]},{"body":{"nativeSrc":"95:209:4","nodeType":"YulBlock","src":"95:209:4","statements":[{"body":{"nativeSrc":"141:16:4","nodeType":"YulBlock","src":"141:16:4","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"150:1:4","nodeType":"YulLiteral","src":"150:1:4","type":"","value":"0"},{"kind":"number","nativeSrc":"153:1:4","nodeType":"YulLiteral","src":"153:1:4","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"143:6:4","nodeType":"YulIdentifier","src":"143:6:4"},"nativeSrc":"143:12:4","nodeType":"YulFunctionCall","src":"143:12:4"},"nativeSrc":"143:12:4","nodeType":"YulExpressionStatement","src":"143:12:4"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"116:7:4","nodeType":"YulIdentifier","src":"116:7:4"},{"name":"headStart","nativeSrc":"125:9:4","nodeType":"YulIdentifier","src":"125:9:4"}],"functionName":{"name":"sub","nativeSrc":"112:3:4","nodeType":"YulIdentifier","src":"112:3:4"},"nativeSrc":"112:23:4","nodeType":"YulFunctionCall","src":"112:23:4"},{"kind":"number","nativeSrc":"137:2:4","nodeType":"YulLiteral","src":"137:2:4","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"108:3:4","nodeType":"YulIdentifier","src":"108:3:4"},"nativeSrc":"108:32:4","nodeType":"YulFunctionCall","src":"108:32:4"},"nativeSrc":"105:52:4","nodeType":"YulIf","src":"105:52:4"},{"nativeSrc":"166:29:4","nodeType":"YulVariableDeclaration","src":"166:29:4","value":{"arguments":[{"name":"headStart","nativeSrc":"185:9:4","nodeType":"YulIdentifier","src":"185:9:4"}],"functionName":{"name":"mload","nativeSrc":"179:5:4","nodeType":"YulIdentifier","src":"179:5:4"},"nativeSrc":"179:16:4","nodeType":"YulFunctionCall","src":"179:16:4"},"variables":[{"name":"value","nativeSrc":"170:5:4","nodeType":"YulTypedName","src":"170:5:4","type":""}]},{"body":{"nativeSrc":"258:16:4","nodeType":"YulBlock","src":"258:16:4","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"267:1:4","nodeType":"YulLiteral","src":"267:1:4","type":"","value":"0"},{"kind":"number","nativeSrc":"270:1:4","nodeType":"YulLiteral","src":"270:1:4","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"260:6:4","nodeType":"YulIdentifier","src":"260:6:4"},"nativeSrc":"260:12:4","nodeType":"YulFunctionCall","src":"260:12:4"},"nativeSrc":"260:12:4","nodeType":"YulExpressionStatement","src":"260:12:4"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"217:5:4","nodeType":"YulIdentifier","src":"217:5:4"},{"arguments":[{"name":"value","nativeSrc":"228:5:4","nodeType":"YulIdentifier","src":"228:5:4"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"243:3:4","nodeType":"YulLiteral","src":"243:3:4","type":"","value":"160"},{"kind":"number","nativeSrc":"248:1:4","nodeType":"YulLiteral","src":"248:1:4","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"239:3:4","nodeType":"YulIdentifier","src":"239:3:4"},"nativeSrc":"239:11:4","nodeType":"YulFunctionCall","src":"239:11:4"},{"kind":"number","nativeSrc":"252:1:4","nodeType":"YulLiteral","src":"252:1:4","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"235:3:4","nodeType":"YulIdentifier","src":"235:3:4"},"nativeSrc":"235:19:4","nodeType":"YulFunctionCall","src":"235:19:4"}],"functionName":{"name":"and","nativeSrc":"224:3:4","nodeType":"YulIdentifier","src":"224:3:4"},"nativeSrc":"224:31:4","nodeType":"YulFunctionCall","src":"224:31:4"}],"functionName":{"name":"eq","nativeSrc":"214:2:4","nodeType":"YulIdentifier","src":"214:2:4"},"nativeSrc":"214:42:4","nodeType":"YulFunctionCall","src":"214:42:4"}],"functionName":{"name":"iszero","nativeSrc":"207:6:4","nodeType":"YulIdentifier","src":"207:6:4"},"nativeSrc":"207:50:4","nodeType":"YulFunctionCall","src":"207:50:4"},"nativeSrc":"204:70:4","nodeType":"YulIf","src":"204:70:4"},{"nativeSrc":"283:15:4","nodeType":"YulAssignment","src":"283:15:4","value":{"name":"value","nativeSrc":"293:5:4","nodeType":"YulIdentifier","src":"293:5:4"},"variableNames":[{"name":"value0","nativeSrc":"283:6:4","nodeType":"YulIdentifier","src":"283:6:4"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nativeSrc":"14:290:4","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"61:9:4","nodeType":"YulTypedName","src":"61:9:4","type":""},{"name":"dataEnd","nativeSrc":"72:7:4","nodeType":"YulTypedName","src":"72:7:4","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"84:6:4","nodeType":"YulTypedName","src":"84:6:4","type":""}],"src":"14:290:4"},{"body":{"nativeSrc":"483:169:4","nodeType":"YulBlock","src":"483:169:4","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"500:9:4","nodeType":"YulIdentifier","src":"500:9:4"},{"kind":"number","nativeSrc":"511:2:4","nodeType":"YulLiteral","src":"511:2:4","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"493:6:4","nodeType":"YulIdentifier","src":"493:6:4"},"nativeSrc":"493:21:4","nodeType":"YulFunctionCall","src":"493:21:4"},"nativeSrc":"493:21:4","nodeType":"YulExpressionStatement","src":"493:21:4"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"534:9:4","nodeType":"YulIdentifier","src":"534:9:4"},{"kind":"number","nativeSrc":"545:2:4","nodeType":"YulLiteral","src":"545:2:4","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"530:3:4","nodeType":"YulIdentifier","src":"530:3:4"},"nativeSrc":"530:18:4","nodeType":"YulFunctionCall","src":"530:18:4"},{"kind":"number","nativeSrc":"550:2:4","nodeType":"YulLiteral","src":"550:2:4","type":"","value":"19"}],"functionName":{"name":"mstore","nativeSrc":"523:6:4","nodeType":"YulIdentifier","src":"523:6:4"},"nativeSrc":"523:30:4","nodeType":"YulFunctionCall","src":"523:30:4"},"nativeSrc":"523:30:4","nodeType":"YulExpressionStatement","src":"523:30:4"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"573:9:4","nodeType":"YulIdentifier","src":"573:9:4"},{"kind":"number","nativeSrc":"584:2:4","nodeType":"YulLiteral","src":"584:2:4","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"569:3:4","nodeType":"YulIdentifier","src":"569:3:4"},"nativeSrc":"569:18:4","nodeType":"YulFunctionCall","src":"569:18:4"},{"hexValue":"416c726561647920696e697469616c697a6564","kind":"string","nativeSrc":"589:21:4","nodeType":"YulLiteral","src":"589:21:4","type":"","value":"Already initialized"}],"functionName":{"name":"mstore","nativeSrc":"562:6:4","nodeType":"YulIdentifier","src":"562:6:4"},"nativeSrc":"562:49:4","nodeType":"YulFunctionCall","src":"562:49:4"},"nativeSrc":"562:49:4","nodeType":"YulExpressionStatement","src":"562:49:4"},{"nativeSrc":"620:26:4","nodeType":"YulAssignment","src":"620:26:4","value":{"arguments":[{"name":"headStart","nativeSrc":"632:9:4","nodeType":"YulIdentifier","src":"632:9:4"},{"kind":"number","nativeSrc":"643:2:4","nodeType":"YulLiteral","src":"643:2:4","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"628:3:4","nodeType":"YulIdentifier","src":"628:3:4"},"nativeSrc":"628:18:4","nodeType":"YulFunctionCall","src":"628:18:4"},"variableNames":[{"name":"tail","nativeSrc":"620:4:4","nodeType":"YulIdentifier","src":"620:4:4"}]}]},"name":"abi_encode_tuple_t_stringliteral_d3814fd4e72cfd7651525eee846049aca388165c613a1085fb56751abcdd36c0__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"309:343:4","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"460:9:4","nodeType":"YulTypedName","src":"460:9:4","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"474:4:4","nodeType":"YulTypedName","src":"474:4:4","type":""}],"src":"309:343:4"}]},"contents":"{\n { }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_d3814fd4e72cfd7651525eee846049aca388165c613a1085fb56751abcdd36c0__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 19)\n mstore(add(headStart, 64), \"Already initialized\")\n tail := add(headStart, 96)\n }\n}","id":4,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561000f575f5ffd5b506040516106e53803806106e583398101604081905261002e916100c8565b806100388161003f565b50506100f5565b6100488161004b565b50565b5f546001600160a01b0316156100a75760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a656400000000000000000000000000604482015260640160405180910390fd5b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f602082840312156100d8575f5ffd5b81516001600160a01b03811681146100ee575f5ffd5b9392505050565b6105e3806101025f395ff3fe608060405260043610610033575f3560e01c80632be277aa14610037578063666c6f23146100585780637d4f064e1461006b575b5f5ffd5b348015610042575f5ffd5b50610056610051366004610436565b6100bf565b005b610056610066366004610474565b61024a565b348015610076575f5ffd5b505f546100969073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6040805160018082528183019092525f916020808301908036833701905050905083815f815181106100f3576100f3610496565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506101368161038c565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8581166024830152604482018490525f91908516906323b872dd906064016020604051808303815f875af11580156101b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d591906104c3565b905080610243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e61626c6520746f2070617920746f6b656e7300000000000000000000000060448201526064015b60405180910390fd5b5050505050565b6040805160018082528183019092525f916020808301908036833701905050905081815f8151811061027e5761027e610496565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506102c18161038c565b5f8273ffffffffffffffffffffffffffffffffffffffff16346040515f6040518083038185875af1925050503d805f8114610317576040519150601f19603f3d011682016040523d82523d5f602084013e61031c565b606091505b5050905080610387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e61626c6520746f2070617920657468657273000000000000000000000000604482015260640161023a565b505050565b5f80546040517f6cfd0c0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911691636cfd0c09916103e9913391349190369088906004016104e2565b5f604051808303815f87803b158015610400575f5ffd5b505af1158015610243573d5f5f3e3d5ffd5b73ffffffffffffffffffffffffffffffffffffffff81168114610433575f5ffd5b50565b5f5f5f60608486031215610448575f5ffd5b833561045381610412565b9250602084013561046381610412565b929592945050506040919091013590565b5f60208284031215610484575f5ffd5b813561048f81610412565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f602082840312156104d3575f5ffd5b8151801515811461048f575f5ffd5b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260806040820152826080820152828460a08301375f60a084830181018290527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011683018381038201606085015284519181018290526020850191839160c001905b8083101561059f5773ffffffffffffffffffffffffffffffffffffffff8451168252602082019150602084019350600183019250610566565b50999850505050505050505056fea26469706673582212207239e00c7cc2793b19c1cc42645fab24a2c2f4c1b587a1e6f1cdb52b7ee3679564736f6c634300081c0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x6E5 CODESIZE SUB DUP1 PUSH2 0x6E5 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2E SWAP2 PUSH2 0xC8 JUMP JUMPDEST DUP1 PUSH2 0x38 DUP2 PUSH2 0x3F JUMP JUMPDEST POP POP PUSH2 0xF5 JUMP JUMPDEST PUSH2 0x48 DUP2 PUSH2 0x4B JUMP JUMPDEST POP JUMP JUMPDEST PUSH0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0xA7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416C726561647920696E697469616C697A656400000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD8 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xEE JUMPI PUSH0 PUSH0 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x5E3 DUP1 PUSH2 0x102 PUSH0 CODECOPY PUSH0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x33 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2BE277AA EQ PUSH2 0x37 JUMPI DUP1 PUSH4 0x666C6F23 EQ PUSH2 0x58 JUMPI DUP1 PUSH4 0x7D4F064E EQ PUSH2 0x6B JUMPI JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH2 0x56 PUSH2 0x51 CALLDATASIZE PUSH1 0x4 PUSH2 0x436 JUMP JUMPDEST PUSH2 0xBF JUMP JUMPDEST STOP JUMPDEST PUSH2 0x56 PUSH2 0x66 CALLDATASIZE PUSH1 0x4 PUSH2 0x474 JUMP JUMPDEST PUSH2 0x24A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x76 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH0 SLOAD PUSH2 0x96 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH0 SWAP2 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 DUP2 PUSH0 DUP2 MLOAD DUP2 LT PUSH2 0xF3 JUMPI PUSH2 0xF3 PUSH2 0x496 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH2 0x136 DUP2 PUSH2 0x38C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP5 SWAP1 MSTORE PUSH0 SWAP2 SWAP1 DUP6 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1B1 JUMPI RETURNDATASIZE PUSH0 PUSH0 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D5 SWAP2 SWAP1 PUSH2 0x4C3 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x243 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E61626C6520746F2070617920746F6B656E73000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH0 SWAP2 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP2 DUP2 PUSH0 DUP2 MLOAD DUP2 LT PUSH2 0x27E JUMPI PUSH2 0x27E PUSH2 0x496 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH2 0x2C1 DUP2 PUSH2 0x38C JUMP JUMPDEST PUSH0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLVALUE PUSH1 0x40 MLOAD PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH0 DUP2 EQ PUSH2 0x317 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x31C JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x387 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E61626C6520746F2070617920657468657273000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x23A JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x6CFD0C0900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 PUSH4 0x6CFD0C09 SWAP2 PUSH2 0x3E9 SWAP2 CALLER SWAP2 CALLVALUE SWAP2 SWAP1 CALLDATASIZE SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x4E2 JUMP JUMPDEST PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x400 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x243 JUMPI RETURNDATASIZE PUSH0 PUSH0 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x433 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 PUSH0 PUSH0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x448 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x453 DUP2 PUSH2 0x412 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x463 DUP2 PUSH2 0x412 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x484 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x48F DUP2 PUSH2 0x412 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4D3 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x48F JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 DUP5 PUSH1 0xA0 DUP4 ADD CALLDATACOPY PUSH0 PUSH1 0xA0 DUP5 DUP4 ADD DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND DUP4 ADD DUP4 DUP2 SUB DUP3 ADD PUSH1 0x60 DUP6 ADD MSTORE DUP5 MLOAD SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x20 DUP6 ADD SWAP2 DUP4 SWAP2 PUSH1 0xC0 ADD SWAP1 JUMPDEST DUP1 DUP4 LT ISZERO PUSH2 0x59F JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 MLOAD AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x1 DUP4 ADD SWAP3 POP PUSH2 0x566 JUMP JUMPDEST POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH19 0x39E00C7CC2793B19C1CC42645FAB24A2C2F4C1 0xB5 DUP8 LOG1 0xE6 CALL 0xCD 0xB5 0x2B PUSH31 0xE3679564736F6C634300081C00330000000000000000000000000000000000 ","sourceMap":"389:1067:2:-:0;;;434:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;483:16;848:36:1;483:16:2;848:17:1;:36::i;:::-;799:92;434:69:2;389:1067;;897:114:1;964:40;992:11;964:27;:40::i;:::-;897:114;:::o;1017:226::-;1145:1;1116:16;-1:-1:-1;;;;;1116:16:1;1108:39;1100:71;;;;-1:-1:-1;;;1100:71:1;;511:2:4;1100:71:1;;;493:21:4;550:2;530:18;;;523:30;589:21;569:18;;;562:49;628:18;;1100:71:1;;;;;;;;1181:16;:55;;-1:-1:-1;;;;;;1181:55:1;-1:-1:-1;;;;;1181:55:1;;;;;;;;;;1017:226::o;14:290:4:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:4;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:4:o;309:343::-;389:1067:2;;;;;;"},"deployedBytecode":{"functionDebugData":{"@payEthers_268":{"entryPoint":586,"id":268,"parameterSlots":1,"returnSlots":0},"@payTokens_317":{"entryPoint":191,"id":317,"parameterSlots":3,"returnSlots":0},"@requireTrustline_190":{"entryPoint":908,"id":190,"parameterSlots":1,"returnSlots":0},"@validationEngine_86":{"entryPoint":null,"id":86,"parameterSlots":0,"returnSlots":0},"abi_decode_tuple_t_address_payable":{"entryPoint":1140,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":1078,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":1219,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_bytes_calldata_ptr_t_array$_t_address_$dyn_memory_ptr__to_t_address_t_uint256_t_bytes_memory_ptr_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":1250,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_contract$_IValidationEngine_$411__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3ada5563b608b4f12ef921b7de8a60eef3445e269146e5af08d99e18136078aa__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c056992782810757ac218a0ddf8c5ba73b3c93859b191993a129d4ce88ee4211__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x32":{"entryPoint":1174,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":1042,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:4371:4","nodeType":"YulBlock","src":"0:4371:4","statements":[{"nativeSrc":"6:3:4","nodeType":"YulBlock","src":"6:3:4","statements":[]},{"body":{"nativeSrc":"59:109:4","nodeType":"YulBlock","src":"59:109:4","statements":[{"body":{"nativeSrc":"146:16:4","nodeType":"YulBlock","src":"146:16:4","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"155:1:4","nodeType":"YulLiteral","src":"155:1:4","type":"","value":"0"},{"kind":"number","nativeSrc":"158:1:4","nodeType":"YulLiteral","src":"158:1:4","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"148:6:4","nodeType":"YulIdentifier","src":"148:6:4"},"nativeSrc":"148:12:4","nodeType":"YulFunctionCall","src":"148:12:4"},"nativeSrc":"148:12:4","nodeType":"YulExpressionStatement","src":"148:12:4"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"82:5:4","nodeType":"YulIdentifier","src":"82:5:4"},{"arguments":[{"name":"value","nativeSrc":"93:5:4","nodeType":"YulIdentifier","src":"93:5:4"},{"kind":"number","nativeSrc":"100:42:4","nodeType":"YulLiteral","src":"100:42:4","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"89:3:4","nodeType":"YulIdentifier","src":"89:3:4"},"nativeSrc":"89:54:4","nodeType":"YulFunctionCall","src":"89:54:4"}],"functionName":{"name":"eq","nativeSrc":"79:2:4","nodeType":"YulIdentifier","src":"79:2:4"},"nativeSrc":"79:65:4","nodeType":"YulFunctionCall","src":"79:65:4"}],"functionName":{"name":"iszero","nativeSrc":"72:6:4","nodeType":"YulIdentifier","src":"72:6:4"},"nativeSrc":"72:73:4","nodeType":"YulFunctionCall","src":"72:73:4"},"nativeSrc":"69:93:4","nodeType":"YulIf","src":"69:93:4"}]},"name":"validator_revert_address","nativeSrc":"14:154:4","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"48:5:4","nodeType":"YulTypedName","src":"48:5:4","type":""}],"src":"14:154:4"},{"body":{"nativeSrc":"277:352:4","nodeType":"YulBlock","src":"277:352:4","statements":[{"body":{"nativeSrc":"323:16:4","nodeType":"YulBlock","src":"323:16:4","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"332:1:4","nodeType":"YulLiteral","src":"332:1:4","type":"","value":"0"},{"kind":"number","nativeSrc":"335:1:4","nodeType":"YulLiteral","src":"335:1:4","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"325:6:4","nodeType":"YulIdentifier","src":"325:6:4"},"nativeSrc":"325:12:4","nodeType":"YulFunctionCall","src":"325:12:4"},"nativeSrc":"325:12:4","nodeType":"YulExpressionStatement","src":"325:12:4"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"298:7:4","nodeType":"YulIdentifier","src":"298:7:4"},{"name":"headStart","nativeSrc":"307:9:4","nodeType":"YulIdentifier","src":"307:9:4"}],"functionName":{"name":"sub","nativeSrc":"294:3:4","nodeType":"YulIdentifier","src":"294:3:4"},"nativeSrc":"294:23:4","nodeType":"YulFunctionCall","src":"294:23:4"},{"kind":"number","nativeSrc":"319:2:4","nodeType":"YulLiteral","src":"319:2:4","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"290:3:4","nodeType":"YulIdentifier","src":"290:3:4"},"nativeSrc":"290:32:4","nodeType":"YulFunctionCall","src":"290:32:4"},"nativeSrc":"287:52:4","nodeType":"YulIf","src":"287:52:4"},{"nativeSrc":"348:36:4","nodeType":"YulVariableDeclaration","src":"348:36:4","value":{"arguments":[{"name":"headStart","nativeSrc":"374:9:4","nodeType":"YulIdentifier","src":"374:9:4"}],"functionName":{"name":"calldataload","nativeSrc":"361:12:4","nodeType":"YulIdentifier","src":"361:12:4"},"nativeSrc":"361:23:4","nodeType":"YulFunctionCall","src":"361:23:4"},"variables":[{"name":"value","nativeSrc":"352:5:4","nodeType":"YulTypedName","src":"352:5:4","type":""}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"418:5:4","nodeType":"YulIdentifier","src":"418:5:4"}],"functionName":{"name":"validator_revert_address","nativeSrc":"393:24:4","nodeType":"YulIdentifier","src":"393:24:4"},"nativeSrc":"393:31:4","nodeType":"YulFunctionCall","src":"393:31:4"},"nativeSrc":"393:31:4","nodeType":"YulExpressionStatement","src":"393:31:4"},{"nativeSrc":"433:15:4","nodeType":"YulAssignment","src":"433:15:4","value":{"name":"value","nativeSrc":"443:5:4","nodeType":"YulIdentifier","src":"443:5:4"},"variableNames":[{"name":"value0","nativeSrc":"433:6:4","nodeType":"YulIdentifier","src":"433:6:4"}]},{"nativeSrc":"457:47:4","nodeType":"YulVariableDeclaration","src":"457:47:4","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"489:9:4","nodeType":"YulIdentifier","src":"489:9:4"},{"kind":"number","nativeSrc":"500:2:4","nodeType":"YulLiteral","src":"500:2:4","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"485:3:4","nodeType":"YulIdentifier","src":"485:3:4"},"nativeSrc":"485:18:4","nodeType":"YulFunctionCall","src":"485:18:4"}],"functionName":{"name":"calldataload","nativeSrc":"472:12:4","nodeType":"YulIdentifier","src":"472:12:4"},"nativeSrc":"472:32:4","nodeType":"YulFunctionCall","src":"472:32:4"},"variables":[{"name":"value_1","nativeSrc":"461:7:4","nodeType":"YulTypedName","src":"461:7:4","type":""}]},{"expression":{"arguments":[{"name":"value_1","nativeSrc":"538:7:4","nodeType":"YulIdentifier","src":"538:7:4"}],"functionName":{"name":"validator_revert_address","nativeSrc":"513:24:4","nodeType":"YulIdentifier","src":"513:24:4"},"nativeSrc":"513:33:4","nodeType":"YulFunctionCall","src":"513:33:4"},"nativeSrc":"513:33:4","nodeType":"YulExpressionStatement","src":"513:33:4"},{"nativeSrc":"555:17:4","nodeType":"YulAssignment","src":"555:17:4","value":{"name":"value_1","nativeSrc":"565:7:4","nodeType":"YulIdentifier","src":"565:7:4"},"variableNames":[{"name":"value1","nativeSrc":"555:6:4","nodeType":"YulIdentifier","src":"555:6:4"}]},{"nativeSrc":"581:42:4","nodeType":"YulAssignment","src":"581:42:4","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"608:9:4","nodeType":"YulIdentifier","src":"608:9:4"},{"kind":"number","nativeSrc":"619:2:4","nodeType":"YulLiteral","src":"619:2:4","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"604:3:4","nodeType":"YulIdentifier","src":"604:3:4"},"nativeSrc":"604:18:4","nodeType":"YulFunctionCall","src":"604:18:4"}],"functionName":{"name":"calldataload","nativeSrc":"591:12:4","nodeType":"YulIdentifier","src":"591:12:4"},"nativeSrc":"591:32:4","nodeType":"YulFunctionCall","src":"591:32:4"},"variableNames":[{"name":"value2","nativeSrc":"581:6:4","nodeType":"YulIdentifier","src":"581:6:4"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nativeSrc":"173:456:4","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"227:9:4","nodeType":"YulTypedName","src":"227:9:4","type":""},{"name":"dataEnd","nativeSrc":"238:7:4","nodeType":"YulTypedName","src":"238:7:4","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"250:6:4","nodeType":"YulTypedName","src":"250:6:4","type":""},{"name":"value1","nativeSrc":"258:6:4","nodeType":"YulTypedName","src":"258:6:4","type":""},{"name":"value2","nativeSrc":"266:6:4","nodeType":"YulTypedName","src":"266:6:4","type":""}],"src":"173:456:4"},{"body":{"nativeSrc":"712:177:4","nodeType":"YulBlock","src":"712:177:4","statements":[{"body":{"nativeSrc":"758:16:4","nodeType":"YulBlock","src":"758:16:4","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"767:1:4","nodeType":"YulLiteral","src":"767:1:4","type":"","value":"0"},{"kind":"number","nativeSrc":"770:1:4","nodeType":"YulLiteral","src":"770:1:4","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"760:6:4","nodeType":"YulIdentifier","src":"760:6:4"},"nativeSrc":"760:12:4","nodeType":"YulFunctionCall","src":"760:12:4"},"nativeSrc":"760:12:4","nodeType":"YulExpressionStatement","src":"760:12:4"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"733:7:4","nodeType":"YulIdentifier","src":"733:7:4"},{"name":"headStart","nativeSrc":"742:9:4","nodeType":"YulIdentifier","src":"742:9:4"}],"functionName":{"name":"sub","nativeSrc":"729:3:4","nodeType":"YulIdentifier","src":"729:3:4"},"nativeSrc":"729:23:4","nodeType":"YulFunctionCall","src":"729:23:4"},{"kind":"number","nativeSrc":"754:2:4","nodeType":"YulLiteral","src":"754:2:4","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"725:3:4","nodeType":"YulIdentifier","src":"725:3:4"},"nativeSrc":"725:32:4","nodeType":"YulFunctionCall","src":"725:32:4"},"nativeSrc":"722:52:4","nodeType":"YulIf","src":"722:52:4"},{"nativeSrc":"783:36:4","nodeType":"YulVariableDeclaration","src":"783:36:4","value":{"arguments":[{"name":"headStart","nativeSrc":"809:9:4","nodeType":"YulIdentifier","src":"809:9:4"}],"functionName":{"name":"calldataload","nativeSrc":"796:12:4","nodeType":"YulIdentifier","src":"796:12:4"},"nativeSrc":"796:23:4","nodeType":"YulFunctionCall","src":"796:23:4"},"variables":[{"name":"value","nativeSrc":"787:5:4","nodeType":"YulTypedName","src":"787:5:4","type":""}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"853:5:4","nodeType":"YulIdentifier","src":"853:5:4"}],"functionName":{"name":"validator_revert_address","nativeSrc":"828:24:4","nodeType":"YulIdentifier","src":"828:24:4"},"nativeSrc":"828:31:4","nodeType":"YulFunctionCall","src":"828:31:4"},"nativeSrc":"828:31:4","nodeType":"YulExpressionStatement","src":"828:31:4"},{"nativeSrc":"868:15:4","nodeType":"YulAssignment","src":"868:15:4","value":{"name":"value","nativeSrc":"878:5:4","nodeType":"YulIdentifier","src":"878:5:4"},"variableNames":[{"name":"value0","nativeSrc":"868:6:4","nodeType":"YulIdentifier","src":"868:6:4"}]}]},"name":"abi_decode_tuple_t_address_payable","nativeSrc":"634:255:4","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"678:9:4","nodeType":"YulTypedName","src":"678:9:4","type":""},{"name":"dataEnd","nativeSrc":"689:7:4","nodeType":"YulTypedName","src":"689:7:4","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"701:6:4","nodeType":"YulTypedName","src":"701:6:4","type":""}],"src":"634:255:4"},{"body":{"nativeSrc":"1020:125:4","nodeType":"YulBlock","src":"1020:125:4","statements":[{"nativeSrc":"1030:26:4","nodeType":"YulAssignment","src":"1030:26:4","value":{"arguments":[{"name":"headStart","nativeSrc":"1042:9:4","nodeType":"YulIdentifier","src":"1042:9:4"},{"kind":"number","nativeSrc":"1053:2:4","nodeType":"YulLiteral","src":"1053:2:4","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1038:3:4","nodeType":"YulIdentifier","src":"1038:3:4"},"nativeSrc":"1038:18:4","nodeType":"YulFunctionCall","src":"1038:18:4"},"variableNames":[{"name":"tail","nativeSrc":"1030:4:4","nodeType":"YulIdentifier","src":"1030:4:4"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"1072:9:4","nodeType":"YulIdentifier","src":"1072:9:4"},{"arguments":[{"name":"value0","nativeSrc":"1087:6:4","nodeType":"YulIdentifier","src":"1087:6:4"},{"kind":"number","nativeSrc":"1095:42:4","nodeType":"YulLiteral","src":"1095:42:4","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"1083:3:4","nodeType":"YulIdentifier","src":"1083:3:4"},"nativeSrc":"1083:55:4","nodeType":"YulFunctionCall","src":"1083:55:4"}],"functionName":{"name":"mstore","nativeSrc":"1065:6:4","nodeType":"YulIdentifier","src":"1065:6:4"},"nativeSrc":"1065:74:4","nodeType":"YulFunctionCall","src":"1065:74:4"},"nativeSrc":"1065:74:4","nodeType":"YulExpressionStatement","src":"1065:74:4"}]},"name":"abi_encode_tuple_t_contract$_IValidationEngine_$411__to_t_address__fromStack_reversed","nativeSrc":"894:251:4","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"989:9:4","nodeType":"YulTypedName","src":"989:9:4","type":""},{"name":"value0","nativeSrc":"1000:6:4","nodeType":"YulTypedName","src":"1000:6:4","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1011:4:4","nodeType":"YulTypedName","src":"1011:4:4","type":""}],"src":"894:251:4"},{"body":{"nativeSrc":"1182:152:4","nodeType":"YulBlock","src":"1182:152:4","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1199:1:4","nodeType":"YulLiteral","src":"1199:1:4","type":"","value":"0"},{"kind":"number","nativeSrc":"1202:77:4","nodeType":"YulLiteral","src":"1202:77:4","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"1192:6:4","nodeType":"YulIdentifier","src":"1192:6:4"},"nativeSrc":"1192:88:4","nodeType":"YulFunctionCall","src":"1192:88:4"},"nativeSrc":"1192:88:4","nodeType":"YulExpressionStatement","src":"1192:88:4"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1296:1:4","nodeType":"YulLiteral","src":"1296:1:4","type":"","value":"4"},{"kind":"number","nativeSrc":"1299:4:4","nodeType":"YulLiteral","src":"1299:4:4","type":"","value":"0x41"}],"functionName":{"name":"mstore","nativeSrc":"1289:6:4","nodeType":"YulIdentifier","src":"1289:6:4"},"nativeSrc":"1289:15:4","nodeType":"YulFunctionCall","src":"1289:15:4"},"nativeSrc":"1289:15:4","nodeType":"YulExpressionStatement","src":"1289:15:4"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1320:1:4","nodeType":"YulLiteral","src":"1320:1:4","type":"","value":"0"},{"kind":"number","nativeSrc":"1323:4:4","nodeType":"YulLiteral","src":"1323:4:4","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"1313:6:4","nodeType":"YulIdentifier","src":"1313:6:4"},"nativeSrc":"1313:15:4","nodeType":"YulFunctionCall","src":"1313:15:4"},"nativeSrc":"1313:15:4","nodeType":"YulExpressionStatement","src":"1313:15:4"}]},"name":"panic_error_0x41","nativeSrc":"1150:184:4","nodeType":"YulFunctionDefinition","src":"1150:184:4"},{"body":{"nativeSrc":"1371:152:4","nodeType":"YulBlock","src":"1371:152:4","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1388:1:4","nodeType":"YulLiteral","src":"1388:1:4","type":"","value":"0"},{"kind":"number","nativeSrc":"1391:77:4","nodeType":"YulLiteral","src":"1391:77:4","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nativeSrc":"1381:6:4","nodeType":"YulIdentifier","src":"1381:6:4"},"nativeSrc":"1381:88:4","nodeType":"YulFunctionCall","src":"1381:88:4"},"nativeSrc":"1381:88:4","nodeType":"YulExpressionStatement","src":"1381:88:4"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1485:1:4","nodeType":"YulLiteral","src":"1485:1:4","type":"","value":"4"},{"kind":"number","nativeSrc":"1488:4:4","nodeType":"YulLiteral","src":"1488:4:4","type":"","value":"0x32"}],"functionName":{"name":"mstore","nativeSrc":"1478:6:4","nodeType":"YulIdentifier","src":"1478:6:4"},"nativeSrc":"1478:15:4","nodeType":"YulFunctionCall","src":"1478:15:4"},"nativeSrc":"1478:15:4","nodeType":"YulExpressionStatement","src":"1478:15:4"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1509:1:4","nodeType":"YulLiteral","src":"1509:1:4","type":"","value":"0"},{"kind":"number","nativeSrc":"1512:4:4","nodeType":"YulLiteral","src":"1512:4:4","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"1502:6:4","nodeType":"YulIdentifier","src":"1502:6:4"},"nativeSrc":"1502:15:4","nodeType":"YulFunctionCall","src":"1502:15:4"},"nativeSrc":"1502:15:4","nodeType":"YulExpressionStatement","src":"1502:15:4"}]},"name":"panic_error_0x32","nativeSrc":"1339:184:4","nodeType":"YulFunctionDefinition","src":"1339:184:4"},{"body":{"nativeSrc":"1685:260:4","nodeType":"YulBlock","src":"1685:260:4","statements":[{"nativeSrc":"1695:26:4","nodeType":"YulAssignment","src":"1695:26:4","value":{"arguments":[{"name":"headStart","nativeSrc":"1707:9:4","nodeType":"YulIdentifier","src":"1707:9:4"},{"kind":"number","nativeSrc":"1718:2:4","nodeType":"YulLiteral","src":"1718:2:4","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"1703:3:4","nodeType":"YulIdentifier","src":"1703:3:4"},"nativeSrc":"1703:18:4","nodeType":"YulFunctionCall","src":"1703:18:4"},"variableNames":[{"name":"tail","nativeSrc":"1695:4:4","nodeType":"YulIdentifier","src":"1695:4:4"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"1737:9:4","nodeType":"YulIdentifier","src":"1737:9:4"},{"arguments":[{"name":"value0","nativeSrc":"1752:6:4","nodeType":"YulIdentifier","src":"1752:6:4"},{"kind":"number","nativeSrc":"1760:42:4","nodeType":"YulLiteral","src":"1760:42:4","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"1748:3:4","nodeType":"YulIdentifier","src":"1748:3:4"},"nativeSrc":"1748:55:4","nodeType":"YulFunctionCall","src":"1748:55:4"}],"functionName":{"name":"mstore","nativeSrc":"1730:6:4","nodeType":"YulIdentifier","src":"1730:6:4"},"nativeSrc":"1730:74:4","nodeType":"YulFunctionCall","src":"1730:74:4"},"nativeSrc":"1730:74:4","nodeType":"YulExpressionStatement","src":"1730:74:4"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1824:9:4","nodeType":"YulIdentifier","src":"1824:9:4"},{"kind":"number","nativeSrc":"1835:2:4","nodeType":"YulLiteral","src":"1835:2:4","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1820:3:4","nodeType":"YulIdentifier","src":"1820:3:4"},"nativeSrc":"1820:18:4","nodeType":"YulFunctionCall","src":"1820:18:4"},{"arguments":[{"name":"value1","nativeSrc":"1844:6:4","nodeType":"YulIdentifier","src":"1844:6:4"},{"kind":"number","nativeSrc":"1852:42:4","nodeType":"YulLiteral","src":"1852:42:4","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"1840:3:4","nodeType":"YulIdentifier","src":"1840:3:4"},"nativeSrc":"1840:55:4","nodeType":"YulFunctionCall","src":"1840:55:4"}],"functionName":{"name":"mstore","nativeSrc":"1813:6:4","nodeType":"YulIdentifier","src":"1813:6:4"},"nativeSrc":"1813:83:4","nodeType":"YulFunctionCall","src":"1813:83:4"},"nativeSrc":"1813:83:4","nodeType":"YulExpressionStatement","src":"1813:83:4"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1916:9:4","nodeType":"YulIdentifier","src":"1916:9:4"},{"kind":"number","nativeSrc":"1927:2:4","nodeType":"YulLiteral","src":"1927:2:4","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"1912:3:4","nodeType":"YulIdentifier","src":"1912:3:4"},"nativeSrc":"1912:18:4","nodeType":"YulFunctionCall","src":"1912:18:4"},{"name":"value2","nativeSrc":"1932:6:4","nodeType":"YulIdentifier","src":"1932:6:4"}],"functionName":{"name":"mstore","nativeSrc":"1905:6:4","nodeType":"YulIdentifier","src":"1905:6:4"},"nativeSrc":"1905:34:4","nodeType":"YulFunctionCall","src":"1905:34:4"},"nativeSrc":"1905:34:4","nodeType":"YulExpressionStatement","src":"1905:34:4"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nativeSrc":"1528:417:4","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1638:9:4","nodeType":"YulTypedName","src":"1638:9:4","type":""},{"name":"value2","nativeSrc":"1649:6:4","nodeType":"YulTypedName","src":"1649:6:4","type":""},{"name":"value1","nativeSrc":"1657:6:4","nodeType":"YulTypedName","src":"1657:6:4","type":""},{"name":"value0","nativeSrc":"1665:6:4","nodeType":"YulTypedName","src":"1665:6:4","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1676:4:4","nodeType":"YulTypedName","src":"1676:4:4","type":""}],"src":"1528:417:4"},{"body":{"nativeSrc":"2028:199:4","nodeType":"YulBlock","src":"2028:199:4","statements":[{"body":{"nativeSrc":"2074:16:4","nodeType":"YulBlock","src":"2074:16:4","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2083:1:4","nodeType":"YulLiteral","src":"2083:1:4","type":"","value":"0"},{"kind":"number","nativeSrc":"2086:1:4","nodeType":"YulLiteral","src":"2086:1:4","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2076:6:4","nodeType":"YulIdentifier","src":"2076:6:4"},"nativeSrc":"2076:12:4","nodeType":"YulFunctionCall","src":"2076:12:4"},"nativeSrc":"2076:12:4","nodeType":"YulExpressionStatement","src":"2076:12:4"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"2049:7:4","nodeType":"YulIdentifier","src":"2049:7:4"},{"name":"headStart","nativeSrc":"2058:9:4","nodeType":"YulIdentifier","src":"2058:9:4"}],"functionName":{"name":"sub","nativeSrc":"2045:3:4","nodeType":"YulIdentifier","src":"2045:3:4"},"nativeSrc":"2045:23:4","nodeType":"YulFunctionCall","src":"2045:23:4"},{"kind":"number","nativeSrc":"2070:2:4","nodeType":"YulLiteral","src":"2070:2:4","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"2041:3:4","nodeType":"YulIdentifier","src":"2041:3:4"},"nativeSrc":"2041:32:4","nodeType":"YulFunctionCall","src":"2041:32:4"},"nativeSrc":"2038:52:4","nodeType":"YulIf","src":"2038:52:4"},{"nativeSrc":"2099:29:4","nodeType":"YulVariableDeclaration","src":"2099:29:4","value":{"arguments":[{"name":"headStart","nativeSrc":"2118:9:4","nodeType":"YulIdentifier","src":"2118:9:4"}],"functionName":{"name":"mload","nativeSrc":"2112:5:4","nodeType":"YulIdentifier","src":"2112:5:4"},"nativeSrc":"2112:16:4","nodeType":"YulFunctionCall","src":"2112:16:4"},"variables":[{"name":"value","nativeSrc":"2103:5:4","nodeType":"YulTypedName","src":"2103:5:4","type":""}]},{"body":{"nativeSrc":"2181:16:4","nodeType":"YulBlock","src":"2181:16:4","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2190:1:4","nodeType":"YulLiteral","src":"2190:1:4","type":"","value":"0"},{"kind":"number","nativeSrc":"2193:1:4","nodeType":"YulLiteral","src":"2193:1:4","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2183:6:4","nodeType":"YulIdentifier","src":"2183:6:4"},"nativeSrc":"2183:12:4","nodeType":"YulFunctionCall","src":"2183:12:4"},"nativeSrc":"2183:12:4","nodeType":"YulExpressionStatement","src":"2183:12:4"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"2150:5:4","nodeType":"YulIdentifier","src":"2150:5:4"},{"arguments":[{"arguments":[{"name":"value","nativeSrc":"2171:5:4","nodeType":"YulIdentifier","src":"2171:5:4"}],"functionName":{"name":"iszero","nativeSrc":"2164:6:4","nodeType":"YulIdentifier","src":"2164:6:4"},"nativeSrc":"2164:13:4","nodeType":"YulFunctionCall","src":"2164:13:4"}],"functionName":{"name":"iszero","nativeSrc":"2157:6:4","nodeType":"YulIdentifier","src":"2157:6:4"},"nativeSrc":"2157:21:4","nodeType":"YulFunctionCall","src":"2157:21:4"}],"functionName":{"name":"eq","nativeSrc":"2147:2:4","nodeType":"YulIdentifier","src":"2147:2:4"},"nativeSrc":"2147:32:4","nodeType":"YulFunctionCall","src":"2147:32:4"}],"functionName":{"name":"iszero","nativeSrc":"2140:6:4","nodeType":"YulIdentifier","src":"2140:6:4"},"nativeSrc":"2140:40:4","nodeType":"YulFunctionCall","src":"2140:40:4"},"nativeSrc":"2137:60:4","nodeType":"YulIf","src":"2137:60:4"},{"nativeSrc":"2206:15:4","nodeType":"YulAssignment","src":"2206:15:4","value":{"name":"value","nativeSrc":"2216:5:4","nodeType":"YulIdentifier","src":"2216:5:4"},"variableNames":[{"name":"value0","nativeSrc":"2206:6:4","nodeType":"YulIdentifier","src":"2206:6:4"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nativeSrc":"1950:277:4","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1994:9:4","nodeType":"YulTypedName","src":"1994:9:4","type":""},{"name":"dataEnd","nativeSrc":"2005:7:4","nodeType":"YulTypedName","src":"2005:7:4","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"2017:6:4","nodeType":"YulTypedName","src":"2017:6:4","type":""}],"src":"1950:277:4"},{"body":{"nativeSrc":"2406:170:4","nodeType":"YulBlock","src":"2406:170:4","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"2423:9:4","nodeType":"YulIdentifier","src":"2423:9:4"},{"kind":"number","nativeSrc":"2434:2:4","nodeType":"YulLiteral","src":"2434:2:4","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"2416:6:4","nodeType":"YulIdentifier","src":"2416:6:4"},"nativeSrc":"2416:21:4","nodeType":"YulFunctionCall","src":"2416:21:4"},"nativeSrc":"2416:21:4","nodeType":"YulExpressionStatement","src":"2416:21:4"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2457:9:4","nodeType":"YulIdentifier","src":"2457:9:4"},{"kind":"number","nativeSrc":"2468:2:4","nodeType":"YulLiteral","src":"2468:2:4","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2453:3:4","nodeType":"YulIdentifier","src":"2453:3:4"},"nativeSrc":"2453:18:4","nodeType":"YulFunctionCall","src":"2453:18:4"},{"kind":"number","nativeSrc":"2473:2:4","nodeType":"YulLiteral","src":"2473:2:4","type":"","value":"20"}],"functionName":{"name":"mstore","nativeSrc":"2446:6:4","nodeType":"YulIdentifier","src":"2446:6:4"},"nativeSrc":"2446:30:4","nodeType":"YulFunctionCall","src":"2446:30:4"},"nativeSrc":"2446:30:4","nodeType":"YulExpressionStatement","src":"2446:30:4"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2496:9:4","nodeType":"YulIdentifier","src":"2496:9:4"},{"kind":"number","nativeSrc":"2507:2:4","nodeType":"YulLiteral","src":"2507:2:4","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"2492:3:4","nodeType":"YulIdentifier","src":"2492:3:4"},"nativeSrc":"2492:18:4","nodeType":"YulFunctionCall","src":"2492:18:4"},{"hexValue":"556e61626c6520746f2070617920746f6b656e73","kind":"string","nativeSrc":"2512:22:4","nodeType":"YulLiteral","src":"2512:22:4","type":"","value":"Unable to pay tokens"}],"functionName":{"name":"mstore","nativeSrc":"2485:6:4","nodeType":"YulIdentifier","src":"2485:6:4"},"nativeSrc":"2485:50:4","nodeType":"YulFunctionCall","src":"2485:50:4"},"nativeSrc":"2485:50:4","nodeType":"YulExpressionStatement","src":"2485:50:4"},{"nativeSrc":"2544:26:4","nodeType":"YulAssignment","src":"2544:26:4","value":{"arguments":[{"name":"headStart","nativeSrc":"2556:9:4","nodeType":"YulIdentifier","src":"2556:9:4"},{"kind":"number","nativeSrc":"2567:2:4","nodeType":"YulLiteral","src":"2567:2:4","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"2552:3:4","nodeType":"YulIdentifier","src":"2552:3:4"},"nativeSrc":"2552:18:4","nodeType":"YulFunctionCall","src":"2552:18:4"},"variableNames":[{"name":"tail","nativeSrc":"2544:4:4","nodeType":"YulIdentifier","src":"2544:4:4"}]}]},"name":"abi_encode_tuple_t_stringliteral_3ada5563b608b4f12ef921b7de8a60eef3445e269146e5af08d99e18136078aa__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"2232:344:4","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2383:9:4","nodeType":"YulTypedName","src":"2383:9:4","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2397:4:4","nodeType":"YulTypedName","src":"2397:4:4","type":""}],"src":"2232:344:4"},{"body":{"nativeSrc":"2772:14:4","nodeType":"YulBlock","src":"2772:14:4","statements":[{"nativeSrc":"2774:10:4","nodeType":"YulAssignment","src":"2774:10:4","value":{"name":"pos","nativeSrc":"2781:3:4","nodeType":"YulIdentifier","src":"2781:3:4"},"variableNames":[{"name":"end","nativeSrc":"2774:3:4","nodeType":"YulIdentifier","src":"2774:3:4"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nativeSrc":"2581:205:4","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"2756:3:4","nodeType":"YulTypedName","src":"2756:3:4","type":""}],"returnVariables":[{"name":"end","nativeSrc":"2764:3:4","nodeType":"YulTypedName","src":"2764:3:4","type":""}],"src":"2581:205:4"},{"body":{"nativeSrc":"2965:170:4","nodeType":"YulBlock","src":"2965:170:4","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"2982:9:4","nodeType":"YulIdentifier","src":"2982:9:4"},{"kind":"number","nativeSrc":"2993:2:4","nodeType":"YulLiteral","src":"2993:2:4","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"2975:6:4","nodeType":"YulIdentifier","src":"2975:6:4"},"nativeSrc":"2975:21:4","nodeType":"YulFunctionCall","src":"2975:21:4"},"nativeSrc":"2975:21:4","nodeType":"YulExpressionStatement","src":"2975:21:4"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3016:9:4","nodeType":"YulIdentifier","src":"3016:9:4"},{"kind":"number","nativeSrc":"3027:2:4","nodeType":"YulLiteral","src":"3027:2:4","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3012:3:4","nodeType":"YulIdentifier","src":"3012:3:4"},"nativeSrc":"3012:18:4","nodeType":"YulFunctionCall","src":"3012:18:4"},{"kind":"number","nativeSrc":"3032:2:4","nodeType":"YulLiteral","src":"3032:2:4","type":"","value":"20"}],"functionName":{"name":"mstore","nativeSrc":"3005:6:4","nodeType":"YulIdentifier","src":"3005:6:4"},"nativeSrc":"3005:30:4","nodeType":"YulFunctionCall","src":"3005:30:4"},"nativeSrc":"3005:30:4","nodeType":"YulExpressionStatement","src":"3005:30:4"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3055:9:4","nodeType":"YulIdentifier","src":"3055:9:4"},{"kind":"number","nativeSrc":"3066:2:4","nodeType":"YulLiteral","src":"3066:2:4","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"3051:3:4","nodeType":"YulIdentifier","src":"3051:3:4"},"nativeSrc":"3051:18:4","nodeType":"YulFunctionCall","src":"3051:18:4"},{"hexValue":"556e61626c6520746f2070617920657468657273","kind":"string","nativeSrc":"3071:22:4","nodeType":"YulLiteral","src":"3071:22:4","type":"","value":"Unable to pay ethers"}],"functionName":{"name":"mstore","nativeSrc":"3044:6:4","nodeType":"YulIdentifier","src":"3044:6:4"},"nativeSrc":"3044:50:4","nodeType":"YulFunctionCall","src":"3044:50:4"},"nativeSrc":"3044:50:4","nodeType":"YulExpressionStatement","src":"3044:50:4"},{"nativeSrc":"3103:26:4","nodeType":"YulAssignment","src":"3103:26:4","value":{"arguments":[{"name":"headStart","nativeSrc":"3115:9:4","nodeType":"YulIdentifier","src":"3115:9:4"},{"kind":"number","nativeSrc":"3126:2:4","nodeType":"YulLiteral","src":"3126:2:4","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"3111:3:4","nodeType":"YulIdentifier","src":"3111:3:4"},"nativeSrc":"3111:18:4","nodeType":"YulFunctionCall","src":"3111:18:4"},"variableNames":[{"name":"tail","nativeSrc":"3103:4:4","nodeType":"YulIdentifier","src":"3103:4:4"}]}]},"name":"abi_encode_tuple_t_stringliteral_c056992782810757ac218a0ddf8c5ba73b3c93859b191993a129d4ce88ee4211__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"2791:344:4","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2942:9:4","nodeType":"YulTypedName","src":"2942:9:4","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2956:4:4","nodeType":"YulTypedName","src":"2956:4:4","type":""}],"src":"2791:344:4"},{"body":{"nativeSrc":"3403:966:4","nodeType":"YulBlock","src":"3403:966:4","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"3420:9:4","nodeType":"YulIdentifier","src":"3420:9:4"},{"arguments":[{"name":"value0","nativeSrc":"3435:6:4","nodeType":"YulIdentifier","src":"3435:6:4"},{"kind":"number","nativeSrc":"3443:42:4","nodeType":"YulLiteral","src":"3443:42:4","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"3431:3:4","nodeType":"YulIdentifier","src":"3431:3:4"},"nativeSrc":"3431:55:4","nodeType":"YulFunctionCall","src":"3431:55:4"}],"functionName":{"name":"mstore","nativeSrc":"3413:6:4","nodeType":"YulIdentifier","src":"3413:6:4"},"nativeSrc":"3413:74:4","nodeType":"YulFunctionCall","src":"3413:74:4"},"nativeSrc":"3413:74:4","nodeType":"YulExpressionStatement","src":"3413:74:4"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3507:9:4","nodeType":"YulIdentifier","src":"3507:9:4"},{"kind":"number","nativeSrc":"3518:2:4","nodeType":"YulLiteral","src":"3518:2:4","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3503:3:4","nodeType":"YulIdentifier","src":"3503:3:4"},"nativeSrc":"3503:18:4","nodeType":"YulFunctionCall","src":"3503:18:4"},{"name":"value1","nativeSrc":"3523:6:4","nodeType":"YulIdentifier","src":"3523:6:4"}],"functionName":{"name":"mstore","nativeSrc":"3496:6:4","nodeType":"YulIdentifier","src":"3496:6:4"},"nativeSrc":"3496:34:4","nodeType":"YulFunctionCall","src":"3496:34:4"},"nativeSrc":"3496:34:4","nodeType":"YulExpressionStatement","src":"3496:34:4"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3550:9:4","nodeType":"YulIdentifier","src":"3550:9:4"},{"kind":"number","nativeSrc":"3561:2:4","nodeType":"YulLiteral","src":"3561:2:4","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"3546:3:4","nodeType":"YulIdentifier","src":"3546:3:4"},"nativeSrc":"3546:18:4","nodeType":"YulFunctionCall","src":"3546:18:4"},{"kind":"number","nativeSrc":"3566:3:4","nodeType":"YulLiteral","src":"3566:3:4","type":"","value":"128"}],"functionName":{"name":"mstore","nativeSrc":"3539:6:4","nodeType":"YulIdentifier","src":"3539:6:4"},"nativeSrc":"3539:31:4","nodeType":"YulFunctionCall","src":"3539:31:4"},"nativeSrc":"3539:31:4","nodeType":"YulExpressionStatement","src":"3539:31:4"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3590:9:4","nodeType":"YulIdentifier","src":"3590:9:4"},{"kind":"number","nativeSrc":"3601:3:4","nodeType":"YulLiteral","src":"3601:3:4","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"3586:3:4","nodeType":"YulIdentifier","src":"3586:3:4"},"nativeSrc":"3586:19:4","nodeType":"YulFunctionCall","src":"3586:19:4"},{"name":"value3","nativeSrc":"3607:6:4","nodeType":"YulIdentifier","src":"3607:6:4"}],"functionName":{"name":"mstore","nativeSrc":"3579:6:4","nodeType":"YulIdentifier","src":"3579:6:4"},"nativeSrc":"3579:35:4","nodeType":"YulFunctionCall","src":"3579:35:4"},"nativeSrc":"3579:35:4","nodeType":"YulExpressionStatement","src":"3579:35:4"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3640:9:4","nodeType":"YulIdentifier","src":"3640:9:4"},{"kind":"number","nativeSrc":"3651:3:4","nodeType":"YulLiteral","src":"3651:3:4","type":"","value":"160"}],"functionName":{"name":"add","nativeSrc":"3636:3:4","nodeType":"YulIdentifier","src":"3636:3:4"},"nativeSrc":"3636:19:4","nodeType":"YulFunctionCall","src":"3636:19:4"},{"name":"value2","nativeSrc":"3657:6:4","nodeType":"YulIdentifier","src":"3657:6:4"},{"name":"value3","nativeSrc":"3665:6:4","nodeType":"YulIdentifier","src":"3665:6:4"}],"functionName":{"name":"calldatacopy","nativeSrc":"3623:12:4","nodeType":"YulIdentifier","src":"3623:12:4"},"nativeSrc":"3623:49:4","nodeType":"YulFunctionCall","src":"3623:49:4"},"nativeSrc":"3623:49:4","nodeType":"YulExpressionStatement","src":"3623:49:4"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3696:9:4","nodeType":"YulIdentifier","src":"3696:9:4"},{"name":"value3","nativeSrc":"3707:6:4","nodeType":"YulIdentifier","src":"3707:6:4"}],"functionName":{"name":"add","nativeSrc":"3692:3:4","nodeType":"YulIdentifier","src":"3692:3:4"},"nativeSrc":"3692:22:4","nodeType":"YulFunctionCall","src":"3692:22:4"},{"kind":"number","nativeSrc":"3716:3:4","nodeType":"YulLiteral","src":"3716:3:4","type":"","value":"160"}],"functionName":{"name":"add","nativeSrc":"3688:3:4","nodeType":"YulIdentifier","src":"3688:3:4"},"nativeSrc":"3688:32:4","nodeType":"YulFunctionCall","src":"3688:32:4"},{"kind":"number","nativeSrc":"3722:1:4","nodeType":"YulLiteral","src":"3722:1:4","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"3681:6:4","nodeType":"YulIdentifier","src":"3681:6:4"},"nativeSrc":"3681:43:4","nodeType":"YulFunctionCall","src":"3681:43:4"},"nativeSrc":"3681:43:4","nodeType":"YulExpressionStatement","src":"3681:43:4"},{"nativeSrc":"3733:114:4","nodeType":"YulVariableDeclaration","src":"3733:114:4","value":{"arguments":[{"name":"headStart","nativeSrc":"3747:9:4","nodeType":"YulIdentifier","src":"3747:9:4"},{"arguments":[{"arguments":[{"name":"value3","nativeSrc":"3766:6:4","nodeType":"YulIdentifier","src":"3766:6:4"},{"kind":"number","nativeSrc":"3774:2:4","nodeType":"YulLiteral","src":"3774:2:4","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"3762:3:4","nodeType":"YulIdentifier","src":"3762:3:4"},"nativeSrc":"3762:15:4","nodeType":"YulFunctionCall","src":"3762:15:4"},{"kind":"number","nativeSrc":"3779:66:4","nodeType":"YulLiteral","src":"3779:66:4","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nativeSrc":"3758:3:4","nodeType":"YulIdentifier","src":"3758:3:4"},"nativeSrc":"3758:88:4","nodeType":"YulFunctionCall","src":"3758:88:4"}],"functionName":{"name":"add","nativeSrc":"3743:3:4","nodeType":"YulIdentifier","src":"3743:3:4"},"nativeSrc":"3743:104:4","nodeType":"YulFunctionCall","src":"3743:104:4"},"variables":[{"name":"_1","nativeSrc":"3737:2:4","nodeType":"YulTypedName","src":"3737:2:4","type":""}]},{"nativeSrc":"3856:23:4","nodeType":"YulVariableDeclaration","src":"3856:23:4","value":{"arguments":[{"name":"_1","nativeSrc":"3871:2:4","nodeType":"YulIdentifier","src":"3871:2:4"},{"kind":"number","nativeSrc":"3875:3:4","nodeType":"YulLiteral","src":"3875:3:4","type":"","value":"160"}],"functionName":{"name":"add","nativeSrc":"3867:3:4","nodeType":"YulIdentifier","src":"3867:3:4"},"nativeSrc":"3867:12:4","nodeType":"YulFunctionCall","src":"3867:12:4"},"variables":[{"name":"end","nativeSrc":"3860:3:4","nodeType":"YulTypedName","src":"3860:3:4","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3899:9:4","nodeType":"YulIdentifier","src":"3899:9:4"},{"kind":"number","nativeSrc":"3910:2:4","nodeType":"YulLiteral","src":"3910:2:4","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"3895:3:4","nodeType":"YulIdentifier","src":"3895:3:4"},"nativeSrc":"3895:18:4","nodeType":"YulFunctionCall","src":"3895:18:4"},{"arguments":[{"arguments":[{"name":"_1","nativeSrc":"3923:2:4","nodeType":"YulIdentifier","src":"3923:2:4"},{"name":"headStart","nativeSrc":"3927:9:4","nodeType":"YulIdentifier","src":"3927:9:4"}],"functionName":{"name":"sub","nativeSrc":"3919:3:4","nodeType":"YulIdentifier","src":"3919:3:4"},"nativeSrc":"3919:18:4","nodeType":"YulFunctionCall","src":"3919:18:4"},{"kind":"number","nativeSrc":"3939:3:4","nodeType":"YulLiteral","src":"3939:3:4","type":"","value":"160"}],"functionName":{"name":"add","nativeSrc":"3915:3:4","nodeType":"YulIdentifier","src":"3915:3:4"},"nativeSrc":"3915:28:4","nodeType":"YulFunctionCall","src":"3915:28:4"}],"functionName":{"name":"mstore","nativeSrc":"3888:6:4","nodeType":"YulIdentifier","src":"3888:6:4"},"nativeSrc":"3888:56:4","nodeType":"YulFunctionCall","src":"3888:56:4"},"nativeSrc":"3888:56:4","nodeType":"YulExpressionStatement","src":"3888:56:4"},{"nativeSrc":"3953:14:4","nodeType":"YulVariableDeclaration","src":"3953:14:4","value":{"name":"end","nativeSrc":"3964:3:4","nodeType":"YulIdentifier","src":"3964:3:4"},"variables":[{"name":"pos","nativeSrc":"3957:3:4","nodeType":"YulTypedName","src":"3957:3:4","type":""}]},{"nativeSrc":"3976:27:4","nodeType":"YulVariableDeclaration","src":"3976:27:4","value":{"arguments":[{"name":"value4","nativeSrc":"3996:6:4","nodeType":"YulIdentifier","src":"3996:6:4"}],"functionName":{"name":"mload","nativeSrc":"3990:5:4","nodeType":"YulIdentifier","src":"3990:5:4"},"nativeSrc":"3990:13:4","nodeType":"YulFunctionCall","src":"3990:13:4"},"variables":[{"name":"length","nativeSrc":"3980:6:4","nodeType":"YulTypedName","src":"3980:6:4","type":""}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"4019:3:4","nodeType":"YulIdentifier","src":"4019:3:4"},{"name":"length","nativeSrc":"4024:6:4","nodeType":"YulIdentifier","src":"4024:6:4"}],"functionName":{"name":"mstore","nativeSrc":"4012:6:4","nodeType":"YulIdentifier","src":"4012:6:4"},"nativeSrc":"4012:19:4","nodeType":"YulFunctionCall","src":"4012:19:4"},"nativeSrc":"4012:19:4","nodeType":"YulExpressionStatement","src":"4012:19:4"},{"nativeSrc":"4040:19:4","nodeType":"YulAssignment","src":"4040:19:4","value":{"arguments":[{"name":"_1","nativeSrc":"4051:2:4","nodeType":"YulIdentifier","src":"4051:2:4"},{"kind":"number","nativeSrc":"4055:3:4","nodeType":"YulLiteral","src":"4055:3:4","type":"","value":"192"}],"functionName":{"name":"add","nativeSrc":"4047:3:4","nodeType":"YulIdentifier","src":"4047:3:4"},"nativeSrc":"4047:12:4","nodeType":"YulFunctionCall","src":"4047:12:4"},"variableNames":[{"name":"pos","nativeSrc":"4040:3:4","nodeType":"YulIdentifier","src":"4040:3:4"}]},{"nativeSrc":"4068:29:4","nodeType":"YulVariableDeclaration","src":"4068:29:4","value":{"arguments":[{"name":"value4","nativeSrc":"4086:6:4","nodeType":"YulIdentifier","src":"4086:6:4"},{"kind":"number","nativeSrc":"4094:2:4","nodeType":"YulLiteral","src":"4094:2:4","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4082:3:4","nodeType":"YulIdentifier","src":"4082:3:4"},"nativeSrc":"4082:15:4","nodeType":"YulFunctionCall","src":"4082:15:4"},"variables":[{"name":"srcPtr","nativeSrc":"4072:6:4","nodeType":"YulTypedName","src":"4072:6:4","type":""}]},{"nativeSrc":"4106:10:4","nodeType":"YulVariableDeclaration","src":"4106:10:4","value":{"kind":"number","nativeSrc":"4115:1:4","nodeType":"YulLiteral","src":"4115:1:4","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"4110:1:4","nodeType":"YulTypedName","src":"4110:1:4","type":""}]},{"body":{"nativeSrc":"4174:169:4","nodeType":"YulBlock","src":"4174:169:4","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"4195:3:4","nodeType":"YulIdentifier","src":"4195:3:4"},{"arguments":[{"arguments":[{"name":"srcPtr","nativeSrc":"4210:6:4","nodeType":"YulIdentifier","src":"4210:6:4"}],"functionName":{"name":"mload","nativeSrc":"4204:5:4","nodeType":"YulIdentifier","src":"4204:5:4"},"nativeSrc":"4204:13:4","nodeType":"YulFunctionCall","src":"4204:13:4"},{"kind":"number","nativeSrc":"4219:42:4","nodeType":"YulLiteral","src":"4219:42:4","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"4200:3:4","nodeType":"YulIdentifier","src":"4200:3:4"},"nativeSrc":"4200:62:4","nodeType":"YulFunctionCall","src":"4200:62:4"}],"functionName":{"name":"mstore","nativeSrc":"4188:6:4","nodeType":"YulIdentifier","src":"4188:6:4"},"nativeSrc":"4188:75:4","nodeType":"YulFunctionCall","src":"4188:75:4"},"nativeSrc":"4188:75:4","nodeType":"YulExpressionStatement","src":"4188:75:4"},{"nativeSrc":"4276:19:4","nodeType":"YulAssignment","src":"4276:19:4","value":{"arguments":[{"name":"pos","nativeSrc":"4287:3:4","nodeType":"YulIdentifier","src":"4287:3:4"},{"kind":"number","nativeSrc":"4292:2:4","nodeType":"YulLiteral","src":"4292:2:4","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4283:3:4","nodeType":"YulIdentifier","src":"4283:3:4"},"nativeSrc":"4283:12:4","nodeType":"YulFunctionCall","src":"4283:12:4"},"variableNames":[{"name":"pos","nativeSrc":"4276:3:4","nodeType":"YulIdentifier","src":"4276:3:4"}]},{"nativeSrc":"4308:25:4","nodeType":"YulAssignment","src":"4308:25:4","value":{"arguments":[{"name":"srcPtr","nativeSrc":"4322:6:4","nodeType":"YulIdentifier","src":"4322:6:4"},{"kind":"number","nativeSrc":"4330:2:4","nodeType":"YulLiteral","src":"4330:2:4","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4318:3:4","nodeType":"YulIdentifier","src":"4318:3:4"},"nativeSrc":"4318:15:4","nodeType":"YulFunctionCall","src":"4318:15:4"},"variableNames":[{"name":"srcPtr","nativeSrc":"4308:6:4","nodeType":"YulIdentifier","src":"4308:6:4"}]}]},"condition":{"arguments":[{"name":"i","nativeSrc":"4136:1:4","nodeType":"YulIdentifier","src":"4136:1:4"},{"name":"length","nativeSrc":"4139:6:4","nodeType":"YulIdentifier","src":"4139:6:4"}],"functionName":{"name":"lt","nativeSrc":"4133:2:4","nodeType":"YulIdentifier","src":"4133:2:4"},"nativeSrc":"4133:13:4","nodeType":"YulFunctionCall","src":"4133:13:4"},"nativeSrc":"4125:218:4","nodeType":"YulForLoop","post":{"nativeSrc":"4147:18:4","nodeType":"YulBlock","src":"4147:18:4","statements":[{"nativeSrc":"4149:14:4","nodeType":"YulAssignment","src":"4149:14:4","value":{"arguments":[{"name":"i","nativeSrc":"4158:1:4","nodeType":"YulIdentifier","src":"4158:1:4"},{"kind":"number","nativeSrc":"4161:1:4","nodeType":"YulLiteral","src":"4161:1:4","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"4154:3:4","nodeType":"YulIdentifier","src":"4154:3:4"},"nativeSrc":"4154:9:4","nodeType":"YulFunctionCall","src":"4154:9:4"},"variableNames":[{"name":"i","nativeSrc":"4149:1:4","nodeType":"YulIdentifier","src":"4149:1:4"}]}]},"pre":{"nativeSrc":"4129:3:4","nodeType":"YulBlock","src":"4129:3:4","statements":[]},"src":"4125:218:4"},{"nativeSrc":"4352:11:4","nodeType":"YulAssignment","src":"4352:11:4","value":{"name":"pos","nativeSrc":"4360:3:4","nodeType":"YulIdentifier","src":"4360:3:4"},"variableNames":[{"name":"tail","nativeSrc":"4352:4:4","nodeType":"YulIdentifier","src":"4352:4:4"}]}]},"name":"abi_encode_tuple_t_address_t_uint256_t_bytes_calldata_ptr_t_array$_t_address_$dyn_memory_ptr__to_t_address_t_uint256_t_bytes_memory_ptr_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nativeSrc":"3140:1229:4","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3340:9:4","nodeType":"YulTypedName","src":"3340:9:4","type":""},{"name":"value4","nativeSrc":"3351:6:4","nodeType":"YulTypedName","src":"3351:6:4","type":""},{"name":"value3","nativeSrc":"3359:6:4","nodeType":"YulTypedName","src":"3359:6:4","type":""},{"name":"value2","nativeSrc":"3367:6:4","nodeType":"YulTypedName","src":"3367:6:4","type":""},{"name":"value1","nativeSrc":"3375:6:4","nodeType":"YulTypedName","src":"3375:6:4","type":""},{"name":"value0","nativeSrc":"3383:6:4","nodeType":"YulTypedName","src":"3383:6:4","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3394:4:4","nodeType":"YulTypedName","src":"3394:4:4","type":""}],"src":"3140:1229:4"}]},"contents":"{\n { }\n function validator_revert_address(value)\n {\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n value2 := calldataload(add(headStart, 64))\n }\n function abi_decode_tuple_t_address_payable(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_tuple_t_contract$_IValidationEngine_$411__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function panic_error_0x41()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function panic_error_0x32()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(headStart, 64), value2)\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_3ada5563b608b4f12ef921b7de8a60eef3445e269146e5af08d99e18136078aa__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 20)\n mstore(add(headStart, 64), \"Unable to pay tokens\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n { end := pos }\n function abi_encode_tuple_t_stringliteral_c056992782810757ac218a0ddf8c5ba73b3c93859b191993a129d4ce88ee4211__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 20)\n mstore(add(headStart, 64), \"Unable to pay ethers\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_address_t_uint256_t_bytes_calldata_ptr_t_array$_t_address_$dyn_memory_ptr__to_t_address_t_uint256_t_bytes_memory_ptr_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n {\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), 128)\n mstore(add(headStart, 128), value3)\n calldatacopy(add(headStart, 160), value2, value3)\n mstore(add(add(headStart, value3), 160), 0)\n let _1 := add(headStart, and(add(value3, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n let end := add(_1, 160)\n mstore(add(headStart, 96), add(sub(_1, headStart), 160))\n let pos := end\n let length := mload(value4)\n mstore(end, length)\n pos := add(_1, 192)\n let srcPtr := add(value4, 32)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n pos := add(pos, 32)\n srcPtr := add(srcPtr, 32)\n }\n tail := pos\n }\n}","id":4,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405260043610610033575f3560e01c80632be277aa14610037578063666c6f23146100585780637d4f064e1461006b575b5f5ffd5b348015610042575f5ffd5b50610056610051366004610436565b6100bf565b005b610056610066366004610474565b61024a565b348015610076575f5ffd5b505f546100969073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6040805160018082528183019092525f916020808301908036833701905050905083815f815181106100f3576100f3610496565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506101368161038c565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8581166024830152604482018490525f91908516906323b872dd906064016020604051808303815f875af11580156101b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d591906104c3565b905080610243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e61626c6520746f2070617920746f6b656e7300000000000000000000000060448201526064015b60405180910390fd5b5050505050565b6040805160018082528183019092525f916020808301908036833701905050905081815f8151811061027e5761027e610496565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506102c18161038c565b5f8273ffffffffffffffffffffffffffffffffffffffff16346040515f6040518083038185875af1925050503d805f8114610317576040519150601f19603f3d011682016040523d82523d5f602084013e61031c565b606091505b5050905080610387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e61626c6520746f2070617920657468657273000000000000000000000000604482015260640161023a565b505050565b5f80546040517f6cfd0c0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911691636cfd0c09916103e9913391349190369088906004016104e2565b5f604051808303815f87803b158015610400575f5ffd5b505af1158015610243573d5f5f3e3d5ffd5b73ffffffffffffffffffffffffffffffffffffffff81168114610433575f5ffd5b50565b5f5f5f60608486031215610448575f5ffd5b833561045381610412565b9250602084013561046381610412565b929592945050506040919091013590565b5f60208284031215610484575f5ffd5b813561048f81610412565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f602082840312156104d3575f5ffd5b8151801515811461048f575f5ffd5b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260806040820152826080820152828460a08301375f60a084830181018290527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011683018381038201606085015284519181018290526020850191839160c001905b8083101561059f5773ffffffffffffffffffffffffffffffffffffffff8451168252602082019150602084019350600183019250610566565b50999850505050505050505056fea26469706673582212207239e00c7cc2793b19c1cc42645fab24a2c2f4c1b587a1e6f1cdb52b7ee3679564736f6c634300081c0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x33 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2BE277AA EQ PUSH2 0x37 JUMPI DUP1 PUSH4 0x666C6F23 EQ PUSH2 0x58 JUMPI DUP1 PUSH4 0x7D4F064E EQ PUSH2 0x6B JUMPI JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH2 0x56 PUSH2 0x51 CALLDATASIZE PUSH1 0x4 PUSH2 0x436 JUMP JUMPDEST PUSH2 0xBF JUMP JUMPDEST STOP JUMPDEST PUSH2 0x56 PUSH2 0x66 CALLDATASIZE PUSH1 0x4 PUSH2 0x474 JUMP JUMPDEST PUSH2 0x24A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x76 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH0 SLOAD PUSH2 0x96 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH0 SWAP2 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 DUP2 PUSH0 DUP2 MLOAD DUP2 LT PUSH2 0xF3 JUMPI PUSH2 0xF3 PUSH2 0x496 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH2 0x136 DUP2 PUSH2 0x38C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP5 SWAP1 MSTORE PUSH0 SWAP2 SWAP1 DUP6 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1B1 JUMPI RETURNDATASIZE PUSH0 PUSH0 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D5 SWAP2 SWAP1 PUSH2 0x4C3 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x243 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E61626C6520746F2070617920746F6B656E73000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH0 SWAP2 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP2 DUP2 PUSH0 DUP2 MLOAD DUP2 LT PUSH2 0x27E JUMPI PUSH2 0x27E PUSH2 0x496 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH2 0x2C1 DUP2 PUSH2 0x38C JUMP JUMPDEST PUSH0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLVALUE PUSH1 0x40 MLOAD PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH0 DUP2 EQ PUSH2 0x317 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x31C JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x387 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E61626C6520746F2070617920657468657273000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x23A JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x6CFD0C0900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 PUSH4 0x6CFD0C09 SWAP2 PUSH2 0x3E9 SWAP2 CALLER SWAP2 CALLVALUE SWAP2 SWAP1 CALLDATASIZE SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x4E2 JUMP JUMPDEST PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x400 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x243 JUMPI RETURNDATASIZE PUSH0 PUSH0 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x433 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 PUSH0 PUSH0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x448 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x453 DUP2 PUSH2 0x412 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x463 DUP2 PUSH2 0x412 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x484 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x48F DUP2 PUSH2 0x412 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4D3 JUMPI PUSH0 PUSH0 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x48F JUMPI PUSH0 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 DUP5 PUSH1 0xA0 DUP4 ADD CALLDATACOPY PUSH0 PUSH1 0xA0 DUP5 DUP4 ADD DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND DUP4 ADD DUP4 DUP2 SUB DUP3 ADD PUSH1 0x60 DUP6 ADD MSTORE DUP5 MLOAD SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x20 DUP6 ADD SWAP2 DUP4 SWAP2 PUSH1 0xC0 ADD SWAP1 JUMPDEST DUP1 DUP4 LT ISZERO PUSH2 0x59F JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 MLOAD AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x1 DUP4 ADD SWAP3 POP PUSH2 0x566 JUMP JUMPDEST POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH19 0x39E00C7CC2793B19C1CC42645FAB24A2C2F4C1 0xB5 DUP8 LOG1 0xE6 CALL 0xCD 0xB5 0x2B PUSH31 0xE3679564736F6C634300081C00330000000000000000000000000000000000 ","sourceMap":"389:1067:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1113:341;;;;;;;;;;-1:-1:-1;1113:341:2;;;;;:::i;:::-;;:::i;:::-;;607:309;;;;;;:::i;:::-;;:::i;612:41:1:-;;;;;;;;;;-1:-1:-1;612:41:1;;;;;;;;;;;1095:42:4;1083:55;;;1065:74;;1053:2;1038:18;612:41:1;;;;;;;1113:341:2;1231:16;;;1245:1;1231:16;;;;;;;;;1202:26;;1231:16;;;;;;;;;;;-1:-1:-1;1231:16:2;1202:45;;1272:11;1257:9;1267:1;1257:12;;;;;;;;:::i;:::-;;;;;;:26;;;;;;;;;;;1293:27;1310:9;1293:16;:27::i;:::-;1342:58;;;;;1369:10;1342:58;;;1730:74:4;1342:26:2;1840:55:4;;;1820:18;;;1813:83;1912:18;;;1905:34;;;1330:9:2;;1342:26;;;;;;1703:18:4;;1342:58:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1330:70;;1418:4;1410:37;;;;;;;2434:2:4;1410:37:2;;;2416:21:4;2473:2;2453:18;;;2446:30;2512:22;2492:18;;;2485:50;2552:18;;1410:37:2;;;;;;;;;1192:262;;1113:341;;;:::o;607:309::-;709:16;;;723:1;709:16;;;;;;;;;680:26;;709:16;;;;;;;;;;;-1:-1:-1;709:16:2;680:45;;750:11;735:9;745:1;735:12;;;;;;;;:::i;:::-;;;;;;:26;;;;;;;;;;;771:27;788:9;771:16;:27::i;:::-;809:9;824:11;:16;;848:9;824:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;808:54;;;880:4;872:37;;;;;;;2993:2:4;872:37:2;;;2975:21:4;3032:2;3012:18;;;3005:30;3071:22;3051:18;;;3044:50;3111:18;;872:37:2;2791:344:4;872:37:2;670:246;;607:309;:::o;2089:157:1:-;2162:16;;;:77;;;;;:16;;;;;:33;;:77;;2196:10;;2208:9;;2162:16;2219:8;;2229:9;;2162:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:154:4;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;69:93;14:154;:::o;173:456::-;250:6;258;266;319:2;307:9;298:7;294:23;290:32;287:52;;;335:1;332;325:12;287:52;374:9;361:23;393:31;418:5;393:31;:::i;:::-;443:5;-1:-1:-1;500:2:4;485:18;;472:32;513:33;472:32;513:33;:::i;:::-;173:456;;565:7;;-1:-1:-1;;;619:2:4;604:18;;;;591:32;;173:456::o;634:255::-;701:6;754:2;742:9;733:7;729:23;725:32;722:52;;;770:1;767;760:12;722:52;809:9;796:23;828:31;853:5;828:31;:::i;:::-;878:5;634:255;-1:-1:-1;;;634:255:4:o;1339:184::-;1391:77;1388:1;1381:88;1488:4;1485:1;1478:15;1512:4;1509:1;1502:15;1950:277;2017:6;2070:2;2058:9;2049:7;2045:23;2041:32;2038:52;;;2086:1;2083;2076:12;2038:52;2118:9;2112:16;2171:5;2164:13;2157:21;2150:5;2147:32;2137:60;;2193:1;2190;2183:12;3140:1229;3443:42;3435:6;3431:55;3420:9;3413:74;3523:6;3518:2;3507:9;3503:18;3496:34;3566:3;3561:2;3550:9;3546:18;3539:31;3607:6;3601:3;3590:9;3586:19;3579:35;3665:6;3657;3651:3;3640:9;3636:19;3623:49;3722:1;3716:3;3692:22;;;3688:32;;3681:43;;;3779:66;3774:2;3762:15;;3758:88;3743:104;;3919:18;;;3915:28;;3910:2;3895:18;;3888:56;3990:13;;3867:12;;;4012:19;;;4094:2;4082:15;;;3722:1;;4055:3;4047:12;;4125:218;4139:6;4136:1;4133:13;4125:218;;;4219:42;4210:6;4204:13;4200:62;4195:3;4188:75;4292:2;4287:3;4283:12;4276:19;;4330:2;4322:6;4318:15;4308:25;;4161:1;4158;4154:9;4149:14;;4125:218;;;-1:-1:-1;4360:3:4;3140:1229;-1:-1:-1;;;;;;;;;3140:1229:4:o"},"methodIdentifiers":{"payEthers(address)":"666c6f23","payTokens(address,address,uint256)":"2be277aa","validationEngine()":"7d4f064e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validationEngine\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"payEthers\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"payTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validationEngine\",\"outputs\":[{\"internalType\":\"contract IValidationEngine\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Trustline\",\"kind\":\"dev\",\"methods\":{\"payEthers(address)\":{\"params\":{\"destination\":\"The recipient address\"}},\"payTokens(address,address,uint256)\":{\"params\":{\"destination\":\"The recipient address\",\"token\":\"The ERC20 token address\",\"value\":\"The amount of tokens to pay\"}}},\"title\":\"PaymentFirewall\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"payEthers(address)\":{\"notice\":\"Pay native ethers to a recipient\"},\"payTokens(address,address,uint256)\":{\"notice\":\"Pay ERC20 tokens to a recipient\"},\"validationEngine()\":{\"notice\":\"The Trustline ValidationEngine contract address. It must be set before any of the provided functions can be used\"}},\"notice\":\"This contract is a firewall ensuring all funds going in and out are compliant\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/examples/PaymentFirewall.sol\":\"PaymentFirewall\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"contracts/Trustlined.sol\":{\"keccak256\":\"0x72aa4c01a175b6fe353d5543c2bc17d0dd8a99709979479ae5485bb9c35ddf81\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8db9e122fe209ec1ea509650d9ecd9e8a531fd5da02913ae5a476f4e52a85d2b\",\"dweb:/ipfs/QmbJAMLsjKmw6af4GCzyEkooDzn1My92gRt4G7tTZi2MyN\"]},\"contracts/examples/PaymentFirewall.sol\":{\"keccak256\":\"0x83f8494d389de6d9415ce65e033be922858dd197550b9049a711e2efa18ef203\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4ec15d102fc28e80ad092495042e32bb5c6d46ff59eea73ae80c4b62d79ec9e\",\"dweb:/ipfs/Qmdvo9jLqaZeEzSGHrHc2HoetBiYDiLr14DbQMzui33BGW\"]},\"contracts/interfaces/IValidationEngine.sol\":{\"keccak256\":\"0xabc18c2ce04a797bf6c486d8100ed9d0f2f3002d9ba8c59258a8a32fce895a45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b30e4603cb427d074c73d5af95fb106d804572abb55e25cbf0f5153e3e87282\",\"dweb:/ipfs/QmbPhqBPaMSzdyREoKHJXjZhhY7HtSbqgTv4EpHsA8FL6T\"]}},\"version\":1}"}},"contracts/interfaces/IValidationEngine.sol":{"IValidationEngine":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"checkTrustlineStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum IValidationEngine.ValidationMode","name":"mode","type":"uint8"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"checkTrustlineStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"checkTrustlineStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"requireTrustline","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"requireTrustline","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum IValidationEngine.ValidationMode","name":"mode","type":"uint8"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"requireTrustline","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"checkTrustlineStatus(address,uint256,bytes)":"16128135","checkTrustlineStatus(address,uint256,bytes,address[])":"8ad79ae3","checkTrustlineStatus(uint8,address,uint256,bytes,address[])":"1a27f395","requireTrustline(address,uint256,bytes)":"1b93c32f","requireTrustline(address,uint256,bytes,address[])":"6cfd0c09","requireTrustline(uint8,address,uint256,bytes,address[])":"ff7c9eff"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"checkTrustlineStatus\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IValidationEngine.ValidationMode\",\"name\":\"mode\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"name\":\"checkTrustlineStatus\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"name\":\"checkTrustlineStatus\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"requireTrustline\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"name\":\"requireTrustline\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IValidationEngine.ValidationMode\",\"name\":\"mode\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"name\":\"requireTrustline\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Trustline\",\"details\":\"This interface is used by the Trustlined contract to interact with Trustline's Validation contract\",\"kind\":\"dev\",\"methods\":{\"checkTrustlineStatus(address,uint256,bytes)\":{\"params\":{\"data\":\"Transaction payload data\",\"sender\":\"The transaction sender\",\"value\":\"Transaction value in wei\"}},\"checkTrustlineStatus(address,uint256,bytes,address[])\":{\"params\":{\"addresses\":\"An array of addresses that will be verified by the policy\",\"data\":\"Transaction payload data\",\"sender\":\"The transaction sender\",\"value\":\"Transaction value in wei\"}},\"checkTrustlineStatus(uint8,address,uint256,bytes,address[])\":{\"details\":\"This call is required only in complex scenariosWARNING: Improper use of this call may introduce security vulnerabilities in the calling contract\",\"params\":{\"addresses\":\"An array of addresses that will be verified by the policy\",\"data\":\"Transaction payload data\",\"mode\":\"The validation mode\",\"sender\":\"The transaction sender\",\"value\":\"Transaction value in wei\"}},\"requireTrustline(address,uint256,bytes)\":{\"details\":\"reverts if the transaction is not compliant\",\"params\":{\"data\":\"Transaction payload data\",\"sender\":\"The transaction sender\",\"value\":\"Transaction value in wei\"}},\"requireTrustline(address,uint256,bytes,address[])\":{\"details\":\"reverts if the transaction is not compliant\",\"params\":{\"addresses\":\"An array of addresses that will be verified by the policy\",\"data\":\"Transaction payload data\",\"sender\":\"The transaction sender\",\"value\":\"Transaction value in wei\"}},\"requireTrustline(uint8,address,uint256,bytes,address[])\":{\"details\":\"This call is required only in complex scenariosWARNING: Improper use of this call may introduce security vulnerabilities in the calling contract\",\"params\":{\"addresses\":\"An array of addresses that will be verified by the policy\",\"data\":\"Transaction payload data\",\"mode\":\"The validation mode\",\"sender\":\"The transaction sender\",\"value\":\"Transaction value in wei\"}}},\"title\":\"Trustline's Validation interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"checkTrustlineStatus(address,uint256,bytes)\":{\"notice\":\"Checks whether a transaction is trusted and verifies msg.sender against sanctions lists\"},\"checkTrustlineStatus(address,uint256,bytes,address[])\":{\"notice\":\"Checks whether a transaction is trusted and verifies msg.sender + addresses[] against sanctions lists\"},\"checkTrustlineStatus(uint8,address,uint256,bytes,address[])\":{\"notice\":\"Checks whether a transaction is trusted and verifies msg.sender + addresses[] against sanctions lists (advanced)\"},\"requireTrustline(address,uint256,bytes)\":{\"notice\":\"Requires a trusted transaction and a non\\u2011sanctioned msg.sender\"},\"requireTrustline(address,uint256,bytes,address[])\":{\"notice\":\"Requires a trusted transaction and non\\u2011sanctioned msg.sender + addresses[]\"},\"requireTrustline(uint8,address,uint256,bytes,address[])\":{\"notice\":\"Requires a trusted transaction and non\\u2011sanctioned msg.sender + addresses[] (advanced)\"}},\"notice\":\"This interface defines the functions that must be implemented by the validation contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IValidationEngine.sol\":\"IValidationEngine\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IValidationEngine.sol\":{\"keccak256\":\"0xabc18c2ce04a797bf6c486d8100ed9d0f2f3002d9ba8c59258a8a32fce895a45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b30e4603cb427d074c73d5af95fb106d804572abb55e25cbf0f5153e3e87282\",\"dweb:/ipfs/QmbPhqBPaMSzdyREoKHJXjZhhY7HtSbqgTv4EpHsA8FL6T\"]}},\"version\":1}"}}}}}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"inputs": [
|
|
8
8
|
{
|
|
9
9
|
"internalType": "address",
|
|
10
|
-
"name": "
|
|
10
|
+
"name": "validationEngine",
|
|
11
11
|
"type": "address"
|
|
12
12
|
}
|
|
13
13
|
],
|
|
@@ -64,8 +64,8 @@
|
|
|
64
64
|
"type": "function"
|
|
65
65
|
}
|
|
66
66
|
],
|
|
67
|
-
"bytecode": "
|
|
68
|
-
"deployedBytecode": "
|
|
67
|
+
"bytecode": "0x608060405234801561000f575f5ffd5b506040516106e53803806106e583398101604081905261002e916100c8565b806100388161003f565b50506100f5565b6100488161004b565b50565b5f546001600160a01b0316156100a75760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a656400000000000000000000000000604482015260640160405180910390fd5b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f602082840312156100d8575f5ffd5b81516001600160a01b03811681146100ee575f5ffd5b9392505050565b6105e3806101025f395ff3fe608060405260043610610033575f3560e01c80632be277aa14610037578063666c6f23146100585780637d4f064e1461006b575b5f5ffd5b348015610042575f5ffd5b50610056610051366004610436565b6100bf565b005b610056610066366004610474565b61024a565b348015610076575f5ffd5b505f546100969073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6040805160018082528183019092525f916020808301908036833701905050905083815f815181106100f3576100f3610496565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506101368161038c565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8581166024830152604482018490525f91908516906323b872dd906064016020604051808303815f875af11580156101b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d591906104c3565b905080610243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e61626c6520746f2070617920746f6b656e7300000000000000000000000060448201526064015b60405180910390fd5b5050505050565b6040805160018082528183019092525f916020808301908036833701905050905081815f8151811061027e5761027e610496565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506102c18161038c565b5f8273ffffffffffffffffffffffffffffffffffffffff16346040515f6040518083038185875af1925050503d805f8114610317576040519150601f19603f3d011682016040523d82523d5f602084013e61031c565b606091505b5050905080610387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e61626c6520746f2070617920657468657273000000000000000000000000604482015260640161023a565b505050565b5f80546040517f6cfd0c0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911691636cfd0c09916103e9913391349190369088906004016104e2565b5f604051808303815f87803b158015610400575f5ffd5b505af1158015610243573d5f5f3e3d5ffd5b73ffffffffffffffffffffffffffffffffffffffff81168114610433575f5ffd5b50565b5f5f5f60608486031215610448575f5ffd5b833561045381610412565b9250602084013561046381610412565b929592945050506040919091013590565b5f60208284031215610484575f5ffd5b813561048f81610412565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f602082840312156104d3575f5ffd5b8151801515811461048f575f5ffd5b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260806040820152826080820152828460a08301375f60a084830181018290527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011683018381038201606085015284519181018290526020850191839160c001905b8083101561059f5773ffffffffffffffffffffffffffffffffffffffff8451168252602082019150602084019350600183019250610566565b50999850505050505050505056fea26469706673582212207239e00c7cc2793b19c1cc42645fab24a2c2f4c1b587a1e6f1cdb52b7ee3679564736f6c634300081c0033",
|
|
68
|
+
"deployedBytecode": "0x608060405260043610610033575f3560e01c80632be277aa14610037578063666c6f23146100585780637d4f064e1461006b575b5f5ffd5b348015610042575f5ffd5b50610056610051366004610436565b6100bf565b005b610056610066366004610474565b61024a565b348015610076575f5ffd5b505f546100969073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6040805160018082528183019092525f916020808301908036833701905050905083815f815181106100f3576100f3610496565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506101368161038c565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8581166024830152604482018490525f91908516906323b872dd906064016020604051808303815f875af11580156101b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d591906104c3565b905080610243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e61626c6520746f2070617920746f6b656e7300000000000000000000000060448201526064015b60405180910390fd5b5050505050565b6040805160018082528183019092525f916020808301908036833701905050905081815f8151811061027e5761027e610496565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506102c18161038c565b5f8273ffffffffffffffffffffffffffffffffffffffff16346040515f6040518083038185875af1925050503d805f8114610317576040519150601f19603f3d011682016040523d82523d5f602084013e61031c565b606091505b5050905080610387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e61626c6520746f2070617920657468657273000000000000000000000000604482015260640161023a565b505050565b5f80546040517f6cfd0c0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911691636cfd0c09916103e9913391349190369088906004016104e2565b5f604051808303815f87803b158015610400575f5ffd5b505af1158015610243573d5f5f3e3d5ffd5b73ffffffffffffffffffffffffffffffffffffffff81168114610433575f5ffd5b50565b5f5f5f60608486031215610448575f5ffd5b833561045381610412565b9250602084013561046381610412565b929592945050506040919091013590565b5f60208284031215610484575f5ffd5b813561048f81610412565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f602082840312156104d3575f5ffd5b8151801515811461048f575f5ffd5b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260806040820152826080820152828460a08301375f60a084830181018290527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011683018381038201606085015284519181018290526020850191839160c001905b8083101561059f5773ffffffffffffffffffffffffffffffffffffffff8451168252602082019150602084019350600183019250610566565b50999850505050505050505056fea26469706673582212207239e00c7cc2793b19c1cc42645fab24a2c2f4c1b587a1e6f1cdb52b7ee3679564736f6c634300081c0033",
|
|
69
69
|
"linkReferences": {},
|
|
70
70
|
"deployedLinkReferences": {}
|
|
71
71
|
}
|
|
@@ -9,14 +9,13 @@ import {Trustlined} from "../Trustlined.sol";
|
|
|
9
9
|
/// @author Trustline
|
|
10
10
|
/// @notice This contract is a firewall ensuring all funds going in and out are compliant
|
|
11
11
|
contract PaymentFirewall is Trustlined {
|
|
12
|
-
constructor(address
|
|
12
|
+
constructor(address validationEngine) Trustlined(validationEngine) {}
|
|
13
13
|
|
|
14
14
|
/// @notice Pay native ethers to a recipient
|
|
15
15
|
/// @param destination The recipient address
|
|
16
16
|
function payEthers(address payable destination) public payable {
|
|
17
|
-
address[] memory addresses = new address[](
|
|
18
|
-
addresses[0] =
|
|
19
|
-
addresses[1] = destination;
|
|
17
|
+
address[] memory addresses = new address[](1);
|
|
18
|
+
addresses[0] = destination;
|
|
20
19
|
requireTrustline(addresses);
|
|
21
20
|
(bool sent, ) = destination.call{value: msg.value}("");
|
|
22
21
|
require(sent, "Unable to pay ethers");
|
|
@@ -27,9 +26,8 @@ contract PaymentFirewall is Trustlined {
|
|
|
27
26
|
/// @param token The ERC20 token address
|
|
28
27
|
/// @param value The amount of tokens to pay
|
|
29
28
|
function payTokens(address destination, address token, uint256 value) external {
|
|
30
|
-
address[] memory addresses = new address[](
|
|
31
|
-
addresses[0] =
|
|
32
|
-
addresses[1] = destination;
|
|
29
|
+
address[] memory addresses = new address[](1);
|
|
30
|
+
addresses[0] = destination;
|
|
33
31
|
requireTrustline(addresses);
|
|
34
32
|
bool sent = IERC20(token).transferFrom(msg.sender, destination, value);
|
|
35
33
|
require(sent, "Unable to pay tokens");
|
|
@@ -8,7 +8,9 @@ pragma solidity ^0.8;
|
|
|
8
8
|
interface IValidationEngine {
|
|
9
9
|
enum ValidationMode {
|
|
10
10
|
Dapp,
|
|
11
|
-
UniswapV4
|
|
11
|
+
UniswapV4,
|
|
12
|
+
MorphoV2,
|
|
13
|
+
ERC3643
|
|
12
14
|
}
|
|
13
15
|
|
|
14
16
|
/// @notice Checks whether a transaction is trusted and verifies msg.sender + addresses[] against sanctions lists (advanced)
|
package/package.json
CHANGED