diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index 95e3c10..fb51583 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -8,7 +8,7 @@ on: jobs: sync: - if: github.repository == 'defi-wonderland/xTokens-private' + if: github.repository == 'defi-wonderland/xERC20-private' runs-on: ubuntu-latest steps: - name: Check out github repository @@ -22,7 +22,7 @@ jobs: ssh-private-key: ${{ secrets.SYNC_SSH_PRIVATE_KEY }} - name: Add Remote - run: git remote add public git@github.com:defi-wonderland/xTokens.git + run: git remote add public git@github.com:defi-wonderland/xERC20.git - name: Sync branch run: git push public ${{ github.ref_name }} \ No newline at end of file diff --git a/README.md b/README.md index 2086ef4..01df3d3 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# xTokens +# xERC20 -xTokens is a standard for bridged tokens. A common interface to be used across different implementations of bridges to keep liquidity concentrated and improve user experience on-chain. +xERC20 is a standard for bridged tokens. A common interface to be used across different implementations of bridges to keep liquidity concentrated and improve user experience on-chain. ### Contracts -*XERC20*: The main logic behind the xTokens. XERC20 is a standard for bridges to manage the same liquidity when bridging. It allows its owner to approve bridges and add limits to them for minting and burning the XERC20 token. The XERC20 standard is compatible with two different types of bridge behaviours, bridges calling mint/burn from the user (or other function names through adapters) and bridges that transfer from the user to the bridge contract. On the latter, XERC20 tokens that are received by the bridge get burned and when a bridge transfers tokens out, they get minted again. +*XERC20*: A standard for bridges to manage the same liquidity when bridging. It allows its owner to approve bridges and add limits to them for minting and burning the XERC20 token. The XERC20 standard is compatible with two different types of bridge behaviours, bridges calling mint/burn from the user (or other function names through adapters) and bridges that transfer from the user to the bridge contract. On the latter, XERC20 tokens that are received by the bridge get burned and when a bridge transfers tokens out, they get minted again. *XERC20Lockbox*: The lockbox works as a wrapper of an ERC20. It mints XERC20 tokens at a 1:1 ratio when receiving ERC20 tokens and it unlocks the ERC20 the other way around. The lockbox can be deployed on any chain that has a canonical token representation, chains that do not currently have a canonical representation can avoid deploying a Lockbox and use the XERC20 as the default implementation for the chain. diff --git a/remappings.txt b/remappings.txt index b78e9c7..cb16b10 100644 --- a/remappings.txt +++ b/remappings.txt @@ -3,9 +3,4 @@ prb/test/=lib/prb-test/src/ forge-std/=lib/forge-std/src isolmate/=lib/isolmate/src @openzeppelin/=lib/openzeppelin-contracts -permit2/=lib/permit2 - -contracts/=solidity/contracts -interfaces/=solidity/interfaces -test/=solidity/test -libraries/=solidity/libraries +permit2/=lib/permit2 \ No newline at end of file diff --git a/solidity/contracts/XERC20.sol b/solidity/contracts/XERC20.sol index 7268107..7bb9dd3 100644 --- a/solidity/contracts/XERC20.sol +++ b/solidity/contracts/XERC20.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity >=0.8.4 <0.9.0; -import {IXERC20} from 'interfaces/IXERC20.sol'; +import {IXERC20} from '../interfaces/IXERC20.sol'; import {ERC20} from '@openzeppelin/contracts/token/ERC20/ERC20.sol'; import {ERC20Permit} from '@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol'; import {Ownable} from '@openzeppelin/contracts/access/Ownable.sol'; diff --git a/solidity/contracts/XERC20Factory.sol b/solidity/contracts/XERC20Factory.sol index 616f0bf..efaa74d 100644 --- a/solidity/contracts/XERC20Factory.sol +++ b/solidity/contracts/XERC20Factory.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity >=0.8.4 <0.9.0; -import {XERC20} from 'contracts/XERC20.sol'; -import {IXERC20Factory} from 'interfaces/IXERC20Factory.sol'; -import {XERC20Lockbox} from 'contracts/XERC20Lockbox.sol'; +import {XERC20} from '../contracts/XERC20.sol'; +import {IXERC20Factory} from '../interfaces/IXERC20Factory.sol'; +import {XERC20Lockbox} from '../contracts/XERC20Lockbox.sol'; import {CREATE3} from 'isolmate/utils/CREATE3.sol'; import {EnumerableSet} from '@openzeppelin/contracts/utils/structs/EnumerableSet.sol'; diff --git a/solidity/contracts/XERC20Lockbox.sol b/solidity/contracts/XERC20Lockbox.sol index 9a1f53a..5849a7b 100644 --- a/solidity/contracts/XERC20Lockbox.sol +++ b/solidity/contracts/XERC20Lockbox.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity >=0.8.4 <0.9.0; -import {IXERC20} from 'interfaces/IXERC20.sol'; +import {IXERC20} from '../interfaces/IXERC20.sol'; import {IERC20} from '@openzeppelin/contracts/token/ERC20/ERC20.sol'; import {SafeERC20} from '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol'; import {SafeCast} from '@openzeppelin/contracts/utils/math/SafeCast.sol'; -import {IXERC20Lockbox, IAllowanceTransfer} from 'interfaces/IXERC20Lockbox.sol'; +import {IXERC20Lockbox, IAllowanceTransfer} from '../interfaces/IXERC20Lockbox.sol'; import {IPermit2} from 'permit2/src/interfaces/IPermit2.sol'; contract XERC20Lockbox is IXERC20Lockbox { diff --git a/solidity/scripts/MultichainCreateXERC20.sol b/solidity/scripts/MultichainCreateXERC20.sol index 9ce9eb9..026cc1d 100644 --- a/solidity/scripts/MultichainCreateXERC20.sol +++ b/solidity/scripts/MultichainCreateXERC20.sol @@ -3,9 +3,9 @@ pragma solidity >=0.8.4 <0.9.0; import {console} from 'forge-std/console.sol'; import {Test} from 'forge-std/Test.sol'; -import {XERC20} from 'contracts/XERC20.sol'; -import {XERC20Lockbox} from 'contracts/XERC20Lockbox.sol'; -import {XERC20Factory, IXERC20Factory} from 'contracts/XERC20Factory.sol'; +import {XERC20} from '../contracts/XERC20.sol'; +import {XERC20Lockbox} from '../contracts/XERC20Lockbox.sol'; +import {XERC20Factory, IXERC20Factory} from '../contracts/XERC20Factory.sol'; import {Script} from 'forge-std/Script.sol'; import {ScriptingLibrary} from './ScriptingLibrary/ScriptingLibrary.sol'; diff --git a/solidity/scripts/MultichainDeploy.sol b/solidity/scripts/MultichainDeploy.sol index a63d401..fd51b55 100644 --- a/solidity/scripts/MultichainDeploy.sol +++ b/solidity/scripts/MultichainDeploy.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.4 <0.9.0; import {console} from 'forge-std/console.sol'; import {Test} from 'forge-std/Test.sol'; -import {XERC20Factory, IXERC20Factory} from 'contracts/XERC20Factory.sol'; +import {XERC20Factory, IXERC20Factory} from '../contracts/XERC20Factory.sol'; import {Script} from 'forge-std/Script.sol'; import {ScriptingLibrary} from './ScriptingLibrary/ScriptingLibrary.sol'; diff --git a/solidity/scripts/ScriptingLibrary/ScriptingLibrary.sol b/solidity/scripts/ScriptingLibrary/ScriptingLibrary.sol index 8efb2be..c531df7 100644 --- a/solidity/scripts/ScriptingLibrary/ScriptingLibrary.sol +++ b/solidity/scripts/ScriptingLibrary/ScriptingLibrary.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.4 <0.9.0; import {console} from 'forge-std/console.sol'; import {Test} from 'forge-std/Test.sol'; -import {XERC20Factory, IXERC20Factory} from 'contracts/XERC20Factory.sol'; +import {XERC20Factory, IXERC20Factory} from '../../contracts/XERC20Factory.sol'; import {Script} from 'forge-std/Script.sol'; contract ScriptingLibrary { diff --git a/solidity/test/e2e/Common.sol b/solidity/test/e2e/Common.sol index 329404c..f576330 100644 --- a/solidity/test/e2e/Common.sol +++ b/solidity/test/e2e/Common.sol @@ -1,14 +1,14 @@ // SPDX-License-Identifier: MIT pragma solidity >=0.8.4 <0.9.0; -import {DSTestFull} from 'test/utils/DSTestFull.sol'; +import {DSTestFull} from '../../test/utils/DSTestFull.sol'; import {console} from 'forge-std/console.sol'; import {IERC20} from 'isolmate/interfaces/tokens/IERC20.sol'; import {Test} from 'forge-std/Test.sol'; -import {XERC20} from 'contracts/XERC20.sol'; -import {XERC20Lockbox} from 'contracts/XERC20Lockbox.sol'; +import {XERC20} from '../../contracts/XERC20.sol'; +import {XERC20Lockbox} from '../../contracts/XERC20Lockbox.sol'; -import {XERC20Factory, IXERC20Factory} from 'contracts/XERC20Factory.sol'; +import {XERC20Factory, IXERC20Factory} from '../../contracts/XERC20Factory.sol'; contract CommonE2EBase is Test { uint256 internal constant _FORK_BLOCK = 17_218_458; diff --git a/solidity/test/e2e/XERC20.t.sol b/solidity/test/e2e/XERC20.t.sol index fedced7..63852b1 100644 --- a/solidity/test/e2e/XERC20.t.sol +++ b/solidity/test/e2e/XERC20.t.sol @@ -2,8 +2,8 @@ pragma solidity >=0.8.4 <0.9.0; import {CommonE2EBase} from './Common.sol'; -import {XERC20Lockbox} from 'contracts/XERC20Lockbox.sol'; -import {XERC20, IXERC20} from 'contracts/XERC20.sol'; +import {XERC20Lockbox} from '../../contracts/XERC20Lockbox.sol'; +import {XERC20, IXERC20} from '../../contracts/XERC20.sol'; contract E2EMintAndBurn is CommonE2EBase { function testMint() public { diff --git a/solidity/test/e2e/XERC20Factory.t.sol b/solidity/test/e2e/XERC20Factory.t.sol index 389881f..c5bc31a 100644 --- a/solidity/test/e2e/XERC20Factory.t.sol +++ b/solidity/test/e2e/XERC20Factory.t.sol @@ -2,9 +2,9 @@ pragma solidity >=0.8.4 <0.9.0; import {CommonE2EBase} from './Common.sol'; -import {XERC20Lockbox} from 'contracts/XERC20Lockbox.sol'; -import {XERC20} from 'contracts/XERC20.sol'; -import {XERC20Factory, IXERC20Factory} from 'contracts/XERC20Factory.sol'; +import {XERC20Lockbox} from '../../contracts/XERC20Lockbox.sol'; +import {XERC20} from '../../contracts/XERC20.sol'; +import {XERC20Factory, IXERC20Factory} from '../../contracts/XERC20Factory.sol'; contract E2EDeployment is CommonE2EBase { function testDeploy() public { diff --git a/solidity/test/e2e/XERC20Lockbox.sol b/solidity/test/e2e/XERC20Lockbox.sol index d0f15e2..18ae2fc 100644 --- a/solidity/test/e2e/XERC20Lockbox.sol +++ b/solidity/test/e2e/XERC20Lockbox.sol @@ -6,8 +6,8 @@ import {PermitHash} from 'permit2/src/libraries/PermitHash.sol'; import {IAllowanceTransfer} from 'permit2/src/interfaces/IAllowanceTransfer.sol'; import {PermitSignature} from 'permit2/test/utils/PermitSignature.sol'; import {IEIP712} from 'permit2/src/interfaces/IEIP712.sol'; -import {XERC20Lockbox} from 'contracts/XERC20Lockbox.sol'; -import {XERC20} from 'contracts/XERC20.sol'; +import {XERC20Lockbox} from '../../contracts/XERC20Lockbox.sol'; +import {XERC20} from '../../contracts/XERC20.sol'; import {console} from 'forge-std/console.sol'; contract E2ELockbox is CommonE2EBase, PermitSignature { diff --git a/solidity/test/unit/XERC20.t.sol b/solidity/test/unit/XERC20.t.sol index 606cfba..e65d5eb 100644 --- a/solidity/test/unit/XERC20.t.sol +++ b/solidity/test/unit/XERC20.t.sol @@ -3,10 +3,10 @@ pragma solidity >=0.8.4 <0.9.0; import {Test} from 'forge-std/Test.sol'; import {IERC20} from '@openzeppelin/contracts/token/ERC20/IERC20.sol'; -import {DSTestFull} from 'test/utils/DSTestFull.sol'; -import {XERC20} from 'contracts/XERC20.sol'; -import {IXERC20Factory} from 'interfaces/IXERC20Factory.sol'; -import {IXERC20} from 'interfaces/IXERC20.sol'; +import {DSTestFull} from '../../test/utils/DSTestFull.sol'; +import {XERC20} from '../../contracts/XERC20.sol'; +import {IXERC20Factory} from '../../interfaces/IXERC20Factory.sol'; +import {IXERC20} from '../../interfaces/IXERC20.sol'; abstract contract Base is Test { address internal _owner = vm.addr(1); diff --git a/solidity/test/unit/XERC20Factory.t.sol b/solidity/test/unit/XERC20Factory.t.sol index 24e0c53..77b78bb 100644 --- a/solidity/test/unit/XERC20Factory.t.sol +++ b/solidity/test/unit/XERC20Factory.t.sol @@ -3,12 +3,12 @@ pragma solidity >=0.8.4 <0.9.0; import {Test} from 'forge-std/Test.sol'; import {IERC20} from '@openzeppelin/contracts/token/ERC20/IERC20.sol'; -import {DSTestFull} from 'test/utils/DSTestFull.sol'; -import {XERC20} from 'contracts/XERC20.sol'; -import {XERC20Factory} from 'contracts/XERC20Factory.sol'; -import {XERC20Lockbox} from 'contracts/XERC20Lockbox.sol'; -import {IXERC20} from 'interfaces/IXERC20.sol'; -import {IXERC20Factory} from 'interfaces/IXERC20Factory.sol'; +import {DSTestFull} from '../../test/utils/DSTestFull.sol'; +import {XERC20} from '../../contracts/XERC20.sol'; +import {XERC20Factory} from '../../contracts/XERC20Factory.sol'; +import {XERC20Lockbox} from '../../contracts/XERC20Lockbox.sol'; +import {IXERC20} from '../../interfaces/IXERC20.sol'; +import {IXERC20Factory} from '../../interfaces/IXERC20Factory.sol'; import {CREATE3} from 'isolmate/utils/CREATE3.sol'; contract XERC20FactoryForTest is XERC20Factory { diff --git a/solidity/test/unit/XERC20Lockbox.t.sol b/solidity/test/unit/XERC20Lockbox.t.sol index 5680590..4575668 100644 --- a/solidity/test/unit/XERC20Lockbox.t.sol +++ b/solidity/test/unit/XERC20Lockbox.t.sol @@ -4,11 +4,11 @@ pragma solidity >=0.8.4 <0.9.0; import {Test} from 'forge-std/Test.sol'; import {IERC20} from '@openzeppelin/contracts/token/ERC20/IERC20.sol'; import {ERC20} from '@openzeppelin/contracts/token/ERC20/ERC20.sol'; -import {DSTestFull} from 'test/utils/DSTestFull.sol'; -import {XERC20} from 'contracts/XERC20.sol'; -import {XERC20Lockbox} from 'contracts/XERC20Lockbox.sol'; -import {IXERC20Lockbox} from 'interfaces/IXERC20Lockbox.sol'; -import {IXERC20} from 'interfaces/IXERC20.sol'; +import {DSTestFull} from '../../test/utils/DSTestFull.sol'; +import {XERC20} from '../../contracts/XERC20.sol'; +import {XERC20Lockbox} from '../../contracts/XERC20Lockbox.sol'; +import {IXERC20Lockbox} from '../../interfaces/IXERC20Lockbox.sol'; +import {IXERC20} from '../../interfaces/IXERC20.sol'; import {IAllowanceTransfer} from 'permit2/src/interfaces/IAllowanceTransfer.sol'; import {IPermit2} from 'permit2/src/interfaces/IPermit2.sol';