@safe-global/protocol-kit 0.1.0
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/LICENSE.md +9 -0
- package/README.md +984 -0
- package/dist/src/Safe.d.ts +383 -0
- package/dist/src/Safe.js +715 -0
- package/dist/src/Safe.js.map +1 -0
- package/dist/src/adapters/ethers/EthersAdapter.d.ts +53 -0
- package/dist/src/adapters/ethers/EthersAdapter.js +189 -0
- package/dist/src/adapters/ethers/EthersAdapter.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/CompatibilityFallbackHandler/CompatibilityFallbackHandlerEthersContract.d.ts +9 -0
- package/dist/src/adapters/ethers/contracts/CompatibilityFallbackHandler/CompatibilityFallbackHandlerEthersContract.js +15 -0
- package/dist/src/adapters/ethers/contracts/CompatibilityFallbackHandler/CompatibilityFallbackHandlerEthersContract.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/CompatibilityFallbackHandler/v1.3.0/CompatibilityFallbackHandler_V1_3_0_Ethers.d.ts +7 -0
- package/dist/src/adapters/ethers/contracts/CompatibilityFallbackHandler/v1.3.0/CompatibilityFallbackHandler_V1_3_0_Ethers.js +14 -0
- package/dist/src/adapters/ethers/contracts/CompatibilityFallbackHandler/v1.3.0/CompatibilityFallbackHandler_V1_3_0_Ethers.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/CreateCall/CreateCallEthersContract.d.ts +13 -0
- package/dist/src/adapters/ethers/contracts/CreateCall/CreateCallEthersContract.js +37 -0
- package/dist/src/adapters/ethers/contracts/CreateCall/CreateCallEthersContract.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/CreateCall/v1.3.0/CreateCallEthersContract_V1_3_0_Ethers.d.ts +7 -0
- package/dist/src/adapters/ethers/contracts/CreateCall/v1.3.0/CreateCallEthersContract_V1_3_0_Ethers.js +14 -0
- package/dist/src/adapters/ethers/contracts/CreateCall/v1.3.0/CreateCallEthersContract_V1_3_0_Ethers.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafe/GnosisSafeContractEthers.d.ts +28 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafe/GnosisSafeContractEthers.js +91 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafe/GnosisSafeContractEthers.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafe/v1.0.0/GnosisSafeContract_V1_0_0_Ethers.d.ts +12 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafe/v1.0.0/GnosisSafeContract_V1_0_0_Ethers.js +34 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafe/v1.0.0/GnosisSafeContract_V1_0_0_Ethers.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafe/v1.1.1/GnosisSafeContract_V1_1_1_Ethers.d.ts +12 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafe/v1.1.1/GnosisSafeContract_V1_1_1_Ethers.js +34 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafe/v1.1.1/GnosisSafeContract_V1_1_1_Ethers.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafe/v1.2.0/GnosisSafeContract_V1_2_0_Ethers.d.ts +12 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafe/v1.2.0/GnosisSafeContract_V1_2_0_Ethers.js +32 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafe/v1.2.0/GnosisSafeContract_V1_2_0_Ethers.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafe/v1.3.0/GnosisSafeContract_V1_3_0_Ethers.d.ts +12 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafe/v1.3.0/GnosisSafeContract_V1_3_0_Ethers.js +33 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafe/v1.3.0/GnosisSafeContract_V1_3_0_Ethers.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafeProxyFactory/GnosisSafeProxyFactoryEthersContract.d.ts +22 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafeProxyFactory/GnosisSafeProxyFactoryEthersContract.js +47 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafeProxyFactory/GnosisSafeProxyFactoryEthersContract.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafeProxyFactory/v1.0.0/GnosisSafeProxyFactoryContract_V1_0_0_Ethers.d.ts +7 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafeProxyFactory/v1.0.0/GnosisSafeProxyFactoryContract_V1_0_0_Ethers.js +14 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafeProxyFactory/v1.0.0/GnosisSafeProxyFactoryContract_V1_0_0_Ethers.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafeProxyFactory/v1.1.1/GnosisSafeProxyFactoryContract_V1_1_1_Ethers.d.ts +7 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafeProxyFactory/v1.1.1/GnosisSafeProxyFactoryContract_V1_1_1_Ethers.js +14 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafeProxyFactory/v1.1.1/GnosisSafeProxyFactoryContract_V1_1_1_Ethers.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafeProxyFactory/v1.3.0/GnosisSafeProxyFactoryContract_V1_3_0_Ethers.d.ts +7 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafeProxyFactory/v1.3.0/GnosisSafeProxyFactoryContract_V1_3_0_Ethers.js +14 -0
- package/dist/src/adapters/ethers/contracts/GnosisSafeProxyFactory/v1.3.0/GnosisSafeProxyFactoryContract_V1_3_0_Ethers.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/MultiSend/MultiSendEthersContract.d.ts +10 -0
- package/dist/src/adapters/ethers/contracts/MultiSend/MultiSendEthersContract.js +15 -0
- package/dist/src/adapters/ethers/contracts/MultiSend/MultiSendEthersContract.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/MultiSend/v1.1.1/MultiSendContract_V1_1_1_Ethers.d.ts +7 -0
- package/dist/src/adapters/ethers/contracts/MultiSend/v1.1.1/MultiSendContract_V1_1_1_Ethers.js +14 -0
- package/dist/src/adapters/ethers/contracts/MultiSend/v1.1.1/MultiSendContract_V1_1_1_Ethers.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/MultiSend/v1.3.0/MultiSendContract_V1_3_0_Ethers.d.ts +7 -0
- package/dist/src/adapters/ethers/contracts/MultiSend/v1.3.0/MultiSendContract_V1_3_0_Ethers.js +14 -0
- package/dist/src/adapters/ethers/contracts/MultiSend/v1.3.0/MultiSendContract_V1_3_0_Ethers.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/MultiSendCallOnly/MultiSendCallOnlyEthersContract.d.ts +9 -0
- package/dist/src/adapters/ethers/contracts/MultiSendCallOnly/MultiSendCallOnlyEthersContract.js +15 -0
- package/dist/src/adapters/ethers/contracts/MultiSendCallOnly/MultiSendCallOnlyEthersContract.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/MultiSendCallOnly/v1.3.0/MultiSendCallOnlyContract_V1_3_0_Ethers.d.ts +7 -0
- package/dist/src/adapters/ethers/contracts/MultiSendCallOnly/v1.3.0/MultiSendCallOnlyContract_V1_3_0_Ethers.js +14 -0
- package/dist/src/adapters/ethers/contracts/MultiSendCallOnly/v1.3.0/MultiSendCallOnlyContract_V1_3_0_Ethers.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/SignMessageLib/SignMessageLibEthersContract.d.ts +13 -0
- package/dist/src/adapters/ethers/contracts/SignMessageLib/SignMessageLibEthersContract.js +29 -0
- package/dist/src/adapters/ethers/contracts/SignMessageLib/SignMessageLibEthersContract.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/SignMessageLib/v1.3.0/SignMessageLibContract_V1_3_0_Ethers.d.ts +7 -0
- package/dist/src/adapters/ethers/contracts/SignMessageLib/v1.3.0/SignMessageLibContract_V1_3_0_Ethers.js +14 -0
- package/dist/src/adapters/ethers/contracts/SignMessageLib/v1.3.0/SignMessageLibContract_V1_3_0_Ethers.js.map +1 -0
- package/dist/src/adapters/ethers/contracts/contractInstancesEthers.d.ts +23 -0
- package/dist/src/adapters/ethers/contracts/contractInstancesEthers.js +139 -0
- package/dist/src/adapters/ethers/contracts/contractInstancesEthers.js.map +1 -0
- package/dist/src/adapters/ethers/index.d.ts +9 -0
- package/dist/src/adapters/ethers/index.js +21 -0
- package/dist/src/adapters/ethers/index.js.map +1 -0
- package/dist/src/adapters/ethers/types.d.ts +14 -0
- package/dist/src/adapters/ethers/types.js +3 -0
- package/dist/src/adapters/ethers/types.js.map +1 -0
- package/dist/src/adapters/ethers/utils/constants.d.ts +3 -0
- package/dist/src/adapters/ethers/utils/constants.js +7 -0
- package/dist/src/adapters/ethers/utils/constants.js.map +1 -0
- package/dist/src/adapters/ethers/utils/index.d.ts +6 -0
- package/dist/src/adapters/ethers/utils/index.js +20 -0
- package/dist/src/adapters/ethers/utils/index.js.map +1 -0
- package/dist/src/adapters/web3/Web3Adapter.d.ts +51 -0
- package/dist/src/adapters/web3/Web3Adapter.js +192 -0
- package/dist/src/adapters/web3/Web3Adapter.js.map +1 -0
- package/dist/src/adapters/web3/contracts/CompatibilityFallbackHandler/CompatibilityFallbackHandlerWeb3Contract.d.ts +9 -0
- package/dist/src/adapters/web3/contracts/CompatibilityFallbackHandler/CompatibilityFallbackHandlerWeb3Contract.js +15 -0
- package/dist/src/adapters/web3/contracts/CompatibilityFallbackHandler/CompatibilityFallbackHandlerWeb3Contract.js.map +1 -0
- package/dist/src/adapters/web3/contracts/CompatibilityFallbackHandler/v1.3.0/CompatibilityFallbackHandler_V1_3_0_Web3.d.ts +7 -0
- package/dist/src/adapters/web3/contracts/CompatibilityFallbackHandler/v1.3.0/CompatibilityFallbackHandler_V1_3_0_Web3.js +14 -0
- package/dist/src/adapters/web3/contracts/CompatibilityFallbackHandler/v1.3.0/CompatibilityFallbackHandler_V1_3_0_Web3.js.map +1 -0
- package/dist/src/adapters/web3/contracts/CreateCall/CreateCallWeb3Contract.d.ts +13 -0
- package/dist/src/adapters/web3/contracts/CreateCall/CreateCallWeb3Contract.js +42 -0
- package/dist/src/adapters/web3/contracts/CreateCall/CreateCallWeb3Contract.js.map +1 -0
- package/dist/src/adapters/web3/contracts/CreateCall/v1.3.0/CreateCallEthersContract_V1_3_0_Web3.d.ts +7 -0
- package/dist/src/adapters/web3/contracts/CreateCall/v1.3.0/CreateCallEthersContract_V1_3_0_Web3.js +14 -0
- package/dist/src/adapters/web3/contracts/CreateCall/v1.3.0/CreateCallEthersContract_V1_3_0_Web3.js.map +1 -0
- package/dist/src/adapters/web3/contracts/GnosisSafe/GnosisSafeContractWeb3.d.ts +28 -0
- package/dist/src/adapters/web3/contracts/GnosisSafe/GnosisSafeContractWeb3.js +103 -0
- package/dist/src/adapters/web3/contracts/GnosisSafe/GnosisSafeContractWeb3.js.map +1 -0
- package/dist/src/adapters/web3/contracts/GnosisSafe/v1.0.0/GnosisSafeContract_V1_0_0_Web3.d.ts +12 -0
- package/dist/src/adapters/web3/contracts/GnosisSafe/v1.0.0/GnosisSafeContract_V1_0_0_Web3.js +36 -0
- package/dist/src/adapters/web3/contracts/GnosisSafe/v1.0.0/GnosisSafeContract_V1_0_0_Web3.js.map +1 -0
- package/dist/src/adapters/web3/contracts/GnosisSafe/v1.1.1/GnosisSafeContract_V1_1_1_Web3.d.ts +12 -0
- package/dist/src/adapters/web3/contracts/GnosisSafe/v1.1.1/GnosisSafeContract_V1_1_1_Web3.js +36 -0
- package/dist/src/adapters/web3/contracts/GnosisSafe/v1.1.1/GnosisSafeContract_V1_1_1_Web3.js.map +1 -0
- package/dist/src/adapters/web3/contracts/GnosisSafe/v1.2.0/GnosisSafeContract_V1_2_0_Web3.d.ts +12 -0
- package/dist/src/adapters/web3/contracts/GnosisSafe/v1.2.0/GnosisSafeContract_V1_2_0_Web3.js +34 -0
- package/dist/src/adapters/web3/contracts/GnosisSafe/v1.2.0/GnosisSafeContract_V1_2_0_Web3.js.map +1 -0
- package/dist/src/adapters/web3/contracts/GnosisSafe/v1.3.0/GnosisSafeContract_V1_3_0_Web3.d.ts +12 -0
- package/dist/src/adapters/web3/contracts/GnosisSafe/v1.3.0/GnosisSafeContract_V1_3_0_Web3.js +35 -0
- package/dist/src/adapters/web3/contracts/GnosisSafe/v1.3.0/GnosisSafeContract_V1_3_0_Web3.js.map +1 -0
- package/dist/src/adapters/web3/contracts/GnosisSafeProxyFactory/GnosisSafeProxyFactoryWeb3Contract.d.ts +22 -0
- package/dist/src/adapters/web3/contracts/GnosisSafeProxyFactory/GnosisSafeProxyFactoryWeb3Contract.js +51 -0
- package/dist/src/adapters/web3/contracts/GnosisSafeProxyFactory/GnosisSafeProxyFactoryWeb3Contract.js.map +1 -0
- package/dist/src/adapters/web3/contracts/GnosisSafeProxyFactory/v1.0.0/GnosisSafeProxyFactoryContract_V1_0_0_Web3.d.ts +7 -0
- package/dist/src/adapters/web3/contracts/GnosisSafeProxyFactory/v1.0.0/GnosisSafeProxyFactoryContract_V1_0_0_Web3.js +14 -0
- package/dist/src/adapters/web3/contracts/GnosisSafeProxyFactory/v1.0.0/GnosisSafeProxyFactoryContract_V1_0_0_Web3.js.map +1 -0
- package/dist/src/adapters/web3/contracts/GnosisSafeProxyFactory/v1.1.1/GnosisSafeProxyFactoryContract_V1_1_1_Web3.d.ts +7 -0
- package/dist/src/adapters/web3/contracts/GnosisSafeProxyFactory/v1.1.1/GnosisSafeProxyFactoryContract_V1_1_1_Web3.js +14 -0
- package/dist/src/adapters/web3/contracts/GnosisSafeProxyFactory/v1.1.1/GnosisSafeProxyFactoryContract_V1_1_1_Web3.js.map +1 -0
- package/dist/src/adapters/web3/contracts/GnosisSafeProxyFactory/v1.3.0/GnosisSafeProxyFactoryContract_V1_3_0_Web3.d.ts +7 -0
- package/dist/src/adapters/web3/contracts/GnosisSafeProxyFactory/v1.3.0/GnosisSafeProxyFactoryContract_V1_3_0_Web3.js +14 -0
- package/dist/src/adapters/web3/contracts/GnosisSafeProxyFactory/v1.3.0/GnosisSafeProxyFactoryContract_V1_3_0_Web3.js.map +1 -0
- package/dist/src/adapters/web3/contracts/MultiSend/MultiSendWeb3Contract.d.ts +10 -0
- package/dist/src/adapters/web3/contracts/MultiSend/MultiSendWeb3Contract.js +15 -0
- package/dist/src/adapters/web3/contracts/MultiSend/MultiSendWeb3Contract.js.map +1 -0
- package/dist/src/adapters/web3/contracts/MultiSend/v1.1.1/MultiSendContract_V1_1_1_Web3.d.ts +7 -0
- package/dist/src/adapters/web3/contracts/MultiSend/v1.1.1/MultiSendContract_V1_1_1_Web3.js +14 -0
- package/dist/src/adapters/web3/contracts/MultiSend/v1.1.1/MultiSendContract_V1_1_1_Web3.js.map +1 -0
- package/dist/src/adapters/web3/contracts/MultiSend/v1.3.0/MultiSendContract_V1_3_0_Web3.d.ts +7 -0
- package/dist/src/adapters/web3/contracts/MultiSend/v1.3.0/MultiSendContract_V1_3_0_Web3.js +14 -0
- package/dist/src/adapters/web3/contracts/MultiSend/v1.3.0/MultiSendContract_V1_3_0_Web3.js.map +1 -0
- package/dist/src/adapters/web3/contracts/MultiSendCallOnly/MultiSendCallOnlyWeb3Contract.d.ts +9 -0
- package/dist/src/adapters/web3/contracts/MultiSendCallOnly/MultiSendCallOnlyWeb3Contract.js +15 -0
- package/dist/src/adapters/web3/contracts/MultiSendCallOnly/MultiSendCallOnlyWeb3Contract.js.map +1 -0
- package/dist/src/adapters/web3/contracts/MultiSendCallOnly/v1.3.0/MultiSendCallOnlyContract_V1_3_0_Web3.d.ts +7 -0
- package/dist/src/adapters/web3/contracts/MultiSendCallOnly/v1.3.0/MultiSendCallOnlyContract_V1_3_0_Web3.js +14 -0
- package/dist/src/adapters/web3/contracts/MultiSendCallOnly/v1.3.0/MultiSendCallOnlyContract_V1_3_0_Web3.js.map +1 -0
- package/dist/src/adapters/web3/contracts/SignMessageLib/SignMessageLibWeb3Contract.d.ts +13 -0
- package/dist/src/adapters/web3/contracts/SignMessageLib/SignMessageLibWeb3Contract.js +34 -0
- package/dist/src/adapters/web3/contracts/SignMessageLib/SignMessageLibWeb3Contract.js.map +1 -0
- package/dist/src/adapters/web3/contracts/SignMessageLib/v1.3.0/SignMessageLibContract_V1_3_0_Web3.d.ts +7 -0
- package/dist/src/adapters/web3/contracts/SignMessageLib/v1.3.0/SignMessageLibContract_V1_3_0_Web3.js +14 -0
- package/dist/src/adapters/web3/contracts/SignMessageLib/v1.3.0/SignMessageLibContract_V1_3_0_Web3.js.map +1 -0
- package/dist/src/adapters/web3/contracts/contractInstancesWeb3.d.ts +33 -0
- package/dist/src/adapters/web3/contracts/contractInstancesWeb3.js +106 -0
- package/dist/src/adapters/web3/contracts/contractInstancesWeb3.js.map +1 -0
- package/dist/src/adapters/web3/index.d.ts +9 -0
- package/dist/src/adapters/web3/index.js +21 -0
- package/dist/src/adapters/web3/index.js.map +1 -0
- package/dist/src/adapters/web3/types.d.ts +14 -0
- package/dist/src/adapters/web3/types.js +3 -0
- package/dist/src/adapters/web3/types.js.map +1 -0
- package/dist/src/adapters/web3/utils/constants.d.ts +3 -0
- package/dist/src/adapters/web3/utils/constants.js +7 -0
- package/dist/src/adapters/web3/utils/constants.js.map +1 -0
- package/dist/src/adapters/web3/utils/index.d.ts +4 -0
- package/dist/src/adapters/web3/utils/index.js +14 -0
- package/dist/src/adapters/web3/utils/index.js.map +1 -0
- package/dist/src/contracts/config.d.ts +18 -0
- package/dist/src/contracts/config.js +51 -0
- package/dist/src/contracts/config.js.map +1 -0
- package/dist/src/contracts/safeDeploymentContracts.d.ts +28 -0
- package/dist/src/contracts/safeDeploymentContracts.js +161 -0
- package/dist/src/contracts/safeDeploymentContracts.js.map +1 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.js +40 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/managers/contractManager.d.ts +14 -0
- package/dist/src/managers/contractManager.js +83 -0
- package/dist/src/managers/contractManager.js.map +1 -0
- package/dist/src/managers/fallbackHandlerManager.d.ts +12 -0
- package/dist/src/managers/fallbackHandlerManager.js +65 -0
- package/dist/src/managers/fallbackHandlerManager.js.map +1 -0
- package/dist/src/managers/guardManager.d.ts +12 -0
- package/dist/src/managers/guardManager.js +65 -0
- package/dist/src/managers/guardManager.js.map +1 -0
- package/dist/src/managers/moduleManager.d.ts +13 -0
- package/dist/src/managers/moduleManager.js +67 -0
- package/dist/src/managers/moduleManager.js.map +1 -0
- package/dist/src/managers/ownerManager.d.ts +17 -0
- package/dist/src/managers/ownerManager.js +101 -0
- package/dist/src/managers/ownerManager.js.map +1 -0
- package/dist/src/safeFactory/index.d.ts +49 -0
- package/dist/src/safeFactory/index.js +165 -0
- package/dist/src/safeFactory/index.js.map +1 -0
- package/dist/src/safeFactory/utils.d.ts +3 -0
- package/dist/src/safeFactory/utils.js +19 -0
- package/dist/src/safeFactory/utils.js.map +1 -0
- package/dist/src/types/index.d.ts +35 -0
- package/dist/src/types/index.js +3 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/utils/address.d.ts +3 -0
- package/dist/src/utils/address.js +20 -0
- package/dist/src/utils/address.js.map +1 -0
- package/dist/src/utils/constants.d.ts +3 -0
- package/dist/src/utils/constants.js +7 -0
- package/dist/src/utils/constants.js.map +1 -0
- package/dist/src/utils/eip-3770/config.d.ts +6 -0
- package/dist/src/utils/eip-3770/config.js +116 -0
- package/dist/src/utils/eip-3770/config.js.map +1 -0
- package/dist/src/utils/eip-3770/index.d.ts +7 -0
- package/dist/src/utils/eip-3770/index.js +48 -0
- package/dist/src/utils/eip-3770/index.js.map +1 -0
- package/dist/src/utils/eip-712/index.d.ts +17 -0
- package/dist/src/utils/eip-712/index.js +68 -0
- package/dist/src/utils/eip-712/index.js.map +1 -0
- package/dist/src/utils/index.d.ts +5 -0
- package/dist/src/utils/index.js +22 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/safeVersions.d.ts +7 -0
- package/dist/src/utils/safeVersions.js +28 -0
- package/dist/src/utils/safeVersions.js.map +1 -0
- package/dist/src/utils/signatures/SafeSignature.d.ts +26 -0
- package/dist/src/utils/signatures/SafeSignature.js +33 -0
- package/dist/src/utils/signatures/SafeSignature.js.map +1 -0
- package/dist/src/utils/signatures/index.d.ts +12 -0
- package/dist/src/utils/signatures/index.js +94 -0
- package/dist/src/utils/signatures/index.js.map +1 -0
- package/dist/src/utils/transactions/SafeTransaction.d.ts +9 -0
- package/dist/src/utils/transactions/SafeTransaction.js +25 -0
- package/dist/src/utils/transactions/SafeTransaction.js.map +1 -0
- package/dist/src/utils/transactions/gas.d.ts +2 -0
- package/dist/src/utils/transactions/gas.js +75 -0
- package/dist/src/utils/transactions/gas.js.map +1 -0
- package/dist/src/utils/transactions/index.d.ts +4 -0
- package/dist/src/utils/transactions/index.js +21 -0
- package/dist/src/utils/transactions/index.js.map +1 -0
- package/dist/src/utils/transactions/types.d.ts +2 -0
- package/dist/src/utils/transactions/types.js +3 -0
- package/dist/src/utils/transactions/types.js.map +1 -0
- package/dist/src/utils/transactions/utils.d.ts +7 -0
- package/dist/src/utils/transactions/utils.js +98 -0
- package/dist/src/utils/transactions/utils.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +90 -0
package/dist/src/Safe.js
ADDED
|
@@ -0,0 +1,715 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
+
};
|
|
8
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
var _Safe_ethAdapter, _Safe_contractManager, _Safe_ownerManager, _Safe_moduleManager, _Safe_guardManager, _Safe_fallbackHandlerManager;
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const bignumber_1 = require("@ethersproject/bignumber");
|
|
19
|
+
const safe_core_sdk_types_1 = require("@safe-global/safe-core-sdk-types");
|
|
20
|
+
const utils_1 = require("./utils");
|
|
21
|
+
const contractManager_1 = __importDefault(require("./managers/contractManager"));
|
|
22
|
+
const fallbackHandlerManager_1 = __importDefault(require("./managers/fallbackHandlerManager"));
|
|
23
|
+
const guardManager_1 = __importDefault(require("./managers/guardManager"));
|
|
24
|
+
const moduleManager_1 = __importDefault(require("./managers/moduleManager"));
|
|
25
|
+
const ownerManager_1 = __importDefault(require("./managers/ownerManager"));
|
|
26
|
+
const signatures_1 = require("./utils/signatures");
|
|
27
|
+
const SafeSignature_1 = __importDefault(require("./utils/signatures/SafeSignature"));
|
|
28
|
+
const SafeTransaction_1 = __importDefault(require("./utils/transactions/SafeTransaction"));
|
|
29
|
+
const utils_2 = require("./utils/transactions/utils");
|
|
30
|
+
class Safe {
|
|
31
|
+
constructor() {
|
|
32
|
+
_Safe_ethAdapter.set(this, void 0);
|
|
33
|
+
_Safe_contractManager.set(this, void 0);
|
|
34
|
+
_Safe_ownerManager.set(this, void 0);
|
|
35
|
+
_Safe_moduleManager.set(this, void 0);
|
|
36
|
+
_Safe_guardManager.set(this, void 0);
|
|
37
|
+
_Safe_fallbackHandlerManager.set(this, void 0);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Creates an instance of the Safe Core SDK.
|
|
41
|
+
* @param config - Ethers Safe configuration
|
|
42
|
+
* @returns The Safe Core SDK instance
|
|
43
|
+
* @throws "SafeProxy contract is not deployed on the current network"
|
|
44
|
+
* @throws "MultiSend contract is not deployed on the current network"
|
|
45
|
+
* @throws "MultiSendCallOnly contract is not deployed on the current network"
|
|
46
|
+
*/
|
|
47
|
+
static async create({ ethAdapter, safeAddress, isL1SafeMasterCopy, contractNetworks }) {
|
|
48
|
+
const safeSdk = new Safe();
|
|
49
|
+
await safeSdk.init({ ethAdapter, safeAddress, isL1SafeMasterCopy, contractNetworks });
|
|
50
|
+
return safeSdk;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Initializes the Safe Core SDK instance.
|
|
54
|
+
* @param config - Safe configuration
|
|
55
|
+
* @throws "Signer must be connected to a provider"
|
|
56
|
+
* @throws "SafeProxy contract is not deployed on the current network"
|
|
57
|
+
* @throws "MultiSend contract is not deployed on the current network"
|
|
58
|
+
* @throws "MultiSendCallOnly contract is not deployed on the current network"
|
|
59
|
+
*/
|
|
60
|
+
async init({ ethAdapter, safeAddress, isL1SafeMasterCopy, contractNetworks }) {
|
|
61
|
+
__classPrivateFieldSet(this, _Safe_ethAdapter, ethAdapter, "f");
|
|
62
|
+
__classPrivateFieldSet(this, _Safe_contractManager, await contractManager_1.default.create({
|
|
63
|
+
ethAdapter: __classPrivateFieldGet(this, _Safe_ethAdapter, "f"),
|
|
64
|
+
safeAddress,
|
|
65
|
+
isL1SafeMasterCopy,
|
|
66
|
+
contractNetworks
|
|
67
|
+
}), "f");
|
|
68
|
+
__classPrivateFieldSet(this, _Safe_ownerManager, new ownerManager_1.default(__classPrivateFieldGet(this, _Safe_ethAdapter, "f"), __classPrivateFieldGet(this, _Safe_contractManager, "f").safeContract), "f");
|
|
69
|
+
__classPrivateFieldSet(this, _Safe_moduleManager, new moduleManager_1.default(__classPrivateFieldGet(this, _Safe_ethAdapter, "f"), __classPrivateFieldGet(this, _Safe_contractManager, "f").safeContract), "f");
|
|
70
|
+
__classPrivateFieldSet(this, _Safe_guardManager, new guardManager_1.default(__classPrivateFieldGet(this, _Safe_ethAdapter, "f"), __classPrivateFieldGet(this, _Safe_contractManager, "f").safeContract), "f");
|
|
71
|
+
__classPrivateFieldSet(this, _Safe_fallbackHandlerManager, new fallbackHandlerManager_1.default(__classPrivateFieldGet(this, _Safe_ethAdapter, "f"), __classPrivateFieldGet(this, _Safe_contractManager, "f").safeContract), "f");
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Returns a new instance of the Safe Core SDK.
|
|
75
|
+
* @param config - Connect Safe configuration
|
|
76
|
+
* @throws "SafeProxy contract is not deployed on the current network"
|
|
77
|
+
* @throws "MultiSend contract is not deployed on the current network"
|
|
78
|
+
* @throws "MultiSendCallOnly contract is not deployed on the current network"
|
|
79
|
+
*/
|
|
80
|
+
async connect({ ethAdapter, safeAddress, isL1SafeMasterCopy, contractNetworks }) {
|
|
81
|
+
return await Safe.create({
|
|
82
|
+
ethAdapter: ethAdapter || __classPrivateFieldGet(this, _Safe_ethAdapter, "f"),
|
|
83
|
+
safeAddress: safeAddress || this.getAddress(),
|
|
84
|
+
isL1SafeMasterCopy: isL1SafeMasterCopy || __classPrivateFieldGet(this, _Safe_contractManager, "f").isL1SafeMasterCopy,
|
|
85
|
+
contractNetworks: contractNetworks || __classPrivateFieldGet(this, _Safe_contractManager, "f").contractNetworks
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Returns the address of the current SafeProxy contract.
|
|
90
|
+
*
|
|
91
|
+
* @returns The address of the SafeProxy contract
|
|
92
|
+
*/
|
|
93
|
+
getAddress() {
|
|
94
|
+
return __classPrivateFieldGet(this, _Safe_contractManager, "f").safeContract.getAddress();
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Returns the ContractManager
|
|
98
|
+
*
|
|
99
|
+
* @returns The current ContractManager
|
|
100
|
+
* */
|
|
101
|
+
getContractManager() {
|
|
102
|
+
return __classPrivateFieldGet(this, _Safe_contractManager, "f");
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Returns the current EthAdapter.
|
|
106
|
+
*
|
|
107
|
+
* @returns The current EthAdapter
|
|
108
|
+
*/
|
|
109
|
+
getEthAdapter() {
|
|
110
|
+
return __classPrivateFieldGet(this, _Safe_ethAdapter, "f");
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Returns the address of the MultiSend contract.
|
|
114
|
+
*
|
|
115
|
+
* @returns The address of the MultiSend contract
|
|
116
|
+
*/
|
|
117
|
+
getMultiSendAddress() {
|
|
118
|
+
return __classPrivateFieldGet(this, _Safe_contractManager, "f").multiSendContract.getAddress();
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Returns the address of the MultiSendCallOnly contract.
|
|
122
|
+
*
|
|
123
|
+
* @returns The address of the MultiSendCallOnly contract
|
|
124
|
+
*/
|
|
125
|
+
getMultiSendCallOnlyAddress() {
|
|
126
|
+
return __classPrivateFieldGet(this, _Safe_contractManager, "f").multiSendCallOnlyContract.getAddress();
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Returns the Safe Master Copy contract version.
|
|
130
|
+
*
|
|
131
|
+
* @returns The Safe Master Copy contract version
|
|
132
|
+
*/
|
|
133
|
+
async getContractVersion() {
|
|
134
|
+
return __classPrivateFieldGet(this, _Safe_contractManager, "f").safeContract.getVersion();
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Returns the list of Safe owner accounts.
|
|
138
|
+
*
|
|
139
|
+
* @returns The list of owners
|
|
140
|
+
*/
|
|
141
|
+
async getOwners() {
|
|
142
|
+
return __classPrivateFieldGet(this, _Safe_ownerManager, "f").getOwners();
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Returns the Safe nonce.
|
|
146
|
+
*
|
|
147
|
+
* @returns The Safe nonce
|
|
148
|
+
*/
|
|
149
|
+
async getNonce() {
|
|
150
|
+
return __classPrivateFieldGet(this, _Safe_contractManager, "f").safeContract.getNonce();
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Returns the Safe threshold.
|
|
154
|
+
*
|
|
155
|
+
* @returns The Safe threshold
|
|
156
|
+
*/
|
|
157
|
+
async getThreshold() {
|
|
158
|
+
return __classPrivateFieldGet(this, _Safe_ownerManager, "f").getThreshold();
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Returns the chainId of the connected network.
|
|
162
|
+
*
|
|
163
|
+
* @returns The chainId of the connected network
|
|
164
|
+
*/
|
|
165
|
+
async getChainId() {
|
|
166
|
+
return __classPrivateFieldGet(this, _Safe_ethAdapter, "f").getChainId();
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Returns the ETH balance of the Safe.
|
|
170
|
+
*
|
|
171
|
+
* @returns The ETH balance of the Safe
|
|
172
|
+
*/
|
|
173
|
+
async getBalance() {
|
|
174
|
+
return __classPrivateFieldGet(this, _Safe_ethAdapter, "f").getBalance(this.getAddress());
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Returns the address of the FallbackHandler contract.
|
|
178
|
+
*
|
|
179
|
+
* @returns The address of the FallbackHandler contract
|
|
180
|
+
*/
|
|
181
|
+
getFallbackHandler() {
|
|
182
|
+
return __classPrivateFieldGet(this, _Safe_fallbackHandlerManager, "f").getFallbackHandler();
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Returns the enabled Safe guard or 0x address if no guards are enabled.
|
|
186
|
+
*
|
|
187
|
+
* @returns The address of the enabled Safe guard
|
|
188
|
+
* @throws "Current version of the Safe does not support Safe transaction guards functionality"
|
|
189
|
+
*/
|
|
190
|
+
async getGuard() {
|
|
191
|
+
return __classPrivateFieldGet(this, _Safe_guardManager, "f").getGuard();
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Returns the list of addresses of all the enabled Safe modules.
|
|
195
|
+
*
|
|
196
|
+
* @returns The list of addresses of all the enabled Safe modules
|
|
197
|
+
*/
|
|
198
|
+
async getModules() {
|
|
199
|
+
return __classPrivateFieldGet(this, _Safe_moduleManager, "f").getModules();
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Checks if a specific Safe module is enabled for the current Safe.
|
|
203
|
+
*
|
|
204
|
+
* @param moduleAddress - The desired module address
|
|
205
|
+
* @returns TRUE if the module is enabled
|
|
206
|
+
*/
|
|
207
|
+
async isModuleEnabled(moduleAddress) {
|
|
208
|
+
return __classPrivateFieldGet(this, _Safe_moduleManager, "f").isModuleEnabled(moduleAddress);
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Checks if a specific address is an owner of the current Safe.
|
|
212
|
+
*
|
|
213
|
+
* @param ownerAddress - The account address
|
|
214
|
+
* @returns TRUE if the account is an owner
|
|
215
|
+
*/
|
|
216
|
+
async isOwner(ownerAddress) {
|
|
217
|
+
return __classPrivateFieldGet(this, _Safe_ownerManager, "f").isOwner(ownerAddress);
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Returns a Safe transaction ready to be signed by the owners.
|
|
221
|
+
*
|
|
222
|
+
* @param createTransactionProps - The createTransaction props
|
|
223
|
+
* @returns The Safe transaction
|
|
224
|
+
* @throws "Invalid empty array of transactions"
|
|
225
|
+
*/
|
|
226
|
+
async createTransaction({ safeTransactionData, onlyCalls = false, options }) {
|
|
227
|
+
if ((0, utils_1.isMetaTransactionArray)(safeTransactionData) && safeTransactionData.length === 0) {
|
|
228
|
+
throw new Error('Invalid empty array of transactions');
|
|
229
|
+
}
|
|
230
|
+
let newTransaction;
|
|
231
|
+
if ((0, utils_1.isMetaTransactionArray)(safeTransactionData) && safeTransactionData.length > 1) {
|
|
232
|
+
const multiSendContract = onlyCalls
|
|
233
|
+
? __classPrivateFieldGet(this, _Safe_contractManager, "f").multiSendCallOnlyContract
|
|
234
|
+
: __classPrivateFieldGet(this, _Safe_contractManager, "f").multiSendContract;
|
|
235
|
+
const multiSendData = (0, utils_2.encodeMultiSendData)(safeTransactionData.map(utils_2.standardizeMetaTransactionData));
|
|
236
|
+
const multiSendTransaction = {
|
|
237
|
+
...options,
|
|
238
|
+
to: multiSendContract.getAddress(),
|
|
239
|
+
value: '0',
|
|
240
|
+
data: multiSendContract.encode('multiSend', [multiSendData]),
|
|
241
|
+
operation: safe_core_sdk_types_1.OperationType.DelegateCall
|
|
242
|
+
};
|
|
243
|
+
newTransaction = multiSendTransaction;
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
newTransaction = (0, utils_1.isMetaTransactionArray)(safeTransactionData)
|
|
247
|
+
? { ...options, ...safeTransactionData[0] }
|
|
248
|
+
: safeTransactionData;
|
|
249
|
+
}
|
|
250
|
+
const standardizedTransaction = await (0, utils_2.standardizeSafeTransactionData)(__classPrivateFieldGet(this, _Safe_contractManager, "f").safeContract, __classPrivateFieldGet(this, _Safe_ethAdapter, "f"), newTransaction);
|
|
251
|
+
return new SafeTransaction_1.default(standardizedTransaction);
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Returns a Safe transaction ready to be signed by the owners that invalidates the pending Safe transaction/s with a specific nonce.
|
|
255
|
+
*
|
|
256
|
+
* @param nonce - The nonce of the transaction/s that are going to be rejected
|
|
257
|
+
* @returns The Safe transaction that invalidates the pending Safe transaction/s
|
|
258
|
+
*/
|
|
259
|
+
async createRejectionTransaction(nonce) {
|
|
260
|
+
const safeTransactionData = {
|
|
261
|
+
to: this.getAddress(),
|
|
262
|
+
nonce,
|
|
263
|
+
value: '0',
|
|
264
|
+
data: '0x',
|
|
265
|
+
safeTxGas: 0
|
|
266
|
+
};
|
|
267
|
+
return this.createTransaction({ safeTransactionData });
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Copies a Safe transaction
|
|
271
|
+
*
|
|
272
|
+
* @param safeTransaction - The Safe transaction
|
|
273
|
+
* @returns The new Safe transaction
|
|
274
|
+
*/
|
|
275
|
+
async copyTransaction(safeTransaction) {
|
|
276
|
+
const signedSafeTransaction = await this.createTransaction({
|
|
277
|
+
safeTransactionData: safeTransaction.data
|
|
278
|
+
});
|
|
279
|
+
safeTransaction.signatures.forEach((signature) => {
|
|
280
|
+
signedSafeTransaction.addSignature(signature);
|
|
281
|
+
});
|
|
282
|
+
return signedSafeTransaction;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Returns the transaction hash of a Safe transaction.
|
|
286
|
+
*
|
|
287
|
+
* @param safeTransaction - The Safe transaction
|
|
288
|
+
* @returns The transaction hash of the Safe transaction
|
|
289
|
+
*/
|
|
290
|
+
async getTransactionHash(safeTransaction) {
|
|
291
|
+
const safeTransactionData = safeTransaction.data;
|
|
292
|
+
const txHash = await __classPrivateFieldGet(this, _Safe_contractManager, "f").safeContract.getTransactionHash(safeTransactionData);
|
|
293
|
+
return txHash;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Signs a hash using the current signer account.
|
|
297
|
+
*
|
|
298
|
+
* @param hash - The hash to sign
|
|
299
|
+
* @returns The Safe signature
|
|
300
|
+
*/
|
|
301
|
+
async signTransactionHash(hash) {
|
|
302
|
+
return (0, signatures_1.generateSignature)(__classPrivateFieldGet(this, _Safe_ethAdapter, "f"), hash);
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Signs a transaction according to the EIP-712 using the current signer account.
|
|
306
|
+
*
|
|
307
|
+
* @param safeTransaction - The Safe transaction to be signed
|
|
308
|
+
* @param methodVersion - EIP-712 version. Optional
|
|
309
|
+
* @returns The Safe signature
|
|
310
|
+
*/
|
|
311
|
+
async signTypedData(safeTransaction, methodVersion) {
|
|
312
|
+
const safeTransactionEIP712Args = {
|
|
313
|
+
safeAddress: this.getAddress(),
|
|
314
|
+
safeVersion: await this.getContractVersion(),
|
|
315
|
+
chainId: await this.getEthAdapter().getChainId(),
|
|
316
|
+
safeTransactionData: safeTransaction.data
|
|
317
|
+
};
|
|
318
|
+
return (0, signatures_1.generateEIP712Signature)(__classPrivateFieldGet(this, _Safe_ethAdapter, "f"), safeTransactionEIP712Args, methodVersion);
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Adds the signature of the current signer to the Safe transaction object.
|
|
322
|
+
*
|
|
323
|
+
* @param safeTransaction - The Safe transaction to be signed
|
|
324
|
+
* @param signingMethod - Method followed to sign a transaction. Optional. Default value is "eth_sign"
|
|
325
|
+
* @returns The signed Safe transaction
|
|
326
|
+
* @throws "Transactions can only be signed by Safe owners"
|
|
327
|
+
*/
|
|
328
|
+
async signTransaction(safeTransaction, signingMethod = 'eth_signTypedData_v4') {
|
|
329
|
+
const transaction = (0, utils_1.isSafeMultisigTransactionResponse)(safeTransaction)
|
|
330
|
+
? await this.toSafeTransactionType(safeTransaction)
|
|
331
|
+
: safeTransaction;
|
|
332
|
+
const owners = await this.getOwners();
|
|
333
|
+
const signerAddress = await __classPrivateFieldGet(this, _Safe_ethAdapter, "f").getSignerAddress();
|
|
334
|
+
if (!signerAddress) {
|
|
335
|
+
throw new Error('EthAdapter must be initialized with a signer to use this method');
|
|
336
|
+
}
|
|
337
|
+
const addressIsOwner = owners.find((owner) => signerAddress && (0, utils_1.sameString)(owner, signerAddress));
|
|
338
|
+
if (!addressIsOwner) {
|
|
339
|
+
throw new Error('Transactions can only be signed by Safe owners');
|
|
340
|
+
}
|
|
341
|
+
let signature;
|
|
342
|
+
if (signingMethod === 'eth_signTypedData_v4') {
|
|
343
|
+
signature = await this.signTypedData(transaction, 'v4');
|
|
344
|
+
}
|
|
345
|
+
else if (signingMethod === 'eth_signTypedData_v3') {
|
|
346
|
+
signature = await this.signTypedData(transaction, 'v3');
|
|
347
|
+
}
|
|
348
|
+
else if (signingMethod === 'eth_signTypedData') {
|
|
349
|
+
signature = await this.signTypedData(transaction);
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
const safeVersion = await this.getContractVersion();
|
|
353
|
+
if (!(0, utils_1.hasSafeFeature)(utils_1.SAFE_FEATURES.ETH_SIGN, safeVersion)) {
|
|
354
|
+
throw new Error('eth_sign is only supported by Safes >= v1.1.0');
|
|
355
|
+
}
|
|
356
|
+
const txHash = await this.getTransactionHash(transaction);
|
|
357
|
+
signature = await this.signTransactionHash(txHash);
|
|
358
|
+
}
|
|
359
|
+
const signedSafeTransaction = await this.createTransaction({
|
|
360
|
+
safeTransactionData: transaction.data
|
|
361
|
+
});
|
|
362
|
+
transaction.signatures.forEach((signature) => {
|
|
363
|
+
signedSafeTransaction.addSignature(signature);
|
|
364
|
+
});
|
|
365
|
+
signedSafeTransaction.addSignature(signature);
|
|
366
|
+
return signedSafeTransaction;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Approves on-chain a hash using the current signer account.
|
|
370
|
+
*
|
|
371
|
+
* @param hash - The hash to approve
|
|
372
|
+
* @param options - The Safe transaction execution options. Optional
|
|
373
|
+
* @returns The Safe transaction response
|
|
374
|
+
* @throws "Transaction hashes can only be approved by Safe owners"
|
|
375
|
+
* @throws "Cannot specify gas and gasLimit together in transaction options"
|
|
376
|
+
*/
|
|
377
|
+
async approveTransactionHash(hash, options) {
|
|
378
|
+
const owners = await this.getOwners();
|
|
379
|
+
const signerAddress = await __classPrivateFieldGet(this, _Safe_ethAdapter, "f").getSignerAddress();
|
|
380
|
+
if (!signerAddress) {
|
|
381
|
+
throw new Error('EthAdapter must be initialized with a signer to use this method');
|
|
382
|
+
}
|
|
383
|
+
const addressIsOwner = owners.find((owner) => signerAddress && (0, utils_1.sameString)(owner, signerAddress));
|
|
384
|
+
if (!addressIsOwner) {
|
|
385
|
+
throw new Error('Transaction hashes can only be approved by Safe owners');
|
|
386
|
+
}
|
|
387
|
+
if ((options === null || options === void 0 ? void 0 : options.gas) && (options === null || options === void 0 ? void 0 : options.gasLimit)) {
|
|
388
|
+
throw new Error('Cannot specify gas and gasLimit together in transaction options');
|
|
389
|
+
}
|
|
390
|
+
return __classPrivateFieldGet(this, _Safe_contractManager, "f").safeContract.approveHash(hash, {
|
|
391
|
+
from: signerAddress,
|
|
392
|
+
...options
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Returns a list of owners who have approved a specific Safe transaction.
|
|
397
|
+
*
|
|
398
|
+
* @param txHash - The Safe transaction hash
|
|
399
|
+
* @returns The list of owners
|
|
400
|
+
*/
|
|
401
|
+
async getOwnersWhoApprovedTx(txHash) {
|
|
402
|
+
const owners = await this.getOwners();
|
|
403
|
+
const ownersWhoApproved = [];
|
|
404
|
+
for (const owner of owners) {
|
|
405
|
+
const approved = await __classPrivateFieldGet(this, _Safe_contractManager, "f").safeContract.approvedHashes(owner, txHash);
|
|
406
|
+
if (approved.gt(0)) {
|
|
407
|
+
ownersWhoApproved.push(owner);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
return ownersWhoApproved;
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Returns the Safe transaction to enable the fallback handler.
|
|
414
|
+
*
|
|
415
|
+
* @param address - The new fallback handler address
|
|
416
|
+
* @param options - The transaction optional properties
|
|
417
|
+
* @returns The Safe transaction ready to be signed
|
|
418
|
+
* @throws "Invalid fallback handler address provided"
|
|
419
|
+
* @throws "Fallback handler provided is already enabled"
|
|
420
|
+
* @throws "Current version of the Safe does not support the fallback handler functionality"
|
|
421
|
+
*/
|
|
422
|
+
async createEnableFallbackHandlerTx(fallbackHandlerAddress, options) {
|
|
423
|
+
const safeTransactionData = {
|
|
424
|
+
to: this.getAddress(),
|
|
425
|
+
value: '0',
|
|
426
|
+
data: await __classPrivateFieldGet(this, _Safe_fallbackHandlerManager, "f").encodeEnableFallbackHandlerData(fallbackHandlerAddress),
|
|
427
|
+
...options
|
|
428
|
+
};
|
|
429
|
+
const safeTransaction = await this.createTransaction({ safeTransactionData });
|
|
430
|
+
return safeTransaction;
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Returns the Safe transaction to disable the fallback handler.
|
|
434
|
+
*
|
|
435
|
+
* @param options - The transaction optional properties
|
|
436
|
+
* @returns The Safe transaction ready to be signed
|
|
437
|
+
* @throws "There is no fallback handler enabled yet"
|
|
438
|
+
* @throws "Current version of the Safe does not support the fallback handler functionality"
|
|
439
|
+
*/
|
|
440
|
+
async createDisableFallbackHandlerTx(options) {
|
|
441
|
+
const safeTransactionData = {
|
|
442
|
+
to: this.getAddress(),
|
|
443
|
+
value: '0',
|
|
444
|
+
data: await __classPrivateFieldGet(this, _Safe_fallbackHandlerManager, "f").encodeDisableFallbackHandlerData(),
|
|
445
|
+
...options
|
|
446
|
+
};
|
|
447
|
+
const safeTransaction = await this.createTransaction({ safeTransactionData });
|
|
448
|
+
return safeTransaction;
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Returns the Safe transaction to enable a Safe guard.
|
|
452
|
+
*
|
|
453
|
+
* @param guardAddress - The desired guard address
|
|
454
|
+
* @param options - The transaction optional properties
|
|
455
|
+
* @returns The Safe transaction ready to be signed
|
|
456
|
+
* @throws "Invalid guard address provided"
|
|
457
|
+
* @throws "Guard provided is already enabled"
|
|
458
|
+
* @throws "Current version of the Safe does not support Safe transaction guards functionality"
|
|
459
|
+
*/
|
|
460
|
+
async createEnableGuardTx(guardAddress, options) {
|
|
461
|
+
const safeTransactionData = {
|
|
462
|
+
to: this.getAddress(),
|
|
463
|
+
value: '0',
|
|
464
|
+
data: await __classPrivateFieldGet(this, _Safe_guardManager, "f").encodeEnableGuardData(guardAddress),
|
|
465
|
+
...options
|
|
466
|
+
};
|
|
467
|
+
const safeTransaction = await this.createTransaction({ safeTransactionData });
|
|
468
|
+
return safeTransaction;
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* Returns the Safe transaction to disable a Safe guard.
|
|
472
|
+
*
|
|
473
|
+
* @param options - The transaction optional properties
|
|
474
|
+
* @returns The Safe transaction ready to be signed
|
|
475
|
+
* @throws "There is no guard enabled yet"
|
|
476
|
+
* @throws "Current version of the Safe does not support Safe transaction guards functionality"
|
|
477
|
+
*/
|
|
478
|
+
async createDisableGuardTx(options) {
|
|
479
|
+
const safeTransactionData = {
|
|
480
|
+
to: this.getAddress(),
|
|
481
|
+
value: '0',
|
|
482
|
+
data: await __classPrivateFieldGet(this, _Safe_guardManager, "f").encodeDisableGuardData(),
|
|
483
|
+
...options
|
|
484
|
+
};
|
|
485
|
+
const safeTransaction = await this.createTransaction({ safeTransactionData });
|
|
486
|
+
return safeTransaction;
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Returns the Safe transaction to enable a Safe module.
|
|
490
|
+
*
|
|
491
|
+
* @param moduleAddress - The desired module address
|
|
492
|
+
* @param options - The transaction optional properties
|
|
493
|
+
* @returns The Safe transaction ready to be signed
|
|
494
|
+
* @throws "Invalid module address provided"
|
|
495
|
+
* @throws "Module provided is already enabled"
|
|
496
|
+
*/
|
|
497
|
+
async createEnableModuleTx(moduleAddress, options) {
|
|
498
|
+
const safeTransactionData = {
|
|
499
|
+
to: this.getAddress(),
|
|
500
|
+
value: '0',
|
|
501
|
+
data: await __classPrivateFieldGet(this, _Safe_moduleManager, "f").encodeEnableModuleData(moduleAddress),
|
|
502
|
+
...options
|
|
503
|
+
};
|
|
504
|
+
const safeTransaction = await this.createTransaction({ safeTransactionData });
|
|
505
|
+
return safeTransaction;
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* Returns the Safe transaction to disable a Safe module.
|
|
509
|
+
*
|
|
510
|
+
* @param moduleAddress - The desired module address
|
|
511
|
+
* @param options - The transaction optional properties
|
|
512
|
+
* @returns The Safe transaction ready to be signed
|
|
513
|
+
* @throws "Invalid module address provided"
|
|
514
|
+
* @throws "Module provided is not enabled already"
|
|
515
|
+
*/
|
|
516
|
+
async createDisableModuleTx(moduleAddress, options) {
|
|
517
|
+
const safeTransactionData = {
|
|
518
|
+
to: this.getAddress(),
|
|
519
|
+
value: '0',
|
|
520
|
+
data: await __classPrivateFieldGet(this, _Safe_moduleManager, "f").encodeDisableModuleData(moduleAddress),
|
|
521
|
+
...options
|
|
522
|
+
};
|
|
523
|
+
const safeTransaction = await this.createTransaction({ safeTransactionData });
|
|
524
|
+
return safeTransaction;
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* Returns the Safe transaction to add an owner and optionally change the threshold.
|
|
528
|
+
*
|
|
529
|
+
* @param params - The transaction params
|
|
530
|
+
* @param options - The transaction optional properties
|
|
531
|
+
* @returns The Safe transaction ready to be signed
|
|
532
|
+
* @throws "Invalid owner address provided"
|
|
533
|
+
* @throws "Address provided is already an owner"
|
|
534
|
+
* @throws "Threshold needs to be greater than 0"
|
|
535
|
+
* @throws "Threshold cannot exceed owner count"
|
|
536
|
+
*/
|
|
537
|
+
async createAddOwnerTx({ ownerAddress, threshold }, options) {
|
|
538
|
+
const safeTransactionData = {
|
|
539
|
+
to: this.getAddress(),
|
|
540
|
+
value: '0',
|
|
541
|
+
data: await __classPrivateFieldGet(this, _Safe_ownerManager, "f").encodeAddOwnerWithThresholdData(ownerAddress, threshold),
|
|
542
|
+
...options
|
|
543
|
+
};
|
|
544
|
+
const safeTransaction = await this.createTransaction({ safeTransactionData });
|
|
545
|
+
return safeTransaction;
|
|
546
|
+
}
|
|
547
|
+
/**
|
|
548
|
+
* Returns the Safe transaction to remove an owner and optionally change the threshold.
|
|
549
|
+
*
|
|
550
|
+
* @param params - The transaction params
|
|
551
|
+
* @param options - The transaction optional properties
|
|
552
|
+
* @returns The Safe transaction ready to be signed
|
|
553
|
+
* @throws "Invalid owner address provided"
|
|
554
|
+
* @throws "Address provided is not an owner"
|
|
555
|
+
* @throws "Threshold needs to be greater than 0"
|
|
556
|
+
* @throws "Threshold cannot exceed owner count"
|
|
557
|
+
*/
|
|
558
|
+
async createRemoveOwnerTx({ ownerAddress, threshold }, options) {
|
|
559
|
+
const safeTransactionData = {
|
|
560
|
+
to: this.getAddress(),
|
|
561
|
+
value: '0',
|
|
562
|
+
data: await __classPrivateFieldGet(this, _Safe_ownerManager, "f").encodeRemoveOwnerData(ownerAddress, threshold),
|
|
563
|
+
...options
|
|
564
|
+
};
|
|
565
|
+
const safeTransaction = await this.createTransaction({ safeTransactionData });
|
|
566
|
+
return safeTransaction;
|
|
567
|
+
}
|
|
568
|
+
/**
|
|
569
|
+
* Returns the Safe transaction to replace an owner of the Safe with a new one.
|
|
570
|
+
*
|
|
571
|
+
* @param params - The transaction params
|
|
572
|
+
* @param options - The transaction optional properties
|
|
573
|
+
* @returns The Safe transaction ready to be signed
|
|
574
|
+
* @throws "Invalid new owner address provided"
|
|
575
|
+
* @throws "Invalid old owner address provided"
|
|
576
|
+
* @throws "New address provided is already an owner"
|
|
577
|
+
* @throws "Old address provided is not an owner"
|
|
578
|
+
*/
|
|
579
|
+
async createSwapOwnerTx({ oldOwnerAddress, newOwnerAddress }, options) {
|
|
580
|
+
const safeTransactionData = {
|
|
581
|
+
to: this.getAddress(),
|
|
582
|
+
value: '0',
|
|
583
|
+
data: await __classPrivateFieldGet(this, _Safe_ownerManager, "f").encodeSwapOwnerData(oldOwnerAddress, newOwnerAddress),
|
|
584
|
+
...options
|
|
585
|
+
};
|
|
586
|
+
const safeTransaction = await this.createTransaction({ safeTransactionData });
|
|
587
|
+
return safeTransaction;
|
|
588
|
+
}
|
|
589
|
+
/**
|
|
590
|
+
* Returns the Safe transaction to change the threshold.
|
|
591
|
+
*
|
|
592
|
+
* @param threshold - The new threshold
|
|
593
|
+
* @param options - The transaction optional properties
|
|
594
|
+
* @returns The Safe transaction ready to be signed
|
|
595
|
+
* @throws "Threshold needs to be greater than 0"
|
|
596
|
+
* @throws "Threshold cannot exceed owner count"
|
|
597
|
+
*/
|
|
598
|
+
async createChangeThresholdTx(threshold, options) {
|
|
599
|
+
const safeTransactionData = {
|
|
600
|
+
to: this.getAddress(),
|
|
601
|
+
value: '0',
|
|
602
|
+
data: await __classPrivateFieldGet(this, _Safe_ownerManager, "f").encodeChangeThresholdData(threshold),
|
|
603
|
+
...options
|
|
604
|
+
};
|
|
605
|
+
const safeTransaction = await this.createTransaction({ safeTransactionData });
|
|
606
|
+
return safeTransaction;
|
|
607
|
+
}
|
|
608
|
+
/**
|
|
609
|
+
* Converts a transaction from type SafeMultisigTransactionResponse to type SafeTransaction
|
|
610
|
+
*
|
|
611
|
+
* @param serviceTransactionResponse - The transaction to convert
|
|
612
|
+
* @returns The converted transaction with type SafeTransaction
|
|
613
|
+
*/
|
|
614
|
+
async toSafeTransactionType(serviceTransactionResponse) {
|
|
615
|
+
var _a;
|
|
616
|
+
const safeTransactionData = {
|
|
617
|
+
to: serviceTransactionResponse.to,
|
|
618
|
+
value: serviceTransactionResponse.value,
|
|
619
|
+
data: serviceTransactionResponse.data || '0x',
|
|
620
|
+
operation: serviceTransactionResponse.operation,
|
|
621
|
+
safeTxGas: serviceTransactionResponse.safeTxGas,
|
|
622
|
+
baseGas: serviceTransactionResponse.baseGas,
|
|
623
|
+
gasPrice: Number(serviceTransactionResponse.gasPrice),
|
|
624
|
+
gasToken: serviceTransactionResponse.gasToken,
|
|
625
|
+
refundReceiver: serviceTransactionResponse.refundReceiver,
|
|
626
|
+
nonce: serviceTransactionResponse.nonce
|
|
627
|
+
};
|
|
628
|
+
const safeTransaction = await this.createTransaction({ safeTransactionData });
|
|
629
|
+
(_a = serviceTransactionResponse.confirmations) === null || _a === void 0 ? void 0 : _a.map((confirmation) => {
|
|
630
|
+
const signature = new SafeSignature_1.default(confirmation.owner, confirmation.signature);
|
|
631
|
+
safeTransaction.addSignature(signature);
|
|
632
|
+
});
|
|
633
|
+
return safeTransaction;
|
|
634
|
+
}
|
|
635
|
+
/**
|
|
636
|
+
* Checks if a Safe transaction can be executed successfully with no errors.
|
|
637
|
+
*
|
|
638
|
+
* @param safeTransaction - The Safe transaction to check
|
|
639
|
+
* @param options - The Safe transaction execution options. Optional
|
|
640
|
+
* @returns TRUE if the Safe transaction can be executed successfully with no errors
|
|
641
|
+
*/
|
|
642
|
+
async isValidTransaction(safeTransaction, options) {
|
|
643
|
+
const transaction = (0, utils_1.isSafeMultisigTransactionResponse)(safeTransaction)
|
|
644
|
+
? await this.toSafeTransactionType(safeTransaction)
|
|
645
|
+
: safeTransaction;
|
|
646
|
+
const signedSafeTransaction = await this.copyTransaction(transaction);
|
|
647
|
+
const txHash = await this.getTransactionHash(signedSafeTransaction);
|
|
648
|
+
const ownersWhoApprovedTx = await this.getOwnersWhoApprovedTx(txHash);
|
|
649
|
+
for (const owner of ownersWhoApprovedTx) {
|
|
650
|
+
signedSafeTransaction.addSignature((0, signatures_1.generatePreValidatedSignature)(owner));
|
|
651
|
+
}
|
|
652
|
+
const owners = await this.getOwners();
|
|
653
|
+
const signerAddress = await __classPrivateFieldGet(this, _Safe_ethAdapter, "f").getSignerAddress();
|
|
654
|
+
if (!signerAddress) {
|
|
655
|
+
throw new Error('EthAdapter must be initialized with a signer to use this method');
|
|
656
|
+
}
|
|
657
|
+
if (owners.includes(signerAddress)) {
|
|
658
|
+
signedSafeTransaction.addSignature((0, signatures_1.generatePreValidatedSignature)(signerAddress));
|
|
659
|
+
}
|
|
660
|
+
const isTxValid = await __classPrivateFieldGet(this, _Safe_contractManager, "f").safeContract.isValidTransaction(signedSafeTransaction, {
|
|
661
|
+
from: signerAddress,
|
|
662
|
+
...options
|
|
663
|
+
});
|
|
664
|
+
return isTxValid;
|
|
665
|
+
}
|
|
666
|
+
/**
|
|
667
|
+
* Executes a Safe transaction.
|
|
668
|
+
*
|
|
669
|
+
* @param safeTransaction - The Safe transaction to execute
|
|
670
|
+
* @param options - The Safe transaction execution options. Optional
|
|
671
|
+
* @returns The Safe transaction response
|
|
672
|
+
* @throws "No signer provided"
|
|
673
|
+
* @throws "There are X signatures missing"
|
|
674
|
+
* @throws "Cannot specify gas and gasLimit together in transaction options"
|
|
675
|
+
*/
|
|
676
|
+
async executeTransaction(safeTransaction, options) {
|
|
677
|
+
const transaction = (0, utils_1.isSafeMultisigTransactionResponse)(safeTransaction)
|
|
678
|
+
? await this.toSafeTransactionType(safeTransaction)
|
|
679
|
+
: safeTransaction;
|
|
680
|
+
const signedSafeTransaction = await this.copyTransaction(transaction);
|
|
681
|
+
const txHash = await this.getTransactionHash(signedSafeTransaction);
|
|
682
|
+
const ownersWhoApprovedTx = await this.getOwnersWhoApprovedTx(txHash);
|
|
683
|
+
for (const owner of ownersWhoApprovedTx) {
|
|
684
|
+
signedSafeTransaction.addSignature((0, signatures_1.generatePreValidatedSignature)(owner));
|
|
685
|
+
}
|
|
686
|
+
const owners = await this.getOwners();
|
|
687
|
+
const signerAddress = await __classPrivateFieldGet(this, _Safe_ethAdapter, "f").getSignerAddress();
|
|
688
|
+
if (signerAddress && owners.includes(signerAddress)) {
|
|
689
|
+
signedSafeTransaction.addSignature((0, signatures_1.generatePreValidatedSignature)(signerAddress));
|
|
690
|
+
}
|
|
691
|
+
const threshold = await this.getThreshold();
|
|
692
|
+
if (threshold > signedSafeTransaction.signatures.size) {
|
|
693
|
+
const signaturesMissing = threshold - signedSafeTransaction.signatures.size;
|
|
694
|
+
throw new Error(`There ${signaturesMissing > 1 ? 'are' : 'is'} ${signaturesMissing} signature${signaturesMissing > 1 ? 's' : ''} missing`);
|
|
695
|
+
}
|
|
696
|
+
const value = bignumber_1.BigNumber.from(signedSafeTransaction.data.value);
|
|
697
|
+
if (!value.isZero()) {
|
|
698
|
+
const balance = await this.getBalance();
|
|
699
|
+
if (value.gt(bignumber_1.BigNumber.from(balance))) {
|
|
700
|
+
throw new Error('Not enough Ether funds');
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
if ((options === null || options === void 0 ? void 0 : options.gas) && (options === null || options === void 0 ? void 0 : options.gasLimit)) {
|
|
704
|
+
throw new Error('Cannot specify gas and gasLimit together in transaction options');
|
|
705
|
+
}
|
|
706
|
+
const txResponse = await __classPrivateFieldGet(this, _Safe_contractManager, "f").safeContract.execTransaction(signedSafeTransaction, {
|
|
707
|
+
from: signerAddress,
|
|
708
|
+
...options
|
|
709
|
+
});
|
|
710
|
+
return txResponse;
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
_Safe_ethAdapter = new WeakMap(), _Safe_contractManager = new WeakMap(), _Safe_ownerManager = new WeakMap(), _Safe_moduleManager = new WeakMap(), _Safe_guardManager = new WeakMap(), _Safe_fallbackHandlerManager = new WeakMap();
|
|
714
|
+
exports.default = Safe;
|
|
715
|
+
//# sourceMappingURL=Safe.js.map
|