Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(protocol-kit): Add EIP-1193 provider support #770

Merged
merged 117 commits into from
May 8, 2024

Conversation

yagopv
Copy link
Member

@yagopv yagopv commented Apr 10, 2024

What it solves

Resolves #651

How this PR fixes it

  • Remove the EthersAdapter and Web3Adapter, and add the SafeProvider with standard EIP-1193 support and additional Safe-specific functionality. The SafeProvider is instantiated internally, so there is no need to add it as an input parameter as with the adapters.

signer is optional so if not specified will try to get the first connected one in the provider (eth_accounts, eth_requestAccounts)

// before
await Safe.create({
   ethAdapter: new EthersAdapter({ ethers, signerOrProvider })
   safeAddress: '0xSafeAddress'
   ...
})

// now
await Safe.init({
   provider: window.ethereum, // Or any compatible EIP-1193 provider
   signer: 'signerAddressOrPrivateKey'
   safeAddress: '0xSafeAddress'
   ...
})

// ...or...
await Safe.init({
   provider: 'http://rpc.url', //Or websocket
   signer: 'signerAddressOrPrivateKey'
   safeAddress: '0xSafeAddress'
   ...
})

This change make the AccountAbstraction and Safe4337Pack instantiation different as well as the dependency with the EthAdapter is changed to provider + signer (Same as Safe.create)

  • e2e tests
    • Remove ganache tests
    • Add viem support tests in e2e action and scripts (same as ethers and web3)
    • Refactor api-kit tests
    • Refactor protocol-kit tests
  • Remove all Web3 specific dependencies (web3-utils, web3-core) and contracts
    • Remove gas from TransactionOptions and specific return types from web3
    • Simplify types as the Safe*ImplementationType's and DeepWriteable's
  • Remove all Ethers suffixes as now are the unique contract types and files

@yagopv yagopv changed the base branch from development to Abitype-1_3_0-safe-contract April 10, 2024 11:20
…-global/safe-core-sdk into feat/add-eip1193-provider

