Adapter for ERC-3643 (TransferManager)

contract FairwayTo3643Adapter is ITransferManager3643 {
    IPolicyEngine public policy;
    bytes public ruleFrom;
    bytes public ruleTo;

    constructor(address _policy, bytes memory _ruleFrom, bytes memory _ruleTo) {
        policy = IPolicyEngine(_policy);
        ruleFrom = _ruleFrom;
        ruleTo = _ruleTo;
    }

    function canTransfer(address from, address to, uint256)
        external view
        returns (bool ok, uint256 reason)
    {
        (bool okFrom, uint32 rFrom) = policy.isEligible(from, ruleFrom);
        if (!okFrom) return (false, rFrom);
        (bool okTo, uint32 rTo) = policy.isEligible(to, ruleTo);
        if (!okTo) return (false, rTo);
        return (true, 0);
    }
}

Last updated

Was this helpful?