mirror of
https://github.com/tornadocash/tornado-nova
synced 2024-02-02 14:53:56 +01:00
50 lines
1.3 KiB
Solidity
50 lines
1.3 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.7.0;
|
|
pragma abicoder v2;
|
|
|
|
import "omnibridge/contracts/helpers/WETHOmnibridgeRouter.sol";
|
|
|
|
contract L1Helper is WETHOmnibridgeRouter {
|
|
event PublicKey(address indexed owner, bytes key);
|
|
|
|
struct Account {
|
|
address owner;
|
|
bytes publicKey;
|
|
}
|
|
|
|
constructor(
|
|
IOmnibridge _bridge,
|
|
IWETH _weth,
|
|
address _owner
|
|
) WETHOmnibridgeRouter(_bridge, _weth, _owner) {}
|
|
|
|
function register(Account memory _account) public {
|
|
require(_account.owner == msg.sender, "only owner can be registered");
|
|
_register(_account);
|
|
}
|
|
|
|
function _register(Account memory _account) internal {
|
|
emit PublicKey(_account.owner, _account.publicKey);
|
|
}
|
|
|
|
/**
|
|
* @dev Wraps native assets and relays wrapped ERC20 tokens to the other chain.
|
|
* It also calls receiver on other side with the _data provided.
|
|
* @param _receiver bridged assets receiver on the other side of the bridge.
|
|
* @param _data data for the call of receiver on other side.
|
|
* @param _account tornadoPool account data
|
|
*/
|
|
function wrapAndRelayTokens(
|
|
address _receiver,
|
|
bytes memory _data,
|
|
Account memory _account
|
|
) public payable {
|
|
WETH.deposit{ value: msg.value }();
|
|
bridge.relayTokensAndCall(address(WETH), _receiver, msg.value, _data);
|
|
|
|
if (_account.owner == msg.sender) {
|
|
_register(_account);
|
|
}
|
|
}
|
|
}
|