mirror of
https://github.com/status-im/keycard-redeem.git
synced 2025-02-28 11:50:42 +00:00
remove recipient from Reedem struct
This commit is contained in:
parent
470b00ba9a
commit
7bfa7275e7
@ -22,7 +22,6 @@ contract GiftBucket {
|
|||||||
mapping(address => Gift) public gifts;
|
mapping(address => Gift) public gifts;
|
||||||
|
|
||||||
struct Redeem {
|
struct Redeem {
|
||||||
address recipient;
|
|
||||||
address receiver;
|
address receiver;
|
||||||
bytes32 code;
|
bytes32 code;
|
||||||
}
|
}
|
||||||
@ -30,7 +29,7 @@ contract GiftBucket {
|
|||||||
uint256 public redeemableSupply;
|
uint256 public redeemableSupply;
|
||||||
|
|
||||||
bytes32 constant EIP712DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)");
|
bytes32 constant EIP712DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)");
|
||||||
bytes32 constant REDEEM_TYPEHASH = keccak256("Redeem(address recipient,address receiver,bytes32 code)");
|
bytes32 constant REDEEM_TYPEHASH = keccak256("Redeem(address receiver,bytes32 code)");
|
||||||
bytes32 DOMAIN_SEPARATOR;
|
bytes32 DOMAIN_SEPARATOR;
|
||||||
|
|
||||||
modifier onlyOwner() {
|
modifier onlyOwner() {
|
||||||
@ -102,11 +101,10 @@ contract GiftBucket {
|
|||||||
function redeem(Redeem calldata _redeem, bytes calldata sig) external {
|
function redeem(Redeem calldata _redeem, bytes calldata sig) external {
|
||||||
require(block.timestamp < expirationTime, "expired gift");
|
require(block.timestamp < expirationTime, "expired gift");
|
||||||
|
|
||||||
Gift storage gift = gifts[_redeem.recipient];
|
address recipient = verifySig(_redeem, sig);
|
||||||
require(gift.amount > 0, "not found");
|
|
||||||
|
|
||||||
bool signedByKeycard = verifySig(_redeem, sig);
|
Gift storage gift = gifts[recipient];
|
||||||
require(signedByKeycard, "wrong recipient sig");
|
require(gift.amount > 0, "not found");
|
||||||
|
|
||||||
bytes32 codeHash = keccak256(abi.encodePacked(_redeem.code));
|
bytes32 codeHash = keccak256(abi.encodePacked(_redeem.code));
|
||||||
require(codeHash == gift.code, "invalid code");
|
require(codeHash == gift.code, "invalid code");
|
||||||
@ -132,13 +130,12 @@ contract GiftBucket {
|
|||||||
function hashRedeem(Redeem memory _redeem) internal pure returns (bytes32) {
|
function hashRedeem(Redeem memory _redeem) internal pure returns (bytes32) {
|
||||||
return keccak256(abi.encode(
|
return keccak256(abi.encode(
|
||||||
REDEEM_TYPEHASH,
|
REDEEM_TYPEHASH,
|
||||||
_redeem.recipient,
|
|
||||||
_redeem.receiver,
|
_redeem.receiver,
|
||||||
_redeem.code
|
_redeem.code
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
function verifySig(Redeem memory _redeem, bytes memory sig) internal view returns(bool) {
|
function verifySig(Redeem memory _redeem, bytes memory sig) internal view returns(address) {
|
||||||
require(sig.length == 65, "bad signature length");
|
require(sig.length == 65, "bad signature length");
|
||||||
|
|
||||||
bytes32 r;
|
bytes32 r;
|
||||||
@ -163,6 +160,6 @@ contract GiftBucket {
|
|||||||
hashRedeem(_redeem)
|
hashRedeem(_redeem)
|
||||||
));
|
));
|
||||||
|
|
||||||
return ecrecover(digest, v, r, s) == _redeem.recipient;
|
return ecrecover(digest, v, r, s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,6 @@ async function signRedeem(contractAddress, signer, message) {
|
|||||||
];
|
];
|
||||||
|
|
||||||
let redeem = [
|
let redeem = [
|
||||||
{ name: "recipient", type: "address" },
|
|
||||||
{ name: "receiver", type: "address" },
|
{ name: "receiver", type: "address" },
|
||||||
{ name: "code", type: "bytes32" },
|
{ name: "code", type: "bytes32" },
|
||||||
];
|
];
|
||||||
@ -264,7 +263,6 @@ contract("GiftBucket", function () {
|
|||||||
const amount = parseInt(gift.amount);
|
const amount = parseInt(gift.amount);
|
||||||
|
|
||||||
const message = {
|
const message = {
|
||||||
recipient: recipient,
|
|
||||||
receiver: receiver,
|
receiver: receiver,
|
||||||
code: redeemCode,
|
code: redeemCode,
|
||||||
};
|
};
|
||||||
@ -312,13 +310,13 @@ contract("GiftBucket", function () {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
it("cannot redeem with invalid signature", async function() {
|
it("cannot redeem with invalid recipient", async function() {
|
||||||
await mineAt(NOW);
|
await mineAt(NOW);
|
||||||
try {
|
try {
|
||||||
await testRedeem(user, keycard_1, keycard_2, relayer, REDEEM_CODE);
|
await testRedeem(user, keycard_1, keycard_2, relayer, REDEEM_CODE);
|
||||||
assert.fail("redeem should have failed");
|
assert.fail("redeem should have failed");
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
assert.match(e.message, /wrong recipient sig/);
|
assert.match(e.message, /not found/);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user