Skip to content

Instantly share code, notes, and snippets.

@joeb000
Created December 11, 2021 04:11
Show Gist options
  • Save joeb000/0a8d968ecdba40871f1f94f737dd2aca to your computer and use it in GitHub Desktop.
Save joeb000/0a8d968ecdba40871f1f94f737dd2aca to your computer and use it in GitHub Desktop.
Raw Signed Transaction:
0xf90e81808509502f9000830a0bdc80880de0b6b3a7640000b90e26608060405260405162000dc638038062000dc6833981810160405281019062000029919062000204565b8060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060005b81518160ff16101562000142576001600080848460ff1681518110620000d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080620001399062000318565b91505062000084565b505050620003d0565b6000620001626200015c8462000272565b62000249565b905080838252602082019050828560208602820111156200018257600080fd5b60005b85811015620001b657816200019b8882620001c0565b84526020840193506020830192505060018101905062000185565b5050509392505050565b600081519050620001d181620003b6565b92915050565b600082601f830112620001e957600080fd5b8151620001fb8482602086016200014b565b91505092915050565b6000602082840312156200021757600080fd5b600082015167ffffffffffffffff8111156200023257600080fd5b6200024084828501620001d7565b91505092915050565b60006200025562000268565b9050620002638282620002e2565b919050565b6000604051905090565b600067ffffffffffffffff82111562000290576200028f62000376565b5b602082029050602081019050919050565b6000620002ae82620002b5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060ff82169050919050565b620002ed82620003a5565b810181811067ffffffffffffffff821117156200030f576200030e62000376565b5b80604052505050565b60006200032582620002d5565b915060ff8214156200033c576200033b62000347565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b620003c181620002a1565b8114620003cd57600080fd5b50565b6109e680620003e06000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063c63ff8dd14610046578063d01e2eeb14610062578063d63a8e1114610092575b600080fd5b610060600480360381019061005b91906104ba565b6100c2565b005b61007c60048036038101906100779190610466565b610146565b6040516100899190610632565b60405180910390f35b6100ac60048036038101906100a7919061043d565b610191565b6040516100b9919061064d565b60405180910390f35b60006100ce3383610146565b9050600060e81b8160601b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610139576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610130906106ed565b60405180910390fd5b610142336101b1565b5050565b60006101898261017b8560405160200161016091906105f1565b604051602081830303815290604052805190602001206102bd565b6102ed90919063ffffffff16565b905092915050565b60006020528060005260406000206000915054906101000a900460ff1681565b6000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661023c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610233906106ad565b60405180910390fd5b60004711156102ba578073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506102b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b0906106cd565b60405180910390fd5b5b50565b6000816040516020016102d0919061060c565b604051602081830303815290604052805190602001209050919050565b600080600080604185511461030857600093505050506103ba565b6020850151925060408501519150606085015160001a9050601b8160ff16101561033c57601b81610339919061077f565b90505b601b8160ff16141580156103545750601c8160ff1614155b1561036557600093505050506103ba565b600186828585604051600081526020016040526040516103889493929190610668565b6020604051602081039080840390855afa1580156103aa573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b60006103d36103ce84610732565b61070d565b9050828152602081018484840111156103eb57600080fd5b6103f684828561080b565b509392505050565b60008135905061040d81610999565b92915050565b600082601f83011261042457600080fd5b81356104348482602086016103c0565b91505092915050565b60006020828403121561044f57600080fd5b600061045d848285016103fe565b91505092915050565b6000806040838503121561047957600080fd5b6000610487858286016103fe565b925050602083013567ffffffffffffffff8111156104a457600080fd5b6104b085828601610413565b9150509250929050565b6000602082840312156104cc57600080fd5b600082013567ffffffffffffffff8111156104e657600080fd5b6104f284828501610413565b91505092915050565b610504816107b6565b82525050565b61051b610516826107b6565b61084b565b82525050565b61052a816107c8565b82525050565b610539816107d4565b82525050565b61055061054b826107d4565b61085d565b82525050565b6000610563601c83610774565b915061056e826108f5565b601c82019050919050565b6000610586600283610763565b91506105918261091e565b602082019050919050565b60006105a9601483610763565b91506105b482610947565b602082019050919050565b60006105cc600883610763565b91506105d782610970565b602082019050919050565b6105eb816107fe565b82525050565b60006105fd828461050a565b60148201915081905092915050565b600061061782610556565b9150610623828461053f565b60208201915081905092915050565b600060208201905061064760008301846104fb565b92915050565b60006020820190506106626000830184610521565b92915050565b600060808201905061067d6000830187610530565b61068a60208301866105e2565b6106976040830185610530565b6106a46060830184610530565b95945050505050565b600060208201905081810360008301526106c681610579565b9050919050565b600060208201905081810360008301526106e68161059c565b9050919050565b60006020820190508181036000830152610706816105bf565b9050919050565b6000610717610728565b9050610723828261081a565b919050565b6000604051905090565b600067ffffffffffffffff82111561074d5761074c6108a8565b5b610756826108d7565b9050602081019050919050565b600082825260208201905092915050565b600081905092915050565b600061078a826107fe565b9150610795836107fe565b92508260ff038211156107ab576107aa610879565b5b828201905092915050565b60006107c1826107de565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b610823826108d7565b810181811067ffffffffffffffff82111715610842576108416108a8565b5b80604052505050565b600061085682610867565b9050919050565b6000819050919050565b6000610872826108e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4e6f000000000000000000000000000000000000000000000000000000000000600082015250565b7f436f756c64206e6f742073656e642066756e6473000000000000000000000000600082015250565b7f4e61682064617767000000000000000000000000000000000000000000000000600082015250565b6109a2816107b6565b81146109ad57600080fd5b5056fea2646970667358221220df581b77b99fa7df389fbe86cbb57b1e84bd3fa2bbf2bafca9a8fac49f81064464736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f090ee2332de866f61f57869ad72dab8f0657c5926a0d81a17d412067fa62bd2ceb49d1e97d82ccb6e8cee791b596725729355641409a07b191877e242f907dd8b4d456d0a2217425a0f39d6dd059c6d1a2f749854b2e2
TX Hash: 0x51e7517951f927efdd5547ab1069e7c23c1e610f1de4642f0be049c9dc2a9868
Gas Price: 40 gwei
Code:
contract Robbit is PermissionedBaseChallenge {
using ECDSA for bytes32;
constructor(address[] memory _allowed) payable PermissionedBaseChallenge(_allowed) {}
function claim(bytes memory _signature) public {
address a = getSigner(msg.sender, _signature);
require (bytes3(bytes20(a)) == 0x000000, "Nah dawg");
_mint(msg.sender);
}
function getSigner(address _a, bytes memory _sig) public pure returns (address) {
return (keccak256(abi.encodePacked(_a)).toEthSignedMessageHash()).recover(_sig);
}
}
contract PermissionedBaseChallenge {
mapping(address => bool) public allowed;
constructor(address[] memory _a) payable {
allowed[msg.sender] = true;
for (uint8 i = 0; i < _a.length; i++) {
allowed[_a[i]] = true;
}
}
function _mint(address _a) internal {
require(allowed[_a], "No");
if (address(this).balance > 0) {
require(
payable(_a).send(address(this).balance),
"Could not send funds"
);
}
}
}
library ECDSA {
function recover(bytes32 hash, bytes memory signature)
internal
pure
returns (address)
{
bytes32 r;
bytes32 s;
uint8 v;
if (signature.length != 65) {
return (address(0));
}
assembly {
r := mload(add(signature, 0x20))
s := mload(add(signature, 0x40))
v := byte(0, mload(add(signature, 0x60)))
}
if (v < 27) {
v += 27;
}
if (v != 27 && v != 28) {
return (address(0));
} else {
return ecrecover(hash, v, r, s);
}
}
function toEthSignedMessageHash(bytes32 hash)
internal
pure
returns (bytes32)
{
return keccak256(
abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment