diff --git a/scripts/DeployDeterministic.s.sol b/scripts/DeployDeterministic.s.sol new file mode 100644 index 00000000..6a141e47 --- /dev/null +++ b/scripts/DeployDeterministic.s.sol @@ -0,0 +1,40 @@ +pragma solidity ^0.8.0; + +import "src/factory/KernelFactory.sol"; +import "forge-std/Script.sol"; + +import "./deterministic/ECDSAValidator.s.sol"; +import "./deterministic/Factory.s.sol"; +import "./deterministic/SessionKey.s.sol"; +import "./deterministic/Kernel2_2.s.sol"; +import "./deterministic/Kernel2_3.s.sol"; + +contract DeployDeterministic is Script { + address constant DEPLOYER = 0x9775137314fE595c943712B0b336327dfa80aE8A; + function run() external { + uint256 key = vm.envUint("DEPLOYER_PRIVATE_KEY"); + vm.startBroadcast(key); + KernelFactory factory = KernelFactory(payable(FactoryDeploy.deploy())); + + ECDSAValidatorDeploy.deploy(); + SessionKeyDeploy.deploy(); + + (address k22, address k22lite) = Kernel_2_2_Deploy.deploy(); + + if(!factory.isAllowedImplementation(k22)) { + factory.setImplementation(k22, true); + } + if(!factory.isAllowedImplementation(k22lite)) { + factory.setImplementation(k22lite, true); + } + + (address k23, address k23lite) = Kernel_2_3_Deploy.deploy(); + if(!factory.isAllowedImplementation(k23)) { + factory.setImplementation(k23, true); + } + if(!factory.isAllowedImplementation(k23lite)) { + factory.setImplementation(k23lite, true); + } + vm.stopBroadcast(); + } +} diff --git a/scripts/DeployKernelInitial.s.sol b/scripts/DeployKernelInitial.s.sol new file mode 100644 index 00000000..b18e5683 --- /dev/null +++ b/scripts/DeployKernelInitial.s.sol @@ -0,0 +1,51 @@ +pragma solidity ^0.8.0; + +import "src/factory/KernelFactory.sol"; +import "I4337/interfaces/IStakeManager.sol"; +import "src/Kernel.sol"; +import "src/lite/KernelLiteECDSA.sol"; +import "forge-std/Script.sol"; +import "forge-std/console.sol"; +import "src/validator/ECDSAValidator.sol"; +contract DeployKernelInitial is Script { + address constant DEPLOYER = 0x9775137314fE595c943712B0b336327dfa80aE8A; + address constant ENTRYPOINT_0_6 = 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789; + address constant ECDSAVALIDATOR = 0xd9AB5096a832b9ce79914329DAEE236f8Eea0390; + address payable constant EXPECTED_KERNEL_FACTORY_ADDRESS = payable(0x5de4839a76cf55d0c90e2061ef4386d962E15ae3); + function run() public { + uint256 key = vm.envUint("DEPLOYER_PRIVATE_KEY"); + vm.startBroadcast(key); + KernelFactory factory; + if(EXPECTED_KERNEL_FACTORY_ADDRESS.code.length == 0){ + factory = new KernelFactory{salt:0}(DEPLOYER, IEntryPoint(ENTRYPOINT_0_6)); + console.log("KernelFactory address: %s", address(factory)); + } else { + factory = KernelFactory(EXPECTED_KERNEL_FACTORY_ADDRESS); + } + //if(address(ECDSAVALIDATOR).code.length == 0) { + // console.log("ECDSAVALIDATOR NOT DEPLOYED"); + //} else { + // KernelLiteECDSA kernellite; + // kernellite = new KernelLiteECDSA{salt:0}(IEntryPoint(ENTRYPOINT_0_6), IKernelValidator(ECDSAVALIDATOR)); + // console.log("Kernel Lite address: %s", address(kernellite)); + // if(factory.isAllowedImplementation(address(kernellite)) == false) { + // console.log("Registering kernellite implementation"); + // factory.setImplementation(address(kernellite), true); + // } + //} + Kernel kernel; + kernel = new Kernel{salt:0}(IEntryPoint(ENTRYPOINT_0_6)); + console.log("Kernel address: %s", address(kernel)); + if(factory.isAllowedImplementation(address(kernel)) == false) { + console.log("Registering kernel implementation"); + factory.setImplementation(address(kernel), true); + } + IEntryPoint entryPoint = IEntryPoint(ENTRYPOINT_0_6); + IStakeManager.DepositInfo memory info = entryPoint.getDepositInfo(address(factory)); + if(info.stake == 0) { + console.log("Need to stake to factory"); + } + vm.stopBroadcast(); + } +} + diff --git a/scripts/deterministic/DeterministicDeploy.s.sol b/scripts/deterministic/DeterministicDeploy.s.sol new file mode 100644 index 00000000..10ecdf96 --- /dev/null +++ b/scripts/deterministic/DeterministicDeploy.s.sol @@ -0,0 +1,17 @@ +pragma solidity ^0.8.0; + +import "forge-std/console.sol"; + +library DeterministicDeploy { + address constant DETERMINISTIC_DEPLOYER = 0x4e59b44847b379578588920cA78FbF26c0B4956C; + function checkDeploy(string memory tag, address _expectedAddress, bytes memory _code) internal { + if(_expectedAddress.code.length == 0) { + (bool success, bytes memory addr) = DETERMINISTIC_DEPLOYER.call(_code); + require(success, "DeterministicDeploy: failed to deploy"); + require(address(bytes20(addr)) == _expectedAddress, "DeterministicDeploy: address mismatch"); + console.log(string.concat(tag, ": deployed at %s"), _expectedAddress); + } else { + console.log(string.concat(tag, ": already deployed")); + } + } +} diff --git a/scripts/deterministic/ECDSAValidator.s.sol b/scripts/deterministic/ECDSAValidator.s.sol new file mode 100644 index 00000000..e235d477 --- /dev/null +++ b/scripts/deterministic/ECDSAValidator.s.sol @@ -0,0 +1,13 @@ +pragma solidity ^0.8.0; + +import "./DeterministicDeploy.s.sol"; + +library ECDSAValidatorDeploy { + address constant EXPECTED_ECDSA_VALIDATOR_ADDRESS = 0xd9AB5096a832b9ce79914329DAEE236f8Eea0390; + bytes constant VALIDATOR_CODE = hex"000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056"; + + function deploy() internal returns(address) { + DeterministicDeploy.checkDeploy("ECDSAValidator", EXPECTED_ECDSA_VALIDATOR_ADDRESS, VALIDATOR_CODE); + return EXPECTED_ECDSA_VALIDATOR_ADDRESS; + } +} diff --git a/scripts/deterministic/Factory.s.sol b/scripts/deterministic/Factory.s.sol new file mode 100644 index 00000000..4cf5a078 --- /dev/null +++ b/scripts/deterministic/Factory.s.sol @@ -0,0 +1,12 @@ +pragma solidity ^0.8.0; + +import "./DeterministicDeploy.s.sol"; + +library FactoryDeploy { + address payable constant EXPECTED_KERNEL_FACTORY_ADDRESS = payable(0x5de4839a76cf55d0c90e2061ef4386d962E15ae3); + bytes constant KERNEL_FACTORY_CODE = hex"00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789"; + function deploy() internal returns(address) { + DeterministicDeploy.checkDeploy("factory",EXPECTED_KERNEL_FACTORY_ADDRESS, KERNEL_FACTORY_CODE); + return EXPECTED_KERNEL_FACTORY_ADDRESS; + } +} diff --git a/scripts/deterministic/Kernel2_2.s.sol b/scripts/deterministic/Kernel2_2.s.sol new file mode 100644 index 00000000..a58113e8 --- /dev/null +++ b/scripts/deterministic/Kernel2_2.s.sol @@ -0,0 +1,14 @@ +pragma solidity ^0.8.0; +import "./DeterministicDeploy.s.sol"; + +library Kernel_2_2_Deploy { + address constant EXPECTED_KERNEL_2_2_ADDRESS = 0x0DA6a956B9488eD4dd761E59f52FDc6c8068E6B5; + bytes constant KERNEL_2_2_CODE = hex"000000000000000000000000000000000000000000000000000000000000000061014034620001b757601f620021e238819003918201601f19168301916001600160401b03831184841017620001bc57808492602094604052833981010312620001b757516001600160a01b0381168103620001b757306080524660a05260a062000069620001d2565b600681526005602082016512d95c9b995b60d21b815260206200008b620001d2565b838152019264181719171960d91b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611fef9283620001f3843960805183611a6a015260a05183611a8d015260c05183611aff015260e05183611b2501525182611a490152518181816104db0152818161079a015281816108a701528181610a3201528181610b5a01528181610d5401528181610e7501528181610f740152818161109e01528181611147015261148e0152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001bc5760405256fe6080604052600436101561001d575b366110815761001b611ece565b005b60003560e01c806306fdde031461018d5780630b3dc35414610188578063150b7a02146101835780631626ba7e1461017e57806329f8b17414610179578063333daf921461017457806334fcd5be1461016f5780633659cfe61461016a5780633a871cdd146101655780633e1b08121461016057806351166ba01461015b578063519454471461015657806354fd4d501461015157806355b14f501461014c57806357b750471461014757806384b0196e1461014257806388e7fd061461013d578063b0d691fe14610138578063bc197c8114610133578063d087d2881461012e578063d1f5789414610129578063d5416221146101245763f23a6e610361000e57610fef565b610f5d565b610ec1565b610e42565b610db3565b610d3e565b610d09565b610c61565b610c2a565b610b44565b610af0565b6109eb565b610922565b61085e565b61081c565b610776565b610693565b61060e565b610466565b610413565b610386565b610307565b6102d3565b600091031261019d57565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101cb57604052565b6101a2565b606081019081106001600160401b038211176101cb57604052565b608081019081106001600160401b038211176101cb57604052565b604081019081106001600160401b038211176101cb57604052565b90601f801991011681019081106001600160401b038211176101cb57604052565b6040519061024f826101eb565b565b6040519061016082018281106001600160401b038211176101cb57604052565b6040519061027e82610206565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b8481106102bf575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161029e565b3461019d57600036600319011261019d576103036102ef610271565b604051918291602083526020830190610293565b0390f35b3461019d57600036600319011261019d576020600080516020611fcf8339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361019d57565b359061024f8261033d565b9181601f8401121561019d578235916001600160401b03831161019d576020838186019501011161019d57565b3461019d57608036600319011261019d576103a260043561033d565b6103ad60243561033d565b6064356001600160401b03811161019d576103cc903690600401610359565b5050604051630a85bd0160e11b8152602090f35b90604060031983011261019d5760043591602435906001600160401b03821161019d5761040f91600401610359565b9091565b3461019d57602061042c610426366103e0565b91611b5b565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361019d57565b65ffffffffffff81160361019d57565b60c036600319011261019d5761047a61043f565b602435906104878261033d565b604435906104948261033d565b6064356104a081610456565b608435936104ad85610456565b60a4356001600160401b03811161019d576104cc903690600401610359565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610604575b6105f25784926105396105659261052a61051c610242565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261056087611049565b61172b565b1693843b1561019d576040519063064acaab60e11b8252818061058f6000998a94600484016117de565b038183895af180156105ed576105d4575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b806105e16105e7926101b8565b80610192565b386105a0565b611475565b604051637046c88d60e01b8152600490fd5b5030331415610504565b3461019d576020610627610621366103e0565b91611e13565b604051908152f35b9291926001600160401b0382116101cb5760405191610658601f8201601f191660200184610221565b82948184528183011161019d578281602093846000960137010152565b9080601f8301121561019d578160206106909335910161062f565b90565b60208060031936011261019d576001600160401b0360043581811161019d573660238201121561019d578060040135918083116101cb578260051b906040908151946106e187850187610221565b855285850191602480948601019436861161019d57848101935b86851061070b5761001b88611144565b843584811161019d5782016060602319823603011261019d57835191610730836101d0565b8782013561073d8161033d565b835260448201358b84015260648201359286841161019d576107678c94938a869536920101610675565b868201528152019401936106fb565b602036600319011261019d5760043561078e8161033d565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610812575b6105f257807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b50303314156107c3565b60031960603682011261019d57600435906001600160401b03821161019d5761016090823603011261019d576106276020916044359060243590600401611481565b3461019d57602036600319011261019d576004356001600160c01b0381169081900361019d57604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156105ed57610303916000916108f4575b506040519081529081906020820190565b610915915060203d811161091b575b61090d8183610221565b810190611396565b386108e3565b503d610903565b3461019d57602036600319011261019d5761030361096761094161043f565b60006060604051610951816101eb565b8281528260208201528260408201520152611049565b60405190610974826101eb565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261019d57600435610a038161033d565b6044356001600160401b03811161019d57610a22903690600401610675565b90606435600281101561019d57337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac5575b80610ab0575b6105f257610a75816110fa565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b6040516367ce775960e01b8152600490fd5b50610ac0610abc611c13565b1590565b610a68565b5030331415610a62565b60405190610adc82610206565b6005825264181719171960d91b6020830152565b3461019d57600036600319011261019d576103036102ef610acf565b90604060031983011261019d57600435610b258161033d565b91602435906001600160401b03821161019d5761040f91600401610359565b610b4d36610b0c565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c20575b6105f25780600080516020611fcf8339815191525460501c1691610ba681611eff565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c1c578385610bfa819593829463064acaab60e11b8452600484016117de565b03925af180156105ed57610c0c575080f35b806105e1610c19926101b8565b80f35b8380fd5b5030331415610b83565b3461019d57600036600319011261019d576020600080516020611fcf8339815191525460e01b6040519063ffffffff60e01b168152f35b3461019d57600036600319011261019d57610cb7610c7d610271565b610c85610acf565b90604051928392600f60f81b8452610ca960209360e08587015260e0860190610293565b908482036040860152610293565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf257505050500390f35b835185528695509381019392810192600101610ce3565b3461019d57600036600319011261019d576020600080516020611fcf8339815191525465ffffffffffff60405191831c168152f35b3461019d57600036600319011261019d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f8401121561019d578235916001600160401b03831161019d576020808501948460051b01011161019d57565b3461019d5760a036600319011261019d57610dcf60043561033d565b610dda60243561033d565b6001600160401b0360443581811161019d57610dfa903690600401610d83565b505060643581811161019d57610e14903690600401610d83565b505060843590811161019d57610e2e903690600401610359565b505060405163bc197c8160e01b8152602090f35b3461019d57600036600319011261019d57604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156105ed57610303916000916108f457506040519081529081906020820190565b610eca36610b0c565b600080516020611fcf83398151915254919290916001600160a01b03919060501c8216610f4c57610efa81611eff565b1691823b1561019d57610f2f926000928360405180968195829463064acaab60e11b84526020600485015260248401916117bd565b03925af180156105ed57610f3f57005b806105e161001b926101b8565b60405162dc149f60e41b8152600490fd5b602036600319011261019d57610f7161043f565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fe5575b6105f257600080516020611fcf83398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fa4565b3461019d5760a036600319011261019d5761100b60043561033d565b61101660243561033d565b6084356001600160401b03811161019d57611035903690600401610359565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109781356001600160e01b031916611049565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110eb575b6105f257818091368280378136915af43d82803e15610a9a573d90f35b506110f4611c13565b156110ce565b6002111561110457565b634e487b7160e01b600052602160045260246000fd5b805182101561112e5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806111d1575b6105f25780519060005b82811061118d57505050565b60008061119a838561111a565b5180516001600160a01b03166020916040838201519101519283519301915af13d6000803e156111cc57600101611181565b3d6000fd5b506111dd610abc611c13565b611177565b9060041161019d5790600490565b909291928360041161019d57831161019d57600401916003190190565b9060241161019d5760100190601490565b9060581161019d5760380190602090565b9060241161019d5760040190602090565b9060381161019d5760240190601490565b90600a1161019d5760040190600690565b9060101161019d57600a0190600690565b9093929384831161019d57841161019d578101920390565b6001600160e01b031990358181169392600481106112a857505050565b60040360031b82901b16169150565b91906101608382031261019d576112cc610251565b926112d68161034e565b8452602081013560208501526040810135916001600160401b039283811161019d5781611304918401610675565b6040860152606082013583811161019d5781611321918401610675565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e082013560e086015261010080830135908601526101208083013584811161019d5782611373918501610675565b90860152610140928383013590811161019d576113909201610675565b90830152565b9081602091031261019d575190565b606080825282516001600160a01b0316908201529193929160409161146b9060208101516080840152838101516113ea610160918260a08701526101c0860190610293565b9061145861140a606085015193605f1994858983030160c08a0152610293565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610293565b92015190848303016101a0850152610293565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b039392917f00000000000000000000000000000000000000000000000000000000000000008516330361169f576004948535928361014481013501918760248401930135946114e06114da87866111e2565b9061128b565b926001600160e01b031980851691821561167c576114ff9036906112b7565b94611519600080516020611fcf8339815191525460e01b90565b1616156115315760405163fc2f51c560e01b81528a90fd5b97989697600160e01b810361162b575090602095966115bb61158961157061156b6114da87606460009901350160248782013591016111e2565b611049565b6001810154909a9081906001600160a01b0316986111f0565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617995b8b61161d575b369161062f565b6101408501526115df604051998a9788968794633a871cdd60e01b865285016113a5565b0393165af19081156105ed57610690926000926115fd575b50611f4c565b61161691925060203d811161091b5761090d8183610221565b90386115f7565b348080808f335af1506115b4565b9095939190600160e11b0361166f576116656115bb946000936116606114da8a606460209c01350160248d82013591016111e2565b6117ef565b91999296916115ae565b5050505050505050600190565b9697505050505050506106909394508215611d47573434343486335af150611d47565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff1990358181169392601481106116d357505050565b60140360031b82901b16169150565b3590602081106116f0575090565b6000199060200360031b1b1690565b6001600160d01b0319903581811693926006811061171c57505050565b60060360031b82901b16169150565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b90602091808252806000848401376000828201840152601f01601f1916010190565b908060209392818452848401376000828201840152601f01601f1916010190565b9160206106909381815201916117bd565b91906117fb828261120d565b611804916116b1565b60601c93611812838361121e565b61181b916116e2565b605883016078820194858360580190611835918388611273565b61183e916116e2565b611848828761122f565b611851916116e2565b61185b8388611240565b611864916116b1565b60601c61187236878761062f565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641769381019384526001600160e01b03198e169181019190915260608101949094526001600160a01b0392909216608084015260a080840192909252908252906118e860c082610221565b5190206118f490611a47565b9084019660788801611907918489611273565b9061191192611e13565b61191b828761122f565b6001600160a01b03199161192f91906116e2565b1661193991611f4c565b9660788688010196820360771901956119528382611251565b61195b916116ff565b60d01c926119698183611262565b611972916116ff565b60d01c916119808282611240565b611989916116b1565b60601c916119969161120d565b61199f916116b1565b60601c916119ab610242565b65ffffffffffff909516855265ffffffffffff1660208501526001600160a01b031660408401526001600160a01b031660608301526119e990611049565b906119f39161172b565b6001600160a01b03871691823b1561019d57611a29926000928360405180968195829463064acaab60e11b8452600484016117de565b03925af180156105ed57611a3a5750565b806105e161024f926101b8565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611ad4575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611ab5565b90611b669291611e13565b65ffffffffffff808260a01c16908115600114611bd1575b428360d01c11611bc15742911610611bb4576001600160a01b0316611ba857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b905080611b7e565b9081602091031261019d5751801515810361019d5790565b6001600160a01b0390911681526040602082018190526106909291019061179b565b611c1d3633611e7b565b611d4257611c366000356001600160e01b031916611049565b6001810154611c55906001600160a01b03165b6001600160a01b031690565b906001600160a01b03821615908115611d06575b8115611cdb575b5015611c7c5750600090565b60206040518092639ea9bd5960e01b82528180611c9d363360048401611bf1565b03915afa9081156105ed57600091611cb3575090565b610690915060203d8111611cd4575b611ccc8183610221565b810190611bd9565b503d611cc2565b54611cf5915065ffffffffffff165b65ffffffffffff1690565b65ffffffffffff4291161138611c70565b905065ffffffffffff611d26611cea835465ffffffffffff9060301c1690565b168015159081611d38575b5090611c69565b9050421138611d31565b600190565b9091611d5336836112b7565b610140928381013590601e198136030182121561019d5701938435946001600160401b03861161019d5760200193853603851361019d57611d9d6115b487611de5986020986111f0565b908301526000611dc7611c49600080516020611fcf8339815191525460501c60018060a01b031690565b9260405196879586948593633a871cdd60e01b8552600485016113a5565b03925af19081156105ed57600091611dfb575090565b610690915060203d811161091b5761090d8183610221565b600080516020611fcf833981519152546040805163199ed7c960e11b8152600481019390935260248301529092602092849260501c6001600160a01b03169183918291611e65916044840191906117bd565b03915afa9081156105ed57600091611dfb575090565b600080516020611fcf8339815191525460408051639ea9bd5960e01b81526001600160a01b039384166004820152602481019190915292602092849260501c169082908190611c9d90604483019061179b565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b600080516020611fcf83398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611f67575050600190565b65ffffffffffff60a01b8181169265ffffffffffff60a01b1992831692811691908415611fc5575b81168015611fbe575b848110908518028085189414611fb6575b5081811190821802181790565b925038611fa9565b5080611f98565b93508093611f8f56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789"; + address constant EXPECTED_KERNEL_LITE_2_2_ADDRESS = 0xbEdb61Be086F3f15eE911Cc9AB3EEa945DEbFa96; + bytes constant KERNEL_LITE_2_2_CODE = hex"0000000000000000000000000000000000000000000000000000000000000000610160346200021357601f6200230b38819003918201601f19168301916001600160401b0383118484101762000218578084926040948552833981010312620002135780516001600160a01b039182821682036200021357602001519182168092036200021357306080524660a05260a06200007a6200022e565b600681526005602082016512d95c9b995b60d21b815260206200009c6200022e565b838152019264181719171960d91b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220916101009283526101209182527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b03198254161790556101409081527fdea7fea882fba743201b2aeb1babf326b8944488db560784858525d123ee7e976001808060a01b0319825416179055604051916120bc93846200024f853960805184611b7c015260a05184611b9f015260c05184611c11015260e05184611c3701525183611b5b0152518281816104fb015281816107ba015281816108c701528181610a5201528181610b7301528181610d1201528181610e780152818161101c01528181611114015281816111c40152818161126d01526115c2015251818181610e160152610ed90152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620002185760405256fe6080604052600436101561001d575b366111a75761001b611e6b565b005b60003560e01c806306fdde03146101ad5780630b3dc354146101a8578063150b7a02146101a35780631626ba7e1461019e57806329f8b17414610199578063333daf921461019457806334fcd5be1461018f5780633659cfe61461018a5780633a871cdd146101855780633e1b08121461018057806351166ba01461017b578063519454471461017657806354fd4d501461017157806355b14f501461016c57806357b750471461016757806384b0196e1461016257806388e7fd061461015d578063b0d691fe14610158578063bc197c8114610153578063cdaea3ed1461014e578063d087d28814610149578063d1f5789414610144578063d54162211461013f578063f23a6e611461013a5763f2fde38b0361000e576110f1565b611097565b611005565b610ec4565b610e45565b610e00565b610d71565b610cfc565b610cc7565b610c1f565b610be8565b610b64565b610b10565b610a0b565b610942565b61087e565b61083c565b610796565b6106b3565b61062e565b610486565b610433565b6103a6565b610327565b6102f3565b60009103126101bd57565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101eb57604052565b6101c2565b606081019081106001600160401b038211176101eb57604052565b608081019081106001600160401b038211176101eb57604052565b604081019081106001600160401b038211176101eb57604052565b90601f801991011681019081106001600160401b038211176101eb57604052565b6040519061026f8261020b565b565b6040519061016082018281106001600160401b038211176101eb57604052565b6040519061029e82610226565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b8481106102df575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016102be565b346101bd5760003660031901126101bd5761032361030f610291565b6040519182916020835260208301906102b3565b0390f35b346101bd5760003660031901126101bd57602060008051602061207c8339815191525460501c6040519060018060a01b03168152f35b6001600160a01b038116036101bd57565b359061026f8261035d565b9181601f840112156101bd578235916001600160401b0383116101bd57602083818601950101116101bd57565b346101bd5760803660031901126101bd576103c260043561035d565b6103cd60243561035d565b6064356001600160401b0381116101bd576103ec903690600401610379565b5050604051630a85bd0160e11b8152602090f35b9060406003198301126101bd5760043591602435906001600160401b0382116101bd5761042f91600401610379565b9091565b346101bd57602061044c61044636610400565b91611c6d565b6040516001600160e01b03199091168152f35b600435906001600160e01b0319821682036101bd57565b65ffffffffffff8116036101bd57565b60c03660031901126101bd5761049a61045f565b602435906104a78261035d565b604435906104b48261035d565b6064356104c081610476565b608435936104cd85610476565b60a4356001600160401b0381116101bd576104ec903690600401610379565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610624575b6106125784926105596105859261054a61053c610262565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105808761116f565b611869565b1693843b156101bd576040519063064acaab60e11b825281806105af6000998a94600484016118d9565b038183895af1801561060d576105f4575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b80610601610607926101d8565b806101b2565b386105c0565b6115a9565b604051637046c88d60e01b8152600490fd5b5030331415610524565b346101bd57602061064761064136610400565b91611f94565b604051908152f35b9291926001600160401b0382116101eb5760405191610678601f8201601f191660200184610241565b8294818452818301116101bd578281602093846000960137010152565b9080601f830112156101bd578160206106b09335910161064f565b90565b6020806003193601126101bd576001600160401b036004358181116101bd57366023820112156101bd578060040135918083116101eb578260051b9060409081519461070187850187610241565b85528585019160248094860101943686116101bd57848101935b86851061072b5761001b8861126a565b84358481116101bd578201606060231982360301126101bd57835191610750836101f0565b8782013561075d8161035d565b835260448201358b8401526064820135928684116101bd576107878c94938a869536920101610695565b8682015281520194019361071b565b60203660031901126101bd576004356107ae8161035d565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610832575b61061257807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b50303314156107e3565b6003196060368201126101bd57600435906001600160401b0382116101bd576101609082360301126101bd5761064760209160443590602435906004016115b5565b346101bd5760203660031901126101bd576004356001600160c01b038116908190036101bd57604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060d5761032391600091610914575b506040519081529081906020820190565b610935915060203d811161093b575b61092d8183610241565b8101906114ca565b38610903565b503d610923565b346101bd5760203660031901126101bd5761032361098761096161045f565b600060606040516109718161020b565b828152826020820152826040820152015261116f565b604051906109948261020b565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b60803660031901126101bd57600435610a238161035d565b6044356001600160401b0381116101bd57610a42903690600401610695565b9060643560028110156101bd57337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ae5575b80610ad0575b61061257610a9581611220565b610abe576000828193926020839451920190602435905af13d82803e15610aba573d90f35b3d90fd5b6040516367ce775960e01b8152600490fd5b50610ae0610adc611d3c565b1590565b610a88565b5030331415610a82565b60405190610afc82610226565b6005825264181719171960d91b6020830152565b346101bd5760003660031901126101bd5761032361030f610aef565b9060406003198301126101bd57600435610b458161035d565b91602435906001600160401b0382116101bd5761042f91600401610379565b610b6d36610b2c565b505050337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610bde575b6106125760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b5c1b195b595b9d1959608a1b6044820152606490fd5b5030331415610ba3565b346101bd5760003660031901126101bd57602060008051602061207c8339815191525460e01b6040519063ffffffff60e01b168152f35b346101bd5760003660031901126101bd57610c75610c3b610291565b610c43610aef565b90604051928392600f60f81b8452610c6760209360e08587015260e08601906102b3565b9084820360408601526102b3565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cb057505050500390f35b835185528695509381019392810192600101610ca1565b346101bd5760003660031901126101bd57602060008051602061207c8339815191525465ffffffffffff60405191831c168152f35b346101bd5760003660031901126101bd576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f840112156101bd578235916001600160401b0383116101bd576020808501948460051b0101116101bd57565b346101bd5760a03660031901126101bd57610d8d60043561035d565b610d9860243561035d565b6001600160401b036044358181116101bd57610db8903690600401610d41565b50506064358181116101bd57610dd2903690600401610d41565b50506084359081116101bd57610dec903690600401610379565b505060405163bc197c8160e01b8152602090f35b346101bd5760003660031901126101bd576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101bd5760003660031901126101bd57604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060d576103239160009161091457506040519081529081906020820190565b610ecd36610b2c565b916001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821690821603610fb55760008051602061209c8339815191525416610f6457610f30610f2a61001b93610f3693611308565b906117ef565b60601c90565b60008051602061209c83398151915280546001600160a01b0319166001600160a01b03909216919091179055565b60405162461bcd60e51b8152602060048201526024808201527f4b65726e656c4c69746545434453413a20616c726561647920696e697469616c6044820152631a5e995960e21b6064820152608490fd5b60405162461bcd60e51b815260206004820152602260248201527f4b65726e656c4c69746545434453413a20696e76616c69642076616c6964617460448201526137b960f11b6064820152608490fd5b60203660031901126101bd5761101961045f565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061108d575b6106125760008051602061207c83398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b503033141561104c565b346101bd5760a03660031901126101bd576110b360043561035d565b6110be60243561035d565b6084356001600160401b0381116101bd576110dd903690600401610379565b505060405163f23a6e6160e01b8152602090f35b60203660031901126101bd576004356111098161035d565b6001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580611165575b6106125760008051602061209c83398151915280546001600160a01b03191691909216179055005b503033141561113d565b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006111bd81356001600160e01b03191661116f565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611211575b61061257818091368280378136915af43d82803e15610aba573d90f35b5061121a611d3c565b156111f4565b6002111561122a57565b634e487b7160e01b600052602160045260246000fd5b80518210156112545760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806112f7575b6106125780519060005b8281106112b357505050565b6000806112c08385611240565b5180516001600160a01b03166020916040838201519101519283519301915af13d6000803e156112f2576001016112a7565b3d6000fd5b50611303610adc611d3c565b61129d565b906014116101bd5790601490565b906004116101bd5790600490565b90929192836004116101bd5783116101bd57600401916003190190565b906024116101bd5760100190601490565b906058116101bd5760380190602090565b906024116101bd5760040190602090565b906038116101bd5760240190601490565b90600a116101bd5760040190600690565b906010116101bd57600a0190600690565b909392938483116101bd5784116101bd578101920390565b6001600160e01b031990358181169392600481106113dc57505050565b60040360031b82901b16169150565b9190610160838203126101bd57611400610271565b9261140a8161036e565b8452602081013560208501526040810135916001600160401b03928381116101bd5781611438918401610695565b604086015260608201358381116101bd5781611455918401610695565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e082013560e08601526101008083013590860152610120808301358481116101bd57826114a7918501610695565b9086015261014092838301359081116101bd576114c49201610695565b90830152565b908160209103126101bd575190565b606080825282516001600160a01b0316908201529193929160409161159f90602081015160808401528381015161151e610160918260a08701526101c08601906102b3565b9061158c61153e606085015193605f1994858983030160c08a01526102b3565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b01528701519089015285015184888303016101808901526102b3565b92015190848303016101a08501526102b3565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b039392917f0000000000000000000000000000000000000000000000000000000000000000851633036117dd5760049485359283610144810135019187602484019301359461161461160e8786611316565b906113bf565b926001600160e01b03198085169182156117b0576116339036906113eb565b9461164d60008051602061207c8339815191525460e01b90565b1616156116655760405163fc2f51c560e01b81528a90fd5b97989697600160e01b810361175f575090602095966116ef6116bd6116a461169f61160e8760646000990135016024878201359101611316565b61116f565b6001810154909a9081906001600160a01b031698611324565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617995b8b611751575b369161064f565b610140850152611713604051998a9788968794633a871cdd60e01b865285016114d9565b0393165af190811561060d576106b092600092611731575b50611ff9565b61174a91925060203d811161093b5761092d8183610241565b903861172b565b348080808f335af1506116e8565b9095939190600160e11b036117a3576117996116ef9460009361179461160e8a606460209c01350160248d8201359101611316565b611901565b91999296916116e2565b5050505050505050600190565b9750505050505050916106b0939450806117cb575b50611e9c565b3490349034903490335af150386117c5565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061181157505050565b60140360031b82901b16169150565b35906020811061182e575090565b6000199060200360031b1b1690565b6001600160d01b0319903581811693926006811061185a57505050565b60060360031b82901b16169150565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b90918060409360208452816020850152848401376000828201840152601f01601f1916010190565b919061190d8282611341565b611916916117ef565b60601c936119248383611352565b61192d91611820565b6058830160788201948583605801906119479183886113a7565b61195091611820565b61195a8287611363565b61196391611820565b61196d8388611374565b611976916117ef565b60601c61198436878761064f565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641769381019384526001600160e01b03198e169181019190915260608101949094526001600160a01b0392909216608084015260a080840192909252908252906119fa60c082610241565b519020611a0690611b59565b9084019660788801611a199184896113a7565b90611a2392611f94565b611a2d8287611363565b6001600160a01b031991611a419190611820565b16611a4b91611ff9565b966078868801019682036077190195611a648382611385565b611a6d9161183d565b60d01c92611a7b8183611396565b611a849161183d565b60d01c91611a928282611374565b611a9b916117ef565b60601c91611aa891611341565b611ab1916117ef565b60601c91611abd610262565b65ffffffffffff909516855265ffffffffffff1660208501526001600160a01b031660408401526001600160a01b03166060830152611afb9061116f565b90611b0591611869565b6001600160a01b03871691823b156101bd57611b3b926000928360405180968195829463064acaab60e11b8452600484016118d9565b03925af1801561060d57611b4c5750565b8061060161026f926101d8565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611be6575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611bc7565b90611c789291611f94565b65ffffffffffff808260a01c16908115600114611ce3575b428360d01c11611cd35742911610611cc6576001600160a01b0316611cba57630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b905080611c90565b908160209103126101bd575180151581036101bd5790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b60008051602061209c833981519152546001600160a01b039081163314611e6557611d726000356001600160e01b03191661116f565b60018101546001600160a01b031691821615908115611e29575b8115611dfe575b5015611d9f5750600090565b60206040518092639ea9bd5960e01b82528180611dc0363360048401611d03565b03915afa90811561060d57600091611dd6575090565b6106b0915060203d8111611df7575b611def8183610241565b810190611ceb565b503d611de5565b54611e18915065ffffffffffff165b65ffffffffffff1690565b65ffffffffffff4291161138611d93565b905065ffffffffffff611e49611e0d835465ffffffffffff9060301c1690565b168015159081611e5b575b5090611d8c565b9050421138611e54565b50600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b90611ecc906020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042090565b9061014081013590601e19813603018212156101bd5701908135916001600160401b0383116101bd576020019180360383136101bd576116e881611f1392611f1995611324565b90611f45565b60008051602061209c833981519152546001600160a01b03908116911603611f4057600090565b600190565b6001608060006041602094969596604080519880519285526060810151851a88528781015182520151606052145afa51913d15611f86576000606052604052565b638baa579f6000526004601cfd5b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c600420611fcd9291611f139192369161064f565b60008051602061209c833981519152546001600160a01b03918216911614611ff457600190565b600090565b8082186001600160a01b031615600114612014575050600190565b65ffffffffffff60a01b8181169265ffffffffffff60a01b1992831692811691908415612072575b8116801561206b575b848110908518028085189414612063575b5081811190821802181790565b925038612056565b5080612045565b9350809361203c56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9dea7fea882fba743201b2aeb1babf326b8944488db560784858525d123ee7e970000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789000000000000000000000000d9ab5096a832b9ce79914329daee236f8eea0390"; + function deploy() internal returns(address, address) { + DeterministicDeploy.checkDeploy("Kernel 2.2", EXPECTED_KERNEL_2_2_ADDRESS, KERNEL_2_2_CODE); + DeterministicDeploy.checkDeploy("Kernel lite 2.2", EXPECTED_KERNEL_LITE_2_2_ADDRESS, KERNEL_LITE_2_2_CODE); + return (EXPECTED_KERNEL_2_2_ADDRESS, EXPECTED_KERNEL_LITE_2_2_ADDRESS); + } +} diff --git a/scripts/deterministic/Kernel2_3.s.sol b/scripts/deterministic/Kernel2_3.s.sol new file mode 100644 index 00000000..b13588d9 --- /dev/null +++ b/scripts/deterministic/Kernel2_3.s.sol @@ -0,0 +1,17 @@ +pragma solidity ^0.8.0; + +import "./DeterministicDeploy.s.sol"; + +library Kernel_2_3_Deploy { + address constant EXPECTED_KERNEL_2_3_ADDRESS = 0xD3F582F6B4814E989Ee8E96bc3175320B5A540ab; + bytes constant KERNEL_2_3_CODE = hex"000000000000000000000000000000000000000000000000000000000000000061014034620001be57601f6200238b38819003918201601f19168301916001600160401b03831184841017620001c357808492602094604052833981010312620001be57516001600160a01b0381168103620001be57306080524660a05260a062000069620001d9565b600681526005602082016512d95c9b995b60d21b815260206200008b620001d9565b838152019264302e322e3360d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b0319825416179055604051906121919283620001fa843960805183611b42015260a05183611b65015260c05183611bd7015260e05183611bfd01525182611b21015251818181610506015281816107c5015281816108d201528181610a5d01528181610b8501528181610d7f01528181610de901528181610f4d0152818161104c015281816111760152818161121f01526115660152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001c35760405256fe6080604052600436101561001d575b366111595761001b612047565b005b60003560e01c806306fdde031461019d5780630b3dc35414610198578063150b7a02146101935780631626ba7e1461018e57806329f8b17414610189578063333daf921461018457806334fcd5be1461017f5780633659cfe61461017a5780633a871cdd146101755780633e1b08121461017057806351166ba01461016b578063519454471461016657806354fd4d501461016157806355b14f501461015c57806357b750471461015757806384b0196e1461015257806388e7fd061461014d578063b0d691fe14610148578063b68df16d14610143578063bc197c811461013e578063d087d28814610139578063d1f5789414610134578063d54162211461012f5763f23a6e610361000e576110c7565b611035565b610f99565b610f1a565b610e8b565b610dae565b610d69565b610d34565b610c8c565b610c55565b610b6f565b610b1b565b610a16565b61094d565b610889565b610847565b6107a1565b6106be565b610639565b610491565b61043e565b6103b1565b610332565b6102fe565b60009103126101ad57565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101db57604052565b6101b2565b606081019081106001600160401b038211176101db57604052565b608081019081106001600160401b038211176101db57604052565b604081019081106001600160401b038211176101db57604052565b60c081019081106001600160401b038211176101db57604052565b90601f801991011681019081106001600160401b038211176101db57604052565b6040519061027a826101fb565b565b6040519061016082018281106001600160401b038211176101db57604052565b604051906102a982610216565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b8481106102ea575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016102c9565b346101ad5760003660031901126101ad5761032e61031a61029c565b6040519182916020835260208301906102be565b0390f35b346101ad5760003660031901126101ad5760206000805160206121718339815191525460501c6040519060018060a01b03168152f35b6001600160a01b038116036101ad57565b359061027a82610368565b9181601f840112156101ad578235916001600160401b0383116101ad57602083818601950101116101ad57565b346101ad5760803660031901126101ad576103cd600435610368565b6103d8602435610368565b6064356001600160401b0381116101ad576103f7903690600401610384565b5050604051630a85bd0160e11b8152602090f35b9060406003198301126101ad5760043591602435906001600160401b0382116101ad5761043a91600401610384565b9091565b346101ad5760206104576104513661040b565b91611c33565b6040516001600160e01b03199091168152f35b600435906001600160e01b0319821682036101ad57565b65ffffffffffff8116036101ad57565b60c03660031901126101ad576104a561046a565b602435906104b282610368565b604435906104bf82610368565b6064356104cb81610481565b608435936104d885610481565b60a4356001600160401b0381116101ad576104f7903690600401610384565b9590946001600160a01b0393337f0000000000000000000000000000000000000000000000000000000000000000861614158061062f575b61061d5784926105646105909261055561054761026d565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261058b87611121565b611803565b1693843b156101ad576040519063064acaab60e11b825281806105ba6000998a94600484016118b6565b038183895af18015610618576105ff575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060c610612926101c8565b806101a2565b386105cb565b61154d565b604051637046c88d60e01b8152600490fd5b503033141561052f565b346101ad57602061065261064c3661040b565b91611f8c565b604051908152f35b9291926001600160401b0382116101db5760405191610683601f8201601f19166020018461024c565b8294818452818301116101ad578281602093846000960137010152565b9080601f830112156101ad578160206106bb9335910161065a565b90565b6020806003193601126101ad576001600160401b036004358181116101ad57366023820112156101ad578060040135918083116101db578260051b9060409081519461070c8785018761024c565b85528585019160248094860101943686116101ad57848101935b8685106107365761001b8861121c565b84358481116101ad578201606060231982360301126101ad5783519161075b836101e0565b8782013561076881610368565b835260448201358b8401526064820135928684116101ad576107928c94938a8695369201016106a0565b86820152815201940193610726565b60203660031901126101ad576004356107b981610368565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061083d575b61061d57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b50303314156107ee565b6003196060368201126101ad57600435906001600160401b0382116101ad576101609082360301126101ad576106526020916044359060243590600401611559565b346101ad5760203660031901126101ad576004356001600160c01b038116908190036101ad57604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156106185761032e9160009161091f575b506040519081529081906020820190565b610940915060203d8111610946575b610938818361024c565b81019061146e565b3861090e565b503d61092e565b346101ad5760203660031901126101ad5761032e61099261096c61046a565b6000606060405161097c816101fb565b8281528260208201528260408201520152611121565b6040519061099f826101fb565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b60803660031901126101ad57600435610a2e81610368565b6044356001600160401b0381116101ad57610a4d9036906004016106a0565b9060643560028110156101ad57337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610af0575b80610adb575b61061d57610aa0816111d2565b610ac9576000828193926020839451920190602435905af13d82803e15610ac5573d90f35b3d90fd5b6040516367ce775960e01b8152600490fd5b50610aeb610ae7611d8c565b1590565b610a93565b5030331415610a8d565b60405190610b0782610216565b6005825264302e322e3360d81b6020830152565b346101ad5760003660031901126101ad5761032e61031a610afa565b9060406003198301126101ad57600435610b5081610368565b91602435906001600160401b0382116101ad5761043a91600401610384565b610b7836610b37565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c4b575b61061d57806000805160206121718339815191525460501c1691610bd181612078565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c47578385610c25819593829463064acaab60e11b8452600484016118b6565b03925af1801561061857610c37575080f35b8061060c610c44926101c8565b80f35b8380fd5b5030331415610bae565b346101ad5760003660031901126101ad5760206000805160206121718339815191525460e01b6040519063ffffffff60e01b168152f35b346101ad5760003660031901126101ad57610ce2610ca861029c565b610cb0610afa565b90604051928392600f60f81b8452610cd460209360e08587015260e08601906102be565b9084820360408601526102be565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d1d57505050500390f35b835185528695509381019392810192600101610d0e565b346101ad5760003660031901126101ad5760206000805160206121718339815191525465ffffffffffff60405191831c168152f35b346101ad5760003660031901126101ad576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b60403660031901126101ad57600435610dc681610368565b6024356001600160401b0381116101ad57610de59036906004016106a0565b90337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610e51575b80610e40575b61061d5760008281939260208394519201905af43d82803e15610ac5573d90f35b50610e4c610ae7611d8c565b610e1f565b5030331415610e19565b9181601f840112156101ad578235916001600160401b0383116101ad576020808501948460051b0101116101ad57565b346101ad5760a03660031901126101ad57610ea7600435610368565b610eb2602435610368565b6001600160401b036044358181116101ad57610ed2903690600401610e5b565b50506064358181116101ad57610eec903690600401610e5b565b50506084359081116101ad57610f06903690600401610384565b505060405163bc197c8160e01b8152602090f35b346101ad5760003660031901126101ad57604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156106185761032e9160009161091f57506040519081529081906020820190565b610fa236610b37565b60008051602061217183398151915254919290916001600160a01b03919060501c821661102457610fd281612078565b1691823b156101ad57611007926000928360405180968195829463064acaab60e11b8452602060048501526024840191611895565b03925af180156106185761101757005b8061060c61001b926101c8565b60405162dc149f60e41b8152600490fd5b60203660031901126101ad5761104961046a565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110bd575b61061d5760008051602061217183398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b503033141561107c565b346101ad5760a03660031901126101ad576110e3600435610368565b6110ee602435610368565b6084356001600160401b0381116101ad5761110d903690600401610384565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061116f81356001600160e01b031916611121565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806111c3575b61061d57818091368280378136915af43d82803e15610ac5573d90f35b506111cc611d8c565b156111a6565b600211156111dc57565b634e487b7160e01b600052602160045260246000fd5b80518210156112065760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806112a9575b61061d5780519060005b82811061126557505050565b60008061127283856111f2565b5180516001600160a01b03166020916040838201519101519283519301915af13d6000803e156112a457600101611259565b3d6000fd5b506112b5610ae7611d8c565b61124f565b906004116101ad5790600490565b90929192836004116101ad5783116101ad57600401916003190190565b906024116101ad5760100190601490565b906058116101ad5760380190602090565b906024116101ad5760040190602090565b906038116101ad5760240190601490565b90600a116101ad5760040190600690565b906010116101ad57600a0190600690565b909392938483116101ad5784116101ad578101920390565b6001600160e01b0319903581811693926004811061138057505050565b60040360031b82901b16169150565b9190610160838203126101ad576113a461027c565b926113ae81610379565b8452602081013560208501526040810135916001600160401b03928381116101ad57816113dc9184016106a0565b604086015260608201358381116101ad57816113f99184016106a0565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e082013560e08601526101008083013590860152610120808301358481116101ad578261144b9185016106a0565b9086015261014092838301359081116101ad5761146892016106a0565b90830152565b908160209103126101ad575190565b606080825282516001600160a01b031690820152919392916040916115439060208101516080840152838101516114c2610160918260a08701526101c08601906102be565b906115306114e2606085015193605f1994858983030160c08a01526102be565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b01528701519089015285015184888303016101808901526102be565b92015190848303016101a08501526102be565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b039392917f000000000000000000000000000000000000000000000000000000000000000085163303611777576004948535928361014481013501918760248401930135946115b86115b287866112ba565b90611363565b926001600160e01b0319808516918215611754576115d790369061138f565b946115f16000805160206121718339815191525460e01b90565b1616156116095760405163fc2f51c560e01b81528a90fd5b97989697600160e01b8103611703575090602095966116936116616116486116436115b287606460009901350160248782013591016112ba565b611121565b6001810154909a9081906001600160a01b0316986112c8565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617995b8b6116f5575b369161065a565b6101408501526116b7604051998a9788968794633a871cdd60e01b8652850161147d565b0393165af1908115610618576106bb926000926116d5575b506120ee565b6116ee91925060203d811161094657610938818361024c565b90386116cf565b348080808f335af15061168c565b9095939190600160e11b036117475761173d611693946000936117386115b28a606460209c01350160248d82013591016112ba565b6118c7565b9199929691611686565b5050505050505050600190565b9697505050505050506106bb9394508215611ec0573434343486335af150611ec0565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff1990358181169392601481106117ab57505050565b60140360031b82901b16169150565b3590602081106117c8575090565b6000199060200360031b1b1690565b6001600160d01b031990358181169392600681106117f457505050565b60060360031b82901b16169150565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b90602091808252806000848401376000828201840152601f01601f1916010190565b908060209392818452848401376000828201840152601f01601f1916010190565b9160206106bb938181520191611895565b91906118d382826112e5565b6118dc91611789565b60601c936118ea83836112f6565b6118f3916117ba565b60588301607882019485836058019061190d91838861134b565b611916916117ba565b6119208287611307565b611929916117ba565b6119338388611318565b61193c91611789565b60601c61194a36878761065a565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641769381019384526001600160e01b03198e169181019190915260608101949094526001600160a01b0392909216608084015260a080840192909252908252906119c060c08261024c565b5190206119cc90611b1f565b90840196607888016119df91848961134b565b906119e992611f8c565b6119f38287611307565b6001600160a01b031991611a0791906117ba565b16611a11916120ee565b966078868801019682036077190195611a2a8382611329565b611a33916117d7565b60d01c92611a41818361133a565b611a4a916117d7565b60d01c91611a588282611318565b611a6191611789565b60601c91611a6e916112e5565b611a7791611789565b60601c91611a8361026d565b65ffffffffffff909516855265ffffffffffff1660208501526001600160a01b031660408401526001600160a01b03166060830152611ac190611121565b90611acb91611803565b6001600160a01b03871691823b156101ad57611b01926000928360405180968195829463064acaab60e11b8452600484016118b6565b03925af1801561061857611b125750565b8061060c61027a926101c8565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611bac575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611b8d565b91611cf291611cf793611cdc611cea611c4a61029c565b611c52610afa565b906020815191012090602081519101206040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152611cb181610231565b51902092604051928391602083019586909160429261190160f01b8352600283015260228201520190565b03601f19810183528261024c565b519020611f8c565b6120c5565b9065ffffffffffff928342911611159283611d44575b505081611d32575b5015611d2657630b135d3f60e11b90565b6001600160e01b031990565b6001600160a01b031615905038611d15565b429116101591503880611d0d565b908160209103126101ad575180151581036101ad5790565b6001600160a01b0390911681526040602082018190526106bb92910190611873565b611d963633611ff4565b611ebb57611daf6000356001600160e01b031916611121565b6001810154611dce906001600160a01b03165b6001600160a01b031690565b906001600160a01b03821615908115611e7f575b8115611e54575b5015611df55750600090565b60206040518092639ea9bd5960e01b82528180611e16363360048401611d6a565b03915afa90811561061857600091611e2c575090565b6106bb915060203d8111611e4d575b611e45818361024c565b810190611d52565b503d611e3b565b54611e6e915065ffffffffffff165b65ffffffffffff1690565b65ffffffffffff4291161138611de9565b905065ffffffffffff611e9f611e63835465ffffffffffff9060301c1690565b168015159081611eb1575b5090611de2565b9050421138611eaa565b600190565b9091611ecc368361138f565b610140928381013590601e19813603018212156101ad5701938435946001600160401b0386116101ad576020019385360385136101ad57611f1661168c87611f5e986020986112c8565b908301526000611f40611dc26000805160206121718339815191525460501c60018060a01b031690565b9260405196879586948593633a871cdd60e01b85526004850161147d565b03925af190811561061857600091611f74575090565b6106bb915060203d811161094657610938818361024c565b600080516020612171833981519152546040805163199ed7c960e11b8152600481019390935260248301529092602092849260501c6001600160a01b03169183918291611fde91604484019190611895565b03915afa90811561061857600091611f74575090565b6000805160206121718339815191525460408051639ea9bd5960e01b81526001600160a01b039384166004820152602481019190915292602092849260501c169082908190611e16906044830190611873565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b60008051602061217183398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c169283156001146120e6575b5060d01c92565b9250386120df565b8082186001600160a01b031615600114612109575050600190565b65ffffffffffff60a01b8181169265ffffffffffff60a01b1992831692811691908415612167575b81168015612160575b848110908518028085189414612158575b5081811190821802181790565b92503861214b565b508061213a565b9350809361213156fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789"; + + address constant EXPECTED_KERNEL_LITE_2_3_ADDRESS = 0x482EC42E88a781485E1B6A4f07a0C5479d183291; + bytes constant KERNEL_LITE_2_3_CODE = hex"0000000000000000000000000000000000000000000000000000000000000000610160346200021a57601f620024b438819003918201601f19168301916001600160401b038311848410176200021f5780849260409485528339810103126200021a5780516001600160a01b039182821682036200021a57602001519182168092036200021a57306080524660a05260a06200007a62000235565b600681526005602082016512d95c9b995b60d21b815260206200009c62000235565b838152019264302e322e3360d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220916101009283526101209182527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b03198254161790556101409081527fdea7fea882fba743201b2aeb1babf326b8944488db560784858525d123ee7e976001808060a01b03198254161790556040519161225e938462000256853960805184611c54015260a05184611c77015260c05184611ce9015260e05184611d0f01525183611c33015251828181610526015281816107e5015281816108f201528181610a7d01528181610b9e01528181610d3d01528181610da701528181610f50015281816110f4015281816111ec0152818161129c01528181611345015261169a015251818181610eee0152610fb10152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b038111838210176200021f5760405256fe6080604052600436101561001d575b3661127f5761001b611fe4565b005b60003560e01c806306fdde03146101bd5780630b3dc354146101b8578063150b7a02146101b35780631626ba7e146101ae57806329f8b174146101a9578063333daf92146101a457806334fcd5be1461019f5780633659cfe61461019a5780633a871cdd146101955780633e1b08121461019057806351166ba01461018b578063519454471461018657806354fd4d501461018157806355b14f501461017c57806357b750471461017757806384b0196e1461017257806388e7fd061461016d578063b0d691fe14610168578063b68df16d14610163578063bc197c811461015e578063cdaea3ed14610159578063d087d28814610154578063d1f578941461014f578063d54162211461014a578063f23a6e61146101455763f2fde38b0361000e576111c9565b61116f565b6110dd565b610f9c565b610f1d565b610ed8565b610e49565b610d6c565b610d27565b610cf2565b610c4a565b610c13565b610b8f565b610b3b565b610a36565b61096d565b6108a9565b610867565b6107c1565b6106de565b610659565b6104b1565b61045e565b6103d1565b610352565b61031e565b60009103126101cd57565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101fb57604052565b6101d2565b606081019081106001600160401b038211176101fb57604052565b608081019081106001600160401b038211176101fb57604052565b604081019081106001600160401b038211176101fb57604052565b60c081019081106001600160401b038211176101fb57604052565b90601f801991011681019081106001600160401b038211176101fb57604052565b6040519061029a8261021b565b565b6040519061016082018281106001600160401b038211176101fb57604052565b604051906102c982610236565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061030a575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016102e9565b346101cd5760003660031901126101cd5761034e61033a6102bc565b6040519182916020835260208301906102de565b0390f35b346101cd5760003660031901126101cd57602060008051602061221e8339815191525460501c6040519060018060a01b03168152f35b6001600160a01b038116036101cd57565b359061029a82610388565b9181601f840112156101cd578235916001600160401b0383116101cd57602083818601950101116101cd57565b346101cd5760803660031901126101cd576103ed600435610388565b6103f8602435610388565b6064356001600160401b0381116101cd576104179036906004016103a4565b5050604051630a85bd0160e11b8152602090f35b9060406003198301126101cd5760043591602435906001600160401b0382116101cd5761045a916004016103a4565b9091565b346101cd5760206104776104713661042b565b91611d45565b6040516001600160e01b03199091168152f35b600435906001600160e01b0319821682036101cd57565b65ffffffffffff8116036101cd57565b60c03660031901126101cd576104c561048a565b602435906104d282610388565b604435906104df82610388565b6064356104eb816104a1565b608435936104f8856104a1565b60a4356001600160401b0381116101cd576105179036906004016103a4565b9590946001600160a01b0393337f0000000000000000000000000000000000000000000000000000000000000000861614158061064f575b61063d5784926105846105b09261057561056761028d565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105ab87611247565b611941565b1693843b156101cd576040519063064acaab60e11b825281806105da6000998a94600484016119b1565b038183895af180156106385761061f575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061062c610632926101e8565b806101c2565b386105eb565b611681565b604051637046c88d60e01b8152600490fd5b503033141561054f565b346101cd57602061067261066c3661042b565b91612136565b604051908152f35b9291926001600160401b0382116101fb57604051916106a3601f8201601f19166020018461026c565b8294818452818301116101cd578281602093846000960137010152565b9080601f830112156101cd578160206106db9335910161067a565b90565b6020806003193601126101cd576001600160401b036004358181116101cd57366023820112156101cd578060040135918083116101fb578260051b9060409081519461072c8785018761026c565b85528585019160248094860101943686116101cd57848101935b8685106107565761001b88611342565b84358481116101cd578201606060231982360301126101cd5783519161077b83610200565b8782013561078881610388565b835260448201358b8401526064820135928684116101cd576107b28c94938a8695369201016106c0565b86820152815201940193610746565b60203660031901126101cd576004356107d981610388565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061085d575b61063d57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561080e565b6003196060368201126101cd57600435906001600160401b0382116101cd576101609082360301126101cd57610672602091604435906024359060040161168d565b346101cd5760203660031901126101cd576004356001600160c01b038116908190036101cd57604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156106385761034e9160009161093f575b506040519081529081906020820190565b610960915060203d8111610966575b610958818361026c565b8101906115a2565b3861092e565b503d61094e565b346101cd5760203660031901126101cd5761034e6109b261098c61048a565b6000606060405161099c8161021b565b8281528260208201528260408201520152611247565b604051906109bf8261021b565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b60803660031901126101cd57600435610a4e81610388565b6044356001600160401b0381116101cd57610a6d9036906004016106c0565b9060643560028110156101cd57337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610b10575b80610afb575b61063d57610ac0816112f8565b610ae9576000828193926020839451920190602435905af13d82803e15610ae5573d90f35b3d90fd5b6040516367ce775960e01b8152600490fd5b50610b0b610b07611eb5565b1590565b610ab3565b5030331415610aad565b60405190610b2782610236565b6005825264302e322e3360d81b6020830152565b346101cd5760003660031901126101cd5761034e61033a610b1a565b9060406003198301126101cd57600435610b7081610388565b91602435906001600160401b0382116101cd5761045a916004016103a4565b610b9836610b57565b505050337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610c09575b61063d5760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b5c1b195b595b9d1959608a1b6044820152606490fd5b5030331415610bce565b346101cd5760003660031901126101cd57602060008051602061221e8339815191525460e01b6040519063ffffffff60e01b168152f35b346101cd5760003660031901126101cd57610ca0610c666102bc565b610c6e610b1a565b90604051928392600f60f81b8452610c9260209360e08587015260e08601906102de565b9084820360408601526102de565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cdb57505050500390f35b835185528695509381019392810192600101610ccc565b346101cd5760003660031901126101cd57602060008051602061221e8339815191525465ffffffffffff60405191831c168152f35b346101cd5760003660031901126101cd576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b60403660031901126101cd57600435610d8481610388565b6024356001600160401b0381116101cd57610da39036906004016106c0565b90337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610e0f575b80610dfe575b61063d5760008281939260208394519201905af43d82803e15610ae5573d90f35b50610e0a610b07611eb5565b610ddd565b5030331415610dd7565b9181601f840112156101cd578235916001600160401b0383116101cd576020808501948460051b0101116101cd57565b346101cd5760a03660031901126101cd57610e65600435610388565b610e70602435610388565b6001600160401b036044358181116101cd57610e90903690600401610e19565b50506064358181116101cd57610eaa903690600401610e19565b50506084359081116101cd57610ec49036906004016103a4565b505060405163bc197c8160e01b8152602090f35b346101cd5760003660031901126101cd576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101cd5760003660031901126101cd57604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156106385761034e9160009161093f57506040519081529081906020820190565b610fa536610b57565b916001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082169082160361108d5760008051602061223e833981519152541661103c5761100861100261001b9361100e936113e0565b906118c7565b60601c90565b60008051602061223e83398151915280546001600160a01b0319166001600160a01b03909216919091179055565b60405162461bcd60e51b8152602060048201526024808201527f4b65726e656c4c69746545434453413a20616c726561647920696e697469616c6044820152631a5e995960e21b6064820152608490fd5b60405162461bcd60e51b815260206004820152602260248201527f4b65726e656c4c69746545434453413a20696e76616c69642076616c6964617460448201526137b960f11b6064820152608490fd5b60203660031901126101cd576110f161048a565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611165575b61063d5760008051602061221e83398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415611124565b346101cd5760a03660031901126101cd5761118b600435610388565b611196602435610388565b6084356001600160401b0381116101cd576111b59036906004016103a4565b505060405163f23a6e6160e01b8152602090f35b60203660031901126101cd576004356111e181610388565b6001600160a01b03337f0000000000000000000000000000000000000000000000000000000000000000821614158061123d575b61063d5760008051602061223e83398151915280546001600160a01b03191691909216179055005b5030331415611215565b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061129581356001600160e01b031916611247565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806112e9575b61063d57818091368280378136915af43d82803e15610ae5573d90f35b506112f2611eb5565b156112cc565b6002111561130257565b634e487b7160e01b600052602160045260246000fd5b805182101561132c5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806113cf575b61063d5780519060005b82811061138b57505050565b6000806113988385611318565b5180516001600160a01b03166020916040838201519101519283519301915af13d6000803e156113ca5760010161137f565b3d6000fd5b506113db610b07611eb5565b611375565b906014116101cd5790601490565b906004116101cd5790600490565b90929192836004116101cd5783116101cd57600401916003190190565b906024116101cd5760100190601490565b906058116101cd5760380190602090565b906024116101cd5760040190602090565b906038116101cd5760240190601490565b90600a116101cd5760040190600690565b906010116101cd57600a0190600690565b909392938483116101cd5784116101cd578101920390565b6001600160e01b031990358181169392600481106114b457505050565b60040360031b82901b16169150565b9190610160838203126101cd576114d861029c565b926114e281610399565b8452602081013560208501526040810135916001600160401b03928381116101cd57816115109184016106c0565b604086015260608201358381116101cd578161152d9184016106c0565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e082013560e08601526101008083013590860152610120808301358481116101cd578261157f9185016106c0565b9086015261014092838301359081116101cd5761159c92016106c0565b90830152565b908160209103126101cd575190565b606080825282516001600160a01b031690820152919392916040916116779060208101516080840152838101516115f6610160918260a08701526101c08601906102de565b90611664611616606085015193605f1994858983030160c08a01526102de565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b01528701519089015285015184888303016101808901526102de565b92015190848303016101a08501526102de565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b039392917f0000000000000000000000000000000000000000000000000000000000000000851633036118b5576004948535928361014481013501918760248401930135946116ec6116e687866113ee565b90611497565b926001600160e01b03198085169182156118885761170b9036906114c3565b9461172560008051602061221e8339815191525460e01b90565b16161561173d5760405163fc2f51c560e01b81528a90fd5b97989697600160e01b8103611837575090602095966117c761179561177c6117776116e687606460009901350160248782013591016113ee565b611247565b6001810154909a9081906001600160a01b0316986113fc565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617995b8b611829575b369161067a565b6101408501526117eb604051998a9788968794633a871cdd60e01b865285016115b1565b0393165af1908115610638576106db92600092611809575b5061219b565b61182291925060203d811161096657610958818361026c565b9038611803565b348080808f335af1506117c0565b9095939190600160e11b0361187b576118716117c79460009361186c6116e68a606460209c01350160248d82013591016113ee565b6119d9565b91999296916117ba565b5050505050505050600190565b9750505050505050916106db939450806118a3575b5061203e565b3490349034903490335af1503861189d565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff1990358181169392601481106118e957505050565b60140360031b82901b16169150565b359060208110611906575090565b6000199060200360031b1b1690565b6001600160d01b0319903581811693926006811061193257505050565b60060360031b82901b16169150565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b90918060409360208452816020850152848401376000828201840152601f01601f1916010190565b91906119e58282611419565b6119ee916118c7565b60601c936119fc838361142a565b611a05916118f8565b605883016078820194858360580190611a1f91838861147f565b611a28916118f8565b611a32828761143b565b611a3b916118f8565b611a45838861144c565b611a4e916118c7565b60601c611a5c36878761067a565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641769381019384526001600160e01b03198e169181019190915260608101949094526001600160a01b0392909216608084015260a08084019290925290825290611ad260c08261026c565b519020611ade90611c31565b9084019660788801611af191848961147f565b90611afb92612136565b611b05828761143b565b6001600160a01b031991611b1991906118f8565b16611b239161219b565b966078868801019682036077190195611b3c838261145d565b611b4591611915565b60d01c92611b53818361146e565b611b5c91611915565b60d01c91611b6a828261144c565b611b73916118c7565b60601c91611b8091611419565b611b89916118c7565b60601c91611b9561028d565b65ffffffffffff909516855265ffffffffffff1660208501526001600160a01b031660408401526001600160a01b03166060830152611bd390611247565b90611bdd91611941565b6001600160a01b03871691823b156101cd57611c13926000928360405180968195829463064acaab60e11b8452600484016119b1565b03925af1801561063857611c245750565b8061062c61029a926101e8565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611cbe575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611c9f565b91611e0491611e0993611dee611dfc611d5c6102bc565b611d64610b1a565b906020815191012090602081519101206040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152611dc381610251565b51902092604051928391602083019586909160429261190160f01b8352600283015260228201520190565b03601f19810183528261026c565b519020612136565b612015565b9065ffffffffffff928342911611159283611e56575b505081611e44575b5015611e3857630b135d3f60e11b90565b6001600160e01b031990565b6001600160a01b031615905038611e27565b429116101591503880611e1f565b908160209103126101cd575180151581036101cd5790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b60008051602061223e833981519152546001600160a01b039081163314611fde57611eeb6000356001600160e01b031916611247565b60018101546001600160a01b031691821615908115611fa2575b8115611f77575b5015611f185750600090565b60206040518092639ea9bd5960e01b82528180611f39363360048401611e7c565b03915afa90811561063857600091611f4f575090565b6106db915060203d8111611f70575b611f68818361026c565b810190611e64565b503d611f5e565b54611f91915065ffffffffffff165b65ffffffffffff1690565b65ffffffffffff4291161138611f0c565b905065ffffffffffff611fc2611f86835465ffffffffffff9060301c1690565b168015159081611fd4575b5090611f05565b9050421138611fcd565b50600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b8065ffffffffffff91828160a01c16928315600114612036575b5060d01c92565b92503861202f565b9061206e906020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042090565b9061014081013590601e19813603018212156101cd5701908135916001600160401b0383116101cd576020019180360383136101cd576117c0816120b5926120bb956113fc565b906120e7565b60008051602061223e833981519152546001600160a01b039081169116036120e257600090565b600190565b6001608060006041602094969596604080519880519285526060810151851a88528781015182520151606052145afa51913d15612128576000606052604052565b638baa579f6000526004601cfd5b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042061216f92916120b59192369161067a565b60008051602061223e833981519152546001600160a01b0391821691161461219657600190565b600090565b8082186001600160a01b0316156001146121b6575050600190565b65ffffffffffff60a01b8181169265ffffffffffff60a01b1992831692811691908415612214575b8116801561220d575b848110908518028085189414612205575b5081811190821802181790565b9250386121f8565b50806121e7565b935080936121de56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9dea7fea882fba743201b2aeb1babf326b8944488db560784858525d123ee7e970000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789000000000000000000000000d9ab5096a832b9ce79914329daee236f8eea0390"; + + function deploy() public returns(address, address){ + DeterministicDeploy.checkDeploy("Kernel 2.3", EXPECTED_KERNEL_2_3_ADDRESS, KERNEL_2_3_CODE); + DeterministicDeploy.checkDeploy("Kernel Lite 2.3", EXPECTED_KERNEL_LITE_2_3_ADDRESS, KERNEL_LITE_2_3_CODE); + return (EXPECTED_KERNEL_2_3_ADDRESS, EXPECTED_KERNEL_LITE_2_3_ADDRESS); + } +} diff --git a/scripts/deterministic/SessionKey.s.sol b/scripts/deterministic/SessionKey.s.sol new file mode 100644 index 00000000..14cc5468 --- /dev/null +++ b/scripts/deterministic/SessionKey.s.sol @@ -0,0 +1,12 @@ +pragma solidity ^0.8.0; + +import "./DeterministicDeploy.s.sol"; + +library SessionKeyDeploy { + address constant EXPECTED_SESSIONKEY_ADDRESS = 0xB8E3c4bEaACAd06f6092793012DA4a8cB23D6123; + bytes constant SESSIONKEY_CODE = hex"0000000000000000000000000000000000000000000000000000000000000000608080604052346100165761156e908161001c8239f35b600080fdfe60806040908082526004908136101561001757600080fd5b600092833560e01c9182630c9595561461034d57508163333daf921461031a5781633a871cdd146102d657816346585db21461027d57816352721fdd146102005781637ecebe00146101b8578382638fc925aa1461010b575081639ea9bd59146100bd575063dbba225d1461008b57600080fd5b346100b95760203660031901126100b957356001600160801b03811681036100b9576100b6906105d7565b80f35b5080fd5b905082346101085781600319360112610108576100d8610533565b50602435906001600160401b03821161010857506100f990369084016104eb565b50505163d623472560e01b8152fd5b80fd5b8091846020600319360112610170578035906001600160401b0382116101b357610137913691016104eb565b9091906014810361017457601411610170576002913560601c835260016020528083203384526020528220828155826001820155015580f35b5050fd5b9192506010820361019457506010116100b9576100b6903560801c6105d7565b6100b692506001600160801b03915033845283602052832054166105d7565b505050fd5b8390346100b95760203660031901126100b9579081906001600160a01b036101de610533565b1681528060205220548151906001600160801b038116825260801c6020820152f35b8390346100b957806003193601126100b9578060a09261021e610533565b61022661051d565b90600180871b03809116835260016020528383209116825260205220908154916002600182015491015491805193845265ffffffffffff80831660208601528260301c169084015260601c60608301526080820152f35b919050346102d257816003193601126102d25791819261029b61051d565b9035825260026020528282209060018060a01b03168252602052205481519065ffffffffffff90818116835260301c166020820152f35b8280fd5b91905060031992606084360112610108578135936001600160401b0385116100b95761016090853603011261010857506020926103139101610934565b9051908152f35b90508234610108578160031936011261010857602435906001600160401b03821161010857506100f990369084016104eb565b8492509060203660031901126102d2576001600160401b039184358381116104e35761037c90369087016104eb565b806014116104e757806034116104e75780603a116104e7578084116104e757806054116104e7576074116104e35760548101359360a08301908111838210176104d0579060029184526014810135835260208301603482013560d01c815284840190603a83013560d01c825261046160608601918785013560601c835260808701948986523560601c8a526001602052878a20338b52602052878a2096518755600187019365ffffffffffff8092511665ffffffffffff198654161785555116839065ffffffffffff60301b82549160301b169065ffffffffffff60301b1916179055565b516bffffffffffffffffffffffff82549181199060601b16911617905551910155826020528220908154916001600160801b038084168181146104bd576100b69596506001011680936001600160801b03191617905514610580565b634e487b7160e01b865260118752602486fd5b634e487b7160e01b865260418752602486fd5b8480fd5b8580fd5b9181601f84011215610518578235916001600160401b038311610518576020838186019501011161051857565b600080fd5b602435906001600160a01b038216820361051857565b600435906001600160a01b038216820361051857565b90601f801991011681019081106001600160401b0382111761056a57604052565b634e487b7160e01b600052604160045260246000fd5b1561058757565b60405162461bcd60e51b815260206004820152602260248201527f53657373696f6e4b657956616c696461746f723a20696e76616c6964206e6f6e604482015261636560f01b6064820152608490fd5b600033815280602052604080822054916105ff6001600160801b0385169360801c8411610580565b3381528060205220916001600160801b03199060801b16179055565b903590601e198136030182121561051857018035906001600160401b0382116105185760200191813603831361051857565b356001600160a01b03811681036105185790565b1561066857565b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b156106c057565b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b1561071e57565b60405162461bcd60e51b815260206004820152603360248201527f53657373696f6e4b657956616c696461746f723a207065726d697373696f6e206044820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b6064820152608490fd5b3563ffffffff811681036105185790565b359065ffffffffffff8216820361051857565b602091828252610120820190803563ffffffff81168091036105185784840152808401356001600160a01b038116949085900361051857604094858501528482013563ffffffff60e01b811680910361051857606090818601528083013560808601526080830135601e1984360301811215610518578301918083359301966001600160401b03841161051857828402360388136105185792919082610100968760a08a01525261014087019793600080925b8584106108a3575050505050505061089c60e065ffffffffffff928361087e60a08301610790565b1660c08701528361089160c08301610790565b168287015201610790565b1691015290565b909192939495998a358152818b013560068110156108da57828201528a840135848201528501998501959493600101929190610856565b8380fd5b9092916001600160401b03841161056a578360051b604051926020809461090782850182610549565b809781520191810192831161051857905b8282106109255750505050565b81358152908301908301610918565b6101408101610943818361061b565b601411610518573560601c90600082815260019360209085825260408084203385528352808420936002850180548286528383205460801c1015610d0b578886019687548060601c8b8114600014610c8757506109a461012087018761061b565b905015610c34575b875415610c10575060608501926109c3848761061b565b6004939193116100b95782356001600160e01b031916635194544760e01b8103610b7057506109f2908761061b565b6055959195116100b9576055850135850190605582019560758101350197610a1a828261061b565b6024116104e357610a53929190610a4e9060106001600160a01b03610a416075890161064d565b1691013560601c14610661565b61061b565b6044939193116101085750610a9685610ae994610a82610acc9795602460b5610a9b97013591013511156106b9565b604481013501602460048201359101611388565b610717565b54610aa58461077f565b855188810192835260e09190911b6001600160e01b03191660208301529283906024830190565b0392610ae0601f1994858101835282610549565b51902083610ed8565b96549465ffffffffffff9687871680898b1610610b66575b50610b2f610b4393610b4897969593610b2393549651938491820195866107a3565b03908101835282610549565b5190209236906075605582013591016108de565b610d64565b15610b5f57610b5c945060301c1691610dbb565b90565b5050505090565b9850610b2f610b01565b94509450949650945050631a7e6adf60e19896981b14600014610c0657610b97818561061b565b6055116102d25790816055610baf930135019461061b565b605592919211610108575090816075610be19493013501916075605584013593019160756055830135920190876110f7565b919091610bff575065ffffffffffff610b5c935460301c1691610dbb565b9250505090565b5050505091505090565b98975050505050505050610b5c925065ffffffffffff808360301c16921690610dbb565b845162461bcd60e51b815260048101889052602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610c93575b506109ac565b610ca161012088018861061b565b6014116104e7573560601c03610cb75738610c8d565b845162461bcd60e51b815260048101889052602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b825162461bcd60e51b815260048101869052602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b919091805180610d75575b50501490565b91906020908180820191600595861b0101925b81518111851b90815282825191185281604060002091019383851015610daf579390610d88565b50925050503880610d6f565b919091600435610144810135016024356020526000907b19457468657265756d205369676e6564204d6573736167653a0a33328252603c6004206040908151608081018181106001600160401b03821117610eb15783526041815260208101933660798201116104e75785604160209486600195836038608097018b3784606182015281519981519386526060820151861a89525182520151606052145afa51923d15610ea457606052526001600160a01b03908116911603610e9d5760d09190911b6001600160d01b03191660a09190911b65ffffffffffff60a01b161790565b5050600190565b638baa579f90526004601cfd5b634e487b7160e01b86526041600452602486fd5b3565ffffffffffff811681036105185790565b9065ffffffffffff60a0830160c0840182610ef282610ec5565b16610ff15750610f0360e091610ec5565b935b019181610f1184610ec5565b16610f1d575b50505090565b60009081526002602052604081203382526020526040812090600183835460301c160190838211610fdd575081546bffffffffffff000000000000191660309190911b65ffffffffffff60301b16178155610f7f9082905460301c1692610ec5565b1610610f8d57388080610f17565b60405162461bcd60e51b815260206004820152602260248201527f53657373696f6e4b657956616c696461746f723a2072756e7320657863656564604482015261195960f21b6064820152608490fd5b634e487b7160e01b81526011600452602490fd5b939082610ffd82610ec5565b161561107957600084815260026020526040812033825260205260408120918483549781891692831515600014611060575061103890610ec5565b160190848211610fdd5750908360e0939216955b65ffffffffffff1916868516179055610f05565b91505060e0949392506110739150610ec5565b9561104c565b60405162461bcd60e51b815260206004820152602b60248201527f53657373696f6e4b657956616c696461746f723a20696e76616c69642065786560448201526a637574696f6e2072756c6560a81b6064820152608490fd5b60001981146110e15760010190565b634e487b7160e01b600052601160045260246000fd5b94959391909160009560018060a01b03166000526001968760205260406000203360005260205260406000209365ffffffffffff89860154169560005b6004808401358401013581101561134857600483013583013681900360821901600583901b909101602401351215610518578181101561132a5760fe19863603018160051b870135121561051857611217610a9661120860248460051b600488013588010101356004870135870101606460248201916111e56111b68461064d565b8d6111d2602060018060a01b03928c60051b810135010161064d565b6001600160a01b03909216911614610661565b61120160608d8960051b810135010135604483013511156106b9565b019061061b565b8460051b8a01358a0191611388565b61127e600288015461125f61126d6112368560051b8b01358b0161077f565b604080516020810195865260e09290921b6001600160e01b031916908201529182906044820190565b03601f198101835282610549565b5190208260051b8801358801610ed8565b65ffffffffffff891665ffffffffffff821611611340575b508381101561132a578060051b850135601e19863603018112156105185785018035906001600160401b03821161051857602001908060051b360382136105185761130a91610b438a54918a6040516112ff8161125f60208201948b60051b81013501856107a3565b5190209336916108de565b1561131d57611318906110d2565b611134565b5095989750505050505050565b634e487b7160e01b600052603260045260246000fd5b975038611296565b505050505050509250565b903590601e198136030182121561051857018035906001600160401b0382116105185760200191606082023603831361051857565b600490828211610518576040908185013563ffffffff60e01b80821680920361051857823516036115645760005b608086016113c48188611353565b9050821015611558576113d79087611353565b821015611543576060820201803580860180871161152e57602480830180921161151b57508710610518578301850135602082013560068110156105185780158061150e575b1561143057505050505050505050600090565b6001811480611501575b1561144d57505050505050505050600090565b60028114806114f4575b1561146a57505050505050505050600090565b60038114806114e8575b1561148757505050505050505050600090565b868114806114dc575b156114a357505050505050505050600090565b600586911492836114cf575b5050506114c4576114bf906110d2565b6113b6565b505050505050600090565b01351490503884816114af565b50858301358211611490565b50858301358210611474565b5085830135821015611457565b508583013582111561143a565b508583013582141561141d565b634e487b7160e01b600090815260118952fd5b601187634e487b7160e01b6000525260246000fd5b603285634e487b7160e01b6000525260246000fd5b50505050505050600190565b505050505060009056"; + function deploy() internal returns(address) { + DeterministicDeploy.checkDeploy("SessionKey", EXPECTED_SESSIONKEY_ADDRESS, SESSIONKEY_CODE); + return EXPECTED_SESSIONKEY_ADDRESS; + } +}