relay provider proxies through itself
This commit is contained in:
parent
c4df1ecbab
commit
d49fec47cc
|
@ -6,8 +6,14 @@ pragma solidity ^0.8.0;
|
|||
import "./RelayProviderGovernance.sol";
|
||||
import "./RelayProviderStructs.sol";
|
||||
import "../interfaces/IRelayProvider.sol";
|
||||
import "../interfaces/ICoreRelayer.sol";
|
||||
|
||||
contract RelayProvider is RelayProviderGovernance, IRelayProvider {
|
||||
modifier onlyApprovedSender() {
|
||||
require(approvedSender(_msgSender()), "_msgSender() not approved");
|
||||
_;
|
||||
}
|
||||
|
||||
//Returns the delivery overhead fee required to deliver a message to targetChain, denominated in this chain's wei.
|
||||
function quoteDeliveryOverhead(uint16 targetChain) public view override returns (uint256 nativePriceQuote) {
|
||||
uint256 targetFees = deliverGasOverhead(targetChain) * gasPrice(targetChain) + wormholeFee(targetChain);
|
||||
|
@ -79,4 +85,25 @@ contract RelayProvider is RelayProviderGovernance, IRelayProvider {
|
|||
// round up
|
||||
return (sourceAmount * srcNativeCurrencyPrice + dstNativeCurrencyPrice - 1) / dstNativeCurrencyPrice;
|
||||
}
|
||||
|
||||
//Internal delivery proxies
|
||||
function redeliverSingle(ICoreRelayer.TargetRedeliveryByTxHashParamsSingle memory targetParams)
|
||||
public
|
||||
payable
|
||||
onlyApprovedSender
|
||||
returns (uint64 sequence)
|
||||
{
|
||||
ICoreRelayer cr = ICoreRelayer(coreRelayer());
|
||||
return cr.redeliverSingle{value:msg.value}(targetParams);
|
||||
}
|
||||
|
||||
function deliverSingle(ICoreRelayer.TargetDeliveryParametersSingle memory targetParams)
|
||||
public
|
||||
payable
|
||||
onlyApprovedSender
|
||||
returns (uint64 sequence)
|
||||
{
|
||||
ICoreRelayer cr = ICoreRelayer(coreRelayer());
|
||||
return cr.deliverSingle{value:msg.value}(targetParams);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,6 +24,14 @@ contract RelayProviderGetters is RelayProviderState {
|
|||
return _state.chainId;
|
||||
}
|
||||
|
||||
function coreRelayer() public view returns (address) {
|
||||
return _state.coreRelayer;
|
||||
}
|
||||
|
||||
function approvedSender(address sender) public view returns (bool) {
|
||||
return _state.approvedSenders[sender];
|
||||
}
|
||||
|
||||
function gasPrice(uint16 targetChainId) public view returns (uint128) {
|
||||
return _state.data[targetChainId].gasPrice;
|
||||
}
|
||||
|
|
|
@ -17,6 +17,18 @@ abstract contract RelayProviderGovernance is RelayProviderGetters, RelayProvider
|
|||
event RewardAddressUpdated(address indexed newAddress);
|
||||
event DeliveryAddressUpdated(uint16 indexed targetChainId, bytes32 indexed newAddress);
|
||||
event DeliverGasOverheadUpdated(uint32 indexed oldGasOverhead, uint32 indexed newGasOverhead);
|
||||
event CoreRelayerUpdated(address coreRelayer);
|
||||
event ApprovedSenderUpdated(address sender, bool approved);
|
||||
|
||||
function updateCoreRelayer(address payable newAddress) public onlyOwner {
|
||||
setCoreRelayer(newAddress);
|
||||
emit CoreRelayerUpdated(newAddress);
|
||||
}
|
||||
|
||||
function updateApprovedSender(address sender, bool approved) public onlyOwner {
|
||||
setApprovedSender(sender, approved);
|
||||
emit ApprovedSenderUpdated(sender, approved);
|
||||
}
|
||||
|
||||
function updateRewardAddress(address newAddress) public onlyOwner {
|
||||
setRewardAddress(newAddress);
|
||||
|
@ -114,4 +126,5 @@ abstract contract RelayProviderGovernance is RelayProviderGetters, RelayProvider
|
|||
require(owner() == _msgSender(), "owner() != _msgSender()");
|
||||
_;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -24,6 +24,14 @@ contract RelayProviderSetters is Context, RelayProviderState {
|
|||
_state.chainId = thisChain;
|
||||
}
|
||||
|
||||
function setCoreRelayer(address payable coreRelayer) internal {
|
||||
_state.coreRelayer = coreRelayer;
|
||||
}
|
||||
|
||||
function setApprovedSender(address sender, bool approved) internal {
|
||||
_state.approvedSenders[sender] = approved;
|
||||
}
|
||||
|
||||
function setDeliverGasOverhead(uint16 chainId, uint32 deliverGasOverhead) internal {
|
||||
_state.deliverGasOverhead[chainId] = deliverGasOverhead;
|
||||
}
|
||||
|
|
|
@ -13,12 +13,14 @@ contract RelayProviderStorage {
|
|||
uint16 chainId;
|
||||
address owner;
|
||||
address pendingOwner;
|
||||
address payable coreRelayer;
|
||||
mapping(address => bool) initializedImplementations;
|
||||
mapping(uint16 => PriceData) data;
|
||||
mapping(uint16 => uint32) deliverGasOverhead;
|
||||
mapping(uint16 => uint32) wormholeFee;
|
||||
mapping(uint16 => uint256) maximumBudget;
|
||||
mapping(uint16 => bytes32) deliveryAddressMap;
|
||||
mapping(address => bool) approvedSenders;
|
||||
address rewardAddress;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue