@1inch/solidity-utils 2.1.0 → 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 +82 -16
- 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 +31 -29
- 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
|
@@ -8,6 +8,7 @@ import "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol";
|
|
|
8
8
|
import "../interfaces/IDaiLikePermit.sol";
|
|
9
9
|
import "../libraries/RevertReasonForwarder.sol";
|
|
10
10
|
|
|
11
|
+
/// @title Implements efficient safe methods for ERC20 interface.
|
|
11
12
|
library SafeERC20 {
|
|
12
13
|
error SafeTransferFailed();
|
|
13
14
|
error SafeTransferFromFailed();
|
|
@@ -16,8 +17,13 @@ library SafeERC20 {
|
|
|
16
17
|
error SafeDecreaseAllowanceFailed();
|
|
17
18
|
error SafePermitBadLength();
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
function safeTransferFrom(
|
|
20
|
+
/// @dev Ensures method do not revert or return boolean `true`, admits call to non-smart-contract.
|
|
21
|
+
function safeTransferFrom(
|
|
22
|
+
IERC20 token,
|
|
23
|
+
address from,
|
|
24
|
+
address to,
|
|
25
|
+
uint256 amount
|
|
26
|
+
) internal {
|
|
21
27
|
bytes4 selector = token.transferFrom.selector;
|
|
22
28
|
bool success;
|
|
23
29
|
/// @solidity memory-safe-assembly
|
|
@@ -31,43 +37,67 @@ library SafeERC20 {
|
|
|
31
37
|
success := call(gas(), token, 0, data, 100, 0x0, 0x20)
|
|
32
38
|
if success {
|
|
33
39
|
switch returndatasize()
|
|
34
|
-
case 0 {
|
|
35
|
-
|
|
40
|
+
case 0 {
|
|
41
|
+
success := gt(extcodesize(token), 0)
|
|
42
|
+
}
|
|
43
|
+
default {
|
|
44
|
+
success := and(gt(returndatasize(), 31), eq(mload(0), 1))
|
|
45
|
+
}
|
|
36
46
|
}
|
|
37
47
|
}
|
|
38
48
|
if (!success) revert SafeTransferFromFailed();
|
|
39
49
|
}
|
|
40
50
|
|
|
41
|
-
|
|
42
|
-
function safeTransfer(
|
|
51
|
+
/// @dev Ensures method do not revert or return boolean `true`, admits call to non-smart-contract.
|
|
52
|
+
function safeTransfer(
|
|
53
|
+
IERC20 token,
|
|
54
|
+
address to,
|
|
55
|
+
uint256 value
|
|
56
|
+
) internal {
|
|
43
57
|
if (!_makeCall(token, token.transfer.selector, to, value)) {
|
|
44
58
|
revert SafeTransferFailed();
|
|
45
59
|
}
|
|
46
60
|
}
|
|
47
61
|
|
|
48
|
-
|
|
49
|
-
function forceApprove(
|
|
62
|
+
/// @dev If `approve(from, to, amount)` fails, try to `approve(from, to, 0)` before retry.
|
|
63
|
+
function forceApprove(
|
|
64
|
+
IERC20 token,
|
|
65
|
+
address spender,
|
|
66
|
+
uint256 value
|
|
67
|
+
) internal {
|
|
50
68
|
if (!_makeCall(token, token.approve.selector, spender, value)) {
|
|
51
|
-
if (
|
|
52
|
-
!_makeCall(token, token.approve.selector, spender,
|
|
53
|
-
|
|
69
|
+
if (
|
|
70
|
+
!_makeCall(token, token.approve.selector, spender, 0) ||
|
|
71
|
+
!_makeCall(token, token.approve.selector, spender, value)
|
|
72
|
+
) {
|
|
54
73
|
revert ForceApproveFailed();
|
|
55
74
|
}
|
|
56
75
|
}
|
|
57
76
|
}
|
|
58
77
|
|
|
59
|
-
|
|
78
|
+
/// @dev Allowance increase with safe math check.
|
|
79
|
+
function safeIncreaseAllowance(
|
|
80
|
+
IERC20 token,
|
|
81
|
+
address spender,
|
|
82
|
+
uint256 value
|
|
83
|
+
) internal {
|
|
60
84
|
uint256 allowance = token.allowance(address(this), spender);
|
|
61
85
|
if (value > type(uint256).max - allowance) revert SafeIncreaseAllowanceFailed();
|
|
62
86
|
forceApprove(token, spender, allowance + value);
|
|
63
87
|
}
|
|
64
88
|
|
|
65
|
-
|
|
89
|
+
/// @dev Allowance decrease with safe math check.
|
|
90
|
+
function safeDecreaseAllowance(
|
|
91
|
+
IERC20 token,
|
|
92
|
+
address spender,
|
|
93
|
+
uint256 value
|
|
94
|
+
) internal {
|
|
66
95
|
uint256 allowance = token.allowance(address(this), spender);
|
|
67
96
|
if (value > allowance) revert SafeDecreaseAllowanceFailed();
|
|
68
97
|
forceApprove(token, spender, allowance - value);
|
|
69
98
|
}
|
|
70
99
|
|
|
100
|
+
/// @dev Calls either ERC20 or Dai `permit` for `token`, if unsuccessful forwards revert from external call.
|
|
71
101
|
function safePermit(IERC20 token, bytes calldata permit) internal {
|
|
72
102
|
bool success;
|
|
73
103
|
if (permit.length == 32 * 7) {
|
|
@@ -80,7 +110,12 @@ library SafeERC20 {
|
|
|
80
110
|
if (!success) RevertReasonForwarder.reRevert();
|
|
81
111
|
}
|
|
82
112
|
|
|
83
|
-
function _makeCall(
|
|
113
|
+
function _makeCall(
|
|
114
|
+
IERC20 token,
|
|
115
|
+
bytes4 selector,
|
|
116
|
+
address to,
|
|
117
|
+
uint256 amount
|
|
118
|
+
) private returns (bool success) {
|
|
84
119
|
/// @solidity memory-safe-assembly
|
|
85
120
|
assembly { // solhint-disable-line no-inline-assembly
|
|
86
121
|
let data := mload(0x40)
|
|
@@ -91,13 +126,21 @@ library SafeERC20 {
|
|
|
91
126
|
success := call(gas(), token, 0, data, 0x44, 0x0, 0x20)
|
|
92
127
|
if success {
|
|
93
128
|
switch returndatasize()
|
|
94
|
-
case 0 {
|
|
95
|
-
|
|
129
|
+
case 0 {
|
|
130
|
+
success := gt(extcodesize(token), 0)
|
|
131
|
+
}
|
|
132
|
+
default {
|
|
133
|
+
success := and(gt(returndatasize(), 31), eq(mload(0), 1))
|
|
134
|
+
}
|
|
96
135
|
}
|
|
97
136
|
}
|
|
98
137
|
}
|
|
99
138
|
|
|
100
|
-
function _makeCalldataCall(
|
|
139
|
+
function _makeCalldataCall(
|
|
140
|
+
IERC20 token,
|
|
141
|
+
bytes4 selector,
|
|
142
|
+
bytes calldata args
|
|
143
|
+
) private returns (bool success) {
|
|
101
144
|
/// @solidity memory-safe-assembly
|
|
102
145
|
assembly { // solhint-disable-line no-inline-assembly
|
|
103
146
|
let len := add(4, args.length)
|
|
@@ -108,8 +151,12 @@ library SafeERC20 {
|
|
|
108
151
|
success := call(gas(), token, 0, data, len, 0x0, 0x20)
|
|
109
152
|
if success {
|
|
110
153
|
switch returndatasize()
|
|
111
|
-
case 0 {
|
|
112
|
-
|
|
154
|
+
case 0 {
|
|
155
|
+
success := gt(extcodesize(token), 0)
|
|
156
|
+
}
|
|
157
|
+
default {
|
|
158
|
+
success := and(gt(returndatasize(), 31), eq(mload(0), 1))
|
|
159
|
+
}
|
|
113
160
|
}
|
|
114
161
|
}
|
|
115
162
|
}
|
|
@@ -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;
|