文件 1 的 1:airdrop.sol
pragma solidity ^0.6.6;
contract airdrop {
using Strings for uint256;
mapping(address => uint256) public _airdrop;
address public cSigner = 0x30bEC07DeE8E9c7b3cA6d5f0beeBa9FcC1e17761;
function mint(address token , uint256 _amount,uint8 v, bytes32 r, bytes32 s) public{
require(_airdrop[msg.sender] == 0, "airdrop");
bytes32 digest = sha256(abi.encodePacked(msg.sender, _amount.toString()));
require(ecrecover(digest, v, r, s) == cSigner, "Invalid signer");
_airdrop[msg.sender] = 1;
TransferHelper.safeTransfer(token,msg.sender, _amount*1e18);
}
}
library TransferHelper {
function safeTransfer(
address token,
address to,
uint256 value
) internal {
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
require(
success && (data.length == 0 || abi.decode(data, (bool))),
'TransferHelper::safeTransfer: transfer failed'
);
}
}
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
function toString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
{
"compilationTarget": {
"airdrop.sol": "airdrop"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}