# Conflicts:
#	.github/workflows/test_contracts.yml
#	packages/api-kit/tests/e2e/addMessage.test.ts
#	packages/api-kit/tests/e2e/addMessageSignature.test.ts
#	packages/api-kit/tests/e2e/confirmTransaction.test.ts
#	packages/api-kit/tests/endpoint/index.test.ts
#	packages/protocol-kit/package.json
#	packages/protocol-kit/scripts/generateTypechainFiles.ts
#	packages/protocol-kit/src/Safe.ts
#	packages/protocol-kit/src/adapters/CreateCallBaseContract.ts
#	packages/protocol-kit/src/adapters/MultiSendBaseContract.ts
#	packages/protocol-kit/src/adapters/MultiSendCallOnlyBaseContract.ts
#	packages/protocol-kit/src/adapters/SafeBaseContract.ts
#	packages/protocol-kit/src/adapters/SafeProxyFactoryBaseContract.ts
#	packages/protocol-kit/src/adapters/SignMessageLibBaseContract.ts
#	packages/protocol-kit/src/adapters/SimulateTxAccessorBaseContract.ts
#	packages/protocol-kit/src/adapters/ethAdapter.ts
#	packages/protocol-kit/src/adapters/ethers/SafeProvider.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/CreateCall/CreateCallBaseContractEthers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/MultiSend/MultiSendBaseContractEthers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/MultiSend/MultiSendCallOnlyBaseContractEthers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/MultiSend/v1.1.1/MultiSendContract_v1_1_1_Ethers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/MultiSend/v1.3.0/MultiSendCallOnlyContract_v1_3_0_Ethers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/MultiSend/v1.3.0/MultiSendContract_v1_3_0_Ethers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/MultiSend/v1.4.1/MultiSendCallOnlyContract_v1_4_1_Ethers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/MultiSend/v1.4.1/MultiSendContract_v1_4_1_Ethers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/Safe/SafeBaseContractEthers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/Safe/v1.0.0/SafeContract_v1_0_0_Ethers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/Safe/v1.1.1/SafeContract_v1_1_1_Ethers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/Safe/v1.2.0/SafeContract_v1_2_0_Ethers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/Safe/v1.3.0/SafeContract_v1_3_0_Ethers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/Safe/v1.4.1/SafeContract_v1_4_1_Ethers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/SafeProxyFactory/SafeProxyFactoryBaseContractEthers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/SafeProxyFactory/v1.0.0/SafeProxyFactoryContract_v1_0_0_Ethers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/SafeProxyFactory/v1.1.1/SafeProxyFactoryContract_v1_1_1_Ethers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/SafeProxyFactory/v1.3.0/SafeProxyFactoryContract_v1_3_0_Ethers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/SafeProxyFactory/v1.4.1/SafeProxyFactoryContract_v1_4_1_Ethers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/SignMessageLib/SignMessageLibBaseContractEthers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/SignMessageLib/v1.3.0/SignMessageLibContract_V1_3_0_Ethers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/SignMessageLib/v1.4.1/SignMessageLibContract_V1_4_1_Ethers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/SimulateTxAccessor/SimulateTxAccessorBaseContractEthers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/SimulateTxAccessor/v1.3.0/SimulateTxAccessorContract_v1_3_0_Ethers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/SimulateTxAccessor/v1.4.1/SimulateTxAccessorContract_v1_4_1_Ethers.ts
#	packages/protocol-kit/src/adapters/ethers/contracts/contractInstancesEthers.ts
#	packages/protocol-kit/src/adapters/ethers/index.ts
#	packages/protocol-kit/src/adapters/web3/README.md
#	packages/protocol-kit/src/adapters/web3/Web3Adapter.ts
#	packages/protocol-kit/src/adapters/web3/contracts/CreateCall/CreateCallBaseContractWeb3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/CreateCall/v1.3.0/CreateCallContract_v1_3_0_Web3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/CreateCall/v1.4.1/CreateCallContract_v1_4_1_Web3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/MultiSend/MultiSendBaseContractWeb3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/MultiSend/MultiSendCallOnlyBaseContractWeb3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/MultiSend/v1.1.1/MultiSendContract_v1_1_1_Web3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/MultiSend/v1.3.0/MultiSendCallOnlyContract_v1_3_0_Web3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/MultiSend/v1.3.0/MultiSendContract_v1_3_0_Web3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/MultiSend/v1.4.1/MultiSendCallOnlyContract_v1_4_1_Web3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/MultiSend/v1.4.1/MultiSendContract_v1_4_1_Web3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/Safe/SafeBaseContractWeb3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/Safe/v1.0.0/SafeContract_v1_0_0_Web3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/Safe/v1.1.1/SafeContract_v1_1_1_Web3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/Safe/v1.2.0/SafeContract_v1_2_0_Web3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/Safe/v1.3.0/SafeContract_v1_3_0_Web3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/Safe/v1.4.1/SafeContract_v1_4_1_Web3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/SafeProxyFactory/SafeProxyFactoryBaseContractWeb3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/SafeProxyFactory/v1.0.0/SafeProxyFactoryContract_v1_0_0_Web3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/SafeProxyFactory/v1.1.1/SafeProxyFactoryContract_v1_1_1_Web3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/SafeProxyFactory/v1.3.0/SafeProxyFactoryContract_v1_3_0_Web3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/SafeProxyFactory/v1.4.1/SafeProxyFactoryContract_v1_4_1_Web3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/SignMessageLib/SignMessageLibBaseContractWeb3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/SimulateTxAccessor/SimulateTxAccessorBaseContractWeb3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/SimulateTxAccessor/v1.3.0/SimulateTxAccessorContract_v1_3_0_Web3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/SimulateTxAccessor/v1.4.1/SimulateTxAccessorContract_v1_4_1_Web3.ts
#	packages/protocol-kit/src/adapters/web3/contracts/contractInstancesWeb3.ts
#	packages/protocol-kit/src/adapters/web3/index.ts
#	packages/protocol-kit/src/adapters/web3/utils/index.ts
#	packages/protocol-kit/src/contracts/AbiType/CreateCall/CreateCallBaseContract.ts
#	packages/protocol-kit/src/contracts/AbiType/Safe/SafeBaseContract.ts
#	packages/protocol-kit/src/contracts/AbiType/SafeProxyFactory/SafeProxyFactoryBaseContract.ts
#	packages/protocol-kit/src/contracts/AbiType/SignMessageLib/SignMessageLibBaseContract.ts
#	packages/protocol-kit/src/contracts/safeDeploymentContracts.ts
#	packages/protocol-kit/src/contracts/utils.ts
#	packages/protocol-kit/src/index.ts
#	packages/protocol-kit/src/managers/contractManager.ts
#	packages/protocol-kit/src/managers/fallbackHandlerManager.ts
#	packages/protocol-kit/src/managers/guardManager.ts
#	packages/protocol-kit/src/managers/moduleManager.ts
#	packages/protocol-kit/src/managers/ownerManager.ts
#	packages/protocol-kit/src/safeFactory/index.ts
#	packages/protocol-kit/src/types/index.ts
#	packages/protocol-kit/src/utils/signatures/utils.ts
#	packages/protocol-kit/src/utils/transactions/gas.ts
#	packages/protocol-kit/tests/e2e/ethAdapters.test.ts
#	packages/protocol-kit/tests/e2e/utils/setupContracts.ts
#	packages/protocol-kit/tests/e2e/utils/setupEthAdapter.ts
#	packages/protocol-kit/tests/e2e/utils/transactions.ts
#	packages/protocol-kit/tests/e2e/utilsContracts.test.ts
#	packages/safe-core-sdk-types/package.json
#	packages/safe-core-sdk-types/src/ethereumLibs/EthAdapter.ts
#	packages/safe-core-sdk-types/src/ethereumLibs/web3/types.ts
#	packages/safe-core-sdk-types/src/index.ts
#	packages/safe-core-sdk-types/src/safe-provider/SafeProvider.ts
#	yarn.lock
@dasanra dasanra linked an issue May 7, 2024 that may be closed by this pull request
@yagopv yagopv merged commit b718932 into Abitype-1_3_0-safe-contract May 8, 2024
19 checks passed
@yagopv yagopv deleted the feat/add-eip1193-provider branch May 8, 2024 11:39
@github-actions github-actions bot locked and limited conversation to collaborators May 8, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
5 participants