Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Investigate: Library without immutables cannot be verified with matchWithDeployedBytecode because of placeholders in bytecode #996

Closed
kuzdogan opened this issue Apr 24, 2023 · 11 comments · Fixed by #1000
Assignees

Comments

@kuzdogan
Copy link
Member

kuzdogan commented Apr 24, 2023

I came across a contract (library) that could only be verified with the creatorTxHash as the recompiled deployed bytecode contains 0000000s akin to immutables, but the library does not actually have immutables in the source code.

The contract is: https://testnet.snowtrace.io/address/0x28CA70cc5732D042381F9240bf45aB1b493aEFef#code

The part that differ is the bytes 1 to 21 in the bytecode, as below, which has the contract address 0x28CA70cc5732D042381F9240bf45aB1b493aEFef value filled in during deployment.

Recompiled deployed bytecode:

0x730000000000000000000000000000000000000000301460806040526004361061004b5760003560e01c806383c1087d14610050578063a18964a514610072578063d246754414610093575b600080fd5b81801561005c57600080fd5b5061007061006b36600461387f565b61009c565b005b610081670d2f13f7789f000081565b60405190815260200160405180910390f35b61008161271081565b6100a461367a565b60408083015173ffffffffffffffffffffffffffffffffffffffff9081166000908152602089815283822060608701518416835284832060808801519094168352908890529290206100f582610832565b6101608501819052610108908390610a4b565b61018e8989886040518060a001604052808660405180602001604052908160008201548152505081526020018a6000015181526020018a6080015173ffffffffffffffffffffffffffffffffffffffff1681526020018a60c0015173ffffffffffffffffffffffffffffffffffffffff1681526020018a60e0015160ff16815250610ad6565b5060c089018190526101608901516101ad955093508992509050611040565b86602001876040018860600183815250838152508381525050505061021b818460405180608001604052808861016001518152602001886040015181526020018860c00151815260200189610100015173ffffffffffffffffffffffffffffffffffffffff168152506110c6565b610226868487611575565b60a088015273ffffffffffffffffffffffffffffffffffffffff908116610120880152908116610100870152908116610140860181905260808701516040517f70a0823100000000000000000000000000000000000000000000000000000000815292166004830152906370a0823190602401602060405180830381865afa1580156102b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102da9190613988565b808552610160850151610100860151610120870151606088015160a089015160c08b015161030f968a969594939290916116a9565b60e08701526060860181905260808601919091526040850151141561035d57600382015461035d9082907501000000000000000000000000000000000000000000900461ffff166000611a09565b835160e0850151608086015161037391906139d0565b141561040b5760038301546103a89082907501000000000000000000000000000000000000000000900461ffff166000611a9e565b846080015173ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff167f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd60405160405180910390a35b6104158585611b27565b6101608401516060808701519086015161043492859290916000611db8565b61044a89898387610160015188606001516120f9565b8460a001511561046757610462898989868989612301565b610472565b6104728386866124f2565b60e08401511561067c576000610487846125ca565b905060006104a2828760e0015161266190919063ffffffff16565b61014087015160808901516040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152929350600092911690631da24f3e90602401602060405180830381865afa15801561051f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105439190613988565b90508082111561055d5761055781846126a0565b60e08801525b86610140015173ffffffffffffffffffffffffffffffffffffffff1663f866c319896080015189610140015173ffffffffffffffffffffffffffffffffffffffff1663ae1673356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f791906139e8565b8a60e001516040518463ffffffff1660e01b81526004016106469392919073ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600060405180830381600087803b15801561066057600080fd5b505af1158015610674573d6000803e3d6000fd5b505050505050505b6106bb338561016001516101e001518660600151886060015173ffffffffffffffffffffffffffffffffffffffff166126f7909392919063ffffffff16565b6101608401516101e00151608086015160608601516040517f6fd9767600000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff92831660248201526044810191909152911690636fd9767690606401600060405180830381600087803b15801561074757600080fd5b505af115801561075b573d6000803e3d6000fd5b50505050846080015173ffffffffffffffffffffffffffffffffffffffff16856060015173ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff167fe413a321e8681d831f4dbccbca790d2952b56f977908e45be37335533e00528687606001518860800151338b60a0015160405161081f9493929190938452602084019290925273ffffffffffffffffffffffffffffffffffffffff1660408301521515606082015260800190565b60405180910390a4505050505050505050565b61083a613722565b610842613722565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa15801561096f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109939190613988565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa1580156109f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a189190613a05565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415610a7a575050565b610a8482826127d2565b610a8e82826128f4565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b600080600080600080610aec8760000151511590565b15610b285750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905081611033565b610bd760405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff1615610c1c57608088015160ff16600090815260208a9052604090206060890151610c099190612a74565b6101808401526101c08301526101a08201525b87602001518160c001511015610f3b5760c08101518851610c3c91612b53565b610c505760c0810180516001019052610c1c565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff166102008201819052610c965760c0810180516001019052610c1c565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a9083015261018082015115801590610d2c5750816101e00151896080015160ff16145b610dd05760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa158015610da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcb9190613988565b610dd7565b8161018001515b825260a082015115801590610df7575060c08201518951610df791612bdb565b15610ee757610e1489604001518284600001518560200151612c5f565b6040830181905261010083018051610e2d9083906139d0565b90525060808901516101e0830151610e489160ff1690612d3a565b1515610240830152608082015115610e9e57816102400151610e6e578160800151610e75565b816101a001515b8260400151610e849190613a50565b8261014001818151610e9691906139d0565b905250610ea7565b60016102208301525b816102400151610ebb578160a00151610ec2565b816101c001515b8260400151610ed19190613a50565b8261016001818151610ee391906139d0565b9052505b60c08201518951610ef791612d4b565b15610f2a57610f1489604001518284600001518560200151612dcd565b8261012001818151610f2691906139d0565b9052505b5060c0810180516001019052610c1c565b610100810151610f4c576000610f67565b80610100015181610140015181610f6557610f65613a8d565b045b610140820152610100810151610f7e576000610f99565b80610100015181610160015181610f9757610f97613a8d565b045b61016082015261012081015115610fdb57610fd6816101200151610fd0836101600151846101000151612f4d90919063ffffffff16565b90612f90565b610ffd565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b6000806000806000611056876080015189612fc7565b9092509050600061106782846139d0565b90506000670d2f13f7789f0000881161108257612710611086565b6113885b905060006110948383612f4d565b90506000818b60200151116110ad578a602001516110af565b815b949850929650929450505050505b93509350939050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915260408051602081019091528354815261114c9051670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b1515602086015250505015801580835283516101c0015151671000000000000000811615156060850152670100000000000000161515604084015290611193575080604001515b6040518060400160405280600281526020017f32370000000000000000000000000000000000000000000000000000000000008152509061120a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b60405180910390fd5b50806020015115801561121f57508060600151155b6040518060400160405280600281526020017f32390000000000000000000000000000000000000000000000000000000000008152509061128d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b50606082015173ffffffffffffffffffffffffffffffffffffffff1615806112c05750670d2f13f7789f00008260400151105b806113395750816060015173ffffffffffffffffffffffffffffffffffffffff16637a5d20ea6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113399190613b2f565b6040518060400160405280600281526020017f3539000000000000000000000000000000000000000000000000000000000000815250906113a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b50670de0b6b3a76400008260400151106040518060400160405280600281526020017f343500000000000000000000000000000000000000000000000000000000000081525090611425576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b50604080516020810190915283549081905260101c61ffff161580159061148157506003830154604080516020810190915285548152611481917501000000000000000000000000000000000000000000900461ffff16612bdb565b15156080820181905260408051808201909152600281527f34360000000000000000000000000000000000000000000000000000000000006020820152906114f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b508160200151600014156040518060400160405280600281526020017f34370000000000000000000000000000000000000000000000000000000000008152509061156e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b5050505050565b6004820154604080516020808201835285549182905291840151606085015160e086015160009586958695869573ffffffffffffffffffffffffffffffffffffffff90931694911c61ffff169260ff16156116985760e08901805160ff908116600090815260208e815260409182902054935182519182019092528d5490819052660100000000000090930473ffffffffffffffffffffffffffffffffffffffff169261162c929182169160a89190911c16612d3a565b156116765760e08a015160ff16600090815260208d90526040902054640100000000900461ffff16935073ffffffffffffffffffffffffffffffffffffffff811615611676578092505b73ffffffffffffffffffffffffffffffffffffffff811615611696578091505b505b929a90995091975095509350505050565b6000806000611719604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015286169063b3596f0790602401602060405180830381865afa158015611785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a99190613988565b81526040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116600483015286169063b3596f0790602401602060405180830381865afa158015611817573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183b9190613988565b6020828101919091526040805191820190528c549081905260301c60ff1660c08201526101c08b01515160301c60ff1660a0820181905260c0820151600a90810a60e08401520a61010082015260408051602081019091528c549081905260981c61ffff1661016082015261010081015181516118b89190613a50565b8160e001518983602001516118cd9190613a50565b6118d79190613a50565b6118e19190613b4c565b606082018190526118f29087612f4d565b6040820181905287101561195f57610120810187905260e081015160208201516119549188916119229190613a50565b610100840151610120850151855161193a9190613a50565b6119449190613a50565b61194e9190613b4c565b90613104565b610140820152611973565b604081015161012082015261014081018890525b610160810151156119e55761012081015161198e9087613104565b81610120015161199e9190613b87565b608082018190526101608201516119b59190612f4d565b61018082018190526101208201516119cd9190613b87565b816101400151826101800151935093509350506119fb565b8061012001518161014001516000935093509350505b985098509895505050505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260808310611a78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b50600182811b1b8115611a9057835481178455611a98565b835481191684555b50505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260808310611b0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b50600182811b81011b8115611a9057835481178455611a98565b8060600151816020015110611bff5761016081015161022081015160808401516060840151610140909301516040517ff5298aca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101949094526044840152169063f5298aca906064016020604051808303816000875af1158015611bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf19190613988565b610160820151602001525050565b602081015115611ccf5761016081015161022081015160808401516020840151610140909301516040517ff5298aca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101949094526044840152169063f5298aca906064016020604051808303816000875af1158015611ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc49190613988565b610160820151602001525b806101600151610200015173ffffffffffffffffffffffffffffffffffffffff16639dc29fac836080015183602001518460600151611d0e9190613b87565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602482015260440160408051808303816000875af1158015611d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da19190613b9e565b61016083015160a081019190915260c001525b5050565b611de36040518060800160405280600081526020016000815260200160008152602001600081525090565b6101408501516020860151611df7916126a0565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a589870991611f589190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa158015611f75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f999190613bc2565b60408401526020830152808252611faf9061312f565b6001870180546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556020810151611ff29061312f565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905560408101516120439061312f565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b60408051602081019091528354815260009081906121189088886131d5565b509150915081156122f85773ffffffffffffffffffffffffffffffffffffffff81166000908152602088905260408120600901546101c0860151516fffffffffffffffffffffffffffffffff909116919061219a9060029060301c60ff166121809190613b87565b61218b90600a613d10565b6121959087613b4c565b61312f565b9050806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff161161224a5773ffffffffffffffffffffffffffffffffffffffff8316600081815260208b8152604080832060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055519182527faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a26122f5565b60006122568284613d1c565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260208d815260409182902060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff959095169485179055905183815292935090917faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a2505b50505b50505050505050565b6101408101516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612373573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123979190613988565b610140830151608080860151908501516040517ff866c31900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201523360248201526044810191909152929350169063f866c31990606401600060405180830381600087803b15801561242057600080fd5b505af1158015612434573d6000803e3d6000fd5b5050505080600014156122f857336000908152602086815260409182902082519182019092528554815261246d9089908990849061328a565b156124e85760038501546124a19082907501000000000000000000000000000000000000000000900461ffff166001611a9e565b6040808501519051339173ffffffffffffffffffffffffffffffffffffffff16907e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f290600090a35b5050505050505050565b60006124fd84610832565b90506125098482610a4b565b60408301516080830151612524918691849190600090611db8565b610140820151608080850151908401516101008401516040517fd7020d0a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201523360248201526044810192909252606482015291169063d7020d0a90608401600060405180830381600087803b1580156125b657600080fd5b505af11580156124e8573d6000803e3d6000fd5b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415612610575050600101546fffffffffffffffffffffffffffffffff1690565b6001830154612654906fffffffffffffffffffffffffffffffff8082169161264e91700100000000000000000000000000000000909104168461330e565b906126a0565b9392505050565b50919050565b600081156b033b2e3c9fd0803ce80000006002840419048411171561268557600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff839004841115176126d557600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af1612762573d6000803e3d6000fd5b5061276c8561334b565b61156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d000000000000006044820152606401611201565b610160810151156128625760006127f382610160015183610240015161330e565b905061280c8260e00151826126a090919063ffffffff16565b610100830181905261281d9061312f565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b805115611db457600061287f826101800151836102400151613415565b9050612899826101200151826126a090919063ffffffff16565b61014083018190526128aa9061312f565b6002840180546fffffffffffffffffffffffffffffffff929092167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216919091179055505050565b61292d6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a082015161293c57505050565b610120820151825161294d916126a0565b60208201526101408201518251612963916126a0565b6040820152606082015161026083015161024084015161298b92919064ffffffffff1661341e565b6060820181905260408301516129a0916126a0565b8082526020820151608084015160408401516129bc91906139d0565b6129c69190613b87565b6129d09190613b87565b608082018190526101a08301516129e79190612f4d565b60a0820181905215612a6f57612a126121958361010001518360a0015161266190919063ffffffff16565b600884018054600090612a389084906fffffffffffffffffffffffffffffffff16613d4d565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b505050565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff168015612b38576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa158015612b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b359190613988565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612bc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b50508151600182901b1c60031615155b92915050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612c4d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b50509051600191821b82011c16151590565b600080612c6b856125ca565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116938201939093529293506000928792612d11928692911690631da24f3e90602401602060405180830381865afa158015612ced573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264e9190613988565b612d1b9190613a50565b9050838181612d2c57612d2c613a8d565b04925050505b949350505050565b600082158015906126545750501490565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612dbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b50509051600191821b1c16151590565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa158015612e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e679190613988565b90508015612e8557612e82612e7b86613565565b82906126a0565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa158015612ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1b9190613988565b612f2590826139d0565b9050612f318185613a50565b9050828181612f4257612f42613a8d565b049695505050505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517612f8257600080fd5b506127109102611388010490565b60008115670de0b6b3a764000060028404190484111715612fb057600080fd5b50670de0b6b3a76400009190910260028204010490565b6102008101516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009283929116906370a0823190602401602060405180830381865afa15801561303e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130629190613988565b6102208401516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152909116906370a0823190602401602060405180830381865afa1580156130d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f99190613988565b915091509250929050565b600081156127106002840419048411171561311e57600080fd5b506127109190910260028204010490565b60006fffffffffffffffffffffffffffffffff8211156131d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401611201565b5090565b60008060006131e3866135e9565b1561327a576000613214877faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa61362d565b6000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168084528a8352818420825193840190925290549182905292935060d41c64ffffffffff1690508015613276576001955090935091506110bd9050565b5050505b5060009586955085945092505050565b60408051602081019091528254908190526000907faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa166132cc57506001612d32565b6040805160208101909152835481526000906132e99087876131d5565b50509050801580156133045750825160d41c64ffffffffff16155b9695505050505050565b60008061332264ffffffffff841642613b87565b61332c9085613a50565b6301e1338090049050612d32816b033b2e3c9fd0803ce80000006139d0565b600061338b565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156133ca5760208114613404576133c57f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f613352565b61265b565b823b6133fb576133fb7f475076323a206e6f74206120636f6e74726163740000000000000000000000006014613352565b6001915061265b565b3d6000803e50506000511515919050565b60006126548383425b60008061343264ffffffffff851684613b87565b90508061344e576b033b2e3c9fd0803ce8000000915050612654565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511613484576000613489565b600285035b925066038882915c400061349d8a806126a0565b816134aa576134aa613a8d565b0491506301e133806134bc838b6126a0565b816134c9576134c9613a8d565b0490506000826134d98688613a50565b6134e39190613a50565b600290049050600082856134f7888a613a50565b6135019190613a50565b61350b9190613a50565b60069004905080826301e133806135228a8f613a50565b61352c9190613b4c565b613542906b033b2e3c9fd0803ce80000006139d0565b61354c91906139d0565b61355691906139d0565b9b9a5050505050505050505050565b6003810154600090700100000000000000000000000000000000900464ffffffffff16428114156135ab575050600201546fffffffffffffffffffffffffffffffff1690565b6002830154612654906fffffffffffffffffffffffffffffffff8082169161264e917001000000000000000000000000000000009091041684613415565b80516000907faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1680158015906126545750613625600182613b87565b161592915050565b815160009082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101198116825b60029190911c9081156136715760010161365c565b95945050505050565b6040518061018001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200161371d613722565b905290565b60405180610280016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016137a66040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b604051610120810167ffffffffffffffff8111828210171561381a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b73ffffffffffffffffffffffffffffffffffffffff8116811461384257600080fd5b50565b803561385081613820565b919050565b801515811461384257600080fd5b803561385081613855565b803560ff8116811461385057600080fd5b60008060008060008587036101a081121561389957600080fd5b86359550602087013594506040870135935060608701359250610120807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80830112156138e457600080fd5b6138ec6137cf565b91506080880135825260a0880135602083015261390b60c08901613845565b604083015261391c60e08901613845565b606083015261010061392f818a01613845565b608084015261393f828a01613863565b60a08401526139516101408a01613845565b60c08401526139636101608a0161386e565b60e08401526139756101808a01613845565b9083015250949793965091945092919050565b60006020828403121561399a57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156139e3576139e36139a1565b500190565b6000602082840312156139fa57600080fd5b815161265481613820565b60008060008060808587031215613a1b57600080fd5b845193506020850151925060408501519150606085015164ffffffffff81168114613a4557600080fd5b939692955090935050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a8857613a886139a1565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060208083528351808285015260005b81811015613ae957858101830151858201604001528201613acd565b81811115613afb576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060208284031215613b4157600080fd5b815161265481613855565b600082613b82577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015613b9957613b996139a1565b500390565b60008060408385031215613bb157600080fd5b505080516020909101519092909150565b600080600060608486031215613bd757600080fd5b8351925060208401519150604084015190509250925092565b600181815b80851115613c4957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613c2f57613c2f6139a1565b80851615613c3c57918102915b93841c9390800290613bf5565b509250929050565b600082613c6057506001612bd5565b81613c6d57506000612bd5565b8160018114613c835760028114613c8d57613ca9565b6001915050612bd5565b60ff841115613c9e57613c9e6139a1565b50506001821b612bd5565b5060208310610133831016604e8410600b8410161715613ccc575081810a612bd5565b613cd68383613bf0565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613d0857613d086139a1565b029392505050565b60006126548383613c51565b60006fffffffffffffffffffffffffffffffff83811690831681811015613d4557613d456139a1565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115613d7857613d786139a1565b0194935050505056fea264697066735822122052511c196d4c83cb8bfb3e2a0bde2c5c70401d6569f162ef2f8db775f7356ba464736f6c634300080a0033

