牛谢德SDK
测试覆盖率
| 发言 | 分支 | 职能 | 行数 |
|---|---|---|---|
Cow Shed SDK 是一个 TypeScript 库,提供一组功能,用于与该软件交互 牛谢德合同。 。 。 .
实质上,COW Shed作为用户拥有的智能合约(1/1 multisig,如果您愿意的话),可以代表用户执行多通电话(一旦用户事先授权了电话).
使用量
import { ethers } from 'ethers'
import { CowShedSdk, ICoWShedCall, SupportedChainId } from '@cowprotocol/cow-shed'
import { EthersV6Adapter } from '@cowprotocol/sdk-ethers-v6-adapter'
import { JsonRpcProvider, Wallet } from 'ethers'
// Proper adapter initialization
const provider = new JsonRpcProvider('YOUR_RPC_URL')
const wallet = new Wallet('YOUR_PRIVATE_KEY', provider)
const adapter = new EthersV6Adapter({ provider, signer: wallet })
const cowShedSdk = new CowShedSdk(adapter) // adapter is optional - will use global adapter if not provided
// 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>', // signer is optional - will use global adapter's signer if not provided
})
// Get the details of the pre-authorized call you need to send
const { signedMulticall, gasLimit } = 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,
})
使用 encodeExecuteOwnHooks 以编码工厂 executeOwnHooks 电话.
通过牛 SDK 使用
您也可以导入 CowShedSdk 直接从主 SDK :
import { ethers } from 'ethers'
import { CowShedSdk, ICoWShedCall, SupportedChainId } from '@cowprotocol/cow-sdk'
import { EthersV6Adapter } from '@cowprotocol/sdk-ethers-v6-adapter'
import { JsonRpcProvider, Wallet } from 'ethers'
// Proper adapter initialization
const provider = new JsonRpcProvider('YOUR_RPC_URL')
const wallet = new Wallet('YOUR_PRIVATE_KEY', provider)
const adapter = new EthersV6Adapter({ provider, signer: wallet })
const cowShedSdk = new CowShedSdk(adapter) // adapter is optional - will use global adapter if not provided
// ... rest of the usage remains the same