Address Details
contract

0x926a9E7C1A9cb608b6f3068F3CA3811dDE792b7D

Contract Name
Signatures
Creator
0xe23a4c–2b2dee at 0x2887bd–f4643e
Balance
0 CELO ( )
Locked CELO Balance
0.00 CELO
Voting CELO Balance
0.00 CELO
Pending Unlocked Gold
0.00 CELO
Tokens
Fetching tokens...
Transactions
0 Transactions
Transfers
0 Transfers
Gas Used
Fetching gas used...
Last Balance Update
3626309
Contract name:
Signatures




Optimization enabled
false
Compiler version
v0.5.8+commit.23d335f2




Verified at
2020-04-22T22:51:03.831943Z

Contract source code

pragma solidity ^0.5.3;


library ECDSA {
    
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        
        if (signature.length != 65) {
            return (address(0));
        }

        
        bytes32 r;
        bytes32 s;
        uint8 v;

        
        
        
        assembly {
            r := mload(add(signature, 0x20))
            s := mload(add(signature, 0x40))
            v := byte(0, mload(add(signature, 0x60)))
        }

        
        
        
        
        
        
        
        
        
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return address(0);
        }

        if (v != 27 && v != 28) {
            return address(0);
        }

        
        return ecrecover(hash, v, r, s);
    }

    
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        
        
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }
}

library Signatures {
  
  function getSignerOfAddress(address message, uint8 v, bytes32 r, bytes32 s)
    public
    pure
    returns (address)
  {
    bytes32 hash = keccak256(abi.encodePacked(message));
    return getSignerOfMessageHash(hash, v, r, s);
  }

  
  function getSignerOfMessageHash(bytes32 messageHash, uint8 v, bytes32 r, bytes32 s)
    public
    pure
    returns (address)
  {
    bytes memory signature = new bytes(65);
    
    assembly {
      mstore(add(signature, 32), r)
      mstore(add(signature, 64), s)
      mstore8(add(signature, 96), v)
    }
    bytes32 prefixedHash = ECDSA.toEthSignedMessageHash(messageHash);
    return ECDSA.recover(prefixedHash, signature);
  }
}
        

Contract ABI

[{"type":"function","stateMutability":"pure","payable":false,"outputs":[{"type":"address","name":""}],"name":"getSignerOfAddress","inputs":[{"type":"address","name":"message"},{"type":"uint8","name":"v"},{"type":"bytes32","name":"r"},{"type":"bytes32","name":"s"}],"constant":true},{"type":"function","stateMutability":"pure","payable":false,"outputs":[{"type":"address","name":""}],"name":"getSignerOfMessageHash","inputs":[{"type":"bytes32","name":"messageHash"},{"type":"uint8","name":"v"},{"type":"bytes32","name":"r"},{"type":"bytes32","name":"s"}],"constant":true}]
              

Contract Creation Code

0x6103e3610026600b82828239805160001a60731461001957fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100405760003560e01c806396ef41a114610045578063b3abdb0c146100ea575b600080fd5b6100a86004803603608081101561005b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050610179565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101376004803603608081101561010057600080fd5b8101908080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506101eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008085604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014019150506040516020818303038152906040528051906020012090506101e0818686866101eb565b915050949350505050565b6000606060416040519080825280601f01601f1916602001820160405280156102235781602001600182028038833980820191505090505b50905083602082015282604082015284606082015360006102438761025b565b905061024f81836102b3565b92505050949350505050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600060418251146102c757600090506103b1565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c111561031b57600093505050506103b1565b601b8160ff16141580156103335750601c8160ff1614155b1561034457600093505050506103b1565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156103a1573d6000803e3d6000fd5b5050506020604051035193505050505b9291505056fea165627a7a7230582007494890c8cc39b258586073f9498f533275e0a6c818e30a0f320926f66f23750029

Deployed ByteCode

0x73926a9e7c1a9cb608b6f3068f3ca3811dde792b7d30146080604052600436106100405760003560e01c806396ef41a114610045578063b3abdb0c146100ea575b600080fd5b6100a86004803603608081101561005b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050610179565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101376004803603608081101561010057600080fd5b8101908080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506101eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008085604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014019150506040516020818303038152906040528051906020012090506101e0818686866101eb565b915050949350505050565b6000606060416040519080825280601f01601f1916602001820160405280156102235781602001600182028038833980820191505090505b50905083602082015282604082015284606082015360006102438761025b565b905061024f81836102b3565b92505050949350505050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600060418251146102c757600090506103b1565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c111561031b57600093505050506103b1565b601b8160ff16141580156103335750601c8160ff1614155b1561034457600093505050506103b1565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156103a1573d6000803e3d6000fd5b5050506020604051035193505050505b9291505056fea165627a7a7230582007494890c8cc39b258586073f9498f533275e0a6c818e30a0f320926f66f23750029