@1inch/solidity-utils 2.1.1 → 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -2
- package/contracts/GasChecker.sol +3 -1
- package/contracts/OnlyWethReceiver.sol +1 -1
- package/contracts/interfaces/IDaiLikePermit.sol +10 -2
- package/contracts/interfaces/IERC20MetadataUppercase.sol +3 -3
- package/contracts/interfaces/IWETH.sol +1 -1
- package/contracts/libraries/AddressArray.sol +27 -12
- package/contracts/libraries/AddressSet.sol +20 -6
- package/contracts/libraries/ECDSA.sol +61 -12
- package/contracts/libraries/RevertReasonForwarder.sol +2 -0
- package/contracts/libraries/RevertReasonParser.sol +9 -8
- package/contracts/libraries/SafeERC20.sol +66 -19
- package/contracts/libraries/StringUtil.sol +8 -6
- package/contracts/libraries/UniERC20.sol +45 -16
- package/contracts/mocks/TokenCustomDecimalsMock.sol +7 -2
- package/contracts/mocks/TokenMock.sol +0 -1
- package/dist/src/hardhat.config.d.ts +6 -0
- package/dist/src/hardhat.config.js +31 -0
- package/dist/src/hardhat.config.js.map +1 -0
- package/dist/src/hardhat.networks.d.ts +3 -0
- package/dist/src/hardhat.networks.js +31 -0
- package/dist/src/hardhat.networks.js.map +1 -0
- package/dist/src/src/asserts.d.ts +1 -0
- package/dist/src/src/asserts.js +26 -0
- package/dist/src/src/asserts.js.map +1 -0
- package/dist/src/{index.d.ts → src/index.d.ts} +0 -0
- package/dist/src/{index.js → src/index.js} +0 -0
- package/dist/src/src/index.js.map +1 -0
- package/dist/src/{permit.d.ts → src/permit.d.ts} +8 -23
- package/dist/src/{permit.js → src/permit.js} +28 -26
- package/dist/src/src/permit.js.map +1 -0
- package/dist/src/src/prelude.d.ts +14 -0
- package/dist/src/{prelude.js → src/prelude.js} +10 -23
- package/dist/src/src/prelude.js.map +1 -0
- package/dist/src/{profileEVM.d.ts → src/profileEVM.d.ts} +0 -0
- package/dist/src/{profileEVM.js → src/profileEVM.js} +30 -38
- package/dist/src/src/profileEVM.js.map +1 -0
- package/dist/src/src/utils.d.ts +12 -0
- package/dist/src/{utils.js → src/utils.js} +12 -20
- package/dist/src/src/utils.js.map +1 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/access/Ownable.d.ts +89 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/access/Ownable.js +3 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/access/Ownable.js.map +1 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/access/index.d.ts +1 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/access/index.js +3 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/access/index.js.map +1 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/index.d.ts +6 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/index.js +3 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/index.js.map +1 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/interfaces/IERC1271.d.ts +44 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/interfaces/IERC1271.js +3 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/interfaces/IERC1271.js.map +1 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/interfaces/index.d.ts +1 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/interfaces/index.js +3 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/interfaces/index.js.map +1 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/ERC20.d.ts +198 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/ERC20.js +3 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/ERC20.js.map +1 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/IERC20.d.ts +142 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/IERC20.js +3 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/IERC20.js.map +1 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.d.ts +166 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.js +3 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.js.map +1 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol/ERC20Permit.d.ts +238 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol/ERC20Permit.js +3 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol/ERC20Permit.js.map +1 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol/index.d.ts +1 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol/index.js +3 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol/index.js.map +1 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.d.ts +74 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.js +3 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.js.map +1 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.d.ts +1 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.js +3 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.js.map +1 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/index.d.ts +5 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/index.js +3 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/index.js.map +1 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/index.d.ts +4 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/index.js +3 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/ERC20/index.js.map +1 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/index.d.ts +2 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/index.js +3 -0
- package/dist/src/typechain-types/@openzeppelin/contracts/token/index.js.map +1 -0
- package/dist/src/typechain-types/@openzeppelin/index.d.ts +2 -0
- package/dist/src/typechain-types/@openzeppelin/index.js +3 -0
- package/dist/src/typechain-types/@openzeppelin/index.js.map +1 -0
- package/dist/src/typechain-types/common.d.ts +22 -0
- package/dist/src/typechain-types/common.js +3 -0
- package/dist/src/typechain-types/common.js.map +1 -0
- package/dist/src/typechain-types/contracts/EthReceiver.d.ts +27 -0
- package/dist/src/typechain-types/contracts/EthReceiver.js +3 -0
- package/dist/src/typechain-types/contracts/EthReceiver.js.map +1 -0
- package/dist/src/typechain-types/contracts/GasChecker.d.ts +27 -0
- package/dist/src/typechain-types/contracts/GasChecker.js +3 -0
- package/dist/src/typechain-types/contracts/GasChecker.js.map +1 -0
- package/dist/src/typechain-types/contracts/OnlyWethReceiver.d.ts +27 -0
- package/dist/src/typechain-types/contracts/OnlyWethReceiver.js +3 -0
- package/dist/src/typechain-types/contracts/OnlyWethReceiver.js.map +1 -0
- package/dist/src/typechain-types/contracts/index.d.ts +11 -0
- package/dist/src/typechain-types/contracts/index.js +3 -0
- package/dist/src/typechain-types/contracts/index.js.map +1 -0
- package/dist/src/typechain-types/contracts/interfaces/IDaiLikePermit.d.ts +59 -0
- package/dist/src/typechain-types/contracts/interfaces/IDaiLikePermit.js +3 -0
- package/dist/src/typechain-types/contracts/interfaces/IDaiLikePermit.js.map +1 -0
- package/dist/src/typechain-types/contracts/interfaces/IERC20MetadataUppercase.d.ts +50 -0
- package/dist/src/typechain-types/contracts/interfaces/IERC20MetadataUppercase.js +3 -0
- package/dist/src/typechain-types/contracts/interfaces/IERC20MetadataUppercase.js.map +1 -0
- package/dist/src/typechain-types/contracts/interfaces/IWETH.d.ts +174 -0
- package/dist/src/typechain-types/contracts/interfaces/IWETH.js +3 -0
- package/dist/src/typechain-types/contracts/interfaces/IWETH.js.map +1 -0
- package/dist/src/typechain-types/contracts/interfaces/index.d.ts +3 -0
- package/dist/src/typechain-types/contracts/interfaces/index.js +3 -0
- package/dist/src/typechain-types/contracts/interfaces/index.js.map +1 -0
- package/dist/src/typechain-types/contracts/libraries/AddressArray.d.ts +27 -0
- package/dist/src/typechain-types/contracts/libraries/AddressArray.js +3 -0
- package/dist/src/typechain-types/contracts/libraries/AddressArray.js.map +1 -0
- package/dist/src/typechain-types/contracts/libraries/RevertReasonParser.d.ts +27 -0
- package/dist/src/typechain-types/contracts/libraries/RevertReasonParser.js +3 -0
- package/dist/src/typechain-types/contracts/libraries/RevertReasonParser.js.map +1 -0
- package/dist/src/typechain-types/contracts/libraries/SafeERC20.d.ts +27 -0
- package/dist/src/typechain-types/contracts/libraries/SafeERC20.js +3 -0
- package/dist/src/typechain-types/contracts/libraries/SafeERC20.js.map +1 -0
- package/dist/src/typechain-types/contracts/libraries/UniERC20.d.ts +27 -0
- package/dist/src/typechain-types/contracts/libraries/UniERC20.js +3 -0
- package/dist/src/typechain-types/contracts/libraries/UniERC20.js.map +1 -0
- package/dist/src/typechain-types/contracts/libraries/index.d.ts +4 -0
- package/dist/src/typechain-types/contracts/libraries/index.js +3 -0
- package/dist/src/typechain-types/contracts/libraries/index.js.map +1 -0
- package/dist/src/typechain-types/contracts/mocks/ERC20PermitMock.d.ts +238 -0
- package/dist/src/typechain-types/contracts/mocks/ERC20PermitMock.js +3 -0
- package/dist/src/typechain-types/contracts/mocks/ERC20PermitMock.js.map +1 -0
- package/dist/src/typechain-types/contracts/mocks/TokenCustomDecimalsMock.d.ts +331 -0
- package/dist/src/typechain-types/contracts/mocks/TokenCustomDecimalsMock.js +3 -0
- package/dist/src/typechain-types/contracts/mocks/TokenCustomDecimalsMock.js.map +1 -0
- package/dist/src/typechain-types/contracts/mocks/TokenMock.d.ts +283 -0
- package/dist/src/typechain-types/contracts/mocks/TokenMock.js +3 -0
- package/dist/src/typechain-types/contracts/mocks/TokenMock.js.map +1 -0
- package/dist/src/typechain-types/contracts/mocks/index.d.ts +3 -0
- package/dist/src/typechain-types/contracts/mocks/index.js +3 -0
- package/dist/src/typechain-types/contracts/mocks/index.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/ECDSATest.d.ts +213 -0
- package/dist/src/typechain-types/contracts/tests/ECDSATest.js +3 -0
- package/dist/src/typechain-types/contracts/tests/ECDSATest.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/RevertReasonParserTest.d.ts +138 -0
- package/dist/src/typechain-types/contracts/tests/RevertReasonParserTest.js +3 -0
- package/dist/src/typechain-types/contracts/tests/RevertReasonParserTest.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/StringUtilTest.d.ts +66 -0
- package/dist/src/typechain-types/contracts/tests/StringUtilTest.js +3 -0
- package/dist/src/typechain-types/contracts/tests/StringUtilTest.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/index.d.ts +5 -0
- package/dist/src/typechain-types/contracts/tests/index.js +3 -0
- package/dist/src/typechain-types/contracts/tests/index.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/AddressArrayMock.d.ts +108 -0
- package/dist/src/typechain-types/contracts/tests/mocks/AddressArrayMock.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/AddressArrayMock.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/AddressSetMock.d.ts +90 -0
- package/dist/src/typechain-types/contracts/tests/mocks/AddressSetMock.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/AddressSetMock.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/DaiLikePermitMock.d.ts +271 -0
- package/dist/src/typechain-types/contracts/tests/mocks/DaiLikePermitMock.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/DaiLikePermitMock.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/ERC1271WalletMock.d.ts +99 -0
- package/dist/src/typechain-types/contracts/tests/mocks/ERC1271WalletMock.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/ERC1271WalletMock.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/EthReceiverMock.d.ts +27 -0
- package/dist/src/typechain-types/contracts/tests/mocks/EthReceiverMock.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/EthReceiverMock.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/EthSenderMock.d.ts +50 -0
- package/dist/src/typechain-types/contracts/tests/mocks/EthSenderMock.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/EthSenderMock.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/PermitableMock.d.ts +50 -0
- package/dist/src/typechain-types/contracts/tests/mocks/PermitableMock.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/PermitableMock.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/ERC20NoReturnMock.d.ts +110 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/ERC20NoReturnMock.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/ERC20NoReturnMock.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/ERC20PermitNoRevertMock.d.ts +270 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/ERC20PermitNoRevertMock.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/ERC20PermitNoRevertMock.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ReturnFalseMock.d.ts +94 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ReturnFalseMock.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ReturnFalseMock.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ReturnTrueMock.d.ts +110 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ReturnTrueMock.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ReturnTrueMock.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ThroughZeroApprove.d.ts +58 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ThroughZeroApprove.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ThroughZeroApprove.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/SafeERC20Wrapper.d.ts +162 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/SafeERC20Wrapper.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/SafeERC20Wrapper.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/index.d.ts +6 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/index.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/SafeERC20Helper.sol/index.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/ERC20Capitals.d.ts +50 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/ERC20Capitals.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/ERC20Capitals.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/ERC20bytes32.d.ts +50 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/ERC20bytes32.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/ERC20bytes32.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/ERC20bytes32Capitals.d.ts +50 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/ERC20bytes32Capitals.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/ERC20bytes32Capitals.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/ETHBadReceiver.d.ts +50 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/ETHBadReceiver.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/ETHBadReceiver.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/IUniERC20Wrapper.d.ts +54 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/IUniERC20Wrapper.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/IUniERC20Wrapper.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/UniERC20Wrapper.d.ts +118 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/UniERC20Wrapper.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/UniERC20Wrapper.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/index.d.ts +6 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/index.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/UniERC20Helper.sol/index.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/WethReceiverMock.d.ts +27 -0
- package/dist/src/typechain-types/contracts/tests/mocks/WethReceiverMock.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/WethReceiverMock.js.map +1 -0
- package/dist/src/typechain-types/contracts/tests/mocks/index.d.ts +12 -0
- package/dist/src/typechain-types/contracts/tests/mocks/index.js +3 -0
- package/dist/src/typechain-types/contracts/tests/mocks/index.js.map +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/access/Ownable__factory.d.ts +42 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/access/Ownable__factory.js +72 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/access/Ownable__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/access/index.d.ts +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/access/index.js +9 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/access/index.js.map +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/index.d.ts +3 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/index.js +11 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/index.js.map +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1271__factory.d.ts +22 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1271__factory.js +44 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1271__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/interfaces/index.d.ts +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/interfaces/index.js +9 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/interfaces/index.js.map +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.d.ts +59 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.js +329 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.d.ts +35 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.js +203 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.d.ts +35 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.js +242 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol/ERC20Permit__factory.d.ts +35 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol/ERC20Permit__factory.js +365 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol/ERC20Permit__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol/index.d.ts +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol/index.js +9 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol/index.js.map +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit__factory.d.ts +22 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit__factory.js +95 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.d.ts +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.js +9 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.js.map +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/index.d.ts +3 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/index.js +12 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/index.js.map +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/index.d.ts +3 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/index.js +13 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/ERC20/index.js.map +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/index.d.ts +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/index.js +9 -0
- package/dist/src/typechain-types/factories/@openzeppelin/contracts/token/index.js.map +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/index.d.ts +1 -0
- package/dist/src/typechain-types/factories/@openzeppelin/index.js +9 -0
- package/dist/src/typechain-types/factories/@openzeppelin/index.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/EthReceiver__factory.d.ts +18 -0
- package/dist/src/typechain-types/factories/contracts/EthReceiver__factory.js +29 -0
- package/dist/src/typechain-types/factories/contracts/EthReceiver__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/GasChecker__factory.d.ts +29 -0
- package/dist/src/typechain-types/factories/contracts/GasChecker__factory.js +59 -0
- package/dist/src/typechain-types/factories/contracts/GasChecker__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/OnlyWethReceiver__factory.d.ts +18 -0
- package/dist/src/typechain-types/factories/contracts/OnlyWethReceiver__factory.js +29 -0
- package/dist/src/typechain-types/factories/contracts/OnlyWethReceiver__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/index.d.ts +7 -0
- package/dist/src/typechain-types/factories/contracts/index.js +18 -0
- package/dist/src/typechain-types/factories/contracts/index.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/interfaces/IDaiLikePermit__factory.d.ts +18 -0
- package/dist/src/typechain-types/factories/contracts/interfaces/IDaiLikePermit__factory.js +68 -0
- package/dist/src/typechain-types/factories/contracts/interfaces/IDaiLikePermit__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/interfaces/IERC20MetadataUppercase__factory.d.ts +18 -0
- package/dist/src/typechain-types/factories/contracts/interfaces/IERC20MetadataUppercase__factory.js +46 -0
- package/dist/src/typechain-types/factories/contracts/interfaces/IERC20MetadataUppercase__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/interfaces/IWETH__factory.d.ts +35 -0
- package/dist/src/typechain-types/factories/contracts/interfaces/IWETH__factory.js +223 -0
- package/dist/src/typechain-types/factories/contracts/interfaces/IWETH__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/interfaces/index.d.ts +3 -0
- package/dist/src/typechain-types/factories/contracts/interfaces/index.js +13 -0
- package/dist/src/typechain-types/factories/contracts/interfaces/index.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/libraries/AddressArray__factory.d.ts +25 -0
- package/dist/src/typechain-types/factories/contracts/libraries/AddressArray__factory.js +58 -0
- package/dist/src/typechain-types/factories/contracts/libraries/AddressArray__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/libraries/RevertReasonParser__factory.d.ts +25 -0
- package/dist/src/typechain-types/factories/contracts/libraries/RevertReasonParser__factory.js +48 -0
- package/dist/src/typechain-types/factories/contracts/libraries/RevertReasonParser__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/libraries/SafeERC20__factory.d.ts +25 -0
- package/dist/src/typechain-types/factories/contracts/libraries/SafeERC20__factory.js +73 -0
- package/dist/src/typechain-types/factories/contracts/libraries/SafeERC20__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/libraries/UniERC20__factory.d.ts +25 -0
- package/dist/src/typechain-types/factories/contracts/libraries/UniERC20__factory.js +73 -0
- package/dist/src/typechain-types/factories/contracts/libraries/UniERC20__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/libraries/index.d.ts +4 -0
- package/dist/src/typechain-types/factories/contracts/libraries/index.js +15 -0
- package/dist/src/typechain-types/factories/contracts/libraries/index.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/mocks/ERC20PermitMock__factory.d.ts +59 -0
- package/dist/src/typechain-types/factories/contracts/mocks/ERC20PermitMock__factory.js +414 -0
- package/dist/src/typechain-types/factories/contracts/mocks/ERC20PermitMock__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/mocks/TokenCustomDecimalsMock__factory.d.ts +59 -0
- package/dist/src/typechain-types/factories/contracts/mocks/TokenCustomDecimalsMock__factory.js +515 -0
- package/dist/src/typechain-types/factories/contracts/mocks/TokenCustomDecimalsMock__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/mocks/TokenMock__factory.d.ts +59 -0
- package/dist/src/typechain-types/factories/contracts/mocks/TokenMock__factory.js +417 -0
- package/dist/src/typechain-types/factories/contracts/mocks/TokenMock__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/mocks/index.d.ts +3 -0
- package/dist/src/typechain-types/factories/contracts/mocks/index.js +13 -0
- package/dist/src/typechain-types/factories/contracts/mocks/index.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/ECDSATest__factory.d.ts +35 -0
- package/dist/src/typechain-types/factories/contracts/tests/ECDSATest__factory.js +445 -0
- package/dist/src/typechain-types/factories/contracts/tests/ECDSATest__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/RevertReasonParserTest__factory.d.ts +33 -0
- package/dist/src/typechain-types/factories/contracts/tests/RevertReasonParserTest__factory.js +139 -0
- package/dist/src/typechain-types/factories/contracts/tests/RevertReasonParserTest__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/StringUtilTest__factory.d.ts +45 -0
- package/dist/src/typechain-types/factories/contracts/tests/StringUtilTest__factory.js +155 -0
- package/dist/src/typechain-types/factories/contracts/tests/StringUtilTest__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/index.d.ts +4 -0
- package/dist/src/typechain-types/factories/contracts/tests/index.js +15 -0
- package/dist/src/typechain-types/factories/contracts/tests/index.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/AddressArrayMock__factory.d.ts +41 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/AddressArrayMock__factory.js +147 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/AddressArrayMock__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/AddressSetMock__factory.d.ts +41 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/AddressSetMock__factory.js +142 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/AddressSetMock__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/DaiLikePermitMock__factory.d.ts +59 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/DaiLikePermitMock__factory.js +475 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/DaiLikePermitMock__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/ERC1271WalletMock__factory.d.ts +59 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/ERC1271WalletMock__factory.js +130 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/ERC1271WalletMock__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/EthReceiverMock__factory.d.ts +36 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/EthReceiverMock__factory.js +57 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/EthReceiverMock__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/EthSenderMock__factory.d.ts +31 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/EthSenderMock__factory.js +56 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/EthSenderMock__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/PermitableMock__factory.d.ts +37 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/PermitableMock__factory.js +66 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/PermitableMock__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20NoReturnMock__factory.d.ts +35 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20NoReturnMock__factory.js +139 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20NoReturnMock__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20PermitNoRevertMock__factory.d.ts +48 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20PermitNoRevertMock__factory.js +444 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20PermitNoRevertMock__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ReturnFalseMock__factory.d.ts +35 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ReturnFalseMock__factory.js +144 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ReturnFalseMock__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ReturnTrueMock__factory.d.ts +35 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ReturnTrueMock__factory.js +157 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ReturnTrueMock__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ThroughZeroApprove__factory.d.ts +41 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ThroughZeroApprove__factory.js +90 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ThroughZeroApprove__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/SafeERC20Wrapper__factory.d.ts +57 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/SafeERC20Wrapper__factory.js +206 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/SafeERC20Wrapper__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/index.d.ts +6 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/index.js +19 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/index.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ERC20Capitals__factory.d.ts +41 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ERC20Capitals__factory.js +85 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ERC20Capitals__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ERC20bytes32Capitals__factory.d.ts +41 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ERC20bytes32Capitals__factory.js +85 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ERC20bytes32Capitals__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ERC20bytes32__factory.d.ts +41 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ERC20bytes32__factory.js +85 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ERC20bytes32__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ETHBadReceiver__factory.d.ts +47 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ETHBadReceiver__factory.js +81 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ETHBadReceiver__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/IUniERC20Wrapper__factory.d.ts +18 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/IUniERC20Wrapper__factory.js +43 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/IUniERC20Wrapper__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/UniERC20Wrapper__factory.d.ts +51 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/UniERC20Wrapper__factory.js +216 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/UniERC20Wrapper__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/index.d.ts +6 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/index.js +19 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/index.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/WethReceiverMock__factory.d.ts +40 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/WethReceiverMock__factory.js +63 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/WethReceiverMock__factory.js.map +1 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/index.d.ts +10 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/index.js +26 -0
- package/dist/src/typechain-types/factories/contracts/tests/mocks/index.js.map +1 -0
- package/dist/src/typechain-types/factories/index.d.ts +2 -0
- package/dist/src/typechain-types/factories/index.js +10 -0
- package/dist/src/typechain-types/factories/index.js.map +1 -0
- package/dist/src/typechain-types/index.d.ts +91 -0
- package/dist/src/typechain-types/index.js +92 -0
- package/dist/src/typechain-types/index.js.map +1 -0
- package/package.json +16 -14
- package/utils/file-dependencies.js +203 -0
- package/dist/src/asserts.d.ts +0 -3
- package/dist/src/asserts.js +0 -33
- package/dist/src/asserts.js.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/permit.js.map +0 -1
- package/dist/src/prelude.d.ts +0 -20
- package/dist/src/prelude.js.map +0 -1
- package/dist/src/profileEVM.js.map +0 -1
- package/dist/src/utils.d.ts +0 -14
- package/dist/src/utils.js.map +0 -1
|
@@ -13,6 +13,8 @@ library StringUtil {
|
|
|
13
13
|
return toHex(abi.encodePacked(value));
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
/// @dev this is the assembly adaptation of highly optimized toHex16 code from Mikhail Vladimirov
|
|
17
|
+
/// https://stackoverflow.com/a/69266989
|
|
16
18
|
function toHex(bytes memory data) internal pure returns (string memory result) {
|
|
17
19
|
/// @solidity memory-safe-assembly
|
|
18
20
|
assembly { // solhint-disable-line no-inline-assembly
|
|
@@ -44,7 +46,7 @@ library StringUtil {
|
|
|
44
46
|
shr(4, add(output, 0x0606060606060606060606060606060606060606060606060606060606060606)),
|
|
45
47
|
0x0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F
|
|
46
48
|
),
|
|
47
|
-
7
|
|
49
|
+
7 // Change 7 to 39 for lower case output
|
|
48
50
|
)
|
|
49
51
|
)
|
|
50
52
|
}
|
|
@@ -52,11 +54,11 @@ library StringUtil {
|
|
|
52
54
|
result := mload(0x40)
|
|
53
55
|
let length := mload(data)
|
|
54
56
|
let resultLength := shl(1, length)
|
|
55
|
-
let toPtr := add(result, 0x22)
|
|
56
|
-
mstore(0x40, add(toPtr, resultLength))
|
|
57
|
-
mstore(add(result, 2), 0x3078)
|
|
58
|
-
|
|
59
|
-
mstore(result, add(resultLength, 2))
|
|
57
|
+
let toPtr := add(result, 0x22) // 32 bytes for length + 2 bytes for '0x'
|
|
58
|
+
mstore(0x40, add(toPtr, resultLength)) // move free memory pointer
|
|
59
|
+
mstore(add(result, 2), 0x3078) // 0x3078 is right aligned so we write to `result + 2`
|
|
60
|
+
// to store the last 2 bytes in the beginning of the string
|
|
61
|
+
mstore(result, add(resultLength, 2)) // extra 2 bytes for '0x'
|
|
60
62
|
|
|
61
63
|
for {
|
|
62
64
|
let fromPtr := add(data, 0x20)
|
|
@@ -9,6 +9,7 @@ import "../interfaces/IERC20MetadataUppercase.sol";
|
|
|
9
9
|
import "./SafeERC20.sol";
|
|
10
10
|
import "./StringUtil.sol";
|
|
11
11
|
|
|
12
|
+
/// @title Library, which allows usage of ETH as ERC20 and ERC20 itself. Uses SafeERC20 library for ERC20 interface.
|
|
12
13
|
library UniERC20 {
|
|
13
14
|
using SafeERC20 for IERC20;
|
|
14
15
|
|
|
@@ -23,10 +24,12 @@ library UniERC20 {
|
|
|
23
24
|
IERC20 private constant _ETH_ADDRESS = IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);
|
|
24
25
|
IERC20 private constant _ZERO_ADDRESS = IERC20(address(0));
|
|
25
26
|
|
|
27
|
+
/// @dev Returns true if `token` is ETH.
|
|
26
28
|
function isETH(IERC20 token) internal pure returns (bool) {
|
|
27
29
|
return (token == _ZERO_ADDRESS || token == _ETH_ADDRESS);
|
|
28
30
|
}
|
|
29
31
|
|
|
32
|
+
/// @dev Returns `account` ERC20 `token` balance.
|
|
30
33
|
function uniBalanceOf(IERC20 token, address account) internal view returns (uint256) {
|
|
31
34
|
if (isETH(token)) {
|
|
32
35
|
return account.balance;
|
|
@@ -35,8 +38,13 @@ library UniERC20 {
|
|
|
35
38
|
}
|
|
36
39
|
}
|
|
37
40
|
|
|
38
|
-
/// @dev
|
|
39
|
-
function
|
|
41
|
+
/// @dev `token` transfer `to` `amount`.
|
|
42
|
+
/// Note that this function does nothing in case of zero amount.
|
|
43
|
+
function uniTransfer(
|
|
44
|
+
IERC20 token,
|
|
45
|
+
address payable to,
|
|
46
|
+
uint256 amount
|
|
47
|
+
) internal {
|
|
40
48
|
if (amount > 0) {
|
|
41
49
|
if (isETH(token)) {
|
|
42
50
|
if (address(this).balance < amount) revert InsufficientBalance();
|
|
@@ -49,8 +57,14 @@ library UniERC20 {
|
|
|
49
57
|
}
|
|
50
58
|
}
|
|
51
59
|
|
|
52
|
-
/// @dev
|
|
53
|
-
|
|
60
|
+
/// @dev `token` transfer `from` `to` `amount`.
|
|
61
|
+
/// Note that this function does nothing in case of zero amount.
|
|
62
|
+
function uniTransferFrom(
|
|
63
|
+
IERC20 token,
|
|
64
|
+
address payable from,
|
|
65
|
+
address to,
|
|
66
|
+
uint256 amount
|
|
67
|
+
) internal {
|
|
54
68
|
if (amount > 0) {
|
|
55
69
|
if (isETH(token)) {
|
|
56
70
|
if (msg.value < amount) revert NotEnoughValue();
|
|
@@ -70,47 +84,62 @@ library UniERC20 {
|
|
|
70
84
|
}
|
|
71
85
|
}
|
|
72
86
|
|
|
73
|
-
|
|
87
|
+
/// @dev Returns `token` symbol from ERC20 metadata.
|
|
88
|
+
function uniSymbol(IERC20 token) internal view returns (string memory) {
|
|
74
89
|
return _uniDecode(token, IERC20Metadata.symbol.selector, IERC20MetadataUppercase.SYMBOL.selector);
|
|
75
90
|
}
|
|
76
91
|
|
|
77
|
-
|
|
92
|
+
/// @dev Returns `token` name from ERC20 metadata.
|
|
93
|
+
function uniName(IERC20 token) internal view returns (string memory) {
|
|
78
94
|
return _uniDecode(token, IERC20Metadata.name.selector, IERC20MetadataUppercase.NAME.selector);
|
|
79
95
|
}
|
|
80
96
|
|
|
81
|
-
|
|
97
|
+
/// @dev Reverts if `token` is ETH, otherwise performs ERC20 forceApprove.
|
|
98
|
+
function uniApprove(
|
|
99
|
+
IERC20 token,
|
|
100
|
+
address to,
|
|
101
|
+
uint256 amount
|
|
102
|
+
) internal {
|
|
82
103
|
if (isETH(token)) revert ApproveCalledOnETH();
|
|
83
104
|
|
|
84
105
|
token.forceApprove(to, amount);
|
|
85
106
|
}
|
|
86
107
|
|
|
87
|
-
/// 20K gas is provided to account for possible implementations of name/symbol
|
|
108
|
+
/// @dev 20K gas is provided to account for possible implementations of name/symbol
|
|
88
109
|
/// (token implementation might be behind proxy or store the value in storage)
|
|
89
|
-
function _uniDecode(
|
|
110
|
+
function _uniDecode(
|
|
111
|
+
IERC20 token,
|
|
112
|
+
bytes4 lowerCaseSelector,
|
|
113
|
+
bytes4 upperCaseSelector
|
|
114
|
+
) private view returns (string memory result) {
|
|
90
115
|
if (isETH(token)) {
|
|
91
116
|
return "ETH";
|
|
92
117
|
}
|
|
93
118
|
|
|
94
|
-
(bool success, bytes memory data) = address(token).staticcall{
|
|
119
|
+
(bool success, bytes memory data) = address(token).staticcall{gas: 20000}(
|
|
95
120
|
abi.encodeWithSelector(lowerCaseSelector)
|
|
96
121
|
);
|
|
97
122
|
if (!success) {
|
|
98
|
-
(success, data) = address(token).staticcall{
|
|
99
|
-
abi.encodeWithSelector(upperCaseSelector)
|
|
100
|
-
);
|
|
123
|
+
(success, data) = address(token).staticcall{gas: 20000}(abi.encodeWithSelector(upperCaseSelector));
|
|
101
124
|
}
|
|
102
125
|
|
|
103
126
|
if (success && data.length >= 0x40) {
|
|
104
127
|
(uint256 offset, uint256 len) = abi.decode(data, (uint256, uint256));
|
|
105
|
-
|
|
128
|
+
/*
|
|
129
|
+
return data is padded up to 32 bytes with ABI encoder also sometimes
|
|
130
|
+
there is extra 32 bytes of zeros padded in the end:
|
|
131
|
+
https://github.com/ethereum/solidity/issues/10170
|
|
132
|
+
because of that we can't check for equality and instead check
|
|
133
|
+
that overall data length is greater or equal than string length + extra 64 bytes
|
|
134
|
+
*/
|
|
135
|
+
if (offset == 0x20 && data.length >= 0x40 + len) {
|
|
106
136
|
/// @solidity memory-safe-assembly
|
|
107
137
|
assembly { // solhint-disable-line no-inline-assembly
|
|
108
|
-
result := add(data,
|
|
138
|
+
result := add(data, 0x40)
|
|
109
139
|
}
|
|
110
140
|
return result;
|
|
111
141
|
}
|
|
112
142
|
}
|
|
113
|
-
|
|
114
143
|
if (success && data.length == 32) {
|
|
115
144
|
uint256 len = 0;
|
|
116
145
|
while (len < data.length && data[len] >= 0x20 && data[len] <= 0x7E) {
|
|
@@ -8,7 +8,12 @@ import "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol";
|
|
|
8
8
|
contract TokenCustomDecimalsMock is ERC20Permit, Ownable {
|
|
9
9
|
uint8 internal immutable _decimals;
|
|
10
10
|
|
|
11
|
-
constructor(
|
|
11
|
+
constructor(
|
|
12
|
+
string memory name,
|
|
13
|
+
string memory symbol,
|
|
14
|
+
uint256 amount,
|
|
15
|
+
uint8 decimals_
|
|
16
|
+
) ERC20(name, symbol) ERC20Permit(name) {
|
|
12
17
|
_mint(msg.sender, amount);
|
|
13
18
|
_decimals = decimals_;
|
|
14
19
|
}
|
|
@@ -25,7 +30,7 @@ contract TokenCustomDecimalsMock is ERC20Permit, Ownable {
|
|
|
25
30
|
return _decimals;
|
|
26
31
|
}
|
|
27
32
|
|
|
28
|
-
function getChainId() external view returns(uint256) {
|
|
33
|
+
function getChainId() external view returns (uint256) {
|
|
29
34
|
return block.chainid;
|
|
30
35
|
}
|
|
31
36
|
}
|
|
@@ -6,7 +6,6 @@ pragma abicoder v1;
|
|
|
6
6
|
import "@openzeppelin/contracts/access/Ownable.sol";
|
|
7
7
|
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
|
|
8
8
|
|
|
9
|
-
|
|
10
9
|
contract TokenMock is ERC20, Ownable {
|
|
11
10
|
// solhint-disable-next-line no-empty-blocks
|
|
12
11
|
constructor(string memory name, string memory symbol) ERC20(name, symbol) {}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
require("@typechain/hardhat");
|
|
5
|
+
require("@nomicfoundation/hardhat-chai-matchers");
|
|
6
|
+
require("hardhat-gas-reporter");
|
|
7
|
+
require('solidity-coverage'); // require because no TS typings available
|
|
8
|
+
const dotenv_1 = tslib_1.__importDefault(require("dotenv"));
|
|
9
|
+
const hardhat_networks_1 = tslib_1.__importDefault(require("./hardhat.networks"));
|
|
10
|
+
dotenv_1.default.config();
|
|
11
|
+
const config = {
|
|
12
|
+
solidity: {
|
|
13
|
+
version: '0.8.15',
|
|
14
|
+
settings: {
|
|
15
|
+
optimizer: {
|
|
16
|
+
enabled: true,
|
|
17
|
+
runs: 1000000,
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
networks: hardhat_networks_1.default,
|
|
22
|
+
gasReporter: {
|
|
23
|
+
enabled: true,
|
|
24
|
+
currency: 'USD',
|
|
25
|
+
},
|
|
26
|
+
typechain: {
|
|
27
|
+
target: 'ethers-v5',
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
exports.default = config;
|
|
31
|
+
//# sourceMappingURL=hardhat.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hardhat.config.js","sourceRoot":"","sources":["../../hardhat.config.ts"],"names":[],"mappings":";;;AAAA,8BAA4B;AAC5B,kDAAgD;AAChD,gCAA8B;AAC9B,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,0CAA0C;AACxE,4DAA4B;AAE5B,kFAA0C;AAE1C,gBAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,MAAM,GAAsB;IAC9B,QAAQ,EAAE;QACN,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE;YACN,SAAS,EAAE;gBACP,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,OAAO;aAChB;SACJ;KACJ;IACD,QAAQ,EAAR,0BAAQ;IACR,WAAW,EAAE;QACT,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,KAAK;KAClB;IACD,SAAS,EAAE;QACP,MAAM,EAAE,WAAW;KACtB;CACJ,CAAC;AAEF,kBAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const dotenv_1 = tslib_1.__importDefault(require("dotenv"));
|
|
5
|
+
dotenv_1.default.config();
|
|
6
|
+
const networks = {};
|
|
7
|
+
function register(name, chainId, url, privateKey) {
|
|
8
|
+
if (url && privateKey) {
|
|
9
|
+
networks[name] = {
|
|
10
|
+
url,
|
|
11
|
+
chainId,
|
|
12
|
+
accounts: [privateKey],
|
|
13
|
+
};
|
|
14
|
+
console.log(`Network '${name}' registered`);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
console.log(`Network '${name}' not registered`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
register('mainnet', 1, process.env.MAINNET_RPC_URL, process.env.MAINNET_PRIVATE_KEY);
|
|
21
|
+
register('bsc', 56, process.env.BSC_RPC_URL, process.env.BSC_PRIVATE_KEY);
|
|
22
|
+
register('kovan', 42, process.env.KOVAN_RPC_URL, process.env.KOVAN_PRIVATE_KEY);
|
|
23
|
+
register('optimistic', 10, process.env.OPTIMISTIC_RPC_URL, process.env.OPTIMISTIC_PRIVATE_KEY);
|
|
24
|
+
register('kovan-optimistic', 69, process.env.KOVAN_OPTIMISTIC_RPC_URL, process.env.KOVAN_OPTIMISTIC_PRIVATE_KEY);
|
|
25
|
+
register('matic', 137, process.env.MATIC_RPC_URL, process.env.MATIC_PRIVATE_KEY);
|
|
26
|
+
register('arbitrum', 42161, process.env.ARBITRUM_RPC_URL, process.env.ARBITRUM_PRIVATE_KEY);
|
|
27
|
+
register('ropsten', 3, process.env.ROPSTEN_RPC_URL, process.env.ROPSTEN_PRIVATE_KEY);
|
|
28
|
+
register('xdai', 100, process.env.XDAI_RPC_URL, process.env.XDAI_PRIVATE_KEY);
|
|
29
|
+
register('avax', 43114, process.env.AVAX_RPC_URL, process.env.AVAX_PRIVATE_KEY);
|
|
30
|
+
exports.default = networks;
|
|
31
|
+
//# sourceMappingURL=hardhat.networks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hardhat.networks.js","sourceRoot":"","sources":["../../hardhat.networks.ts"],"names":[],"mappings":";;;AAAA,4DAA4B;AAG5B,gBAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,QAAQ,GAAuB,EAAE,CAAC;AAExC,SAAS,QAAQ,CAAC,IAAY,EAAE,OAAe,EAAE,GAAY,EAAE,UAAmB;IAC9E,IAAI,GAAG,IAAI,UAAU,EAAE;QACnB,QAAQ,CAAC,IAAI,CAAC,GAAG;YACb,GAAG;YACH,OAAO;YACP,QAAQ,EAAE,CAAC,UAAU,CAAC;SACzB,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,cAAc,CAAC,CAAC;KAC/C;SAAM;QACH,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,kBAAkB,CAAC,CAAC;KACnD;AACL,CAAC;AAED,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACrF,QAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC1E,QAAQ,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAChF,QAAQ,CAAC,YAAY,EAAE,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;AAC/F,QAAQ,CAAC,kBAAkB,EAAE,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AACjH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AACjF,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAC5F,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACrF,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAC9E,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAEhF,kBAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function assertRoughlyEqualValues(expected: string | number | bigint, actual: string | number | bigint, relativeDiff: number): void;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assertRoughlyEqualValues = void 0;
|
|
4
|
+
const prelude_1 = require("./prelude");
|
|
5
|
+
function assertRoughlyEqualValues(expected, actual, relativeDiff) {
|
|
6
|
+
let expectedBN = BigInt(expected);
|
|
7
|
+
let actualBN = BigInt(actual);
|
|
8
|
+
(0, prelude_1.expect)(expectedBN * actualBN).to.be.gte(0, 'Values are of different sign');
|
|
9
|
+
if (expectedBN < 0)
|
|
10
|
+
expectedBN = -expectedBN;
|
|
11
|
+
if (actualBN < 0)
|
|
12
|
+
actualBN = -actualBN;
|
|
13
|
+
let multiplerNumerator = relativeDiff;
|
|
14
|
+
let multiplerDenominator = 1n;
|
|
15
|
+
while (!Number.isInteger(multiplerNumerator)) {
|
|
16
|
+
multiplerDenominator = multiplerDenominator * 10n;
|
|
17
|
+
multiplerNumerator *= 10;
|
|
18
|
+
}
|
|
19
|
+
const diff = expectedBN > actualBN ? expectedBN - actualBN : actualBN - expectedBN;
|
|
20
|
+
const treshold = (expectedBN * BigInt(multiplerNumerator)) / multiplerDenominator;
|
|
21
|
+
if (diff > treshold) {
|
|
22
|
+
(0, prelude_1.expect)(actualBN).to.be.equal(expectedBN, `${actual} != ${expected} with ${relativeDiff} precision`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.assertRoughlyEqualValues = assertRoughlyEqualValues;
|
|
26
|
+
//# sourceMappingURL=asserts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asserts.js","sourceRoot":"","sources":["../../../src/asserts.ts"],"names":[],"mappings":";;;AAAA,uCAAmC;AAEnC,SAAgB,wBAAwB,CACpC,QAAkC,EAClC,MAAgC,EAChC,YAAoB;IAEpB,IAAI,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAA,gBAAM,EAAC,UAAU,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,8BAA8B,CAAC,CAAC;IAE3E,IAAI,UAAU,GAAG,CAAC;QAAE,UAAU,GAAG,CAAC,UAAU,CAAC;IAC7C,IAAI,QAAQ,GAAG,CAAC;QAAE,QAAQ,GAAG,CAAC,QAAQ,CAAC;IAEvC,IAAI,kBAAkB,GAAG,YAAY,CAAC;IACtC,IAAI,oBAAoB,GAAG,EAAE,CAAC;IAC9B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE;QAC1C,oBAAoB,GAAG,oBAAoB,GAAG,GAAG,CAAC;QAClD,kBAAkB,IAAI,EAAE,CAAC;KAC5B;IACD,MAAM,IAAI,GAAG,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,UAAU,CAAC;IACnF,MAAM,QAAQ,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC,GAAG,oBAAoB,CAAC;IAClF,IAAI,IAAI,GAAG,QAAQ,EAAE;QACjB,IAAA,gBAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,MAAM,OAAO,QAAQ,SAAS,YAAY,YAAY,CAAC,CAAC;KACvG;AACL,CAAC;AAvBD,4DAuBC"}
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";AAAA,iCAAiC;;;AAEjC,oDAA0B;AAC1B,mDAAyB;AACzB,oDAA0B;AAC1B,uDAA6B;AAC7B,kDAAwB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { SignTypedDataVersion } from '@metamask/eth-sig-util';
|
|
2
|
+
import { Contract } from 'ethers';
|
|
3
|
+
import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers';
|
|
4
4
|
export declare const TypedDataVersion = SignTypedDataVersion.V4;
|
|
5
|
-
export declare const defaultDeadline:
|
|
5
|
+
export declare const defaultDeadline: bigint;
|
|
6
6
|
export declare const EIP712Domain: {
|
|
7
7
|
name: string;
|
|
8
8
|
type: string;
|
|
@@ -15,16 +15,11 @@ export declare const DaiLikePermit: {
|
|
|
15
15
|
name: string;
|
|
16
16
|
type: string;
|
|
17
17
|
}[];
|
|
18
|
-
export declare function trim0x(bigNumber:
|
|
18
|
+
export declare function trim0x(bigNumber: bigint | string): string;
|
|
19
19
|
export declare function cutSelector(data: string): string;
|
|
20
20
|
export declare function domainSeparator(name: string, version: string, chainId: string, verifyingContract: string): string;
|
|
21
21
|
export declare function buildData(name: string, version: string, chainId: number, verifyingContract: string, owner: string, spender: string, value: string, nonce: string, deadline?: string): {
|
|
22
|
-
readonly primaryType: "Permit";
|
|
23
22
|
readonly types: {
|
|
24
|
-
readonly EIP712Domain: {
|
|
25
|
-
name: string;
|
|
26
|
-
type: string;
|
|
27
|
-
}[];
|
|
28
23
|
readonly Permit: {
|
|
29
24
|
name: string;
|
|
30
25
|
type: string;
|
|
@@ -45,12 +40,7 @@ export declare function buildData(name: string, version: string, chainId: number
|
|
|
45
40
|
};
|
|
46
41
|
};
|
|
47
42
|
export declare function buildDataLikeDai(name: string, version: string, chainId: number, verifyingContract: string, holder: string, spender: string, nonce: string, allowed: boolean, expiry?: string): {
|
|
48
|
-
readonly primaryType: "Permit";
|
|
49
43
|
readonly types: {
|
|
50
|
-
readonly EIP712Domain: {
|
|
51
|
-
name: string;
|
|
52
|
-
type: string;
|
|
53
|
-
}[];
|
|
54
44
|
readonly Permit: {
|
|
55
45
|
name: string;
|
|
56
46
|
type: string;
|
|
@@ -70,11 +60,6 @@ export declare function buildDataLikeDai(name: string, version: string, chainId:
|
|
|
70
60
|
readonly allowed: boolean;
|
|
71
61
|
};
|
|
72
62
|
};
|
|
73
|
-
export
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
export declare function signWithPk<T extends MessageTypes>(privateKey: Buffer | string, data: TypedMessage<T>): string;
|
|
78
|
-
export declare function getPermit(owner: string, ownerPrivateKey: string, permitContract: PermittableToken, tokenVersion: string, chainId: number, spender: string, value: string, deadline?: string): Promise<string>;
|
|
79
|
-
export declare function getPermitLikeDai(holder: string, holderPrivateKey: string, permitContract: PermittableToken, tokenVersion: string, chainId: number, spender: string, allowed: boolean, expiry?: string): Promise<string>;
|
|
80
|
-
export declare function withTarget(target: BN | string, data: BN | string): string;
|
|
63
|
+
export declare function getPermit(owner: SignerWithAddress, permitContract: Contract, tokenVersion: string, chainId: number, spender: string, value: string, deadline?: string): Promise<string>;
|
|
64
|
+
export declare function getPermitLikeDai(holder: SignerWithAddress, permitContract: Contract, tokenVersion: string, chainId: number, spender: string, allowed: boolean, expiry?: string): Promise<string>;
|
|
65
|
+
export declare function withTarget(target: bigint | string, data: bigint | string): string;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.withTarget = exports.getPermitLikeDai = exports.getPermit = exports.
|
|
3
|
+
exports.withTarget = exports.getPermitLikeDai = exports.getPermit = exports.buildDataLikeDai = exports.buildData = exports.domainSeparator = exports.cutSelector = exports.trim0x = exports.DaiLikePermit = exports.Permit = exports.EIP712Domain = exports.defaultDeadline = exports.TypedDataVersion = void 0;
|
|
4
4
|
const eth_sig_util_1 = require("@metamask/eth-sig-util");
|
|
5
|
-
const ethereumjs_util_1 = require("ethereumjs-util");
|
|
6
5
|
const prelude_1 = require("./prelude");
|
|
6
|
+
const utils_1 = require("ethers/lib/utils");
|
|
7
7
|
exports.TypedDataVersion = eth_sig_util_1.SignTypedDataVersion.V4;
|
|
8
8
|
exports.defaultDeadline = prelude_1.constants.MAX_UINT256;
|
|
9
9
|
exports.EIP712Domain = [
|
|
@@ -40,55 +40,57 @@ function cutSelector(data) {
|
|
|
40
40
|
}
|
|
41
41
|
exports.cutSelector = cutSelector;
|
|
42
42
|
function domainSeparator(name, version, chainId, verifyingContract) {
|
|
43
|
-
return '0x' +
|
|
43
|
+
return ('0x' +
|
|
44
|
+
eth_sig_util_1.TypedDataUtils.hashStruct('EIP712Domain', { name, version, chainId, verifyingContract }, { EIP712Domain: exports.EIP712Domain }, exports.TypedDataVersion).toString('hex'));
|
|
44
45
|
}
|
|
45
46
|
exports.domainSeparator = domainSeparator;
|
|
46
|
-
function buildData(name, version, chainId, verifyingContract, owner, spender, value, nonce, deadline = exports.defaultDeadline) {
|
|
47
|
+
function buildData(name, version, chainId, verifyingContract, owner, spender, value, nonce, deadline = exports.defaultDeadline.toString()) {
|
|
47
48
|
return {
|
|
48
|
-
|
|
49
|
-
types: { EIP712Domain: exports.EIP712Domain, Permit: exports.Permit },
|
|
49
|
+
types: { Permit: exports.Permit },
|
|
50
50
|
domain: { name, version, chainId, verifyingContract },
|
|
51
51
|
message: { owner, spender, value, nonce, deadline },
|
|
52
52
|
};
|
|
53
53
|
}
|
|
54
54
|
exports.buildData = buildData;
|
|
55
|
-
function buildDataLikeDai(name, version, chainId, verifyingContract, holder, spender, nonce, allowed, expiry = exports.defaultDeadline) {
|
|
55
|
+
function buildDataLikeDai(name, version, chainId, verifyingContract, holder, spender, nonce, allowed, expiry = exports.defaultDeadline.toString()) {
|
|
56
56
|
return {
|
|
57
|
-
|
|
58
|
-
types: { EIP712Domain: exports.EIP712Domain, Permit: exports.DaiLikePermit },
|
|
57
|
+
types: { Permit: exports.DaiLikePermit },
|
|
59
58
|
domain: { name, version, chainId, verifyingContract },
|
|
60
59
|
message: { holder, spender, nonce, expiry, allowed },
|
|
61
60
|
};
|
|
62
61
|
}
|
|
63
62
|
exports.buildDataLikeDai = buildDataLikeDai;
|
|
64
|
-
function signWithPk(privateKey, data) {
|
|
65
|
-
const buffer = Buffer.isBuffer(privateKey) ? privateKey : Buffer.from(trim0x(privateKey), 'hex');
|
|
66
|
-
return (0, eth_sig_util_1.signTypedData)({ privateKey: buffer, data, version: exports.TypedDataVersion });
|
|
67
|
-
}
|
|
68
|
-
exports.signWithPk = signWithPk;
|
|
69
63
|
/*
|
|
70
64
|
* @param permitContract The contract object with ERC20Permit type and token address for which the permit creating.
|
|
71
65
|
*/
|
|
72
|
-
async function getPermit(owner,
|
|
73
|
-
const nonce = await permitContract.nonces(owner);
|
|
66
|
+
async function getPermit(owner, permitContract, tokenVersion, chainId, spender, value, deadline = exports.defaultDeadline.toString()) {
|
|
67
|
+
const nonce = await permitContract.nonces(owner.address);
|
|
74
68
|
const name = await permitContract.name();
|
|
75
|
-
const data = buildData(name, tokenVersion, chainId, permitContract.address, owner, spender, value, nonce.toString(), deadline);
|
|
76
|
-
const signature =
|
|
77
|
-
const { v, r, s } = (0,
|
|
78
|
-
const permitCall = permitContract.
|
|
69
|
+
const data = buildData(name, tokenVersion, chainId, permitContract.address, owner.address, spender, value, nonce.toString(), deadline);
|
|
70
|
+
const signature = await owner._signTypedData(data.domain, data.types, data.message);
|
|
71
|
+
const { v, r, s } = (0, utils_1.splitSignature)(signature);
|
|
72
|
+
const permitCall = permitContract.interface.encodeFunctionData('permit', [
|
|
73
|
+
owner.address,
|
|
74
|
+
spender,
|
|
75
|
+
value,
|
|
76
|
+
deadline,
|
|
77
|
+
v,
|
|
78
|
+
r,
|
|
79
|
+
s,
|
|
80
|
+
]);
|
|
79
81
|
return cutSelector(permitCall);
|
|
80
82
|
}
|
|
81
83
|
exports.getPermit = getPermit;
|
|
82
84
|
/*
|
|
83
85
|
* @param permitContract The contract object with ERC20PermitLikeDai type and token address for which the permit creating.
|
|
84
86
|
*/
|
|
85
|
-
async function getPermitLikeDai(holder,
|
|
86
|
-
const nonce = await permitContract.nonces(holder);
|
|
87
|
+
async function getPermitLikeDai(holder, permitContract, tokenVersion, chainId, spender, allowed, expiry = exports.defaultDeadline.toString()) {
|
|
88
|
+
const nonce = await permitContract.nonces(holder.address);
|
|
87
89
|
const name = await permitContract.name();
|
|
88
|
-
const data = buildDataLikeDai(name, tokenVersion, chainId, permitContract.address, holder, spender, nonce.toString(), allowed, expiry);
|
|
89
|
-
const signature =
|
|
90
|
-
const { v, r, s } = (0,
|
|
91
|
-
const permitCall = permitContract.
|
|
90
|
+
const data = buildDataLikeDai(name, tokenVersion, chainId, permitContract.address, holder.address, spender, nonce.toString(), allowed, expiry);
|
|
91
|
+
const signature = await holder._signTypedData(data.domain, data.types, data.message);
|
|
92
|
+
const { v, r, s } = (0, utils_1.splitSignature)(signature);
|
|
93
|
+
const permitCall = permitContract.interface.encodeFunctionData('permit(address,address,uint256,uint256,bool,uint8,bytes32,bytes32)', [holder.address, spender, nonce, expiry, allowed, v, r, s]);
|
|
92
94
|
return cutSelector(permitCall);
|
|
93
95
|
}
|
|
94
96
|
exports.getPermitLikeDai = getPermitLikeDai;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permit.js","sourceRoot":"","sources":["../../../src/permit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Assertion, AssertionError, assert, expect, config, should } from 'chai';
|
|
2
|
+
import { time } from '@nomicfoundation/hardhat-network-helpers';
|
|
3
|
+
export declare const constants: {
|
|
4
|
+
readonly ZERO_ADDRESS: "0x0000000000000000000000000000000000000000";
|
|
5
|
+
readonly EEE_ADDRESS: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";
|
|
6
|
+
readonly ZERO_BYTES32: "0x0000000000000000000000000000000000000000000000000000000000000000";
|
|
7
|
+
readonly MAX_UINT256: bigint;
|
|
8
|
+
readonly MAX_INT256: bigint;
|
|
9
|
+
readonly MIN_INT256: bigint;
|
|
10
|
+
readonly MAX_UINT128: bigint;
|
|
11
|
+
};
|
|
12
|
+
export { time };
|
|
13
|
+
export declare function ether(n: string): bigint;
|
|
14
|
+
export { Assertion, AssertionError, assert, expect, config, should };
|
|
@@ -1,40 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.should = exports.config = exports.expect = exports.assert = exports.AssertionError = exports.Assertion = exports.ether = exports.time = exports.
|
|
4
|
-
const
|
|
5
|
-
const chai_1 = tslib_1.__importStar(require("chai"));
|
|
3
|
+
exports.should = exports.config = exports.expect = exports.assert = exports.AssertionError = exports.Assertion = exports.ether = exports.time = exports.constants = void 0;
|
|
4
|
+
const chai_1 = require("chai");
|
|
6
5
|
Object.defineProperty(exports, "Assertion", { enumerable: true, get: function () { return chai_1.Assertion; } });
|
|
7
6
|
Object.defineProperty(exports, "AssertionError", { enumerable: true, get: function () { return chai_1.AssertionError; } });
|
|
8
7
|
Object.defineProperty(exports, "assert", { enumerable: true, get: function () { return chai_1.assert; } });
|
|
9
8
|
Object.defineProperty(exports, "expect", { enumerable: true, get: function () { return chai_1.expect; } });
|
|
10
9
|
Object.defineProperty(exports, "config", { enumerable: true, get: function () { return chai_1.config; } });
|
|
11
10
|
Object.defineProperty(exports, "should", { enumerable: true, get: function () { return chai_1.should; } });
|
|
12
|
-
require("
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
const bn_js_1 = tslib_1.__importDefault(require("bn.js"));
|
|
16
|
-
exports.BN = bn_js_1.default;
|
|
17
|
-
chai_1.default.use(chai_as_promised_1.default);
|
|
18
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
19
|
-
const { time: timeImpl } = require('@openzeppelin/test-helpers');
|
|
20
|
-
function toBN(num, base) {
|
|
21
|
-
if (typeof (num) === 'string' && num.startsWith('0x')) {
|
|
22
|
-
return new bn_js_1.default(num.substring(2), 16);
|
|
23
|
-
}
|
|
24
|
-
return new bn_js_1.default(num, base);
|
|
25
|
-
}
|
|
26
|
-
exports.toBN = toBN;
|
|
11
|
+
const utils_1 = require("ethers/lib/utils");
|
|
12
|
+
const hardhat_network_helpers_1 = require("@nomicfoundation/hardhat-network-helpers");
|
|
13
|
+
Object.defineProperty(exports, "time", { enumerable: true, get: function () { return hardhat_network_helpers_1.time; } });
|
|
27
14
|
exports.constants = {
|
|
28
15
|
ZERO_ADDRESS: '0x0000000000000000000000000000000000000000',
|
|
29
16
|
EEE_ADDRESS: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',
|
|
30
17
|
ZERO_BYTES32: '0x0000000000000000000000000000000000000000000000000000000000000000',
|
|
31
|
-
MAX_UINT256:
|
|
32
|
-
MAX_INT256:
|
|
33
|
-
MIN_INT256:
|
|
18
|
+
MAX_UINT256: 2n ** 256n - 1n,
|
|
19
|
+
MAX_INT256: 2n ** 255n - 1n,
|
|
20
|
+
MIN_INT256: -(2n ** 255n),
|
|
21
|
+
MAX_UINT128: 2n ** 128n - 1n,
|
|
34
22
|
};
|
|
35
|
-
exports.time = timeImpl;
|
|
36
23
|
function ether(n) {
|
|
37
|
-
return
|
|
24
|
+
return (0, utils_1.parseUnits)(n).toBigInt();
|
|
38
25
|
}
|
|
39
26
|
exports.ether = ether;
|
|
40
27
|
//# sourceMappingURL=prelude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prelude.js","sourceRoot":"","sources":["../../../src/prelude.ts"],"names":[],"mappings":";;;AAAA,+BAAiF;AAsBxE,0FAtBA,gBAAS,OAsBA;AAAE,+FAtBA,qBAAc,OAsBA;AAAE,uFAtBA,aAAM,OAsBA;AAAE,uFAtBA,aAAM,OAsBA;AAAE,uFAtBA,aAAM,OAsBA;AAAE,uFAtBA,aAAM,OAsBA;AArBlE,4CAA8C;AAC9C,sFAAgE;AAavD,qFAbA,8BAAI,OAaA;AAXA,QAAA,SAAS,GAAG;IACrB,YAAY,EAAE,4CAA4C;IAC1D,WAAW,EAAE,4CAA4C;IACzD,YAAY,EAAE,oEAAoE;IAClF,WAAW,EAAE,EAAE,IAAI,IAAI,GAAG,EAAE;IAC5B,UAAU,EAAE,EAAE,IAAI,IAAI,GAAG,EAAE;IAC3B,UAAU,EAAE,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC;IACzB,WAAW,EAAE,EAAE,IAAI,IAAI,GAAG,EAAE;CACtB,CAAC;AAKX,SAAgB,KAAK,CAAC,CAAS;IAC3B,OAAO,IAAA,kBAAU,EAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AACpC,CAAC;AAFD,sBAEC"}
|
|
File without changes
|