@cowprotocol/cow-sdk
Version:
## 📚 [Docs website](https://docs.cow.fi/)
61 lines (47 loc) • 1.85 kB
Markdown
The Cow Shed SDK is a TypeScript library that provides a set of functions to interact with the [Cow Shed contract](https://github.com/cowdao-grants/cow-shed).
In essence, CoW Shed acts as a user owned smart contract (1/1 multisig if you will) that can execute multiple calls on behalf of the user (once the user has pre-authorized the calls).
## Usage
```ts
import { ethers } from 'ethers'
import { CowShedSdk, ICoWShedCall, SupportedChainId } from '@cowprotocol/cow-sdk'
const cowShedSdk = new CowShedSdk({
signer: '<privateKeyOrEthersSigner>', // You can provide the signer in the constructor, or the `signCalls` method
})
// Get the cow-shed account for any given chainId and owner's address
const cowShedAccount = cowShedSdk.getCowShedAccount(1, '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045')
// Prepare the calls you want to execute using the cow-shed account
const calls: ICoWShedCall[] = [
{
target: '<contract-address-1>',
callData: 'call-data-1',
value: 0n,
isDelegateCall: true,
allowFailure: false,
},
{
target: '<contract-address-2>',
callData: '<call-data-2>',
value: 0n,
isDelegateCall: true,
allowFailure: false,
}
]
// Sign the calls
const preAuthorizedCall = await cowShedSdk.signCalls({
chainId: SupportedChainId.MAINNET,
calls,
signer: '<privateKeyOrEthersSigner>',
})
// Get the details of the pre-authorized call you need to send
const { signedMulticall, gasLimit, cowShedAccount } = preAuthorizedCall
const { to, data, value } = signedMulticall
// Execute the transaction using any wallet. The calldata has been pre-authed, so you don't need any special permissions to send this transaction
let anotherWallet = new ethers.Wallet('<another-private-key>');
const tx = await anotherWallet.sendTransaction({
to,
data,
value,
gasLimit,
})
```