Abstractionkit v0.3.7
Fixes
- Safe multi-chain single-operation signing now hashes the correct payload. Single-op
SafeMultiChainSigAccountV1flows previously hashed through the Merkle wrapper and were rejected on-chain withAA24, sinceSafe4337MultiChainSignatureModuleverifies againstkeccak256(SafeOp)directly whenmerkleTreeDepth == 0. The per-op SafeOp digest is now reachable viaSafeMultiChainSigAccountV1.getUserOperationEip712Hash/getUserOperationEip712Data, which defaultsafe4337ModuleAddressto the multi-chain module so the digest matches the on-chain verifier without manual override. - Safe multi-chain WebAuthn / EIP-1271 signatures keep contract-signer formatting.
signUserOperationsWithSignersnow preserves the"contract"signer type when formatting multi-operation signatures, so dynamic Safe contract-signature segments are emitted correctly.
API changes
getMultiChainSingleSignatureUserOperationsEip712Hash/...Eip712Dataare wrapper-only and throw forlength < 2. They now do one thing: hash the Merkle-wrapped multi-op payload. Single-op callers must useSafeMultiChainSigAccountV1.getUserOperationEip712Hash/getUserOperationEip712Data(which defaultsafe4337ModuleAddressto the multi-chain module). If you call the parentSafeAccounthelpers directly, passsafe4337ModuleAddressexplicitly. Their default points at the standard 4337 module, not the multi-chain one.
Maintenance
- Added signer API documentation, type-level signer tests, signer unit-test coverage, and CI checks for linting, type tests, build, and signer tests.
Full Changelog: v0.3.5...v0.3.7