Skip to content

Commit

Permalink
Merge pull request #5 from crosschain-alliance/feat/hashi-integration…
Browse files Browse the repository at this point in the history
…-amb-resend-hashi-message

feat: add possibility to resend an hashi message [AMB]
  • Loading branch information
allemanfredi authored Jun 20, 2024
2 parents 24be92c + 7222997 commit a993f15
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 12 deletions.
31 changes: 20 additions & 11 deletions contracts/upgradeable_contracts/BasicBridge.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ pragma solidity 0.4.24;
import "./Upgradeable.sol";
import "./InitializableBridge.sol";
import "openzeppelin-solidity/contracts/AddressUtils.sol";
import "../libraries/ArbitraryMessage.sol";
import "./Validatable.sol";
import "./Ownable.sol";
import "./Claimable.sol";
Expand Down Expand Up @@ -81,20 +80,30 @@ contract BasicBridge is
boolStorage[keccak256(abi.encodePacked("messagesApprovedByHashi", msgId))] = status;
}

function _maybeRelayDataWithHashi(bytes data) internal {
function resendDataWithHashi(bytes data) external {
require(boolStorage[keccak256(data)]);
_dispatchMessageWithHashi(data);
}

function _maybeSendDataWithHashi(bytes data) internal {
if (HASHI_IS_ENABLED) {
IHashiManager manager = hashiManager();
IYaho(manager.yaho()).dispatchMessage(
manager.targetChainId(),
manager.threshold(),
manager.targetAddress(),
data,
manager.reporters(),
manager.adapters()
);
boolStorage[keccak256(data)] = true;
_dispatchMessageWithHashi(data);
}
}

function _dispatchMessageWithHashi(bytes data) internal {
IHashiManager manager = hashiManager();
IYaho(manager.yaho()).dispatchMessage(
manager.targetChainId(),
manager.threshold(),
manager.targetAddress(),
data,
manager.reporters(),
manager.adapters()
);
}

function _validateHashiMessage(uint256 chainId, uint256 threshold, address sender, address[] adapters) internal {
IHashiManager manager = hashiManager();
require(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ contract BasicForeignAMB is BasicAMB, MessageRelay, MessageDelivery {
) external returns (bytes) {
_validateHashiMessage(chainId, threshold, sender, adapters);
(bytes32 msgId, ) = ArbitraryMessage.unpackData(data);
require(!isApprovedByHashi(msgId));
_setHashiApprovalForMessage(msgId, true);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ contract BasicHomeAMB is BasicAMB, MessageDelivery {
) external returns (bytes) {
_validateHashiMessage(chainId, threshold, sender, adapters);
(bytes32 msgId, ) = ArbitraryMessage.unpackData(data);
require(!isApprovedByHashi(msgId));
_setHashiApprovalForMessage(msgId, true);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ contract MessageDelivery is BasicAMB, MessageProcessor {
bytes memory eventData = abi.encodePacked(header, _data);

emitEventOnMessageRequest(_messageId, eventData);
_maybeRelayDataWithHashi(eventData);
_maybeSendDataWithHashi(eventData);

return _messageId;
}
Expand Down

0 comments on commit a993f15

Please sign in to comment.