diff --git a/contracts/foundry.toml b/contracts/foundry.toml
index c90bf23..d08b6d4 100644
--- a/contracts/foundry.toml
+++ b/contracts/foundry.toml
@@ -3,8 +3,8 @@ src = "src"
out = "out"
libs = ["lib"]
-bytecode_hash="none"
-solc_version="0.8.21"
+bytecode_hash = "none"
+solc_version = "0.8.21"
[rpc_endpoints]
base_goerli = "https://goerli.base.org"
diff --git a/contracts/src/SimpleAccount.sol b/contracts/src/SimpleAccount.sol
index 12c0753..6319442 100644
--- a/contracts/src/SimpleAccount.sol
+++ b/contracts/src/SimpleAccount.sol
@@ -19,13 +19,13 @@ struct Signature {
uint256 s;
}
-contract SimpleAccount is IAccount, UUPSUpgradeable, Initializable, IERC1271 {
- struct Call {
- address dest;
- uint256 value;
- bytes data;
- }
+struct Call {
+ address dest;
+ uint256 value;
+ bytes data;
+}
+contract SimpleAccount is IAccount, UUPSUpgradeable, Initializable, IERC1271 {
struct PublicKey {
bytes32 X;
bytes32 Y;
diff --git a/contracts/test/SendUserOp.t.sol b/contracts/test/SendUserOp.t.sol
index 539529c..d84ac9a 100644
--- a/contracts/test/SendUserOp.t.sol
+++ b/contracts/test/SendUserOp.t.sol
@@ -7,20 +7,25 @@ import {Utils} from "test/Utils.sol";
// use Openzeppelin v4.8.1 to avoid `Failed to resolve file` error
import "account-abstraction/core/EntryPoint.sol";
import {SimpleAccountFactory} from "src/SimpleAccountFactory.sol";
-import {SimpleAccount} from "src/SimpleAccount.sol";
+import {SimpleAccount, Call} from "src/SimpleAccount.sol";
contract SendUserOpTest is Test {
using UserOperationLib for UserOperation;
EntryPoint public entryPoint;
SimpleAccountFactory public factory;
+ address bigqDevAddress = 0x061060a65146b3265C62fC8f3AE977c9B27260fF;
function setUp() public {
// setup fork
vm.createSelectFork("base_goerli");
- entryPoint = new EntryPoint();
- factory = new SimpleAccountFactory(entryPoint);
+ entryPoint = EntryPoint(
+ payable(0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789)
+ );
+ factory = SimpleAccountFactory(
+ 0xCD7DA03e26Fa4b7BcB43B4e5Ed65bE5cC9d844B0
+ );
}
/***
@@ -44,18 +49,19 @@ contract SendUserOpTest is Test {
);
function testSimpleUserOp() public {
+ // vm.etch(address(0x1234), type(P256Verifier).runtimeCode);
bytes32[2] memory publicKey = [
bytes32(
- 0x2a14910d2f67abb47fbaaaabbb73585e9cd25a0cfab7cb77901a5f189070c797
+ 0xe7f630b0eb3594e991cfadbd4047cd5fecddf379b4a4458e3ea2b9566e09882a
),
bytes32(
- 0xad7ae3e847f90cb64392f3945f067ab3e0171831b07be8147c1e098621feff9c
+ 0x3e9775709101f2b294ddec0536f0f260570b6f009bff2096995d3e1d986239dd
)
];
uint8 version = 1;
uint48 validUntil = 0;
- bytes32 expectedUserOpHash = hex"7b3ae99bbc71fbac65fa6e95aeb48fc586d2a46d0381ff9b1110b2a0fa1ca0a4";
+ bytes32 expectedUserOpHash = hex"5c4665f4794a8f0edf8dd366539911aca9defe9aa54d06303cfe47cca393bd7b";
bytes memory challengeToSign = abi.encodePacked(
version,
validUntil,
@@ -68,8 +74,8 @@ contract SendUserOpTest is Test {
abi.encode( // signature
Utils.rawSignatureToSignature({
challenge: challengeToSign,
- r: 0xb1c9a080371f3824da69b249fc27cbc6c152e05f0c7ba699879dc58e9808662b,
- s: 0x63e3d5ad24f282481769f6537eb376a57b2e59da2f068751ba3c54bab23dd547
+ r: 0xf91f09739d7fe162dc7ad35f3117b6ed18181fa9ea817bf8ffdc8c03e004527e,
+ s: 0xd3b053205ced70fc403953092db25b64ac43d48ee2f30147a2134de7ead0c446
})
)
);
@@ -131,4 +137,121 @@ contract SendUserOpTest is Test {
uint256 validationData = account2.validateUserOp(op, hash, 0);
assertEq(validationData, 0);
}
+
+ function testUserOpWithInitCode() public {
+ // fake verifier
+ // P256Verifier verifier = new P256Verifier();
+ // vm.etch(address(0x1234), type(P256Verifier).runtimeCode);
+
+ bytes32[2] memory publicKey = [
+ bytes32(
+ 0xe7f630b0eb3594e991cfadbd4047cd5fecddf379b4a4458e3ea2b9566e09882a
+ ),
+ bytes32(
+ 0x3e9775709101f2b294ddec0536f0f260570b6f009bff2096995d3e1d986239dd
+ )
+ ];
+
+ uint8 version = 1;
+ uint48 validUntil = 0;
+ bytes32 expectedUserOpHash = hex"ed8154bc00355192a1f1f3a21ec5442bd05e3bb1c0c6ab089d6e138f88125d6a";
+ bytes memory challengeToSign = abi.encodePacked(
+ version,
+ validUntil,
+ expectedUserOpHash
+ );
+
+ bytes memory ownerSig = abi.encodePacked(
+ version,
+ validUntil,
+ abi.encode( // signature
+ Utils.rawSignatureToSignature({
+ challenge: challengeToSign,
+ r: 0xa82d88cd9b64be0e6014041c263e7c3dfe879432cf50366fd027018bf9a6f2e6,
+ s: 0x3457a4b5cdd4b0806d0bb609b2274e268e30b43f772473363aa7b2799119b0d1
+ })
+ )
+ );
+
+ uint256 salt = 123;
+
+ // account not deployed yet
+ // we want to test the initCode feature of UserOperation
+ SimpleAccount account = SimpleAccount(
+ payable(0x60587a33099742fb5D3e97174804e7Ab11A30118)
+ );
+ vm.deal(address(account), 1 ether);
+
+ // get init code
+ bytes memory initCode = abi.encodePacked(
+ address(factory),
+ abi.encodeCall(factory.createAccount, (publicKey, salt))
+ );
+
+ // send 42 wei to bigq dev
+ Call[] memory calls = new Call[](1);
+ calls[0] = Call({dest: bigqDevAddress, value: 42, data: hex""});
+
+ bytes memory callData = abi.encodeCall(
+ SimpleAccount.executeBatch,
+ (calls)
+ );
+
+ // dummy op
+ UserOperation memory op = UserOperation({
+ sender: address(0),
+ nonce: 0,
+ initCode: hex"",
+ callData: callData,
+ callGasLimit: 200_000,
+ verificationGasLimit: 2_342_060, // 2_000_000 + 150_000 + initCode gas
+ preVerificationGas: 65_000,
+ maxFeePerGas: 3e9,
+ maxPriorityFeePerGas: 1e9,
+ paymasterAndData: hex"",
+ // signature must be empty when calculating hash
+ signature: hex""
+ });
+
+ // fill data
+ op.sender = address(account);
+ op.initCode = initCode;
+
+ bytes32 hash = entryPoint.getUserOpHash(op);
+ assertEq(expectedUserOpHash, hash);
+
+ // add signature to op after calculating hash
+ op.signature = ownerSig;
+
+ // compute balance before userOp validation and execution
+ uint256 balanceBefore = bigqDevAddress.balance;
+
+ UserOperation[] memory ops = new UserOperation[](1);
+ ops[0] = op;
+
+ vm.expectEmit(true, true, true, false);
+ emit UserOperationEvent(
+ hash,
+ address(account),
+ address(0),
+ 0, // These and following are not checked.
+ false,
+ 0 gwei,
+ 0
+ );
+ entryPoint.handleOps(ops, payable(address(account)));
+
+ // compute balance after userOp validation and execution
+ uint256 balanceAfter = bigqDevAddress.balance;
+ assertEq(balanceAfter - balanceBefore, 42);
+
+ // // code coverage can't handle indirect calls
+ // // call validateUserOp directly
+ // SimpleAccount account2 = new SimpleAccount(account.entryPoint());
+ // vm.store(address(account2), 0, 0); // set _initialized = 0
+ // account2.initialize(publicKey);
+ // vm.prank(address(entryPoint));
+ // uint256 validationData = account2.validateUserOp(op, hash, 0);
+ // assertEq(validationData, 0);
+ }
}
diff --git a/contracts/test/Utils.sol b/contracts/test/Utils.sol
index f33d6a7..1d77897 100644
--- a/contracts/test/Utils.sol
+++ b/contracts/test/Utils.sol
@@ -20,6 +20,7 @@ library Utils {
'","origin":"http://localhost:3000","crossOrigin":false}'
)
);
+
uint256 challengeLocation = 23;
uint256 responseTypeLocation = 1;
diff --git a/front/.env.example b/front/.env.example
index b4bbf9d..6027a93 100644
--- a/front/.env.example
+++ b/front/.env.example
@@ -1 +1 @@
-NEXT_PUBLIC_ALCHEMY_API_KEY=
+STACKUP_BUNDLER_API_KEY=""
diff --git a/front/next.config.js b/front/next.config.js
index 93dfcb2..086f928 100644
--- a/front/next.config.js
+++ b/front/next.config.js
@@ -1,6 +1,9 @@
/** @type {import('next').NextConfig} */
module.exports = {
reactStrictMode: false,
+ env: {
+ STACKUP_BUNDLER_API_KEY: process.env.STACKUP_BUNDLER_API_KEY,
+ },
webpack: (config) => {
config.resolve.fallback = { fs: false, net: false, tls: false };
return config;
diff --git a/front/src/abis/factory.json b/front/src/abis/factory.json
new file mode 100644
index 0000000..2cb0da5
--- /dev/null
+++ b/front/src/abis/factory.json
@@ -0,0 +1,2607 @@
+{
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "contract IEntryPoint",
+ "name": "_entryPoint",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "inputs": [],
+ "name": "accountImplem",
+ "outputs": [
+ {
+ "internalType": "contract SimpleAccount",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32[2]",
+ "name": "publicKey",
+ "type": "bytes32[2]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "salt",
+ "type": "uint256"
+ }
+ ],
+ "name": "createAccount",
+ "outputs": [
+ {
+ "internalType": "contract SimpleAccount",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "entryPoint",
+ "outputs": [
+ {
+ "internalType": "contract IEntryPoint",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32[2]",
+ "name": "publicKey",
+ "type": "bytes32[2]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "salt",
+ "type": "uint256"
+ }
+ ],
+ "name": "getAddress",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": {
+ "object": "0x60c060405234801561001057600080fd5b506040516129ed3803806129ed83398101604081905261002f91610096565b6001600160a01b03811660a052604051819061004a90610089565b6001600160a01b039091168152602001604051809103906000f080158015610076573d6000803e3d6000fd5b506001600160a01b0316608052506100c6565b611f6a80610a8383390190565b6000602082840312156100a857600080fd5b81516001600160a01b03811681146100bf57600080fd5b9392505050565b60805160a0516109856100fe6000396000818160a5015261020901526000818160d90152818161012a015261028701526109856000f3fe60806040526004361061003f5760003560e01c80630b824849146100445780638375702b14610080578063b0d691fe14610093578063c1e4ba2d146100c7575b600080fd5b34801561005057600080fd5b5061006461005f366004610375565b6100fb565b6040516001600160a01b03909116815260200160405180910390f35b61006461008e366004610375565b6101d5565b34801561009f57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100d357600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b60006101cc8260001b6040518060200161011490610352565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008660405160240161015a91906103fa565b60408051601f19818403018152918152602080830180516001600160e01b0316632d16032160e01b17905290516101939392910161044f565b60408051601f19818403018152908290526101b19291602001610491565b60405160208183030381529060405280519060200120610320565b90505b92915050565b6000806101e284846100fb565b905034156102685760405163b760faf960e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063b760faf99034906024016000604051808303818588803b15801561024e57600080fd5b505af1158015610262573d6000803e3d6000fd5b50505050505b6001600160a01b0381163b8015610281575090506101cf565b8360001b7f0000000000000000000000000000000000000000000000000000000000000000866040516024016102b791906103fa565b60408051601f198184030181529181526020820180516001600160e01b0316632d16032160e01b179052516102eb90610352565b6102f692919061044f565b8190604051809103906000f5905080158015610316573d6000803e3d6000fd5b5095945050505050565b60006101cc8383306000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6104b8806104c183390190565b634e487b7160e01b600052604160045260246000fd5b6000806060838503121561038857600080fd5b83601f84011261039757600080fd5b6040516040810181811067ffffffffffffffff821117156103ba576103ba61035f565b80604052508060408501868111156103d157600080fd5b855b818110156103eb5780358352602092830192016103d3565b50919691359550909350505050565b60408101818360005b6002811015610422578151835260209283019290910190600101610403565b50505092915050565b60005b8381101561044657818101518382015260200161042e565b50506000910152565b60018060a01b0383168152604060208201526000825180604084015261047c81606085016020870161042b565b601f01601f1916919091016060019392505050565b600083516104a381846020880161042b565b8351908301906104b781836020880161042b565b0194935050505056fe60806040526040516104b83803806104b8833981016040819052610022916102de565b61002e82826000610035565b50506103fb565b61003e83610061565b60008251118061004b5750805b1561005c5761005a83836100a1565b505b505050565b61006a816100cd565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100c6838360405180606001604052806027815260200161049160279139610180565b9392505050565b6001600160a01b0381163b61013f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080856001600160a01b03168560405161019d91906103ac565b600060405180830381855af49150503d80600081146101d8576040519150601f19603f3d011682016040523d82523d6000602084013e6101dd565b606091505b5090925090506101ef868383876101f9565b9695505050505050565b60608315610268578251600003610261576001600160a01b0385163b6102615760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610136565b5081610272565b610272838361027a565b949350505050565b81511561028a5781518083602001fd5b8060405162461bcd60e51b815260040161013691906103c8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102d55781810151838201526020016102bd565b50506000910152565b600080604083850312156102f157600080fd5b82516001600160a01b038116811461030857600080fd5b60208401519092506001600160401b038082111561032557600080fd5b818501915085601f83011261033957600080fd5b81518181111561034b5761034b6102a4565b604051601f8201601f19908116603f01168101908382118183101715610373576103736102a4565b8160405282815288602084870101111561038c57600080fd5b61039d8360208301602088016102ba565b80955050505050509250929050565b600082516103be8184602087016102ba565b9190910192915050565b60208152600082518060208401526103e78160408501602087016102ba565b601f01601f19169190910160400192915050565b6088806104096000396000f3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6058565b565b600060537f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156076573d6000f35b3d6000fdfea164736f6c6343000815000a416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000815000a60c0604052306080523480156200001557600080fd5b5060405162001f6a38038062001f6a833981016040819052620000389162000118565b6001600160a01b03811660a0526200004f62000056565b506200014a565b600054610100900460ff1615620000c35760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000116576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012b57600080fd5b81516001600160a01b03811681146200014357600080fd5b9392505050565b60805160a051611dc9620001a1600039600081816101ce0152818161037e015281816105b501526108350152600081816104d301528181610513015281816106340152818161067401526107030152611dc96000f3fe60806040526004361061008a5760003560e01c80633a871cdd116100595780633a871cdd146101365780634f1ef2861461016457806352d1902d1461017757806363ffab311461018c578063b0d691fe146101bc57600080fd5b80631626ba7e146100965780632d160321146100d457806334fcd5be146100f65780633659cfe61461011657600080fd5b3661009157005b600080fd5b3480156100a257600080fd5b506100b66100b136600461163e565b610208565b6040516001600160e01b031990911681526020015b60405180910390f35b3480156100e057600080fd5b506100f46100ef3660046116f9565b61025b565b005b34801561010257600080fd5b506100f461011136600461176e565b610373565b34801561012257600080fd5b506100f46101313660046117ff565b6104c9565b34801561014257600080fd5b5061015661015136600461181a565b6105a8565b6040519081526020016100cb565b6100f46101723660046118fb565b61062a565b34801561018357600080fd5b506101566106f6565b34801561019857600080fd5b506001546002546101a7919082565b604080519283526020830191909152016100cb565b3480156101c857600080fd5b506101f07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100cb565b60006102368460405160200161022091815260200190565b60405160208183030381529060405284846107a9565b156102495750630b135d3f60e11b610254565b506001600160e01b03195b9392505050565b600054610100900460ff161580801561027b5750600054600160ff909116105b806102955750303b158015610295575060005460ff166001145b6102fd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610320576000805461ff0019166101001790555b610329826107fd565b801561036f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103de5760405162461bcd60e51b815260206004820152601060248201526f1bdb9b1e48195b9d1c9e481c1bda5b9d60821b60448201526064016102f4565b60005b818110156104c4576104b28383838181106103fe576103fe611949565b9050602002810190610410919061195f565b61041e9060208101906117ff565b84848481811061043057610430611949565b9050602002810190610442919061195f565b6020013585858581811061045857610458611949565b905060200281019061046a919061195f565b61047890604081019061197f565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061089592505050565b806104bc816119e3565b9150506103e1565b505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036105115760405162461bcd60e51b81526004016102f4906119fc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661055a600080516020611d36833981519152546001600160a01b031690565b6001600160a01b0316146105805760405162461bcd60e51b81526004016102f490611a48565b6105898161090c565b604080516000808252602082019092526105a591839190610947565b50565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106155760405162461bcd60e51b815260206004820152601060248201526f1bdb9b1e48195b9d1c9e481c1bda5b9d60821b60448201526064016102f4565b61061f8484610ab2565b905061025482610c72565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036106725760405162461bcd60e51b81526004016102f4906119fc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106bb600080516020611d36833981519152546001600160a01b031690565b6001600160a01b0316146106e15760405162461bcd60e51b81526004016102f490611a48565b6106ea8261090c565b61036f82826001610947565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107965760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016102f4565b50600080516020611d3683398151915290565b6000806107b883850185611a94565b90506107f4858260000151600084602001518560400151866060015187608001518860a0015160016000015460001c600180015460001c610cbf565b95945050505050565b6040805180820182528251808252602080850151928101839052600182905560028390558351808501855291825281019190915290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316917f8a7fd7e24d60f649878f6c9c7e9114e6614218fd3dce2eb1d79549afaf161ab39161088a9190611b50565b60405180910390a250565b600080846001600160a01b031684846040516108b19190611ba5565b60006040518083038185875af1925050503d80600081146108ee576040519150601f19603f3d011682016040523d82523d6000602084013e6108f3565b606091505b50915091508161090557805160208201fd5b5050505050565b3330146105a55760405162461bcd60e51b815260206004820152600960248201526837b7363c9039b2b63360b91b60448201526064016102f4565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561097a576104c483610e81565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156109d4575060408051601f3d908101601f191682019092526109d191810190611bb7565b60015b610a375760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016102f4565b600080516020611d368339815191528114610aa65760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016102f4565b506104c4838383610f1d565b604080516060818101835260008083526020830181905292820183905290369083906000610ae461014089018961197f565b9050905080600003610afe57600195505050505050610c6c565b6000610b0e6101408a018a61197f565b6000818110610b1f57610b1f611949565b919091013560f81c9150506001819003610bf6576007821015610b4b5760019650505050505050610c6c565b6000610b5b6101408b018b61197f565b610b6a91600791600191611bd0565b610b7391611bfa565b60d01c9050610b866101408b018b61197f565b610b94916007908290611bd0565b6040516001600160f81b031960f886901b1660208201526001600160d01b031960d085901b166021820152602781018c9052919750955060470160408051601f1981840301815291815265ffffffffffff909216918501919091529550610c05565b60019650505050505050610c6c565b610c108686866107a9565b15610c6157610c5483600060d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b83600001516001600160a01b031617179050919050565b9650505050505050610c6c565b600196505050505050505b92915050565b80156105a557604051600090339060001990849084818181858888f193505050503d8060008114610905576040519150601f19603f3d011682016040523d82523d6000602084013e610905565b600060208a511080610cf95750610cf78a602081518110610ce257610ce2611949565b01602001516001600160f81b0319168a610f48565b155b15610d0657506000610e73565b604080518082019091526015815274113a3cb832911d113bb2b130baba34371733b2ba1160591b6020820152610d3d818a89610fae565b610d4b576000915050610e73565b6000610d568d611067565b9050600081604051602001610d6b9190611c2a565b6040516020818303038152906040529050610d87818c8c610fae565b610d975760009350505050610e73565b600060028c604051610da99190611ba5565b602060405180830381855afa158015610dc6573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610de99190611bb7565b9050600060028f83604051602001610e02929190611c6b565b60408051601f1981840301815290829052610e1c91611ba5565b602060405180830381855afa158015610e39573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610e5c9190611bb7565b9050610e6b818b8b8b8b61127f565b955050505050505b9a9950505050505050505050565b6001600160a01b0381163b610eee5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016102f4565b600080516020611d3683398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b610f2683611363565b600082511180610f335750805b156104c457610f4283836113a3565b50505050565b6000600160f81b83811614610f5f57506000610c6c565b818015610f725750600160fa1b83811614155b15610f7f57506000610c6c565b600160fb1b83811614610fa557600f60fc1b600160fc1b841601610fa557506000610c6c565b50600192915050565b825182516000918591859190845b828110156110585781610fcf8289611c8d565b10610fe257600095505050505050610254565b83610fed8289611c8d565b81518110610ffd57610ffd611949565b602001015160f81c60f81b6001600160f81b03191685828151811061102457611024611949565b01602001516001600160f81b0319161461104657600095505050505050610254565b80611050816119e3565b915050610fbc565b50600198975050505050505050565b60606000611074836113c8565b905060008190506000600282511180156110bf575081600283516110989190611ca0565b815181106110a8576110a8611949565b6020910101516001600160f81b031916603d60f81b145b156110cc57506002611117565b6001825111801561110e575081600183516110e79190611ca0565b815181106110f7576110f7611949565b6020910101516001600160f81b031916603d60f81b145b15611117575060015b60008183516111269190611ca0565b905060008167ffffffffffffffff811115611143576111436116ba565b6040519080825280601f01601f19166020018201604052801561116d576020820181803683370190505b50905060005b828110156112745784818151811061118d5761118d611949565b01602001516001600160f81b031916602b60f81b036111d957602d60f81b8282815181106111bd576111bd611949565b60200101906001600160f81b031916908160001a905350611262565b8481815181106111eb576111eb611949565b01602001516001600160f81b031916602f60f81b0361121b57605f60f81b8282815181106111bd576111bd611949565b84818151811061122d5761122d611949565b602001015160f81c60f81b82828151811061124a5761124a611949565b60200101906001600160f81b031916908160001a9053505b8061126c816119e3565b915050611173565b509695505050505050565b6040805160208101879052908101859052606081018490526080810183905260a08101829052600090819060c001604051602081830303815290604052905060008073c2b78104907f722dabac4c69f826a522b2754de46001600160a01b0316836040516112ed9190611ba5565b600060405180830381855afa9150503d8060008114611328576040519150601f19603f3d011682016040523d82523d6000602084013e61132d565b606091505b50915091508161133f5761133f611cb3565b808060200190518101906113539190611bb7565b6001149998505050505050505050565b61136c81610e81565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606102548383604051806060016040528060278152602001611d966027913961151b565b606081516000036113e757505060408051602081019091526000815290565b6000604051806060016040528060408152602001611d5660409139905060006003845160026114169190611c8d565b6114209190611cc9565b61142b906004611ceb565b67ffffffffffffffff811115611443576114436116ba565b6040519080825280601f01601f19166020018201604052801561146d576020820181803683370190505b509050600182016020820185865187015b808210156114d9576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f811685015184535060018301925061147e565b50506003865106600181146114f5576002811461150857611510565b603d6001830353603d6002830353611510565b603d60018303535b509195945050505050565b6060600080856001600160a01b0316856040516115389190611ba5565b600060405180830381855af49150503d8060008114611573576040519150601f19603f3d011682016040523d82523d6000602084013e611578565b606091505b509150915061158986838387611593565b9695505050505050565b606083156116025782516000036115fb576001600160a01b0385163b6115fb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102f4565b508161160c565b61160c8383611614565b949350505050565b8151156116245781518083602001fd5b8060405162461bcd60e51b81526004016102f49190611d02565b60008060006040848603121561165357600080fd5b83359250602084013567ffffffffffffffff8082111561167257600080fd5b818601915086601f83011261168657600080fd5b81358181111561169557600080fd5b8760208285010111156116a757600080fd5b6020830194508093505050509250925092565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156116f3576116f36116ba565b60405290565b60006040828403121561170b57600080fd5b82601f83011261171a57600080fd5b6040516040810181811067ffffffffffffffff8211171561173d5761173d6116ba565b806040525080604084018581111561175457600080fd5b845b81811015611510578035835260209283019201611756565b6000806020838503121561178157600080fd5b823567ffffffffffffffff8082111561179957600080fd5b818501915085601f8301126117ad57600080fd5b8135818111156117bc57600080fd5b8660208260051b85010111156117d157600080fd5b60209290920196919550909350505050565b80356001600160a01b03811681146117fa57600080fd5b919050565b60006020828403121561181157600080fd5b610254826117e3565b60008060006060848603121561182f57600080fd5b833567ffffffffffffffff81111561184657600080fd5b8401610160818703121561185957600080fd5b95602085013595506040909401359392505050565b600082601f83011261187f57600080fd5b813567ffffffffffffffff8082111561189a5761189a6116ba565b604051601f8301601f19908116603f011681019082821181831017156118c2576118c26116ba565b816040528381528660208588010111156118db57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561190e57600080fd5b611917836117e3565b9150602083013567ffffffffffffffff81111561193357600080fd5b61193f8582860161186e565b9150509250929050565b634e487b7160e01b600052603260045260246000fd5b60008235605e1983360301811261197557600080fd5b9190910192915050565b6000808335601e1984360301811261199657600080fd5b83018035915067ffffffffffffffff8211156119b157600080fd5b6020019150368190038213156119c657600080fd5b9250929050565b634e487b7160e01b600052601160045260246000fd5b6000600182016119f5576119f56119cd565b5060010190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b600060208284031215611aa657600080fd5b813567ffffffffffffffff80821115611abe57600080fd5b9083019060c08286031215611ad257600080fd5b611ada6116d0565b823582811115611ae957600080fd5b611af58782860161186e565b825250602083013582811115611b0a57600080fd5b611b168782860161186e565b60208301525060408301356040820152606083013560608201526080830135608082015260a083013560a082015280935050505092915050565b60408101818360005b6002811015611b78578151835260209283019290910190600101611b59565b50505092915050565b60005b83811015611b9c578181015183820152602001611b84565b50506000910152565b60008251611975818460208701611b81565b600060208284031215611bc957600080fd5b5051919050565b60008085851115611be057600080fd5b83861115611bed57600080fd5b5050820193919092039150565b6001600160d01b03198135818116916006851015611c225780818660060360031b1b83161692505b505092915050565b6c1131b430b63632b733b2911d1160991b81528151600090611c5381600d850160208701611b81565b601160f91b600d939091019283015250600e01919050565b60008351611c7d818460208801611b81565b9190910191825250602001919050565b80820180821115610c6c57610c6c6119cd565b81810381811115610c6c57610c6c6119cd565b634e487b7160e01b600052600160045260246000fd5b600082611ce657634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610c6c57610c6c6119cd565b6020815260008251806020840152611d21816040850160208701611b81565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000815000a",
+ "sourceMap": "616:2276:50:-:0;;;748:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;795:24:50;;;;845:30;;808:11;;845:30;;;:::i;:::-;-1:-1:-1;;;;;513:32:55;;;495:51;;483:2;468:18;845:30:50;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;829:46:50;;;-1:-1:-1;616:2276:50;;;;;;;;;;:::o;14:310:55:-;104:6;157:2;145:9;136:7;132:23;128:32;125:52;;;173:1;170;163:12;125:52;199:16;;-1:-1:-1;;;;;244:31:55;;234:42;;224:70;;290:1;287;280:12;224:70;313:5;14:310;-1:-1:-1;;;14:310:55:o;329:223::-;616:2276:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ },
+ "deployedBytecode": {
+ "object": "0x60806040526004361061003f5760003560e01c80630b824849146100445780638375702b14610080578063b0d691fe14610093578063c1e4ba2d146100c7575b600080fd5b34801561005057600080fd5b5061006461005f366004610375565b6100fb565b6040516001600160a01b03909116815260200160405180910390f35b61006461008e366004610375565b6101d5565b34801561009f57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100d357600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b60006101cc8260001b6040518060200161011490610352565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008660405160240161015a91906103fa565b60408051601f19818403018152918152602080830180516001600160e01b0316632d16032160e01b17905290516101939392910161044f565b60408051601f19818403018152908290526101b19291602001610491565b60405160208183030381529060405280519060200120610320565b90505b92915050565b6000806101e284846100fb565b905034156102685760405163b760faf960e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063b760faf99034906024016000604051808303818588803b15801561024e57600080fd5b505af1158015610262573d6000803e3d6000fd5b50505050505b6001600160a01b0381163b8015610281575090506101cf565b8360001b7f0000000000000000000000000000000000000000000000000000000000000000866040516024016102b791906103fa565b60408051601f198184030181529181526020820180516001600160e01b0316632d16032160e01b179052516102eb90610352565b6102f692919061044f565b8190604051809103906000f5905080158015610316573d6000803e3d6000fd5b5095945050505050565b60006101cc8383306000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6104b8806104c183390190565b634e487b7160e01b600052604160045260246000fd5b6000806060838503121561038857600080fd5b83601f84011261039757600080fd5b6040516040810181811067ffffffffffffffff821117156103ba576103ba61035f565b80604052508060408501868111156103d157600080fd5b855b818110156103eb5780358352602092830192016103d3565b50919691359550909350505050565b60408101818360005b6002811015610422578151835260209283019290910190600101610403565b50505092915050565b60005b8381101561044657818101518382015260200161042e565b50506000910152565b60018060a01b0383168152604060208201526000825180604084015261047c81606085016020870161042b565b601f01601f1916919091016060019392505050565b600083516104a381846020880161042b565b8351908301906104b781836020880161042b565b0194935050505056fe60806040526040516104b83803806104b8833981016040819052610022916102de565b61002e82826000610035565b50506103fb565b61003e83610061565b60008251118061004b5750805b1561005c5761005a83836100a1565b505b505050565b61006a816100cd565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100c6838360405180606001604052806027815260200161049160279139610180565b9392505050565b6001600160a01b0381163b61013f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080856001600160a01b03168560405161019d91906103ac565b600060405180830381855af49150503d80600081146101d8576040519150601f19603f3d011682016040523d82523d6000602084013e6101dd565b606091505b5090925090506101ef868383876101f9565b9695505050505050565b60608315610268578251600003610261576001600160a01b0385163b6102615760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610136565b5081610272565b610272838361027a565b949350505050565b81511561028a5781518083602001fd5b8060405162461bcd60e51b815260040161013691906103c8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102d55781810151838201526020016102bd565b50506000910152565b600080604083850312156102f157600080fd5b82516001600160a01b038116811461030857600080fd5b60208401519092506001600160401b038082111561032557600080fd5b818501915085601f83011261033957600080fd5b81518181111561034b5761034b6102a4565b604051601f8201601f19908116603f01168101908382118183101715610373576103736102a4565b8160405282815288602084870101111561038c57600080fd5b61039d8360208301602088016102ba565b80955050505050509250929050565b600082516103be8184602087016102ba565b9190910192915050565b60208152600082518060208401526103e78160408501602087016102ba565b601f01601f19169190910160400192915050565b6088806104096000396000f3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6058565b565b600060537f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156076573d6000f35b3d6000fdfea164736f6c6343000815000a416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000815000a",
+ "sourceMap": "616:2276:50:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2219:671;;;;;;;;;;-1:-1:-1;2219:671:50;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1129:32:55;;;1111:51;;1099:2;1084:18;2219:671:50;;;;;;;1263:831;;;;;;:::i;:::-;;:::i;702:39::-;;;;;;;;;;;;;;;652:44;;;;;;;;;;;;;;;2219:671;2325:7;2363:520;2411:4;2403:13;;2507:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;2612:13;2763:9;2656:147;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2656:147:50;;;;;;;;;;;;;;;-1:-1:-1;;;;;2656:147:50;-1:-1:-1;;;2656:147:50;;;2564:265;;;;;2656:147;2564:265;;:::i;:::-;;;;-1:-1:-1;;2564:265:50;;;;;;;;;;2465:386;;;2564:265;2465:386;;:::i;:::-;;;;;;;;;;;;;2434:435;;;;;;2363:22;:520::i;:::-;2344:539;;2219:671;;;;;:::o;1263:831::-;1375:13;1400:12;1415:27;1426:9;1437:4;1415:10;:27::i;:::-;1400:42;-1:-1:-1;1503:9:50;:13;1499:88;;1532:44;;-1:-1:-1;;;1532:44:50;;-1:-1:-1;;;;;1129:32:55;;;1532:44:50;;;1111:51:55;1532:10:50;:20;;;;1560:9;;1084:18:55;;1532:44:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1499:88;-1:-1:-1;;;;;1676:16:50;;;1706:12;;1702:78;;-1:-1:-1;1763:4:50;-1:-1:-1;1734:35:50;;1702:78;1900:4;1892:13;;1940;2022:9;1980:53;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1980:53:50;;;;;;;;;;;;;;-1:-1:-1;;;;;1980:53:50;-1:-1:-1;;;1980:53:50;;;1869:186;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1790:297:50;1263:831;-1:-1:-1;;;;;1263:831:50:o;1799:165:43:-;1882:7;1908:49;1923:4;1929:12;1951:4;2338:12;2445:4;2439:11;3664:12;3657:4;3652:3;3648:14;3641:36;3713:4;3706;3701:3;3697:14;3690:28;3743:8;3738:3;3731:21;3836:4;3831:3;3827:14;3814:27;;3947:4;3940:5;3932:20;3990:2;3973:20;;;2207:1802;-1:-1:-1;;;;2207:1802:43:o;-1:-1:-1:-;;;;;;;;:::o;14:127:55:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:814;237:6;245;298:2;286:9;277:7;273:23;269:32;266:52;;;314:1;311;304:12;266:52;363:7;356:4;345:9;341:20;337:34;327:62;;385:1;382;375:12;327:62;418:2;412:9;460:2;452:6;448:15;529:6;517:10;514:22;493:18;481:10;478:34;475:62;472:88;;;540:18;;:::i;:::-;580:10;576:2;569:22;;611:6;655:2;644:9;640:18;681:7;673:6;670:19;667:39;;;702:1;699;692:12;667:39;726:9;744:146;760:6;755:3;752:15;744:146;;;828:17;;816:30;;875:4;866:14;;;;777;744:146;;;-1:-1:-1;909:6:55;;934:20;;;-1:-1:-1;146:814:55;;-1:-1:-1;;;;146:814:55:o;1640:494::-;1820:2;1805:18;;1809:9;1900:6;1778:4;1934:194;1948:4;1945:1;1942:11;1934:194;;;2007:13;;1995:26;;2044:4;2068:12;;;;2103:15;;;;1968:1;1961:9;1934:194;;;1938:3;;;1640:494;;;;:::o;2139:250::-;2224:1;2234:113;2248:6;2245:1;2242:13;2234:113;;;2324:11;;;2318:18;2305:11;;;2298:39;2270:2;2263:10;2234:113;;;-1:-1:-1;;2381:1:55;2363:16;;2356:27;2139:250::o;2394:491::-;2598:1;2594;2589:3;2585:11;2581:19;2573:6;2569:32;2558:9;2551:51;2638:2;2633;2622:9;2618:18;2611:30;2532:4;2670:6;2664:13;2713:6;2708:2;2697:9;2693:18;2686:34;2729:79;2801:6;2796:2;2785:9;2781:18;2776:2;2768:6;2764:15;2729:79;:::i;:::-;2869:2;2848:15;-1:-1:-1;;2844:29:55;2829:45;;;;2876:2;2825:54;;2394:491;-1:-1:-1;;;2394:491:55:o;2890:492::-;3065:3;3103:6;3097:13;3119:66;3178:6;3173:3;3166:4;3158:6;3154:17;3119:66;:::i;:::-;3248:13;;3207:16;;;;3270:70;3248:13;3207:16;3317:4;3305:17;;3270:70;:::i;:::-;3356:20;;2890:492;-1:-1:-1;;;;2890:492:55:o",
+ "linkReferences": {},
+ "immutableReferences": {
+ "48750": [
+ {
+ "start": 217,
+ "length": 32
+ },
+ {
+ "start": 298,
+ "length": 32
+ },
+ {
+ "start": 647,
+ "length": 32
+ }
+ ],
+ "48753": [
+ {
+ "start": 165,
+ "length": 32
+ },
+ {
+ "start": 521,
+ "length": 32
+ }
+ ]
+ }
+ },
+ "methodIdentifiers": {
+ "accountImplem()": "c1e4ba2d",
+ "createAccount(bytes32[2],uint256)": "8375702b",
+ "entryPoint()": "b0d691fe",
+ "getAddress(bytes32[2],uint256)": "0b824849"
+ },
+ "rawMetadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IEntryPoint\",\"name\":\"_entryPoint\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"accountImplem\",\"outputs\":[{\"internalType\":\"contract SimpleAccount\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[2]\",\"name\":\"publicKey\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createAccount\",\"outputs\":[{\"internalType\":\"contract SimpleAccount\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"entryPoint\",\"outputs\":[{\"internalType\":\"contract IEntryPoint\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[2]\",\"name\":\"publicKey\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"createAccount(bytes32[2],uint256)\":{\"notice\":\"Create an account, and return its address. Returns the address even if the account is already deployed. Note that during UserOperation execution, this method is called only if the account is not deployed. This method returns an existing account address so that entryPoint.getSenderAddress() would work even after account creation.\"},\"getAddress(bytes32[2],uint256)\":{\"notice\":\"Calculate the counterfactual address of this account as it would be returned by createAccount()\"}},\"notice\":\"A sample factory contract for SimpleAccount A UserOperations \\\"initCode\\\" holds the address of the factory, and a method call (to createAccount, in this sample factory). The factory's createAccount returns the target account address even if it is already installed. This way, the entryPoint.getSenderAddress() can be called either before or after the account is created.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/SimpleAccountFactory.sol\":\"SimpleAccountFactory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/p256-verifier/lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":p256-verifier/=lib/p256-verifier/src/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"keccak256\":\"0x81b70ea6183fd28e6c00dc3cf357c8453abdd4cc46ec628e7589e4b6a188d626\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://f4a99aced25a842721a2495760af84b874c1f730c94f8b3e76c71c8b757c90f5\",\"dweb:/ipfs/QmacEJqVFbwQxE4HTzqvWWAFT7uSbH2Yd7EMqdCx1DxzBz\"]},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"keccak256\":\"0x1a11613e6921d1a55ba72169156842ba7d30e966d40a23b34b29c88d1f82345e\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2bdd695221a8d884d4603d46b5389cc2cdda5cba70f49b57a98e9fba1b9fd2c5\",\"dweb:/ipfs/QmZyHFwzpRgfa4YgzY4MUbNdj8WSGCjMHw2AxW4LVnMLWE\"]},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"keccak256\":\"0xfc37d01c654f967c0f33b0edcb074231d30841f6fe1b23a070564f13c497b111\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://490630958f3a1861ad16db742e891b8c9f6f229a11f942d25ff58e9bab983c37\",\"dweb:/ipfs/QmYcvJxvXrXWvDUp6XZZirzjMqk5BaWdmsWWsEtamiuDu9\"]},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"keccak256\":\"0x9cdadcebb6491f50a7c136e560f1eb51e785a79ebfa29605a0c5eee3c60adb19\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://236356329adad328f489629e53a141f8842fa00ad42c16cf9ea031cfe77bfa82\",\"dweb:/ipfs/QmRgjTghLaTcA3xbx6vcfVu6aCUK6W1iN8JS8ric2DPy1x\"]},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://00fe21b4349b24c50df60e1a705179293982bd9e7a32b78d4bac9620f89e7fe2\",\"dweb:/ipfs/QmSFFYGfUwQbVa6hASjU7YxTvgi2HkfrPr4X5oPHscHg8b\"]},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"keccak256\":\"0x10cdaa14cd2b08279e02c2d4863cea18cfb7e11d7a33cf740755f9a025e7bda1\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://3d214ceee25812bb2a8176dd245a399d84d222cf7f9cf0bc3937afad372f0b7a\",\"dweb:/ipfs/QmZxqSic8cGeis7R7ufUjf95CgTpyAFY9nCHuiLPbESbYr\"]},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"keccak256\":\"0x093777cb7097dccaffd631d07dfdbd0f731371efe3770fbe22a0c992af4eb4f6\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://6da218e65b43a3f99247b2c66c5946eaa48f2719a0f58469d3a80b4d24b28f00\",\"dweb:/ipfs/QmQ3np8AwPkWw9Ey4DMMQNJgPSVw3fdrX8wnLaVgYyiaQn\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973\",\"dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0x0705a4b1b86d7b0bd8432118f226ba139c44b9dcaba0a6eafba2dd7d0639c544\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c45b821ef9e882e57c256697a152e108f0f2ad6997609af8904cae99c9bd422e\",\"dweb:/ipfs/QmRKCJW6jjzR5UYZcLpGnhEJ75UVbH6EHkEa49sWx2SKng\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688\",\"dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5\",\"dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"keccak256\":\"0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8\",\"dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725\"]},\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472\",\"dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354\",\"dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce\"]},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x3798da9e212cd00a7cda94ddb5a9721171a718e89c500d8901f810e0e37fa74e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a93f9c584e4b29dce1c7520b63d19f34c684f5ea972b5d04323a132059851004\",\"dweb:/ipfs/QmajmiA7BsarS63FMoP5PcBS4mqVGoiJ7xZ3wJVonYNTHC\"]},\"lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x85cc5aca68692044586dc5ca19a9868d3288f6b35d1085c620dd0278ed0abdaa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47e5b84668f9b898617da72e91a32559c6975357e267559b3e4ace0d0ca4a6a8\",\"dweb:/ipfs/QmUCVFEpcNdHfNpotEDnMRUeAGPShTcxrtzo3xpNJHZ67e\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]},\"lib/openzeppelin-contracts/contracts/utils/Base64.sol\":{\"keccak256\":\"0x5f3461639fe20794cfb4db4a6d8477388a15b2e70a018043084b7c4bedfa8136\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77e5309e2cc4cdc3395214edb0ff43ff5a5f7373f5a425383e540f6fab530f96\",\"dweb:/ipfs/QmTV8DZ9knJDa3b5NPBFQqjvTzodyZVjRUg5mx5A99JPLJ\"]},\"lib/openzeppelin-contracts/contracts/utils/Create2.sol\":{\"keccak256\":\"0xafc07f37809f74d9c66d6461cc0f85fb5147ab855acd0acc30af4b2272130c61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e63fa9a8bc793ccbdc82e93f85a4d2d5b66fd3f42303a6f5fe54c5ff230eb81\",\"dweb:/ipfs/QmVMxEw74WgFPqTZjXbYBLbo6gbbjtTocnfBW54Ft6W6Tb\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4\",\"dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B\"]},\"lib/p256-verifier/src/P256.sol\":{\"keccak256\":\"0x4468a0e0038afa2e1cd62511a9ca80756dd9c359dd2747bf253a81cfff31ddbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7477936aedd075763d5ffc0b87b88591ccb18d68001c883df2e0fad34e19ffce\",\"dweb:/ipfs/Qmb8QWQKJLLAmj7b4qQUcb17kpRfiLvyv2NMUm3y5zj9rc\"]},\"lib/p256-verifier/src/utils/Base64URL.sol\":{\"keccak256\":\"0x36416bdd7102f5a6feb22da9a5f648165cdf10c40c5cd119db076b7908758b03\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bba99952002c232533c81a58850e2959fb3f55b4a16747532597ce432fd5c72\",\"dweb:/ipfs/QmYzfzNWUwqzcrqSHvppVM7xWDbaKuse3bmqwLac7QoKEq\"]},\"src/SimpleAccount.sol\":{\"keccak256\":\"0x6da78eac4ac3795750f5837194f6b6f78a3d79478f09b0b9efe9583f08595ee0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://234613012015441698451e5af98226a503feadaa7b4ab4a9d18d3c8a0be60d84\",\"dweb:/ipfs/QmVrosqua1ZCCGbPGSM8ksdw8SX3Cjp6zuQLqxP1PyU14Y\"]},\"src/SimpleAccountFactory.sol\":{\"keccak256\":\"0x9a5a306a026849c2e5b6c0a485cf0c27f457231e2ba1399da55d0c0ac2ad45d5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d10ef4e51943fce477d5b2a362d8a1d4638668afc688984edd68023eff8feab\",\"dweb:/ipfs/QmdHiyCbao3Cv2dgXxSm4bqPouQ9RmyHCi6TDBqhXRzckS\"]},\"src/WebAuthn.sol\":{\"keccak256\":\"0xf0d93f00b415d520a554751713ccf1a1a6626ab7281d7a5494ed5494484eac93\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://adab00059653a4449b5c7f6a3846b4729f404cfd0b8e013fe953caf4da7e995c\",\"dweb:/ipfs/QmSsTV4Ukf5PaN5fXMt8c8G9CHxqiRqEbdeFbhLKx6ruDm\"]}},\"version\":1}",
+ "metadata": {
+ "compiler": {
+ "version": "0.8.21+commit.d9974bed"
+ },
+ "language": "Solidity",
+ "output": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "contract IEntryPoint",
+ "name": "_entryPoint",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "accountImplem",
+ "outputs": [
+ {
+ "internalType": "contract SimpleAccount",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32[2]",
+ "name": "publicKey",
+ "type": "bytes32[2]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "salt",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "createAccount",
+ "outputs": [
+ {
+ "internalType": "contract SimpleAccount",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "entryPoint",
+ "outputs": [
+ {
+ "internalType": "contract IEntryPoint",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32[2]",
+ "name": "publicKey",
+ "type": "bytes32[2]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "salt",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "getAddress",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ }
+ ],
+ "devdoc": {
+ "kind": "dev",
+ "methods": {},
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {
+ "createAccount(bytes32[2],uint256)": {
+ "notice": "Create an account, and return its address. Returns the address even if the account is already deployed. Note that during UserOperation execution, this method is called only if the account is not deployed. This method returns an existing account address so that entryPoint.getSenderAddress() would work even after account creation."
+ },
+ "getAddress(bytes32[2],uint256)": {
+ "notice": "Calculate the counterfactual address of this account as it would be returned by createAccount()"
+ }
+ },
+ "version": 1
+ }
+ },
+ "settings": {
+ "remappings": [
+ "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
+ "account-abstraction/=lib/account-abstraction/contracts/",
+ "ds-test/=lib/forge-std/lib/ds-test/src/",
+ "erc4626-tests/=lib/p256-verifier/lib/openzeppelin-contracts/lib/erc4626-tests/",
+ "forge-std/=lib/forge-std/src/",
+ "openzeppelin-contracts/=lib/openzeppelin-contracts/",
+ "p256-verifier/=lib/p256-verifier/src/"
+ ],
+ "optimizer": {
+ "enabled": true,
+ "runs": 200
+ },
+ "metadata": {
+ "bytecodeHash": "none"
+ },
+ "compilationTarget": {
+ "src/SimpleAccountFactory.sol": "SimpleAccountFactory"
+ },
+ "libraries": {}
+ },
+ "sources": {
+ "lib/account-abstraction/contracts/core/Helpers.sol": {
+ "keccak256": "0x81b70ea6183fd28e6c00dc3cf357c8453abdd4cc46ec628e7589e4b6a188d626",
+ "urls": [
+ "bzz-raw://f4a99aced25a842721a2495760af84b874c1f730c94f8b3e76c71c8b757c90f5",
+ "dweb:/ipfs/QmacEJqVFbwQxE4HTzqvWWAFT7uSbH2Yd7EMqdCx1DxzBz"
+ ],
+ "license": "GPL-3.0"
+ },
+ "lib/account-abstraction/contracts/interfaces/IAccount.sol": {
+ "keccak256": "0x1a11613e6921d1a55ba72169156842ba7d30e966d40a23b34b29c88d1f82345e",
+ "urls": [
+ "bzz-raw://2bdd695221a8d884d4603d46b5389cc2cdda5cba70f49b57a98e9fba1b9fd2c5",
+ "dweb:/ipfs/QmZyHFwzpRgfa4YgzY4MUbNdj8WSGCjMHw2AxW4LVnMLWE"
+ ],
+ "license": "GPL-3.0"
+ },
+ "lib/account-abstraction/contracts/interfaces/IAggregator.sol": {
+ "keccak256": "0xfc37d01c654f967c0f33b0edcb074231d30841f6fe1b23a070564f13c497b111",
+ "urls": [
+ "bzz-raw://490630958f3a1861ad16db742e891b8c9f6f229a11f942d25ff58e9bab983c37",
+ "dweb:/ipfs/QmYcvJxvXrXWvDUp6XZZirzjMqk5BaWdmsWWsEtamiuDu9"
+ ],
+ "license": "GPL-3.0"
+ },
+ "lib/account-abstraction/contracts/interfaces/IEntryPoint.sol": {
+ "keccak256": "0x9cdadcebb6491f50a7c136e560f1eb51e785a79ebfa29605a0c5eee3c60adb19",
+ "urls": [
+ "bzz-raw://236356329adad328f489629e53a141f8842fa00ad42c16cf9ea031cfe77bfa82",
+ "dweb:/ipfs/QmRgjTghLaTcA3xbx6vcfVu6aCUK6W1iN8JS8ric2DPy1x"
+ ],
+ "license": "GPL-3.0"
+ },
+ "lib/account-abstraction/contracts/interfaces/INonceManager.sol": {
+ "keccak256": "0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12",
+ "urls": [
+ "bzz-raw://00fe21b4349b24c50df60e1a705179293982bd9e7a32b78d4bac9620f89e7fe2",
+ "dweb:/ipfs/QmSFFYGfUwQbVa6hASjU7YxTvgi2HkfrPr4X5oPHscHg8b"
+ ],
+ "license": "GPL-3.0"
+ },
+ "lib/account-abstraction/contracts/interfaces/IStakeManager.sol": {
+ "keccak256": "0x10cdaa14cd2b08279e02c2d4863cea18cfb7e11d7a33cf740755f9a025e7bda1",
+ "urls": [
+ "bzz-raw://3d214ceee25812bb2a8176dd245a399d84d222cf7f9cf0bc3937afad372f0b7a",
+ "dweb:/ipfs/QmZxqSic8cGeis7R7ufUjf95CgTpyAFY9nCHuiLPbESbYr"
+ ],
+ "license": "GPL-3.0-only"
+ },
+ "lib/account-abstraction/contracts/interfaces/UserOperation.sol": {
+ "keccak256": "0x093777cb7097dccaffd631d07dfdbd0f731371efe3770fbe22a0c992af4eb4f6",
+ "urls": [
+ "bzz-raw://6da218e65b43a3f99247b2c66c5946eaa48f2719a0f58469d3a80b4d24b28f00",
+ "dweb:/ipfs/QmQ3np8AwPkWw9Ey4DMMQNJgPSVw3fdrX8wnLaVgYyiaQn"
+ ],
+ "license": "GPL-3.0"
+ },
+ "lib/forge-std/src/console2.sol": {
+ "keccak256": "0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea",
+ "urls": [
+ "bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973",
+ "dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol": {
+ "keccak256": "0x0705a4b1b86d7b0bd8432118f226ba139c44b9dcaba0a6eafba2dd7d0639c544",
+ "urls": [
+ "bzz-raw://c45b821ef9e882e57c256697a152e108f0f2ad6997609af8904cae99c9bd422e",
+ "dweb:/ipfs/QmRKCJW6jjzR5UYZcLpGnhEJ75UVbH6EHkEa49sWx2SKng"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": {
+ "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff",
+ "urls": [
+ "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688",
+ "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": {
+ "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d",
+ "urls": [
+ "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5",
+ "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": {
+ "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a",
+ "urls": [
+ "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8",
+ "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": {
+ "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27",
+ "urls": [
+ "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472",
+ "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": {
+ "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61",
+ "urls": [
+ "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354",
+ "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol": {
+ "keccak256": "0x3798da9e212cd00a7cda94ddb5a9721171a718e89c500d8901f810e0e37fa74e",
+ "urls": [
+ "bzz-raw://a93f9c584e4b29dce1c7520b63d19f34c684f5ea972b5d04323a132059851004",
+ "dweb:/ipfs/QmajmiA7BsarS63FMoP5PcBS4mqVGoiJ7xZ3wJVonYNTHC"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol": {
+ "keccak256": "0x85cc5aca68692044586dc5ca19a9868d3288f6b35d1085c620dd0278ed0abdaa",
+ "urls": [
+ "bzz-raw://47e5b84668f9b898617da72e91a32559c6975357e267559b3e4ace0d0ca4a6a8",
+ "dweb:/ipfs/QmUCVFEpcNdHfNpotEDnMRUeAGPShTcxrtzo3xpNJHZ67e"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts/contracts/utils/Address.sol": {
+ "keccak256": "0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1",
+ "urls": [
+ "bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269",
+ "dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts/contracts/utils/Base64.sol": {
+ "keccak256": "0x5f3461639fe20794cfb4db4a6d8477388a15b2e70a018043084b7c4bedfa8136",
+ "urls": [
+ "bzz-raw://77e5309e2cc4cdc3395214edb0ff43ff5a5f7373f5a425383e540f6fab530f96",
+ "dweb:/ipfs/QmTV8DZ9knJDa3b5NPBFQqjvTzodyZVjRUg5mx5A99JPLJ"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts/contracts/utils/Create2.sol": {
+ "keccak256": "0xafc07f37809f74d9c66d6461cc0f85fb5147ab855acd0acc30af4b2272130c61",
+ "urls": [
+ "bzz-raw://8e63fa9a8bc793ccbdc82e93f85a4d2d5b66fd3f42303a6f5fe54c5ff230eb81",
+ "dweb:/ipfs/QmVMxEw74WgFPqTZjXbYBLbo6gbbjtTocnfBW54Ft6W6Tb"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": {
+ "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d",
+ "urls": [
+ "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4",
+ "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B"
+ ],
+ "license": "MIT"
+ },
+ "lib/p256-verifier/src/P256.sol": {
+ "keccak256": "0x4468a0e0038afa2e1cd62511a9ca80756dd9c359dd2747bf253a81cfff31ddbd",
+ "urls": [
+ "bzz-raw://7477936aedd075763d5ffc0b87b88591ccb18d68001c883df2e0fad34e19ffce",
+ "dweb:/ipfs/Qmb8QWQKJLLAmj7b4qQUcb17kpRfiLvyv2NMUm3y5zj9rc"
+ ],
+ "license": "MIT"
+ },
+ "lib/p256-verifier/src/utils/Base64URL.sol": {
+ "keccak256": "0x36416bdd7102f5a6feb22da9a5f648165cdf10c40c5cd119db076b7908758b03",
+ "urls": [
+ "bzz-raw://1bba99952002c232533c81a58850e2959fb3f55b4a16747532597ce432fd5c72",
+ "dweb:/ipfs/QmYzfzNWUwqzcrqSHvppVM7xWDbaKuse3bmqwLac7QoKEq"
+ ],
+ "license": "MIT"
+ },
+ "src/SimpleAccount.sol": {
+ "keccak256": "0x6da78eac4ac3795750f5837194f6b6f78a3d79478f09b0b9efe9583f08595ee0",
+ "urls": [
+ "bzz-raw://234613012015441698451e5af98226a503feadaa7b4ab4a9d18d3c8a0be60d84",
+ "dweb:/ipfs/QmVrosqua1ZCCGbPGSM8ksdw8SX3Cjp6zuQLqxP1PyU14Y"
+ ],
+ "license": "MIT"
+ },
+ "src/SimpleAccountFactory.sol": {
+ "keccak256": "0x9a5a306a026849c2e5b6c0a485cf0c27f457231e2ba1399da55d0c0ac2ad45d5",
+ "urls": [
+ "bzz-raw://2d10ef4e51943fce477d5b2a362d8a1d4638668afc688984edd68023eff8feab",
+ "dweb:/ipfs/QmdHiyCbao3Cv2dgXxSm4bqPouQ9RmyHCi6TDBqhXRzckS"
+ ],
+ "license": "MIT"
+ },
+ "src/WebAuthn.sol": {
+ "keccak256": "0xf0d93f00b415d520a554751713ccf1a1a6626ab7281d7a5494ed5494484eac93",
+ "urls": [
+ "bzz-raw://adab00059653a4449b5c7f6a3846b4729f404cfd0b8e013fe953caf4da7e995c",
+ "dweb:/ipfs/QmSsTV4Ukf5PaN5fXMt8c8G9CHxqiRqEbdeFbhLKx6ruDm"
+ ],
+ "license": "MIT"
+ }
+ },
+ "version": 1
+ },
+ "ast": {
+ "absolutePath": "src/SimpleAccountFactory.sol",
+ "id": 48898,
+ "exportedSymbols": {
+ "Address": [47806],
+ "Create2": [47934],
+ "ERC1967Proxy": [46757],
+ "ERC1967Upgrade": [47075],
+ "IAccount": [2899],
+ "IAggregator": [2933],
+ "IBeacon": [47137],
+ "IERC1271": [46710],
+ "IERC1822Proxiable": [46720],
+ "IEntryPoint": [3072],
+ "INonceManager": [3091],
+ "IStakeManager": [3230],
+ "Initializable": [47306],
+ "Proxy": [47127],
+ "Signature": [48278],
+ "SimpleAccount": [48741],
+ "SimpleAccountFactory": [48897],
+ "StorageSlot": [47994],
+ "UUPSUpgradeable": [47422],
+ "UserOperation": [3256],
+ "ValidationData": [1907],
+ "WebAuthn": [49150],
+ "_intersectTimeRange": [2053],
+ "_packValidationData": [2090, 2128],
+ "_parseValidationData": [1967],
+ "calldataKeccak": [2138],
+ "console2": [33458]
+ },
+ "nodeType": "SourceUnit",
+ "src": "32:2861:50",
+ "nodes": [
+ {
+ "id": 48743,
+ "nodeType": "PragmaDirective",
+ "src": "32:24:50",
+ "nodes": [],
+ "literals": ["solidity", "^", "0.8", ".12"]
+ },
+ {
+ "id": 48744,
+ "nodeType": "ImportDirective",
+ "src": "58:60:50",
+ "nodes": [],
+ "absolutePath": "lib/openzeppelin-contracts/contracts/utils/Create2.sol",
+ "file": "openzeppelin-contracts/contracts/utils/Create2.sol",
+ "nameLocation": "-1:-1:-1",
+ "scope": 48898,
+ "sourceUnit": 47935,
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "id": 48745,
+ "nodeType": "ImportDirective",
+ "src": "119:73:50",
+ "nodes": [],
+ "absolutePath": "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol",
+ "file": "openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol",
+ "nameLocation": "-1:-1:-1",
+ "scope": 48898,
+ "sourceUnit": 46758,
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "id": 48746,
+ "nodeType": "ImportDirective",
+ "src": "194:31:50",
+ "nodes": [],
+ "absolutePath": "src/SimpleAccount.sol",
+ "file": "src/SimpleAccount.sol",
+ "nameLocation": "-1:-1:-1",
+ "scope": 48898,
+ "sourceUnit": 48742,
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "id": 48897,
+ "nodeType": "ContractDefinition",
+ "src": "616:2276:50",
+ "nodes": [
+ {
+ "id": 48750,
+ "nodeType": "VariableDeclaration",
+ "src": "652:44:50",
+ "nodes": [],
+ "constant": false,
+ "functionSelector": "c1e4ba2d",
+ "mutability": "immutable",
+ "name": "accountImplem",
+ "nameLocation": "683:13:50",
+ "scope": 48897,
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_SimpleAccount_$48741",
+ "typeString": "contract SimpleAccount"
+ },
+ "typeName": {
+ "id": 48749,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 48748,
+ "name": "SimpleAccount",
+ "nameLocations": ["652:13:50"],
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 48741,
+ "src": "652:13:50"
+ },
+ "referencedDeclaration": 48741,
+ "src": "652:13:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_SimpleAccount_$48741",
+ "typeString": "contract SimpleAccount"
+ }
+ },
+ "visibility": "public"
+ },
+ {
+ "id": 48753,
+ "nodeType": "VariableDeclaration",
+ "src": "702:39:50",
+ "nodes": [],
+ "constant": false,
+ "functionSelector": "b0d691fe",
+ "mutability": "immutable",
+ "name": "entryPoint",
+ "nameLocation": "731:10:50",
+ "scope": 48897,
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_IEntryPoint_$3072",
+ "typeString": "contract IEntryPoint"
+ },
+ "typeName": {
+ "id": 48752,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 48751,
+ "name": "IEntryPoint",
+ "nameLocations": ["702:11:50"],
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 3072,
+ "src": "702:11:50"
+ },
+ "referencedDeclaration": 3072,
+ "src": "702:11:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_IEntryPoint_$3072",
+ "typeString": "contract IEntryPoint"
+ }
+ },
+ "visibility": "public"
+ },
+ {
+ "id": 48772,
+ "nodeType": "FunctionDefinition",
+ "src": "748:134:50",
+ "nodes": [],
+ "body": {
+ "id": 48771,
+ "nodeType": "Block",
+ "src": "785:97:50",
+ "nodes": [],
+ "statements": [
+ {
+ "expression": {
+ "id": 48761,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "id": 48759,
+ "name": "entryPoint",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48753,
+ "src": "795:10:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_IEntryPoint_$3072",
+ "typeString": "contract IEntryPoint"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "id": 48760,
+ "name": "_entryPoint",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48756,
+ "src": "808:11:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_IEntryPoint_$3072",
+ "typeString": "contract IEntryPoint"
+ }
+ },
+ "src": "795:24:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_IEntryPoint_$3072",
+ "typeString": "contract IEntryPoint"
+ }
+ },
+ "id": 48762,
+ "nodeType": "ExpressionStatement",
+ "src": "795:24:50"
+ },
+ {
+ "expression": {
+ "id": 48769,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "id": 48763,
+ "name": "accountImplem",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48750,
+ "src": "829:13:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_SimpleAccount_$48741",
+ "typeString": "contract SimpleAccount"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "arguments": [
+ {
+ "id": 48767,
+ "name": "_entryPoint",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48756,
+ "src": "863:11:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_IEntryPoint_$3072",
+ "typeString": "contract IEntryPoint"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_IEntryPoint_$3072",
+ "typeString": "contract IEntryPoint"
+ }
+ ],
+ "id": 48766,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "NewExpression",
+ "src": "845:17:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_creation_nonpayable$_t_contract$_IEntryPoint_$3072_$returns$_t_contract$_SimpleAccount_$48741_$",
+ "typeString": "function (contract IEntryPoint) returns (contract SimpleAccount)"
+ },
+ "typeName": {
+ "id": 48765,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 48764,
+ "name": "SimpleAccount",
+ "nameLocations": ["849:13:50"],
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 48741,
+ "src": "849:13:50"
+ },
+ "referencedDeclaration": 48741,
+ "src": "849:13:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_SimpleAccount_$48741",
+ "typeString": "contract SimpleAccount"
+ }
+ }
+ },
+ "id": 48768,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "845:30:50",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_SimpleAccount_$48741",
+ "typeString": "contract SimpleAccount"
+ }
+ },
+ "src": "829:46:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_SimpleAccount_$48741",
+ "typeString": "contract SimpleAccount"
+ }
+ },
+ "id": 48770,
+ "nodeType": "ExpressionStatement",
+ "src": "829:46:50"
+ }
+ ]
+ },
+ "implemented": true,
+ "kind": "constructor",
+ "modifiers": [],
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "parameters": {
+ "id": 48757,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 48756,
+ "mutability": "mutable",
+ "name": "_entryPoint",
+ "nameLocation": "772:11:50",
+ "nodeType": "VariableDeclaration",
+ "scope": 48772,
+ "src": "760:23:50",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_IEntryPoint_$3072",
+ "typeString": "contract IEntryPoint"
+ },
+ "typeName": {
+ "id": 48755,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 48754,
+ "name": "IEntryPoint",
+ "nameLocations": ["760:11:50"],
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 3072,
+ "src": "760:11:50"
+ },
+ "referencedDeclaration": 3072,
+ "src": "760:11:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_IEntryPoint_$3072",
+ "typeString": "contract IEntryPoint"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "759:25:50"
+ },
+ "returnParameters": {
+ "id": 48758,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "785:0:50"
+ },
+ "scope": 48897,
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "public"
+ },
+ {
+ "id": 48852,
+ "nodeType": "FunctionDefinition",
+ "src": "1263:831:50",
+ "nodes": [],
+ "body": {
+ "id": 48851,
+ "nodeType": "Block",
+ "src": "1390:704:50",
+ "nodes": [],
+ "statements": [
+ {
+ "assignments": [48786],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 48786,
+ "mutability": "mutable",
+ "name": "addr",
+ "nameLocation": "1408:4:50",
+ "nodeType": "VariableDeclaration",
+ "scope": 48851,
+ "src": "1400:12:50",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 48785,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1400:7:50",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 48791,
+ "initialValue": {
+ "arguments": [
+ {
+ "id": 48788,
+ "name": "publicKey",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48777,
+ "src": "1426:9:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_bytes32_$2_memory_ptr",
+ "typeString": "bytes32[2] memory"
+ }
+ },
+ {
+ "id": 48789,
+ "name": "salt",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48779,
+ "src": "1437:4:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_array$_t_bytes32_$2_memory_ptr",
+ "typeString": "bytes32[2] memory"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 48787,
+ "name": "getAddress",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48896,
+ "src": "1415:10:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_array$_t_bytes32_$2_memory_ptr_$_t_uint256_$returns$_t_address_$",
+ "typeString": "function (bytes32[2] memory,uint256) view returns (address)"
+ }
+ },
+ "id": 48790,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1415:27:50",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "1400:42:50"
+ },
+ {
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 48795,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "id": 48792,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "1503:3:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 48793,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberLocation": "1507:5:50",
+ "memberName": "value",
+ "nodeType": "MemberAccess",
+ "src": "1503:9:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 48794,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1515:1:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "1503:13:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 48806,
+ "nodeType": "IfStatement",
+ "src": "1499:88:50",
+ "trueBody": {
+ "id": 48805,
+ "nodeType": "Block",
+ "src": "1518:69:50",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 48802,
+ "name": "addr",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48786,
+ "src": "1571:4:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "expression": {
+ "id": 48796,
+ "name": "entryPoint",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48753,
+ "src": "1532:10:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_IEntryPoint_$3072",
+ "typeString": "contract IEntryPoint"
+ }
+ },
+ "id": 48798,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberLocation": "1543:9:50",
+ "memberName": "depositTo",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3205,
+ "src": "1532:20:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_payable$_t_address_$returns$__$",
+ "typeString": "function (address) payable external"
+ }
+ },
+ "id": 48801,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "names": ["value"],
+ "nodeType": "FunctionCallOptions",
+ "options": [
+ {
+ "expression": {
+ "id": 48799,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "1560:3:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 48800,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberLocation": "1564:5:50",
+ "memberName": "value",
+ "nodeType": "MemberAccess",
+ "src": "1560:9:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "src": "1532:38:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_payable$_t_address_$returns$__$value",
+ "typeString": "function (address) payable external"
+ }
+ },
+ "id": 48803,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1532:44:50",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 48804,
+ "nodeType": "ExpressionStatement",
+ "src": "1532:44:50"
+ }
+ ]
+ }
+ },
+ {
+ "assignments": [48808],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 48808,
+ "mutability": "mutable",
+ "name": "codeSize",
+ "nameLocation": "1665:8:50",
+ "nodeType": "VariableDeclaration",
+ "scope": 48851,
+ "src": "1660:13:50",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 48807,
+ "name": "uint",
+ "nodeType": "ElementaryTypeName",
+ "src": "1660:4:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 48812,
+ "initialValue": {
+ "expression": {
+ "expression": {
+ "id": 48809,
+ "name": "addr",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48786,
+ "src": "1676:4:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "id": 48810,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberLocation": "1681:4:50",
+ "memberName": "code",
+ "nodeType": "MemberAccess",
+ "src": "1676:9:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ "id": 48811,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberLocation": "1686:6:50",
+ "memberName": "length",
+ "nodeType": "MemberAccess",
+ "src": "1676:16:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "1660:32:50"
+ },
+ {
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 48815,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 48813,
+ "name": "codeSize",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48808,
+ "src": "1706:8:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": ">",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 48814,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1717:1:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "1706:12:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 48824,
+ "nodeType": "IfStatement",
+ "src": "1702:78:50",
+ "trueBody": {
+ "id": 48823,
+ "nodeType": "Block",
+ "src": "1720:60:50",
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 48819,
+ "name": "addr",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48786,
+ "src": "1763:4:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ ],
+ "id": 48818,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1755:8:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_payable_$",
+ "typeString": "type(address payable)"
+ },
+ "typeName": {
+ "id": 48817,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1755:8:50",
+ "stateMutability": "payable",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 48820,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1755:13:50",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ ],
+ "id": 48816,
+ "name": "SimpleAccount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48741,
+ "src": "1741:13:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_SimpleAccount_$48741_$",
+ "typeString": "type(contract SimpleAccount)"
+ }
+ },
+ "id": 48821,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1741:28:50",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_SimpleAccount_$48741",
+ "typeString": "contract SimpleAccount"
+ }
+ },
+ "functionReturnParameters": 48784,
+ "id": 48822,
+ "nodeType": "Return",
+ "src": "1734:35:50"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 48838,
+ "name": "accountImplem",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48750,
+ "src": "1940:13:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_SimpleAccount_$48741",
+ "typeString": "contract SimpleAccount"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_SimpleAccount_$48741",
+ "typeString": "contract SimpleAccount"
+ }
+ ],
+ "id": 48837,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1932:7:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 48836,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1932:7:50",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 48839,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1932:22:50",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "arguments": [
+ {
+ "expression": {
+ "id": 48842,
+ "name": "SimpleAccount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48741,
+ "src": "1995:13:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_SimpleAccount_$48741_$",
+ "typeString": "type(contract SimpleAccount)"
+ }
+ },
+ "id": 48843,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberLocation": "2009:10:50",
+ "memberName": "initialize",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 48345,
+ "src": "1995:24:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_declaration_nonpayable$_t_array$_t_bytes32_$2_memory_ptr_$returns$__$",
+ "typeString": "function SimpleAccount.initialize(bytes32[2] memory)"
+ }
+ },
+ {
+ "components": [
+ {
+ "id": 48844,
+ "name": "publicKey",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48777,
+ "src": "2022:9:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_bytes32_$2_memory_ptr",
+ "typeString": "bytes32[2] memory"
+ }
+ }
+ ],
+ "id": 48845,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "2021:11:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_bytes32_$2_memory_ptr",
+ "typeString": "bytes32[2] memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_function_declaration_nonpayable$_t_array$_t_bytes32_$2_memory_ptr_$returns$__$",
+ "typeString": "function SimpleAccount.initialize(bytes32[2] memory)"
+ },
+ {
+ "typeIdentifier": "t_array$_t_bytes32_$2_memory_ptr",
+ "typeString": "bytes32[2] memory"
+ }
+ ],
+ "expression": {
+ "id": 48840,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -1,
+ "src": "1980:3:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 48841,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberLocation": "1984:10:50",
+ "memberName": "encodeCall",
+ "nodeType": "MemberAccess",
+ "src": "1980:14:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function () pure returns (bytes memory)"
+ }
+ },
+ "id": 48846,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1980:53:50",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 48830,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "NewExpression",
+ "src": "1869:16:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_creation_payable$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_ERC1967Proxy_$46757_$",
+ "typeString": "function (address,bytes memory) payable returns (contract ERC1967Proxy)"
+ },
+ "typeName": {
+ "id": 48829,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 48828,
+ "name": "ERC1967Proxy",
+ "nameLocations": ["1873:12:50"],
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 46757,
+ "src": "1873:12:50"
+ },
+ "referencedDeclaration": 46757,
+ "src": "1873:12:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_ERC1967Proxy_$46757",
+ "typeString": "contract ERC1967Proxy"
+ }
+ }
+ },
+ "id": 48835,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "names": ["salt"],
+ "nodeType": "FunctionCallOptions",
+ "options": [
+ {
+ "arguments": [
+ {
+ "id": 48833,
+ "name": "salt",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48779,
+ "src": "1900:4:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 48832,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1892:7:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_bytes32_$",
+ "typeString": "type(bytes32)"
+ },
+ "typeName": {
+ "id": 48831,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "1892:7:50",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 48834,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1892:13:50",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ }
+ ],
+ "src": "1869:37:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_creation_payable$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_ERC1967Proxy_$46757_$salt",
+ "typeString": "function (address,bytes memory) payable returns (contract ERC1967Proxy)"
+ }
+ },
+ "id": 48847,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1869:186:50",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_ERC1967Proxy_$46757",
+ "typeString": "contract ERC1967Proxy"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_ERC1967Proxy_$46757",
+ "typeString": "contract ERC1967Proxy"
+ }
+ ],
+ "id": 48827,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1840:8:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_payable_$",
+ "typeString": "type(address payable)"
+ },
+ "typeName": {
+ "id": 48826,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1840:8:50",
+ "stateMutability": "payable",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 48848,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1840:233:50",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address_payable",
+ "typeString": "address payable"
+ }
+ ],
+ "id": 48825,
+ "name": "SimpleAccount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48741,
+ "src": "1809:13:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_SimpleAccount_$48741_$",
+ "typeString": "type(contract SimpleAccount)"
+ }
+ },
+ "id": 48849,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1809:278:50",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_SimpleAccount_$48741",
+ "typeString": "contract SimpleAccount"
+ }
+ },
+ "functionReturnParameters": 48784,
+ "id": 48850,
+ "nodeType": "Return",
+ "src": "1790:297:50"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 48773,
+ "nodeType": "StructuredDocumentation",
+ "src": "888:370:50",
+ "text": " Create an account, and return its address.\n Returns the address even if the account is already deployed.\n Note that during UserOperation execution, this method is called only if the account is not deployed.\n This method returns an existing account address so that entryPoint.getSenderAddress() would work even after account creation."
+ },
+ "functionSelector": "8375702b",
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "createAccount",
+ "nameLocation": "1272:13:50",
+ "parameters": {
+ "id": 48780,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 48777,
+ "mutability": "mutable",
+ "name": "publicKey",
+ "nameLocation": "1313:9:50",
+ "nodeType": "VariableDeclaration",
+ "scope": 48852,
+ "src": "1295:27:50",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_bytes32_$2_memory_ptr",
+ "typeString": "bytes32[2]"
+ },
+ "typeName": {
+ "baseType": {
+ "id": 48774,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "1295:7:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "id": 48776,
+ "length": {
+ "hexValue": "32",
+ "id": 48775,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1303:1:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_2_by_1",
+ "typeString": "int_const 2"
+ },
+ "value": "2"
+ },
+ "nodeType": "ArrayTypeName",
+ "src": "1295:10:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_bytes32_$2_storage_ptr",
+ "typeString": "bytes32[2]"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 48779,
+ "mutability": "mutable",
+ "name": "salt",
+ "nameLocation": "1340:4:50",
+ "nodeType": "VariableDeclaration",
+ "scope": 48852,
+ "src": "1332:12:50",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 48778,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1332:7:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1285:65:50"
+ },
+ "returnParameters": {
+ "id": 48784,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 48783,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 48852,
+ "src": "1375:13:50",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_SimpleAccount_$48741",
+ "typeString": "contract SimpleAccount"
+ },
+ "typeName": {
+ "id": 48782,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 48781,
+ "name": "SimpleAccount",
+ "nameLocations": ["1375:13:50"],
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 48741,
+ "src": "1375:13:50"
+ },
+ "referencedDeclaration": 48741,
+ "src": "1375:13:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_SimpleAccount_$48741",
+ "typeString": "contract SimpleAccount"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1374:15:50"
+ },
+ "scope": 48897,
+ "stateMutability": "payable",
+ "virtual": false,
+ "visibility": "public"
+ },
+ {
+ "id": 48896,
+ "nodeType": "FunctionDefinition",
+ "src": "2219:671:50",
+ "nodes": [],
+ "body": {
+ "id": 48895,
+ "nodeType": "Block",
+ "src": "2334:556:50",
+ "nodes": [],
+ "statements": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 48868,
+ "name": "salt",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48859,
+ "src": "2411:4:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 48867,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "2403:7:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_bytes32_$",
+ "typeString": "type(bytes32)"
+ },
+ "typeName": {
+ "id": 48866,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "2403:7:50",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 48869,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2403:13:50",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "expression": {
+ "arguments": [
+ {
+ "id": 48874,
+ "name": "ERC1967Proxy",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 46757,
+ "src": "2512:12:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_ERC1967Proxy_$46757_$",
+ "typeString": "type(contract ERC1967Proxy)"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_type$_t_contract$_ERC1967Proxy_$46757_$",
+ "typeString": "type(contract ERC1967Proxy)"
+ }
+ ],
+ "id": 48873,
+ "name": "type",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -27,
+ "src": "2507:4:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
+ "typeString": "function () pure"
+ }
+ },
+ "id": 48875,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2507:18:50",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_meta_type_t_contract$_ERC1967Proxy_$46757",
+ "typeString": "type(contract ERC1967Proxy)"
+ }
+ },
+ "id": 48876,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberLocation": "2526:12:50",
+ "memberName": "creationCode",
+ "nodeType": "MemberAccess",
+ "src": "2507:31:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 48881,
+ "name": "accountImplem",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48750,
+ "src": "2612:13:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_SimpleAccount_$48741",
+ "typeString": "contract SimpleAccount"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_SimpleAccount_$48741",
+ "typeString": "contract SimpleAccount"
+ }
+ ],
+ "id": 48880,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "2604:7:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 48879,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2604:7:50",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 48882,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2604:22:50",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "arguments": [
+ {
+ "expression": {
+ "id": 48885,
+ "name": "SimpleAccount",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48741,
+ "src": "2704:13:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_SimpleAccount_$48741_$",
+ "typeString": "type(contract SimpleAccount)"
+ }
+ },
+ "id": 48886,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberLocation": "2718:10:50",
+ "memberName": "initialize",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 48345,
+ "src": "2704:24:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_declaration_nonpayable$_t_array$_t_bytes32_$2_memory_ptr_$returns$__$",
+ "typeString": "function SimpleAccount.initialize(bytes32[2] memory)"
+ }
+ },
+ {
+ "components": [
+ {
+ "id": 48887,
+ "name": "publicKey",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 48857,
+ "src": "2763:9:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_bytes32_$2_memory_ptr",
+ "typeString": "bytes32[2] memory"
+ }
+ }
+ ],
+ "id": 48888,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "2762:11:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_bytes32_$2_memory_ptr",
+ "typeString": "bytes32[2] memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_function_declaration_nonpayable$_t_array$_t_bytes32_$2_memory_ptr_$returns$__$",
+ "typeString": "function SimpleAccount.initialize(bytes32[2] memory)"
+ },
+ {
+ "typeIdentifier": "t_array$_t_bytes32_$2_memory_ptr",
+ "typeString": "bytes32[2] memory"
+ }
+ ],
+ "expression": {
+ "id": 48883,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -1,
+ "src": "2656:3:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 48884,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberLocation": "2660:10:50",
+ "memberName": "encodeCall",
+ "nodeType": "MemberAccess",
+ "src": "2656:14:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function () pure returns (bytes memory)"
+ }
+ },
+ "id": 48889,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2656:147:50",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "expression": {
+ "id": 48877,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -1,
+ "src": "2564:3:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 48878,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberLocation": "2568:6:50",
+ "memberName": "encode",
+ "nodeType": "MemberAccess",
+ "src": "2564:10:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function () pure returns (bytes memory)"
+ }
+ },
+ "id": 48890,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2564:265:50",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "expression": {
+ "id": 48871,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -1,
+ "src": "2465:3:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 48872,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberLocation": "2469:12:50",
+ "memberName": "encodePacked",
+ "nodeType": "MemberAccess",
+ "src": "2465:16:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function () pure returns (bytes memory)"
+ }
+ },
+ "id": 48891,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2465:386:50",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ ],
+ "id": 48870,
+ "name": "keccak256",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -8,
+ "src": "2434:9:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
+ "typeString": "function (bytes memory) pure returns (bytes32)"
+ }
+ },
+ "id": 48892,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2434:435:50",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ ],
+ "expression": {
+ "id": 48864,
+ "name": "Create2",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 47934,
+ "src": "2363:7:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_Create2_$47934_$",
+ "typeString": "type(library Create2)"
+ }
+ },
+ "id": 48865,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberLocation": "2371:14:50",
+ "memberName": "computeAddress",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 47919,
+ "src": "2363:22:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
+ "typeString": "function (bytes32,bytes32) view returns (address)"
+ }
+ },
+ "id": 48893,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2363:520:50",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "functionReturnParameters": 48863,
+ "id": 48894,
+ "nodeType": "Return",
+ "src": "2344:539:50"
+ }
+ ]
+ },
+ "documentation": {
+ "id": 48853,
+ "nodeType": "StructuredDocumentation",
+ "src": "2100:114:50",
+ "text": " Calculate the counterfactual address of this account as it would be returned by createAccount()"
+ },
+ "functionSelector": "0b824849",
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getAddress",
+ "nameLocation": "2228:10:50",
+ "parameters": {
+ "id": 48860,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 48857,
+ "mutability": "mutable",
+ "name": "publicKey",
+ "nameLocation": "2266:9:50",
+ "nodeType": "VariableDeclaration",
+ "scope": 48896,
+ "src": "2248:27:50",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_bytes32_$2_memory_ptr",
+ "typeString": "bytes32[2]"
+ },
+ "typeName": {
+ "baseType": {
+ "id": 48854,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "2248:7:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "id": 48856,
+ "length": {
+ "hexValue": "32",
+ "id": 48855,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2256:1:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_2_by_1",
+ "typeString": "int_const 2"
+ },
+ "value": "2"
+ },
+ "nodeType": "ArrayTypeName",
+ "src": "2248:10:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_array$_t_bytes32_$2_storage_ptr",
+ "typeString": "bytes32[2]"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 48859,
+ "mutability": "mutable",
+ "name": "salt",
+ "nameLocation": "2293:4:50",
+ "nodeType": "VariableDeclaration",
+ "scope": 48896,
+ "src": "2285:12:50",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 48858,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "2285:7:50",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2238:65:50"
+ },
+ "returnParameters": {
+ "id": 48863,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 48862,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 48896,
+ "src": "2325:7:50",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 48861,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2325:7:50",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2324:9:50"
+ },
+ "scope": 48897,
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "public"
+ }
+ ],
+ "abstract": false,
+ "baseContracts": [],
+ "canonicalName": "SimpleAccountFactory",
+ "contractDependencies": [46757, 48741],
+ "contractKind": "contract",
+ "documentation": {
+ "id": 48747,
+ "nodeType": "StructuredDocumentation",
+ "src": "227:388:50",
+ "text": " A sample factory contract for SimpleAccount\n A UserOperations \"initCode\" holds the address of the factory, and a method call (to createAccount, in this sample factory).\n The factory's createAccount returns the target account address even if it is already installed.\n This way, the entryPoint.getSenderAddress() can be called either before or after the account is created."
+ },
+ "fullyImplemented": true,
+ "linearizedBaseContracts": [48897],
+ "name": "SimpleAccountFactory",
+ "nameLocation": "625:20:50",
+ "scope": 48898,
+ "usedErrors": [],
+ "usedEvents": []
+ }
+ ],
+ "license": "MIT"
+ },
+ "id": 50
+}
diff --git a/front/src/app/(home)/page.tsx b/front/src/app/(home)/page.tsx
index 05f1a6c..0b1e2c1 100644
--- a/front/src/app/(home)/page.tsx
+++ b/front/src/app/(home)/page.tsx
@@ -1,6 +1,8 @@
import { Box, Flex } from "@radix-ui/themes";
import SessionList from "@/components/SessionList";
import WCInput from "@/components/WCInput";
+import PassKey from "@/components/PassKey";
+import { SendTransaction } from "@/components/SendTransaction";
export default async function Home() {
return (
@@ -10,6 +12,8 @@ export default async function Home() {