100 lines
3.8 KiB
Solidity
100 lines
3.8 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.26;
|
|
|
|
import {Test} from "forge-std/Test.sol";
|
|
import {InteroperableAddress} from "../../contracts/utils/draft-InteroperableAddress.sol";
|
|
|
|
contract InteroperableAddressTest is Test {
|
|
using InteroperableAddress for bytes;
|
|
|
|
function testFormatParse(bytes2 chainType, bytes calldata chainReference, bytes calldata addr) public view {
|
|
vm.assume(chainReference.length > 0 || addr.length > 0);
|
|
{
|
|
(bytes2 chainType_, bytes memory chainReference_, bytes memory addr_) = InteroperableAddress
|
|
.formatV1(chainType, chainReference, addr)
|
|
.parseV1();
|
|
assertEq(chainType, chainType_);
|
|
assertEq(chainReference, chainReference_);
|
|
assertEq(addr, addr_);
|
|
}
|
|
{
|
|
(bool success, bytes2 chainType_, bytes memory chainReference_, bytes memory addr_) = InteroperableAddress
|
|
.formatV1(chainType, chainReference, addr)
|
|
.tryParseV1();
|
|
assertTrue(success);
|
|
assertEq(chainType, chainType_);
|
|
assertEq(chainReference, chainReference_);
|
|
assertEq(addr, addr_);
|
|
}
|
|
{
|
|
(bytes2 chainType_, bytes memory chainReference_, bytes memory addr_) = this.parseV1Calldata(
|
|
InteroperableAddress.formatV1(chainType, chainReference, addr)
|
|
);
|
|
assertEq(chainType, chainType_);
|
|
assertEq(chainReference, chainReference_);
|
|
assertEq(addr, addr_);
|
|
}
|
|
{
|
|
(bool success, bytes2 chainType_, bytes memory chainReference_, bytes memory addr_) = this
|
|
.tryParseV1Calldata(InteroperableAddress.formatV1(chainType, chainReference, addr));
|
|
assertTrue(success);
|
|
assertEq(chainType, chainType_);
|
|
assertEq(chainReference, chainReference_);
|
|
assertEq(addr, addr_);
|
|
}
|
|
}
|
|
|
|
function testFormatParseEVM(uint256 chainid, address addr) public view {
|
|
{
|
|
(uint256 chainid_, address addr_) = InteroperableAddress.formatEvmV1(chainid, addr).parseEvmV1();
|
|
assertEq(chainid, chainid_);
|
|
assertEq(addr, addr_);
|
|
}
|
|
{
|
|
(bool success, uint256 chainid_, address addr_) = InteroperableAddress
|
|
.formatEvmV1(chainid, addr)
|
|
.tryParseEvmV1();
|
|
assertTrue(success);
|
|
assertEq(chainid, chainid_);
|
|
assertEq(addr, addr_);
|
|
}
|
|
{
|
|
(uint256 chainid_, address addr_) = this.parseEvmV1Calldata(
|
|
InteroperableAddress.formatEvmV1(chainid, addr)
|
|
);
|
|
assertEq(chainid, chainid_);
|
|
assertEq(addr, addr_);
|
|
}
|
|
{
|
|
(bool success, uint256 chainid_, address addr_) = this.tryParseEvmV1Calldata(
|
|
InteroperableAddress.formatEvmV1(chainid, addr)
|
|
);
|
|
assertTrue(success);
|
|
assertEq(chainid, chainid_);
|
|
assertEq(addr, addr_);
|
|
}
|
|
}
|
|
|
|
function parseV1Calldata(
|
|
bytes calldata self
|
|
) external pure returns (bytes2 chainType, bytes calldata chainReference, bytes calldata addr) {
|
|
return self.parseV1Calldata();
|
|
}
|
|
|
|
function tryParseV1Calldata(
|
|
bytes calldata self
|
|
) external pure returns (bool success, bytes2 chainType, bytes calldata chainReference, bytes calldata addr) {
|
|
return self.tryParseV1Calldata();
|
|
}
|
|
|
|
function parseEvmV1Calldata(bytes calldata self) external pure returns (uint256 chainid, address addr) {
|
|
return self.parseEvmV1Calldata();
|
|
}
|
|
|
|
function tryParseEvmV1Calldata(
|
|
bytes calldata self
|
|
) external pure returns (bool success, uint256 chainid, address addr) {
|
|
return self.tryParseEvmV1Calldata();
|
|
}
|
|
}
|