// Example: Delegate EOA to execute multicall contract
// Source: Based on EIP-7702 specification examples
import { ethers } from "ethers";
async function createDelegatedMulticall() {
    const wallet = new ethers.Wallet(privateKey, provider);
    const multicallAddress = "0x..."; // Deployed multicall contract
    // Step 1: Create authorization for code delegation
    const authorization = {
        chainId: 9000,                    // Your Cosmos EVM chain ID
        address: multicallAddress,        // Contract to delegate code from
        nonce: await wallet.getNonce(),   // Current account nonce
    };
    // Step 2: Sign authorization (EIP-712 format)
    const authSignature = await signAuthorization(authorization, wallet);
    // Step 3: Create SetCode transaction (Type 4)
    const tx = {
        type: 4,                         // SetCodeTxType
        chainId: 9000,
        nonce: authorization.nonce + 1,   // Must increment after authorization
        gasLimit: 500000,
        gasFeeCap: ethers.parseUnits("20", "gwei"),
        gasTipCap: ethers.parseUnits("1", "gwei"),
        to: wallet.address,              // Self-delegation
        value: 0,
        data: "0x",                      // No direct call data
        accessList: [],
        authorizationList: [{
            chainId: authorization.chainId,
            address: authorization.address,
            nonce: authorization.nonce,
            v: authSignature.v,
            r: authSignature.r,
            s: authSignature.s,
        }]
    };
    // Step 4: Send transaction - EOA executes as multicall contract
    return await wallet.sendTransaction(tx);
}