diff --git a/packages/foundry/broadcast/Deploy.s.sol/480/run-1731801509.json b/packages/foundry/broadcast/Deploy.s.sol/480/run-1731801509.json new file mode 100644 index 0000000..e5db9f5 --- /dev/null +++ b/packages/foundry/broadcast/Deploy.s.sol/480/run-1731801509.json @@ -0,0 +1,104 @@ +{ + "transactions": [ + { + "hash": "0xca5135d59deb488863535f3db2ab1bc956f068f1f0ac875e006f9d78dc76eaea", + "transactionType": "CREATE", + "contractName": "Permit2Vault", + "contractAddress": "0xcae528e387997c5fa918c3d003c7a811d7c52678", + "function": null, + "arguments": [ + "0x000000000022D473030F116dDEE9F6B43aC78BA3", + "0x4639B9F663C14Bad89Ddcc16966e85Bc81dCCD40" + ], + "transaction": { + "from": "0x4639b9f663c14bad89ddcc16966e85bc81dccd40", + "gas": "0x969bf", + "value": "0x0", + "input": "0x60a0604052348015600f57600080fd5b5060405161083b38038061083b833981016040819052602c916058565b506001600160a01b03166080526086565b80516001600160a01b0381168114605357600080fd5b919050565b60008060408385031215606a57600080fd5b607183603d565b9150607d60208401603d565b90509250929050565b6080516107946100a7600039600081816081015261021c01526107946000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80635c4abd54146100675780636afdd8501461007c5780636cb5dc99146100c05780638d00e14e146100d3578063a1db97821461010c578063ad7a672f1461011f575b600080fd5b61007a610075366004610553565b610128565b005b6100a37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61007a6100ce3660046105f7565b6102d8565b6100fe6100e1366004610623565b600160209081526000928352604080842090915290825290205481565b6040519081526020016100b7565b61007a61011a3660046105f7565b6103de565b6100fe60025481565b60005460ff16156101705760405162461bcd60e51b815260206004820152600d60248201526c6e6f207265656e7472616e637960981b60448201526064015b60405180910390fd5b6000805460ff191660019081178255338252602090815260408083206001600160a01b038a168452909152812080548792906101ad908490610672565b9250508190555084600260008282546101c69190610672565b90915550506040805160a0810182526001600160a01b0388811660608301908152608083018990528252602080830188905282840187905283518085018552308152908101899052925163187945bd60e11b81527f0000000000000000000000000000000000000000000000000000000000000000909116926330f28b7a9261025a929091903390889088906004016106b4565b600060405180830381600087803b15801561027457600080fd5b505af1158015610288573d6000803e3d6000fd5b505060408051338152602081018990527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4935001905060405180910390a150506000805460ff1916905550505050565b3360009081526001602090815260408083206001600160a01b03861684529091528120805483929061030b908490610672565b9250508190555080600260008282546103249190610672565b90915550506040516317d5759960e31b8152336004820152306024820152604481018290526001600160a01b0383169063beabacc8906064016020604051808303816000875af115801561037c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a09190610722565b5060408051338152602081018390527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4910160405180910390a15050565b60005460ff16156104215760405162461bcd60e51b815260206004820152600d60248201526c6e6f207265656e7472616e637960981b6044820152606401610167565b6000805460ff191660019081178255338252602090815260408083206001600160a01b03861684529091528120805483929061045e90849061074b565b925050819055508060026000828254610477919061074b565b90915550506040516317d5759960e31b8152306004820152336024820152604481018290526001600160a01b0383169063beabacc8906064016020604051808303816000875af11580156104cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f39190610722565b5060408051338152602081018390527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5910160405180910390a150506000805460ff19169055565b6001600160a01b038116811461055057600080fd5b50565b60008060008060008060a0878903121561056c57600080fd5b86356105778161053b565b9550602087013594506040870135935060608701359250608087013567ffffffffffffffff8111156105a857600080fd5b8701601f810189136105b957600080fd5b803567ffffffffffffffff8111156105d057600080fd5b8960208284010111156105e257600080fd5b60208201935080925050509295509295509295565b6000806040838503121561060a57600080fd5b82356106158161053b565b946020939093013593505050565b6000806040838503121561063657600080fd5b82356106418161053b565b915060208301356106518161053b565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106855761068561065c565b92915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b855180516001600160a01b039081168352602091820151828401528188015160408085019190915288015160608401528651811660808401529086015160a0830152841660c082015261010060e08201819052600090610717908301848661068b565b979650505050505050565b60006020828403121561073457600080fd5b8151801515811461074457600080fd5b9392505050565b818103818111156106855761068561065c56fea264697066735822122009108a87128a945a47129ef9d308d54b1aa128b11fbde46ef27d8e150848dccb64736f6c634300081c0033000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba30000000000000000000000004639b9f663c14bad89ddcc16966e85bc81dccd40", + "nonce": "0x24", + "chainId": "0x1e0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xff70ed10aa8ee9165778735308af0c9d4a9a0131c343184a2b769a0551548300", + "transactionType": "CREATE", + "contractName": "HumanOracleV1", + "contractAddress": "0xe52e15cf6f8edaf2211f9ba011991d6b25a4436b", + "function": null, + "arguments": [ + "0x17B354dD2595411ff79041f930e491A4Df39A278", + "1", + "app_22ea9fb73d53333c2997e8f16e60cc6b", + "registration", + "0x2cFc85d8E48F8EAB294be644d9E25C3030863003", + "0xCaE528E387997C5fa918C3D003C7a811D7C52678" + ], + "transaction": { + "from": "0x4639b9f663c14bad89ddcc16966e85bc81dccd40", + "gas": "0x2270aa", + "value": "0x0", + "input": "0x60c0604052600160805234801561001557600080fd5b50604051611fef380380611fef833981016040819052610034916101f1565b600080546001600160a01b0319166001600160a01b0388161790556080859052604051869086908690869061009c9061008a90610075908590602001610295565b60408051601f198184030181529190526100dd565b826040516020016100759291906102b1565b60a0525050600680546001600160a01b039586166001600160a01b0319918216179091556007805494909516931692909217909255506102d7945050505050565b60006008826040516020016100f29190610295565b60408051601f198184030181529190528051602090910120901c92915050565b80516001600160a01b038116811461012957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561015f578181015183820152602001610147565b50506000910152565b600082601f83011261017957600080fd5b81516001600160401b038111156101925761019261012e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101c0576101c061012e565b6040528181528382016020018510156101d857600080fd5b6101e9826020830160208701610144565b949350505050565b60008060008060008060c0878903121561020a57600080fd5b61021387610112565b6020880151604089015191975095506001600160401b0381111561023657600080fd5b61024289828a01610168565b606089015190955090506001600160401b0381111561026057600080fd5b61026c89828a01610168565b93505061027b60808801610112565b915061028960a08801610112565b90509295509295509295565b600082516102a7818460208701610144565b9190910192915050565b828152600082516102c9816020850160208701610144565b919091016020019392505050565b60805160a051611cf36102fc6000396000610d6501526000610d270152611cf36000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639c1f819811610097578063c8382a3311610066578063c8382a3314610277578063d4e51d301461028a578063dca090041461029d578063fbfa77cf146102b057600080fd5b80639c1f8198146101f2578063a5260ad914610215578063a87430ba14610228578063b74207021461026457600080fd5b80635839a889116100d35780635839a8891461017c578063753e9ef01461018f5780637ccec52c146101ba57806391e40730146101cf57600080fd5b80630bfb705914610105578063163f7522146101255780633cbc2ef2146101485780634e9b9e001461015b575b600080fd5b61010d6102c3565b60405161011c9392919061157d565b60405180910390f35b6101386101333660046115d7565b610440565b604051901515815260200161011c565b6101386101563660046115f2565b610473565b61016e6101693660046115f2565b6104a3565b60405190815260200161011c565b61013861018a3660046115f2565b6104b6565b6000546101a2906001600160a01b031681565b6040516001600160a01b03909116815260200161011c565b6101cd6101c8366004611664565b6104fe565b005b61016e6101dd3660046116d7565b60036020526000908152604090206001015481565b6102056102003660046116d7565b61079f565b60405161011c94939291906116f0565b6101cd61022336600461173a565b610871565b61024f6102363660046115d7565b6001602081905260009182526040909120805491015482565b6040805192835260208301919091520161011c565b61016e6102723660046116d7565b610a55565b6101386102853660046116d7565b610bf9565b6101cd610298366004611897565b610c13565b6006546101a2906001600160a01b031681565b6007546101a2906001600160a01b031681565b606080606060006102d360045490565b9050806001600160401b038111156102ed576102ed6117f6565b604051908082528060200260200182016040528015610316578160200160208202803683370190505b509350806001600160401b03811115610331576103316117f6565b60405190808252806020026020018201604052801561036457816020015b606081526020019060019003908161034f5790505b509250806001600160401b0381111561037f5761037f6117f6565b6040519080825280602002602001820160405280156103a8578160200160208202803683370190505b50915060005b8181101561043957808582815181106103c9576103c96118e7565b6020026020010181815250506103de81610e66565b8482815181106103f0576103f06118e7565b60200260200101819052506104148160009081526003602052604090206001015490565b838281518110610426576104266118e7565b60209081029190910101526001016103ae565b5050909192565b6001600160a01b0381166000908152600160205260408120541561046657506001919050565b506000919050565b919050565b60008181526003602090815260408083206001600160a01b038616845260020190915290205460ff165b92915050565b60006104af8383610f1c565b9392505050565b60008181526003602052604081205460005b818110156104f3576104db858583610f94565b156104eb5760019250505061049d565b6001016104c8565b506000949350505050565b3360009081526001602052604081205490036105555760405162461bcd60e51b815260206004820152601160248201527075736572206e6f74206578697374696e6760781b60448201526064015b60405180910390fd5b600087815260036020526040812054889133905b828110156105d057600061057e838684610f94565b90508015156001036105c75760405162461bcd60e51b81526020600482015260126024820152711d5cd95c88185b1c9958591e481d9bdd195960721b604482015260640161054c565b50600101610569565b5089436105dc82610ff4565b11156106215760405162461bcd60e51b81526020600482015260146024820152731d9bdd19481a185cc81b9bdd081cdd185c9d195960621b604482015260640161054c565b4361062b82611022565b61063483610ff4565b61063e9190611913565b101561067d5760405162461bcd60e51b815260206004820152600e60248201526d1d9bdd19481a185cc8195b99195960921b604482015260640161054c565b60058911156106ce5760405162461bcd60e51b815260206004820152601760248201527f6d6178207374616b696e6720616d6f756e742069732035000000000000000000604482015260640161054c565b336106db818d8d8d611050565b600754600654604051631712af5560e21b81526001600160a01b0392831692635c4abd5492610719929116908e908e908e908e908e90600401611926565b600060405180830381600087803b15801561073357600080fd5b505af1158015610747573d6000803e3d6000fd5b5050604080518e8152602081018e90528f93506001600160a01b03851692507f65658daa50ece7e5d9b3c4700c400745f04137171d9d6896eed2f10437013ee7910160405180910390a3505050505050505050505050565b6060806000606060006107be8660009081526003602052604090205490565b60008781526003602052604090206001015493509050806001600160401b038111156107ec576107ec6117f6565b604051908082528060200260200182016040528015610815578160200160208202803683370190505b50915060005b818110156108525761082d878261110e565b83828151811061083f5761083f6118e7565b602090810291909101015260010161081b565b5061085c86610e66565b61086587611148565b94509450509193509193565b6004546040805160a08101825282815281516020601f8b0181900481028201810190935289815260009280830191908c908c90819084018382808284376000920191909152505050908252506020016108ca888a611979565b81526020808201889052604090910186905260048054600181018255600091909152825160059091027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b810191825591830151929350839290917f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c01906109519082611a97565b506040820151805161096d9160028401916020909101906113d0565b506060820151816003015560808201518160040155505061098e8284611245565b600754600654604051636cb5dc9960e01b81526001600160a01b03918216600482015260248101869052911690636cb5dc9990604401600060405180830381600087803b1580156109de57600080fd5b505af11580156109f2573d6000803e3d6000fd5b50505050817f6912e5abe531ca5f3b6f973f97278ab6731cdec0178a7b3c2c7a5822a3f1732b610a2184610e66565b610a2a85610ff4565b610a3386611022565b604051610a4293929190611b55565b60405180910390a2505050505050505050565b60008143610a6282611022565b610a6b83610ff4565b610a759190611913565b10610ab65760405162461bcd60e51b8152602060048201526011602482015270766f7465207374696c6c2061637469766560781b604482015260640161054c565b33610ac18185610473565b15610b055760405162461bcd60e51b81526020600482015260146024820152731d5cd95c88185b1c9958591e4818db185a5b595960621b604482015260640161054c565b60008481526003602090815260408083206001600160a01b03851684526002019091529020805460ff191660011790556000610b418286610f1c565b6007546006546040516350edcbc160e11b81526001600160a01b03918216600482015260248101849052929350169063a1db978290604401600060405180830381600087803b158015610b9357600080fd5b505af1158015610ba7573d6000803e3d6000fd5b5050505084826001600160a01b03167ff01da32686223933d8a18a391060918c7f11a3648639edd87ae013e2e273174383604051610be791815260200190565b60405180910390a39250505b50919050565b6000610c04826112df565b43111561046657506001919050565b3360009081526001602052604090205415610c695760405162461bcd60e51b815260206004820152601660248201527507573657220616c7265616479207369676e65642075760541b604482015260640161054c565b6000339050600080600084806020019051810190610c879190611b7a565b600082815260026020526040902054929550909350915060ff161515600103610cf25760405162461bcd60e51b815260206004820152601e60248201527f6e756c6c69666965724861736820616c7265616479206578697374696e670000604482015260640161054c565b6000546040516bffffffffffffffffffffffff19606087901b1660208201526001600160a01b0390911690633bc778e39085907f000000000000000000000000000000000000000000000000000000000000000090610d62906034016040516020818303038152906040526112fd565b867f0000000000000000000000000000000000000000000000000000000000000000876040518763ffffffff1660e01b8152600401610da696959493929190611c0f565b60006040518083038186803b158015610dbe57600080fd5b505afa158015610dd2573d6000803e3d6000fd5b5050506000838152600260209081526040808320805460ff1916600190811790915581518083018352878152438185019081526001600160a01b038b168087528386529584902082518082559151930183905583519081529384019190915293507f47c8e83729a89f8b0c23b722e4c21f48295ddfcd683910c564e11e6b6037d01c910160405180910390a2505050505050565b606060048281548110610e7b57610e7b6118e7565b90600052602060002090600502016001018054610e9790611a14565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec390611a14565b8015610f105780601f10610ee557610100808354040283529160200191610f10565b820191906000526020600020905b815481529060010190602001808311610ef357829003601f168201915b50505050509050919050565b600080610f2883611332565b9050610f35848483610f94565b610f4357600091505061049d565b6000610f5085858461137e565b600085815260036020526040812060010154919250610f6f868561110e565b9050600083610f7e8385611c68565b610f889190611c8a565b98975050505050505050565b6000828152600360205260408120805483908110610fb457610fb46118e7565b600091825260208083206001600160a01b03881684526001600290930201919091019052604090205415610fea575060016104af565b5060009392505050565b600060048281548110611009576110096118e7565b9060005260206000209060050201600301549050919050565b600060048281548110611037576110376118e7565b9060005260206000209060050201600401549050919050565b6000838152600360205260409020805482919084908110611073576110736118e7565b600091825260208083206001600160a01b0389168452600160029093020191909101815260408083209390935585825260039052208054829190849081106110bd576110bd6118e7565b906000526020600020906002020160000160008282546110dd9190611913565b909155505060008381526003602052604081206001018054839290611103908490611913565b909155505050505050565b600082815260036020526040812080548390811061112e5761112e6118e7565b906000526020600020906002020160000154905092915050565b60606004828154811061115d5761115d6118e7565b9060005260206000209060050201600201805480602002602001604051908101604052809291908181526020016000905b8282101561123a5783829060005260206000200180546111ad90611a14565b80601f01602080910402602001604051908101604052809291908181526020018280546111d990611a14565b80156112265780601f106111fb57610100808354040283529160200191611226565b820191906000526020600020905b81548152906001019060200180831161120957829003601f168201915b50505050508152602001906001019061118e565b505050509050919050565b6000828152600360205260408120600181018390556004805491929185908110611271576112716118e7565b6000918252602082206002600590920201015491506112908285611c68565b905060005b828110156112d7578354600101808555600085905282908590839081106112be576112be6118e7565b6000918252602090912060029091020155600101611295565b505050505050565b60006112ea82611022565b6112f383610ff4565b61049d9190611913565b60006008826040516020016113129190611ca1565b60408051601f198184030181529190528051602090910120901c92915050565b60008181526003602052604081205460008060005b8381101561137557600061135b878361110e565b90508084101561136c578093508192505b50600101611347565b50949350505050565b600082815260036020526040812080548390811061139e5761139e6118e7565b600091825260208083206001600160a01b03881684526001600290930201919091019052604090205490509392505050565b828054828255906000526020600020908101928215611416579160200282015b8281111561141657825182906114069082611a97565b50916020019190600101906113f0565b50611422929150611426565b5090565b8082111561142257600061143a8282611443565b50600101611426565b50805461144f90611a14565b6000825580601f1061145f575050565b601f01602090049060005260206000209081019061147d9190611480565b50565b5b808211156114225760008155600101611481565b600081518084526020840193506020830160005b828110156114c75781518652602095860195909101906001016114a9565b5093949350505050565b60005b838110156114ec5781810151838201526020016114d4565b50506000910152565b6000815180845261150d8160208601602086016114d1565b601f01601f19169290920160200192915050565b600082825180855260208501945060208160051b8301016020850160005b8381101561157157601f1985840301885261155b8383516114f5565b602098890198909350919091019060010161153f565b50909695505050505050565b6060815260006115906060830186611495565b82810360208401526115a28186611521565b905082810360408401526115b68185611495565b9695505050505050565b80356001600160a01b038116811461046e57600080fd5b6000602082840312156115e957600080fd5b6104af826115c0565b6000806040838503121561160557600080fd5b61160e836115c0565b946020939093013593505050565b60008083601f84011261162e57600080fd5b5081356001600160401b0381111561164557600080fd5b60208301915083602082850101111561165d57600080fd5b9250929050565b600080600080600080600060c0888a03121561167f57600080fd5b873596506020880135955060408801359450606088013593506080880135925060a08801356001600160401b038111156116b857600080fd5b6116c48a828b0161161c565b989b979a50959850939692959293505050565b6000602082840312156116e957600080fd5b5035919050565b60808152600061170360808301876114f5565b82810360208401526117158187611521565b9050846040840152828103606084015261172f8185611495565b979650505050505050565b600080600080600080600060a0888a03121561175557600080fd5b87356001600160401b0381111561176b57600080fd5b6117778a828b0161161c565b90985096505060208801356001600160401b0381111561179657600080fd5b8801601f81018a136117a757600080fd5b80356001600160401b038111156117bd57600080fd5b8a60208260051b84010111156117d257600080fd5b979a9699506020019760408101359660608201359650608090910135945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611834576118346117f6565b604052919050565b6000806001600160401b03841115611856576118566117f6565b50601f8301601f191660200161186b8161180c565b91505082815283838301111561188057600080fd5b828260208301376000602084830101529392505050565b6000602082840312156118a957600080fd5b81356001600160401b038111156118bf57600080fd5b8201601f810184136118d057600080fd5b6118df8482356020840161183c565b949350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561049d5761049d6118fd565b60018060a01b038716815285602082015284604082015283606082015260a060808201528160a0820152818360c0830137600081830160c090810191909152601f909201601f1916010195945050505050565b60006001600160401b03831115611992576119926117f6565b8260051b6119a26020820161180c565b848152908301906020810190368311156119bb57600080fd5b845b83811015611a0a5780356001600160401b038111156119db57600080fd5b860136601f8201126119ec57600080fd5b6119fb3682356020840161183c565b845250602092830192016119bd565b5095945050505050565b600181811c90821680611a2857607f821691505b602082108103610bf357634e487b7160e01b600052602260045260246000fd5b601f821115611a9257806000526020600020601f840160051c81016020851015611a6f5750805b601f840160051c820191505b81811015611a8f5760008155600101611a7b565b50505b505050565b81516001600160401b03811115611ab057611ab06117f6565b611ac481611abe8454611a14565b84611a48565b6020601f821160018114611af85760008315611ae05750848201515b600019600385901b1c1916600184901b178455611a8f565b600084815260208120601f198516915b82811015611b285787850151825560209485019460019092019101611b08565b5084821015611b465786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b606081526000611b6860608301866114f5565b60208301949094525060400152919050565b60008060006101408486031215611b9057600080fd5b835160208501519093509150605f84018513611bab57600080fd5b60405161010081016001600160401b0381118282101715611bce57611bce6117f6565b60405280610140860187811115611be457600080fd5b604087015b81811015611c01578051835260209283019201611be9565b505050809150509250925092565b60006101a08201905087825286602083015285604083015284606083015283608083015260a082018360005b6008811015611c5a578151835260209283019290910190600101611c3b565b505050979650505050505050565b600082611c8557634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761049d5761049d6118fd565b60008251611cb38184602087016114d1565b919091019291505056fea2646970667358221220df2cc3a2d28c7afe093dd2ff0fbd1af3105ef7382aaac544e420ed168b303cf564736f6c634300081c003300000000000000000000000017b354dd2595411ff79041f930e491a4df39a278000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001200000000000000000000000002cfc85d8e48f8eab294be644d9e25c3030863003000000000000000000000000cae528e387997c5fa918c3d003c7a811d7c5267800000000000000000000000000000000000000000000000000000000000000246170705f323265613966623733643533333333633239393765386631366536306363366200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c726567697374726174696f6e0000000000000000000000000000000000000000", + "nonce": "0x25", + "chainId": "0x1e0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x7e99e", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xca5135d59deb488863535f3db2ab1bc956f068f1f0ac875e006f9d78dc76eaea", + "transactionIndex": "0x1", + "blockHash": "0xe5bebde4be655286d6d06b90dcf354c30b3599e103bf147261e440075e9e4b5a", + "blockNumber": "0x5f1b65", + "gasUsed": "0x73e2f", + "effectiveGasPrice": "0xf433e", + "blobGasUsed": "0x0", + "from": "0x4639b9f663c14bad89ddcc16966e85bc81dccd40", + "to": null, + "contractAddress": "0xcae528e387997c5fa918c3d003c7a811d7c52678", + "l1BaseFeeScalar": "0x21f9", + "l1BlobBaseFee": "0xd2be11b5", + "l1BlobBaseFeeScalar": "0xc5f4f", + "l1Fee": "0x4e233d5bf7b", + "l1GasPrice": "0x210d3ec6b", + "l1GasUsed": "0x51d3" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1b2b92", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xff70ed10aa8ee9165778735308af0c9d4a9a0131c343184a2b769a0551548300", + "transactionIndex": "0x1", + "blockHash": "0x636e9966f16a552cd0f83f958a56cad661bdc871567d0f83f0e70edeb82fb7f1", + "blockNumber": "0x5f1b66", + "gasUsed": "0x1a8023", + "effectiveGasPrice": "0xf433e", + "blobGasUsed": "0x0", + "from": "0x4639b9f663c14bad89ddcc16966e85bc81dccd40", + "to": null, + "contractAddress": "0xe52e15cf6f8edaf2211f9ba011991d6b25a4436b", + "l1BaseFeeScalar": "0x21f9", + "l1BlobBaseFee": "0xd2be11b5", + "l1BlobBaseFeeScalar": "0xc5f4f", + "l1Fee": "0x12251fcc0778", + "l1GasPrice": "0x210d3ec6b", + "l1GasUsed": "0x13005" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1731801509, + "chain": 480, + "commit": "b87658e" +} \ No newline at end of file diff --git a/packages/foundry/broadcast/Deploy.s.sol/480/run-1731802914.json b/packages/foundry/broadcast/Deploy.s.sol/480/run-1731802914.json new file mode 100644 index 0000000..a932563 --- /dev/null +++ b/packages/foundry/broadcast/Deploy.s.sol/480/run-1731802914.json @@ -0,0 +1,104 @@ +{ + "transactions": [ + { + "hash": "0xefaaf17d36b01ff0a966cf1f227826b97cbebaa574eccc98add4d3df2f3f99e2", + "transactionType": "CREATE", + "contractName": "Permit2Vault", + "contractAddress": "0x3845eb1554913bdbd58f7c7cdedc45f03a1e54fd", + "function": null, + "arguments": [ + "0x000000000022D473030F116dDEE9F6B43aC78BA3", + "0x4639B9F663C14Bad89Ddcc16966e85Bc81dCCD40" + ], + "transaction": { + "from": "0x4639b9f663c14bad89ddcc16966e85bc81dccd40", + "gas": "0x9be1f", + "value": "0x0", + "input": "0x60a0604052348015600f57600080fd5b50604051610888380380610888833981016040819052602c916058565b506001600160a01b03166080526086565b80516001600160a01b0381168114605357600080fd5b919050565b60008060408385031215606a57600080fd5b607183603d565b9150607d60208401603d565b90509250929050565b6080516107e16100a7600039600081816094015261021e01526107e16000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80633cb8baa01461006757806344004cc11461007c5780636afdd8501461008f57806377ed9c79146100d35780638d00e14e146100e6578063ad7a672f1461011f575b600080fd5b61007a610075366004610577565b610128565b005b61007a61008a36600461062f565b6102e4565b6100b67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61007a6100e136600461062f565b610449565b6101116100f4366004610670565b600160209081526000928352604080842090915290825290205481565b6040519081526020016100ca565b61011160025481565b60005460ff16156101705760405162461bcd60e51b815260206004820152600d60248201526c6e6f207265656e7472616e637960981b60448201526064015b60405180910390fd5b6000805460ff1916600190811782556001600160a01b03808a16835260209182526040808420918a1684529152812080548792906101af9084906106bf565b9250508190555084600260008282546101c891906106bf565b90915550506040805160a0810182526001600160a01b0388811660608301908152608083018990528252602080830188905282840187905283518085018552308152908101899052925163187945bd60e11b81527f0000000000000000000000000000000000000000000000000000000000000000909116926330f28b7a9261025c929091908c9088908890600401610701565b600060405180830381600087803b15801561027657600080fd5b505af115801561028a573d6000803e3d6000fd5b5050604080516001600160a01b038b168152602081018990527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4935001905060405180910390a150506000805460ff191690555050505050565b60005460ff16156103275760405162461bcd60e51b815260206004820152600d60248201526c6e6f207265656e7472616e637960981b6044820152606401610167565b6000805460ff1916600190811782556001600160a01b03808616835260209182526040808420918616845291528120805483929061036690849061076f565b92505081905550806002600082825461037f919061076f565b909155505060405163a9059cbb60e01b81526001600160a01b0384811660048301526024820183905283169063a9059cbb906044016020604051808303816000875af11580156103d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f79190610782565b50604080516001600160a01b0385168152602081018390527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5910160405180910390a150506000805460ff1916905550565b6001600160a01b038084166000908152600160209081526040808320938616835292905290812080548392906104809084906106bf565b92505081905550806002600082825461049991906106bf565b90915550506040516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018390528316906323b872dd906064016020604051808303816000875af11580156104f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105179190610782565b50604080516001600160a01b0385168152602081018390527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4910160405180910390a1505050565b6001600160a01b038116811461057457600080fd5b50565b600080600080600080600060c0888a03121561059257600080fd5b873561059d8161055f565b965060208801356105ad8161055f565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff8111156105de57600080fd5b8801601f81018a136105ef57600080fd5b803567ffffffffffffffff81111561060657600080fd5b8a602082840101111561061857600080fd5b602082019350809250505092959891949750929550565b60008060006060848603121561064457600080fd5b833561064f8161055f565b9250602084013561065f8161055f565b929592945050506040919091013590565b6000806040838503121561068357600080fd5b823561068e8161055f565b9150602083013561069e8161055f565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106d2576106d26106a9565b92915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b855180516001600160a01b039081168352602091820151828401528188015160408085019190915288015160608401528651811660808401529086015160a0830152841660c082015261010060e0820181905260009061076490830184866106d8565b979650505050505050565b818103818111156106d2576106d26106a9565b60006020828403121561079457600080fd5b815180151581146107a457600080fd5b939250505056fea26469706673582212201f7c4dda7a75705107b64fe8aa1d350bf66f7066d464f85c7e9ed3afc942e78164736f6c634300081c0033000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba30000000000000000000000004639b9f663c14bad89ddcc16966e85bc81dccd40", + "nonce": "0x26", + "chainId": "0x1e0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x69f0d7d56554ab4221cd9fe7fe45403405ef30efdc7ccb4fe6f9b84910cbbfe3", + "transactionType": "CREATE", + "contractName": "HumanOracleV1", + "contractAddress": "0x03d9858aa5c3a8e79560e833827e6a096643e061", + "function": null, + "arguments": [ + "0x17B354dD2595411ff79041f930e491A4Df39A278", + "1", + "app_22ea9fb73d53333c2997e8f16e60cc6b", + "registration", + "0x2cFc85d8E48F8EAB294be644d9E25C3030863003", + "0x3845eB1554913BDbd58F7C7CdeDc45f03A1E54fd" + ], + "transaction": { + "from": "0x4639b9f663c14bad89ddcc16966e85bc81dccd40", + "gas": "0x229295", + "value": "0x0", + "input": "0x60c0604052600160805234801561001557600080fd5b5060405161200e38038061200e833981016040819052610034916101f1565b600080546001600160a01b0319166001600160a01b0388161790556080859052604051869086908690869061009c9061008a90610075908590602001610295565b60408051601f198184030181529190526100dd565b826040516020016100759291906102b1565b60a0525050600680546001600160a01b039586166001600160a01b0319918216179091556007805494909516931692909217909255506102d7945050505050565b60006008826040516020016100f29190610295565b60408051601f198184030181529190528051602090910120901c92915050565b80516001600160a01b038116811461012957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561015f578181015183820152602001610147565b50506000910152565b600082601f83011261017957600080fd5b81516001600160401b038111156101925761019261012e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101c0576101c061012e565b6040528181528382016020018510156101d857600080fd5b6101e9826020830160208701610144565b949350505050565b60008060008060008060c0878903121561020a57600080fd5b61021387610112565b6020880151604089015191975095506001600160401b0381111561023657600080fd5b61024289828a01610168565b606089015190955090506001600160401b0381111561026057600080fd5b61026c89828a01610168565b93505061027b60808801610112565b915061028960a08801610112565b90509295509295509295565b600082516102a7818460208701610144565b9190910192915050565b828152600082516102c9816020850160208701610144565b919091016020019392505050565b60805160a051611d126102fc6000396000610d7601526000610d380152611d126000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639c1f819811610097578063c8382a3311610066578063c8382a3314610277578063d4e51d301461028a578063dca090041461029d578063fbfa77cf146102b057600080fd5b80639c1f8198146101f2578063a5260ad914610215578063a87430ba14610228578063b74207021461026457600080fd5b80635839a889116100d35780635839a8891461017c578063753e9ef01461018f5780637ccec52c146101ba57806391e40730146101cf57600080fd5b80630bfb705914610105578063163f7522146101255780633cbc2ef2146101485780634e9b9e001461015b575b600080fd5b61010d6102c3565b60405161011c9392919061158e565b60405180910390f35b6101386101333660046115e8565b610440565b604051901515815260200161011c565b610138610156366004611603565b610473565b61016e610169366004611603565b6104a3565b60405190815260200161011c565b61013861018a366004611603565b6104b6565b6000546101a2906001600160a01b031681565b6040516001600160a01b03909116815260200161011c565b6101cd6101c8366004611675565b6104fe565b005b61016e6101dd3660046116e8565b60036020526000908152604090206001015481565b6102056102003660046116e8565b6107a2565b60405161011c9493929190611701565b6101cd61022336600461174b565b610874565b61024f6102363660046115e8565b6001602081905260009182526040909120805491015482565b6040805192835260208301919091520161011c565b61016e6102723660046116e8565b610a5e565b6101386102853660046116e8565b610c0a565b6101cd6102983660046118a8565b610c24565b6006546101a2906001600160a01b031681565b6007546101a2906001600160a01b031681565b606080606060006102d360045490565b9050806001600160401b038111156102ed576102ed611807565b604051908082528060200260200182016040528015610316578160200160208202803683370190505b509350806001600160401b0381111561033157610331611807565b60405190808252806020026020018201604052801561036457816020015b606081526020019060019003908161034f5790505b509250806001600160401b0381111561037f5761037f611807565b6040519080825280602002602001820160405280156103a8578160200160208202803683370190505b50915060005b8181101561043957808582815181106103c9576103c96118f8565b6020026020010181815250506103de81610e77565b8482815181106103f0576103f06118f8565b60200260200101819052506104148160009081526003602052604090206001015490565b838281518110610426576104266118f8565b60209081029190910101526001016103ae565b5050909192565b6001600160a01b0381166000908152600160205260408120541561046657506001919050565b506000919050565b919050565b60008181526003602090815260408083206001600160a01b038616845260020190915290205460ff165b92915050565b60006104af8383610f2d565b9392505050565b60008181526003602052604081205460005b818110156104f3576104db858583610fa5565b156104eb5760019250505061049d565b6001016104c8565b506000949350505050565b3360009081526001602052604081205490036105555760405162461bcd60e51b815260206004820152601160248201527075736572206e6f74206578697374696e6760781b60448201526064015b60405180910390fd5b600087815260036020526040812054889133905b828110156105d057600061057e838684610fa5565b90508015156001036105c75760405162461bcd60e51b81526020600482015260126024820152711d5cd95c88185b1c9958591e481d9bdd195960721b604482015260640161054c565b50600101610569565b5089436105dc82611005565b11156106215760405162461bcd60e51b81526020600482015260146024820152731d9bdd19481a185cc81b9bdd081cdd185c9d195960621b604482015260640161054c565b4361062b82611033565b61063483611005565b61063e9190611924565b101561067d5760405162461bcd60e51b815260206004820152600e60248201526d1d9bdd19481a185cc8195b99195960921b604482015260640161054c565b60058911156106ce5760405162461bcd60e51b815260206004820152601760248201527f6d6178207374616b696e6720616d6f756e742069732035000000000000000000604482015260640161054c565b336106db818d8d8d611061565b6007546006546040516301e5c5d560e51b81526001600160a01b0392831692633cb8baa09261071c928692909116908f908f908f908f908f90600401611937565b600060405180830381600087803b15801561073657600080fd5b505af115801561074a573d6000803e3d6000fd5b5050604080518e8152602081018e90528f93506001600160a01b03851692507f65658daa50ece7e5d9b3c4700c400745f04137171d9d6896eed2f10437013ee7910160405180910390a3505050505050505050505050565b6060806000606060006107c18660009081526003602052604090205490565b60008781526003602052604090206001015493509050806001600160401b038111156107ef576107ef611807565b604051908082528060200260200182016040528015610818578160200160208202803683370190505b50915060005b8181101561085557610830878261111f565b838281518110610842576108426118f8565b602090810291909101015260010161081e565b5061085f86610e77565b61086887611159565b94509450509193509193565b6004546040805160a08101825282815281516020601f8b0181900481028201810190935289815260009280830191908c908c90819084018382808284376000920191909152505050908252506020016108cd888a611998565b81526020808201889052604090910186905260048054600181018255600091909152825160059091027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b810191825591830151929350839290917f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c01906109549082611ab6565b50604082015180516109709160028401916020909101906113e1565b50606082015181600301556080820151816004015550506109918284611256565b6007546006546040516377ed9c7960e01b81523360048201526001600160a01b039182166024820152604481018690529116906377ed9c7990606401600060405180830381600087803b1580156109e757600080fd5b505af11580156109fb573d6000803e3d6000fd5b50505050817f6912e5abe531ca5f3b6f973f97278ab6731cdec0178a7b3c2c7a5822a3f1732b610a2a84610e77565b610a3385611005565b610a3c86611033565b604051610a4b93929190611b74565b60405180910390a2505050505050505050565b60008143610a6b82611033565b610a7483611005565b610a7e9190611924565b10610abf5760405162461bcd60e51b8152602060048201526011602482015270766f7465207374696c6c2061637469766560781b604482015260640161054c565b33610aca8185610473565b15610b0e5760405162461bcd60e51b81526020600482015260146024820152731d5cd95c88185b1c9958591e4818db185a5b595960621b604482015260640161054c565b60008481526003602090815260408083206001600160a01b03851684526002019091529020805460ff191660011790556000610b4a8286610f2d565b6007546006546040516344004cc160e01b81526001600160a01b03868116600483015291821660248201526044810184905292935016906344004cc190606401600060405180830381600087803b158015610ba457600080fd5b505af1158015610bb8573d6000803e3d6000fd5b5050505084826001600160a01b03167ff01da32686223933d8a18a391060918c7f11a3648639edd87ae013e2e273174383604051610bf891815260200190565b60405180910390a39250505b50919050565b6000610c15826112f0565b43111561046657506001919050565b3360009081526001602052604090205415610c7a5760405162461bcd60e51b815260206004820152601660248201527507573657220616c7265616479207369676e65642075760541b604482015260640161054c565b6000339050600080600084806020019051810190610c989190611b99565b600082815260026020526040902054929550909350915060ff161515600103610d035760405162461bcd60e51b815260206004820152601e60248201527f6e756c6c69666965724861736820616c7265616479206578697374696e670000604482015260640161054c565b6000546040516bffffffffffffffffffffffff19606087901b1660208201526001600160a01b0390911690633bc778e39085907f000000000000000000000000000000000000000000000000000000000000000090610d739060340160405160208183030381529060405261130e565b867f0000000000000000000000000000000000000000000000000000000000000000876040518763ffffffff1660e01b8152600401610db796959493929190611c2e565b60006040518083038186803b158015610dcf57600080fd5b505afa158015610de3573d6000803e3d6000fd5b5050506000838152600260209081526040808320805460ff1916600190811790915581518083018352878152438185019081526001600160a01b038b168087528386529584902082518082559151930183905583519081529384019190915293507f47c8e83729a89f8b0c23b722e4c21f48295ddfcd683910c564e11e6b6037d01c910160405180910390a2505050505050565b606060048281548110610e8c57610e8c6118f8565b90600052602060002090600502016001018054610ea890611a33565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed490611a33565b8015610f215780601f10610ef657610100808354040283529160200191610f21565b820191906000526020600020905b815481529060010190602001808311610f0457829003601f168201915b50505050509050919050565b600080610f3983611343565b9050610f46848483610fa5565b610f5457600091505061049d565b6000610f6185858461138f565b600085815260036020526040812060010154919250610f80868561111f565b9050600083610f8f8385611c87565b610f999190611ca9565b98975050505050505050565b6000828152600360205260408120805483908110610fc557610fc56118f8565b600091825260208083206001600160a01b03881684526001600290930201919091019052604090205415610ffb575060016104af565b5060009392505050565b60006004828154811061101a5761101a6118f8565b9060005260206000209060050201600301549050919050565b600060048281548110611048576110486118f8565b9060005260206000209060050201600401549050919050565b6000838152600360205260409020805482919084908110611084576110846118f8565b600091825260208083206001600160a01b0389168452600160029093020191909101815260408083209390935585825260039052208054829190849081106110ce576110ce6118f8565b906000526020600020906002020160000160008282546110ee9190611924565b909155505060008381526003602052604081206001018054839290611114908490611924565b909155505050505050565b600082815260036020526040812080548390811061113f5761113f6118f8565b906000526020600020906002020160000154905092915050565b60606004828154811061116e5761116e6118f8565b9060005260206000209060050201600201805480602002602001604051908101604052809291908181526020016000905b8282101561124b5783829060005260206000200180546111be90611a33565b80601f01602080910402602001604051908101604052809291908181526020018280546111ea90611a33565b80156112375780601f1061120c57610100808354040283529160200191611237565b820191906000526020600020905b81548152906001019060200180831161121a57829003601f168201915b50505050508152602001906001019061119f565b505050509050919050565b6000828152600360205260408120600181018390556004805491929185908110611282576112826118f8565b6000918252602082206002600590920201015491506112a18285611c87565b905060005b828110156112e8578354600101808555600085905282908590839081106112cf576112cf6118f8565b60009182526020909120600290910201556001016112a6565b505050505050565b60006112fb82611033565b61130483611005565b61049d9190611924565b60006008826040516020016113239190611cc0565b60408051601f198184030181529190528051602090910120901c92915050565b60008181526003602052604081205460008060005b8381101561138657600061136c878361111f565b90508084101561137d578093508192505b50600101611358565b50949350505050565b60008281526003602052604081208054839081106113af576113af6118f8565b600091825260208083206001600160a01b03881684526001600290930201919091019052604090205490509392505050565b828054828255906000526020600020908101928215611427579160200282015b8281111561142757825182906114179082611ab6565b5091602001919060010190611401565b50611433929150611437565b5090565b8082111561143357600061144b8282611454565b50600101611437565b50805461146090611a33565b6000825580601f10611470575050565b601f01602090049060005260206000209081019061148e9190611491565b50565b5b808211156114335760008155600101611492565b600081518084526020840193506020830160005b828110156114d85781518652602095860195909101906001016114ba565b5093949350505050565b60005b838110156114fd5781810151838201526020016114e5565b50506000910152565b6000815180845261151e8160208601602086016114e2565b601f01601f19169290920160200192915050565b600082825180855260208501945060208160051b8301016020850160005b8381101561158257601f1985840301885261156c838351611506565b6020988901989093509190910190600101611550565b50909695505050505050565b6060815260006115a160608301866114a6565b82810360208401526115b38186611532565b905082810360408401526115c781856114a6565b9695505050505050565b80356001600160a01b038116811461046e57600080fd5b6000602082840312156115fa57600080fd5b6104af826115d1565b6000806040838503121561161657600080fd5b61161f836115d1565b946020939093013593505050565b60008083601f84011261163f57600080fd5b5081356001600160401b0381111561165657600080fd5b60208301915083602082850101111561166e57600080fd5b9250929050565b600080600080600080600060c0888a03121561169057600080fd5b873596506020880135955060408801359450606088013593506080880135925060a08801356001600160401b038111156116c957600080fd5b6116d58a828b0161162d565b989b979a50959850939692959293505050565b6000602082840312156116fa57600080fd5b5035919050565b6080815260006117146080830187611506565b82810360208401526117268187611532565b9050846040840152828103606084015261174081856114a6565b979650505050505050565b600080600080600080600060a0888a03121561176657600080fd5b87356001600160401b0381111561177c57600080fd5b6117888a828b0161162d565b90985096505060208801356001600160401b038111156117a757600080fd5b8801601f81018a136117b857600080fd5b80356001600160401b038111156117ce57600080fd5b8a60208260051b84010111156117e357600080fd5b979a9699506020019760408101359660608201359650608090910135945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561184557611845611807565b604052919050565b6000806001600160401b0384111561186757611867611807565b50601f8301601f191660200161187c8161181d565b91505082815283838301111561189157600080fd5b828260208301376000602084830101529392505050565b6000602082840312156118ba57600080fd5b81356001600160401b038111156118d057600080fd5b8201601f810184136118e157600080fd5b6118f08482356020840161184d565b949350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561049d5761049d61190e565b6001600160a01b0388811682528716602082015260408101869052606081018590526080810184905260c060a082018190528101829052818360e0830137600081830160e090810191909152601f909201601f191601019695505050505050565b60006001600160401b038311156119b1576119b1611807565b8260051b6119c16020820161181d565b848152908301906020810190368311156119da57600080fd5b845b83811015611a295780356001600160401b038111156119fa57600080fd5b860136601f820112611a0b57600080fd5b611a1a3682356020840161184d565b845250602092830192016119dc565b5095945050505050565b600181811c90821680611a4757607f821691505b602082108103610c0457634e487b7160e01b600052602260045260246000fd5b601f821115611ab157806000526020600020601f840160051c81016020851015611a8e5750805b601f840160051c820191505b81811015611aae5760008155600101611a9a565b50505b505050565b81516001600160401b03811115611acf57611acf611807565b611ae381611add8454611a33565b84611a67565b6020601f821160018114611b175760008315611aff5750848201515b600019600385901b1c1916600184901b178455611aae565b600084815260208120601f198516915b82811015611b475787850151825560209485019460019092019101611b27565b5084821015611b655786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b606081526000611b876060830186611506565b60208301949094525060400152919050565b60008060006101408486031215611baf57600080fd5b835160208501519093509150605f84018513611bca57600080fd5b60405161010081016001600160401b0381118282101715611bed57611bed611807565b60405280610140860187811115611c0357600080fd5b604087015b81811015611c20578051835260209283019201611c08565b505050809150509250925092565b60006101a08201905087825286602083015285604083015284606083015283608083015260a082018360005b6008811015611c79578151835260209283019290910190600101611c5a565b505050979650505050505050565b600082611ca457634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761049d5761049d61190e565b60008251611cd28184602087016114e2565b919091019291505056fea2646970667358221220a82a9d5b7954e7a9b656aac9f44a203e323015c2e50d507a802f8b8162b24a0d64736f6c634300081c003300000000000000000000000017b354dd2595411ff79041f930e491a4df39a278000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001200000000000000000000000002cfc85d8e48f8eab294be644d9e25c30308630030000000000000000000000003845eb1554913bdbd58f7c7cdedc45f03a1e54fd00000000000000000000000000000000000000000000000000000000000000246170705f323265613966623733643533333333633239393765386631366536306363366200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c726567697374726174696f6e0000000000000000000000000000000000000000", + "nonce": "0x27", + "chainId": "0x1e0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xac7e4", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xefaaf17d36b01ff0a966cf1f227826b97cbebaa574eccc98add4d3df2f3f99e2", + "transactionIndex": "0x3", + "blockHash": "0x78126de80736bb6caa367ead910229185a8b349d76f325c3538bb89424cae41f", + "blockNumber": "0x5f1e24", + "gasUsed": "0x77f1c", + "effectiveGasPrice": "0xf4340", + "blobGasUsed": "0x0", + "from": "0x4639b9f663c14bad89ddcc16966e85bc81dccd40", + "to": null, + "contractAddress": "0x3845eb1554913bdbd58f7c7cdedc45f03a1e54fd", + "l1BaseFeeScalar": "0x21f9", + "l1BlobBaseFee": "0x8e500c22", + "l1BlobBaseFeeScalar": "0xc5f4f", + "l1Fee": "0x41d8fa33a77", + "l1GasPrice": "0x24789b7c4", + "l1GasUsed": "0x55be" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x256220", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x69f0d7d56554ab4221cd9fe7fe45403405ef30efdc7ccb4fe6f9b84910cbbfe3", + "transactionIndex": "0x4", + "blockHash": "0x78126de80736bb6caa367ead910229185a8b349d76f325c3538bb89424cae41f", + "blockNumber": "0x5f1e24", + "gasUsed": "0x1a9a3c", + "effectiveGasPrice": "0xf4340", + "blobGasUsed": "0x0", + "from": "0x4639b9f663c14bad89ddcc16966e85bc81dccd40", + "to": null, + "contractAddress": "0x03d9858aa5c3a8e79560e833827e6a096643e061", + "l1BaseFeeScalar": "0x21f9", + "l1BlobBaseFee": "0x8e500c22", + "l1BlobBaseFeeScalar": "0xc5f4f", + "l1Fee": "0xea8d73f9b40", + "l1GasPrice": "0x24789b7c4", + "l1GasUsed": "0x1316e" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1731802914, + "chain": 480, + "commit": "b87658e" +} \ No newline at end of file diff --git a/packages/foundry/broadcast/Deploy.s.sol/480/run-latest.json b/packages/foundry/broadcast/Deploy.s.sol/480/run-latest.json index 219199b..a932563 100644 --- a/packages/foundry/broadcast/Deploy.s.sol/480/run-latest.json +++ b/packages/foundry/broadcast/Deploy.s.sol/480/run-latest.json @@ -1,10 +1,10 @@ { "transactions": [ { - "hash": "0x260ca8840d7abe1bb87776946027897936e92de96eb78958e4edad990b7c5812", + "hash": "0xefaaf17d36b01ff0a966cf1f227826b97cbebaa574eccc98add4d3df2f3f99e2", "transactionType": "CREATE", "contractName": "Permit2Vault", - "contractAddress": "0x29c4b679f04c0a86983b19380766d3b0ca679a59", + "contractAddress": "0x3845eb1554913bdbd58f7c7cdedc45f03a1e54fd", "function": null, "arguments": [ "0x000000000022D473030F116dDEE9F6B43aC78BA3", @@ -12,20 +12,20 @@ ], "transaction": { "from": "0x4639b9f663c14bad89ddcc16966e85bc81dccd40", - "gas": "0xa1810", + "gas": "0x9be1f", "value": "0x0", - "input": "0x60a0604052348015600f57600080fd5b506040516108da3803806108da833981016040819052602c916058565b506001600160a01b03166080526086565b80516001600160a01b0381168114605357600080fd5b919050565b60008060408385031215606a57600080fd5b607183603d565b9150607d60208401603d565b90509250929050565b6080516108336100a76000396000818160af01526102c701526108336000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80636cb5dc991161005b5780636cb5dc99146100ee5780638d00e14e14610101578063a1db97821461013a578063ad7a672f1461014d57600080fd5b80635431c94e146100825780635c4abd54146100975780636afdd850146100aa575b600080fd5b6100956100903660046105f2565b610156565b005b6100956100a536600461062b565b6101d3565b6100d17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100956100fc3660046106cf565b610383565b61012c61010f3660046105f2565b600160209081526000928352604080842090915290825290205481565b6040519081526020016100e5565b6100956101483660046106cf565b610483565b61012c60025481565b60025460405163a9059cbb60e01b81526001600160a01b03838116600483015260248201929092529083169063a9059cbb906044016020604051808303816000875af11580156101aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101ce91906106fb565b505050565b60005460ff161561021b5760405162461bcd60e51b815260206004820152600d60248201526c6e6f207265656e7472616e637960981b60448201526064015b60405180910390fd5b6000805460ff191660019081178255338252602090815260408083206001600160a01b038a1684529091528120805487929061025890849061073a565b925050819055508460026000828254610271919061073a565b90915550506040805160a0810182526001600160a01b0388811660608301908152608083018990528252602080830188905282840187905283518085018552308152908101899052925163187945bd60e11b81527f0000000000000000000000000000000000000000000000000000000000000000909116926330f28b7a926103059290919033908890889060040161077c565b600060405180830381600087803b15801561031f57600080fd5b505af1158015610333573d6000803e3d6000fd5b505060408051338152602081018990527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4935001905060405180910390a150506000805460ff1916905550505050565b3360009081526001602090815260408083206001600160a01b0386168452909152812080548392906103b690849061073a565b9250508190555080600260008282546103cf919061073a565b909155505060405163a9059cbb60e01b8152306004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610421573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044591906106fb565b5060408051338152602081018390527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4910160405180910390a15050565b60005460ff16156104c65760405162461bcd60e51b815260206004820152600d60248201526c6e6f207265656e7472616e637960981b6044820152606401610212565b6000805460ff191660019081178255338252602090815260408083206001600160a01b0386168452909152812080548392906105039084906107ea565b92505081905550806002600082825461051c91906107ea565b909155505060405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561056e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059291906106fb565b5060408051338152602081018390527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5910160405180910390a150506000805460ff19169055565b6001600160a01b03811681146105ef57600080fd5b50565b6000806040838503121561060557600080fd5b8235610610816105da565b91506020830135610620816105da565b809150509250929050565b60008060008060008060a0878903121561064457600080fd5b863561064f816105da565b9550602087013594506040870135935060608701359250608087013567ffffffffffffffff81111561068057600080fd5b8701601f8101891361069157600080fd5b803567ffffffffffffffff8111156106a857600080fd5b8960208284010111156106ba57600080fd5b60208201935080925050509295509295509295565b600080604083850312156106e257600080fd5b82356106ed816105da565b946020939093013593505050565b60006020828403121561070d57600080fd5b8151801515811461071d57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561074d5761074d610724565b92915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b855180516001600160a01b039081168352602091820151828401528188015160408085019190915288015160608401528651811660808401529086015160a0830152841660c082015261010060e082018190526000906107df9083018486610753565b979650505050505050565b8181038181111561074d5761074d61072456fea2646970667358221220b679dc2034436d9282261c81ee6ebc476a110510563f45f7b14d687c319052c864736f6c634300081c0033000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba30000000000000000000000004639b9f663c14bad89ddcc16966e85bc81dccd40", - "nonce": "0x21", + "input": "0x60a0604052348015600f57600080fd5b50604051610888380380610888833981016040819052602c916058565b506001600160a01b03166080526086565b80516001600160a01b0381168114605357600080fd5b919050565b60008060408385031215606a57600080fd5b607183603d565b9150607d60208401603d565b90509250929050565b6080516107e16100a7600039600081816094015261021e01526107e16000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80633cb8baa01461006757806344004cc11461007c5780636afdd8501461008f57806377ed9c79146100d35780638d00e14e146100e6578063ad7a672f1461011f575b600080fd5b61007a610075366004610577565b610128565b005b61007a61008a36600461062f565b6102e4565b6100b67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61007a6100e136600461062f565b610449565b6101116100f4366004610670565b600160209081526000928352604080842090915290825290205481565b6040519081526020016100ca565b61011160025481565b60005460ff16156101705760405162461bcd60e51b815260206004820152600d60248201526c6e6f207265656e7472616e637960981b60448201526064015b60405180910390fd5b6000805460ff1916600190811782556001600160a01b03808a16835260209182526040808420918a1684529152812080548792906101af9084906106bf565b9250508190555084600260008282546101c891906106bf565b90915550506040805160a0810182526001600160a01b0388811660608301908152608083018990528252602080830188905282840187905283518085018552308152908101899052925163187945bd60e11b81527f0000000000000000000000000000000000000000000000000000000000000000909116926330f28b7a9261025c929091908c9088908890600401610701565b600060405180830381600087803b15801561027657600080fd5b505af115801561028a573d6000803e3d6000fd5b5050604080516001600160a01b038b168152602081018990527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4935001905060405180910390a150506000805460ff191690555050505050565b60005460ff16156103275760405162461bcd60e51b815260206004820152600d60248201526c6e6f207265656e7472616e637960981b6044820152606401610167565b6000805460ff1916600190811782556001600160a01b03808616835260209182526040808420918616845291528120805483929061036690849061076f565b92505081905550806002600082825461037f919061076f565b909155505060405163a9059cbb60e01b81526001600160a01b0384811660048301526024820183905283169063a9059cbb906044016020604051808303816000875af11580156103d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f79190610782565b50604080516001600160a01b0385168152602081018390527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5910160405180910390a150506000805460ff1916905550565b6001600160a01b038084166000908152600160209081526040808320938616835292905290812080548392906104809084906106bf565b92505081905550806002600082825461049991906106bf565b90915550506040516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018390528316906323b872dd906064016020604051808303816000875af11580156104f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105179190610782565b50604080516001600160a01b0385168152602081018390527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4910160405180910390a1505050565b6001600160a01b038116811461057457600080fd5b50565b600080600080600080600060c0888a03121561059257600080fd5b873561059d8161055f565b965060208801356105ad8161055f565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff8111156105de57600080fd5b8801601f81018a136105ef57600080fd5b803567ffffffffffffffff81111561060657600080fd5b8a602082840101111561061857600080fd5b602082019350809250505092959891949750929550565b60008060006060848603121561064457600080fd5b833561064f8161055f565b9250602084013561065f8161055f565b929592945050506040919091013590565b6000806040838503121561068357600080fd5b823561068e8161055f565b9150602083013561069e8161055f565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106d2576106d26106a9565b92915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b855180516001600160a01b039081168352602091820151828401528188015160408085019190915288015160608401528651811660808401529086015160a0830152841660c082015261010060e0820181905260009061076490830184866106d8565b979650505050505050565b818103818111156106d2576106d26106a9565b60006020828403121561079457600080fd5b815180151581146107a457600080fd5b939250505056fea26469706673582212201f7c4dda7a75705107b64fe8aa1d350bf66f7066d464f85c7e9ed3afc942e78164736f6c634300081c0033000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba30000000000000000000000004639b9f663c14bad89ddcc16966e85bc81dccd40", + "nonce": "0x26", "chainId": "0x1e0" }, "additionalContracts": [], "isFixedGasLimit": false }, { - "hash": "0x7a6c4070ea25e67ab6d9965abb299c74fd7656b0c8c6928276e1acebccccf07a", + "hash": "0x69f0d7d56554ab4221cd9fe7fe45403405ef30efdc7ccb4fe6f9b84910cbbfe3", "transactionType": "CREATE", "contractName": "HumanOracleV1", - "contractAddress": "0x8cbef8f4ca9020a7ea6565480e3d90e1704ffadc", + "contractAddress": "0x03d9858aa5c3a8e79560e833827e6a096643e061", "function": null, "arguments": [ "0x17B354dD2595411ff79041f930e491A4Df39A278", @@ -33,14 +33,14 @@ "app_22ea9fb73d53333c2997e8f16e60cc6b", "registration", "0x2cFc85d8E48F8EAB294be644d9E25C3030863003", - "0x29C4B679F04C0a86983b19380766D3B0ca679a59" + "0x3845eB1554913BDbd58F7C7CdeDc45f03A1E54fd" ], "transaction": { "from": "0x4639b9f663c14bad89ddcc16966e85bc81dccd40", - "gas": "0x2270aa", + "gas": "0x229295", "value": "0x0", - "input": "0x60c0604052600160805234801561001557600080fd5b50604051611fef380380611fef833981016040819052610034916101f1565b600080546001600160a01b0319166001600160a01b0388161790556080859052604051869086908690869061009c9061008a90610075908590602001610295565b60408051601f198184030181529190526100dd565b826040516020016100759291906102b1565b60a0525050600680546001600160a01b039586166001600160a01b0319918216179091556007805494909516931692909217909255506102d7945050505050565b60006008826040516020016100f29190610295565b60408051601f198184030181529190528051602090910120901c92915050565b80516001600160a01b038116811461012957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561015f578181015183820152602001610147565b50506000910152565b600082601f83011261017957600080fd5b81516001600160401b038111156101925761019261012e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101c0576101c061012e565b6040528181528382016020018510156101d857600080fd5b6101e9826020830160208701610144565b949350505050565b60008060008060008060c0878903121561020a57600080fd5b61021387610112565b6020880151604089015191975095506001600160401b0381111561023657600080fd5b61024289828a01610168565b606089015190955090506001600160401b0381111561026057600080fd5b61026c89828a01610168565b93505061027b60808801610112565b915061028960a08801610112565b90509295509295509295565b600082516102a7818460208701610144565b9190910192915050565b828152600082516102c9816020850160208701610144565b919091016020019392505050565b60805160a051611cf36102fc6000396000610d6501526000610d270152611cf36000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639c1f819811610097578063c8382a3311610066578063c8382a3314610277578063d4e51d301461028a578063dca090041461029d578063fbfa77cf146102b057600080fd5b80639c1f8198146101f2578063a5260ad914610215578063a87430ba14610228578063b74207021461026457600080fd5b80635839a889116100d35780635839a8891461017c578063753e9ef01461018f5780637ccec52c146101ba57806391e40730146101cf57600080fd5b80630bfb705914610105578063163f7522146101255780633cbc2ef2146101485780634e9b9e001461015b575b600080fd5b61010d6102c3565b60405161011c9392919061157d565b60405180910390f35b6101386101333660046115d7565b610440565b604051901515815260200161011c565b6101386101563660046115f2565b610473565b61016e6101693660046115f2565b6104a3565b60405190815260200161011c565b61013861018a3660046115f2565b6104b6565b6000546101a2906001600160a01b031681565b6040516001600160a01b03909116815260200161011c565b6101cd6101c8366004611664565b6104fe565b005b61016e6101dd3660046116d7565b60036020526000908152604090206001015481565b6102056102003660046116d7565b61079f565b60405161011c94939291906116f0565b6101cd61022336600461173a565b610871565b61024f6102363660046115d7565b6001602081905260009182526040909120805491015482565b6040805192835260208301919091520161011c565b61016e6102723660046116d7565b610a55565b6101386102853660046116d7565b610bf9565b6101cd610298366004611897565b610c13565b6006546101a2906001600160a01b031681565b6007546101a2906001600160a01b031681565b606080606060006102d360045490565b9050806001600160401b038111156102ed576102ed6117f6565b604051908082528060200260200182016040528015610316578160200160208202803683370190505b509350806001600160401b03811115610331576103316117f6565b60405190808252806020026020018201604052801561036457816020015b606081526020019060019003908161034f5790505b509250806001600160401b0381111561037f5761037f6117f6565b6040519080825280602002602001820160405280156103a8578160200160208202803683370190505b50915060005b8181101561043957808582815181106103c9576103c96118e7565b6020026020010181815250506103de81610e66565b8482815181106103f0576103f06118e7565b60200260200101819052506104148160009081526003602052604090206001015490565b838281518110610426576104266118e7565b60209081029190910101526001016103ae565b5050909192565b6001600160a01b0381166000908152600160205260408120541561046657506001919050565b506000919050565b919050565b60008181526003602090815260408083206001600160a01b038616845260020190915290205460ff165b92915050565b60006104af8383610f1c565b9392505050565b60008181526003602052604081205460005b818110156104f3576104db858583610f94565b156104eb5760019250505061049d565b6001016104c8565b506000949350505050565b3360009081526001602052604081205490036105555760405162461bcd60e51b815260206004820152601160248201527075736572206e6f74206578697374696e6760781b60448201526064015b60405180910390fd5b600087815260036020526040812054889133905b828110156105d057600061057e838684610f94565b90508015156001036105c75760405162461bcd60e51b81526020600482015260126024820152711d5cd95c88185b1c9958591e481d9bdd195960721b604482015260640161054c565b50600101610569565b5089436105dc82610ff4565b11156106215760405162461bcd60e51b81526020600482015260146024820152731d9bdd19481a185cc81b9bdd081cdd185c9d195960621b604482015260640161054c565b4361062b82611022565b61063483610ff4565b61063e9190611913565b101561067d5760405162461bcd60e51b815260206004820152600e60248201526d1d9bdd19481a185cc8195b99195960921b604482015260640161054c565b60058911156106ce5760405162461bcd60e51b815260206004820152601760248201527f6d6178207374616b696e6720616d6f756e742069732035000000000000000000604482015260640161054c565b336106db818d8d8d611050565b600754600654604051631712af5560e21b81526001600160a01b0392831692635c4abd5492610719929116908e908e908e908e908e90600401611926565b600060405180830381600087803b15801561073357600080fd5b505af1158015610747573d6000803e3d6000fd5b5050604080518e8152602081018e90528f93506001600160a01b03851692507f65658daa50ece7e5d9b3c4700c400745f04137171d9d6896eed2f10437013ee7910160405180910390a3505050505050505050505050565b6060806000606060006107be8660009081526003602052604090205490565b60008781526003602052604090206001015493509050806001600160401b038111156107ec576107ec6117f6565b604051908082528060200260200182016040528015610815578160200160208202803683370190505b50915060005b818110156108525761082d878261110e565b83828151811061083f5761083f6118e7565b602090810291909101015260010161081b565b5061085c86610e66565b61086587611148565b94509450509193509193565b6004546040805160a08101825282815281516020601f8b0181900481028201810190935289815260009280830191908c908c90819084018382808284376000920191909152505050908252506020016108ca888a611979565b81526020808201889052604090910186905260048054600181018255600091909152825160059091027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b810191825591830151929350839290917f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c01906109519082611a97565b506040820151805161096d9160028401916020909101906113d0565b506060820151816003015560808201518160040155505061098e8284611245565b600754600654604051636cb5dc9960e01b81526001600160a01b03918216600482015260248101869052911690636cb5dc9990604401600060405180830381600087803b1580156109de57600080fd5b505af11580156109f2573d6000803e3d6000fd5b50505050817f6912e5abe531ca5f3b6f973f97278ab6731cdec0178a7b3c2c7a5822a3f1732b610a2184610e66565b610a2a85610ff4565b610a3386611022565b604051610a4293929190611b55565b60405180910390a2505050505050505050565b60008143610a6282611022565b610a6b83610ff4565b610a759190611913565b10610ab65760405162461bcd60e51b8152602060048201526011602482015270766f7465207374696c6c2061637469766560781b604482015260640161054c565b33610ac18185610473565b15610b055760405162461bcd60e51b81526020600482015260146024820152731d5cd95c88185b1c9958591e4818db185a5b595960621b604482015260640161054c565b60008481526003602090815260408083206001600160a01b03851684526002019091529020805460ff191660011790556000610b418286610f1c565b6007546006546040516350edcbc160e11b81526001600160a01b03918216600482015260248101849052929350169063a1db978290604401600060405180830381600087803b158015610b9357600080fd5b505af1158015610ba7573d6000803e3d6000fd5b5050505084826001600160a01b03167ff01da32686223933d8a18a391060918c7f11a3648639edd87ae013e2e273174383604051610be791815260200190565b60405180910390a39250505b50919050565b6000610c04826112df565b43111561046657506001919050565b3360009081526001602052604090205415610c695760405162461bcd60e51b815260206004820152601660248201527507573657220616c7265616479207369676e65642075760541b604482015260640161054c565b6000339050600080600084806020019051810190610c879190611b7a565b600082815260026020526040902054929550909350915060ff161515600103610cf25760405162461bcd60e51b815260206004820152601e60248201527f6e756c6c69666965724861736820616c7265616479206578697374696e670000604482015260640161054c565b6000546040516bffffffffffffffffffffffff19606087901b1660208201526001600160a01b0390911690633bc778e39085907f000000000000000000000000000000000000000000000000000000000000000090610d62906034016040516020818303038152906040526112fd565b867f0000000000000000000000000000000000000000000000000000000000000000876040518763ffffffff1660e01b8152600401610da696959493929190611c0f565b60006040518083038186803b158015610dbe57600080fd5b505afa158015610dd2573d6000803e3d6000fd5b5050506000838152600260209081526040808320805460ff1916600190811790915581518083018352878152438185019081526001600160a01b038b168087528386529584902082518082559151930183905583519081529384019190915293507f47c8e83729a89f8b0c23b722e4c21f48295ddfcd683910c564e11e6b6037d01c910160405180910390a2505050505050565b606060048281548110610e7b57610e7b6118e7565b90600052602060002090600502016001018054610e9790611a14565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec390611a14565b8015610f105780601f10610ee557610100808354040283529160200191610f10565b820191906000526020600020905b815481529060010190602001808311610ef357829003601f168201915b50505050509050919050565b600080610f2883611332565b9050610f35848483610f94565b610f4357600091505061049d565b6000610f5085858461137e565b600085815260036020526040812060010154919250610f6f868561110e565b9050600083610f7e8385611c68565b610f889190611c8a565b98975050505050505050565b6000828152600360205260408120805483908110610fb457610fb46118e7565b600091825260208083206001600160a01b03881684526001600290930201919091019052604090205415610fea575060016104af565b5060009392505050565b600060048281548110611009576110096118e7565b9060005260206000209060050201600301549050919050565b600060048281548110611037576110376118e7565b9060005260206000209060050201600401549050919050565b6000838152600360205260409020805482919084908110611073576110736118e7565b600091825260208083206001600160a01b0389168452600160029093020191909101815260408083209390935585825260039052208054829190849081106110bd576110bd6118e7565b906000526020600020906002020160000160008282546110dd9190611913565b909155505060008381526003602052604081206001018054839290611103908490611913565b909155505050505050565b600082815260036020526040812080548390811061112e5761112e6118e7565b906000526020600020906002020160000154905092915050565b60606004828154811061115d5761115d6118e7565b9060005260206000209060050201600201805480602002602001604051908101604052809291908181526020016000905b8282101561123a5783829060005260206000200180546111ad90611a14565b80601f01602080910402602001604051908101604052809291908181526020018280546111d990611a14565b80156112265780601f106111fb57610100808354040283529160200191611226565b820191906000526020600020905b81548152906001019060200180831161120957829003601f168201915b50505050508152602001906001019061118e565b505050509050919050565b6000828152600360205260408120600181018390556004805491929185908110611271576112716118e7565b6000918252602082206002600590920201015491506112908285611c68565b905060005b828110156112d7578354600101808555600085905282908590839081106112be576112be6118e7565b6000918252602090912060029091020155600101611295565b505050505050565b60006112ea82611022565b6112f383610ff4565b61049d9190611913565b60006008826040516020016113129190611ca1565b60408051601f198184030181529190528051602090910120901c92915050565b60008181526003602052604081205460008060005b8381101561137557600061135b878361110e565b90508084101561136c578093508192505b50600101611347565b50949350505050565b600082815260036020526040812080548390811061139e5761139e6118e7565b600091825260208083206001600160a01b03881684526001600290930201919091019052604090205490509392505050565b828054828255906000526020600020908101928215611416579160200282015b8281111561141657825182906114069082611a97565b50916020019190600101906113f0565b50611422929150611426565b5090565b8082111561142257600061143a8282611443565b50600101611426565b50805461144f90611a14565b6000825580601f1061145f575050565b601f01602090049060005260206000209081019061147d9190611480565b50565b5b808211156114225760008155600101611481565b600081518084526020840193506020830160005b828110156114c75781518652602095860195909101906001016114a9565b5093949350505050565b60005b838110156114ec5781810151838201526020016114d4565b50506000910152565b6000815180845261150d8160208601602086016114d1565b601f01601f19169290920160200192915050565b600082825180855260208501945060208160051b8301016020850160005b8381101561157157601f1985840301885261155b8383516114f5565b602098890198909350919091019060010161153f565b50909695505050505050565b6060815260006115906060830186611495565b82810360208401526115a28186611521565b905082810360408401526115b68185611495565b9695505050505050565b80356001600160a01b038116811461046e57600080fd5b6000602082840312156115e957600080fd5b6104af826115c0565b6000806040838503121561160557600080fd5b61160e836115c0565b946020939093013593505050565b60008083601f84011261162e57600080fd5b5081356001600160401b0381111561164557600080fd5b60208301915083602082850101111561165d57600080fd5b9250929050565b600080600080600080600060c0888a03121561167f57600080fd5b873596506020880135955060408801359450606088013593506080880135925060a08801356001600160401b038111156116b857600080fd5b6116c48a828b0161161c565b989b979a50959850939692959293505050565b6000602082840312156116e957600080fd5b5035919050565b60808152600061170360808301876114f5565b82810360208401526117158187611521565b9050846040840152828103606084015261172f8185611495565b979650505050505050565b600080600080600080600060a0888a03121561175557600080fd5b87356001600160401b0381111561176b57600080fd5b6117778a828b0161161c565b90985096505060208801356001600160401b0381111561179657600080fd5b8801601f81018a136117a757600080fd5b80356001600160401b038111156117bd57600080fd5b8a60208260051b84010111156117d257600080fd5b979a9699506020019760408101359660608201359650608090910135945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611834576118346117f6565b604052919050565b6000806001600160401b03841115611856576118566117f6565b50601f8301601f191660200161186b8161180c565b91505082815283838301111561188057600080fd5b828260208301376000602084830101529392505050565b6000602082840312156118a957600080fd5b81356001600160401b038111156118bf57600080fd5b8201601f810184136118d057600080fd5b6118df8482356020840161183c565b949350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561049d5761049d6118fd565b60018060a01b038716815285602082015284604082015283606082015260a060808201528160a0820152818360c0830137600081830160c090810191909152601f909201601f1916010195945050505050565b60006001600160401b03831115611992576119926117f6565b8260051b6119a26020820161180c565b848152908301906020810190368311156119bb57600080fd5b845b83811015611a0a5780356001600160401b038111156119db57600080fd5b860136601f8201126119ec57600080fd5b6119fb3682356020840161183c565b845250602092830192016119bd565b5095945050505050565b600181811c90821680611a2857607f821691505b602082108103610bf357634e487b7160e01b600052602260045260246000fd5b601f821115611a9257806000526020600020601f840160051c81016020851015611a6f5750805b601f840160051c820191505b81811015611a8f5760008155600101611a7b565b50505b505050565b81516001600160401b03811115611ab057611ab06117f6565b611ac481611abe8454611a14565b84611a48565b6020601f821160018114611af85760008315611ae05750848201515b600019600385901b1c1916600184901b178455611a8f565b600084815260208120601f198516915b82811015611b285787850151825560209485019460019092019101611b08565b5084821015611b465786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b606081526000611b6860608301866114f5565b60208301949094525060400152919050565b60008060006101408486031215611b9057600080fd5b835160208501519093509150605f84018513611bab57600080fd5b60405161010081016001600160401b0381118282101715611bce57611bce6117f6565b60405280610140860187811115611be457600080fd5b604087015b81811015611c01578051835260209283019201611be9565b505050809150509250925092565b60006101a08201905087825286602083015285604083015284606083015283608083015260a082018360005b6008811015611c5a578151835260209283019290910190600101611c3b565b505050979650505050505050565b600082611c8557634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761049d5761049d6118fd565b60008251611cb38184602087016114d1565b919091019291505056fea264697066735822122089556ce5f5b7139311e7816da8771d7ebfb13eef88b88c401655247cf325eab564736f6c634300081c003300000000000000000000000017b354dd2595411ff79041f930e491a4df39a278000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001200000000000000000000000002cfc85d8e48f8eab294be644d9e25c303086300300000000000000000000000029c4b679f04c0a86983b19380766d3b0ca679a5900000000000000000000000000000000000000000000000000000000000000246170705f323265613966623733643533333333633239393765386631366536306363366200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c726567697374726174696f6e0000000000000000000000000000000000000000", - "nonce": "0x22", + "input": "0x60c0604052600160805234801561001557600080fd5b5060405161200e38038061200e833981016040819052610034916101f1565b600080546001600160a01b0319166001600160a01b0388161790556080859052604051869086908690869061009c9061008a90610075908590602001610295565b60408051601f198184030181529190526100dd565b826040516020016100759291906102b1565b60a0525050600680546001600160a01b039586166001600160a01b0319918216179091556007805494909516931692909217909255506102d7945050505050565b60006008826040516020016100f29190610295565b60408051601f198184030181529190528051602090910120901c92915050565b80516001600160a01b038116811461012957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561015f578181015183820152602001610147565b50506000910152565b600082601f83011261017957600080fd5b81516001600160401b038111156101925761019261012e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101c0576101c061012e565b6040528181528382016020018510156101d857600080fd5b6101e9826020830160208701610144565b949350505050565b60008060008060008060c0878903121561020a57600080fd5b61021387610112565b6020880151604089015191975095506001600160401b0381111561023657600080fd5b61024289828a01610168565b606089015190955090506001600160401b0381111561026057600080fd5b61026c89828a01610168565b93505061027b60808801610112565b915061028960a08801610112565b90509295509295509295565b600082516102a7818460208701610144565b9190910192915050565b828152600082516102c9816020850160208701610144565b919091016020019392505050565b60805160a051611d126102fc6000396000610d7601526000610d380152611d126000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639c1f819811610097578063c8382a3311610066578063c8382a3314610277578063d4e51d301461028a578063dca090041461029d578063fbfa77cf146102b057600080fd5b80639c1f8198146101f2578063a5260ad914610215578063a87430ba14610228578063b74207021461026457600080fd5b80635839a889116100d35780635839a8891461017c578063753e9ef01461018f5780637ccec52c146101ba57806391e40730146101cf57600080fd5b80630bfb705914610105578063163f7522146101255780633cbc2ef2146101485780634e9b9e001461015b575b600080fd5b61010d6102c3565b60405161011c9392919061158e565b60405180910390f35b6101386101333660046115e8565b610440565b604051901515815260200161011c565b610138610156366004611603565b610473565b61016e610169366004611603565b6104a3565b60405190815260200161011c565b61013861018a366004611603565b6104b6565b6000546101a2906001600160a01b031681565b6040516001600160a01b03909116815260200161011c565b6101cd6101c8366004611675565b6104fe565b005b61016e6101dd3660046116e8565b60036020526000908152604090206001015481565b6102056102003660046116e8565b6107a2565b60405161011c9493929190611701565b6101cd61022336600461174b565b610874565b61024f6102363660046115e8565b6001602081905260009182526040909120805491015482565b6040805192835260208301919091520161011c565b61016e6102723660046116e8565b610a5e565b6101386102853660046116e8565b610c0a565b6101cd6102983660046118a8565b610c24565b6006546101a2906001600160a01b031681565b6007546101a2906001600160a01b031681565b606080606060006102d360045490565b9050806001600160401b038111156102ed576102ed611807565b604051908082528060200260200182016040528015610316578160200160208202803683370190505b509350806001600160401b0381111561033157610331611807565b60405190808252806020026020018201604052801561036457816020015b606081526020019060019003908161034f5790505b509250806001600160401b0381111561037f5761037f611807565b6040519080825280602002602001820160405280156103a8578160200160208202803683370190505b50915060005b8181101561043957808582815181106103c9576103c96118f8565b6020026020010181815250506103de81610e77565b8482815181106103f0576103f06118f8565b60200260200101819052506104148160009081526003602052604090206001015490565b838281518110610426576104266118f8565b60209081029190910101526001016103ae565b5050909192565b6001600160a01b0381166000908152600160205260408120541561046657506001919050565b506000919050565b919050565b60008181526003602090815260408083206001600160a01b038616845260020190915290205460ff165b92915050565b60006104af8383610f2d565b9392505050565b60008181526003602052604081205460005b818110156104f3576104db858583610fa5565b156104eb5760019250505061049d565b6001016104c8565b506000949350505050565b3360009081526001602052604081205490036105555760405162461bcd60e51b815260206004820152601160248201527075736572206e6f74206578697374696e6760781b60448201526064015b60405180910390fd5b600087815260036020526040812054889133905b828110156105d057600061057e838684610fa5565b90508015156001036105c75760405162461bcd60e51b81526020600482015260126024820152711d5cd95c88185b1c9958591e481d9bdd195960721b604482015260640161054c565b50600101610569565b5089436105dc82611005565b11156106215760405162461bcd60e51b81526020600482015260146024820152731d9bdd19481a185cc81b9bdd081cdd185c9d195960621b604482015260640161054c565b4361062b82611033565b61063483611005565b61063e9190611924565b101561067d5760405162461bcd60e51b815260206004820152600e60248201526d1d9bdd19481a185cc8195b99195960921b604482015260640161054c565b60058911156106ce5760405162461bcd60e51b815260206004820152601760248201527f6d6178207374616b696e6720616d6f756e742069732035000000000000000000604482015260640161054c565b336106db818d8d8d611061565b6007546006546040516301e5c5d560e51b81526001600160a01b0392831692633cb8baa09261071c928692909116908f908f908f908f908f90600401611937565b600060405180830381600087803b15801561073657600080fd5b505af115801561074a573d6000803e3d6000fd5b5050604080518e8152602081018e90528f93506001600160a01b03851692507f65658daa50ece7e5d9b3c4700c400745f04137171d9d6896eed2f10437013ee7910160405180910390a3505050505050505050505050565b6060806000606060006107c18660009081526003602052604090205490565b60008781526003602052604090206001015493509050806001600160401b038111156107ef576107ef611807565b604051908082528060200260200182016040528015610818578160200160208202803683370190505b50915060005b8181101561085557610830878261111f565b838281518110610842576108426118f8565b602090810291909101015260010161081e565b5061085f86610e77565b61086887611159565b94509450509193509193565b6004546040805160a08101825282815281516020601f8b0181900481028201810190935289815260009280830191908c908c90819084018382808284376000920191909152505050908252506020016108cd888a611998565b81526020808201889052604090910186905260048054600181018255600091909152825160059091027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b810191825591830151929350839290917f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c01906109549082611ab6565b50604082015180516109709160028401916020909101906113e1565b50606082015181600301556080820151816004015550506109918284611256565b6007546006546040516377ed9c7960e01b81523360048201526001600160a01b039182166024820152604481018690529116906377ed9c7990606401600060405180830381600087803b1580156109e757600080fd5b505af11580156109fb573d6000803e3d6000fd5b50505050817f6912e5abe531ca5f3b6f973f97278ab6731cdec0178a7b3c2c7a5822a3f1732b610a2a84610e77565b610a3385611005565b610a3c86611033565b604051610a4b93929190611b74565b60405180910390a2505050505050505050565b60008143610a6b82611033565b610a7483611005565b610a7e9190611924565b10610abf5760405162461bcd60e51b8152602060048201526011602482015270766f7465207374696c6c2061637469766560781b604482015260640161054c565b33610aca8185610473565b15610b0e5760405162461bcd60e51b81526020600482015260146024820152731d5cd95c88185b1c9958591e4818db185a5b595960621b604482015260640161054c565b60008481526003602090815260408083206001600160a01b03851684526002019091529020805460ff191660011790556000610b4a8286610f2d565b6007546006546040516344004cc160e01b81526001600160a01b03868116600483015291821660248201526044810184905292935016906344004cc190606401600060405180830381600087803b158015610ba457600080fd5b505af1158015610bb8573d6000803e3d6000fd5b5050505084826001600160a01b03167ff01da32686223933d8a18a391060918c7f11a3648639edd87ae013e2e273174383604051610bf891815260200190565b60405180910390a39250505b50919050565b6000610c15826112f0565b43111561046657506001919050565b3360009081526001602052604090205415610c7a5760405162461bcd60e51b815260206004820152601660248201527507573657220616c7265616479207369676e65642075760541b604482015260640161054c565b6000339050600080600084806020019051810190610c989190611b99565b600082815260026020526040902054929550909350915060ff161515600103610d035760405162461bcd60e51b815260206004820152601e60248201527f6e756c6c69666965724861736820616c7265616479206578697374696e670000604482015260640161054c565b6000546040516bffffffffffffffffffffffff19606087901b1660208201526001600160a01b0390911690633bc778e39085907f000000000000000000000000000000000000000000000000000000000000000090610d739060340160405160208183030381529060405261130e565b867f0000000000000000000000000000000000000000000000000000000000000000876040518763ffffffff1660e01b8152600401610db796959493929190611c2e565b60006040518083038186803b158015610dcf57600080fd5b505afa158015610de3573d6000803e3d6000fd5b5050506000838152600260209081526040808320805460ff1916600190811790915581518083018352878152438185019081526001600160a01b038b168087528386529584902082518082559151930183905583519081529384019190915293507f47c8e83729a89f8b0c23b722e4c21f48295ddfcd683910c564e11e6b6037d01c910160405180910390a2505050505050565b606060048281548110610e8c57610e8c6118f8565b90600052602060002090600502016001018054610ea890611a33565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed490611a33565b8015610f215780601f10610ef657610100808354040283529160200191610f21565b820191906000526020600020905b815481529060010190602001808311610f0457829003601f168201915b50505050509050919050565b600080610f3983611343565b9050610f46848483610fa5565b610f5457600091505061049d565b6000610f6185858461138f565b600085815260036020526040812060010154919250610f80868561111f565b9050600083610f8f8385611c87565b610f999190611ca9565b98975050505050505050565b6000828152600360205260408120805483908110610fc557610fc56118f8565b600091825260208083206001600160a01b03881684526001600290930201919091019052604090205415610ffb575060016104af565b5060009392505050565b60006004828154811061101a5761101a6118f8565b9060005260206000209060050201600301549050919050565b600060048281548110611048576110486118f8565b9060005260206000209060050201600401549050919050565b6000838152600360205260409020805482919084908110611084576110846118f8565b600091825260208083206001600160a01b0389168452600160029093020191909101815260408083209390935585825260039052208054829190849081106110ce576110ce6118f8565b906000526020600020906002020160000160008282546110ee9190611924565b909155505060008381526003602052604081206001018054839290611114908490611924565b909155505050505050565b600082815260036020526040812080548390811061113f5761113f6118f8565b906000526020600020906002020160000154905092915050565b60606004828154811061116e5761116e6118f8565b9060005260206000209060050201600201805480602002602001604051908101604052809291908181526020016000905b8282101561124b5783829060005260206000200180546111be90611a33565b80601f01602080910402602001604051908101604052809291908181526020018280546111ea90611a33565b80156112375780601f1061120c57610100808354040283529160200191611237565b820191906000526020600020905b81548152906001019060200180831161121a57829003601f168201915b50505050508152602001906001019061119f565b505050509050919050565b6000828152600360205260408120600181018390556004805491929185908110611282576112826118f8565b6000918252602082206002600590920201015491506112a18285611c87565b905060005b828110156112e8578354600101808555600085905282908590839081106112cf576112cf6118f8565b60009182526020909120600290910201556001016112a6565b505050505050565b60006112fb82611033565b61130483611005565b61049d9190611924565b60006008826040516020016113239190611cc0565b60408051601f198184030181529190528051602090910120901c92915050565b60008181526003602052604081205460008060005b8381101561138657600061136c878361111f565b90508084101561137d578093508192505b50600101611358565b50949350505050565b60008281526003602052604081208054839081106113af576113af6118f8565b600091825260208083206001600160a01b03881684526001600290930201919091019052604090205490509392505050565b828054828255906000526020600020908101928215611427579160200282015b8281111561142757825182906114179082611ab6565b5091602001919060010190611401565b50611433929150611437565b5090565b8082111561143357600061144b8282611454565b50600101611437565b50805461146090611a33565b6000825580601f10611470575050565b601f01602090049060005260206000209081019061148e9190611491565b50565b5b808211156114335760008155600101611492565b600081518084526020840193506020830160005b828110156114d85781518652602095860195909101906001016114ba565b5093949350505050565b60005b838110156114fd5781810151838201526020016114e5565b50506000910152565b6000815180845261151e8160208601602086016114e2565b601f01601f19169290920160200192915050565b600082825180855260208501945060208160051b8301016020850160005b8381101561158257601f1985840301885261156c838351611506565b6020988901989093509190910190600101611550565b50909695505050505050565b6060815260006115a160608301866114a6565b82810360208401526115b38186611532565b905082810360408401526115c781856114a6565b9695505050505050565b80356001600160a01b038116811461046e57600080fd5b6000602082840312156115fa57600080fd5b6104af826115d1565b6000806040838503121561161657600080fd5b61161f836115d1565b946020939093013593505050565b60008083601f84011261163f57600080fd5b5081356001600160401b0381111561165657600080fd5b60208301915083602082850101111561166e57600080fd5b9250929050565b600080600080600080600060c0888a03121561169057600080fd5b873596506020880135955060408801359450606088013593506080880135925060a08801356001600160401b038111156116c957600080fd5b6116d58a828b0161162d565b989b979a50959850939692959293505050565b6000602082840312156116fa57600080fd5b5035919050565b6080815260006117146080830187611506565b82810360208401526117268187611532565b9050846040840152828103606084015261174081856114a6565b979650505050505050565b600080600080600080600060a0888a03121561176657600080fd5b87356001600160401b0381111561177c57600080fd5b6117888a828b0161162d565b90985096505060208801356001600160401b038111156117a757600080fd5b8801601f81018a136117b857600080fd5b80356001600160401b038111156117ce57600080fd5b8a60208260051b84010111156117e357600080fd5b979a9699506020019760408101359660608201359650608090910135945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561184557611845611807565b604052919050565b6000806001600160401b0384111561186757611867611807565b50601f8301601f191660200161187c8161181d565b91505082815283838301111561189157600080fd5b828260208301376000602084830101529392505050565b6000602082840312156118ba57600080fd5b81356001600160401b038111156118d057600080fd5b8201601f810184136118e157600080fd5b6118f08482356020840161184d565b949350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561049d5761049d61190e565b6001600160a01b0388811682528716602082015260408101869052606081018590526080810184905260c060a082018190528101829052818360e0830137600081830160e090810191909152601f909201601f191601019695505050505050565b60006001600160401b038311156119b1576119b1611807565b8260051b6119c16020820161181d565b848152908301906020810190368311156119da57600080fd5b845b83811015611a295780356001600160401b038111156119fa57600080fd5b860136601f820112611a0b57600080fd5b611a1a3682356020840161184d565b845250602092830192016119dc565b5095945050505050565b600181811c90821680611a4757607f821691505b602082108103610c0457634e487b7160e01b600052602260045260246000fd5b601f821115611ab157806000526020600020601f840160051c81016020851015611a8e5750805b601f840160051c820191505b81811015611aae5760008155600101611a9a565b50505b505050565b81516001600160401b03811115611acf57611acf611807565b611ae381611add8454611a33565b84611a67565b6020601f821160018114611b175760008315611aff5750848201515b600019600385901b1c1916600184901b178455611aae565b600084815260208120601f198516915b82811015611b475787850151825560209485019460019092019101611b27565b5084821015611b655786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b606081526000611b876060830186611506565b60208301949094525060400152919050565b60008060006101408486031215611baf57600080fd5b835160208501519093509150605f84018513611bca57600080fd5b60405161010081016001600160401b0381118282101715611bed57611bed611807565b60405280610140860187811115611c0357600080fd5b604087015b81811015611c20578051835260209283019201611c08565b505050809150509250925092565b60006101a08201905087825286602083015285604083015284606083015283608083015260a082018360005b6008811015611c79578151835260209283019290910190600101611c5a565b505050979650505050505050565b600082611ca457634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761049d5761049d61190e565b60008251611cd28184602087016114e2565b919091019291505056fea2646970667358221220a82a9d5b7954e7a9b656aac9f44a203e323015c2e50d507a802f8b8162b24a0d64736f6c634300081c003300000000000000000000000017b354dd2595411ff79041f930e491a4df39a278000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001200000000000000000000000002cfc85d8e48f8eab294be644d9e25c30308630030000000000000000000000003845eb1554913bdbd58f7c7cdedc45f03a1e54fd00000000000000000000000000000000000000000000000000000000000000246170705f323265613966623733643533333333633239393765386631366536306363366200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c726567697374726174696f6e0000000000000000000000000000000000000000", + "nonce": "0x27", "chainId": "0x1e0" }, "additionalContracts": [], @@ -50,55 +50,55 @@ "receipts": [ { "status": "0x1", - "cumulativeGasUsed": "0x86fbf", + "cumulativeGasUsed": "0xac7e4", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x0", - "transactionHash": "0x260ca8840d7abe1bb87776946027897936e92de96eb78958e4edad990b7c5812", - "transactionIndex": "0x1", - "blockHash": "0x15165c0ad09b82d5f2c4ea3534af7627da45086380d3cf49c1fdcfa758d3f5c8", - "blockNumber": "0x5f15f1", - "gasUsed": "0x7c450", - "effectiveGasPrice": "0xf433f", + "transactionHash": "0xefaaf17d36b01ff0a966cf1f227826b97cbebaa574eccc98add4d3df2f3f99e2", + "transactionIndex": "0x3", + "blockHash": "0x78126de80736bb6caa367ead910229185a8b349d76f325c3538bb89424cae41f", + "blockNumber": "0x5f1e24", + "gasUsed": "0x77f1c", + "effectiveGasPrice": "0xf4340", "blobGasUsed": "0x0", "from": "0x4639b9f663c14bad89ddcc16966e85bc81dccd40", "to": null, - "contractAddress": "0x29c4b679f04c0a86983b19380766d3b0ca679a59", + "contractAddress": "0x3845eb1554913bdbd58f7c7cdedc45f03a1e54fd", "l1BaseFeeScalar": "0x21f9", - "l1BlobBaseFee": "0xd2be11b5", + "l1BlobBaseFee": "0x8e500c22", "l1BlobBaseFeeScalar": "0xc5f4f", - "l1Fee": "0x578e5811cb2", - "l1GasPrice": "0x293c5fb17", - "l1GasUsed": "0x5553" + "l1Fee": "0x41d8fa33a77", + "l1GasPrice": "0x24789b7c4", + "l1GasUsed": "0x55be" }, { "status": "0x1", - "cumulativeGasUsed": "0x22efe2", + "cumulativeGasUsed": "0x256220", "logs": [], "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "type": "0x0", - "transactionHash": "0x7a6c4070ea25e67ab6d9965abb299c74fd7656b0c8c6928276e1acebccccf07a", - "transactionIndex": "0x2", - "blockHash": "0x15165c0ad09b82d5f2c4ea3534af7627da45086380d3cf49c1fdcfa758d3f5c8", - "blockNumber": "0x5f15f1", - "gasUsed": "0x1a8023", - "effectiveGasPrice": "0xf433f", + "transactionHash": "0x69f0d7d56554ab4221cd9fe7fe45403405ef30efdc7ccb4fe6f9b84910cbbfe3", + "transactionIndex": "0x4", + "blockHash": "0x78126de80736bb6caa367ead910229185a8b349d76f325c3538bb89424cae41f", + "blockNumber": "0x5f1e24", + "gasUsed": "0x1a9a3c", + "effectiveGasPrice": "0xf4340", "blobGasUsed": "0x0", "from": "0x4639b9f663c14bad89ddcc16966e85bc81dccd40", "to": null, - "contractAddress": "0x8cbef8f4ca9020a7ea6565480e3d90e1704ffadc", + "contractAddress": "0x03d9858aa5c3a8e79560e833827e6a096643e061", "l1BaseFeeScalar": "0x21f9", - "l1BlobBaseFee": "0xd2be11b5", + "l1BlobBaseFee": "0x8e500c22", "l1BlobBaseFeeScalar": "0xc5f4f", - "l1Fee": "0x1382c9332927", - "l1GasPrice": "0x293c5fb17", - "l1GasUsed": "0x1303a" + "l1Fee": "0xea8d73f9b40", + "l1GasPrice": "0x24789b7c4", + "l1GasUsed": "0x1316e" } ], "libraries": [], "pending": [], "returns": {}, - "timestamp": 1731798716, + "timestamp": 1731802914, "chain": 480, - "commit": "754c393" + "commit": "b87658e" } \ No newline at end of file diff --git a/packages/foundry/contracts/HumanOracleV1.sol b/packages/foundry/contracts/HumanOracleV1.sol index e834420..fb434be 100644 --- a/packages/foundry/contracts/HumanOracleV1.sol +++ b/packages/foundry/contracts/HumanOracleV1.sol @@ -124,7 +124,7 @@ contract HumanOracleV1 is WorldIdRegister { require(amount <= 5, "max staking amount is 5"); address userAddr = address(msg.sender); stakeForAnswer(userAddr, voteId, answerIndex, amount); - vault.depositERC20(worldToken, amount, nonce, deadline, signature); + vault.depositERC20(userAddr, worldToken, amount, nonce, deadline, signature); emit VoteSubmitted(userAddr, voteId, answerIndex, amount); } @@ -133,7 +133,7 @@ contract HumanOracleV1 is WorldIdRegister { require(!hasUserClaimedForVote(userAddr, voteId), "user already claimed"); setUserHasClaimedToTrueForVote(userAddr, voteId); uint256 payout = getStakeResolvedUserAmount(userAddr, voteId); - vault.withdrawERC20(worldToken, payout); + vault.withdrawERC20(userAddr, worldToken, payout); emit RewardClaimed(userAddr, voteId, payout); return payout; } @@ -159,7 +159,7 @@ contract HumanOracleV1 is WorldIdRegister { createNewStake(voteId, bounty); - vault.depositERC20Regular(worldToken, bounty); + vault.depositERC20Regular(address(msg.sender), worldToken, bounty); emit VoteCreated(voteId, getVoteQuestion(voteId), getVoteStartBlock(voteId), getVoteDurationInBlocks(voteId)); } diff --git a/packages/foundry/contracts/HumanOracleWithVault.sol b/packages/foundry/contracts/HumanOracleWithVault.sol deleted file mode 100644 index c1f943b..0000000 --- a/packages/foundry/contracts/HumanOracleWithVault.sol +++ /dev/null @@ -1,375 +0,0 @@ -//SPDX-License-Identifier: MIT -pragma solidity ^0.8.28; - -import {IWorldID} from "../lib/world-id-onchain-template/contracts/src/interfaces/IWorldID.sol"; -import {ByteHasher} from "./ByteHasher.sol"; -import {Permit2Vault} from "./Permit2Vault.sol"; -import {IERC20} from "../interfaces/IERC20.sol"; -// import "forge-std/console.sol"; - -contract HumanOracleWithVault is Permit2Vault { - - // ==================== - // ====== Structs ===== - // ==================== - - struct User { - uint256 nullifierHash; - uint256 createdAtBlock; - } - - struct Option { - uint256 totalStake; - mapping (address => uint256) userStakes; - } - - struct Stake { - Option[] answers; - uint256 totalStake; - mapping (address => bool) hasUserClaimed; - } - - struct Vote { - uint256 id; - string question; - string[] answers; - uint256 startBlock; - uint256 durationInBlocks; - } - - // ==================== - // ==== Variables ===== - // ==================== - - // public - IWorldID public worldId; - mapping (uint256 => Stake) public stakesForVoteIds; - mapping (address => User) public users; - Vote[] votes; - - // private - mapping (uint256 => bool) private registeredNullifierHashes; - uint256 internal immutable groupId = 1; - uint256 internal immutable externalNullifierHash; - IERC20 public worldToken; - - - // ==================== - // ====== Events ====== - // ==================== - - event UserRegistered(address indexed user, uint256 nullifierHash, uint256 createdAtBlock); - - event VoteCreated(uint256 indexed voteId, string question, uint256 startBlock, uint256 durationInBlocks); - - event VoteSubmitted(address indexed user, uint256 indexed voteId, uint256 answerIndex, uint256 stakeAmount); - - event RewardClaimed(address indexed user, uint256 indexed voteId, uint256 rewardAmount); - - // ==================== - // ==== Modifiers ===== - // ==================== - - modifier onlyNewUser() { - require(users[msg.sender].nullifierHash == uint256(0), "user already signed up"); - _; - } - - modifier hasNotVoted(uint256 voteId) { - uint256 answerCount = getStakeAnswerCount(voteId); - address userAddr = address(msg.sender); - for (uint i = 0; i < answerCount; i++) { - bool hasVoted = hasUserVotedForStakeAnswer(userAddr, voteId, i); - if (hasVoted == true) { - revert("user already voted"); - } - } - _; - } - - modifier voteActive(uint256 voteId) { - require(getVoteStartBlock(voteId) <= block.number, "vote has not started"); - require(getVoteStartBlock(voteId) + getVoteDurationInBlocks(voteId) >= block.number, "vote has ended"); - _; - } - - modifier voteEnded(uint256 voteId) { - require(getVoteStartBlock(voteId) + getVoteDurationInBlocks(voteId) < block.number, "vote still active"); - _; - } - - modifier userExists() { - if (users[address(msg.sender)].nullifierHash == 0) { - revert("user not existing"); - } - _; - } - - // security measurement - // modifier userOldEnough(uint256 voteId) { - // if (users[address(msg.sender)].createdAtBlock > getVoteStartBlock(voteId)) { - // revert("user was created after voting begun"); - // } - // _; - // } - - // ==================== - // === Constructor ==== - // ==================== - - constructor(address _worldIdAddr, address _worldTokenAddr, uint256 _groupId, string memory _appId, string memory _action, address _permit, address _owner) Permit2Vault(_permit, _owner) { - worldId = IWorldID(_worldIdAddr); - worldToken = IERC20(_worldTokenAddr); - groupId = _groupId; - externalNullifierHash = ByteHasher.hashToField(abi.encodePacked(ByteHasher.hashToField(abi.encodePacked(_appId)), _action)); - } - - // ==================== - // ==== Functions ===== - // ==================== - - // external - - function signUpWithWorldId(bytes memory data) onlyNewUser() external { - address userAddr = address(msg.sender); - - ( - uint256 merkleRoot, - uint256 nullifierHash, - uint256[8] memory proof - ) = abi.decode(data, (uint256, uint256, uint256[8])); - - if (registeredNullifierHashes[nullifierHash] == true) { - revert ("nullifierHash already existing"); - } - worldId.verifyProof( - merkleRoot, - groupId, - ByteHasher.hashToField(abi.encodePacked(userAddr)), - nullifierHash, - externalNullifierHash, - proof - ); - registeredNullifierHashes[nullifierHash] = true; - - User memory newUser = User({ - nullifierHash: nullifierHash, - createdAtBlock: block.number - }); - users[userAddr] = newUser; - emit UserRegistered(userAddr, users[userAddr].nullifierHash, users[userAddr].createdAtBlock); - } - - function submitVotingDecisionWithStake( - uint256 voteId, - uint256 answerIndex, - uint256 amount, - uint256 nonce, - uint256 deadline, - bytes calldata signature - ) userExists() hasNotVoted(voteId) voteActive(voteId) external { - require(amount <= 5, "max staking amount is 5"); - address userAddr = address(msg.sender); - stakeForAnswer(userAddr, voteId, answerIndex, amount); - this.depositERC20(worldToken, amount, nonce, deadline, signature); - emit VoteSubmitted(userAddr, voteId, answerIndex, amount); - } - - function claimRewardForVote(uint256 voteId) voteEnded(voteId) external returns (uint256) { - address userAddr = address(msg.sender); - require(!hasUserClaimedForVote(userAddr, voteId), "user already claimed"); - setUserHasClaimedToTrueForVote(userAddr, voteId); - uint256 payout = getStakeResolvedUserAmount(userAddr, voteId); - this.withdrawERC20(worldToken, payout); - emit RewardClaimed(userAddr, voteId, payout); - return payout; - } - - function isUserRegistered(address userAddr) external view returns (bool) { - if (users[userAddr].nullifierHash != 0) { - return true; - } else { - return false; - } - } - - function createVote(string calldata question, string[] calldata answers, uint256 startBlock, uint256 durationInBlocks, uint256 bounty) external { - uint256 voteId = votes.length; - Vote memory newVote = Vote({ - id: voteId, - question: question, - answers: answers, - startBlock: startBlock, - durationInBlocks: durationInBlocks - }); - votes.push(newVote); - - createNewStake(voteId, bounty); - - this.depositERC20Regular(worldToken, bounty); - - emit VoteCreated(voteId, getVoteQuestion(voteId), getVoteStartBlock(voteId), getVoteDurationInBlocks(voteId)); - } - - function getVotingPage(uint256 voteId) external view returns ( - string memory question, - string[] memory answers, - uint256 totalStake, - uint256[] memory stakePerAnswer - ) { - uint256 answerCount = getStakeAnswerCount(voteId); - totalStake = getStakeTotalStake(voteId); - stakePerAnswer = new uint256[](answerCount); - - for (uint i = 0; i < answerCount; i++) { - stakePerAnswer[i] = getStakeAnswerStake(voteId, i); - } - - return (getVoteQuestion(voteId), getVoteAnswers(voteId), totalStake, stakePerAnswer); - } - - function getVotingList() external view returns ( - uint256[] memory ids, - string[] memory questions, - uint256[] memory totalStakes - ) { - uint256 voteCount = getVoteCount(); - ids = new uint256[](voteCount); - questions = new string[](voteCount); - totalStakes = new uint256[](voteCount); - - for (uint i = 0; i < voteCount; i++) { - ids[i] = i; - questions[i] = getVoteQuestion(i); - totalStakes[i] = getStakeTotalStake(i); - } - - return (ids, questions, totalStakes); - } - - function isVotingOver(uint256 voteId) external view returns (bool) { - if (block.number > getVoteEndBlock(voteId)) { - return true; - } else { - return false; - } - } - - function hasUserVotedForVote(address userAddr, uint256 voteId) external view returns (bool) { - uint256 answerCount = getStakeAnswerCount(voteId); - for (uint i = 0; i < answerCount; i++) { - if (hasUserVotedForStakeAnswer(userAddr, voteId, i)) { - return true; - } - } - return false; - } - - function hasUserClaimedForVote(address userAddr, uint256 voteId) public view returns (bool) { - return stakesForVoteIds[voteId].hasUserClaimed[userAddr]; - } - - function getUserPayoutForVote(address userAddr, uint256 voteId) public view returns (uint256 payout) { - return getStakeResolvedUserAmount(userAddr, voteId); - } - - // internal - - // stake related - function createNewStake(uint256 voteId, uint256 initialStake) internal { - Stake storage newStake = stakesForVoteIds[voteId]; - newStake.totalStake = initialStake; - uint256 answerCount = votes[voteId].answers.length; - uint256 initialStakePerAnswer = initialStake / answerCount; - for (uint i = 0; i < answerCount; i++) { - newStake.answers.push(); - newStake.answers[i].totalStake = initialStakePerAnswer; - } - } - - function stakeForAnswer(address userAddr, uint256 voteId, uint256 answerIndex, uint256 amount) internal { - stakesForVoteIds[voteId].answers[answerIndex].userStakes[userAddr] = amount; - stakesForVoteIds[voteId].answers[answerIndex].totalStake += amount; - stakesForVoteIds[voteId].totalStake += amount; - } - - function setUserHasClaimedToTrueForVote(address userAddr, uint256 voteId) internal { - stakesForVoteIds[voteId].hasUserClaimed[userAddr] = true; - } - - function getStakeResolvedUserAmount(address userAddr, uint256 voteId) internal view returns (uint256 amount) { - uint256 highestStakeAnswerIndex = getStakeHighestAnswerIndex(voteId); - if (!hasUserVotedForStakeAnswer(userAddr, voteId, highestStakeAnswerIndex)) { - return 0; - } - uint256 userStake = getUserStakeOfStakeAnswer(userAddr, voteId, highestStakeAnswerIndex); - uint256 totalStake = getStakeTotalStake(voteId); - uint256 answerStake = getStakeAnswerStake(voteId, highestStakeAnswerIndex); - uint256 userPayout = totalStake / answerStake * userStake; - return userPayout; - } - - function getStakeHighestAnswerIndex(uint256 voteId) internal view returns (uint256 answerIndex) { - uint256 answerCount = getStakeAnswerCount(voteId); - uint256 highestAmount = 0; - uint256 highestIndex = 0; - - for (uint i = 0; i < answerCount; i++) { - uint256 answerStake = getStakeAnswerStake(voteId, i); - if (highestAmount < answerStake) { - highestAmount = answerStake; - highestIndex = i; - } - } - return highestIndex; - } - - function getStakeAnswerStake(uint256 voteId, uint256 answerIndex) internal view returns (uint256 stake) { - return stakesForVoteIds[voteId].answers[answerIndex].totalStake; - } - - function getStakeAnswerCount(uint256 voteId) internal view returns (uint256 count) { - return stakesForVoteIds[voteId].answers.length; - } - - function getStakeTotalStake(uint256 voteId) internal view returns (uint256 stake) { - return stakesForVoteIds[voteId].totalStake; - } - - function hasUserVotedForStakeAnswer(address userAddr, uint256 voteId, uint256 answerIndex) internal view returns (bool voted) { - if (stakesForVoteIds[voteId].answers[answerIndex].userStakes[userAddr] != 0) { - return true; - } else { - return false; - } - } - - function getUserStakeOfStakeAnswer(address userAddr, uint256 voteId, uint256 answerIndex) internal view returns (uint256 amount) { - return stakesForVoteIds[voteId].answers[answerIndex].userStakes[userAddr]; - } - - // vote related - function getVoteCount() internal view returns (uint256 count) { - return votes.length; - } - - function getVoteQuestion(uint256 voteId) internal view returns (string memory question) { - return votes[voteId].question; - } - - function getVoteAnswers(uint256 voteId) internal view returns (string[] memory answers) { - return votes[voteId].answers; - } - - function getVoteStartBlock(uint256 voteId) internal view returns (uint256 startBlock) { - return votes[voteId].startBlock; - } - - function getVoteDurationInBlocks(uint256 voteId) internal view returns (uint256 durationInBlocks) { - return votes[voteId].durationInBlocks; - } - - function getVoteEndBlock(uint256 voteId) internal view returns (uint256 endBlock) { - return getVoteStartBlock(voteId) + getVoteDurationInBlocks(voteId); - } -} \ No newline at end of file diff --git a/packages/foundry/contracts/Permit2Vault.sol b/packages/foundry/contracts/Permit2Vault.sol index 2e803ed..54a9d13 100644 --- a/packages/foundry/contracts/Permit2Vault.sol +++ b/packages/foundry/contracts/Permit2Vault.sol @@ -32,6 +32,7 @@ contract Permit2Vault { // Deposit some amount of an ERC20 token from the caller // into this contract using Permit2. function depositERC20( + address userAddr, IERC20 token, uint256 amount, uint256 nonce, @@ -39,7 +40,7 @@ contract Permit2Vault { bytes calldata signature ) external nonReentrant { // Credit the caller. - tokenBalancesByUser[msg.sender][token] += amount; + tokenBalancesByUser[userAddr][token] += amount; totalBalance += amount; // Transfer tokens from the caller to ourselves. PERMIT2.permitTransferFrom( @@ -60,29 +61,30 @@ contract Permit2Vault { // The owner of the tokens, which must also be // the signer of the message, otherwise this call // will fail. - msg.sender, + userAddr, // The packed signature that was the result of signing // the EIP712 hash of `permit`. signature ); - emit Deposited(address(msg.sender), amount); + + emit Deposited(userAddr, amount); } - function depositERC20Regular(IERC20 token, uint256 amount) external { - tokenBalancesByUser[msg.sender][token] += amount; + function depositERC20Regular(address userAddr, IERC20 token, uint256 amount) external { + tokenBalancesByUser[userAddr][token] += amount; totalBalance += amount; - token.transfer(address(this), amount); - emit Deposited(address(msg.sender), amount); + token.transferFrom(userAddr, address(this), amount); + emit Deposited(userAddr, amount); } // Return ERC20 tokens deposited by the caller. - function withdrawERC20(IERC20 token, uint256 amount) external nonReentrant { - tokenBalancesByUser[msg.sender][token] -= amount; + function withdrawERC20(address userAddr, IERC20 token, uint256 amount) external nonReentrant { + tokenBalancesByUser[userAddr][token] -= amount; totalBalance -= amount; // TODO: In production, use an ERC20 compatibility library to // execute thie transfer to support non-compliant tokens. - token.transfer(msg.sender, amount); - emit Withdrawn(msg.sender, amount); + token.transfer(userAddr, amount); + emit Withdrawn(userAddr, amount); } function _toTokenPermissionsArray(IERC20[] calldata tokens, uint256[] calldata amounts) @@ -94,7 +96,7 @@ contract Permit2Vault { } } - function rescueTokens(IERC20 token, address recipient) external { - token.transfer(recipient, totalBalance); - } + // function rescueTokens(IERC20 token, address recipient) external { + // token.transfer(recipient, totalBalance); + // } } \ No newline at end of file diff --git a/packages/foundry/contractsToVerify/Permit2Vault.sol b/packages/foundry/contractsToVerify/Permit2Vault.sol index c5cf0e0..5c4a4a9 100644 --- a/packages/foundry/contractsToVerify/Permit2Vault.sol +++ b/packages/foundry/contractsToVerify/Permit2Vault.sol @@ -32,6 +32,7 @@ contract Permit2Vault { // Deposit some amount of an ERC20 token from the caller // into this contract using Permit2. function depositERC20( + address userAddr, IERC20 token, uint256 amount, uint256 nonce, @@ -68,15 +69,15 @@ contract Permit2Vault { emit Deposited(address(msg.sender), amount); } - function depositERC20Regular(IERC20 token, uint256 amount) external { - tokenBalancesByUser[msg.sender][token] += amount; + function depositERC20Regular(address userAddr, IERC20 token, uint256 amount) external { + tokenBalancesByUser[address(tx.origin)][token] += amount; totalBalance += amount; token.transfer(address(this), amount); emit Deposited(address(msg.sender), amount); } // Return ERC20 tokens deposited by the caller. - function withdrawERC20(IERC20 token, uint256 amount) external nonReentrant { + function withdrawERC20(address userAddr, IERC20 token, uint256 amount) external nonReentrant { tokenBalancesByUser[msg.sender][token] -= amount; totalBalance -= amount; // TODO: In production, use an ERC20 compatibility library to @@ -94,7 +95,7 @@ contract Permit2Vault { } } - function rescueTokens(IERC20 token, address recipient) external { - token.transfer(recipient, totalBalance); - } + // function rescueTokens(IERC20 token, address recipient) external { + // token.transfer(recipient, totalBalance); + // } } \ No newline at end of file diff --git a/packages/foundry/interfaces/IERC20.sol b/packages/foundry/interfaces/IERC20.sol index 138dd72..ce90dfc 100644 --- a/packages/foundry/interfaces/IERC20.sol +++ b/packages/foundry/interfaces/IERC20.sol @@ -3,5 +3,6 @@ pragma solidity ^0.8.28; // Minimal ERC20 interface. interface IERC20 { + function transferFrom(address from, address to, uint256 amount) external returns (bool); function transfer(address to, uint256 amount) external returns (bool); } \ No newline at end of file diff --git a/packages/foundry/script/Deploy.s.sol b/packages/foundry/script/Deploy.s.sol index 3c41c2c..306b96d 100644 --- a/packages/foundry/script/Deploy.s.sol +++ b/packages/foundry/script/Deploy.s.sol @@ -4,7 +4,6 @@ pragma solidity ^0.8.19; import "./DeployHelpers.s.sol"; import { DeployMockHumanOracle } from "./DeployMockHumanOracle.s.sol"; import { DeployHumanOracle } from "./DeployHumanOracle.s.sol"; -import { DeployHumanOracleWithVault } from "./DeployHumanOracleWithVault.s.sol"; import { DeployWorldIDRegister } from "./DeployWorldIDRegister.s.sol"; import { DeployHumanOracleV1 } from "./DeployHumanOracleV1.s.sol"; diff --git a/packages/foundry/script/DeployHumanOracleWithVault.s.sol b/packages/foundry/script/DeployHumanOracleWithVault.s.sol deleted file mode 100644 index a46e605..0000000 --- a/packages/foundry/script/DeployHumanOracleWithVault.s.sol +++ /dev/null @@ -1,25 +0,0 @@ -//SPDX-License-Identifier: MIT -pragma solidity ^0.8.19; - -import "../contracts/HumanOracleWithVault.sol"; -import "./DeployHelpers.s.sol"; - -contract DeployHumanOracleWithVault is ScaffoldETHDeploy { - - address public worldIdAddr = 0x17B354dD2595411ff79041f930e491A4Df39A278; - address public worldToken = 0x2cFc85d8E48F8EAB294be644d9E25C3030863003; - address public permit2 = 0x000000000022D473030F116dDEE9F6B43aC78BA3; - address public owner = 0x4639B9F663C14Bad89Ddcc16966e85Bc81dCCD40; - uint256 public groupId = 1; - string public appId = "app_22ea9fb73d53333c2997e8f16e60cc6b"; - string public action = "registration"; - - function run() external ScaffoldEthDeployerRunner { - HumanOracleWithVault humanOracleWithVault = new HumanOracleWithVault(worldIdAddr, worldToken, groupId, appId, action, permit2, owner); - console.logString( - string.concat( - "HumanOracle deployed at: ", vm.toString(address(humanOracleWithVault)) - ) - ); - } -} diff --git a/packages/foundry/test/HumanOracleWithVault.t.sol b/packages/foundry/test/HumanOracleWithVault.t.sol index 44e6448..c12997e 100644 --- a/packages/foundry/test/HumanOracleWithVault.t.sol +++ b/packages/foundry/test/HumanOracleWithVault.t.sol @@ -1,366 +1,366 @@ -// // SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.28; +// // // SPDX-License-Identifier: UNLICENSED +// pragma solidity ^0.8.28; -import "../lib/solmate/src/tokens/ERC20.sol"; -import "../contracts/Permit2Vault.sol"; -import "../contracts/HumanOracleWithVault.sol"; -import "./TestUtils.sol"; +// import "../lib/solmate/src/tokens/ERC20.sol"; +// import "../contracts/Permit2Vault.sol"; +// import "../contracts/HumanOracleWithVault.sol"; +// import "./TestUtils.sol"; -contract HumanOracleWithVaultTest is TestUtils { - bytes32 constant TOKEN_PERMISSIONS_TYPEHASH = - keccak256("TokenPermissions(address token,uint256 amount)"); - bytes32 constant PERMIT_TRANSFER_FROM_TYPEHASH = keccak256( - "PermitTransferFrom(TokenPermissions permitted,address spender,uint256 nonce,uint256 deadline)TokenPermissions(address token,uint256 amount)" - ); - bytes32 constant PERMIT_BATCH_TRANSFER_FROM_TYPEHASH = keccak256( - "PermitBatchTransferFrom(TokenPermissions[] permitted,address spender,uint256 nonce,uint256 deadline)TokenPermissions(address token,uint256 amount)" - ); +// contract HumanOracleWithVaultTest is TestUtils { +// bytes32 constant TOKEN_PERMISSIONS_TYPEHASH = +// keccak256("TokenPermissions(address token,uint256 amount)"); +// bytes32 constant PERMIT_TRANSFER_FROM_TYPEHASH = keccak256( +// "PermitTransferFrom(TokenPermissions permitted,address spender,uint256 nonce,uint256 deadline)TokenPermissions(address token,uint256 amount)" +// ); +// bytes32 constant PERMIT_BATCH_TRANSFER_FROM_TYPEHASH = keccak256( +// "PermitBatchTransferFrom(TokenPermissions[] permitted,address spender,uint256 nonce,uint256 deadline)TokenPermissions(address token,uint256 amount)" +// ); - Permit2Clone permit2 = new Permit2Clone(); - TestERC20 token1 = new TestERC20(); - TestERC20 token2 = new TestERC20(); - ReenteringERC20 badToken = new ReenteringERC20(); - HumanOracleWithVault vault; - uint256 ownerKey; - address owner; +// Permit2Clone permit2 = new Permit2Clone(); +// TestERC20 token1 = new TestERC20(); +// TestERC20 token2 = new TestERC20(); +// ReenteringERC20 badToken = new ReenteringERC20(); +// HumanOracleWithVault vault; +// uint256 ownerKey; +// address owner; - constructor() { - vm.chainId(1); - ownerKey = _randomUint256(); - owner = vm.addr(ownerKey); - vault = new HumanOracleWithVault(address(0), address(token1), 0, string(""), string(""), address(permit2), owner); - // Set up unlimited token approvals from the user onto the permit2 contract. - vm.prank(owner); - token1.approve(address(permit2), type(uint256).max); - vm.prank(owner); - token2.approve(address(permit2), type(uint256).max); - } +// constructor() { +// vm.chainId(1); +// ownerKey = _randomUint256(); +// owner = vm.addr(ownerKey); +// vault = new HumanOracleWithVault(address(0), address(token1), 0, string(""), string(""), address(permit2), owner); +// // Set up unlimited token approvals from the user onto the permit2 contract. +// vm.prank(owner); +// token1.approve(address(permit2), type(uint256).max); +// vm.prank(owner); +// token2.approve(address(permit2), type(uint256).max); +// } - function test_canDeposit() external { - uint256 amount = _randomUint256() % 1e18 + 1; - token1.mint(owner, amount); - IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ - permitted: IPermit2.TokenPermissions({ - token: IERC20(address(token1)), - amount: amount - }), - nonce: _randomUint256(), - deadline: block.timestamp - }); - bytes memory sig = _signPermit(permit, address(vault), ownerKey); - vm.prank(owner); - vault.depositERC20( - IERC20(address(token1)), - amount, - permit.nonce, - permit.deadline, - sig - ); - assertEq(vault.tokenBalancesByUser(owner, IERC20(address(token1))), amount); - assertEq(token1.balanceOf(address(vault)), amount); - assertEq(token1.balanceOf(owner), 0); - } +// function test_canDeposit() external { +// uint256 amount = _randomUint256() % 1e18 + 1; +// token1.mint(owner, amount); +// IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ +// permitted: IPermit2.TokenPermissions({ +// token: IERC20(address(token1)), +// amount: amount +// }), +// nonce: _randomUint256(), +// deadline: block.timestamp +// }); +// bytes memory sig = _signPermit(permit, address(vault), ownerKey); +// vm.prank(owner); +// vault.depositERC20( +// IERC20(address(token1)), +// amount, +// permit.nonce, +// permit.deadline, +// sig +// ); +// assertEq(vault.tokenBalancesByUser(owner, IERC20(address(token1))), amount); +// assertEq(token1.balanceOf(address(vault)), amount); +// assertEq(token1.balanceOf(owner), 0); +// } - function test_cannotReusePermit() external { - uint256 amount = _randomUint256() % 1e18 + 1; - token1.mint(owner, amount); - IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ - permitted: IPermit2.TokenPermissions({ - token: IERC20(address(token1)), - amount: amount - }), - nonce: _randomUint256(), - deadline: block.timestamp - }); - bytes memory sig = _signPermit(permit, address(vault), ownerKey); - vm.prank(owner); - vault.depositERC20( - IERC20(address(token1)), - amount, - permit.nonce, - permit.deadline, - sig - ); - vm.expectRevert(abi.encodeWithSelector(Permit2Clone.InvalidNonce.selector)); - vm.prank(owner); - vault.depositERC20( - IERC20(address(token1)), - amount, - permit.nonce, - permit.deadline, - sig - ); - } +// function test_cannotReusePermit() external { +// uint256 amount = _randomUint256() % 1e18 + 1; +// token1.mint(owner, amount); +// IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ +// permitted: IPermit2.TokenPermissions({ +// token: IERC20(address(token1)), +// amount: amount +// }), +// nonce: _randomUint256(), +// deadline: block.timestamp +// }); +// bytes memory sig = _signPermit(permit, address(vault), ownerKey); +// vm.prank(owner); +// vault.depositERC20( +// IERC20(address(token1)), +// amount, +// permit.nonce, +// permit.deadline, +// sig +// ); +// vm.expectRevert(abi.encodeWithSelector(Permit2Clone.InvalidNonce.selector)); +// vm.prank(owner); +// vault.depositERC20( +// IERC20(address(token1)), +// amount, +// permit.nonce, +// permit.deadline, +// sig +// ); +// } - function test_cannotUseOthersPermit() external { - uint256 amount = _randomUint256() % 1e18 + 1; - token1.mint(owner, amount); - IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ - permitted: IPermit2.TokenPermissions({ - token: IERC20(address(token1)), - amount: amount - }), - nonce: _randomUint256(), - deadline: block.timestamp - }); - bytes memory sig = _signPermit(permit, address(vault), ownerKey); - vm.expectRevert(abi.encodeWithSelector(Permit2Clone.InvalidSigner.selector)); - vm.prank(_randomAddress()); - vault.depositERC20( - IERC20(address(token1)), - amount, - permit.nonce, - permit.deadline, - sig - ); - } +// function test_cannotUseOthersPermit() external { +// uint256 amount = _randomUint256() % 1e18 + 1; +// token1.mint(owner, amount); +// IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ +// permitted: IPermit2.TokenPermissions({ +// token: IERC20(address(token1)), +// amount: amount +// }), +// nonce: _randomUint256(), +// deadline: block.timestamp +// }); +// bytes memory sig = _signPermit(permit, address(vault), ownerKey); +// vm.expectRevert(abi.encodeWithSelector(Permit2Clone.InvalidSigner.selector)); +// vm.prank(_randomAddress()); +// vault.depositERC20( +// IERC20(address(token1)), +// amount, +// permit.nonce, +// permit.deadline, +// sig +// ); +// } - function test_cannotUseOtherTokenPermit() external { - vm.prank(owner); - token2.approve(address(permit2), type(uint256).max); - uint256 amount = _randomUint256() % 1e18 + 1; - token1.mint(owner, amount); - token2.mint(owner, amount); - IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ - permitted: IPermit2.TokenPermissions({ - token: IERC20(address(token2)), - amount: amount - }), - nonce: _randomUint256(), - deadline: block.timestamp - }); - bytes memory sig = _signPermit(permit, address(vault), ownerKey); - vm.prank(owner); - vm.expectRevert(Permit2Clone.InvalidSigner.selector); - vault.depositERC20( - IERC20(address(token1)), - amount, - permit.nonce, - permit.deadline, - sig - ); - } +// function test_cannotUseOtherTokenPermit() external { +// vm.prank(owner); +// token2.approve(address(permit2), type(uint256).max); +// uint256 amount = _randomUint256() % 1e18 + 1; +// token1.mint(owner, amount); +// token2.mint(owner, amount); +// IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ +// permitted: IPermit2.TokenPermissions({ +// token: IERC20(address(token2)), +// amount: amount +// }), +// nonce: _randomUint256(), +// deadline: block.timestamp +// }); +// bytes memory sig = _signPermit(permit, address(vault), ownerKey); +// vm.prank(owner); +// vm.expectRevert(Permit2Clone.InvalidSigner.selector); +// vault.depositERC20( +// IERC20(address(token1)), +// amount, +// permit.nonce, +// permit.deadline, +// sig +// ); +// } - function test_canWithdraw() external { - uint256 amount = _randomUint256() % 1e18 + 2; - token1.mint(owner, amount); - IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ - permitted: IPermit2.TokenPermissions({ - token: IERC20(address(token1)), - amount: amount - }), - nonce: _randomUint256(), - deadline: block.timestamp - }); - bytes memory sig = _signPermit(permit, address(vault), ownerKey); - vm.prank(owner); - vault.depositERC20( - IERC20(address(token1)), - amount, - permit.nonce, - permit.deadline, - sig - ); - vm.prank(owner); - vault.withdrawERC20(IERC20(address(token1)), amount - 1); - assertEq(token1.balanceOf(owner), amount - 1); - assertEq(token1.balanceOf(address(vault)), 1); - } +// function test_canWithdraw() external { +// uint256 amount = _randomUint256() % 1e18 + 2; +// token1.mint(owner, amount); +// IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ +// permitted: IPermit2.TokenPermissions({ +// token: IERC20(address(token1)), +// amount: amount +// }), +// nonce: _randomUint256(), +// deadline: block.timestamp +// }); +// bytes memory sig = _signPermit(permit, address(vault), ownerKey); +// vm.prank(owner); +// vault.depositERC20( +// IERC20(address(token1)), +// amount, +// permit.nonce, +// permit.deadline, +// sig +// ); +// vm.prank(owner); +// vault.withdrawERC20(IERC20(address(token1)), amount - 1); +// assertEq(token1.balanceOf(owner), amount - 1); +// assertEq(token1.balanceOf(address(vault)), 1); +// } - function test_cannotWithdrawOthers() external { - uint256 amount = _randomUint256() % 1e18 + 1; - token1.mint(owner, amount); - IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ - permitted: IPermit2.TokenPermissions({ - token: IERC20(address(token1)), - amount: amount - }), - nonce: _randomUint256(), - deadline: block.timestamp - }); - bytes memory sig = _signPermit(permit, address(vault), ownerKey); - vm.prank(owner); - vault.depositERC20( - IERC20(address(token1)), - amount, - permit.nonce, - permit.deadline, - sig - ); - vm.expectRevert(); - vm.prank(_randomAddress()); - vault.withdrawERC20(IERC20(address(token1)), amount); - } +// function test_cannotWithdrawOthers() external { +// uint256 amount = _randomUint256() % 1e18 + 1; +// token1.mint(owner, amount); +// IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ +// permitted: IPermit2.TokenPermissions({ +// token: IERC20(address(token1)), +// amount: amount +// }), +// nonce: _randomUint256(), +// deadline: block.timestamp +// }); +// bytes memory sig = _signPermit(permit, address(vault), ownerKey); +// vm.prank(owner); +// vault.depositERC20( +// IERC20(address(token1)), +// amount, +// permit.nonce, +// permit.deadline, +// sig +// ); +// vm.expectRevert(); +// vm.prank(_randomAddress()); +// vault.withdrawERC20(IERC20(address(token1)), amount); +// } - function test_cannotReenter() external { - IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ - permitted: IPermit2.TokenPermissions({ - token: IERC20(address(badToken)), - amount: 0 - }), - nonce: _randomUint256(), - deadline: block.timestamp - }); - bytes memory sig = _signPermit(permit, address(vault), ownerKey); - // Reenter by calling withdrawERC20() in transferFrom() - badToken.setReentrantCall( - address(vault), - abi.encodeCall(vault.withdrawERC20, (IERC20(address(badToken)), 0)) - ); - // Will manifest as a TRANSFER_FROM_FAILED - vm.expectRevert('TRANSFER_FROM_FAILED'); - vm.prank(owner); - vault.depositERC20( - IERC20(address(badToken)), - 0, - permit.nonce, - permit.deadline, - sig - ); - } +// function test_cannotReenter() external { +// IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ +// permitted: IPermit2.TokenPermissions({ +// token: IERC20(address(badToken)), +// amount: 0 +// }), +// nonce: _randomUint256(), +// deadline: block.timestamp +// }); +// bytes memory sig = _signPermit(permit, address(vault), ownerKey); +// // Reenter by calling withdrawERC20() in transferFrom() +// badToken.setReentrantCall( +// address(vault), +// abi.encodeCall(vault.withdrawERC20, (IERC20(address(badToken)), 0)) +// ); +// // Will manifest as a TRANSFER_FROM_FAILED +// vm.expectRevert('TRANSFER_FROM_FAILED'); +// vm.prank(owner); +// vault.depositERC20( +// IERC20(address(badToken)), +// 0, +// permit.nonce, +// permit.deadline, +// sig +// ); +// } - // Generate a signature for a permit message. - function _signPermit( - IPermit2.PermitTransferFrom memory permit, - address spender, - uint256 signerKey - ) - internal - view - returns (bytes memory sig) - { - (uint8 v, bytes32 r, bytes32 s) = - vm.sign(signerKey, _getEIP712Hash(permit, spender)); - return abi.encodePacked(r, s, v); - } +// // Generate a signature for a permit message. +// function _signPermit( +// IPermit2.PermitTransferFrom memory permit, +// address spender, +// uint256 signerKey +// ) +// internal +// view +// returns (bytes memory sig) +// { +// (uint8 v, bytes32 r, bytes32 s) = +// vm.sign(signerKey, _getEIP712Hash(permit, spender)); +// return abi.encodePacked(r, s, v); +// } - // Generate a signature for a batch permit message. - function _signPermit( - IPermit2.PermitBatchTransferFrom memory permit, - address spender, - uint256 signerKey - ) - internal - view - returns (bytes memory sig) - { - (uint8 v, bytes32 r, bytes32 s) = - vm.sign(signerKey, _getEIP712Hash(permit, spender)); - return abi.encodePacked(r, s, v); - } +// // Generate a signature for a batch permit message. +// function _signPermit( +// IPermit2.PermitBatchTransferFrom memory permit, +// address spender, +// uint256 signerKey +// ) +// internal +// view +// returns (bytes memory sig) +// { +// (uint8 v, bytes32 r, bytes32 s) = +// vm.sign(signerKey, _getEIP712Hash(permit, spender)); +// return abi.encodePacked(r, s, v); +// } - // Compute the EIP712 hash of the permit object. - // Normally this would be implemented off-chain. - function _getEIP712Hash(IPermit2.PermitTransferFrom memory permit, address spender) - internal - view - returns (bytes32 h) - { - return keccak256(abi.encodePacked( - "\x19\x01", - permit2.DOMAIN_SEPARATOR(), - keccak256(abi.encode( - PERMIT_TRANSFER_FROM_TYPEHASH, - keccak256(abi.encode( - TOKEN_PERMISSIONS_TYPEHASH, - permit.permitted.token, - permit.permitted.amount - )), - spender, - permit.nonce, - permit.deadline - )) - )); - } +// // Compute the EIP712 hash of the permit object. +// // Normally this would be implemented off-chain. +// function _getEIP712Hash(IPermit2.PermitTransferFrom memory permit, address spender) +// internal +// view +// returns (bytes32 h) +// { +// return keccak256(abi.encodePacked( +// "\x19\x01", +// permit2.DOMAIN_SEPARATOR(), +// keccak256(abi.encode( +// PERMIT_TRANSFER_FROM_TYPEHASH, +// keccak256(abi.encode( +// TOKEN_PERMISSIONS_TYPEHASH, +// permit.permitted.token, +// permit.permitted.amount +// )), +// spender, +// permit.nonce, +// permit.deadline +// )) +// )); +// } - // Compute the EIP712 hash of the batch permit object. - // Normally this would be implemented off-chain. - function _getEIP712Hash(IPermit2.PermitBatchTransferFrom memory permit, address spender) - internal - view - returns (bytes32 h) - { - bytes32 permittedHash; - { - uint256 n = permit.permitted.length; - bytes32[] memory contentHashes = new bytes32[](n); - for (uint256 i; i < n; ++i) { - contentHashes[i] = keccak256(abi.encode( - TOKEN_PERMISSIONS_TYPEHASH, - permit.permitted[i].token, - permit.permitted[i].amount - )); - } - permittedHash = keccak256(abi.encodePacked(contentHashes)); - } - return keccak256(abi.encodePacked( - "\x19\x01", - permit2.DOMAIN_SEPARATOR(), - keccak256(abi.encode( - PERMIT_BATCH_TRANSFER_FROM_TYPEHASH, - permittedHash, - spender, - permit.nonce, - permit.deadline - )) - )); - } -} +// // Compute the EIP712 hash of the batch permit object. +// // Normally this would be implemented off-chain. +// function _getEIP712Hash(IPermit2.PermitBatchTransferFrom memory permit, address spender) +// internal +// view +// returns (bytes32 h) +// { +// bytes32 permittedHash; +// { +// uint256 n = permit.permitted.length; +// bytes32[] memory contentHashes = new bytes32[](n); +// for (uint256 i; i < n; ++i) { +// contentHashes[i] = keccak256(abi.encode( +// TOKEN_PERMISSIONS_TYPEHASH, +// permit.permitted[i].token, +// permit.permitted[i].amount +// )); +// } +// permittedHash = keccak256(abi.encodePacked(contentHashes)); +// } +// return keccak256(abi.encodePacked( +// "\x19\x01", +// permit2.DOMAIN_SEPARATOR(), +// keccak256(abi.encode( +// PERMIT_BATCH_TRANSFER_FROM_TYPEHASH, +// permittedHash, +// spender, +// permit.nonce, +// permit.deadline +// )) +// )); +// } +// } -contract TestERC20 is ERC20 { - constructor() ERC20("Test", "TST", 18) {} +// contract TestERC20 is ERC20 { +// constructor() ERC20("Test", "TST", 18) {} - function mint(address owner, uint256 amount) external { - _mint(owner, amount); - } -} +// function mint(address owner, uint256 amount) external { +// _mint(owner, amount); +// } +// } -contract ReenteringERC20 { - address _reentrantCallTarget; - bytes _reentrantCallData; +// contract ReenteringERC20 { +// address _reentrantCallTarget; +// bytes _reentrantCallData; - function setReentrantCall(address target, bytes calldata callData) - external - { - _reentrantCallTarget = target; - _reentrantCallData = callData; - } +// function setReentrantCall(address target, bytes calldata callData) +// external +// { +// _reentrantCallTarget = target; +// _reentrantCallData = callData; +// } - function transferFrom(address, address, uint256) external returns (bool) { - (bool s, bytes memory r) = _reentrantCallTarget.call(_reentrantCallData); - if (!s) { - assembly { revert(add(r, 0x20), mload(r)) } - } - return true; - } -} +// function transferFrom(address, address, uint256) external returns (bool) { +// (bool s, bytes memory r) = _reentrantCallTarget.call(_reentrantCallData); +// if (!s) { +// assembly { revert(add(r, 0x20), mload(r)) } +// } +// return true; +// } +// } -// Local bytecode clone of the canonical Permit2 contract deployed to mainnet. -contract Permit2Clone is IPermit2 { - error InvalidNonce(); - error InvalidSigner(); +// // Local bytecode clone of the canonical Permit2 contract deployed to mainnet. +// contract Permit2Clone is IPermit2 { +// error InvalidNonce(); +// error InvalidSigner(); - constructor() { - // Deployed Permit2 bytecode at - // https://etherscan.io/address/0x000000000022D473030F116dDEE9F6B43aC78BA3 - bytes memory bytecode = hex"6040608081526004908136101561001557600080fd5b600090813560e01c80630d58b1db1461126c578063137c29fe146110755780632a2d80d114610db75780632b67b57014610bde57806330f28b7a14610ade5780633644e51514610a9d57806336c7851614610a285780633ff9dcb1146109a85780634fe02b441461093f57806365d9723c146107ac57806387517c451461067a578063927da105146105c3578063cc53287f146104a3578063edd9444b1461033a5763fe8ec1a7146100c657600080fd5b346103365760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103365767ffffffffffffffff833581811161033257610114903690860161164b565b60243582811161032e5761012b903690870161161a565b6101336114e6565b9160843585811161032a5761014b9036908a016115c1565b98909560a43590811161032657610164913691016115c1565b969095815190610173826113ff565b606b82527f5065726d697442617463685769746e6573735472616e7366657246726f6d285460208301527f6f6b656e5065726d697373696f6e735b5d207065726d69747465642c61646472838301527f657373207370656e6465722c75696e74323536206e6f6e63652c75696e74323560608301527f3620646561646c696e652c000000000000000000000000000000000000000000608083015282519a8b9181610222602085018096611f93565b918237018a8152039961025b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09b8c8101835282611437565b5190209085515161026b81611ebb565b908a5b8181106102f95750506102f6999a6102ed9183516102a081610294602082018095611f66565b03848101835282611437565b519020602089810151858b015195519182019687526040820192909252336060820152608081019190915260a081019390935260643560c08401528260e081015b03908101835282611437565b51902093611cf7565b80f35b8061031161030b610321938c5161175e565b51612054565b61031b828661175e565b52611f0a565b61026e565b8880fd5b8780fd5b8480fd5b8380fd5b5080fd5b5091346103365760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103365767ffffffffffffffff9080358281116103325761038b903690830161164b565b60243583811161032e576103a2903690840161161a565b9390926103ad6114e6565b9160643590811161049f576103c4913691016115c1565b949093835151976103d489611ebb565b98885b81811061047d5750506102f697988151610425816103f9602082018095611f66565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611437565b5190206020860151828701519083519260208401947ffcf35f5ac6a2c28868dc44c302166470266239195f02b0ee408334829333b7668652840152336060840152608083015260a082015260a081526102ed8161141b565b808b61031b8261049461030b61049a968d5161175e565b9261175e565b6103d7565b8680fd5b5082346105bf57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103325780359067ffffffffffffffff821161032e576104f49136910161161a565b929091845b848110610504578580f35b8061051a610515600193888861196c565b61197c565b61052f84610529848a8a61196c565b0161197c565b3389528385528589209173ffffffffffffffffffffffffffffffffffffffff80911692838b528652868a20911690818a5285528589207fffffffffffffffffffffffff000000000000000000000000000000000000000081541690558551918252848201527f89b1add15eff56b3dfe299ad94e01f2b52fbcb80ae1a3baea6ae8c04cb2b98a4853392a2016104f9565b8280fd5b50346103365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657610676816105ff6114a0565b936106086114c3565b6106106114e6565b73ffffffffffffffffffffffffffffffffffffffff968716835260016020908152848420928816845291825283832090871683528152919020549251938316845260a083901c65ffffffffffff169084015260d09190911c604083015281906060820190565b0390f35b50346103365760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610336576106b26114a0565b906106bb6114c3565b916106c46114e6565b65ffffffffffff926064358481169081810361032a5779ffffffffffff0000000000000000000000000000000000000000947fda9fa7c1b00402c17d0161b249b1ab8bbec047c5a52207b9c112deffd817036b94338a5260016020527fffffffffffff0000000000000000000000000000000000000000000000000000858b209873ffffffffffffffffffffffffffffffffffffffff809416998a8d5260205283878d209b169a8b8d52602052868c209486156000146107a457504216925b8454921697889360a01b16911617179055815193845260208401523392a480f35b905092610783565b5082346105bf5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf576107e56114a0565b906107ee6114c3565b9265ffffffffffff604435818116939084810361032a57338852602091600183528489209673ffffffffffffffffffffffffffffffffffffffff80911697888b528452858a20981697888a5283528489205460d01c93848711156109175761ffff9085840316116108f05750907f55eb90d810e1700b35a8e7e25395ff7f2b2259abd7415ca2284dfb1c246418f393929133895260018252838920878a528252838920888a5282528389209079ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffff000000000000000000000000000000000000000000000000000083549260d01b16911617905582519485528401523392a480f35b84517f24d35a26000000000000000000000000000000000000000000000000000000008152fd5b5084517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b503461033657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610336578060209273ffffffffffffffffffffffffffffffffffffffff61098f6114a0565b1681528084528181206024358252845220549051908152f35b5082346105bf57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf577f3704902f963766a4e561bbaab6e6cdc1b1dd12f6e9e99648da8843b3f46b918d90359160243533855284602052818520848652602052818520818154179055815193845260208401523392a280f35b8234610a9a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610a9a57610a606114a0565b610a686114c3565b610a706114e6565b6064359173ffffffffffffffffffffffffffffffffffffffff8316830361032e576102f6936117a1565b80fd5b503461033657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657602090610ad7611b1e565b9051908152f35b508290346105bf576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf57610b1a3661152a565b90807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c36011261033257610b4c611478565b9160e43567ffffffffffffffff8111610bda576102f694610b6f913691016115c1565b939092610b7c8351612054565b6020840151828501519083519260208401947f939c21a48a8dbe3a9a2404a1d46691e4d39f6583d6ec6b35714604c986d801068652840152336060840152608083015260a082015260a08152610bd18161141b565b51902091611c25565b8580fd5b509134610336576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657610c186114a0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc360160c08112610332576080855191610c51836113e3565b1261033257845190610c6282611398565b73ffffffffffffffffffffffffffffffffffffffff91602435838116810361049f578152604435838116810361049f57602082015265ffffffffffff606435818116810361032a5788830152608435908116810361049f576060820152815260a435938285168503610bda576020820194855260c4359087830182815260e43567ffffffffffffffff811161032657610cfe90369084016115c1565b929093804211610d88575050918591610d786102f6999a610d7e95610d238851611fbe565b90898c511690519083519260208401947ff3841cd1ff0085026a6327b620b67997ce40f282c88a8e905a7a5626e310f3d086528401526060830152608082015260808152610d70816113ff565b519020611bd9565b916120c7565b519251169161199d565b602492508a51917fcd21db4f000000000000000000000000000000000000000000000000000000008352820152fd5b5091346103365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc93818536011261033257610df36114a0565b9260249081359267ffffffffffffffff9788851161032a578590853603011261049f578051978589018981108282111761104a578252848301358181116103265785019036602383011215610326578382013591610e50836115ef565b90610e5d85519283611437565b838252602093878584019160071b83010191368311611046578801905b828210610fe9575050508a526044610e93868801611509565b96838c01978852013594838b0191868352604435908111610fe557610ebb90369087016115c1565b959096804211610fba575050508998995151610ed681611ebb565b908b5b818110610f9757505092889492610d7892610f6497958351610f02816103f98682018095611f66565b5190209073ffffffffffffffffffffffffffffffffffffffff9a8b8b51169151928551948501957faf1b0d30d2cab0380e68f0689007e3254993c596f2fdd0aaa7f4d04f794408638752850152830152608082015260808152610d70816113ff565b51169082515192845b848110610f78578580f35b80610f918585610f8b600195875161175e565b5161199d565b01610f6d565b80610311610fac8e9f9e93610fb2945161175e565b51611fbe565b9b9a9b610ed9565b8551917fcd21db4f000000000000000000000000000000000000000000000000000000008352820152fd5b8a80fd5b6080823603126110465785608091885161100281611398565b61100b85611509565b8152611018838601611509565b838201526110278a8601611607565b8a8201528d611037818701611607565b90820152815201910190610e7a565b8c80fd5b84896041867f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b5082346105bf576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf576110b03661152a565b91807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c360112610332576110e2611478565b67ffffffffffffffff93906101043585811161049f5761110590369086016115c1565b90936101243596871161032a57611125610bd1966102f6983691016115c1565b969095825190611134826113ff565b606482527f5065726d69745769746e6573735472616e7366657246726f6d28546f6b656e5060208301527f65726d697373696f6e73207065726d69747465642c6164647265737320737065848301527f6e6465722c75696e74323536206e6f6e63652c75696e7432353620646561646c60608301527f696e652c0000000000000000000000000000000000000000000000000000000060808301528351948591816111e3602085018096611f93565b918237018b8152039361121c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe095868101835282611437565b5190209261122a8651612054565b6020878101518589015195519182019687526040820192909252336060820152608081019190915260a081019390935260e43560c08401528260e081016102e1565b5082346105bf576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033257813567ffffffffffffffff92838211610bda5736602383011215610bda5781013592831161032e576024906007368386831b8401011161049f57865b8581106112e5578780f35b80821b83019060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83360301126103265761139288876001946060835161132c81611398565b611368608461133c8d8601611509565b9485845261134c60448201611509565b809785015261135d60648201611509565b809885015201611509565b918291015273ffffffffffffffffffffffffffffffffffffffff80808093169516931691166117a1565b016112da565b6080810190811067ffffffffffffffff8211176113b457604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176113b457604052565b60a0810190811067ffffffffffffffff8211176113b457604052565b60c0810190811067ffffffffffffffff8211176113b457604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176113b457604052565b60c4359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01906080821261149b576040805190611563826113e3565b8082941261149b57805181810181811067ffffffffffffffff8211176113b457825260043573ffffffffffffffffffffffffffffffffffffffff8116810361149b578152602435602082015282526044356020830152606435910152565b9181601f8401121561149b5782359167ffffffffffffffff831161149b576020838186019501011161149b57565b67ffffffffffffffff81116113b45760051b60200190565b359065ffffffffffff8216820361149b57565b9181601f8401121561149b5782359167ffffffffffffffff831161149b576020808501948460061b01011161149b57565b91909160608184031261149b576040805191611666836113e3565b8294813567ffffffffffffffff9081811161149b57830182601f8201121561149b578035611693816115ef565b926116a087519485611437565b818452602094858086019360061b8501019381851161149b579086899897969594939201925b8484106116e3575050505050855280820135908501520135910152565b90919293949596978483031261149b578851908982019082821085831117611730578a928992845261171487611509565b81528287013583820152815201930191908897969594936116c6565b602460007f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b80518210156117725760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b92919273ffffffffffffffffffffffffffffffffffffffff604060008284168152600160205282828220961695868252602052818120338252602052209485549565ffffffffffff8760a01c16804211611884575082871696838803611812575b5050611810955016926118b5565b565b878484161160001461184f57602488604051907ff96fb0710000000000000000000000000000000000000000000000000000000082526004820152fd5b7fffffffffffffffffffffffff000000000000000000000000000000000000000084846118109a031691161790553880611802565b602490604051907fd81b2f2e0000000000000000000000000000000000000000000000000000000082526004820152fd5b9060006064926020958295604051947f23b872dd0000000000000000000000000000000000000000000000000000000086526004860152602485015260448401525af13d15601f3d116001600051141617161561190e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152fd5b91908110156117725760061b0190565b3573ffffffffffffffffffffffffffffffffffffffff8116810361149b5790565b9065ffffffffffff908160608401511673ffffffffffffffffffffffffffffffffffffffff908185511694826020820151169280866040809401511695169560009187835260016020528383208984526020528383209916988983526020528282209184835460d01c03611af5579185611ace94927fc6a377bfc4eb120024a8ac08eef205be16b817020812c73223e81d1bdb9708ec98979694508715600014611ad35779ffffffffffff00000000000000000000000000000000000000009042165b60a01b167fffffffffffff00000000000000000000000000000000000000000000000000006001860160d01b1617179055519384938491604091949373ffffffffffffffffffffffffffffffffffffffff606085019616845265ffffffffffff809216602085015216910152565b0390a4565b5079ffffffffffff000000000000000000000000000000000000000087611a60565b600484517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b467f000000000000000000000000000000000000000000000000000000000000000103611b69577f866a5aba21966af95d6c7ab78eb2b2fc913915c28be3b9aa07cc04ff903e3f2890565b60405160208101907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86682527f9ac997416e8ff9d2ff6bebeb7149f65cdae5e32e2b90440b566bb3044041d36a604082015246606082015230608082015260808152611bd3816113ff565b51902090565b611be1611b1e565b906040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152611bd381611398565b9192909360a435936040840151804211611cc65750602084510151808611611c955750918591610d78611c6594611c60602088015186611e47565b611bd9565b73ffffffffffffffffffffffffffffffffffffffff809151511692608435918216820361149b57611810936118b5565b602490604051907f3728b83d0000000000000000000000000000000000000000000000000000000082526004820152fd5b602490604051907fcd21db4f0000000000000000000000000000000000000000000000000000000082526004820152fd5b959093958051519560409283830151804211611e175750848803611dee57611d2e918691610d7860209b611c608d88015186611e47565b60005b868110611d42575050505050505050565b611d4d81835161175e565b5188611d5a83878a61196c565b01359089810151808311611dbe575091818888886001968596611d84575b50505050505001611d31565b611db395611dad9273ffffffffffffffffffffffffffffffffffffffff6105159351169561196c565b916118b5565b803888888883611d78565b6024908651907f3728b83d0000000000000000000000000000000000000000000000000000000082526004820152fd5b600484517fff633a38000000000000000000000000000000000000000000000000000000008152fd5b6024908551907fcd21db4f0000000000000000000000000000000000000000000000000000000082526004820152fd5b9073ffffffffffffffffffffffffffffffffffffffff600160ff83161b9216600052600060205260406000209060081c6000526020526040600020818154188091551615611e9157565b60046040517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b90611ec5826115ef565b611ed26040519182611437565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611f0082946115ef565b0190602036910137565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f375760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b805160208092019160005b828110611f7f575050505090565b835185529381019392810192600101611f71565b9081519160005b838110611fab575050016000815290565b8060208092840101518185015201611f9a565b60405160208101917f65626cad6cb96493bf6f5ebea28756c966f023ab9e8a83a7101849d5573b3678835273ffffffffffffffffffffffffffffffffffffffff8082511660408401526020820151166060830152606065ffffffffffff9182604082015116608085015201511660a082015260a0815260c0810181811067ffffffffffffffff8211176113b45760405251902090565b6040516020808201927f618358ac3db8dc274f0cd8829da7e234bd48cd73c4a740aede1adec9846d06a1845273ffffffffffffffffffffffffffffffffffffffff81511660408401520151606082015260608152611bd381611398565b919082604091031261149b576020823592013590565b6000843b61222e5750604182036121ac576120e4828201826120b1565b939092604010156117725760209360009360ff6040608095013560f81c5b60405194855216868401526040830152606082015282805260015afa156121a05773ffffffffffffffffffffffffffffffffffffffff806000511691821561217657160361214c57565b60046040517f815e1d64000000000000000000000000000000000000000000000000000000008152fd5b60046040517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6040513d6000823e3d90fd5b60408203612204576121c0918101906120b1565b91601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c019060ff8211611f375760209360009360ff608094612102565b60046040517f4be6321b000000000000000000000000000000000000000000000000000000008152fd5b929391601f928173ffffffffffffffffffffffffffffffffffffffff60646020957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0604051988997889687947f1626ba7e000000000000000000000000000000000000000000000000000000009e8f8752600487015260406024870152816044870152868601378b85828601015201168101030192165afa9081156123a857829161232a575b507fffffffff000000000000000000000000000000000000000000000000000000009150160361230057565b60046040517fb0669cbc000000000000000000000000000000000000000000000000000000008152fd5b90506020813d82116123a0575b8161234460209383611437565b810103126103365751907fffffffff0000000000000000000000000000000000000000000000000000000082168203610a9a57507fffffffff0000000000000000000000000000000000000000000000000000000090386122d4565b3d9150612337565b6040513d84823e3d90fdfea164736f6c6343000811000a"; - assembly { return(add(bytecode, 0x20), mload(bytecode)) } - } +// constructor() { +// // Deployed Permit2 bytecode at +// // https://etherscan.io/address/0x000000000022D473030F116dDEE9F6B43aC78BA3 +// bytes memory bytecode = hex"6040608081526004908136101561001557600080fd5b600090813560e01c80630d58b1db1461126c578063137c29fe146110755780632a2d80d114610db75780632b67b57014610bde57806330f28b7a14610ade5780633644e51514610a9d57806336c7851614610a285780633ff9dcb1146109a85780634fe02b441461093f57806365d9723c146107ac57806387517c451461067a578063927da105146105c3578063cc53287f146104a3578063edd9444b1461033a5763fe8ec1a7146100c657600080fd5b346103365760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103365767ffffffffffffffff833581811161033257610114903690860161164b565b60243582811161032e5761012b903690870161161a565b6101336114e6565b9160843585811161032a5761014b9036908a016115c1565b98909560a43590811161032657610164913691016115c1565b969095815190610173826113ff565b606b82527f5065726d697442617463685769746e6573735472616e7366657246726f6d285460208301527f6f6b656e5065726d697373696f6e735b5d207065726d69747465642c61646472838301527f657373207370656e6465722c75696e74323536206e6f6e63652c75696e74323560608301527f3620646561646c696e652c000000000000000000000000000000000000000000608083015282519a8b9181610222602085018096611f93565b918237018a8152039961025b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09b8c8101835282611437565b5190209085515161026b81611ebb565b908a5b8181106102f95750506102f6999a6102ed9183516102a081610294602082018095611f66565b03848101835282611437565b519020602089810151858b015195519182019687526040820192909252336060820152608081019190915260a081019390935260643560c08401528260e081015b03908101835282611437565b51902093611cf7565b80f35b8061031161030b610321938c5161175e565b51612054565b61031b828661175e565b52611f0a565b61026e565b8880fd5b8780fd5b8480fd5b8380fd5b5080fd5b5091346103365760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103365767ffffffffffffffff9080358281116103325761038b903690830161164b565b60243583811161032e576103a2903690840161161a565b9390926103ad6114e6565b9160643590811161049f576103c4913691016115c1565b949093835151976103d489611ebb565b98885b81811061047d5750506102f697988151610425816103f9602082018095611f66565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611437565b5190206020860151828701519083519260208401947ffcf35f5ac6a2c28868dc44c302166470266239195f02b0ee408334829333b7668652840152336060840152608083015260a082015260a081526102ed8161141b565b808b61031b8261049461030b61049a968d5161175e565b9261175e565b6103d7565b8680fd5b5082346105bf57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103325780359067ffffffffffffffff821161032e576104f49136910161161a565b929091845b848110610504578580f35b8061051a610515600193888861196c565b61197c565b61052f84610529848a8a61196c565b0161197c565b3389528385528589209173ffffffffffffffffffffffffffffffffffffffff80911692838b528652868a20911690818a5285528589207fffffffffffffffffffffffff000000000000000000000000000000000000000081541690558551918252848201527f89b1add15eff56b3dfe299ad94e01f2b52fbcb80ae1a3baea6ae8c04cb2b98a4853392a2016104f9565b8280fd5b50346103365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657610676816105ff6114a0565b936106086114c3565b6106106114e6565b73ffffffffffffffffffffffffffffffffffffffff968716835260016020908152848420928816845291825283832090871683528152919020549251938316845260a083901c65ffffffffffff169084015260d09190911c604083015281906060820190565b0390f35b50346103365760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610336576106b26114a0565b906106bb6114c3565b916106c46114e6565b65ffffffffffff926064358481169081810361032a5779ffffffffffff0000000000000000000000000000000000000000947fda9fa7c1b00402c17d0161b249b1ab8bbec047c5a52207b9c112deffd817036b94338a5260016020527fffffffffffff0000000000000000000000000000000000000000000000000000858b209873ffffffffffffffffffffffffffffffffffffffff809416998a8d5260205283878d209b169a8b8d52602052868c209486156000146107a457504216925b8454921697889360a01b16911617179055815193845260208401523392a480f35b905092610783565b5082346105bf5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf576107e56114a0565b906107ee6114c3565b9265ffffffffffff604435818116939084810361032a57338852602091600183528489209673ffffffffffffffffffffffffffffffffffffffff80911697888b528452858a20981697888a5283528489205460d01c93848711156109175761ffff9085840316116108f05750907f55eb90d810e1700b35a8e7e25395ff7f2b2259abd7415ca2284dfb1c246418f393929133895260018252838920878a528252838920888a5282528389209079ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffff000000000000000000000000000000000000000000000000000083549260d01b16911617905582519485528401523392a480f35b84517f24d35a26000000000000000000000000000000000000000000000000000000008152fd5b5084517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b503461033657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610336578060209273ffffffffffffffffffffffffffffffffffffffff61098f6114a0565b1681528084528181206024358252845220549051908152f35b5082346105bf57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf577f3704902f963766a4e561bbaab6e6cdc1b1dd12f6e9e99648da8843b3f46b918d90359160243533855284602052818520848652602052818520818154179055815193845260208401523392a280f35b8234610a9a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610a9a57610a606114a0565b610a686114c3565b610a706114e6565b6064359173ffffffffffffffffffffffffffffffffffffffff8316830361032e576102f6936117a1565b80fd5b503461033657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657602090610ad7611b1e565b9051908152f35b508290346105bf576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf57610b1a3661152a565b90807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c36011261033257610b4c611478565b9160e43567ffffffffffffffff8111610bda576102f694610b6f913691016115c1565b939092610b7c8351612054565b6020840151828501519083519260208401947f939c21a48a8dbe3a9a2404a1d46691e4d39f6583d6ec6b35714604c986d801068652840152336060840152608083015260a082015260a08152610bd18161141b565b51902091611c25565b8580fd5b509134610336576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657610c186114a0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc360160c08112610332576080855191610c51836113e3565b1261033257845190610c6282611398565b73ffffffffffffffffffffffffffffffffffffffff91602435838116810361049f578152604435838116810361049f57602082015265ffffffffffff606435818116810361032a5788830152608435908116810361049f576060820152815260a435938285168503610bda576020820194855260c4359087830182815260e43567ffffffffffffffff811161032657610cfe90369084016115c1565b929093804211610d88575050918591610d786102f6999a610d7e95610d238851611fbe565b90898c511690519083519260208401947ff3841cd1ff0085026a6327b620b67997ce40f282c88a8e905a7a5626e310f3d086528401526060830152608082015260808152610d70816113ff565b519020611bd9565b916120c7565b519251169161199d565b602492508a51917fcd21db4f000000000000000000000000000000000000000000000000000000008352820152fd5b5091346103365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc93818536011261033257610df36114a0565b9260249081359267ffffffffffffffff9788851161032a578590853603011261049f578051978589018981108282111761104a578252848301358181116103265785019036602383011215610326578382013591610e50836115ef565b90610e5d85519283611437565b838252602093878584019160071b83010191368311611046578801905b828210610fe9575050508a526044610e93868801611509565b96838c01978852013594838b0191868352604435908111610fe557610ebb90369087016115c1565b959096804211610fba575050508998995151610ed681611ebb565b908b5b818110610f9757505092889492610d7892610f6497958351610f02816103f98682018095611f66565b5190209073ffffffffffffffffffffffffffffffffffffffff9a8b8b51169151928551948501957faf1b0d30d2cab0380e68f0689007e3254993c596f2fdd0aaa7f4d04f794408638752850152830152608082015260808152610d70816113ff565b51169082515192845b848110610f78578580f35b80610f918585610f8b600195875161175e565b5161199d565b01610f6d565b80610311610fac8e9f9e93610fb2945161175e565b51611fbe565b9b9a9b610ed9565b8551917fcd21db4f000000000000000000000000000000000000000000000000000000008352820152fd5b8a80fd5b6080823603126110465785608091885161100281611398565b61100b85611509565b8152611018838601611509565b838201526110278a8601611607565b8a8201528d611037818701611607565b90820152815201910190610e7a565b8c80fd5b84896041867f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b5082346105bf576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf576110b03661152a565b91807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c360112610332576110e2611478565b67ffffffffffffffff93906101043585811161049f5761110590369086016115c1565b90936101243596871161032a57611125610bd1966102f6983691016115c1565b969095825190611134826113ff565b606482527f5065726d69745769746e6573735472616e7366657246726f6d28546f6b656e5060208301527f65726d697373696f6e73207065726d69747465642c6164647265737320737065848301527f6e6465722c75696e74323536206e6f6e63652c75696e7432353620646561646c60608301527f696e652c0000000000000000000000000000000000000000000000000000000060808301528351948591816111e3602085018096611f93565b918237018b8152039361121c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe095868101835282611437565b5190209261122a8651612054565b6020878101518589015195519182019687526040820192909252336060820152608081019190915260a081019390935260e43560c08401528260e081016102e1565b5082346105bf576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033257813567ffffffffffffffff92838211610bda5736602383011215610bda5781013592831161032e576024906007368386831b8401011161049f57865b8581106112e5578780f35b80821b83019060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83360301126103265761139288876001946060835161132c81611398565b611368608461133c8d8601611509565b9485845261134c60448201611509565b809785015261135d60648201611509565b809885015201611509565b918291015273ffffffffffffffffffffffffffffffffffffffff80808093169516931691166117a1565b016112da565b6080810190811067ffffffffffffffff8211176113b457604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176113b457604052565b60a0810190811067ffffffffffffffff8211176113b457604052565b60c0810190811067ffffffffffffffff8211176113b457604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176113b457604052565b60c4359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01906080821261149b576040805190611563826113e3565b8082941261149b57805181810181811067ffffffffffffffff8211176113b457825260043573ffffffffffffffffffffffffffffffffffffffff8116810361149b578152602435602082015282526044356020830152606435910152565b9181601f8401121561149b5782359167ffffffffffffffff831161149b576020838186019501011161149b57565b67ffffffffffffffff81116113b45760051b60200190565b359065ffffffffffff8216820361149b57565b9181601f8401121561149b5782359167ffffffffffffffff831161149b576020808501948460061b01011161149b57565b91909160608184031261149b576040805191611666836113e3565b8294813567ffffffffffffffff9081811161149b57830182601f8201121561149b578035611693816115ef565b926116a087519485611437565b818452602094858086019360061b8501019381851161149b579086899897969594939201925b8484106116e3575050505050855280820135908501520135910152565b90919293949596978483031261149b578851908982019082821085831117611730578a928992845261171487611509565b81528287013583820152815201930191908897969594936116c6565b602460007f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b80518210156117725760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b92919273ffffffffffffffffffffffffffffffffffffffff604060008284168152600160205282828220961695868252602052818120338252602052209485549565ffffffffffff8760a01c16804211611884575082871696838803611812575b5050611810955016926118b5565b565b878484161160001461184f57602488604051907ff96fb0710000000000000000000000000000000000000000000000000000000082526004820152fd5b7fffffffffffffffffffffffff000000000000000000000000000000000000000084846118109a031691161790553880611802565b602490604051907fd81b2f2e0000000000000000000000000000000000000000000000000000000082526004820152fd5b9060006064926020958295604051947f23b872dd0000000000000000000000000000000000000000000000000000000086526004860152602485015260448401525af13d15601f3d116001600051141617161561190e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152fd5b91908110156117725760061b0190565b3573ffffffffffffffffffffffffffffffffffffffff8116810361149b5790565b9065ffffffffffff908160608401511673ffffffffffffffffffffffffffffffffffffffff908185511694826020820151169280866040809401511695169560009187835260016020528383208984526020528383209916988983526020528282209184835460d01c03611af5579185611ace94927fc6a377bfc4eb120024a8ac08eef205be16b817020812c73223e81d1bdb9708ec98979694508715600014611ad35779ffffffffffff00000000000000000000000000000000000000009042165b60a01b167fffffffffffff00000000000000000000000000000000000000000000000000006001860160d01b1617179055519384938491604091949373ffffffffffffffffffffffffffffffffffffffff606085019616845265ffffffffffff809216602085015216910152565b0390a4565b5079ffffffffffff000000000000000000000000000000000000000087611a60565b600484517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b467f000000000000000000000000000000000000000000000000000000000000000103611b69577f866a5aba21966af95d6c7ab78eb2b2fc913915c28be3b9aa07cc04ff903e3f2890565b60405160208101907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86682527f9ac997416e8ff9d2ff6bebeb7149f65cdae5e32e2b90440b566bb3044041d36a604082015246606082015230608082015260808152611bd3816113ff565b51902090565b611be1611b1e565b906040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152611bd381611398565b9192909360a435936040840151804211611cc65750602084510151808611611c955750918591610d78611c6594611c60602088015186611e47565b611bd9565b73ffffffffffffffffffffffffffffffffffffffff809151511692608435918216820361149b57611810936118b5565b602490604051907f3728b83d0000000000000000000000000000000000000000000000000000000082526004820152fd5b602490604051907fcd21db4f0000000000000000000000000000000000000000000000000000000082526004820152fd5b959093958051519560409283830151804211611e175750848803611dee57611d2e918691610d7860209b611c608d88015186611e47565b60005b868110611d42575050505050505050565b611d4d81835161175e565b5188611d5a83878a61196c565b01359089810151808311611dbe575091818888886001968596611d84575b50505050505001611d31565b611db395611dad9273ffffffffffffffffffffffffffffffffffffffff6105159351169561196c565b916118b5565b803888888883611d78565b6024908651907f3728b83d0000000000000000000000000000000000000000000000000000000082526004820152fd5b600484517fff633a38000000000000000000000000000000000000000000000000000000008152fd5b6024908551907fcd21db4f0000000000000000000000000000000000000000000000000000000082526004820152fd5b9073ffffffffffffffffffffffffffffffffffffffff600160ff83161b9216600052600060205260406000209060081c6000526020526040600020818154188091551615611e9157565b60046040517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b90611ec5826115ef565b611ed26040519182611437565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611f0082946115ef565b0190602036910137565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f375760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b805160208092019160005b828110611f7f575050505090565b835185529381019392810192600101611f71565b9081519160005b838110611fab575050016000815290565b8060208092840101518185015201611f9a565b60405160208101917f65626cad6cb96493bf6f5ebea28756c966f023ab9e8a83a7101849d5573b3678835273ffffffffffffffffffffffffffffffffffffffff8082511660408401526020820151166060830152606065ffffffffffff9182604082015116608085015201511660a082015260a0815260c0810181811067ffffffffffffffff8211176113b45760405251902090565b6040516020808201927f618358ac3db8dc274f0cd8829da7e234bd48cd73c4a740aede1adec9846d06a1845273ffffffffffffffffffffffffffffffffffffffff81511660408401520151606082015260608152611bd381611398565b919082604091031261149b576020823592013590565b6000843b61222e5750604182036121ac576120e4828201826120b1565b939092604010156117725760209360009360ff6040608095013560f81c5b60405194855216868401526040830152606082015282805260015afa156121a05773ffffffffffffffffffffffffffffffffffffffff806000511691821561217657160361214c57565b60046040517f815e1d64000000000000000000000000000000000000000000000000000000008152fd5b60046040517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6040513d6000823e3d90fd5b60408203612204576121c0918101906120b1565b91601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c019060ff8211611f375760209360009360ff608094612102565b60046040517f4be6321b000000000000000000000000000000000000000000000000000000008152fd5b929391601f928173ffffffffffffffffffffffffffffffffffffffff60646020957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0604051988997889687947f1626ba7e000000000000000000000000000000000000000000000000000000009e8f8752600487015260406024870152816044870152868601378b85828601015201168101030192165afa9081156123a857829161232a575b507fffffffff000000000000000000000000000000000000000000000000000000009150160361230057565b60046040517fb0669cbc000000000000000000000000000000000000000000000000000000008152fd5b90506020813d82116123a0575b8161234460209383611437565b810103126103365751907fffffffff0000000000000000000000000000000000000000000000000000000082168203610a9a57507fffffffff0000000000000000000000000000000000000000000000000000000090386122d4565b3d9150612337565b6040513d84823e3d90fdfea164736f6c6343000811000a"; +// assembly { return(add(bytecode, 0x20), mload(bytecode)) } +// } - ///// STUBS ///// - function DOMAIN_SEPARATOR() external view returns (bytes32) {} +// ///// STUBS ///// +// function DOMAIN_SEPARATOR() external view returns (bytes32) {} - function permitTransferFrom( - PermitTransferFrom calldata permit, - SignatureTransferDetails calldata transferDetails, - address owner, - bytes calldata signature - ) external {} +// function permitTransferFrom( +// PermitTransferFrom calldata permit, +// SignatureTransferDetails calldata transferDetails, +// address owner, +// bytes calldata signature +// ) external {} - function permitTransferFrom( - PermitBatchTransferFrom calldata permit, - SignatureTransferDetails[] calldata transferDetails, - address owner, - bytes calldata signature - ) external {} -} \ No newline at end of file +// function permitTransferFrom( +// PermitBatchTransferFrom calldata permit, +// SignatureTransferDetails[] calldata transferDetails, +// address owner, +// bytes calldata signature +// ) external {} +// } \ No newline at end of file diff --git a/packages/foundry/test/Permit2Vault.t.sol b/packages/foundry/test/Permit2Vault.t.sol index 601da2f..6d02da0 100644 --- a/packages/foundry/test/Permit2Vault.t.sol +++ b/packages/foundry/test/Permit2Vault.t.sol @@ -1,365 +1,365 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.28; +// // SPDX-License-Identifier: UNLICENSED +// pragma solidity ^0.8.28; -import "../lib/solmate/src/tokens/ERC20.sol"; -import "../contracts/Permit2Vault.sol"; -import "./TestUtils.sol"; +// import "../lib/solmate/src/tokens/ERC20.sol"; +// import "../contracts/Permit2Vault.sol"; +// import "./TestUtils.sol"; -contract Permit2VaultTest is TestUtils { - bytes32 constant TOKEN_PERMISSIONS_TYPEHASH = - keccak256("TokenPermissions(address token,uint256 amount)"); - bytes32 constant PERMIT_TRANSFER_FROM_TYPEHASH = keccak256( - "PermitTransferFrom(TokenPermissions permitted,address spender,uint256 nonce,uint256 deadline)TokenPermissions(address token,uint256 amount)" - ); - bytes32 constant PERMIT_BATCH_TRANSFER_FROM_TYPEHASH = keccak256( - "PermitBatchTransferFrom(TokenPermissions[] permitted,address spender,uint256 nonce,uint256 deadline)TokenPermissions(address token,uint256 amount)" - ); +// contract Permit2VaultTest is TestUtils { +// bytes32 constant TOKEN_PERMISSIONS_TYPEHASH = +// keccak256("TokenPermissions(address token,uint256 amount)"); +// bytes32 constant PERMIT_TRANSFER_FROM_TYPEHASH = keccak256( +// "PermitTransferFrom(TokenPermissions permitted,address spender,uint256 nonce,uint256 deadline)TokenPermissions(address token,uint256 amount)" +// ); +// bytes32 constant PERMIT_BATCH_TRANSFER_FROM_TYPEHASH = keccak256( +// "PermitBatchTransferFrom(TokenPermissions[] permitted,address spender,uint256 nonce,uint256 deadline)TokenPermissions(address token,uint256 amount)" +// ); - Permit2Clone permit2 = new Permit2Clone(); - TestERC20 token1 = new TestERC20(); - TestERC20 token2 = new TestERC20(); - ReenteringERC20 badToken = new ReenteringERC20(); - Permit2Vault vault; - uint256 ownerKey; - address owner; +// Permit2Clone permit2 = new Permit2Clone(); +// TestERC20 token1 = new TestERC20(); +// TestERC20 token2 = new TestERC20(); +// ReenteringERC20 badToken = new ReenteringERC20(); +// Permit2Vault vault; +// uint256 ownerKey; +// address owner; - constructor() { - vm.chainId(1); - ownerKey = _randomUint256(); - owner = vm.addr(ownerKey); - vault = new Permit2Vault(address(permit2), owner); - // Set up unlimited token approvals from the user onto the permit2 contract. - vm.prank(owner); - token1.approve(address(permit2), type(uint256).max); - vm.prank(owner); - token2.approve(address(permit2), type(uint256).max); - } +// constructor() { +// vm.chainId(1); +// ownerKey = _randomUint256(); +// owner = vm.addr(ownerKey); +// vault = new Permit2Vault(address(permit2), owner); +// // Set up unlimited token approvals from the user onto the permit2 contract. +// vm.prank(owner); +// token1.approve(address(permit2), type(uint256).max); +// vm.prank(owner); +// token2.approve(address(permit2), type(uint256).max); +// } - function test_canDeposit() external { - uint256 amount = _randomUint256() % 1e18 + 1; - token1.mint(owner, amount); - IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ - permitted: IPermit2.TokenPermissions({ - token: IERC20(address(token1)), - amount: amount - }), - nonce: _randomUint256(), - deadline: block.timestamp - }); - bytes memory sig = _signPermit(permit, address(vault), ownerKey); - vm.prank(owner); - vault.depositERC20( - IERC20(address(token1)), - amount, - permit.nonce, - permit.deadline, - sig - ); - assertEq(vault.tokenBalancesByUser(owner, IERC20(address(token1))), amount); - assertEq(token1.balanceOf(address(vault)), amount); - assertEq(token1.balanceOf(owner), 0); - } +// function test_canDeposit() external { +// uint256 amount = _randomUint256() % 1e18 + 1; +// token1.mint(owner, amount); +// IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ +// permitted: IPermit2.TokenPermissions({ +// token: IERC20(address(token1)), +// amount: amount +// }), +// nonce: _randomUint256(), +// deadline: block.timestamp +// }); +// bytes memory sig = _signPermit(permit, address(vault), ownerKey); +// vm.prank(owner); +// vault.depositERC20( +// IERC20(address(token1)), +// amount, +// permit.nonce, +// permit.deadline, +// sig +// ); +// assertEq(vault.tokenBalancesByUser(owner, IERC20(address(token1))), amount); +// assertEq(token1.balanceOf(address(vault)), amount); +// assertEq(token1.balanceOf(owner), 0); +// } - function test_cannotReusePermit() external { - uint256 amount = _randomUint256() % 1e18 + 1; - token1.mint(owner, amount); - IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ - permitted: IPermit2.TokenPermissions({ - token: IERC20(address(token1)), - amount: amount - }), - nonce: _randomUint256(), - deadline: block.timestamp - }); - bytes memory sig = _signPermit(permit, address(vault), ownerKey); - vm.prank(owner); - vault.depositERC20( - IERC20(address(token1)), - amount, - permit.nonce, - permit.deadline, - sig - ); - vm.expectRevert(abi.encodeWithSelector(Permit2Clone.InvalidNonce.selector)); - vm.prank(owner); - vault.depositERC20( - IERC20(address(token1)), - amount, - permit.nonce, - permit.deadline, - sig - ); - } +// function test_cannotReusePermit() external { +// uint256 amount = _randomUint256() % 1e18 + 1; +// token1.mint(owner, amount); +// IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ +// permitted: IPermit2.TokenPermissions({ +// token: IERC20(address(token1)), +// amount: amount +// }), +// nonce: _randomUint256(), +// deadline: block.timestamp +// }); +// bytes memory sig = _signPermit(permit, address(vault), ownerKey); +// vm.prank(owner); +// vault.depositERC20( +// IERC20(address(token1)), +// amount, +// permit.nonce, +// permit.deadline, +// sig +// ); +// vm.expectRevert(abi.encodeWithSelector(Permit2Clone.InvalidNonce.selector)); +// vm.prank(owner); +// vault.depositERC20( +// IERC20(address(token1)), +// amount, +// permit.nonce, +// permit.deadline, +// sig +// ); +// } - function test_cannotUseOthersPermit() external { - uint256 amount = _randomUint256() % 1e18 + 1; - token1.mint(owner, amount); - IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ - permitted: IPermit2.TokenPermissions({ - token: IERC20(address(token1)), - amount: amount - }), - nonce: _randomUint256(), - deadline: block.timestamp - }); - bytes memory sig = _signPermit(permit, address(vault), ownerKey); - vm.expectRevert(abi.encodeWithSelector(Permit2Clone.InvalidSigner.selector)); - vm.prank(_randomAddress()); - vault.depositERC20( - IERC20(address(token1)), - amount, - permit.nonce, - permit.deadline, - sig - ); - } +// function test_cannotUseOthersPermit() external { +// uint256 amount = _randomUint256() % 1e18 + 1; +// token1.mint(owner, amount); +// IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ +// permitted: IPermit2.TokenPermissions({ +// token: IERC20(address(token1)), +// amount: amount +// }), +// nonce: _randomUint256(), +// deadline: block.timestamp +// }); +// bytes memory sig = _signPermit(permit, address(vault), ownerKey); +// vm.expectRevert(abi.encodeWithSelector(Permit2Clone.InvalidSigner.selector)); +// vm.prank(_randomAddress()); +// vault.depositERC20( +// IERC20(address(token1)), +// amount, +// permit.nonce, +// permit.deadline, +// sig +// ); +// } - function test_cannotUseOtherTokenPermit() external { - vm.prank(owner); - token2.approve(address(permit2), type(uint256).max); - uint256 amount = _randomUint256() % 1e18 + 1; - token1.mint(owner, amount); - token2.mint(owner, amount); - IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ - permitted: IPermit2.TokenPermissions({ - token: IERC20(address(token2)), - amount: amount - }), - nonce: _randomUint256(), - deadline: block.timestamp - }); - bytes memory sig = _signPermit(permit, address(vault), ownerKey); - vm.prank(owner); - vm.expectRevert(Permit2Clone.InvalidSigner.selector); - vault.depositERC20( - IERC20(address(token1)), - amount, - permit.nonce, - permit.deadline, - sig - ); - } +// function test_cannotUseOtherTokenPermit() external { +// vm.prank(owner); +// token2.approve(address(permit2), type(uint256).max); +// uint256 amount = _randomUint256() % 1e18 + 1; +// token1.mint(owner, amount); +// token2.mint(owner, amount); +// IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ +// permitted: IPermit2.TokenPermissions({ +// token: IERC20(address(token2)), +// amount: amount +// }), +// nonce: _randomUint256(), +// deadline: block.timestamp +// }); +// bytes memory sig = _signPermit(permit, address(vault), ownerKey); +// vm.prank(owner); +// vm.expectRevert(Permit2Clone.InvalidSigner.selector); +// vault.depositERC20( +// IERC20(address(token1)), +// amount, +// permit.nonce, +// permit.deadline, +// sig +// ); +// } - function test_canWithdraw() external { - uint256 amount = _randomUint256() % 1e18 + 2; - token1.mint(owner, amount); - IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ - permitted: IPermit2.TokenPermissions({ - token: IERC20(address(token1)), - amount: amount - }), - nonce: _randomUint256(), - deadline: block.timestamp - }); - bytes memory sig = _signPermit(permit, address(vault), ownerKey); - vm.prank(owner); - vault.depositERC20( - IERC20(address(token1)), - amount, - permit.nonce, - permit.deadline, - sig - ); - vm.prank(owner); - vault.withdrawERC20(IERC20(address(token1)), amount - 1); - assertEq(token1.balanceOf(owner), amount - 1); - assertEq(token1.balanceOf(address(vault)), 1); - } +// function test_canWithdraw() external { +// uint256 amount = _randomUint256() % 1e18 + 2; +// token1.mint(owner, amount); +// IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ +// permitted: IPermit2.TokenPermissions({ +// token: IERC20(address(token1)), +// amount: amount +// }), +// nonce: _randomUint256(), +// deadline: block.timestamp +// }); +// bytes memory sig = _signPermit(permit, address(vault), ownerKey); +// vm.prank(owner); +// vault.depositERC20( +// IERC20(address(token1)), +// amount, +// permit.nonce, +// permit.deadline, +// sig +// ); +// vm.prank(owner); +// vault.withdrawERC20(IERC20(address(token1)), amount - 1); +// assertEq(token1.balanceOf(owner), amount - 1); +// assertEq(token1.balanceOf(address(vault)), 1); +// } - function test_cannotWithdrawOthers() external { - uint256 amount = _randomUint256() % 1e18 + 1; - token1.mint(owner, amount); - IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ - permitted: IPermit2.TokenPermissions({ - token: IERC20(address(token1)), - amount: amount - }), - nonce: _randomUint256(), - deadline: block.timestamp - }); - bytes memory sig = _signPermit(permit, address(vault), ownerKey); - vm.prank(owner); - vault.depositERC20( - IERC20(address(token1)), - amount, - permit.nonce, - permit.deadline, - sig - ); - vm.expectRevert(); - vm.prank(_randomAddress()); - vault.withdrawERC20(IERC20(address(token1)), amount); - } +// function test_cannotWithdrawOthers() external { +// uint256 amount = _randomUint256() % 1e18 + 1; +// token1.mint(owner, amount); +// IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ +// permitted: IPermit2.TokenPermissions({ +// token: IERC20(address(token1)), +// amount: amount +// }), +// nonce: _randomUint256(), +// deadline: block.timestamp +// }); +// bytes memory sig = _signPermit(permit, address(vault), ownerKey); +// vm.prank(owner); +// vault.depositERC20( +// IERC20(address(token1)), +// amount, +// permit.nonce, +// permit.deadline, +// sig +// ); +// vm.expectRevert(); +// vm.prank(_randomAddress()); +// vault.withdrawERC20(IERC20(address(token1)), amount); +// } - function test_cannotReenter() external { - IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ - permitted: IPermit2.TokenPermissions({ - token: IERC20(address(badToken)), - amount: 0 - }), - nonce: _randomUint256(), - deadline: block.timestamp - }); - bytes memory sig = _signPermit(permit, address(vault), ownerKey); - // Reenter by calling withdrawERC20() in transferFrom() - badToken.setReentrantCall( - address(vault), - abi.encodeCall(vault.withdrawERC20, (IERC20(address(badToken)), 0)) - ); - // Will manifest as a TRANSFER_FROM_FAILED - vm.expectRevert('TRANSFER_FROM_FAILED'); - vm.prank(owner); - vault.depositERC20( - IERC20(address(badToken)), - 0, - permit.nonce, - permit.deadline, - sig - ); - } +// function test_cannotReenter() external { +// IPermit2.PermitTransferFrom memory permit = IPermit2.PermitTransferFrom({ +// permitted: IPermit2.TokenPermissions({ +// token: IERC20(address(badToken)), +// amount: 0 +// }), +// nonce: _randomUint256(), +// deadline: block.timestamp +// }); +// bytes memory sig = _signPermit(permit, address(vault), ownerKey); +// // Reenter by calling withdrawERC20() in transferFrom() +// badToken.setReentrantCall( +// address(vault), +// abi.encodeCall(vault.withdrawERC20, (IERC20(address(badToken)), 0)) +// ); +// // Will manifest as a TRANSFER_FROM_FAILED +// vm.expectRevert('TRANSFER_FROM_FAILED'); +// vm.prank(owner); +// vault.depositERC20( +// IERC20(address(badToken)), +// 0, +// permit.nonce, +// permit.deadline, +// sig +// ); +// } - // Generate a signature for a permit message. - function _signPermit( - IPermit2.PermitTransferFrom memory permit, - address spender, - uint256 signerKey - ) - internal - view - returns (bytes memory sig) - { - (uint8 v, bytes32 r, bytes32 s) = - vm.sign(signerKey, _getEIP712Hash(permit, spender)); - return abi.encodePacked(r, s, v); - } +// // Generate a signature for a permit message. +// function _signPermit( +// IPermit2.PermitTransferFrom memory permit, +// address spender, +// uint256 signerKey +// ) +// internal +// view +// returns (bytes memory sig) +// { +// (uint8 v, bytes32 r, bytes32 s) = +// vm.sign(signerKey, _getEIP712Hash(permit, spender)); +// return abi.encodePacked(r, s, v); +// } - // Generate a signature for a batch permit message. - function _signPermit( - IPermit2.PermitBatchTransferFrom memory permit, - address spender, - uint256 signerKey - ) - internal - view - returns (bytes memory sig) - { - (uint8 v, bytes32 r, bytes32 s) = - vm.sign(signerKey, _getEIP712Hash(permit, spender)); - return abi.encodePacked(r, s, v); - } +// // Generate a signature for a batch permit message. +// function _signPermit( +// IPermit2.PermitBatchTransferFrom memory permit, +// address spender, +// uint256 signerKey +// ) +// internal +// view +// returns (bytes memory sig) +// { +// (uint8 v, bytes32 r, bytes32 s) = +// vm.sign(signerKey, _getEIP712Hash(permit, spender)); +// return abi.encodePacked(r, s, v); +// } - // Compute the EIP712 hash of the permit object. - // Normally this would be implemented off-chain. - function _getEIP712Hash(IPermit2.PermitTransferFrom memory permit, address spender) - internal - view - returns (bytes32 h) - { - return keccak256(abi.encodePacked( - "\x19\x01", - permit2.DOMAIN_SEPARATOR(), - keccak256(abi.encode( - PERMIT_TRANSFER_FROM_TYPEHASH, - keccak256(abi.encode( - TOKEN_PERMISSIONS_TYPEHASH, - permit.permitted.token, - permit.permitted.amount - )), - spender, - permit.nonce, - permit.deadline - )) - )); - } +// // Compute the EIP712 hash of the permit object. +// // Normally this would be implemented off-chain. +// function _getEIP712Hash(IPermit2.PermitTransferFrom memory permit, address spender) +// internal +// view +// returns (bytes32 h) +// { +// return keccak256(abi.encodePacked( +// "\x19\x01", +// permit2.DOMAIN_SEPARATOR(), +// keccak256(abi.encode( +// PERMIT_TRANSFER_FROM_TYPEHASH, +// keccak256(abi.encode( +// TOKEN_PERMISSIONS_TYPEHASH, +// permit.permitted.token, +// permit.permitted.amount +// )), +// spender, +// permit.nonce, +// permit.deadline +// )) +// )); +// } - // Compute the EIP712 hash of the batch permit object. - // Normally this would be implemented off-chain. - function _getEIP712Hash(IPermit2.PermitBatchTransferFrom memory permit, address spender) - internal - view - returns (bytes32 h) - { - bytes32 permittedHash; - { - uint256 n = permit.permitted.length; - bytes32[] memory contentHashes = new bytes32[](n); - for (uint256 i; i < n; ++i) { - contentHashes[i] = keccak256(abi.encode( - TOKEN_PERMISSIONS_TYPEHASH, - permit.permitted[i].token, - permit.permitted[i].amount - )); - } - permittedHash = keccak256(abi.encodePacked(contentHashes)); - } - return keccak256(abi.encodePacked( - "\x19\x01", - permit2.DOMAIN_SEPARATOR(), - keccak256(abi.encode( - PERMIT_BATCH_TRANSFER_FROM_TYPEHASH, - permittedHash, - spender, - permit.nonce, - permit.deadline - )) - )); - } -} +// // Compute the EIP712 hash of the batch permit object. +// // Normally this would be implemented off-chain. +// function _getEIP712Hash(IPermit2.PermitBatchTransferFrom memory permit, address spender) +// internal +// view +// returns (bytes32 h) +// { +// bytes32 permittedHash; +// { +// uint256 n = permit.permitted.length; +// bytes32[] memory contentHashes = new bytes32[](n); +// for (uint256 i; i < n; ++i) { +// contentHashes[i] = keccak256(abi.encode( +// TOKEN_PERMISSIONS_TYPEHASH, +// permit.permitted[i].token, +// permit.permitted[i].amount +// )); +// } +// permittedHash = keccak256(abi.encodePacked(contentHashes)); +// } +// return keccak256(abi.encodePacked( +// "\x19\x01", +// permit2.DOMAIN_SEPARATOR(), +// keccak256(abi.encode( +// PERMIT_BATCH_TRANSFER_FROM_TYPEHASH, +// permittedHash, +// spender, +// permit.nonce, +// permit.deadline +// )) +// )); +// } +// } -contract TestERC20 is ERC20 { - constructor() ERC20("Test", "TST", 18) {} +// contract TestERC20 is ERC20 { +// constructor() ERC20("Test", "TST", 18) {} - function mint(address owner, uint256 amount) external { - _mint(owner, amount); - } -} +// function mint(address owner, uint256 amount) external { +// _mint(owner, amount); +// } +// } -contract ReenteringERC20 { - address _reentrantCallTarget; - bytes _reentrantCallData; +// contract ReenteringERC20 { +// address _reentrantCallTarget; +// bytes _reentrantCallData; - function setReentrantCall(address target, bytes calldata callData) - external - { - _reentrantCallTarget = target; - _reentrantCallData = callData; - } +// function setReentrantCall(address target, bytes calldata callData) +// external +// { +// _reentrantCallTarget = target; +// _reentrantCallData = callData; +// } - function transferFrom(address, address, uint256) external returns (bool) { - (bool s, bytes memory r) = _reentrantCallTarget.call(_reentrantCallData); - if (!s) { - assembly { revert(add(r, 0x20), mload(r)) } - } - return true; - } -} +// function transferFrom(address, address, uint256) external returns (bool) { +// (bool s, bytes memory r) = _reentrantCallTarget.call(_reentrantCallData); +// if (!s) { +// assembly { revert(add(r, 0x20), mload(r)) } +// } +// return true; +// } +// } -// Local bytecode clone of the canonical Permit2 contract deployed to mainnet. -contract Permit2Clone is IPermit2 { - error InvalidNonce(); - error InvalidSigner(); +// // Local bytecode clone of the canonical Permit2 contract deployed to mainnet. +// contract Permit2Clone is IPermit2 { +// error InvalidNonce(); +// error InvalidSigner(); - constructor() { - // Deployed Permit2 bytecode at - // https://etherscan.io/address/0x000000000022D473030F116dDEE9F6B43aC78BA3 - bytes memory bytecode = hex"6040608081526004908136101561001557600080fd5b600090813560e01c80630d58b1db1461126c578063137c29fe146110755780632a2d80d114610db75780632b67b57014610bde57806330f28b7a14610ade5780633644e51514610a9d57806336c7851614610a285780633ff9dcb1146109a85780634fe02b441461093f57806365d9723c146107ac57806387517c451461067a578063927da105146105c3578063cc53287f146104a3578063edd9444b1461033a5763fe8ec1a7146100c657600080fd5b346103365760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103365767ffffffffffffffff833581811161033257610114903690860161164b565b60243582811161032e5761012b903690870161161a565b6101336114e6565b9160843585811161032a5761014b9036908a016115c1565b98909560a43590811161032657610164913691016115c1565b969095815190610173826113ff565b606b82527f5065726d697442617463685769746e6573735472616e7366657246726f6d285460208301527f6f6b656e5065726d697373696f6e735b5d207065726d69747465642c61646472838301527f657373207370656e6465722c75696e74323536206e6f6e63652c75696e74323560608301527f3620646561646c696e652c000000000000000000000000000000000000000000608083015282519a8b9181610222602085018096611f93565b918237018a8152039961025b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09b8c8101835282611437565b5190209085515161026b81611ebb565b908a5b8181106102f95750506102f6999a6102ed9183516102a081610294602082018095611f66565b03848101835282611437565b519020602089810151858b015195519182019687526040820192909252336060820152608081019190915260a081019390935260643560c08401528260e081015b03908101835282611437565b51902093611cf7565b80f35b8061031161030b610321938c5161175e565b51612054565b61031b828661175e565b52611f0a565b61026e565b8880fd5b8780fd5b8480fd5b8380fd5b5080fd5b5091346103365760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103365767ffffffffffffffff9080358281116103325761038b903690830161164b565b60243583811161032e576103a2903690840161161a565b9390926103ad6114e6565b9160643590811161049f576103c4913691016115c1565b949093835151976103d489611ebb565b98885b81811061047d5750506102f697988151610425816103f9602082018095611f66565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611437565b5190206020860151828701519083519260208401947ffcf35f5ac6a2c28868dc44c302166470266239195f02b0ee408334829333b7668652840152336060840152608083015260a082015260a081526102ed8161141b565b808b61031b8261049461030b61049a968d5161175e565b9261175e565b6103d7565b8680fd5b5082346105bf57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103325780359067ffffffffffffffff821161032e576104f49136910161161a565b929091845b848110610504578580f35b8061051a610515600193888861196c565b61197c565b61052f84610529848a8a61196c565b0161197c565b3389528385528589209173ffffffffffffffffffffffffffffffffffffffff80911692838b528652868a20911690818a5285528589207fffffffffffffffffffffffff000000000000000000000000000000000000000081541690558551918252848201527f89b1add15eff56b3dfe299ad94e01f2b52fbcb80ae1a3baea6ae8c04cb2b98a4853392a2016104f9565b8280fd5b50346103365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657610676816105ff6114a0565b936106086114c3565b6106106114e6565b73ffffffffffffffffffffffffffffffffffffffff968716835260016020908152848420928816845291825283832090871683528152919020549251938316845260a083901c65ffffffffffff169084015260d09190911c604083015281906060820190565b0390f35b50346103365760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610336576106b26114a0565b906106bb6114c3565b916106c46114e6565b65ffffffffffff926064358481169081810361032a5779ffffffffffff0000000000000000000000000000000000000000947fda9fa7c1b00402c17d0161b249b1ab8bbec047c5a52207b9c112deffd817036b94338a5260016020527fffffffffffff0000000000000000000000000000000000000000000000000000858b209873ffffffffffffffffffffffffffffffffffffffff809416998a8d5260205283878d209b169a8b8d52602052868c209486156000146107a457504216925b8454921697889360a01b16911617179055815193845260208401523392a480f35b905092610783565b5082346105bf5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf576107e56114a0565b906107ee6114c3565b9265ffffffffffff604435818116939084810361032a57338852602091600183528489209673ffffffffffffffffffffffffffffffffffffffff80911697888b528452858a20981697888a5283528489205460d01c93848711156109175761ffff9085840316116108f05750907f55eb90d810e1700b35a8e7e25395ff7f2b2259abd7415ca2284dfb1c246418f393929133895260018252838920878a528252838920888a5282528389209079ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffff000000000000000000000000000000000000000000000000000083549260d01b16911617905582519485528401523392a480f35b84517f24d35a26000000000000000000000000000000000000000000000000000000008152fd5b5084517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b503461033657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610336578060209273ffffffffffffffffffffffffffffffffffffffff61098f6114a0565b1681528084528181206024358252845220549051908152f35b5082346105bf57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf577f3704902f963766a4e561bbaab6e6cdc1b1dd12f6e9e99648da8843b3f46b918d90359160243533855284602052818520848652602052818520818154179055815193845260208401523392a280f35b8234610a9a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610a9a57610a606114a0565b610a686114c3565b610a706114e6565b6064359173ffffffffffffffffffffffffffffffffffffffff8316830361032e576102f6936117a1565b80fd5b503461033657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657602090610ad7611b1e565b9051908152f35b508290346105bf576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf57610b1a3661152a565b90807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c36011261033257610b4c611478565b9160e43567ffffffffffffffff8111610bda576102f694610b6f913691016115c1565b939092610b7c8351612054565b6020840151828501519083519260208401947f939c21a48a8dbe3a9a2404a1d46691e4d39f6583d6ec6b35714604c986d801068652840152336060840152608083015260a082015260a08152610bd18161141b565b51902091611c25565b8580fd5b509134610336576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657610c186114a0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc360160c08112610332576080855191610c51836113e3565b1261033257845190610c6282611398565b73ffffffffffffffffffffffffffffffffffffffff91602435838116810361049f578152604435838116810361049f57602082015265ffffffffffff606435818116810361032a5788830152608435908116810361049f576060820152815260a435938285168503610bda576020820194855260c4359087830182815260e43567ffffffffffffffff811161032657610cfe90369084016115c1565b929093804211610d88575050918591610d786102f6999a610d7e95610d238851611fbe565b90898c511690519083519260208401947ff3841cd1ff0085026a6327b620b67997ce40f282c88a8e905a7a5626e310f3d086528401526060830152608082015260808152610d70816113ff565b519020611bd9565b916120c7565b519251169161199d565b602492508a51917fcd21db4f000000000000000000000000000000000000000000000000000000008352820152fd5b5091346103365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc93818536011261033257610df36114a0565b9260249081359267ffffffffffffffff9788851161032a578590853603011261049f578051978589018981108282111761104a578252848301358181116103265785019036602383011215610326578382013591610e50836115ef565b90610e5d85519283611437565b838252602093878584019160071b83010191368311611046578801905b828210610fe9575050508a526044610e93868801611509565b96838c01978852013594838b0191868352604435908111610fe557610ebb90369087016115c1565b959096804211610fba575050508998995151610ed681611ebb565b908b5b818110610f9757505092889492610d7892610f6497958351610f02816103f98682018095611f66565b5190209073ffffffffffffffffffffffffffffffffffffffff9a8b8b51169151928551948501957faf1b0d30d2cab0380e68f0689007e3254993c596f2fdd0aaa7f4d04f794408638752850152830152608082015260808152610d70816113ff565b51169082515192845b848110610f78578580f35b80610f918585610f8b600195875161175e565b5161199d565b01610f6d565b80610311610fac8e9f9e93610fb2945161175e565b51611fbe565b9b9a9b610ed9565b8551917fcd21db4f000000000000000000000000000000000000000000000000000000008352820152fd5b8a80fd5b6080823603126110465785608091885161100281611398565b61100b85611509565b8152611018838601611509565b838201526110278a8601611607565b8a8201528d611037818701611607565b90820152815201910190610e7a565b8c80fd5b84896041867f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b5082346105bf576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf576110b03661152a565b91807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c360112610332576110e2611478565b67ffffffffffffffff93906101043585811161049f5761110590369086016115c1565b90936101243596871161032a57611125610bd1966102f6983691016115c1565b969095825190611134826113ff565b606482527f5065726d69745769746e6573735472616e7366657246726f6d28546f6b656e5060208301527f65726d697373696f6e73207065726d69747465642c6164647265737320737065848301527f6e6465722c75696e74323536206e6f6e63652c75696e7432353620646561646c60608301527f696e652c0000000000000000000000000000000000000000000000000000000060808301528351948591816111e3602085018096611f93565b918237018b8152039361121c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe095868101835282611437565b5190209261122a8651612054565b6020878101518589015195519182019687526040820192909252336060820152608081019190915260a081019390935260e43560c08401528260e081016102e1565b5082346105bf576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033257813567ffffffffffffffff92838211610bda5736602383011215610bda5781013592831161032e576024906007368386831b8401011161049f57865b8581106112e5578780f35b80821b83019060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83360301126103265761139288876001946060835161132c81611398565b611368608461133c8d8601611509565b9485845261134c60448201611509565b809785015261135d60648201611509565b809885015201611509565b918291015273ffffffffffffffffffffffffffffffffffffffff80808093169516931691166117a1565b016112da565b6080810190811067ffffffffffffffff8211176113b457604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176113b457604052565b60a0810190811067ffffffffffffffff8211176113b457604052565b60c0810190811067ffffffffffffffff8211176113b457604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176113b457604052565b60c4359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01906080821261149b576040805190611563826113e3565b8082941261149b57805181810181811067ffffffffffffffff8211176113b457825260043573ffffffffffffffffffffffffffffffffffffffff8116810361149b578152602435602082015282526044356020830152606435910152565b9181601f8401121561149b5782359167ffffffffffffffff831161149b576020838186019501011161149b57565b67ffffffffffffffff81116113b45760051b60200190565b359065ffffffffffff8216820361149b57565b9181601f8401121561149b5782359167ffffffffffffffff831161149b576020808501948460061b01011161149b57565b91909160608184031261149b576040805191611666836113e3565b8294813567ffffffffffffffff9081811161149b57830182601f8201121561149b578035611693816115ef565b926116a087519485611437565b818452602094858086019360061b8501019381851161149b579086899897969594939201925b8484106116e3575050505050855280820135908501520135910152565b90919293949596978483031261149b578851908982019082821085831117611730578a928992845261171487611509565b81528287013583820152815201930191908897969594936116c6565b602460007f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b80518210156117725760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b92919273ffffffffffffffffffffffffffffffffffffffff604060008284168152600160205282828220961695868252602052818120338252602052209485549565ffffffffffff8760a01c16804211611884575082871696838803611812575b5050611810955016926118b5565b565b878484161160001461184f57602488604051907ff96fb0710000000000000000000000000000000000000000000000000000000082526004820152fd5b7fffffffffffffffffffffffff000000000000000000000000000000000000000084846118109a031691161790553880611802565b602490604051907fd81b2f2e0000000000000000000000000000000000000000000000000000000082526004820152fd5b9060006064926020958295604051947f23b872dd0000000000000000000000000000000000000000000000000000000086526004860152602485015260448401525af13d15601f3d116001600051141617161561190e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152fd5b91908110156117725760061b0190565b3573ffffffffffffffffffffffffffffffffffffffff8116810361149b5790565b9065ffffffffffff908160608401511673ffffffffffffffffffffffffffffffffffffffff908185511694826020820151169280866040809401511695169560009187835260016020528383208984526020528383209916988983526020528282209184835460d01c03611af5579185611ace94927fc6a377bfc4eb120024a8ac08eef205be16b817020812c73223e81d1bdb9708ec98979694508715600014611ad35779ffffffffffff00000000000000000000000000000000000000009042165b60a01b167fffffffffffff00000000000000000000000000000000000000000000000000006001860160d01b1617179055519384938491604091949373ffffffffffffffffffffffffffffffffffffffff606085019616845265ffffffffffff809216602085015216910152565b0390a4565b5079ffffffffffff000000000000000000000000000000000000000087611a60565b600484517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b467f000000000000000000000000000000000000000000000000000000000000000103611b69577f866a5aba21966af95d6c7ab78eb2b2fc913915c28be3b9aa07cc04ff903e3f2890565b60405160208101907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86682527f9ac997416e8ff9d2ff6bebeb7149f65cdae5e32e2b90440b566bb3044041d36a604082015246606082015230608082015260808152611bd3816113ff565b51902090565b611be1611b1e565b906040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152611bd381611398565b9192909360a435936040840151804211611cc65750602084510151808611611c955750918591610d78611c6594611c60602088015186611e47565b611bd9565b73ffffffffffffffffffffffffffffffffffffffff809151511692608435918216820361149b57611810936118b5565b602490604051907f3728b83d0000000000000000000000000000000000000000000000000000000082526004820152fd5b602490604051907fcd21db4f0000000000000000000000000000000000000000000000000000000082526004820152fd5b959093958051519560409283830151804211611e175750848803611dee57611d2e918691610d7860209b611c608d88015186611e47565b60005b868110611d42575050505050505050565b611d4d81835161175e565b5188611d5a83878a61196c565b01359089810151808311611dbe575091818888886001968596611d84575b50505050505001611d31565b611db395611dad9273ffffffffffffffffffffffffffffffffffffffff6105159351169561196c565b916118b5565b803888888883611d78565b6024908651907f3728b83d0000000000000000000000000000000000000000000000000000000082526004820152fd5b600484517fff633a38000000000000000000000000000000000000000000000000000000008152fd5b6024908551907fcd21db4f0000000000000000000000000000000000000000000000000000000082526004820152fd5b9073ffffffffffffffffffffffffffffffffffffffff600160ff83161b9216600052600060205260406000209060081c6000526020526040600020818154188091551615611e9157565b60046040517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b90611ec5826115ef565b611ed26040519182611437565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611f0082946115ef565b0190602036910137565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f375760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b805160208092019160005b828110611f7f575050505090565b835185529381019392810192600101611f71565b9081519160005b838110611fab575050016000815290565b8060208092840101518185015201611f9a565b60405160208101917f65626cad6cb96493bf6f5ebea28756c966f023ab9e8a83a7101849d5573b3678835273ffffffffffffffffffffffffffffffffffffffff8082511660408401526020820151166060830152606065ffffffffffff9182604082015116608085015201511660a082015260a0815260c0810181811067ffffffffffffffff8211176113b45760405251902090565b6040516020808201927f618358ac3db8dc274f0cd8829da7e234bd48cd73c4a740aede1adec9846d06a1845273ffffffffffffffffffffffffffffffffffffffff81511660408401520151606082015260608152611bd381611398565b919082604091031261149b576020823592013590565b6000843b61222e5750604182036121ac576120e4828201826120b1565b939092604010156117725760209360009360ff6040608095013560f81c5b60405194855216868401526040830152606082015282805260015afa156121a05773ffffffffffffffffffffffffffffffffffffffff806000511691821561217657160361214c57565b60046040517f815e1d64000000000000000000000000000000000000000000000000000000008152fd5b60046040517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6040513d6000823e3d90fd5b60408203612204576121c0918101906120b1565b91601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c019060ff8211611f375760209360009360ff608094612102565b60046040517f4be6321b000000000000000000000000000000000000000000000000000000008152fd5b929391601f928173ffffffffffffffffffffffffffffffffffffffff60646020957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0604051988997889687947f1626ba7e000000000000000000000000000000000000000000000000000000009e8f8752600487015260406024870152816044870152868601378b85828601015201168101030192165afa9081156123a857829161232a575b507fffffffff000000000000000000000000000000000000000000000000000000009150160361230057565b60046040517fb0669cbc000000000000000000000000000000000000000000000000000000008152fd5b90506020813d82116123a0575b8161234460209383611437565b810103126103365751907fffffffff0000000000000000000000000000000000000000000000000000000082168203610a9a57507fffffffff0000000000000000000000000000000000000000000000000000000090386122d4565b3d9150612337565b6040513d84823e3d90fdfea164736f6c6343000811000a"; - assembly { return(add(bytecode, 0x20), mload(bytecode)) } - } +// constructor() { +// // Deployed Permit2 bytecode at +// // https://etherscan.io/address/0x000000000022D473030F116dDEE9F6B43aC78BA3 +// bytes memory bytecode = hex"6040608081526004908136101561001557600080fd5b600090813560e01c80630d58b1db1461126c578063137c29fe146110755780632a2d80d114610db75780632b67b57014610bde57806330f28b7a14610ade5780633644e51514610a9d57806336c7851614610a285780633ff9dcb1146109a85780634fe02b441461093f57806365d9723c146107ac57806387517c451461067a578063927da105146105c3578063cc53287f146104a3578063edd9444b1461033a5763fe8ec1a7146100c657600080fd5b346103365760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103365767ffffffffffffffff833581811161033257610114903690860161164b565b60243582811161032e5761012b903690870161161a565b6101336114e6565b9160843585811161032a5761014b9036908a016115c1565b98909560a43590811161032657610164913691016115c1565b969095815190610173826113ff565b606b82527f5065726d697442617463685769746e6573735472616e7366657246726f6d285460208301527f6f6b656e5065726d697373696f6e735b5d207065726d69747465642c61646472838301527f657373207370656e6465722c75696e74323536206e6f6e63652c75696e74323560608301527f3620646561646c696e652c000000000000000000000000000000000000000000608083015282519a8b9181610222602085018096611f93565b918237018a8152039961025b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09b8c8101835282611437565b5190209085515161026b81611ebb565b908a5b8181106102f95750506102f6999a6102ed9183516102a081610294602082018095611f66565b03848101835282611437565b519020602089810151858b015195519182019687526040820192909252336060820152608081019190915260a081019390935260643560c08401528260e081015b03908101835282611437565b51902093611cf7565b80f35b8061031161030b610321938c5161175e565b51612054565b61031b828661175e565b52611f0a565b61026e565b8880fd5b8780fd5b8480fd5b8380fd5b5080fd5b5091346103365760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103365767ffffffffffffffff9080358281116103325761038b903690830161164b565b60243583811161032e576103a2903690840161161a565b9390926103ad6114e6565b9160643590811161049f576103c4913691016115c1565b949093835151976103d489611ebb565b98885b81811061047d5750506102f697988151610425816103f9602082018095611f66565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611437565b5190206020860151828701519083519260208401947ffcf35f5ac6a2c28868dc44c302166470266239195f02b0ee408334829333b7668652840152336060840152608083015260a082015260a081526102ed8161141b565b808b61031b8261049461030b61049a968d5161175e565b9261175e565b6103d7565b8680fd5b5082346105bf57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103325780359067ffffffffffffffff821161032e576104f49136910161161a565b929091845b848110610504578580f35b8061051a610515600193888861196c565b61197c565b61052f84610529848a8a61196c565b0161197c565b3389528385528589209173ffffffffffffffffffffffffffffffffffffffff80911692838b528652868a20911690818a5285528589207fffffffffffffffffffffffff000000000000000000000000000000000000000081541690558551918252848201527f89b1add15eff56b3dfe299ad94e01f2b52fbcb80ae1a3baea6ae8c04cb2b98a4853392a2016104f9565b8280fd5b50346103365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657610676816105ff6114a0565b936106086114c3565b6106106114e6565b73ffffffffffffffffffffffffffffffffffffffff968716835260016020908152848420928816845291825283832090871683528152919020549251938316845260a083901c65ffffffffffff169084015260d09190911c604083015281906060820190565b0390f35b50346103365760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610336576106b26114a0565b906106bb6114c3565b916106c46114e6565b65ffffffffffff926064358481169081810361032a5779ffffffffffff0000000000000000000000000000000000000000947fda9fa7c1b00402c17d0161b249b1ab8bbec047c5a52207b9c112deffd817036b94338a5260016020527fffffffffffff0000000000000000000000000000000000000000000000000000858b209873ffffffffffffffffffffffffffffffffffffffff809416998a8d5260205283878d209b169a8b8d52602052868c209486156000146107a457504216925b8454921697889360a01b16911617179055815193845260208401523392a480f35b905092610783565b5082346105bf5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf576107e56114a0565b906107ee6114c3565b9265ffffffffffff604435818116939084810361032a57338852602091600183528489209673ffffffffffffffffffffffffffffffffffffffff80911697888b528452858a20981697888a5283528489205460d01c93848711156109175761ffff9085840316116108f05750907f55eb90d810e1700b35a8e7e25395ff7f2b2259abd7415ca2284dfb1c246418f393929133895260018252838920878a528252838920888a5282528389209079ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffff000000000000000000000000000000000000000000000000000083549260d01b16911617905582519485528401523392a480f35b84517f24d35a26000000000000000000000000000000000000000000000000000000008152fd5b5084517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b503461033657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610336578060209273ffffffffffffffffffffffffffffffffffffffff61098f6114a0565b1681528084528181206024358252845220549051908152f35b5082346105bf57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf577f3704902f963766a4e561bbaab6e6cdc1b1dd12f6e9e99648da8843b3f46b918d90359160243533855284602052818520848652602052818520818154179055815193845260208401523392a280f35b8234610a9a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610a9a57610a606114a0565b610a686114c3565b610a706114e6565b6064359173ffffffffffffffffffffffffffffffffffffffff8316830361032e576102f6936117a1565b80fd5b503461033657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657602090610ad7611b1e565b9051908152f35b508290346105bf576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf57610b1a3661152a565b90807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c36011261033257610b4c611478565b9160e43567ffffffffffffffff8111610bda576102f694610b6f913691016115c1565b939092610b7c8351612054565b6020840151828501519083519260208401947f939c21a48a8dbe3a9a2404a1d46691e4d39f6583d6ec6b35714604c986d801068652840152336060840152608083015260a082015260a08152610bd18161141b565b51902091611c25565b8580fd5b509134610336576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657610c186114a0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc360160c08112610332576080855191610c51836113e3565b1261033257845190610c6282611398565b73ffffffffffffffffffffffffffffffffffffffff91602435838116810361049f578152604435838116810361049f57602082015265ffffffffffff606435818116810361032a5788830152608435908116810361049f576060820152815260a435938285168503610bda576020820194855260c4359087830182815260e43567ffffffffffffffff811161032657610cfe90369084016115c1565b929093804211610d88575050918591610d786102f6999a610d7e95610d238851611fbe565b90898c511690519083519260208401947ff3841cd1ff0085026a6327b620b67997ce40f282c88a8e905a7a5626e310f3d086528401526060830152608082015260808152610d70816113ff565b519020611bd9565b916120c7565b519251169161199d565b602492508a51917fcd21db4f000000000000000000000000000000000000000000000000000000008352820152fd5b5091346103365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc93818536011261033257610df36114a0565b9260249081359267ffffffffffffffff9788851161032a578590853603011261049f578051978589018981108282111761104a578252848301358181116103265785019036602383011215610326578382013591610e50836115ef565b90610e5d85519283611437565b838252602093878584019160071b83010191368311611046578801905b828210610fe9575050508a526044610e93868801611509565b96838c01978852013594838b0191868352604435908111610fe557610ebb90369087016115c1565b959096804211610fba575050508998995151610ed681611ebb565b908b5b818110610f9757505092889492610d7892610f6497958351610f02816103f98682018095611f66565b5190209073ffffffffffffffffffffffffffffffffffffffff9a8b8b51169151928551948501957faf1b0d30d2cab0380e68f0689007e3254993c596f2fdd0aaa7f4d04f794408638752850152830152608082015260808152610d70816113ff565b51169082515192845b848110610f78578580f35b80610f918585610f8b600195875161175e565b5161199d565b01610f6d565b80610311610fac8e9f9e93610fb2945161175e565b51611fbe565b9b9a9b610ed9565b8551917fcd21db4f000000000000000000000000000000000000000000000000000000008352820152fd5b8a80fd5b6080823603126110465785608091885161100281611398565b61100b85611509565b8152611018838601611509565b838201526110278a8601611607565b8a8201528d611037818701611607565b90820152815201910190610e7a565b8c80fd5b84896041867f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b5082346105bf576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf576110b03661152a565b91807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c360112610332576110e2611478565b67ffffffffffffffff93906101043585811161049f5761110590369086016115c1565b90936101243596871161032a57611125610bd1966102f6983691016115c1565b969095825190611134826113ff565b606482527f5065726d69745769746e6573735472616e7366657246726f6d28546f6b656e5060208301527f65726d697373696f6e73207065726d69747465642c6164647265737320737065848301527f6e6465722c75696e74323536206e6f6e63652c75696e7432353620646561646c60608301527f696e652c0000000000000000000000000000000000000000000000000000000060808301528351948591816111e3602085018096611f93565b918237018b8152039361121c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe095868101835282611437565b5190209261122a8651612054565b6020878101518589015195519182019687526040820192909252336060820152608081019190915260a081019390935260e43560c08401528260e081016102e1565b5082346105bf576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033257813567ffffffffffffffff92838211610bda5736602383011215610bda5781013592831161032e576024906007368386831b8401011161049f57865b8581106112e5578780f35b80821b83019060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83360301126103265761139288876001946060835161132c81611398565b611368608461133c8d8601611509565b9485845261134c60448201611509565b809785015261135d60648201611509565b809885015201611509565b918291015273ffffffffffffffffffffffffffffffffffffffff80808093169516931691166117a1565b016112da565b6080810190811067ffffffffffffffff8211176113b457604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176113b457604052565b60a0810190811067ffffffffffffffff8211176113b457604052565b60c0810190811067ffffffffffffffff8211176113b457604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176113b457604052565b60c4359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01906080821261149b576040805190611563826113e3565b8082941261149b57805181810181811067ffffffffffffffff8211176113b457825260043573ffffffffffffffffffffffffffffffffffffffff8116810361149b578152602435602082015282526044356020830152606435910152565b9181601f8401121561149b5782359167ffffffffffffffff831161149b576020838186019501011161149b57565b67ffffffffffffffff81116113b45760051b60200190565b359065ffffffffffff8216820361149b57565b9181601f8401121561149b5782359167ffffffffffffffff831161149b576020808501948460061b01011161149b57565b91909160608184031261149b576040805191611666836113e3565b8294813567ffffffffffffffff9081811161149b57830182601f8201121561149b578035611693816115ef565b926116a087519485611437565b818452602094858086019360061b8501019381851161149b579086899897969594939201925b8484106116e3575050505050855280820135908501520135910152565b90919293949596978483031261149b578851908982019082821085831117611730578a928992845261171487611509565b81528287013583820152815201930191908897969594936116c6565b602460007f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b80518210156117725760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b92919273ffffffffffffffffffffffffffffffffffffffff604060008284168152600160205282828220961695868252602052818120338252602052209485549565ffffffffffff8760a01c16804211611884575082871696838803611812575b5050611810955016926118b5565b565b878484161160001461184f57602488604051907ff96fb0710000000000000000000000000000000000000000000000000000000082526004820152fd5b7fffffffffffffffffffffffff000000000000000000000000000000000000000084846118109a031691161790553880611802565b602490604051907fd81b2f2e0000000000000000000000000000000000000000000000000000000082526004820152fd5b9060006064926020958295604051947f23b872dd0000000000000000000000000000000000000000000000000000000086526004860152602485015260448401525af13d15601f3d116001600051141617161561190e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152fd5b91908110156117725760061b0190565b3573ffffffffffffffffffffffffffffffffffffffff8116810361149b5790565b9065ffffffffffff908160608401511673ffffffffffffffffffffffffffffffffffffffff908185511694826020820151169280866040809401511695169560009187835260016020528383208984526020528383209916988983526020528282209184835460d01c03611af5579185611ace94927fc6a377bfc4eb120024a8ac08eef205be16b817020812c73223e81d1bdb9708ec98979694508715600014611ad35779ffffffffffff00000000000000000000000000000000000000009042165b60a01b167fffffffffffff00000000000000000000000000000000000000000000000000006001860160d01b1617179055519384938491604091949373ffffffffffffffffffffffffffffffffffffffff606085019616845265ffffffffffff809216602085015216910152565b0390a4565b5079ffffffffffff000000000000000000000000000000000000000087611a60565b600484517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b467f000000000000000000000000000000000000000000000000000000000000000103611b69577f866a5aba21966af95d6c7ab78eb2b2fc913915c28be3b9aa07cc04ff903e3f2890565b60405160208101907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86682527f9ac997416e8ff9d2ff6bebeb7149f65cdae5e32e2b90440b566bb3044041d36a604082015246606082015230608082015260808152611bd3816113ff565b51902090565b611be1611b1e565b906040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152611bd381611398565b9192909360a435936040840151804211611cc65750602084510151808611611c955750918591610d78611c6594611c60602088015186611e47565b611bd9565b73ffffffffffffffffffffffffffffffffffffffff809151511692608435918216820361149b57611810936118b5565b602490604051907f3728b83d0000000000000000000000000000000000000000000000000000000082526004820152fd5b602490604051907fcd21db4f0000000000000000000000000000000000000000000000000000000082526004820152fd5b959093958051519560409283830151804211611e175750848803611dee57611d2e918691610d7860209b611c608d88015186611e47565b60005b868110611d42575050505050505050565b611d4d81835161175e565b5188611d5a83878a61196c565b01359089810151808311611dbe575091818888886001968596611d84575b50505050505001611d31565b611db395611dad9273ffffffffffffffffffffffffffffffffffffffff6105159351169561196c565b916118b5565b803888888883611d78565b6024908651907f3728b83d0000000000000000000000000000000000000000000000000000000082526004820152fd5b600484517fff633a38000000000000000000000000000000000000000000000000000000008152fd5b6024908551907fcd21db4f0000000000000000000000000000000000000000000000000000000082526004820152fd5b9073ffffffffffffffffffffffffffffffffffffffff600160ff83161b9216600052600060205260406000209060081c6000526020526040600020818154188091551615611e9157565b60046040517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b90611ec5826115ef565b611ed26040519182611437565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611f0082946115ef565b0190602036910137565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f375760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b805160208092019160005b828110611f7f575050505090565b835185529381019392810192600101611f71565b9081519160005b838110611fab575050016000815290565b8060208092840101518185015201611f9a565b60405160208101917f65626cad6cb96493bf6f5ebea28756c966f023ab9e8a83a7101849d5573b3678835273ffffffffffffffffffffffffffffffffffffffff8082511660408401526020820151166060830152606065ffffffffffff9182604082015116608085015201511660a082015260a0815260c0810181811067ffffffffffffffff8211176113b45760405251902090565b6040516020808201927f618358ac3db8dc274f0cd8829da7e234bd48cd73c4a740aede1adec9846d06a1845273ffffffffffffffffffffffffffffffffffffffff81511660408401520151606082015260608152611bd381611398565b919082604091031261149b576020823592013590565b6000843b61222e5750604182036121ac576120e4828201826120b1565b939092604010156117725760209360009360ff6040608095013560f81c5b60405194855216868401526040830152606082015282805260015afa156121a05773ffffffffffffffffffffffffffffffffffffffff806000511691821561217657160361214c57565b60046040517f815e1d64000000000000000000000000000000000000000000000000000000008152fd5b60046040517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6040513d6000823e3d90fd5b60408203612204576121c0918101906120b1565b91601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c019060ff8211611f375760209360009360ff608094612102565b60046040517f4be6321b000000000000000000000000000000000000000000000000000000008152fd5b929391601f928173ffffffffffffffffffffffffffffffffffffffff60646020957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0604051988997889687947f1626ba7e000000000000000000000000000000000000000000000000000000009e8f8752600487015260406024870152816044870152868601378b85828601015201168101030192165afa9081156123a857829161232a575b507fffffffff000000000000000000000000000000000000000000000000000000009150160361230057565b60046040517fb0669cbc000000000000000000000000000000000000000000000000000000008152fd5b90506020813d82116123a0575b8161234460209383611437565b810103126103365751907fffffffff0000000000000000000000000000000000000000000000000000000082168203610a9a57507fffffffff0000000000000000000000000000000000000000000000000000000090386122d4565b3d9150612337565b6040513d84823e3d90fdfea164736f6c6343000811000a"; +// assembly { return(add(bytecode, 0x20), mload(bytecode)) } +// } - ///// STUBS ///// - function DOMAIN_SEPARATOR() external view returns (bytes32) {} +// ///// STUBS ///// +// function DOMAIN_SEPARATOR() external view returns (bytes32) {} - function permitTransferFrom( - PermitTransferFrom calldata permit, - SignatureTransferDetails calldata transferDetails, - address owner, - bytes calldata signature - ) external {} +// function permitTransferFrom( +// PermitTransferFrom calldata permit, +// SignatureTransferDetails calldata transferDetails, +// address owner, +// bytes calldata signature +// ) external {} - function permitTransferFrom( - PermitBatchTransferFrom calldata permit, - SignatureTransferDetails[] calldata transferDetails, - address owner, - bytes calldata signature - ) external {} -} \ No newline at end of file +// function permitTransferFrom( +// PermitBatchTransferFrom calldata permit, +// SignatureTransferDetails[] calldata transferDetails, +// address owner, +// bytes calldata signature +// ) external {} +// } \ No newline at end of file diff --git a/packages/nextjs-app/src/contracts/deployedContracts.ts b/packages/nextjs-app/src/contracts/deployedContracts.ts index d60dee5..4b3f3ef 100644 --- a/packages/nextjs-app/src/contracts/deployedContracts.ts +++ b/packages/nextjs-app/src/contracts/deployedContracts.ts @@ -289,7 +289,7 @@ const deployedContracts = { }, 480: { Permit2Vault: { - address: "0x29c4b679f04c0a86983b19380766d3b0ca679a59", + address: "0x3845eb1554913bdbd58f7c7cdedc45f03a1e54fd", abi: [ { type: "constructor", @@ -324,6 +324,11 @@ const deployedContracts = { type: "function", name: "depositERC20", inputs: [ + { + name: "userAddr", + type: "address", + internalType: "address", + }, { name: "token", type: "address", @@ -358,32 +363,19 @@ const deployedContracts = { name: "depositERC20Regular", inputs: [ { - name: "token", + name: "userAddr", type: "address", - internalType: "contract IERC20", + internalType: "address", }, - { - name: "amount", - type: "uint256", - internalType: "uint256", - }, - ], - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - name: "rescueTokens", - inputs: [ { name: "token", type: "address", internalType: "contract IERC20", }, { - name: "recipient", - type: "address", - internalType: "address", + name: "amount", + type: "uint256", + internalType: "uint256", }, ], outputs: [], @@ -430,6 +422,11 @@ const deployedContracts = { type: "function", name: "withdrawERC20", inputs: [ + { + name: "userAddr", + type: "address", + internalType: "address", + }, { name: "token", type: "address", @@ -486,7 +483,7 @@ const deployedContracts = { inheritedFunctions: {}, }, HumanOracleV1: { - address: "0x8cbef8f4ca9020a7ea6565480e3d90e1704ffadc", + address: "0x03d9858aa5c3a8e79560e833827e6a096643e061", abi: [ { type: "constructor", diff --git a/packages/nextjs/contracts/deployedContracts.ts b/packages/nextjs/contracts/deployedContracts.ts index ad095b2..6c26311 100644 --- a/packages/nextjs/contracts/deployedContracts.ts +++ b/packages/nextjs/contracts/deployedContracts.ts @@ -290,7 +290,7 @@ const deployedContracts = { }, 480: { Permit2Vault: { - address: "0x29c4b679f04c0a86983b19380766d3b0ca679a59", + address: "0x3845eb1554913bdbd58f7c7cdedc45f03a1e54fd", abi: [ { type: "constructor", @@ -325,6 +325,11 @@ const deployedContracts = { type: "function", name: "depositERC20", inputs: [ + { + name: "userAddr", + type: "address", + internalType: "address", + }, { name: "token", type: "address", @@ -359,32 +364,19 @@ const deployedContracts = { name: "depositERC20Regular", inputs: [ { - name: "token", + name: "userAddr", type: "address", - internalType: "contract IERC20", + internalType: "address", }, - { - name: "amount", - type: "uint256", - internalType: "uint256", - }, - ], - outputs: [], - stateMutability: "nonpayable", - }, - { - type: "function", - name: "rescueTokens", - inputs: [ { name: "token", type: "address", internalType: "contract IERC20", }, { - name: "recipient", - type: "address", - internalType: "address", + name: "amount", + type: "uint256", + internalType: "uint256", }, ], outputs: [], @@ -431,6 +423,11 @@ const deployedContracts = { type: "function", name: "withdrawERC20", inputs: [ + { + name: "userAddr", + type: "address", + internalType: "address", + }, { name: "token", type: "address", @@ -487,7 +484,7 @@ const deployedContracts = { inheritedFunctions: {}, }, HumanOracleV1: { - address: "0x8cbef8f4ca9020a7ea6565480e3d90e1704ffadc", + address: "0x03d9858aa5c3a8e79560e833827e6a096643e061", abi: [ { type: "constructor",