Onchain deployed bytecode

0x7328ca70cc5732d042381f9240bf45ab1b493aefef301460806040526004361061004b5760003560e01c806383c1087d14610050578063a18964a514610072578063d246754414610093575b600080fd5b81801561005c57600080fd5b5061007061006b36600461387f565b61009c565b005b610081670d2f13f7789f000081565b60405190815260200160405180910390f35b61008161271081565b6100a461367a565b60408083015173ffffffffffffffffffffffffffffffffffffffff9081166000908152602089815283822060608701518416835284832060808801519094168352908890529290206100f582610832565b6101608501819052610108908390610a4b565b61018e8989886040518060a001604052808660405180602001604052908160008201548152505081526020018a6000015181526020018a6080015173ffffffffffffffffffffffffffffffffffffffff1681526020018a60c0015173ffffffffffffffffffffffffffffffffffffffff1681526020018a60e0015160ff16815250610ad6565b5060c089018190526101608901516101ad955093508992509050611040565b86602001876040018860600183815250838152508381525050505061021b818460405180608001604052808861016001518152602001886040015181526020018860c00151815260200189610100015173ffffffffffffffffffffffffffffffffffffffff168152506110c6565b610226868487611575565b60a088015273ffffffffffffffffffffffffffffffffffffffff908116610120880152908116610100870152908116610140860181905260808701516040517f70a0823100000000000000000000000000000000000000000000000000000000815292166004830152906370a0823190602401602060405180830381865afa1580156102b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102da9190613988565b808552610160850151610100860151610120870151606088015160a089015160c08b015161030f968a969594939290916116a9565b60e08701526060860181905260808601919091526040850151141561035d57600382015461035d9082907501000000000000000000000000000000000000000000900461ffff166000611a09565b835160e0850151608086015161037391906139d0565b141561040b5760038301546103a89082907501000000000000000000000000000000000000000000900461ffff166000611a9e565b846080015173ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff167f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd60405160405180910390a35b6104158585611b27565b6101608401516060808701519086015161043492859290916000611db8565b61044a89898387610160015188606001516120f9565b8460a001511561046757610462898989868989612301565b610472565b6104728386866124f2565b60e08401511561067c576000610487846125ca565b905060006104a2828760e0015161266190919063ffffffff16565b61014087015160808901516040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152929350600092911690631da24f3e90602401602060405180830381865afa15801561051f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105439190613988565b90508082111561055d5761055781846126a0565b60e08801525b86610140015173ffffffffffffffffffffffffffffffffffffffff1663f866c319896080015189610140015173ffffffffffffffffffffffffffffffffffffffff1663ae1673356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f791906139e8565b8a60e001516040518463ffffffff1660e01b81526004016106469392919073ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600060405180830381600087803b15801561066057600080fd5b505af1158015610674573d6000803e3d6000fd5b505050505050505b6106bb338561016001516101e001518660600151886060015173ffffffffffffffffffffffffffffffffffffffff166126f7909392919063ffffffff16565b6101608401516101e00151608086015160608601516040517f6fd9767600000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff92831660248201526044810191909152911690636fd9767690606401600060405180830381600087803b15801561074757600080fd5b505af115801561075b573d6000803e3d6000fd5b50505050846080015173ffffffffffffffffffffffffffffffffffffffff16856060015173ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff167fe413a321e8681d831f4dbccbca790d2952b56f977908e45be37335533e00528687606001518860800151338b60a0015160405161081f9493929190938452602084019290925273ffffffffffffffffffffffffffffffffffffffff1660408301521515606082015260800190565b60405180910390a4505050505050505050565b61083a613722565b610842613722565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa15801561096f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109939190613988565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa1580156109f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a189190613a05565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415610a7a575050565b610a8482826127d2565b610a8e82826128f4565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b600080600080600080610aec8760000151511590565b15610b285750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905081611033565b610bd760405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff1615610c1c57608088015160ff16600090815260208a9052604090206060890151610c099190612a74565b6101808401526101c08301526101a08201525b87602001518160c001511015610f3b5760c08101518851610c3c91612b53565b610c505760c0810180516001019052610c1c565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff166102008201819052610c965760c0810180516001019052610c1c565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a9083015261018082015115801590610d2c5750816101e00151896080015160ff16145b610dd05760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa158015610da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcb9190613988565b610dd7565b8161018001515b825260a082015115801590610df7575060c08201518951610df791612bdb565b15610ee757610e1489604001518284600001518560200151612c5f565b6040830181905261010083018051610e2d9083906139d0565b90525060808901516101e0830151610e489160ff1690612d3a565b1515610240830152608082015115610e9e57816102400151610e6e578160800151610e75565b816101a001515b8260400151610e849190613a50565b8261014001818151610e9691906139d0565b905250610ea7565b60016102208301525b816102400151610ebb578160a00151610ec2565b816101c001515b8260400151610ed19190613a50565b8261016001818151610ee391906139d0565b9052505b60c08201518951610ef791612d4b565b15610f2a57610f1489604001518284600001518560200151612dcd565b8261012001818151610f2691906139d0565b9052505b5060c0810180516001019052610c1c565b610100810151610f4c576000610f67565b80610100015181610140015181610f6557610f65613a8d565b045b610140820152610100810151610f7e576000610f99565b80610100015181610160015181610f9757610f97613a8d565b045b61016082015261012081015115610fdb57610fd6816101200151610fd0836101600151846101000151612f4d90919063ffffffff16565b90612f90565b610ffd565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b6000806000806000611056876080015189612fc7565b9092509050600061106782846139d0565b90506000670d2f13f7789f0000881161108257612710611086565b6113885b905060006110948383612f4d565b90506000818b60200151116110ad578a602001516110af565b815b949850929650929450505050505b93509350939050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915260408051602081019091528354815261114c9051670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b1515602086015250505015801580835283516101c0015151671000000000000000811615156060850152670100000000000000161515604084015290611193575080604001515b6040518060400160405280600281526020017f32370000000000000000000000000000000000000000000000000000000000008152509061120a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b60405180910390fd5b50806020015115801561121f57508060600151155b6040518060400160405280600281526020017f32390000000000000000000000000000000000000000000000000000000000008152509061128d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b50606082015173ffffffffffffffffffffffffffffffffffffffff1615806112c05750670d2f13f7789f00008260400151105b806113395750816060015173ffffffffffffffffffffffffffffffffffffffff16637a5d20ea6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113399190613b2f565b6040518060400160405280600281526020017f3539000000000000000000000000000000000000000000000000000000000000815250906113a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b50670de0b6b3a76400008260400151106040518060400160405280600281526020017f343500000000000000000000000000000000000000000000000000000000000081525090611425576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b50604080516020810190915283549081905260101c61ffff161580159061148157506003830154604080516020810190915285548152611481917501000000000000000000000000000000000000000000900461ffff16612bdb565b15156080820181905260408051808201909152600281527f34360000000000000000000000000000000000000000000000000000000000006020820152906114f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b508160200151600014156040518060400160405280600281526020017f34370000000000000000000000000000000000000000000000000000000000008152509061156e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b5050505050565b6004820154604080516020808201835285549182905291840151606085015160e086015160009586958695869573ffffffffffffffffffffffffffffffffffffffff90931694911c61ffff169260ff16156116985760e08901805160ff908116600090815260208e815260409182902054935182519182019092528d5490819052660100000000000090930473ffffffffffffffffffffffffffffffffffffffff169261162c929182169160a89190911c16612d3a565b156116765760e08a015160ff16600090815260208d90526040902054640100000000900461ffff16935073ffffffffffffffffffffffffffffffffffffffff811615611676578092505b73ffffffffffffffffffffffffffffffffffffffff811615611696578091505b505b929a90995091975095509350505050565b6000806000611719604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015286169063b3596f0790602401602060405180830381865afa158015611785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a99190613988565b81526040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116600483015286169063b3596f0790602401602060405180830381865afa158015611817573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183b9190613988565b6020828101919091526040805191820190528c549081905260301c60ff1660c08201526101c08b01515160301c60ff1660a0820181905260c0820151600a90810a60e08401520a61010082015260408051602081019091528c549081905260981c61ffff1661016082015261010081015181516118b89190613a50565b8160e001518983602001516118cd9190613a50565b6118d79190613a50565b6118e19190613b4c565b606082018190526118f29087612f4d565b6040820181905287101561195f57610120810187905260e081015160208201516119549188916119229190613a50565b610100840151610120850151855161193a9190613a50565b6119449190613a50565b61194e9190613b4c565b90613104565b610140820152611973565b604081015161012082015261014081018890525b610160810151156119e55761012081015161198e9087613104565b81610120015161199e9190613b87565b608082018190526101608201516119b59190612f4d565b61018082018190526101208201516119cd9190613b87565b816101400151826101800151935093509350506119fb565b8061012001518161014001516000935093509350505b985098509895505050505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260808310611a78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b50600182811b1b8115611a9057835481178455611a98565b835481191684555b50505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260808310611b0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b50600182811b81011b8115611a9057835481178455611a98565b8060600151816020015110611bff5761016081015161022081015160808401516060840151610140909301516040517ff5298aca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101949094526044840152169063f5298aca906064016020604051808303816000875af1158015611bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf19190613988565b610160820151602001525050565b602081015115611ccf5761016081015161022081015160808401516020840151610140909301516040517ff5298aca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101949094526044840152169063f5298aca906064016020604051808303816000875af1158015611ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc49190613988565b610160820151602001525b806101600151610200015173ffffffffffffffffffffffffffffffffffffffff16639dc29fac836080015183602001518460600151611d0e9190613b87565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602482015260440160408051808303816000875af1158015611d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da19190613b9e565b61016083015160a081019190915260c001525b5050565b611de36040518060800160405280600081526020016000815260200160008152602001600081525090565b6101408501516020860151611df7916126a0565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a589870991611f589190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa158015611f75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f999190613bc2565b60408401526020830152808252611faf9061312f565b6001870180546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556020810151611ff29061312f565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905560408101516120439061312f565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b60408051602081019091528354815260009081906121189088886131d5565b509150915081156122f85773ffffffffffffffffffffffffffffffffffffffff81166000908152602088905260408120600901546101c0860151516fffffffffffffffffffffffffffffffff909116919061219a9060029060301c60ff166121809190613b87565b61218b90600a613d10565b6121959087613b4c565b61312f565b9050806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff161161224a5773ffffffffffffffffffffffffffffffffffffffff8316600081815260208b8152604080832060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055519182527faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a26122f5565b60006122568284613d1c565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260208d815260409182902060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff959095169485179055905183815292935090917faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a2505b50505b50505050505050565b6101408101516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612373573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123979190613988565b610140830151608080860151908501516040517ff866c31900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201523360248201526044810191909152929350169063f866c31990606401600060405180830381600087803b15801561242057600080fd5b505af1158015612434573d6000803e3d6000fd5b5050505080600014156122f857336000908152602086815260409182902082519182019092528554815261246d9089908990849061328a565b156124e85760038501546124a19082907501000000000000000000000000000000000000000000900461ffff166001611a9e565b6040808501519051339173ffffffffffffffffffffffffffffffffffffffff16907e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f290600090a35b5050505050505050565b60006124fd84610832565b90506125098482610a4b565b60408301516080830151612524918691849190600090611db8565b610140820151608080850151908401516101008401516040517fd7020d0a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201523360248201526044810192909252606482015291169063d7020d0a90608401600060405180830381600087803b1580156125b657600080fd5b505af11580156124e8573d6000803e3d6000fd5b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415612610575050600101546fffffffffffffffffffffffffffffffff1690565b6001830154612654906fffffffffffffffffffffffffffffffff8082169161264e91700100000000000000000000000000000000909104168461330e565b906126a0565b9392505050565b50919050565b600081156b033b2e3c9fd0803ce80000006002840419048411171561268557600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff839004841115176126d557600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af1612762573d6000803e3d6000fd5b5061276c8561334b565b61156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d000000000000006044820152606401611201565b610160810151156128625760006127f382610160015183610240015161330e565b905061280c8260e00151826126a090919063ffffffff16565b610100830181905261281d9061312f565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b805115611db457600061287f826101800151836102400151613415565b9050612899826101200151826126a090919063ffffffff16565b61014083018190526128aa9061312f565b6002840180546fffffffffffffffffffffffffffffffff929092167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216919091179055505050565b61292d6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a082015161293c57505050565b610120820151825161294d916126a0565b60208201526101408201518251612963916126a0565b6040820152606082015161026083015161024084015161298b92919064ffffffffff1661341e565b6060820181905260408301516129a0916126a0565b8082526020820151608084015160408401516129bc91906139d0565b6129c69190613b87565b6129d09190613b87565b608082018190526101a08301516129e79190612f4d565b60a0820181905215612a6f57612a126121958361010001518360a0015161266190919063ffffffff16565b600884018054600090612a389084906fffffffffffffffffffffffffffffffff16613d4d565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b505050565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff168015612b38576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa158015612b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b359190613988565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612bc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b50508151600182901b1c60031615155b92915050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612c4d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b50509051600191821b82011c16151590565b600080612c6b856125ca565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116938201939093529293506000928792612d11928692911690631da24f3e90602401602060405180830381865afa158015612ced573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264e9190613988565b612d1b9190613a50565b9050838181612d2c57612d2c613a8d565b04925050505b949350505050565b600082158015906126545750501490565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612dbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613abc565b50509051600191821b1c16151590565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa158015612e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e679190613988565b90508015612e8557612e82612e7b86613565565b82906126a0565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa158015612ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1b9190613988565b612f2590826139d0565b9050612f318185613a50565b9050828181612f4257612f42613a8d565b049695505050505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517612f8257600080fd5b506127109102611388010490565b60008115670de0b6b3a764000060028404190484111715612fb057600080fd5b50670de0b6b3a76400009190910260028204010490565b6102008101516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009283929116906370a0823190602401602060405180830381865afa15801561303e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130629190613988565b6102208401516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152909116906370a0823190602401602060405180830381865afa1580156130d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f99190613988565b915091509250929050565b600081156127106002840419048411171561311e57600080fd5b506127109190910260028204010490565b60006fffffffffffffffffffffffffffffffff8211156131d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401611201565b5090565b60008060006131e3866135e9565b1561327a576000613214877faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa61362d565b6000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168084528a8352818420825193840190925290549182905292935060d41c64ffffffffff1690508015613276576001955090935091506110bd9050565b5050505b5060009586955085945092505050565b60408051602081019091528254908190526000907faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa166132cc57506001612d32565b6040805160208101909152835481526000906132e99087876131d5565b50509050801580156133045750825160d41c64ffffffffff16155b9695505050505050565b60008061332264ffffffffff841642613b87565b61332c9085613a50565b6301e1338090049050612d32816b033b2e3c9fd0803ce80000006139d0565b600061338b565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156133ca5760208114613404576133c57f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f613352565b61265b565b823b6133fb576133fb7f475076323a206e6f74206120636f6e74726163740000000000000000000000006014613352565b6001915061265b565b3d6000803e50506000511515919050565b60006126548383425b60008061343264ffffffffff851684613b87565b90508061344e576b033b2e3c9fd0803ce8000000915050612654565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511613484576000613489565b600285035b925066038882915c400061349d8a806126a0565b816134aa576134aa613a8d565b0491506301e133806134bc838b6126a0565b816134c9576134c9613a8d565b0490506000826134d98688613a50565b6134e39190613a50565b600290049050600082856134f7888a613a50565b6135019190613a50565b61350b9190613a50565b60069004905080826301e133806135228a8f613a50565b61352c9190613b4c565b613542906b033b2e3c9fd0803ce80000006139d0565b61354c91906139d0565b61355691906139d0565b9b9a5050505050505050505050565b6003810154600090700100000000000000000000000000000000900464ffffffffff16428114156135ab575050600201546fffffffffffffffffffffffffffffffff1690565b6002830154612654906fffffffffffffffffffffffffffffffff8082169161264e917001000000000000000000000000000000009091041684613415565b80516000907faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1680158015906126545750613625600182613b87565b161592915050565b815160009082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101198116825b60029190911c9081156136715760010161365c565b95945050505050565b6040518061018001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200161371d613722565b905290565b60405180610280016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016137a66040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b604051610120810167ffffffffffffffff8111828210171561381a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b73ffffffffffffffffffffffffffffffffffffffff8116811461384257600080fd5b50565b803561385081613820565b919050565b801515811461384257600080fd5b803561385081613855565b803560ff8116811461385057600080fd5b60008060008060008587036101a081121561389957600080fd5b86359550602087013594506040870135935060608701359250610120807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80830112156138e457600080fd5b6138ec6137cf565b91506080880135825260a0880135602083015261390b60c08901613845565b604083015261391c60e08901613845565b606083015261010061392f818a01613845565b608084015261393f828a01613863565b60a08401526139516101408a01613845565b60c08401526139636101608a0161386e565b60e08401526139756101808a01613845565b9083015250949793965091945092919050565b60006020828403121561399a57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156139e3576139e36139a1565b500190565b6000602082840312156139fa57600080fd5b815161265481613820565b60008060008060808587031215613a1b57600080fd5b845193506020850151925060408501519150606085015164ffffffffff81168114613a4557600080fd5b939692955090935050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a8857613a886139a1565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060208083528351808285015260005b81811015613ae957858101830151858201604001528201613acd565b81811115613afb576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060208284031215613b4157600080fd5b815161265481613855565b600082613b82577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015613b9957613b996139a1565b500390565b60008060408385031215613bb157600080fd5b505080516020909101519092909150565b600080600060608486031215613bd757600080fd5b8351925060208401519150604084015190509250925092565b600181815b80851115613c4957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613c2f57613c2f6139a1565b80851615613c3c57918102915b93841c9390800290613bf5565b509250929050565b600082613c6057506001612bd5565b81613c6d57506000612bd5565b8160018114613c835760028114613c8d57613ca9565b6001915050612bd5565b60ff841115613c9e57613c9e6139a1565b50506001821b612bd5565b5060208310610133831016604e8410600b8410161715613ccc575081810a612bd5565b613cd68383613bf0565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613d0857613d086139a1565b029392505050565b60006126548383613c51565b60006fffffffffffffffffffffffffffffffff83811690831681811015613d4557613d456139a1565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115613d7857613d786139a1565b0194935050505056fea264697066735822122052511c196d4c83cb8bfb3e2a0bde2c5c70401d6569f162ef2f8db775f7356ba464736f6c634300080a0033

