Skip to content

Commit a76e726

Browse files
committed
delete-txMsg
1 parent 06346be commit a76e726

19 files changed

+111
-121
lines changed

src/core/Authenticator.sol

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,6 @@ abstract contract Authenticator is IAuthenticator, TxAuthManagerBase, TxManagerB
3636
Account.Data[] memory accounts = _buildLocalAccounts(msg_.signers);
3737

3838
bool completed = _sign(txID, accounts);
39-
if (completed) {
40-
_runTxIfCompleted(txID);
41-
}
4239

4340
emit TxSigned(msg.sender, txID, AuthType.AuthMode.AUTH_MODE_LOCAL);
4441

@@ -50,10 +47,7 @@ abstract contract Authenticator is IAuthenticator, TxAuthManagerBase, TxManagerB
5047

5148
_verifySignatures(txID, msg_.signers);
5249

53-
bool completed = _sign(txID, msg_.signers);
54-
if (completed) {
55-
_runTxIfCompleted(txID);
56-
}
50+
_sign(txID, msg_.signers);
5751

5852
emit TxSigned(msg.sender, txID, AuthType.AuthMode.AUTH_MODE_EXTENSION);
5953

src/core/Coordinator.sol

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,39 @@ pragma solidity ^0.8.20;
33

44
import {ICoordinator} from "./ICoordinator.sol";
55
import {TxManagerBase} from "./TxManagerBase.sol";
6+
import {TxAuthManagerBase} from "./TxAuthManagerBase.sol";
67
import {ICrossError} from "./ICrossError.sol";
8+
import {ICrossEvent} from "./ICrossEvent.sol";
79

