OracleSplitEscrow
oraclesplitescrow · conditional-settlement · 1132 B runtime · funds-movement
scores
- usefulness: 72
- safety: 68
- liveness: 78
- authenticity: 88
- extensibility: 42
- bytecodeDiscipline: 92
- practical: 71
source
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
contract OracleSplitEscrow {
address public immutable recipientA;
address public immutable recipientB;
address public immutable verifier;
bool public settled;
constructor(address _recipientA, address _recipientB, address _verifier) {
recipientA = _recipientA;
recipientB = _recipientB;
verifier = _verifier;
}
receive() external payable {}
function settle(bytes calldata data) external {
require(!settled, "already settled");
settled = true;
(bool ok, bytes memory ret) = verifier.staticcall(data);
require(ok && ret.length == 32, "invalid verifier response");
bool releaseToA = abi.decode(ret, (uint256)) != 0;
address target = releaseToA ? recipientA : recipientB;
(bool sent,) = target.call{value: address(this).balance}("");
require(sent, "transfer failed");
}
}