Merge branch 'relayer/merge-into-wormhole-ethereum' into relayer/address-drew-review

This commit is contained in:
derpy-duck 2023-06-09 10:13:44 -04:00 committed by GitHub
commit e64a9755fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 68 additions and 109 deletions

View File

@ -8,23 +8,21 @@ pragma solidity ^0.8.0;
interface IWormholeReceiver {
/**
* @notice When a `send` is performed with this contract as the target, this function will be
* invoked.
* To get the address that will invoke this contract, call the `getDeliveryAddress()` function
* on this chain (the target chain)'s WormholeRelayer contract
* invoked by the WormholeRelayer contract
*
* NOTE: This function should be restricted such that only `getDeliveryAddress()` can call it.
* NOTE: This function should be restricted such that only the Wormhole Relayer contract can call it.
*
* We also recommend that this function:
* - Stores all received `deliveryData.deliveryHash`s in a mapping `(bytes32 => bool)`, and
* on every call, checks that deliveryData.deliveryHash has not already been stored in the
* - Stores all received `deliveryHash`s in a mapping `(bytes32 => bool)`, and
* on every call, checks that deliveryHash has not already been stored in the
* map (This is to prevent other users maliciously trying to relay the same message)
* - Checks that `deliveryData.sourceChain` and `deliveryData.sourceAddress` are indeed who
* - Checks that `sourceChain` and `sourceAddress` are indeed who
* you expect to have requested the calling of `send` or `forward` on the source chain
*
* The invocation of this function corresponding to the `send` request will have msg.value equal
* to the receiverValue specified in the send request.
*
* If the invocation of this function reverts or exceeds the gas limit (`maxTransactionFee`)
* If the invocation of this function reverts or exceeds the gas limit
* specified by the send requester, this delivery will result in a `ReceiverFailure`.
*
* @param payload - an arbitrary message which was included in the delivery by the

View File

@ -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,
@ -120,10 +114,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 (LocalNative nativePriceQuote) {
Gas overhead = deliverGasOverhead(targetChain);

View File

@ -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
}

View File

@ -528,7 +528,7 @@ abstract contract WormholeRelayerSend is WormholeRelayerBase, IWormholeRelayerSe
targetChain, receiverValue, encodedExecutionParameters
);
encodedExecutionInfo = _encodedExecutionInfo;
nativePriceQuote = deliveryPrice;
nativePriceQuote = deliveryPrice + getWormholeMessageFee();
}
function quoteNativeForChain(

View File

@ -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,

View File

@ -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),

View File

@ -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

View File

@ -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),

View File

@ -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,25 +1132,25 @@ 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"
);
uint256 amountToGetInRefundTarget =
(setup.target.rewardAddress.balance - refundRewardAddressBalance);
vm.assume(amountToGetInRefundTarget > 0);
uint256 refundSource;
(LocalNative baseFee,) = setup.target.coreRelayer.quoteEVMDeliveryPrice(setup.sourceChain, TargetNative.wrap(0), Gas.wrap(0));
vm.assume(amountToGetInRefundTarget > baseFee.unwrap());
if (amountToGetInRefundTarget > baseFee.unwrap()) {
TargetNative tmp = setup.target.coreRelayer.quoteNativeForChain(
setup.sourceChain,
LocalNative.wrap(amountToGetInRefundTarget - baseFee.unwrap()),
LocalNative.wrap(amountToGetInRefundTarget + feeParams.wormholeFeeOnTarget - baseFee.unwrap()),
setup.target.coreRelayer.getDefaultDeliveryProvider()
);
refundSource = tmp.unwrap();
}
// Calculate amount that must have been spent on gas, by reverse engineering from the amount that was paid to the provider's reward address on the target chain
test.gasAmount = uint32(
@ -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}(
@ -1765,7 +1764,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
@ -1999,12 +1997,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);
}
@ -2025,12 +2023,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);
}
@ -2056,7 +2054,7 @@ contract WormholeRelayerTests is Test {
)
);
setup.source.integration.sendMessage{
value: deliveryCost.unwrap() + feeParams.wormholeFeeOnSource - 1
value: deliveryCost.unwrap() - 1
}(message, 32, gasParams.targetGasLimit, 0);
}
@ -2092,7 +2090,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(""),
@ -2128,8 +2126,7 @@ contract WormholeRelayerTests is Test {
function executeForwardTest(
ForwardTester.Action test,
IWormholeRelayerDelivery.DeliveryStatus desiredOutcome,
StandardSetupTwoChains memory setup,
FeeParameters memory feeParams
StandardSetupTwoChains memory setup
) internal {
vm.recordLogs();
forwardTester =
@ -2139,7 +2136,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(
@ -2147,7 +2144,7 @@ contract WormholeRelayerTests is Test {
);
setup.source.coreRelayer.sendPayloadToEvm{
value: deliveryCost.unwrap() + feeParams.wormholeFeeOnSource
value: deliveryCost.unwrap()
}(
setup.targetChain,
address(forwardTester),
@ -2169,8 +2166,7 @@ contract WormholeRelayerTests is Test {
executeForwardTest(
ForwardTester.Action.WorksCorrectly,
IWormholeRelayerDelivery.DeliveryStatus.FORWARD_REQUEST_SUCCESS,
setup,
feeParams
setup
);
}
@ -2201,8 +2197,7 @@ contract WormholeRelayerTests is Test {
executeForwardTest(
ForwardTester.Action.ForwardRequestFromWrongAddress,
IWormholeRelayerDelivery.DeliveryStatus.RECEIVER_FAILURE,
setup,
feeParams
setup
);
}
@ -2215,8 +2210,7 @@ contract WormholeRelayerTests is Test {
executeForwardTest(
ForwardTester.Action.ReentrantCall,
IWormholeRelayerDelivery.DeliveryStatus.RECEIVER_FAILURE,
setup,
feeParams
setup
);
}
@ -2230,8 +2224,7 @@ contract WormholeRelayerTests is Test {
executeForwardTest(
ForwardTester.Action.ProviderNotSupported,
IWormholeRelayerDelivery.DeliveryStatus.RECEIVER_FAILURE,
setup,
feeParams
setup
);
}
@ -2322,7 +2315,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.
@ -2342,7 +2335,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),

View File

@ -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(
@ -184,7 +184,7 @@ contract WormholeRelayerGovernanceTests is Test {
relayerModule,
uint8(2),
uint16(1),
toWormholeFormat(address(new DeliveryProviderImplementation(address(wormhole))))
toWormholeFormat(address(new DeliveryProviderImplementation()))
)
);

View File

@ -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 };