Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ckartik/adds slashing amount #585

Draft
wants to merge 13 commits into
base: main
Choose a base branch
from
130 changes: 63 additions & 67 deletions contracts/contracts/core/PreconfManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,16 @@ contract PreconfManager is
PausableUpgradeable
{
using ECDSA for bytes32;

/// @dev EIP-712 Type Hash for preconfirmation commitment
bytes32 public constant EIP712_COMMITMENT_TYPEHASH =
keccak256(
"OpenedCommitment(string txnHash,string revertingTxHashes,uint256 bidAmt,uint64 blockNumber,uint64 decayStartTimeStamp,uint64 decayEndTimeStamp,bytes32 bidHash,string signature,string sharedSecretKey)"
"OpenedCommitment(string txnHash,string revertingTxHashes,uint256 bidAmt,uint64 blockNumber,uint64 decayStartTimeStamp,uint64 decayEndTimeStamp,uint256 slashAmount,bytes32 bidHash,string signature,string sharedSecretKey)"
);

/// @dev EIP-712 Type Hash for preconfirmation bid
bytes32 public constant EIP712_BID_TYPEHASH =
keccak256(
"PreConfBid(string txnHash,string revertingTxHashes,uint256 bidAmt,uint64 blockNumber,uint64 decayStartTimeStamp,uint64 decayEndTimeStamp)"
"PreConfBid(string txnHash,string revertingTxHashes,uint256 bidAmt,uint64 blockNumber,uint64 decayStartTimeStamp,uint64 decayEndTimeStamp,uint256 slashAmount)"
);

// EIP-712 domain separator
Expand Down Expand Up @@ -192,69 +191,55 @@ contract PreconfManager is

/**
* @dev Open a commitment
* @param unopenedCommitmentIndex The index of the unopened commitment
* @param bidAmt The bid amount
* @param blockNumber The block number
* @param txnHash The transaction hash
* @param revertingTxHashes The reverting transaction hashes
* @param decayStartTimeStamp The start time of the decay
* @param decayEndTimeStamp The end time of the decay
* @param bidSignature The signature of the bid
* @param sharedSecretKey The shared secret key
* @param params The parameters for opening a commitment
* @return commitmentIndex The index of the stored commitment
*/
function openCommitment(
bytes32 unopenedCommitmentIndex,
uint256 bidAmt,
uint64 blockNumber,
string memory txnHash,
string memory revertingTxHashes,
uint64 decayStartTimeStamp,
uint64 decayEndTimeStamp,
bytes calldata bidSignature,
bytes memory sharedSecretKey
OpenCommitmentParams memory params
) public whenNotPaused returns (bytes32 commitmentIndex) {
if (decayStartTimeStamp >= decayEndTimeStamp) {
revert InvalidDecayTime(decayStartTimeStamp, decayEndTimeStamp);
if (params.decayStartTimeStamp >= params.decayEndTimeStamp) {
revert InvalidDecayTime(params.decayStartTimeStamp, params.decayEndTimeStamp);
}

(bytes32 bHash, address bidderAddress) = verifyBid(
bidAmt,
blockNumber,
decayStartTimeStamp,
decayEndTimeStamp,
txnHash,
revertingTxHashes,
bidSignature
params.bidAmt,
params.blockNumber,
params.decayStartTimeStamp,
params.decayEndTimeStamp,
params.slashAmount,
params.txnHash,
params.revertingTxHashes,
params.bidSignature
);

bytes32 txnHashBidderBlockNumber = keccak256(
abi.encode(txnHash, bidderAddress, blockNumber)
abi.encode(params.txnHash, bidderAddress, params.blockNumber)
);

require(
processedTxnHashes[txnHashBidderBlockNumber] == false,
TxnHashAlreadyProcessed(txnHash, bidderAddress)
TxnHashAlreadyProcessed(params.txnHash, bidderAddress)
);

bytes32 commitmentDigest = getPreConfHash(
txnHash,
revertingTxHashes,
bidAmt,
blockNumber,
decayStartTimeStamp,
decayEndTimeStamp,
params.txnHash,
params.revertingTxHashes,
params.bidAmt,
params.blockNumber,
params.decayStartTimeStamp,
params.decayEndTimeStamp,
params.slashAmount,
bHash,
bidSignature,
sharedSecretKey
params.bidSignature,
params.sharedSecretKey
);

UnopenedCommitment storage unopenedCommitment = unopenedCommitments[
unopenedCommitmentIndex
params.unopenedCommitmentIndex
];

if (unopenedCommitment.isOpened) {
revert CommitmentAlreadyOpened(unopenedCommitmentIndex);
revert CommitmentAlreadyOpened(params.unopenedCommitmentIndex);
}

if (unopenedCommitment.commitmentDigest != commitmentDigest) {
Expand All @@ -268,7 +253,7 @@ contract PreconfManager is
unopenedCommitment.commitmentSignature
);

address winner = blockTracker.getBlockWinner(blockNumber);
address winner = blockTracker.getBlockWinner(params.blockNumber);

if (winner != committerAddress) {
revert WinnerIsNotCommitter(committerAddress, winner);
Expand All @@ -285,28 +270,29 @@ contract PreconfManager is
OpenedCommitment memory newCommitment = OpenedCommitment(
bidderAddress,
false,
blockNumber,
decayStartTimeStamp,
decayEndTimeStamp,
params.blockNumber,
params.decayStartTimeStamp,
params.decayEndTimeStamp,
params.slashAmount,
unopenedCommitment.dispatchTimestamp,
committerAddress,
bidAmt,
params.bidAmt,
bHash,
commitmentDigest,
bidSignature,
params.bidSignature,
unopenedCommitment.commitmentSignature,
sharedSecretKey,
txnHash,
revertingTxHashes
params.sharedSecretKey,
params.txnHash,
params.revertingTxHashes
);

commitmentIndex = getOpenedCommitmentIndex(newCommitment);

uint256 updatedBidAmt = bidderRegistry.openBid(
commitmentDigest,
bidAmt,
params.bidAmt,
bidderAddress,
blockNumber
params.blockNumber
);

newCommitment.bidAmt = updatedBidAmt;
Expand All @@ -325,17 +311,18 @@ contract PreconfManager is
bidderAddress,
committerAddress,
updatedBidAmt,
blockNumber,
params.blockNumber,
bHash,
decayStartTimeStamp,
decayEndTimeStamp,
txnHash,
revertingTxHashes,
params.decayStartTimeStamp,
params.decayEndTimeStamp,
params.slashAmount,
params.txnHash,
params.revertingTxHashes,
commitmentDigest,
bidSignature,
params.bidSignature,
unopenedCommitment.commitmentSignature,
unopenedCommitment.dispatchTimestamp,
sharedSecretKey
params.sharedSecretKey
);
return commitmentIndex;
}
Expand Down Expand Up @@ -510,7 +497,8 @@ contract PreconfManager is
uint256 _bidAmt,
uint64 _blockNumber,
uint64 _decayStartTimeStamp,
uint64 _decayEndTimeStamp
uint64 _decayEndTimeStamp,
uint256 _slashAmount
) public view returns (bytes32) {
return
ECDSA.toTypedDataHash(
Expand All @@ -523,18 +511,21 @@ contract PreconfManager is
_bidAmt,
_blockNumber,
_decayStartTimeStamp,
_decayEndTimeStamp
_decayEndTimeStamp,
_slashAmount
)
)
);
}

