Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Oracle and Relayer based Message Protocol.
|------------|--------------------------------------------|
| ORMP | 0x00000000001523057a05d6293C1e5171eE33eE0A |
| Oracle | 0x00000000046bc530804d66B6b64f7aF69B4E4E81 |
| ORMPOracle | 0x000000000DA67291724858F7e759A43B2d23225e |
| ORMPOracle | 0x0000000003ebeF32D8f0ED406a5CA8805c80AFba |
| Relayer | 0x0000000000808fE9bDCc1d180EfbF5C53552a6b1 |
| MsgDAO | 0x000000000879926D12aF396788C0785B7e581e53 |

Expand Down
5 changes: 2 additions & 3 deletions bin/deploy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ set -eo pipefail
# forge script script/deploy/Deploy.s.sol:Deploy --chain-id 46 --broadcast --verify --slow
# forge script script/deploy/Deploy.s.sol:Deploy --chain-id 42161 --broadcast --verify --slow --legacy

forge script script/deploy/Deploy.s.sol:Deploy --chain-id 43 --broadcast --verify --skip-simulation --slow
forge script script/deploy/Deploy.s.sol:Deploy --chain-id 44 --broadcast --verify --skip-simulation --slow
forge script script/deploy/Deploy.s.sol:Deploy --chain-id 43 --broadcast --verify --skip-simulation
forge script script/deploy/Deploy.s.sol:Deploy --chain-id 421614 --broadcast --verify --skip-simulation --slow
forge script script/deploy/Deploy.s.sol:Deploy --chain-id 11155111 --broadcast --verify --skip-simulation --slow
forge script script/deploy/Deploy.s.sol:Deploy --chain-id 11155111 --broadcast --verify --skip-simulation
4 changes: 2 additions & 2 deletions bin/fee.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ set -x

forge script script/fee/Fee.s.sol:Fee --sig "run(uint256)" 11155111 --chain-id 43 --broadcast
forge script script/fee/Fee.s.sol:Fee --sig "run(uint256)" 421614 --chain-id 43 --broadcast
forge script script/fee/Fee.s.sol:Fee --sig "run(uint256)" 43 --chain-id 11155111 --broadcast --slow
forge script script/fee/Fee.s.sol:Fee --sig "run(uint256)" 421614 --chain-id 11155111 --broadcast --slow
forge script script/fee/Fee.s.sol:Fee --sig "run(uint256)" 43 --chain-id 11155111 --broadcast
forge script script/fee/Fee.s.sol:Fee --sig "run(uint256)" 421614 --chain-id 11155111 --broadcast
forge script script/fee/Fee.s.sol:Fee --sig "run(uint256)" 43 --chain-id 421614 --broadcast --skip-simulation --legacy --slow
forge script script/fee/Fee.s.sol:Fee --sig "run(uint256)" 11155111 --chain-id 421614 --broadcast --skip-simulation --legacy --slow
2 changes: 1 addition & 1 deletion bin/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ verify() {
# verify $oracle 46 $(cast abi-encode "constructor(address,address)" $deployer $ormp) src/eco/OracleV2.sol:OracleV2
# verify $oracle 42161 $(cast abi-encode "constructor(address,address)" $deployer $ormp) src/eco/OracleV2.sol:OracleV2

verify $oracle 44 $(cast abi-encode "constructor(address,address)" $deployer $ormp) src/eco/ORMPOracle.sol:ORMPOracle
# verify $oracle 44 $(cast abi-encode "constructor(address,address)" $deployer $ormp) src/eco/ORMPOracle.sol:ORMPOracle
verify $oracle 421614 $(cast abi-encode "constructor(address,address)" $deployer $ormp) src/eco/ORMPOracle.sol:ORMPOracle
verify $oracle 11155111 $(cast abi-encode "constructor(address,address)" $deployer $ormp) src/eco/ORMPOracle.sol:ORMPOracle

Expand Down
2 changes: 1 addition & 1 deletion script/fee/Fee.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ contract Fee is Common {

function run(uint256 chainId) public {
require(dao == msg.sender, "!dao");
// setOracleFee(chainId);
setOracleFee(chainId);
// setRelayerFee(chainId);
}

Expand Down
4 changes: 2 additions & 2 deletions script/input/c3.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
"SUBAPIMULTISIG": "0x000000000d60704384100A29efb6C9cf8cD72820",
"ORMP_ADDR": "0x00000000001523057a05d6293C1e5171eE33eE0A",
"ORMP_SALT": "0x4d629bbdb40d29206f12a51aa81faf14553b218f96845742a89e02e55ecfcef6",
"ORMPORACLE_ADDR": "0x000000000DA67291724858F7e759A43B2d23225e",
"ORMPORACLE_SALT": "0xb5616c300c82b5cd3f79afab022c8969a8bcdb7a02fa8c685437c22388e7ea29",
"ORMPORACLE_ADDR": "0x0000000003ebeF32D8f0ED406a5CA8805c80AFba",
"ORMPORACLE_SALT": "0x4334621734fbd0344e7eebbedb5a43d814a68c79bd9333da2c854d43a5253866",
"RELAYER_ADDR": "0x0000000000808fE9bDCc1d180EfbF5C53552a6b1",
"RELAYER_SALT": "0x9d38bcb32422a45bc9c08605d4457bcd3dadddfee1573a352ace5f1defa45621"
}
2 changes: 1 addition & 1 deletion script/output/11155111/ORMPOracle.v.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion script/output/11155111/deploy.a-latest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"DAO": "0x0f14341A7f464320319025540E8Fe48Ad0fe5aec",
"ORACLE": "0x000000000DA67291724858F7e759A43B2d23225e",
"ORACLE": "0x0000000003ebeF32D8f0ED406a5CA8805c80AFba",
"ORMP": "0x00000000001523057a05d6293C1e5171eE33eE0A",
"RELAYER": "0x0000000000808fE9bDCc1d180EfbF5C53552a6b1"
}
2 changes: 1 addition & 1 deletion script/output/421614/ORMPOracle.v.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion script/output/421614/deploy.a-latest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"DAO": "0x0f14341A7f464320319025540E8Fe48Ad0fe5aec",
"ORACLE": "0x000000000DA67291724858F7e759A43B2d23225e",
"ORACLE": "0x0000000003ebeF32D8f0ED406a5CA8805c80AFba",
"ORMP": "0x00000000001523057a05d6293C1e5171eE33eE0A",
"RELAYER": "0x0000000000808fE9bDCc1d180EfbF5C53552a6b1"
}
2 changes: 1 addition & 1 deletion script/output/43/deploy.a-latest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"DAO": "0x0f14341A7f464320319025540E8Fe48Ad0fe5aec",
"ORACLE": "0x000000000DA67291724858F7e759A43B2d23225e",
"ORACLE": "0x0000000003ebeF32D8f0ED406a5CA8805c80AFba",
"ORMP": "0x00000000001523057a05d6293C1e5171eE33eE0A",
"RELAYER": "0x0000000000808fE9bDCc1d180EfbF5C53552a6b1"
}
6 changes: 4 additions & 2 deletions src/Verifier.sol
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,17 @@ import "./imt/IncrementalMerkleTree.sol";

