- Archived multiple non-EVM adapters (Algorand, Hedera, Tron, TON, Cosmos, Solana) and compliance contracts (IndyVerifier) to `archive/solidity/contracts/`. - Updated documentation to reflect the historical status of archived components. - Adjusted `foundry.toml` and `README.md` for clarity on historical dependencies and configurations. - Enhanced Makefile and package.json scripts for improved contract testing and building processes. - Removed obsolete contracts (AlltraCustomBridge, CommodityCCIPBridge, ISO4217WCCIPBridge, VaultBridgeAdapter) from the main directory. - Updated implementation reports to indicate archived status for various components.
48 lines
1.6 KiB
Solidity
48 lines
1.6 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.20;
|
|
|
|
import "@openzeppelin/contracts/access/AccessControl.sol";
|
|
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
|
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
|
|
import "./UniversalCCIPBridge.sol";
|
|
|
|
contract VaultBridgeAdapter is AccessControl, ReentrancyGuard {
|
|
using SafeERC20 for IERC20;
|
|
|
|
bytes32 public constant ADAPTER_ADMIN_ROLE = keccak256("ADAPTER_ADMIN_ROLE");
|
|
|
|
address public vaultFactory;
|
|
UniversalCCIPBridge public bridge;
|
|
|
|
mapping(address => address) public userVaults;
|
|
|
|
event VaultCreated(address indexed user, address indexed vault);
|
|
|
|
constructor(address _vaultFactory, address _bridge, address admin) {
|
|
require(_vaultFactory != address(0), "Zero factory");
|
|
require(_bridge != address(0), "Zero bridge");
|
|
|
|
vaultFactory = _vaultFactory;
|
|
bridge = UniversalCCIPBridge(payable(_bridge));
|
|
|
|
_grantRole(DEFAULT_ADMIN_ROLE, admin);
|
|
_grantRole(ADAPTER_ADMIN_ROLE, admin);
|
|
}
|
|
|
|
function getOrCreateVault(address user) public returns (address vault) {
|
|
vault = userVaults[user];
|
|
if (vault == address(0)) {
|
|
(bool success, bytes memory data) = vaultFactory.call(
|
|
abi.encodeWithSignature("createVault(address)", user)
|
|
);
|
|
if (success) {
|
|
vault = abi.decode(data, (address));
|
|
userVaults[user] = vault;
|
|
emit VaultCreated(user, vault);
|
|
}
|
|
}
|
|
return vault;
|
|
}
|
|
}
|