contract verifiable {

    struct Signature {
        uint8 v;
        bytes32 r;
        bytes32 s;
    }

    /**
     * signatures
     * Used to verify that if the contract is protected
     * By hashworld or other publicly verifiable organizations
     */
    mapping(address => Signature) public signatures;

    /**
     * sign Token
     */
    function sign(uint8 v, bytes32 r, bytes32 s) public {
        signatures[msg.sender] = Signature(v, r, s);
    }

    /**
     * To verify whether a specific signer has signed this contract's address
     * @param signer address to verify
     */
    function verify(address signer) public constant returns(bool) {
        bytes32 hash = keccak256(abi.encodePacked(address(this)));
        Signature storage sig = signatures[signer];
        return ecrecover(hash, sig.v, sig.r, sig.s) == signer;
    }
}
/**
 * The signature mechanism to enhance the credibility of the token.
 * The sign process is asychronous.
 * After the creation of the contract, one who verifies the contract and
 * is willing to guarantee for it can sign the contract address.
 */
function verify(address signer) public constant returns(bool) {
    bytes32 hash = keccak256(abi.encodePacked(address(this)));
    Signature storage sig = signatures[signer];
    return ecrecover(hash, sig.v, sig.r, sig.s) == signer;
}

/**
 * To verify whether a specific signer has signed this contract's address
 * @param signer address to verify
 */