/**
* @dev Gives digest to be signed for pre confirmation
* @param _txnHash transaction Hash.
* @param _bidAmt bid amount.
* @param _blockNumber block number.
* @param _revertingTxHashes reverting transaction hashes.
* @param _decayStartTimeStamp decay start time.
* @param _decayEndTimeStamp decay end time.
* @param _slashAmount amount to slash if provider fails to include tx
* @param _bidHash hash of the bid.
* @param _bidSignature signature of the bid.
* @param _sharedSecretKey shared secret key.
Expand All @@ -547,6 +538,7 @@ contract PreconfManager is
uint64 _blockNumber,
uint64 _decayStartTimeStamp,
uint64 _decayEndTimeStamp,
uint256 _slashAmount,
bytes32 _bidHash,
bytes memory _bidSignature,
bytes memory _sharedSecretKey
Expand All @@ -563,6 +555,7 @@ contract PreconfManager is
_blockNumber,
_decayStartTimeStamp,
_decayEndTimeStamp,
_slashAmount,
_bidHash,
keccak256(_bidSignature),
keccak256(_sharedSecretKey)
Expand All @@ -577,6 +570,7 @@ contract PreconfManager is
* @param blockNumber block number.
* @param decayStartTimeStamp decay start time.
* @param decayEndTimeStamp decay end time.
* @param slashAmount amount to slash if provider fails to include tx
* @param txnHash transaction Hash.
* @param revertingTxHashes reverting transaction hashes.
* @param bidSignature bid signature.
Expand All @@ -588,17 +582,19 @@ contract PreconfManager is
uint64 blockNumber,
uint64 decayStartTimeStamp,
uint64 decayEndTimeStamp,
uint256 slashAmount,
string memory txnHash,
string memory revertingTxHashes,
bytes calldata bidSignature
bytes memory bidSignature
) public view returns (bytes32 messageDigest, address recoveredAddress) {
messageDigest = getBidHash(
txnHash,
revertingTxHashes,
bidAmt,
blockNumber,
decayStartTimeStamp,
decayEndTimeStamp
decayEndTimeStamp,
slashAmount
);
recoveredAddress = messageDigest.recover(bidSignature);
}
Expand Down Expand Up @@ -652,7 +648,6 @@ contract PreconfManager is

// solhint-disable-next-line no-empty-blocks
function _authorizeUpgrade(address) internal override onlyOwner {}

function _getPreConfHash(
CommitmentParams memory params
) internal view returns (bytes32) {
Expand All @@ -664,6 +659,7 @@ contract PreconfManager is
params.blockNumber,
params.decayStartTimeStamp,
params.decayEndTimeStamp,
params.slashAmount,
params.bidHash,
params.bidSignature,
params.sharedSecretKey
Expand Down
Loading
Loading