.claude/skills/permit2-signature-transfer-contract/SKILL.md
Solidity contract implementation for permitWitnessTransferFrom. Use when writing Solidity contracts that receive Permit2 signatures.
npx skillsauth add cyotee/crane permit2-signature-transfer-contractInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Solidity implementation for permitWitnessTransferFrom pattern.
import {ISignatureTransfer} from "@uniswap/permit2/src/interfaces/ISignatureTransfer.sol";
contract IndexedexRouter {
address public constant PERMIT2 = 0x000000000022D473030F116dDEE9F6B43aC78BA3;
// Must match frontend exactly
string public constant WITNESS_TYPE_STRING =
"PermitWitnessTransferFrom(TokenPermissions permitted,address spender,uint256 nonce,uint256 deadline,Witness witness)"
"TokenPermissions(address token,uint256 amount)"
"Witness(bytes32 actionId)";
bytes32 public constant WITNESS_TYPEHASH = keccak256("Witness(bytes32 actionId)");
}
function handlePermitSignatureIn(
ISignatureTransfer.PermitTransferFrom calldata permit,
ISignatureTransfer.SignatureTransferDetails calldata transferDetails,
address owner,
bytes32 actionId,
bytes calldata signature
) external {
bytes32 witness = keccak256(abi.encode(WITNESS_TYPEHASH, actionId));
ISignatureTransfer(PERMIT2).permitWitnessTransferFrom(
permit,
transferDetails,
owner,
witness,
WITNESS_TYPE_STRING,
signature
);
// tokens now in this contract - execute the swap
}
For exact-out swaps, include maxAmountIn in the actionId:
bytes32 actionId = keccak256(abi.encodePacked(
tokenIn,
tokenOut,
vaultAddress,
amountOut,
maxAmountIn
));
development
Review UI code for Web Interface Guidelines compliance. Use when asked to "review my UI", "check accessibility", "audit design", "review UX", or "check my site against best practices".
documentation
Write to contracts and send transactions. Use when executing state-changing contract functions.
development
HTTP and WebSocket transports for blockchain connectivity. Use when configuring network connections.
data-ai
Read contract data with type-safe ABI. Use when querying smart contract view/pure functions.