I couldn't really point out in the source code where this placeholder part is coming from. It might be useful to know where it's coming from when we're verifying similar contracts.

Also, another reason to have creation bytecode as the basis of the verification?

View in Huly HI-403

@Hellobloc
Copy link

Hellobloc commented Apr 25, 2023

I think this can help you guys.
https://docs.soliditylang.org/en/v0.8.19/contracts.html#call-protection-for-libraries

@Hellobloc
Copy link

Also I am curious about your opinion on this issue, do you think such a contract can be considered as a library contract, at least its source code verification results describe it as a library.

But the ADDRESS in its bytecode is not its address, which makes it violate some library restrictions, such as not being self-destructible!
https://sepolia.etherscan.io/address/0xaC19f5AA4e9094E69E3544a0374e2ed3488Cc7b1#code

@marcocastignoli marcocastignoli self-assigned this Apr 26, 2023
@marcocastignoli
Copy link
Member

@Hellobloc

I think this can help you guys. https://docs.soliditylang.org/en/v0.8.19/contracts.html#call-protection-for-libraries

It's definitely this, I cite the docs here:

More specifically, the runtime code of a library always starts with a push instruction, which is a zero of 20 bytes at compilation time. When the deploy code runs, this constant is replaced in memory by the current address and this modified code is stored in the contract.
[...]
This means that the actual code stored on chain for a library is different from the code reported by the compiler as deployedBytecode.

