Skip to content

Commit dfdf1f7

Browse files
committed
fix
1 parent 8d9f689 commit dfdf1f7

File tree

3 files changed

+33
-21
lines changed

3 files changed

+33
-21
lines changed

target_chains/ethereum/contracts/contracts/pulse/IPulse.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ interface IPulse is PulseEvents {
5353
*/
5454
function requestPriceUpdatesWithCallback(
5555
address provider,
56-
uint256 publishTime,
56+
uint64 publishTime,
5757
bytes32[] calldata priceIds,
5858
uint256 callbackGasLimit
5959
) external payable returns (uint64 sequenceNumber);

target_chains/ethereum/contracts/contracts/pulse/Pulse.sol

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,13 +198,16 @@ abstract contract Pulse is IPulse, PulseState {
198198
int64[] memory prices = new int64[](priceFeeds.length);
199199
uint64[] memory conf = new uint64[](priceFeeds.length);
200200
int32[] memory expos = new int32[](priceFeeds.length);
201-
uint64[] memory publishTimes = new uint256[](priceFeeds.length);
201+
uint64[] memory publishTimes = new uint64[](priceFeeds.length);
202202

203203
for (uint i = 0; i < priceFeeds.length; i++) {
204204
prices[i] = priceFeeds[i].price.price;
205205
conf[i] = priceFeeds[i].price.conf;
206206
expos[i] = priceFeeds[i].price.expo;
207-
publishTimes[i] = priceFeeds[i].price.publishTime;
207+
// Safe cast because this is a unix timestamp in seconds.
208+
publishTimes[i] = SafeCast.toUint64(
209+
priceFeeds[i].price.publishTime
210+
);
208211
}
209212

210213
emit PriceUpdateExecuted(

target_chains/ethereum/contracts/forge-test/Pulse.t.sol

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ contract PulseTest is Test, PulseEvents, IPulseConsumer {
129129
);
130130
vm.prank(defaultProvider);
131131
pulse.registerProvider(DEFAULT_PROVIDER_FEE);
132-
consumer = new MockPulseConsumer();
132+
consumer = new MockPulseConsumer(address(proxy));
133133
}
134134

135135
// Helper function to create price IDs array
@@ -208,11 +208,11 @@ contract PulseTest is Test, PulseEvents, IPulseConsumer {
208208
returns (
209209
uint64 sequenceNumber,
210210
bytes32[] memory priceIds,
211-
uint256 publishTime
211+
uint64 publishTime
212212
)
213213
{
214214
priceIds = createPriceIds();
215-
publishTime = block.timestamp;
215+
publishTime = SafeCast.toUint64(block.timestamp);
216216
vm.deal(consumerAddress, 1 gwei);
217217

218218
uint128 totalFee = calculateTotalFee();
@@ -233,7 +233,7 @@ contract PulseTest is Test, PulseEvents, IPulseConsumer {
233233
vm.txGasPrice(30 gwei);
234234

235235
bytes32[] memory priceIds = createPriceIds();
236-
uint256 publishTime = block.timestamp;
236+
uint64 publishTime = SafeCast.toUint64(block.timestamp);
237237

238238
// Fund the consumer contract with enough ETH for higher gas price
239239
vm.deal(address(consumer), 1 ether);
@@ -302,15 +302,15 @@ contract PulseTest is Test, PulseEvents, IPulseConsumer {
302302
vm.expectRevert(InsufficientFee.selector);
303303
pulse.requestPriceUpdatesWithCallback{value: PYTH_FEE}( // Intentionally low fee
304304
defaultProvider,
305-
block.timestamp,
305+
SafeCast.toUint64(block.timestamp),
306306
priceIds,
307307
CALLBACK_GAS_LIMIT
308308
);
309309
}
310310

311311
function testExecuteCallback() public {
312312
bytes32[] memory priceIds = createPriceIds();
313-
uint256 publishTime = block.timestamp;
313+
uint64 publishTime = SafeCast.toUint64(block.timestamp);
314314

315315
// Fund the consumer contract
316316
vm.deal(address(consumer), 1 gwei);
@@ -342,7 +342,7 @@ contract PulseTest is Test, PulseEvents, IPulseConsumer {
342342
expectedExpos[0] = MOCK_PRICE_FEED_EXPO;
343343
expectedExpos[1] = MOCK_PRICE_FEED_EXPO;
344344

345-
uint256[] memory expectedPublishTimes = new uint256[](2);
345+
uint64[] memory expectedPublishTimes = new uint64[](2);
346346
expectedPublishTimes[0] = publishTime;
347347
expectedPublishTimes[1] = publishTime;
348348

@@ -390,7 +390,9 @@ contract PulseTest is Test, PulseEvents, IPulseConsumer {
390390
}
391391

392392
function testExecuteCallbackFailure() public {
393-
FailingPulseConsumer failingConsumer = new FailingPulseConsumer();
393+
FailingPulseConsumer failingConsumer = new FailingPulseConsumer(
394+
address(proxy)
395+
);
394396

395397
(
396398
uint64 sequenceNumber,
@@ -423,7 +425,9 @@ contract PulseTest is Test, PulseEvents, IPulseConsumer {
423425
}
424426

425427
function testExecuteCallbackCustomErrorFailure() public {
426-
CustomErrorPulseConsumer failingConsumer = new CustomErrorPulseConsumer();
428+
CustomErrorPulseConsumer failingConsumer = new CustomErrorPulseConsumer(
429+
address(proxy)
430+
);
427431

428432
(
429433
uint64 sequenceNumber,
@@ -484,7 +488,7 @@ contract PulseTest is Test, PulseEvents, IPulseConsumer {
484488
function testExecuteCallbackWithFutureTimestamp() public {
485489
// Setup request with future timestamp
486490
bytes32[] memory priceIds = createPriceIds();
487-
uint256 futureTime = block.timestamp + 10; // 10 seconds in future
491+
uint64 futureTime = SafeCast.toUint64(block.timestamp + 10); // 10 seconds in future
488492
vm.deal(address(consumer), 1 gwei);
489493

490494
uint128 totalFee = calculateTotalFee();
@@ -524,7 +528,7 @@ contract PulseTest is Test, PulseEvents, IPulseConsumer {
524528

525529
function testRevertOnTooFarFutureTimestamp() public {
526530
bytes32[] memory priceIds = createPriceIds();
527-
uint256 farFutureTime = block.timestamp + 61; // Just over 1 minute
531+
uint64 farFutureTime = SafeCast.toUint64(block.timestamp + 61); // Just over 1 minute
528532
vm.deal(address(consumer), 1 gwei);
529533

530534
uint128 totalFee = calculateTotalFee();
@@ -616,7 +620,7 @@ contract PulseTest is Test, PulseEvents, IPulseConsumer {
616620
vm.prank(address(consumer));
617621
pulse.requestPriceUpdatesWithCallback{value: calculateTotalFee()}(
618622
defaultProvider,
619-
block.timestamp,
623+
SafeCast.toUint64(block.timestamp),
620624
priceIds,
621625
CALLBACK_GAS_LIMIT
622626
);
@@ -667,7 +671,7 @@ contract PulseTest is Test, PulseEvents, IPulseConsumer {
667671
vm.prank(address(consumer));
668672
pulse.requestPriceUpdatesWithCallback{value: calculateTotalFee()}(
669673
defaultProvider,
670-
block.timestamp,
674+
SafeCast.toUint64(block.timestamp),
671675
priceIds,
672676
CALLBACK_GAS_LIMIT
673677
);
@@ -778,7 +782,7 @@ contract PulseTest is Test, PulseEvents, IPulseConsumer {
778782
);
779783
pulse.requestPriceUpdatesWithCallback{value: totalFee}(
780784
defaultProvider,
781-
block.timestamp,
785+
SafeCast.toUint64(block.timestamp),
782786
priceIds,
783787
CALLBACK_GAS_LIMIT
784788
);
@@ -843,7 +847,12 @@ contract PulseTest is Test, PulseEvents, IPulseConsumer {
843847
vm.prank(address(consumer));
844848
uint64 sequenceNumber = pulse.requestPriceUpdatesWithCallback{
845849
value: totalFee
846-
}(defaultProvider, block.timestamp, priceIds, CALLBACK_GAS_LIMIT);
850+
}(
851+
defaultProvider,
852+
SafeCast.toUint64(block.timestamp),
853+
priceIds,
854+
CALLBACK_GAS_LIMIT
855+
);
847856

848857
PulseState.Request memory req = pulse.getRequest(sequenceNumber);
849858
assertEq(req.provider, provider);
@@ -1020,7 +1029,7 @@ contract PulseTest is Test, PulseEvents, IPulseConsumer {
10201029
}
10211030

10221031
function createTestRequests(bytes32[] memory priceIds) private {
1023-
uint256 publishTime = block.timestamp;
1032+
uint64 publishTime = SafeCast.toUint64(block.timestamp);
10241033
for (uint i = 0; i < 5; i++) {
10251034
vm.deal(address(this), 1 ether);
10261035
pulse.requestPriceUpdatesWithCallback{value: 1 ether}(
@@ -1038,7 +1047,7 @@ contract PulseTest is Test, PulseEvents, IPulseConsumer {
10381047
) private {
10391048
// Create mock price feeds and setup Pyth response
10401049
PythStructs.PriceFeed[] memory priceFeeds = createMockPriceFeeds(
1041-
block.timestamp
1050+
SafeCast.toUint64(block.timestamp)
10421051
);
10431052
mockParsePriceFeedUpdates(priceFeeds);
10441053
updateData = createMockUpdateData(priceFeeds);
@@ -1161,7 +1170,7 @@ contract PulseTest is Test, PulseEvents, IPulseConsumer {
11611170
// Setup test data
11621171
bytes32[] memory priceIds = new bytes32[](1);
11631172
priceIds[0] = bytes32(uint256(1));
1164-
uint256 publishTime = block.timestamp;
1173+
uint64 publishTime = SafeCast.toUint64(block.timestamp);
11651174
uint256 callbackGasLimit = 1000000;
11661175

11671176
// Create mock price feeds and setup Pyth response

0 commit comments

Comments
 (0)