Skip to content

Commit eec5048

Browse files
authored
Merge pull request #3 from monetha/quorum
PassportLogic adjusted to support Quorum blockchain when using Raft
2 parents 898851e + 75e3aab commit eec5048

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

contracts/storage/PrivateDataStorageLogic.sol

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ contract PrivateDataStorageLogic is Storage {
7070
exchangeKeyHash : _exchangeKeyHash,
7171
encryptedDataKey : encryptedDataKey,
7272
state : PrivateDataExchangeState.Proposed,
73-
stateExpired : now + privateDataExchangeProposeTimeout
73+
stateExpired : _nowSeconds() + privateDataExchangeProposeTimeout
7474
});
7575
privateDataExchanges.push(exchange);
7676

@@ -88,12 +88,12 @@ contract PrivateDataStorageLogic is Storage {
8888
require(msg.sender == exchange.passportOwner, "only passport owner allowed");
8989
require(PrivateDataExchangeState.Proposed == exchange.state, "exchange must be in proposed state");
9090
require(msg.value >= exchange.dataRequesterValue, "need to stake at least data requester amount");
91-
require(now < exchange.stateExpired, "exchange state expired");
91+
require(_nowSeconds() < exchange.stateExpired, "exchange state expired");
9292

9393
exchange.passportOwnerValue = msg.value;
9494
exchange.encryptedDataKey = _encryptedDataKey;
9595
exchange.state = PrivateDataExchangeState.Accepted;
96-
exchange.stateExpired = now + privateDataExchangeAcceptTimeout;
96+
exchange.stateExpired = _nowSeconds() + privateDataExchangeAcceptTimeout;
9797

9898
emit PrivateDataExchangeAccepted(_exchangeIdx, exchange.dataRequester, msg.sender);
9999
}
@@ -103,7 +103,7 @@ contract PrivateDataStorageLogic is Storage {
103103
require(_exchangeIdx < privateDataExchanges.length, "invalid exchange index");
104104
PrivateDataExchange storage exchange = privateDataExchanges[_exchangeIdx];
105105
require(PrivateDataExchangeState.Accepted == exchange.state, "exchange must be in accepted state");
106-
require(now > exchange.stateExpired || msg.sender == exchange.dataRequester, "exchange must be either expired or be finished by the data requester");
106+
require(_nowSeconds() > exchange.stateExpired || msg.sender == exchange.dataRequester, "exchange must be either expired or be finished by the data requester");
107107

108108
exchange.state = PrivateDataExchangeState.Closed;
109109

@@ -122,7 +122,7 @@ contract PrivateDataStorageLogic is Storage {
122122
PrivateDataExchange storage exchange = privateDataExchanges[_exchangeIdx];
123123
require(PrivateDataExchangeState.Proposed == exchange.state, "exchange must be in proposed state");
124124
require(msg.sender == exchange.dataRequester, "only data requester allowed");
125-
require(now > exchange.stateExpired, "exchange must be expired");
125+
require(_nowSeconds() > exchange.stateExpired, "exchange must be expired");
126126

127127
exchange.state = PrivateDataExchangeState.Closed;
128128

@@ -141,7 +141,7 @@ contract PrivateDataStorageLogic is Storage {
141141
PrivateDataExchange storage exchange = privateDataExchanges[_exchangeIdx];
142142
require(PrivateDataExchangeState.Accepted == exchange.state, "exchange must be in accepted state");
143143
require(msg.sender == exchange.dataRequester, "only data requester allowed");
144-
require(now < exchange.stateExpired, "exchange must not be expired");
144+
require(_nowSeconds() < exchange.stateExpired, "exchange must not be expired");
145145
require(keccak256(abi.encodePacked(_exchangeKey)) == exchange.exchangeKeyHash, "exchange key hash must match");
146146

147147
bytes32 dataKey = _exchangeKey ^ exchange.encryptedDataKey;
@@ -202,4 +202,16 @@ contract PrivateDataStorageLogic is Storage {
202202
return (initValue.initialized, initValue.value.dataIPFSHash, initValue.value.dataKeyHash);
203203
}
204204

205+
function _nowSeconds() private view returns(uint256) {
206+
uint256 t = now;
207+
208+
// In Quorum blockchain timestamp is in nanoseconds, not seconds:
209+
// https://github.com/jpmorganchase/quorum/issues/713
210+
// https://github.com/jpmorganchase/quorum/issues/190
211+
if (t > 150000000000000000) {
212+
t /= 1000000000;
213+
}
214+
215+
return t;
216+
}
205217
}

0 commit comments

Comments
 (0)