810
import {
911
QueryCoordinatorStateRequest,
1012
QueryCoordinatorStateResponse,
1113
CoordinatorState
1214
} from "../proto/cross/core/atomic/simple/AtomicSimple.sol";
15+
import {MsgInitiateTx} from "../proto/cross/core/initiator/Initiator.sol";
16+
17+
abstract contract Coordinator is ICoordinator, TxAuthManagerBase, TxManagerBase, ICrossError, ICrossEvent {
18+
function executeTx(MsgInitiateTx.Data calldata msg_) external override {
19+
uint64 rh = msg_.timeout_height.revision_height;
20+
if (rh != 0 && (block.number + 1 > uint256(rh))) {
21+
revert MessageTimeoutHeight(block.number, rh);
22+
}
23+
// slither-disable-next-line timestamp
24+
if (msg_.timeout_timestamp > 0 && (block.timestamp + 1 > msg_.timeout_timestamp)) {
25+
revert MessageTimeoutTimestamp(block.timestamp, msg_.timeout_timestamp);
26+
}
27+
28+
bytes32 txIDHash = sha256(MsgInitiateTx.encode(msg_));
29+
30+
if (!_isTxRecorded(txIDHash)) revert TxIDNotFound(txIDHash);
31+
32+
if (!_isCompletedAuth(txIDHash)) revert AuthNotCompleted(txIDHash);
33+
34+
_runTxIfCompleted(msg_);
35+
36+
emit TxExecuted(abi.encodePacked(txIDHash), msg.sender);
37+
}
1338

14-
abstract contract Coordinator is TxManagerBase, ICoordinator, ICrossError {
1539
function coordinatorState(QueryCoordinatorStateRequest.Data calldata req)
1640
external
1741
view

src/core/CrossStore.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ abstract contract CrossStore {
3030
}
3131

3232
struct TxStorage {
33-
mapping(bytes32 => MsgInitiateTx.Data) txMsg;
33+
mapping(bytes32 => Account.Data[]) txCoordSigners;
3434
mapping(bytes32 => MsgInitiateTxResponse.InitiateTxStatus) txStatus;
3535
mapping(bytes32 => mapping(uint256 => ContractTransactionState.Data)) states;
3636
IContractModule contractModule;

src/core/DelegatedLogicHandler.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,8 @@ abstract contract DelegatedLogicHandler is TxAuthManagerBase, TxManagerBase, Pac
100100
_delegateWithData(TX_MANAGER, abi.encodeWithSelector(ITxManager.createTx.selector, txID, src));
101101
}
102102

103-
function _runTxIfCompleted(bytes32 txID) internal virtual override {
104-
_delegateWithData(TX_MANAGER, abi.encodeWithSelector(ITxManager.runTxIfCompleted.selector, txID));
103+
function _runTxIfCompleted(MsgInitiateTx.Data calldata msg_) internal virtual override {
104+
_delegateWithData(TX_MANAGER, abi.encodeWithSelector(ITxManager.runTxIfCompleted.selector, msg_));
105105
}
106106

107107
function _isTxRecorded(bytes32 txID) internal view virtual override returns (bool) {

src/core/ICoordinator.sol

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@ import {
55
QueryCoordinatorStateRequest,
66
QueryCoordinatorStateResponse
77
} from "../proto/cross/core/atomic/simple/AtomicSimple.sol";
8+
import {MsgInitiateTx} from "../proto/cross/core/initiator/Initiator.sol";
89

910
interface ICoordinator {
11+
function executeTx(MsgInitiateTx.Data calldata msg_) external;
12+
1013
function coordinatorState(QueryCoordinatorStateRequest.Data calldata req)
1114
external
1215
view

src/core/ICrossError.sol

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@ interface ICrossError {
99
error MessageTimeoutHeight(uint256 blockNumber, uint64 timeoutVersionHeight);
1010
error MessageTimeoutTimestamp(uint256 blockTimestamp, uint64 timeoutTimestamp);
1111
error TxIDAlreadyExists(bytes32 txIDHash);
12+
error TxIDNotFound(bytes32 txIDHash);
1213
error AuthStateAlreadyInitialized(bytes32 txID);
1314
error IDNotFound(bytes32 txID);
1415
error InvalidTxIDLength();
1516
error InvalidSignersLength();
1617
error SignerMustEqualSender();
1718
error AuthAlreadyCompleted(bytes32 txID);
19+
error AuthNotCompleted(bytes32 txID);
1820
error TxAlreadyExists(bytes32 txID);
1921
error TxAlreadyVerified(bytes32 txID);
2022
error CoordinatorStateNotFound(bytes32 txID);

src/core/ICrossEvent.sol

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ interface ICrossEvent {
99
event OnAbort(bytes indexed txID, uint8 indexed txIndex);
1010
event TxSigned(address indexed signer, bytes32 indexed txID, AuthType.AuthMode method);
1111
event TxInitiated(bytes txID, address indexed proposer);
12+
event TxExecuted(bytes txID, address indexed proposer);
1213
}

src/core/ITxManager.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {IIBCHandler} from "@hyperledger-labs/yui-ibc-solidity/contracts/core/25-
1010
interface ITxManager {
1111
function initialize(IIBCHandler handler, IContractModule module) external;
1212
function createTx(bytes32 txID, MsgInitiateTx.Data calldata src) external;
13-
function runTxIfCompleted(bytes32 txID) external;
13+
function runTxIfCompleted(MsgInitiateTx.Data calldata msg_) external;
1414
function isTxRecorded(bytes32 txID) external view returns (bool);
1515
function getCoordinatorState(bytes32 txID) external view returns (CoordinatorState.Data memory);
1616
function handlePacket(Packet calldata packet) external returns (bytes memory acknowledgement);

src/core/Initiator.sol

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ abstract contract Initiator is IInitiator, TxAuthManagerBase, TxManagerBase, Ree
5858
emit TxInitiated(txID, msg.sender);
5959

6060
if (completed) {
61-
_runTxIfCompleted(txIDHash);
6261
return MsgInitiateTxResponse.Data({
6362
txID: txID, status: MsgInitiateTxResponse.InitiateTxStatus.INITIATE_TX_STATUS_VERIFIED
6463
});

src/core/TxAtomicSimple.sol

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ abstract contract TxAtomicSimple is
4949
uint8 private constant TX_INDEX_COORDINATOR = 0;
5050
uint8 private constant TX_INDEX_PARTICIPANT = 1;
5151

52-
function _runTx(bytes32 txID, MsgInitiateTx.Data storage msg_) internal virtual override {
52+
function _runTx(bytes32 txID, MsgInitiateTx.Data calldata msg_) internal virtual override {
5353
if (msg_.commit_protocol == Tx.CommitProtocol.COMMIT_PROTOCOL_SIMPLE) {
5454
_runSimpleProtocol(txID, msg_);
5555
} else if (msg_.commit_protocol == Tx.CommitProtocol.COMMIT_PROTOCOL_TPC) {
@@ -59,7 +59,7 @@ abstract contract TxAtomicSimple is
5959
}
6060
}
6161

62-
function _runSimpleProtocol(bytes32 txID, MsgInitiateTx.Data storage msg_) internal {
62+
function _runSimpleProtocol(bytes32 txID, MsgInitiateTx.Data calldata msg_) internal {
6363
CoordStorage storage coordStorage = _getCoordStorage();
6464
TxStorage storage txStorage = _getTxStorage();
6565

@@ -82,8 +82,8 @@ abstract contract TxAtomicSimple is
8282

8383
// --- 2. Setup Transaction & XCC ---
8484

85-
ContractTransaction.Data storage tx0 = msg_.contract_transactions[TX_INDEX_COORDINATOR];
86-
ContractTransaction.Data storage tx1 = msg_.contract_transactions[TX_INDEX_PARTICIPANT];
85+
ContractTransaction.Data calldata tx0 = msg_.contract_transactions[TX_INDEX_COORDINATOR];
86+
ContractTransaction.Data calldata tx1 = msg_.contract_transactions[TX_INDEX_PARTICIPANT];
8787

8888
// Simple protocol does not support links
8989
if (tx0.links.length > 0 || tx1.links.length > 0) {
@@ -418,11 +418,10 @@ abstract contract TxAtomicSimple is
418418
revert ModuleNotInitialized();
419419
}
420420

421-
MsgInitiateTx.Data storage msg_ = txStorage.txMsg[txID];
422-
ContractTransaction.Data storage coordTx = msg_.contract_transactions[TX_INDEX_COORDINATOR];
421+
Account.Data[] storage txCoordSigners = txStorage.txCoordSigners[txID];
423422

424423
CrossContext memory ctx =
425-
CrossContext({txID: abi.encodePacked(txID), txIndex: TX_INDEX_COORDINATOR, signers: coordTx.signers});
424+
CrossContext({txID: abi.encodePacked(txID), txIndex: TX_INDEX_COORDINATOR, signers: txCoordSigners});
426425

427426
if (isCommittable) {
428427
// Commit

0 commit comments

Comments
 (0)