diff --git a/lazer/evm/lib/forge-std b/lazer/evm/lib/forge-std index 1eea5ba..d3db4ef 160000 --- a/lazer/evm/lib/forge-std +++ b/lazer/evm/lib/forge-std @@ -1 +1 @@ -Subproject commit 1eea5bae12ae557d589f9f0f0edae2faa47cb262 +Subproject commit d3db4ef90a72b7d24aa5a2e5c649593eaef7801d diff --git a/lazer/evm/lib/openzeppelin-contracts-upgradeable b/lazer/evm/lib/openzeppelin-contracts-upgradeable index fa52531..e3deb4d 160000 --- a/lazer/evm/lib/openzeppelin-contracts-upgradeable +++ b/lazer/evm/lib/openzeppelin-contracts-upgradeable @@ -1 +1 @@ -Subproject commit fa525310e45f91eb20a6d3baa2644be8e0adba31 +Subproject commit e3deb4d2a5835f5dcb5bb6afbfa81be0061bfac8 diff --git a/lazer/evm/lib/pyth-crosschain b/lazer/evm/lib/pyth-crosschain index fb09981..cc16040 160000 --- a/lazer/evm/lib/pyth-crosschain +++ b/lazer/evm/lib/pyth-crosschain @@ -1 +1 @@ -Subproject commit fb09981799bf0ff9bd9bc7d5f3b340292a9783b2 +Subproject commit cc16040038691a5a5a499661d8de0daba8eed4c3 diff --git a/lazer/evm/src/ExampleReceiver.sol b/lazer/evm/src/ExampleReceiver.sol index 3768f61..efddf0c 100644 --- a/lazer/evm/src/ExampleReceiver.sol +++ b/lazer/evm/src/ExampleReceiver.sol @@ -14,8 +14,14 @@ contract ExampleReceiver { pythLazer = PythLazer(pythLazerAddress); } - function updatePrice(bytes calldata update) public { - (bytes memory payload,) = pythLazer.verifyUpdate(update); + function updatePrice(bytes calldata update) public payable { + uint256 verification_fee = pythLazer.verification_fee(); + require(msg.value >= verification_fee, "Insufficient fee provided"); + (bytes memory payload,) = pythLazer.verifyUpdate{value: verification_fee}(update); + if (msg.value > verification_fee) { + payable(msg.sender).transfer(msg.value - verification_fee); + } + (uint64 _timestamp, PythLazerLib.Channel channel, uint8 feedsLen, uint16 pos) = PythLazerLib.parsePayloadHeader(payload); console.log("timestamp %d", _timestamp); diff --git a/lazer/evm/test/ExampleReceiver.t.sol b/lazer/evm/test/ExampleReceiver.t.sol index 222bcb3..a643c2d 100644 --- a/lazer/evm/test/ExampleReceiver.t.sol +++ b/lazer/evm/test/ExampleReceiver.t.sol @@ -12,19 +12,30 @@ contract ExampleReceiverTest is Test { address trustedSigner = 0xEfEf56cD66896f6799A90A4e4d512C330c094e44; console.log("trustedSigner %s", trustedSigner); + address lazer = makeAddr("lazer"); PythLazer pythLazer = new PythLazer(); - pythLazer.initialize(address(0x1)); - vm.prank(address(0x1)); + pythLazer.initialize(lazer); + + vm.prank(lazer); pythLazer.updateTrustedSigner(trustedSigner, 3000000000000000); + uint256 fee = pythLazer.verification_fee(); - ExampleReceiver receiver = new ExampleReceiver(address(pythLazer)); + address consumer = makeAddr("consumer"); + vm.deal(consumer, 10 wei); + ExampleReceiver receiver = new ExampleReceiver(address(pythLazer)); bytes memory update = hex"2a22999a577d3cc0202197939d736bc0dcf71b9dde7b9470e4d16fa8e2120c0787a1c0d744d0c39cc372af4d1ecf2d09e84160ca905f3f597d20e2eec144a446a0459ad600001c93c7d3750006240af373971c01010000000201000000000005f5e100"; console.logBytes(update); - receiver.updatePrice(update); + vm.prank(consumer); + receiver.updatePrice{value: 5 * fee}(update); + assertEq(receiver.price(), 100000000); assertEq(receiver.timestamp(), 1728479312975644); + + assertEq(address(pythLazer).balance, fee); + assertEq(address(receiver).balance, 0); + assertEq(consumer.balance, 10 wei - fee); } }