zNS - Insufficient protection against replay attacks
There is no dedicated data structure to prevent replay attacks on `StakingController`. `approvedBids` mapping offers only partial mitigation, due to the fact that after a domain bid is fulfilled, the only mechanism in place to prevent a replay attack is the `Registrar` contract that might be replaced in the case where `StakingController` is being re-deployed with a different `Registrar` instance. Additionally, the digital signature used for domain bids does not identify the buyer request uniquely enough. The bidder's signature could be replayed in future similar contracts that are deployed with a different registrar or in a different network.\\n```\\nfunction createBid(\\n  uint256 parentId,\\n  uint256 bidAmount,\\n  string memory bidIPFSHash,\\n  string memory name\\n) public pure returns(bytes32) {\\n  return keccak256(abi.encode(parentId, bidAmount, bidIPFSHash, name));\\n}\\n```\\n
Consider adding a dedicated mapping to store the a unique identifier of a bid, as well as adding `address(this)`, `block.chainId`, `registrar` and `nonce` to the message that is being signed by the bidder.
```\\nfunction createBid(\\n  uint256 parentId,\\n  uint256 bidAmount,\\n  string memory bidIPFSHash,\\n  string memory name\\n) public pure returns(bytes32) {\\n  return keccak256(abi.encode(parentId, bidAmount, bidIPFSHash, name));\\n}\\n```\\n