编译器
0.8.17+commit.8df45f5f
文件 1 的 8:ConnextHeaderReporter.sol
pragma solidity ^0.8.17;
import { HeaderReporter } from "../HeaderReporter.sol";
import { ConnextReporter } from "./ConnextReporter.sol";
contract ConnextHeaderReporter is HeaderReporter, ConnextReporter {
constructor(
address headerStorage,
uint256 adapterChain,
address connext,
uint32 connextAdapterChain
) HeaderReporter(headerStorage, adapterChain) ConnextReporter(connext, connextAdapterChain) {}
function _sendPayload(bytes memory payload, address adapter) internal override {
_connextSend(payload, adapter);
}
}
文件 2 的 8:ConnextReporter.sol
pragma solidity ^0.8.17;
import { IConnext } from "@connext/interfaces/core/IConnext.sol";
abstract contract ConnextReporter {
string public constant PROVIDER = "connext";
IConnext public immutable CONNEXT;
uint32 public immutable CONNEXT_ADAPTER_CHAIN;
event ConnextTransfer(bytes32 transferId);
constructor(address connext, uint32 connextAdapterChain) {
CONNEXT = IConnext(connext);
CONNEXT_ADAPTER_CHAIN = connextAdapterChain;
}
function _connextSend(bytes memory payload, address adapter) internal {
bytes32 transferId = CONNEXT.xcall{ value: msg.value }(
CONNEXT_ADAPTER_CHAIN,
adapter,
address(0),
msg.sender,
0,
0,
payload
);
emit ConnextTransfer(transferId);
}
}
文件 3 的 8:HeaderReporter.sol
pragma solidity ^0.8.17;
import { IHeaderReporter } from "../interfaces/IHeaderReporter.sol";
import { HeaderStorage } from "../utils/HeaderStorage.sol";
abstract contract HeaderReporter is IHeaderReporter {
HeaderStorage public immutable HEADER_STORAGE;
uint256 public immutable ADAPTER_CHAIN;
event HeaderReported(address indexed emitter, uint256 indexed blockNumber, bytes32 indexed blockHeader);
constructor(address headerStorage, uint256 adapterChain) {
HEADER_STORAGE = HeaderStorage(headerStorage);
ADAPTER_CHAIN = adapterChain;
}
function reportHeaders(uint256[] memory blockNumbers, address adapter) external payable {
bytes32[] memory blockHeaders = HEADER_STORAGE.storeBlockHeaders(blockNumbers);
bytes memory payload = abi.encode(blockNumbers, blockHeaders);
_sendPayload(payload, adapter);
for (uint i = 0; i < blockNumbers.length; i++) {
emit HeaderReported(address(this), blockNumbers[i], blockHeaders[i]);
}
}
function _sendPayload(bytes memory payload, address adapter) internal virtual;
}
文件 4 的 8:HeaderStorage.sol
pragma solidity ^0.8.17;
contract HeaderStorage {
mapping(uint256 => bytes32) public headers;
event HeaderStored(uint256 indexed blockNumber, bytes32 indexed blockHeader);
error HeaderOutOfRange(address emitter, uint256 blockNumber);
function storeBlockHeader(uint256 blockNumber) public returns (bytes32 blockHeader) {
blockHeader = headers[blockNumber];
if (blockHeader == 0) {
blockHeader = blockhash(blockNumber);
if (blockHeader == 0) revert HeaderOutOfRange(address(this), blockNumber);
headers[blockNumber] = blockHeader;
emit HeaderStored(blockNumber, blockHeader);
}
}
function storeBlockHeaders(uint256[] memory blockNumbers) public returns (bytes32[] memory) {
bytes32[] memory blockHeaders = new bytes32[](blockNumbers.length);
for (uint256 i = 0; i < blockNumbers.length; i++) {
blockHeaders[i] = storeBlockHeader(blockNumbers[i]);
}
return blockHeaders;
}
}
文件 5 的 8:IConnext.sol
pragma solidity ^0.8.0;
import {ExecuteArgs, TransferInfo, DestinationTransferStatus} from "../libraries/LibConnextStorage.sol";
import {TokenId} from "../libraries/TokenId.sol";
interface IConnext {
function xcall(
uint32 _destination,
address _to,
address _asset,
address _delegate,
uint256 _amount,
uint256 _slippage,
bytes calldata _callData
) external payable returns (bytes32);
function xcallIntoLocal(
uint32 _destination,
address _to,
address _asset,
address _delegate,
uint256 _amount,
uint256 _slippage,
bytes calldata _callData
) external payable returns (bytes32);
function execute(ExecuteArgs calldata _args) external returns (bytes32 transferId);
function forceUpdateSlippage(TransferInfo calldata _params, uint256 _slippage) external;
function forceReceiveLocal(TransferInfo calldata _params) external;
function bumpTransfer(bytes32 _transferId) external payable;
function routedTransfers(bytes32 _transferId) external view returns (address[] memory);
function transferStatus(bytes32 _transferId) external view returns (DestinationTransferStatus);
function remote(uint32 _domain) external view returns (address);
function domain() external view returns (uint256);
function nonce() external view returns (uint256);
function approvedSequencers(address _sequencer) external view returns (bool);
function xAppConnectionManager() external view returns (address);
function LIQUIDITY_FEE_NUMERATOR() external view returns (uint256);
function LIQUIDITY_FEE_DENOMINATOR() external view returns (uint256);
function getRouterApproval(address _router) external view returns (bool);
function getRouterRecipient(address _router) external view returns (address);
function getRouterOwner(address _router) external view returns (address);
function getProposedRouterOwner(address _router) external view returns (address);
function getProposedRouterOwnerTimestamp(address _router) external view returns (uint256);
function maxRoutersPerTransfer() external view returns (uint256);
function routerBalances(address _router, address _asset) external view returns (uint256);
function getRouterApprovalForPortal(address _router) external view returns (bool);
function initializeRouter(address _owner, address _recipient) external;
function setRouterRecipient(address _router, address _recipient) external;
function proposeRouterOwner(address _router, address _proposed) external;
function acceptProposedRouterOwner(address _router) external;
function addRouterLiquidityFor(
uint256 _amount,
address _local,
address _router
) external payable;
function addRouterLiquidity(uint256 _amount, address _local) external payable;
function removeRouterLiquidityFor(
TokenId memory _canonical,
uint256 _amount,
address payable _to,
address _router
) external;
function removeRouterLiquidity(TokenId memory _canonical, uint256 _amount, address payable _to) external;
function adoptedToCanonical(address _adopted) external view returns (TokenId memory);
function approvedAssets(TokenId calldata _canonical) external view returns (bool);
}
文件 6 的 8:IHeaderReporter.sol
pragma solidity ^0.8.17;
interface IHeaderReporter {
function reportHeaders(uint256[] memory blockNumbers, address adapter) external payable;
}
文件 7 的 8:LibConnextStorage.sol
pragma solidity ^0.8.0;
enum DestinationTransferStatus {
None,
Reconciled,
Executed,
Completed
}
struct TransferInfo {
uint32 originDomain;
uint32 destinationDomain;
uint32 canonicalDomain;
address to;
address delegate;
bool receiveLocal;
bytes callData;
uint256 slippage;
address originSender;
uint256 bridgedAmt;
uint256 normalizedIn;
uint256 nonce;
bytes32 canonicalId;
}
struct ExecuteArgs {
TransferInfo params;
address[] routers;
bytes[] routerSignatures;
address sequencer;
bytes sequencerSignature;
}
文件 8 的 8:TokenId.sol
pragma solidity ^0.8.0;
struct TokenId {
uint32 domain;
bytes32 id;
}
{
"compilationTarget": {
"contracts/adapters/Connext/ConnextHeaderReporter.sol": "ConnextHeaderReporter"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "none"
},
"optimizer": {
"enabled": true,
"runs": 800
},
"remappings": [],
"viaIR": true
}
[{"inputs":[{"internalType":"address","name":"headerStorage","type":"address"},{"internalType":"uint256","name":"adapterChain","type":"uint256"},{"internalType":"address","name":"connext","type":"address"},{"internalType":"uint32","name":"connextAdapterChain","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"transferId","type":"bytes32"}],"name":"ConnextTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"emitter","type":"address"},{"indexed":true,"internalType":"uint256","name":"blockNumber","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"blockHeader","type":"bytes32"}],"name":"HeaderReported","type":"event"},{"inputs":[],"name":"ADAPTER_CHAIN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONNEXT","outputs":[{"internalType":"contract IConnext","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONNEXT_ADAPTER_CHAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HEADER_STORAGE","outputs":[{"internalType":"contract HeaderStorage","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROVIDER","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"blockNumbers","type":"uint256[]"},{"internalType":"address","name":"adapter","type":"address"}],"name":"reportHeaders","outputs":[],"stateMutability":"payable","type":"function"}]