Now I'll debug and search for a way to catch this case

@marcocastignoli
Copy link
Member

I think that we can check for

OPCODE NAME
0x73 PUSH20

followed by a 0 of 20 bytes. I'm trying to implement this.

@marcocastignoli
Copy link
Member

marcocastignoli commented Apr 26, 2023

I need to check if:

  1. we can optimize the code by calling checkCallProtectionAndReplaceAddress only for specific cases
  2. we need to add it also in matchWithCreationTx

@kuzdogan
Copy link
Member Author

kuzdogan commented Apr 26, 2023

I need to check if:

  1. we can optimize the code by calling checkCallProtectionAndReplaceAddress only for specific cases
  2. we need to add it also in matchWithCreationTx
  1. We can check the recompilation output if the metadata being compiled and to be verified is a library. Can you check the metadata and the recompilation output for differences of a contract vs library?
  2. No we shouldn't need to do that as creation bytecodes will both have 000...000s at that place

@marcocastignoli
Copy link
Member

  1. Nice idea, I'll check it right now
  2. of course, I wrote the doubt even before thinking about it, just to not forget 😆

Thanks for the feedback

@kuzdogan
Copy link
Member Author

We should also check on which Solidity version "call protection" was implemented and check the version of the contract as well.

@marcocastignoli
Copy link
Member

