Wormhole message fee now part of quoteDeliveryPrice (#3043)
This commit is contained in:
parent
018ee721b0
commit
5130eff0ef
|
@ -19,12 +19,6 @@ contract DeliveryProvider is DeliveryProviderGovernance, IDeliveryProvider {
|
|||
|
||||
error CallerNotApproved(address msgSender);
|
||||
|
||||
address immutable wormhole;
|
||||
|
||||
constructor(address _wormhole) {
|
||||
wormhole = _wormhole;
|
||||
}
|
||||
|
||||
function quoteEvmDeliveryPrice(
|
||||
uint16 targetChain,
|
||||
Gas gasLimit,
|
||||
|
@ -41,7 +35,6 @@ contract DeliveryProvider is DeliveryProviderGovernance, IDeliveryProvider {
|
|||
Wei receiverValueCost = quoteAssetCost(targetChain, receiverValue);
|
||||
nativePriceQuote = (
|
||||
transactionFee.max(costOfProvidingFullGasLimit) + receiverValueCost
|
||||
+ wormholeMessageFee()
|
||||
).asLocalNative();
|
||||
require(
|
||||
receiverValue.asNative() + costOfProvidingFullGasLimit <= maximumBudget(targetChain),
|
||||
|
@ -119,10 +112,6 @@ contract DeliveryProvider is DeliveryProviderGovernance, IDeliveryProvider {
|
|||
*
|
||||
*/
|
||||
|
||||
function wormholeMessageFee() public view returns (Wei) {
|
||||
return Wei.wrap(IWormhole(wormhole).messageFee());
|
||||
}
|
||||
|
||||
//Returns the delivery overhead fee required to deliver a message to the target chain, denominated in this chain's wei.
|
||||
function quoteDeliveryOverhead(uint16 targetChain) public view returns (Wei nativePriceQuote) {
|
||||
Gas overhead = deliverGasOverhead(targetChain);
|
||||
|
|
|
@ -10,8 +10,6 @@ import "./DeliveryProvider.sol";
|
|||
contract DeliveryProviderImplementation is DeliveryProvider {
|
||||
error ImplementationAlreadyInitialized();
|
||||
|
||||
constructor(address wormhole) DeliveryProvider(wormhole) {}
|
||||
|
||||
function initialize() public virtual initializer {
|
||||
// this function needs to be exposed for an upgrade to pass
|
||||
}
|
||||
|
|
|
@ -577,7 +577,7 @@ abstract contract WormholeRelayerDelivery is WormholeRelayerBase, IWormholeRelay
|
|||
}
|
||||
|
||||
// assuming refund chain is an EVM chain
|
||||
if (refundAmount <= getWormholeMessageFee() + baseDeliveryPrice) {
|
||||
if (refundAmount <= baseDeliveryPrice) {
|
||||
return RefundStatus.CROSS_CHAIN_REFUND_FAIL_NOT_ENOUGH;
|
||||
}
|
||||
try IWormholeRelayerSend(address(this)).send{value: refundAmount.unwrap()}(
|
||||
|
@ -585,7 +585,7 @@ abstract contract WormholeRelayerDelivery is WormholeRelayerBase, IWormholeRelay
|
|||
bytes32(0),
|
||||
bytes(""),
|
||||
TargetNative.wrap(0),
|
||||
refundAmount - getWormholeMessageFee() - baseDeliveryPrice,
|
||||
refundAmount - baseDeliveryPrice,
|
||||
encodeEvmExecutionParamsV1(getEmptyEvmExecutionParamsV1()),
|
||||
refundChain,
|
||||
refundAddress,
|
||||
|
|
|
@ -528,7 +528,7 @@ abstract contract WormholeRelayerSend is WormholeRelayerBase, IWormholeRelayerSe
|
|||
targetChain, receiverValue, encodedExecutionParameters
|
||||
);
|
||||
encodedExecutionInfo = _encodedExecutionInfo;
|
||||
nativePriceQuote = deliveryPrice;
|
||||
nativePriceQuote = deliveryPrice + getWormholeMessageFee();
|
||||
}
|
||||
|
||||
function quoteNativeForChain(
|
||||
|
|
|
@ -58,7 +58,7 @@ contract AttackForwardIntegration is IWormholeReceiver {
|
|||
coreRelayer.quoteEVMDeliveryPrice(_targetChain, TargetNative.wrap(0), Gas.wrap(SAFE_DELIVERY_GAS_CAPTURE));
|
||||
|
||||
bytes memory emptyArray;
|
||||
coreRelayer.forwardToEvm{value: LocalNative.unwrap(deliveryPayment) + wormhole.messageFee()}(
|
||||
coreRelayer.forwardToEvm{value: LocalNative.unwrap(deliveryPayment)}(
|
||||
_targetChain,
|
||||
attackerRewardAddress,
|
||||
emptyArray,
|
||||
|
|
|
@ -69,7 +69,7 @@ contract ForwardTester is IWormholeReceiver {
|
|||
wormholeRelayer.quoteEVMDeliveryPrice(sourceChain, TargetNative.wrap(0), REASONABLE_GAS_LIMIT);
|
||||
vm.recordLogs();
|
||||
wormholeRelayer.sendPayloadToEvm{
|
||||
value: deliveryPrice.unwrap() + wormhole.messageFee() + msg.value
|
||||
value: deliveryPrice.unwrap() + msg.value
|
||||
}(
|
||||
sourceChain,
|
||||
fromWormholeFormat(sourceAddress),
|
||||
|
|
|
@ -27,10 +27,9 @@ contract TestDeliveryProvider is Test {
|
|||
DeliveryProvider internal deliveryProvider;
|
||||
|
||||
function initializeDeliveryProvider() internal {
|
||||
(IWormhole wormhole,) = setUpWormhole(TEST_ORACLE_CHAIN_ID);
|
||||
DeliveryProviderSetup deliveryProviderSetup = new DeliveryProviderSetup();
|
||||
DeliveryProviderImplementation deliveryProviderImplementation =
|
||||
new DeliveryProviderImplementation(address(wormhole));
|
||||
new DeliveryProviderImplementation();
|
||||
DeliveryProviderProxy myDeliveryProvider = new DeliveryProviderProxy(
|
||||
address(deliveryProviderSetup),
|
||||
abi.encodeCall(
|
||||
|
@ -48,24 +47,6 @@ contract TestDeliveryProvider is Test {
|
|||
require(deliveryProvider.chainId() == TEST_ORACLE_CHAIN_ID, "chainId() != expected");
|
||||
}
|
||||
|
||||
function setUpWormhole(uint16 chainId)
|
||||
public
|
||||
returns (IWormhole wormholeContract, WormholeSimulator wormholeSimulator)
|
||||
{
|
||||
// deploy Wormhole
|
||||
MockWormhole wormhole = new MockWormhole({
|
||||
initChainId: chainId,
|
||||
initEvmChainId: block.chainid
|
||||
});
|
||||
|
||||
// replace Wormhole with the Wormhole Simulator contract (giving access to some nice helper methods for signing)
|
||||
wormholeSimulator = new FakeWormholeSimulator(
|
||||
wormhole
|
||||
);
|
||||
|
||||
wormholeContract = wormhole;
|
||||
}
|
||||
|
||||
function testCannotUpdatePriceWithChainIdZero(
|
||||
GasPrice updateGasPrice,
|
||||
WeiPrice updateNativeCurrencyPrice
|
||||
|
|
|
@ -86,14 +86,13 @@ contract TestHelpers {
|
|||
}
|
||||
|
||||
function setUpDeliveryProvider(
|
||||
uint16 chainId,
|
||||
address wormhole
|
||||
uint16 chainId
|
||||
) public returns (DeliveryProvider deliveryProvider) {
|
||||
vm.prank(msg.sender);
|
||||
DeliveryProviderSetup deliveryProviderSetup = new DeliveryProviderSetup();
|
||||
vm.prank(msg.sender);
|
||||
DeliveryProviderImplementation deliveryProviderImplementation =
|
||||
new DeliveryProviderImplementation(wormhole);
|
||||
new DeliveryProviderImplementation();
|
||||
vm.prank(msg.sender);
|
||||
DeliveryProviderProxy myDeliveryProvider = new DeliveryProviderProxy(
|
||||
address(deliveryProviderSetup),
|
||||
|
|
|
@ -280,7 +280,7 @@ contract WormholeRelayerTests is Test {
|
|||
for (uint16 i = 1; i <= numChains; i++) {
|
||||
Contracts memory mapEntry;
|
||||
(mapEntry.wormhole, mapEntry.wormholeSimulator) = helpers.setUpWormhole(i);
|
||||
mapEntry.deliveryProvider = helpers.setUpDeliveryProvider(i, address(mapEntry.wormhole));
|
||||
mapEntry.deliveryProvider = helpers.setUpDeliveryProvider(i);
|
||||
mapEntry.coreRelayer =
|
||||
helpers.setUpWormholeRelayer(mapEntry.wormhole, address(mapEntry.deliveryProvider));
|
||||
mapEntry.coreRelayerFull = WormholeRelayer(payable(address(mapEntry.coreRelayer)));
|
||||
|
@ -398,7 +398,7 @@ contract WormholeRelayerTests is Test {
|
|||
setup.targetChain, TargetNative.wrap(receiverValue), Gas.wrap(gasLimit)
|
||||
);
|
||||
sequence = setup.source.integration.sendMessage{
|
||||
value: LocalNative.unwrap(deliveryCost) + setup.source.wormhole.messageFee()
|
||||
value: LocalNative.unwrap(deliveryCost)
|
||||
}(message, setup.targetChain, gasLimit, receiverValue);
|
||||
}
|
||||
|
||||
|
@ -413,7 +413,7 @@ contract WormholeRelayerTests is Test {
|
|||
(LocalNative forwardDeliveryCost,) = setup.target.coreRelayer.quoteEVMDeliveryPrice(
|
||||
setup.sourceChain, TargetNative.wrap(0), REASONABLE_GAS_LIMIT
|
||||
);
|
||||
uint256 neededReceiverValue = forwardDeliveryCost.unwrap() + setup.target.wormhole.messageFee();
|
||||
uint256 neededReceiverValue = forwardDeliveryCost.unwrap();
|
||||
vm.assume(neededReceiverValue <= type(uint128).max);
|
||||
if (forwardShouldSucceed) {
|
||||
vm.assume(receiverValue >= neededReceiverValue);
|
||||
|
@ -426,7 +426,7 @@ contract WormholeRelayerTests is Test {
|
|||
);
|
||||
|
||||
sequence = setup.source.integration.sendMessageWithForwardedResponse{
|
||||
value: deliveryCost.unwrap() + setup.source.wormhole.messageFee()
|
||||
value: deliveryCost.unwrap()
|
||||
}(message, forwardedMessage, setup.targetChain, gasLimit, receiverValue);
|
||||
}
|
||||
|
||||
|
@ -441,7 +441,7 @@ contract WormholeRelayerTests is Test {
|
|||
setup.targetChain, TargetNative.wrap(receiverValue), Gas.wrap(gasLimit)
|
||||
);
|
||||
|
||||
setup.source.integration.resend{value: newDeliveryCost.unwrap() + setup.source.wormhole.messageFee()}(
|
||||
setup.source.integration.resend{value: newDeliveryCost.unwrap()}(
|
||||
setup.sourceChain, sequence, setup.targetChain, gasLimit, receiverValue
|
||||
);
|
||||
}
|
||||
|
@ -582,8 +582,7 @@ contract WormholeRelayerTests is Test {
|
|||
setup.targetChain, TargetNative.wrap(0), REASONABLE_GAS_LIMIT
|
||||
);
|
||||
|
||||
uint256 receiverValue = firstForwardDeliveryCost.unwrap() + secondForwardDeliveryCost.unwrap()
|
||||
+ 2 * setup.target.wormhole.messageFee();
|
||||
uint256 receiverValue = firstForwardDeliveryCost.unwrap() + secondForwardDeliveryCost.unwrap();
|
||||
vm.assume(receiverValue <= type(uint128).max);
|
||||
|
||||
(LocalNative deliveryCost,) = setup.source.coreRelayer.quoteEVMDeliveryPrice(
|
||||
|
@ -593,7 +592,7 @@ contract WormholeRelayerTests is Test {
|
|||
vm.recordLogs();
|
||||
|
||||
setup.source.integration.sendMessageWithMultiForwardedResponse{
|
||||
value: deliveryCost.unwrap() + feeParams.wormholeFeeOnSource
|
||||
value: deliveryCost.unwrap()
|
||||
}(
|
||||
message,
|
||||
forwardedMessage,
|
||||
|
@ -710,7 +709,7 @@ contract WormholeRelayerTests is Test {
|
|||
setupFundsCorrectTest(gasParams, feeParams, 170000);
|
||||
|
||||
setup.source.integration.sendMessageWithRefund{
|
||||
value: test.deliveryPrice + feeParams.wormholeFeeOnSource
|
||||
value: test.deliveryPrice
|
||||
}(
|
||||
bytes("Hello!"),
|
||||
setup.targetChain,
|
||||
|
@ -736,7 +735,7 @@ contract WormholeRelayerTests is Test {
|
|||
test.destinationAmount == test.receiverValue, "Receiver value was sent to the contract"
|
||||
);
|
||||
assertTrue(
|
||||
test.rewardAddressAmount == test.deliveryPrice, "Reward address was paid correctly"
|
||||
test.rewardAddressAmount + feeParams.wormholeFeeOnSource == test.deliveryPrice, "Reward address was paid correctly"
|
||||
);
|
||||
|
||||
test.gasAmount = uint32(
|
||||
|
@ -767,7 +766,7 @@ contract WormholeRelayerTests is Test {
|
|||
setupFundsCorrectTest(gasParams, feeParams, 0);
|
||||
|
||||
setup.source.integration.sendMessageWithRefund{
|
||||
value: test.deliveryPrice + feeParams.wormholeFeeOnSource
|
||||
value: test.deliveryPrice
|
||||
}(
|
||||
bytes("Hello!"),
|
||||
setup.targetChain,
|
||||
|
@ -791,7 +790,7 @@ contract WormholeRelayerTests is Test {
|
|||
assertTrue(test.targetContractBalance == address(setup.target.coreRelayer).balance);
|
||||
assertTrue(test.destinationAmount == 0, "No receiver value was sent to the contract");
|
||||
assertTrue(
|
||||
test.rewardAddressAmount == test.deliveryPrice, "Reward address was paid correctly"
|
||||
test.rewardAddressAmount + feeParams.wormholeFeeOnSource == test.deliveryPrice, "Reward address was paid correctly"
|
||||
);
|
||||
assertTrue(test.refundAddressAmount == test.receiverValue, "Receiver value was refunded");
|
||||
assertTrue(
|
||||
|
@ -811,7 +810,7 @@ contract WormholeRelayerTests is Test {
|
|||
setup.target.deliveryProvider.updateSupportedChain(1, false);
|
||||
|
||||
setup.source.integration.sendMessageWithForwardedResponse{
|
||||
value: test.deliveryPrice + feeParams.wormholeFeeOnSource
|
||||
value: test.deliveryPrice
|
||||
}(
|
||||
bytes("Hello!"),
|
||||
bytes("Forwarded Message"),
|
||||
|
@ -836,7 +835,7 @@ contract WormholeRelayerTests is Test {
|
|||
assertTrue(test.targetContractBalance == address(setup.target.coreRelayer).balance);
|
||||
assertTrue(test.destinationAmount == 0, "No receiver value was sent to the contract");
|
||||
assertTrue(
|
||||
test.rewardAddressAmount == test.deliveryPrice, "Reward address was paid correctly"
|
||||
test.rewardAddressAmount + feeParams.wormholeFeeOnSource == test.deliveryPrice, "Reward address was paid correctly"
|
||||
);
|
||||
test.gasAmount = uint32(
|
||||
gasParams.targetGasLimit
|
||||
|
@ -868,14 +867,14 @@ contract WormholeRelayerTests is Test {
|
|||
(LocalNative forwardDeliveryCost,) = setup.target.coreRelayer.quoteEVMDeliveryPrice(
|
||||
setup.sourceChain, TargetNative.wrap(0), REASONABLE_GAS_LIMIT
|
||||
);
|
||||
uint256 receiverValue = forwardDeliveryCost.unwrap() + setup.target.wormhole.messageFee();
|
||||
uint256 receiverValue = forwardDeliveryCost.unwrap();
|
||||
vm.assume(receiverValue <= type(uint128).max);
|
||||
vm.assume(feeParams.receiverValueTarget >= receiverValue);
|
||||
|
||||
uint256 rewardAddressBalanceTarget = setup.target.rewardAddress.balance;
|
||||
|
||||
setup.source.integration.sendMessageWithForwardedResponse{
|
||||
value: test.deliveryPrice + feeParams.wormholeFeeOnSource
|
||||
value: test.deliveryPrice
|
||||
}(
|
||||
bytes("Hello!"),
|
||||
bytes("Forwarded Message!"),
|
||||
|
@ -916,7 +915,7 @@ contract WormholeRelayerTests is Test {
|
|||
assertTrue(test.refundAddressAmount == 0, "All refund amount was forwarded");
|
||||
assertTrue(test.destinationAmount == 0, "All receiver amount was sent to forward");
|
||||
assertTrue(
|
||||
test.rewardAddressAmount == test.deliveryPrice,
|
||||
test.rewardAddressAmount + feeParams.wormholeFeeOnSource == test.deliveryPrice,
|
||||
"Source reward address was paid correctly"
|
||||
);
|
||||
|
||||
|
@ -961,12 +960,12 @@ contract WormholeRelayerTests is Test {
|
|||
|
||||
(LocalNative forwardDeliveryCost,) =
|
||||
setup.target.coreRelayer.quoteEVMDeliveryPrice(setup.sourceChain, TargetNative.wrap(0), REASONABLE_GAS_LIMIT);
|
||||
uint256 receiverValue = forwardDeliveryCost.unwrap() + setup.target.wormhole.messageFee();
|
||||
uint256 receiverValue = forwardDeliveryCost.unwrap();
|
||||
vm.assume(receiverValue <= type(uint128).max);
|
||||
vm.assume(feeParams.receiverValueTarget < receiverValue);
|
||||
|
||||
setup.source.integration.sendMessageWithForwardedResponse{
|
||||
value: test.deliveryPrice + feeParams.wormholeFeeOnSource
|
||||
value: test.deliveryPrice
|
||||
}(
|
||||
bytes("Hello!"),
|
||||
bytes("Forwarded Message!"),
|
||||
|
@ -1002,7 +1001,7 @@ contract WormholeRelayerTests is Test {
|
|||
);
|
||||
assertTrue(test.destinationAmount == 0, "No receiver value was sent to contract");
|
||||
assertTrue(
|
||||
test.rewardAddressAmount == test.deliveryPrice,
|
||||
test.rewardAddressAmount + feeParams.wormholeFeeOnSource == test.deliveryPrice,
|
||||
"Source reward address was paid correctly"
|
||||
);
|
||||
|
||||
|
@ -1038,7 +1037,7 @@ contract WormholeRelayerTests is Test {
|
|||
setup.source.coreRelayer.quoteEVMDeliveryPrice(setup.targetChain, TargetNative.wrap(0), TOO_LOW_GAS_LIMIT);
|
||||
|
||||
uint64 sequence = setup.source.integration.sendMessageWithRefund{
|
||||
value: notEnoughDeliveryPrice.unwrap() + feeParams.wormholeFeeOnSource
|
||||
value: notEnoughDeliveryPrice.unwrap()
|
||||
}(
|
||||
bytes("Hello!"),
|
||||
setup.targetChain,
|
||||
|
@ -1056,7 +1055,7 @@ contract WormholeRelayerTests is Test {
|
|||
|
||||
//call a resend for the orignal message
|
||||
setup.source.integration.resend{
|
||||
value: test.deliveryPrice + setup.source.wormhole.messageFee()
|
||||
value: test.deliveryPrice
|
||||
}(
|
||||
setup.sourceChain,
|
||||
sequence,
|
||||
|
@ -1084,7 +1083,7 @@ contract WormholeRelayerTests is Test {
|
|||
"Receiver value was sent to the contract"
|
||||
);
|
||||
assertTrue(
|
||||
test.rewardAddressAmount == test.deliveryPrice, "Reward address was paid correctly"
|
||||
test.rewardAddressAmount + feeParams.wormholeFeeOnSource == test.deliveryPrice, "Reward address was paid correctly"
|
||||
);
|
||||
test.gasAmount = uint32(
|
||||
gasParams.targetGasLimit - test.refundAddressAmount / test.targetChainRefundPerGasUnused
|
||||
|
@ -1116,7 +1115,7 @@ contract WormholeRelayerTests is Test {
|
|||
uint256 refundAddressBalance = setup.source.refundAddress.balance;
|
||||
|
||||
setup.source.integration.sendMessageWithRefund{
|
||||
value: test.deliveryPrice + feeParams.wormholeFeeOnSource
|
||||
value: test.deliveryPrice
|
||||
}(
|
||||
bytes("Hello!"),
|
||||
setup.targetChain,
|
||||
|
@ -1133,7 +1132,7 @@ contract WormholeRelayerTests is Test {
|
|||
genericRelayer.relay(setup.targetChain);
|
||||
|
||||
assertTrue(
|
||||
test.deliveryPrice == setup.source.rewardAddress.balance - test.rewardAddressBalance,
|
||||
test.deliveryPrice == setup.source.rewardAddress.balance - test.rewardAddressBalance + feeParams.wormholeFeeOnSource,
|
||||
"The source to target relayer's reward address was paid appropriately"
|
||||
);
|
||||
|
||||
|
@ -1198,7 +1197,7 @@ contract WormholeRelayerTests is Test {
|
|||
setup.target.deliveryProvider.updateSupportedChain(setup.sourceChain, false);
|
||||
vm.assume(test.targetChainRefundPerGasUnused * REASONABLE_GAS_LIMIT.unwrap() >= feeParams.wormholeFeeOnTarget + uint256(1) * gasParams.evmGasOverhead * gasParams.sourceGasPrice * (uint256(feeParams.sourceNativePrice) / feeParams.targetNativePrice + 1));
|
||||
|
||||
setup.source.integration.sendMessageWithRefund{value: test.deliveryPrice + feeParams.wormholeFeeOnSource}(
|
||||
setup.source.integration.sendMessageWithRefund{value: test.deliveryPrice}(
|
||||
bytes("Hello!"),
|
||||
setup.targetChain,
|
||||
gasParams.targetGasLimit,
|
||||
|
@ -1213,7 +1212,7 @@ contract WormholeRelayerTests is Test {
|
|||
|
||||
assertTrue(
|
||||
test.deliveryPrice
|
||||
== setup.source.rewardAddress.balance - test.rewardAddressBalance,
|
||||
== setup.source.rewardAddress.balance - test.rewardAddressBalance + feeParams.wormholeFeeOnSource,
|
||||
"The source to target relayer's reward address was paid appropriately"
|
||||
);
|
||||
|
||||
|
@ -1241,7 +1240,7 @@ contract WormholeRelayerTests is Test {
|
|||
setupFundsCorrectTest(gasParams, feeParams, 170000);
|
||||
vm.assume(uint256(1) * gasParams.evmGasOverhead * gasParams.sourceGasPrice * feeParams.sourceNativePrice > uint256(1) * feeParams.targetNativePrice * test.targetChainRefundPerGasUnused * gasParams.targetGasLimit);
|
||||
|
||||
setup.source.integration.sendMessageWithRefund{value: test.deliveryPrice + feeParams.wormholeFeeOnSource}(
|
||||
setup.source.integration.sendMessageWithRefund{value: test.deliveryPrice}(
|
||||
bytes("Hello!"),
|
||||
setup.targetChain,
|
||||
gasParams.targetGasLimit,
|
||||
|
@ -1256,7 +1255,7 @@ contract WormholeRelayerTests is Test {
|
|||
|
||||
assertTrue(
|
||||
test.deliveryPrice
|
||||
== setup.source.rewardAddress.balance - test.rewardAddressBalance,
|
||||
== setup.source.rewardAddress.balance - test.rewardAddressBalance + feeParams.wormholeFeeOnSource,
|
||||
"The source to target relayer's reward address was paid appropriately"
|
||||
);
|
||||
|
||||
|
@ -1311,7 +1310,7 @@ contract WormholeRelayerTests is Test {
|
|||
.coreRelayer
|
||||
.quoteEVMDeliveryPrice(setup.targetChain, TargetNative.wrap(params.receiverValue), Gas.wrap(params.gasLimit));
|
||||
uint256 value =
|
||||
deliveryCost.unwrap() + feeParams.wormholeFeeOnSource + params.paymentForExtraReceiverValue;
|
||||
deliveryCost.unwrap() + params.paymentForExtraReceiverValue;
|
||||
setup.source.integration.sendToEvm{value: value}(
|
||||
setup.targetChain,
|
||||
params.targetAddress,
|
||||
|
@ -1378,7 +1377,7 @@ contract WormholeRelayerTests is Test {
|
|||
.source
|
||||
.coreRelayer
|
||||
.quoteEVMDeliveryPrice(setup.targetChain, TargetNative.wrap(params.newReceiverValue), Gas.wrap(params.newGasLimit));
|
||||
uint256 value = deliveryCost.unwrap() + feeParams.wormholeFeeOnSource;
|
||||
uint256 value = deliveryCost.unwrap();
|
||||
vm.deal(params.senderAddress, value);
|
||||
vm.prank(params.senderAddress);
|
||||
setup.source.coreRelayer.resendToEvm{value: value}(
|
||||
|
@ -1763,7 +1762,6 @@ contract WormholeRelayerTests is Test {
|
|||
setup.targetChain, TargetNative.wrap(0), Gas.wrap(gasParams.targetGasLimit)
|
||||
);
|
||||
stack.payment = payment_.unwrap();
|
||||
stack.payment += setup.source.wormhole.messageFee();
|
||||
|
||||
uint64 sequence = setup.source.wormhole.publishMessage{value: feeParams.wormholeFeeOnSource}(
|
||||
1, bytes(""), 200
|
||||
|
@ -1995,12 +1993,12 @@ contract WormholeRelayerTests is Test {
|
|||
vm.expectRevert(
|
||||
abi.encodeWithSelector(
|
||||
InvalidMsgValue.selector,
|
||||
deliveryCost.unwrap() + feeParams.wormholeFeeOnSource - 1,
|
||||
deliveryCost.unwrap() + feeParams.wormholeFeeOnSource
|
||||
deliveryCost.unwrap() - 1,
|
||||
deliveryCost.unwrap()
|
||||
)
|
||||
);
|
||||
setup.source.integration.sendMessage{
|
||||
value: deliveryCost.unwrap() + feeParams.wormholeFeeOnSource - 1
|
||||
value: deliveryCost.unwrap() - 1
|
||||
}(message, setup.targetChain, gasParams.targetGasLimit, 0);
|
||||
}
|
||||
|
||||
|
@ -2021,12 +2019,12 @@ contract WormholeRelayerTests is Test {
|
|||
vm.expectRevert(
|
||||
abi.encodeWithSelector(
|
||||
InvalidMsgValue.selector,
|
||||
deliveryCost.unwrap() + feeParams.wormholeFeeOnSource + 1,
|
||||
deliveryCost.unwrap() + feeParams.wormholeFeeOnSource
|
||||
deliveryCost.unwrap() + 1,
|
||||
deliveryCost.unwrap()
|
||||
)
|
||||
);
|
||||
setup.source.integration.sendMessage{
|
||||
value: deliveryCost.unwrap() + feeParams.wormholeFeeOnSource + 1
|
||||
value: deliveryCost.unwrap() + 1
|
||||
}(message, setup.targetChain, gasParams.targetGasLimit, 0);
|
||||
}
|
||||
|
||||
|
@ -2052,7 +2050,7 @@ contract WormholeRelayerTests is Test {
|
|||
)
|
||||
);
|
||||
setup.source.integration.sendMessage{
|
||||
value: deliveryCost.unwrap() + feeParams.wormholeFeeOnSource - 1
|
||||
value: deliveryCost.unwrap() - 1
|
||||
}(message, 32, gasParams.targetGasLimit, 0);
|
||||
}
|
||||
|
||||
|
@ -2088,7 +2086,7 @@ contract WormholeRelayerTests is Test {
|
|||
(LocalNative deliveryCost,) =
|
||||
setup.source.coreRelayer.quoteEVMDeliveryPrice(setup.targetChain, TargetNative.wrap(0), Gas.wrap(0));
|
||||
|
||||
setup.source.coreRelayer.sendToEvm{value: deliveryCost.unwrap() + feeParams.wormholeFeeOnSource}(
|
||||
setup.source.coreRelayer.sendToEvm{value: deliveryCost.unwrap()}(
|
||||
setup.targetChain,
|
||||
address(0x0),
|
||||
bytes(""),
|
||||
|
@ -2135,7 +2133,7 @@ contract WormholeRelayerTests is Test {
|
|||
(LocalNative forwardDeliveryCost,) = setup.target.coreRelayer.quoteEVMDeliveryPrice(
|
||||
setup.sourceChain, TargetNative.wrap(0), REASONABLE_GAS_LIMIT
|
||||
);
|
||||
uint256 receiverValue = forwardDeliveryCost.unwrap() + setup.target.wormhole.messageFee();
|
||||
uint256 receiverValue = forwardDeliveryCost.unwrap();
|
||||
vm.assume(receiverValue <= type(uint128).max);
|
||||
|
||||
(LocalNative deliveryCost,) = setup.source.coreRelayer.quoteEVMDeliveryPrice(
|
||||
|
@ -2143,7 +2141,7 @@ contract WormholeRelayerTests is Test {
|
|||
);
|
||||
|
||||
setup.source.coreRelayer.sendPayloadToEvm{
|
||||
value: deliveryCost.unwrap() + feeParams.wormholeFeeOnSource
|
||||
value: deliveryCost.unwrap()
|
||||
}(
|
||||
setup.targetChain,
|
||||
address(forwardTester),
|
||||
|
@ -2316,7 +2314,7 @@ contract WormholeRelayerTests is Test {
|
|||
// The attacker requests the message to be sent to the malicious contract.
|
||||
// It is critical that the refund and destination (aka integrator) addresses are the same.
|
||||
setup.source.coreRelayer.sendPayloadToEvm{
|
||||
value: deliveryPrice.unwrap() + setup.source.wormhole.messageFee()
|
||||
value: deliveryPrice.unwrap()
|
||||
}(setup.targetChain, address(attackerContract), attackMsg, TargetNative.wrap(0), Gas.wrap(gasParams.targetGasLimit), setup.targetChain, address(attackerContract));
|
||||
|
||||
// The relayer triggers the call to the malicious contract.
|
||||
|
@ -2336,7 +2334,7 @@ contract WormholeRelayerTests is Test {
|
|||
// We will reutilize the delivery price estimated for the attacker to simplify the code here.
|
||||
// The victim requests their message to be sent.
|
||||
setup.source.coreRelayer.sendPayloadToEvm{
|
||||
value: deliveryPrice.unwrap() + setup.source.wormhole.messageFee()
|
||||
value: deliveryPrice.unwrap()
|
||||
}(
|
||||
setup.targetChain,
|
||||
address(setup.target.integration),
|
||||
|
|
|
@ -50,7 +50,7 @@ contract WormholeRelayerGovernanceTests is Test {
|
|||
function setUp() public {
|
||||
helpers = new TestHelpers();
|
||||
(wormhole, wormholeSimulator) = helpers.setUpWormhole(1);
|
||||
deliveryProvider = helpers.setUpDeliveryProvider(1, address(wormhole));
|
||||
deliveryProvider = helpers.setUpDeliveryProvider(1);
|
||||
wormholeRelayer = helpers.setUpWormholeRelayer(wormhole, address(deliveryProvider));
|
||||
}
|
||||
|
||||
|
@ -99,8 +99,8 @@ contract WormholeRelayerGovernanceTests is Test {
|
|||
}
|
||||
|
||||
function testSetDefaultDeliveryProvider() public {
|
||||
IDeliveryProvider deliveryProviderB = helpers.setUpDeliveryProvider(1, address(wormhole));
|
||||
IDeliveryProvider deliveryProviderC = helpers.setUpDeliveryProvider(1, address(wormhole));
|
||||
IDeliveryProvider deliveryProviderB = helpers.setUpDeliveryProvider(1);
|
||||
IDeliveryProvider deliveryProviderC = helpers.setUpDeliveryProvider(1);
|
||||
|
||||
bytes memory signed = signMessage(
|
||||
abi.encodePacked(
|
||||
|
@ -189,7 +189,7 @@ contract WormholeRelayerGovernanceTests is Test {
|
|||
relayerModule,
|
||||
uint8(2),
|
||||
uint16(1),
|
||||
toWormholeFormat(address(new DeliveryProviderImplementation(address(wormhole))))
|
||||
toWormholeFormat(address(new DeliveryProviderImplementation()))
|
||||
)
|
||||
);
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ export async function deployDeliveryProviderImplementation(
|
|||
bytecode,
|
||||
signer
|
||||
);
|
||||
const contract = await factory.deploy(chain.wormholeAddress);
|
||||
const contract = await factory.deploy();
|
||||
return await contract.deployed().then((result) => {
|
||||
console.log("Successfully deployed contract at " + result.address);
|
||||
return { address: result.address, chainId: chain.chainId };
|
||||
|
|
Loading…
Reference in New Issue