@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
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<div align="center">
|
|
2
|
-
<img src="https://github.com/1inch/
|
|
3
|
-
<img src="https://github.com/1inch/
|
|
2
|
+
<img src="https://github.com/1inch/solidity-utils/blob/master/.github/1inch_github_w.svg#gh-light-mode-only">
|
|
3
|
+
<img src="https://github.com/1inch/solidity-utils/blob/master/.github/1inch_github_b.svg#gh-dark-mode-only">
|
|
4
4
|
</div>
|
|
5
5
|
|
|
6
6
|
# Utils library for contracts and tests
|
|
@@ -65,6 +65,66 @@ Add to `package.json` file solidity compiler version and shortcut to run command
|
|
|
65
65
|
|
|
66
66
|
...
|
|
67
67
|
|
|
68
|
+
#### Dependencies list (imports-list)
|
|
69
|
+
|
|
70
|
+
Lists all imports recursively for the given solidity contract file.
|
|
71
|
+
|
|
72
|
+
##### Usage
|
|
73
|
+
```
|
|
74
|
+
npx imports-list -i <solidity file> [-a <alias list>]
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Available parameters
|
|
78
|
+
```
|
|
79
|
+
Options:
|
|
80
|
+
-i, --input <input> file to get dependencies for
|
|
81
|
+
-a, --alias [alias...] projects alias list
|
|
82
|
+
-h, --help display help for command
|
|
83
|
+
```
|
|
84
|
+
Aliases are used to provide source code for third-party projects.
|
|
85
|
+
For example, your contract uses imports from your other project and import is defined as
|
|
86
|
+
```
|
|
87
|
+
import "@1inch/otherproject/contracts/dependency.sol";
|
|
88
|
+
```
|
|
89
|
+
and you've got source code for `@1inch/otherproject` locally. Then you provide local path for the project to rip dependencies from `dependency.sol` as well.
|
|
90
|
+
If there are several dependencies they should be provided using space as separator.
|
|
91
|
+
|
|
92
|
+
##### Example
|
|
93
|
+
File imports
|
|
94
|
+
```Solidity
|
|
95
|
+
#rootFile.sol
|
|
96
|
+
import '@1inch/otherproject/contracts/dependency.sol'
|
|
97
|
+
|
|
98
|
+
#@1inch/otherproject/contracts/dependency.sol
|
|
99
|
+
import 'helpers/helper.sol'
|
|
100
|
+
```
|
|
101
|
+
File and folder structure
|
|
102
|
+
```
|
|
103
|
+
rootFolder/
|
|
104
|
+
|
|
105
|
+
-- mainProject/
|
|
106
|
+
---- contracts/
|
|
107
|
+
------ rootFile.sol
|
|
108
|
+
|
|
109
|
+
-- dependencyProject/
|
|
110
|
+
---- helpers/
|
|
111
|
+
------ helper.sol
|
|
112
|
+
---- dependency.sol
|
|
113
|
+
```
|
|
114
|
+
Command
|
|
115
|
+
```
|
|
116
|
+
rootFolder/mainProject % npx imports-list -i './contracts/rootFile.sol' -a '@1inch/otherproject' '../dependencyProject'
|
|
117
|
+
```
|
|
118
|
+
Output
|
|
119
|
+
```
|
|
120
|
+
Project => root
|
|
121
|
+
not set
|
|
122
|
+
|
|
123
|
+
Project => @1inch/otherproject
|
|
124
|
+
../otherproject/contracts/dependency.sol
|
|
125
|
+
../otherproject/contracts/helpers/helper.sol
|
|
126
|
+
```
|
|
127
|
+
|
|
68
128
|
#### Test documentation generator (test-docgen)
|
|
69
129
|
Script generates documentation for tests in markdown format.
|
|
70
130
|
Give descriptions for `describe` and `it` sections and build documentation using these descriptions.
|
package/contracts/GasChecker.sol
CHANGED
|
@@ -9,7 +9,9 @@ contract GasChecker {
|
|
|
9
9
|
modifier checkGasCost(uint256 expected) {
|
|
10
10
|
uint256 gas = gasleft();
|
|
11
11
|
_;
|
|
12
|
-
unchecked {
|
|
12
|
+
unchecked {
|
|
13
|
+
gas -= gasleft();
|
|
14
|
+
}
|
|
13
15
|
if (expected > 0 && gas != expected) revert GasCostDiffers(expected, gas);
|
|
14
16
|
}
|
|
15
17
|
}
|
|
@@ -6,7 +6,7 @@ pragma abicoder v1;
|
|
|
6
6
|
import "./EthReceiver.sol";
|
|
7
7
|
|
|
8
8
|
abstract contract OnlyWethReceiver is EthReceiver {
|
|
9
|
-
address private immutable _WETH;
|
|
9
|
+
address private immutable _WETH; // solhint-disable-line var-name-mixedcase
|
|
10
10
|
|
|
11
11
|
constructor(address weth) {
|
|
12
12
|
_WETH = address(weth);
|
|
@@ -3,7 +3,15 @@
|
|
|
3
3
|
pragma solidity ^0.8.0;
|
|
4
4
|
pragma abicoder v1;
|
|
5
5
|
|
|
6
|
-
|
|
7
6
|
interface IDaiLikePermit {
|
|
8
|
-
function permit(
|
|
7
|
+
function permit(
|
|
8
|
+
address holder,
|
|
9
|
+
address spender,
|
|
10
|
+
uint256 nonce,
|
|
11
|
+
uint256 expiry,
|
|
12
|
+
bool allowed,
|
|
13
|
+
uint8 v,
|
|
14
|
+
bytes32 r,
|
|
15
|
+
bytes32 s
|
|
16
|
+
) external;
|
|
9
17
|
}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
pragma solidity ^0.8.0;
|
|
4
4
|
pragma abicoder v1;
|
|
5
5
|
|
|
6
|
-
|
|
7
6
|
interface IERC20MetadataUppercase {
|
|
8
|
-
function NAME() external view returns (string memory);
|
|
9
|
-
|
|
7
|
+
function NAME() external view returns (string memory); // solhint-disable-line func-name-mixedcase
|
|
8
|
+
|
|
9
|
+
function SYMBOL() external view returns (string memory); // solhint-disable-line func-name-mixedcase
|
|
10
10
|
}
|
|
@@ -3,40 +3,50 @@
|
|
|
3
3
|
pragma solidity ^0.8.0;
|
|
4
4
|
pragma abicoder v1;
|
|
5
5
|
|
|
6
|
+
/// @title Library that implements address array on mapping, stores array length at 0 index.
|
|
6
7
|
library AddressArray {
|
|
7
8
|
error IndexOutOfBounds();
|
|
8
9
|
error PopFromEmptyArray();
|
|
9
10
|
error OutputArrayTooSmall();
|
|
10
11
|
|
|
12
|
+
/// @dev Data struct containing raw mapping.
|
|
11
13
|
struct Data {
|
|
12
14
|
mapping(uint256 => uint256) _raw;
|
|
13
15
|
}
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
/// @dev Length of array.
|
|
18
|
+
function length(Data storage self) internal view returns (uint256) {
|
|
16
19
|
return self._raw[0] >> 160;
|
|
17
20
|
}
|
|
18
21
|
|
|
19
|
-
|
|
22
|
+
/// @dev Returns data item from `self` storage at `i`.
|
|
23
|
+
function at(Data storage self, uint256 i) internal view returns (address) {
|
|
20
24
|
return address(uint160(self._raw[i]));
|
|
21
25
|
}
|
|
22
26
|
|
|
23
|
-
|
|
27
|
+
/// @dev Returns list of addresses from storage `self`.
|
|
28
|
+
function get(Data storage self) internal view returns (address[] memory arr) {
|
|
24
29
|
uint256 lengthAndFirst = self._raw[0];
|
|
25
30
|
arr = new address[](lengthAndFirst >> 160);
|
|
26
31
|
_get(self, arr, lengthAndFirst);
|
|
27
32
|
}
|
|
28
33
|
|
|
29
|
-
|
|
34
|
+
/// @dev Puts list of addresses from `self` storage into `output` array.
|
|
35
|
+
function get(Data storage self, address[] memory output) internal view returns (address[] memory) {
|
|
30
36
|
return _get(self, output, self._raw[0]);
|
|
31
37
|
}
|
|
32
38
|
|
|
33
|
-
function _get(
|
|
39
|
+
function _get(
|
|
40
|
+
Data storage self,
|
|
41
|
+
address[] memory output,
|
|
42
|
+
uint256 lengthAndFirst
|
|
43
|
+
) private view returns (address[] memory) {
|
|
34
44
|
uint256 len = lengthAndFirst >> 160;
|
|
35
45
|
if (len > output.length) revert OutputArrayTooSmall();
|
|
36
46
|
if (len > 0) {
|
|
37
47
|
output[0] = address(uint160(lengthAndFirst));
|
|
38
48
|
unchecked {
|
|
39
|
-
for (
|
|
49
|
+
for (uint256 i = 1; i < len; i++) {
|
|
40
50
|
output[i] = address(uint160(self._raw[i]));
|
|
41
51
|
}
|
|
42
52
|
}
|
|
@@ -44,14 +54,14 @@ library AddressArray {
|
|
|
44
54
|
return output;
|
|
45
55
|
}
|
|
46
56
|
|
|
47
|
-
|
|
57
|
+
/// @dev Array push back `account` operation on storage `self`.
|
|
58
|
+
function push(Data storage self, address account) internal returns (uint256) {
|
|
48
59
|
unchecked {
|
|
49
60
|
uint256 lengthAndFirst = self._raw[0];
|
|
50
61
|
uint256 len = lengthAndFirst >> 160;
|
|
51
62
|
if (len == 0) {
|
|
52
63
|
self._raw[0] = (1 << 160) + uint160(account);
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
64
|
+
} else {
|
|
55
65
|
self._raw[0] = lengthAndFirst + (1 << 160);
|
|
56
66
|
self._raw[len] = uint160(account);
|
|
57
67
|
}
|
|
@@ -59,6 +69,7 @@ library AddressArray {
|
|
|
59
69
|
}
|
|
60
70
|
}
|
|
61
71
|
|
|
72
|
+
/// @dev Array pop back operation for storage `self`.
|
|
62
73
|
function pop(Data storage self) internal {
|
|
63
74
|
unchecked {
|
|
64
75
|
uint256 lengthAndFirst = self._raw[0];
|
|
@@ -71,14 +82,18 @@ library AddressArray {
|
|
|
71
82
|
}
|
|
72
83
|
}
|
|
73
84
|
|
|
74
|
-
|
|
85
|
+
/// @dev Set element for storage `self` at `index` to `account`.
|
|
86
|
+
function set(
|
|
87
|
+
Data storage self,
|
|
88
|
+
uint256 index,
|
|
89
|
+
address account
|
|
90
|
+
) internal {
|
|
75
91
|
uint256 len = length(self);
|
|
76
92
|
if (index >= len) revert IndexOutOfBounds();
|
|
77
93
|
|
|
78
94
|
if (index == 0) {
|
|
79
95
|
self._raw[0] = (len << 160) | uint160(account);
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
96
|
+
} else {
|
|
82
97
|
self._raw[index] = uint160(account);
|
|
83
98
|
}
|
|
84
99
|
}
|
|
@@ -5,27 +5,40 @@ pragma abicoder v1;
|
|
|
5
5
|
|
|
6
6
|
import "./AddressArray.sol";
|
|
7
7
|
|
|
8
|
+
/** @title Library that is using AddressArray library for AddressArray.Data
|
|
9
|
+
* and allows Set operations on address storage data:
|
|
10
|
+
* 1. add
|
|
11
|
+
* 2. remove
|
|
12
|
+
* 3. contains
|
|
13
|
+
*/
|
|
8
14
|
library AddressSet {
|
|
9
15
|
using AddressArray for AddressArray.Data;
|
|
10
16
|
|
|
17
|
+
/** @dev Data struct from AddressArray.Data items
|
|
18
|
+
* and lookup mapping address => index in data array.
|
|
19
|
+
*/
|
|
11
20
|
struct Data {
|
|
12
21
|
AddressArray.Data items;
|
|
13
22
|
mapping(address => uint256) lookup;
|
|
14
23
|
}
|
|
15
24
|
|
|
16
|
-
|
|
25
|
+
/// @dev Length of data storage.
|
|
26
|
+
function length(Data storage s) internal view returns (uint256) {
|
|
17
27
|
return s.items.length();
|
|
18
28
|
}
|
|
19
29
|
|
|
20
|
-
|
|
30
|
+
/// @dev Returns data item from `s` storage at `index`.
|
|
31
|
+
function at(Data storage s, uint256 index) internal view returns (address) {
|
|
21
32
|
return s.items.at(index);
|
|
22
33
|
}
|
|
23
34
|
|
|
24
|
-
|
|
35
|
+
/// @dev Returns true if storage `s` has `item`.
|
|
36
|
+
function contains(Data storage s, address item) internal view returns (bool) {
|
|
25
37
|
return s.lookup[item] != 0;
|
|
26
38
|
}
|
|
27
39
|
|
|
28
|
-
|
|
40
|
+
/// @dev Adds `item` into storage `s` and returns true if successful.
|
|
41
|
+
function add(Data storage s, address item) internal returns (bool) {
|
|
29
42
|
if (s.lookup[item] > 0) {
|
|
30
43
|
return false;
|
|
31
44
|
}
|
|
@@ -33,8 +46,9 @@ library AddressSet {
|
|
|
33
46
|
return true;
|
|
34
47
|
}
|
|
35
48
|
|
|
36
|
-
|
|
37
|
-
|
|
49
|
+
/// @dev Removes `item` from storage `s` and returns true if successful.
|
|
50
|
+
function remove(Data storage s, address item) internal returns (bool) {
|
|
51
|
+
uint256 index = s.lookup[item];
|
|
38
52
|
if (index == 0) {
|
|
39
53
|
return false;
|
|
40
54
|
}
|
|
@@ -19,7 +19,12 @@ library ECDSA {
|
|
|
19
19
|
uint256 private constant _COMPACT_S_MASK = 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;
|
|
20
20
|
uint256 private constant _COMPACT_V_SHIFT = 255;
|
|
21
21
|
|
|
22
|
-
function recover(
|
|
22
|
+
function recover(
|
|
23
|
+
bytes32 hash,
|
|
24
|
+
uint8 v,
|
|
25
|
+
bytes32 r,
|
|
26
|
+
bytes32 s
|
|
27
|
+
) internal view returns (address signer) {
|
|
23
28
|
/// @solidity memory-safe-assembly
|
|
24
29
|
assembly { // solhint-disable-line no-inline-assembly
|
|
25
30
|
if lt(s, _S_BOUNDARY) {
|
|
@@ -36,7 +41,11 @@ library ECDSA {
|
|
|
36
41
|
}
|
|
37
42
|
}
|
|
38
43
|
|
|
39
|
-
function recover(
|
|
44
|
+
function recover(
|
|
45
|
+
bytes32 hash,
|
|
46
|
+
bytes32 r,
|
|
47
|
+
bytes32 vs
|
|
48
|
+
) internal view returns (address signer) {
|
|
40
49
|
/// @solidity memory-safe-assembly
|
|
41
50
|
assembly { // solhint-disable-line no-inline-assembly
|
|
42
51
|
let s := and(vs, _COMPACT_S_MASK)
|
|
@@ -54,20 +63,37 @@ library ECDSA {
|
|
|
54
63
|
}
|
|
55
64
|
}
|
|
56
65
|
|
|
57
|
-
/// @dev
|
|
58
|
-
|
|
66
|
+
/// @dev WARNING!!!
|
|
67
|
+
/// There is a known signature malleability issue with two representations of signatures!
|
|
68
|
+
/// Even though this function is able to verify both standard 65-byte and compact 64-byte EIP-2098 signatures
|
|
69
|
+
/// one should never use raw signatures for any kind of invalidation logic in their code.
|
|
70
|
+
/// As the standard and compact representations are interchangeable any invalidation logic that relies on
|
|
71
|
+
/// signature uniqueness will get rekt.
|
|
72
|
+
/// More info: https://github.com/OpenZeppelin/openzeppelin-contracts/security/advisories/GHSA-4h98-2769-gh6h
|
|
73
|
+
function recover(bytes32 hash, bytes calldata signature) internal view returns (address signer) {
|
|
59
74
|
/// @solidity memory-safe-assembly
|
|
60
75
|
assembly { // solhint-disable-line no-inline-assembly
|
|
61
|
-
|
|
62
|
-
if eq(signature.length, 64) {
|
|
63
|
-
let ptr := mload(0x40)
|
|
76
|
+
let ptr := mload(0x40)
|
|
64
77
|
|
|
78
|
+
// memory[ptr:ptr+0x80] = (hash, v, r, s)
|
|
79
|
+
switch signature.length
|
|
80
|
+
case 65 {
|
|
81
|
+
// memory[ptr+0x20:ptr+0x80] = (v, r, s)
|
|
82
|
+
mstore(add(ptr, 0x20), byte(0, calldataload(add(signature.offset, 0x40))))
|
|
83
|
+
calldatacopy(add(ptr, 0x40), signature.offset, 0x40)
|
|
84
|
+
}
|
|
85
|
+
case 64 {
|
|
65
86
|
// memory[ptr+0x20:ptr+0x80] = (v, r, s)
|
|
66
87
|
let vs := calldataload(add(signature.offset, 0x20))
|
|
67
88
|
mstore(add(ptr, 0x20), add(27, shr(_COMPACT_V_SHIFT, vs)))
|
|
68
89
|
calldatacopy(add(ptr, 0x40), signature.offset, 0x20)
|
|
69
90
|
mstore(add(ptr, 0x60), and(vs, _COMPACT_S_MASK))
|
|
91
|
+
}
|
|
92
|
+
default {
|
|
93
|
+
ptr := 0
|
|
94
|
+
}
|
|
70
95
|
|
|
96
|
+
if ptr {
|
|
71
97
|
if lt(mload(add(ptr, 0x60)), _S_BOUNDARY) {
|
|
72
98
|
// memory[ptr:ptr+0x20] = (hash)
|
|
73
99
|
mstore(ptr, hash)
|
|
@@ -80,15 +106,25 @@ library ECDSA {
|
|
|
80
106
|
}
|
|
81
107
|
}
|
|
82
108
|
|
|
83
|
-
function recoverOrIsValidSignature(
|
|
109
|
+
function recoverOrIsValidSignature(
|
|
110
|
+
address signer,
|
|
111
|
+
bytes32 hash,
|
|
112
|
+
bytes calldata signature
|
|
113
|
+
) internal view returns (bool success) {
|
|
84
114
|
if (signer == address(0)) return false;
|
|
85
|
-
if (signature.length == 64 && recover(hash, signature) == signer) {
|
|
115
|
+
if ((signature.length == 64 || signature.length == 65) && recover(hash, signature) == signer) {
|
|
86
116
|
return true;
|
|
87
117
|
}
|
|
88
118
|
return isValidSignature(signer, hash, signature);
|
|
89
119
|
}
|
|
90
120
|
|
|
91
|
-
function recoverOrIsValidSignature(
|
|
121
|
+
function recoverOrIsValidSignature(
|
|
122
|
+
address signer,
|
|
123
|
+
bytes32 hash,
|
|
124
|
+
uint8 v,
|
|
125
|
+
bytes32 r,
|
|
126
|
+
bytes32 s
|
|
127
|
+
) internal view returns (bool success) {
|
|
92
128
|
if (signer == address(0)) return false;
|
|
93
129
|
if (recover(hash, v, r, s) == signer) {
|
|
94
130
|
return true;
|
|
@@ -96,7 +132,12 @@ library ECDSA {
|
|
|
96
132
|
return isValidSignature(signer, hash, v, r, s);
|
|
97
133
|
}
|
|
98
134
|
|
|
99
|
-
function recoverOrIsValidSignature(
|
|
135
|
+
function recoverOrIsValidSignature(
|
|
136
|
+
address signer,
|
|
137
|
+
bytes32 hash,
|
|
138
|
+
bytes32 r,
|
|
139
|
+
bytes32 vs
|
|
140
|
+
) internal view returns (bool success) {
|
|
100
141
|
if (signer == address(0)) return false;
|
|
101
142
|
if (recover(hash, r, vs) == signer) {
|
|
102
143
|
return true;
|
|
@@ -104,7 +145,12 @@ library ECDSA {
|
|
|
104
145
|
return isValidSignature(signer, hash, r, vs);
|
|
105
146
|
}
|
|
106
147
|
|
|
107
|
-
function recoverOrIsValidSignature65(
|
|
148
|
+
function recoverOrIsValidSignature65(
|
|
149
|
+
address signer,
|
|
150
|
+
bytes32 hash,
|
|
151
|
+
bytes32 r,
|
|
152
|
+
bytes32 vs
|
|
153
|
+
) internal view returns (bool success) {
|
|
108
154
|
if (signer == address(0)) return false;
|
|
109
155
|
if (recover(hash, r, vs) == signer) {
|
|
110
156
|
return true;
|
|
@@ -112,7 +158,11 @@ library ECDSA {
|
|
|
112
158
|
return isValidSignature65(signer, hash, r, vs);
|
|
113
159
|
}
|
|
114
160
|
|
|
115
|
-
function isValidSignature(
|
|
161
|
+
function isValidSignature(
|
|
162
|
+
address signer,
|
|
163
|
+
bytes32 hash,
|
|
164
|
+
bytes calldata signature
|
|
165
|
+
) internal view returns (bool success) {
|
|
116
166
|
// (bool success, bytes memory data) = signer.staticcall(abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature));
|
|
117
167
|
// return success && data.length >= 4 && abi.decode(data, (bytes4)) == IERC1271.isValidSignature.selector;
|
|
118
168
|
bytes4 selector = IERC1271.isValidSignature.selector;
|
|
@@ -131,7 +181,13 @@ library ECDSA {
|
|
|
131
181
|
}
|
|
132
182
|
}
|
|
133
183
|
|
|
134
|
-
function isValidSignature(
|
|
184
|
+
function isValidSignature(
|
|
185
|
+
address signer,
|
|
186
|
+
bytes32 hash,
|
|
187
|
+
uint8 v,
|
|
188
|
+
bytes32 r,
|
|
189
|
+
bytes32 s
|
|
190
|
+
) internal view returns (bool success) {
|
|
135
191
|
bytes4 selector = IERC1271.isValidSignature.selector;
|
|
136
192
|
/// @solidity memory-safe-assembly
|
|
137
193
|
assembly { // solhint-disable-line no-inline-assembly
|
|
@@ -150,7 +206,12 @@ library ECDSA {
|
|
|
150
206
|
}
|
|
151
207
|
}
|
|
152
208
|
|
|
153
|
-
function isValidSignature(
|
|
209
|
+
function isValidSignature(
|
|
210
|
+
address signer,
|
|
211
|
+
bytes32 hash,
|
|
212
|
+
bytes32 r,
|
|
213
|
+
bytes32 vs
|
|
214
|
+
) internal view returns (bool success) {
|
|
154
215
|
// (bool success, bytes memory data) = signer.staticcall(abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, abi.encodePacked(r, vs)));
|
|
155
216
|
// return success && data.length >= 4 && abi.decode(data, (bytes4)) == IERC1271.isValidSignature.selector;
|
|
156
217
|
bytes4 selector = IERC1271.isValidSignature.selector;
|
|
@@ -170,7 +231,12 @@ library ECDSA {
|
|
|
170
231
|
}
|
|
171
232
|
}
|
|
172
233
|
|
|
173
|
-
function isValidSignature65(
|
|
234
|
+
function isValidSignature65(
|
|
235
|
+
address signer,
|
|
236
|
+
bytes32 hash,
|
|
237
|
+
bytes32 r,
|
|
238
|
+
bytes32 vs
|
|
239
|
+
) internal view returns (bool success) {
|
|
174
240
|
// (bool success, bytes memory data) = signer.staticcall(abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, abi.encodePacked(r, vs & ~uint256(1 << 255), uint8(vs >> 255))));
|
|
175
241
|
// return success && data.length >= 4 && abi.decode(data, (bytes4)) == IERC1271.isValidSignature.selector;
|
|
176
242
|
bytes4 selector = IERC1271.isValidSignature.selector;
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
pragma solidity ^0.8.0;
|
|
4
4
|
pragma abicoder v1;
|
|
5
5
|
|
|
6
|
+
/// @title Revert reason forwarder.
|
|
6
7
|
library RevertReasonForwarder {
|
|
8
|
+
/// @dev Forwards latest externall call revert.
|
|
7
9
|
function reRevert() internal pure {
|
|
8
10
|
// bubble up revert reason from latest external call
|
|
9
11
|
/// @solidity memory-safe-assembly
|
|
@@ -6,21 +6,22 @@ pragma abicoder v1;
|
|
|
6
6
|
import "./StringUtil.sol";
|
|
7
7
|
|
|
8
8
|
/** @title Library that allows to parse unsuccessful arbitrary calls revert reasons.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
* See https://solidity.readthedocs.io/en/latest/control-structures.html#revert for details.
|
|
10
|
+
* Note that we assume revert reason being abi-encoded as Error(string) so it may fail to parse reason
|
|
11
|
+
* if structured reverts appear in the future.
|
|
12
|
+
*
|
|
13
|
+
* All unsuccessful parsings get encoded as Unknown(data) string
|
|
14
|
+
*/
|
|
15
15
|
library RevertReasonParser {
|
|
16
16
|
using StringUtil for uint256;
|
|
17
17
|
using StringUtil for bytes;
|
|
18
18
|
|
|
19
19
|
error InvalidRevertReason();
|
|
20
20
|
|
|
21
|
-
bytes4 constant
|
|
22
|
-
bytes4 constant
|
|
21
|
+
bytes4 private constant _ERROR_SELECTOR = bytes4(keccak256("Error(string)"));
|
|
22
|
+
bytes4 private constant _PANIC_SELECTOR = bytes4(keccak256("Panic(uint256)"));
|
|
23
23
|
|
|
24
|
+
/// @dev Parses error `data` and returns actual with `prefix`.
|
|
24
25
|
function parse(bytes memory data, string memory prefix) internal pure returns (string memory) {
|
|
25
26
|
// https://solidity.readthedocs.io/en/latest/control-structures.html#revert
|
|
26
27
|
// We assume that revert reason is abi-encoded as Error(string)
|