We asked more info to the Solidity team, they say:

Finding 73 plus 20 bytes of 00 anywhere in the bytecode should probably mostly work - but it doesn't have to be in the beginning

We'll wait to fix this this for now.

@kuzdogan
Copy link
Member Author

I've checked with the Solidity team and it seems there are two cases:

  1. When compiling with via-IR the "placeholders" can be somewhere else than the beginning of the code but then these should be present in immutableReferences
  2. With the legacy compilation, this is found in the beginning of the code and checking 7F000... should be enough.

Can you please check the 1. case and make sure we cover that?

@marcocastignoli
Copy link
Member

@kuzdogan confirmed.

The following library

pragma solidity 0.8.19;
library Ballot {
    function giveRightToVote() public {
        uint8 tempnumber = 0;
        tempnumber += 1;
    }
}

when "viaIR": true, compiles to :

{
	"functionDebugData": {},
	"generatedSources": [],
	"immutableReferences": {
		"library_deploy_address": [
			{
				"length": 32,
				"start": 36
			}
		]
	},
	"linkReferences": {},
	"object": "6004361015600c57600080fd5b6000803560e01c63fe073d1114602157600080fd5b307f0000000000000000000000000000000000000000000000000000000000000000146054578060031936011260545780f35b80fdfea26469706673582212201f5947cd5b1859e5538635710cbb976896344300763d9c3f1c9ed5ebf1ee6a5764736f6c63430008130033",
	"opcodes": "PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0xC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0xFE073D11 EQ PUSH1 0x21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST ADDRESS PUSH32 0x0 EQ PUSH1 0x54 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH1 0x54 JUMPI DUP1 RETURN JUMPDEST DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x1F MSIZE SELFBALANCE 0xCD JUMPDEST XOR MSIZE 0xE5 MSTORE8 DUP7 CALLDATALOAD PUSH18 0xCBB976896344300763D9C3F1C9ED5EBF1EE PUSH11 0x5764736F6C634300081300 CALLER ",
	"sourceMap": "24:119:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
}