abstract contract Verifier is IVerifier {
/// @notice Message proof.
/// @param blockNumber The block number corresponding to the proof.
/// @param messageIndex Leaf index of the message hash in incremental merkle tree.
/// @param messageProof Merkle proof of the message hash.
struct Proof {
uint256 blockNumber;
uint256 messageIndex;
bytes32[32] messageProof;
}

/// @inheritdoc IVerifier
function merkleRoot(uint256 chainId, uint256 messageIndex) public view virtual returns (bytes32);
function merkleRoot(uint256 chainId, uint256 blockNumber) public view virtual returns (bytes32);

/// @inheritdoc IVerifier
function verifyMessageProof(uint256 fromChainId, bytes32 msgHash, bytes calldata proof)
Expand All @@ -42,7 +44,7 @@ abstract contract Verifier is IVerifier {
Proof memory p = abi.decode(proof, (Proof));

// fetch message root in block number from chain
bytes32 imtRootOracle = merkleRoot(fromChainId, p.messageIndex);
bytes32 imtRootOracle = merkleRoot(fromChainId, p.blockNumber);
// calculate the expected root based on the proof
bytes32 imtRootProof = IncrementalMerkleTree.branchRoot(msgHash, p.messageProof, p.messageIndex);

Expand Down
16 changes: 8 additions & 8 deletions src/eco/ORMPOracle.sol
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,14 @@ contract ORMPOracle is Verifier {
event SetApproved(address operator, bool approve);
event Withdrawal(address indexed to, uint256 amt);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
event ImportedMessageRoot(uint256 indexed chainId, uint256 indexed messageIndex, bytes32 messageRoot);
event ImportedMessageRoot(uint256 indexed chainId, uint256 indexed blockHeight, bytes32 messageRoot);

address public immutable PROTOCOL;

address public owner;
// chainId => price
mapping(uint256 => uint256) public feeOf;
// chainId => messageIndex => messageRoot
// chainId => blockNumber => messageRoot
mapping(uint256 => mapping(uint256 => bytes32)) rootOf;
// operator => isApproved
mapping(address => bool) public approvedOf;
Expand All @@ -57,11 +57,11 @@ contract ORMPOracle is Verifier {
/// @dev Only could be called by owner.
/// @notice Each channel has a corresponding oracle, and the message root should match with it.
/// @param chainId The source chain id.
/// @param messageIndex The source chain message index corresponds to the respective channel.
/// @param blockNumber The source chain block number.
/// @param messageRoot The source chain message root corresponding to the channel.
function importMessageRoot(uint256 chainId, uint256 messageIndex, bytes32 messageRoot) external onlyOwner {
rootOf[chainId][messageIndex] = messageRoot;
emit ImportedMessageRoot(chainId, messageIndex, messageRoot);
function importMessageRoot(uint256 chainId, uint256 blockNumber, bytes32 messageRoot) external onlyOwner {
rootOf[chainId][blockNumber] = messageRoot;
emit ImportedMessageRoot(chainId, blockNumber, messageRoot);
}

function changeOwner(address newOwner) external onlyOwner {
Expand Down Expand Up @@ -101,7 +101,7 @@ contract ORMPOracle is Verifier {
emit Assigned(msgHash, msg.value);
}

function merkleRoot(uint256 chainId, uint256 messageIndex) public view override returns (bytes32) {
return rootOf[chainId][messageIndex];
function merkleRoot(uint256 chainId, uint256 blockNumber) public view override returns (bytes32) {
return rootOf[chainId][blockNumber];
}
}
4 changes: 2 additions & 2 deletions src/interfaces/IVerifier.sol
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ pragma solidity 0.8.17;
interface IVerifier {
/// @notice Fetch message root oracle.
/// @param chainId The destination chain id.
/// @param messageIndex Leaf index of the message hash in incremental merkle tree.
/// @param blockNumber The block number where the message root is located.
/// @return Message root in destination chain.
function merkleRoot(uint256 chainId, uint256 messageIndex) external view returns (bytes32);
function merkleRoot(uint256 chainId, uint256 blockNumber) external view returns (bytes32);

/// @notice Verify message proof
/// @dev Message proof provided by relayer. Oracle should provide message root of
Expand Down
4 changes: 2 additions & 2 deletions test/Channel.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ contract ChannelTest is Test, Verifier {
encoded: ""
});
assertEq(msgHash, hash(message));
Proof memory proof = Proof({messageIndex: 0, messageProof: channel.prove()});
Proof memory proof = Proof({blockNumber: block.number, messageIndex: 0, messageProof: channel.prove()});
vm.chainId(2);
channel.recvMessage(message, abi.encode(proof));
}
Expand All @@ -89,7 +89,7 @@ contract ChannelTest is Test, Verifier {
encoded: ""
});
assertEq(msgHash, hash(message));
Proof memory proof = Proof({messageIndex: index, messageProof: channel.prove()});
Proof memory proof = Proof({blockNumber: block.number, messageIndex: index, messageProof: channel.prove()});
vm.chainId(2);
channel.recvMessage(message, abi.encode(proof));
}
Expand Down
2 changes: 1 addition & 1 deletion test/ORMP.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ contract ORMPTest is Test, Verifier {
function perform_send() public {
uint256 f = ormp.fee(2, self, 0, "", "");
ormp.send{value: f}(2, self, 0, "", self, "");
proof = Proof({messageIndex: ormp.messageCount() - 1, messageProof: ormp.prove()});
proof = Proof({blockNumber: block.number, messageIndex: ormp.messageCount() - 1, messageProof: ormp.prove()});
vm.chainId(2);
}

Expand Down
2 changes: 1 addition & 1 deletion test/Verifier.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ contract VerifierTest is Test, Verifier {
function test_verifyMessageProof() public {
bytes32 msgHash = bytes32(uint256(1));
imt.insert(msgHash);
Proof memory proof = Proof({messageIndex: 0, messageProof: zeroHashes});
Proof memory proof = Proof({blockNumber: block.number, messageIndex: 0, messageProof: zeroHashes});
bool r = this.verifyMessageProof(1, msgHash, abi.encode(proof));
assertEq(r, true);
}
Expand Down
3 changes: 2 additions & 1 deletion test/bench/ORMP.b.sol
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ contract ORMPBenchmarkTest is Test {

function perform_recv(Message memory message) public {
root = ormp.root();
Verifier.Proof memory proof = Verifier.Proof({messageIndex: message.index, messageProof: ormp.prove()});
Verifier.Proof memory proof =
Verifier.Proof({blockNumber: block.number, messageIndex: message.index, messageProof: ormp.prove()});

vm.createSelectFork(message.toChainId.toChainName());
// TODO: setDefaltOracle
Expand Down