interface WaifuContract {

    event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);

    // Known functions
    function approve(address _to, uint256 _tokenId) external;
    function buy(uint256) external payable;
    function bid(uint256) external payable;
    function isTransferDisabled(uint256) external view returns (bool);
    function artworkIdToTransferApproved(uint256 _tokenId) external view returns (address);
    function ownerOf(uint256 _tokenId) external view returns (address);
    function transfer(address _to, uint256 _tokenId) external;
    // transferFrom needs send() from the artworkIdToTransferApproved() address, not owner
    function transferFrom(address _from, address _to, uint256 _tokenId) external;
}
function approve(address _to, uint256 _tokenId) external;

// Known functions