but when "viaIR": false, compiles to :

{
    "functionDebugData": {...},
    "generatedSources": [...],
    "immutableReferences": {},
    "linkReferences": {},
    "object": "730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063fe073d11146038575b600080fd5b818015604357600080fd5b50604a604c565b005b60006057600182605b565b5050565b60ff8181168382160190811115608157634e487b7160e01b600052601160045260246000fd5b9291505056fea2646970667358221220520c77e3449f05c27b1014df9e58e5f2b6463f139ea3cefde935a6f15b27f03a64736f6c63430008130033",
    "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x33 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xFE073D11 EQ PUSH1 0x38 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH1 0x43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4A PUSH1 0x4C JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH1 0x57 PUSH1 0x1 DUP3 PUSH1 0x5B JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0xFF DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP2 GT ISZERO PUSH1 0x81 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE 0xC PUSH24 0xE3449F05C27B1014DF9E58E5F2B6463F139EA3CEFDE935A6 CALL JUMPDEST 0x27 CREATE GASPRICE PUSH5 0x736F6C6343 STOP ADDMOD SGT STOP CALLER ",
    "sourceMap": "24:119:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;45:96;;;;;;;;;;;;;:::i;:::-;;;89:16;119:15;133:1;89:16;119:15;:::i;:::-;-1:-1:-1;;45:96:0:o;14:245:1:-;102:4;81:12;;;95;;;77:31;;120:13;;117:136;;;175:10;170:3;166:20;163:1;156:31;210:4;207:1;200:15;238:4;235:1;228:15;117:136;14:245;;;;:::o"
}

marcocastignoli added a commit that referenced this issue Apr 28, 2023
* legacy compilation placeholder test case
* via-IR test case
kuzdogan pushed a commit that referenced this issue May 3, 2023
* #996 handle libraries with call protection

* #996 add tests for call protection
* legacy compilation placeholder test case
* via-IR test case
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants