Skip to content

Commit 7ad9dc4

Browse files
authored
feat(lazer): Update EVM example to attach fee for verification (#39)
* Add fee but still failing * Fee correctly used * Update function stub * Fix format issue * Pull fee from lazer contract
1 parent 08f56e0 commit 7ad9dc4

File tree

5 files changed

+26
-9
lines changed

5 files changed

+26
-9
lines changed

lazer/evm/lib/pyth-crosschain

Submodule pyth-crosschain updated 342 files

lazer/evm/src/ExampleReceiver.sol

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,14 @@ contract ExampleReceiver {
1414
pythLazer = PythLazer(pythLazerAddress);
1515
}
1616

17-
function updatePrice(bytes calldata update) public {
18-
(bytes memory payload,) = pythLazer.verifyUpdate(update);
17+
function updatePrice(bytes calldata update) public payable {
18+
uint256 verification_fee = pythLazer.verification_fee();
19+
require(msg.value >= verification_fee, "Insufficient fee provided");
20+
(bytes memory payload,) = pythLazer.verifyUpdate{value: verification_fee}(update);
21+
if (msg.value > verification_fee) {
22+
payable(msg.sender).transfer(msg.value - verification_fee);
23+
}
24+
1925
(uint64 _timestamp, PythLazerLib.Channel channel, uint8 feedsLen, uint16 pos) =
2026
PythLazerLib.parsePayloadHeader(payload);
2127
console.log("timestamp %d", _timestamp);

lazer/evm/test/ExampleReceiver.t.sol

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,30 @@ contract ExampleReceiverTest is Test {
1212
address trustedSigner = 0xEfEf56cD66896f6799A90A4e4d512C330c094e44;
1313
console.log("trustedSigner %s", trustedSigner);
1414

15+
address lazer = makeAddr("lazer");
1516
PythLazer pythLazer = new PythLazer();
16-
pythLazer.initialize(address(0x1));
17-
vm.prank(address(0x1));
17+
pythLazer.initialize(lazer);
18+
19+
vm.prank(lazer);
1820
pythLazer.updateTrustedSigner(trustedSigner, 3000000000000000);
21+
uint256 fee = pythLazer.verification_fee();
1922

20-
ExampleReceiver receiver = new ExampleReceiver(address(pythLazer));
23+
address consumer = makeAddr("consumer");
24+
vm.deal(consumer, 10 wei);
2125

26+
ExampleReceiver receiver = new ExampleReceiver(address(pythLazer));
2227
bytes memory update =
2328
hex"2a22999a577d3cc0202197939d736bc0dcf71b9dde7b9470e4d16fa8e2120c0787a1c0d744d0c39cc372af4d1ecf2d09e84160ca905f3f597d20e2eec144a446a0459ad600001c93c7d3750006240af373971c01010000000201000000000005f5e100";
2429
console.logBytes(update);
2530

26-
receiver.updatePrice(update);
31+
vm.prank(consumer);
32+
receiver.updatePrice{value: 5 * fee}(update);
33+
2734
assertEq(receiver.price(), 100000000);
2835
assertEq(receiver.timestamp(), 1728479312975644);
36+
37+
assertEq(address(pythLazer).balance, fee);
38+
assertEq(address(receiver).balance, 0);
39+
assertEq(consumer.balance, 10 wei - fee);
2940
}
3041
}

0 commit comments

Comments
 (0)