Created
November 20, 2024 10:49
-
-
Save pasevin/c6da014b49fe243d52dc7a511dca9a58 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"abi": [ | |
{ | |
"type": "constructor", | |
"inputs": [ | |
{ | |
"name": "_logic", | |
"type": "address", | |
"internalType": "address" | |
}, | |
{ | |
"name": "initialOwner", | |
"type": "address", | |
"internalType": "address" | |
}, | |
{ | |
"name": "_data", | |
"type": "bytes", | |
"internalType": "bytes" | |
} | |
], | |
"stateMutability": "payable" | |
}, | |
{ | |
"type": "fallback", | |
"stateMutability": "payable" | |
}, | |
{ | |
"type": "event", | |
"name": "AdminChanged", | |
"inputs": [ | |
{ | |
"name": "previousAdmin", | |
"type": "address", | |
"indexed": false, | |
"internalType": "address" | |
}, | |
{ | |
"name": "newAdmin", | |
"type": "address", | |
"indexed": false, | |
"internalType": "address" | |
} | |
], | |
"anonymous": false | |
}, | |
{ | |
"type": "event", | |
"name": "Upgraded", | |
"inputs": [ | |
{ | |
"name": "implementation", | |
"type": "address", | |
"indexed": true, | |
"internalType": "address" | |
} | |
], | |
"anonymous": false | |
}, | |
{ | |
"type": "error", | |
"name": "AddressEmptyCode", | |
"inputs": [ | |
{ | |
"name": "target", | |
"type": "address", | |
"internalType": "address" | |
} | |
] | |
}, | |
{ | |
"type": "error", | |
"name": "ERC1967InvalidAdmin", | |
"inputs": [ | |
{ | |
"name": "admin", | |
"type": "address", | |
"internalType": "address" | |
} | |
] | |
}, | |
{ | |
"type": "error", | |
"name": "ERC1967InvalidImplementation", | |
"inputs": [ | |
{ | |
"name": "implementation", | |
"type": "address", | |
"internalType": "address" | |
} | |
] | |
}, | |
{ | |
"type": "error", | |
"name": "ERC1967NonPayable", | |
"inputs": [] | |
}, | |
{ | |
"type": "error", | |
"name": "FailedCall", | |
"inputs": [] | |
}, | |
{ | |
"type": "error", | |
"name": "ProxyDeniedAdminAccess", | |
"inputs": [] | |
} | |
], | |
"bytecode": { | |
"object": "0x60a0604052604051610e84380380610e848339810160408190526100229161039d565b828161002e828261008f565b50508160405161003d9061033a565b6001600160a01b039091168152602001604051809103906000f080158015610069573d6000803e3d6000fd5b506001600160a01b031660805261008761008260805190565b6100ee565b50505061048f565b6100988261015c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100e2576100dd82826101db565b505050565b6100ea610252565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012e600080516020610e64833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a161015981610273565b50565b806001600160a01b03163b60000361019757604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101f89190610473565b600060405180830381855af49150503d8060008114610233576040519150601f19603f3d011682016040523d82523d6000602084013e610238565b606091505b5090925090506102498583836102b2565b95945050505050565b34156102715760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b03811661029d57604051633173bdd160e11b81526000600482015260240161018e565b80600080516020610e648339815191526101ba565b6060826102c7576102c282610311565b61030a565b81511580156102de57506001600160a01b0384163b155b1561030757604051639996b31560e01b81526001600160a01b038516600482015260240161018e565b50805b9392505050565b8051156103215780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b61052c8061093883390190565b80516001600160a01b038116811461035e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561039457818101518382015260200161037c565b50506000910152565b6000806000606084860312156103b257600080fd5b6103bb84610347565b92506103c960208501610347565b60408501519092506001600160401b038111156103e557600080fd5b8401601f810186136103f657600080fd5b80516001600160401b0381111561040f5761040f610363565b604051601f8201601f19908116603f011681016001600160401b038111828210171561043d5761043d610363565b60405281815282820160200188101561045557600080fd5b610466826020830160208601610379565b8093505050509250925092565b60008251610485818460208701610379565b9190910192915050565b60805161048f6104a960003960006010015261048f6000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051610212919061042a565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff81111561039857600080fd5b8301601f810185136103a957600080fd5b803567ffffffffffffffff8111156103c3576103c361033c565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156103f2576103f261033c565b60405281815282820160200187101561040a57600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000825160005b8181101561044b5760208186018101518583015201610431565b50600092019182525091905056fea2646970667358221220f1a05db4c19cba06097c1ea8b33cd49a5d16f90a0be2ba17b8215685102436d664736f6c634300081c0033608060405234801561001057600080fd5b5060405161052c38038061052c83398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b61042f806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a9190610396565b3480156100f057600080fd5b506100646100ff3660046103b0565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103cd565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff8111156102be57600080fd5b8401601f810186136102cf57600080fd5b803567ffffffffffffffff8111156102e9576102e961025c565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156103185761031861025c565b60405281815282820160200188101561033057600080fd5b816020840160208301376000602083830101528093505050509250925092565b6000815180845260005b818110156103765760208185018101518683018201520161035a565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a96020830184610350565b9392505050565b6000602082840312156103c257600080fd5b81356103a981610247565b6001600160a01b03831681526040602082018190526000906103f190830184610350565b94935050505056fea26469706673582212206d40211935d19942714016656db4106640756251b6cb9d72b2ab809228ff6a0664736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", | |
"sourceMap": "4314:2231:33:-:0;;;5157:296;;;;;;;;;;;;;;;;;;:::i;:::-;5248:6;5256:5;1155:52:26;5248:6:33;5256:5;1155:29:26;:52::i;:::-;1081:133;;5305:12:33::1;5290:28;;;;;:::i;:::-;-1:-1:-1::0;;;;;1837:32:58;;;1819:51;;1807:2;1792:18;5290:28:33::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;;;5273:46:33::1;;::::0;5407:39:::1;5432:13;5600:6:::0;;;5520:93;5432:13:::1;5407:24;:39::i;:::-;5157:296:::0;;;4314:2231;;2264:344:27;2355:37;2374:17;2355:18;:37::i;:::-;2407:36;;-1:-1:-1;;;;;2407:36:27;;;;;;;;2458:11;;:15;2454:148;;2489:53;2518:17;2537:4;2489:28;:53::i;:::-;;2264:344;;:::o;2454:148::-;2573:18;:16;:18::i;:::-;2264:344;;:::o;3827:142::-;3890:43;3912:10;-1:-1:-1;;;;;;;;;;;3356:44:27;-1:-1:-1;;;;;3356:44:27;;3287:120;3912:10;3890:43;;;-1:-1:-1;;;;;2073:32:58;;;2055:51;;2142:32;;;2137:2;2122:18;;2115:60;2028:18;3890:43:27;;;;;;;3943:19;3953:8;3943:9;:19::i;:::-;3827:142;:::o;1671:281::-;1748:17;-1:-1:-1;;;;;1748:29:27;;1781:1;1748:34;1744:119;;1805:47;;-1:-1:-1;;;1805:47:27;;-1:-1:-1;;;;;1837:32:58;;1805:47:27;;;1819:51:58;1792:18;;1805:47:27;;;;;;;;1744:119;1928:17;811:66;1872:47;:73;;-1:-1:-1;;;;;;1872:73:27;-1:-1:-1;;;;;1872:73:27;;;;;;;;;;-1:-1:-1;1671:281:27:o;3900:253:34:-;3983:12;4008;4022:23;4049:6;-1:-1:-1;;;;;4049:19:34;4069:4;4049:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4007:67:34;;-1:-1:-1;4007:67:34;-1:-1:-1;4091:55:34;4118:6;4007:67;;4091:26;:55::i;:::-;4084:62;3900:253;-1:-1:-1;;;;;3900:253:34:o;6113:122:27:-;6163:9;:13;6159:70;;6199:19;;-1:-1:-1;;;6199:19:27;;;;;;;;;;;6159:70;6113:122::o;3490:217::-;-1:-1:-1;;;;;3549:22:27;;3545:91;;3594:31;;-1:-1:-1;;;3594:31:27;;3622:1;3594:31;;;1819:51:58;1792:18;;3594:31:27;1673:203:58;3545:91:27;3692:8;-1:-1:-1;;;;;;;;;;;3645:38:27;1899:163:38:o;4421:582:34:-;4565:12;4594:7;4589:408;;4617:19;4625:10;4617:7;:19::i;:::-;4589:408;;;4841:17;;:22;:49;;;;-1:-1:-1;;;;;;4867:18:34;;;:23;4841:49;4837:119;;;4917:24;;-1:-1:-1;;;4917:24:34;;-1:-1:-1;;;;;1837:32:58;;4917:24:34;;;1819:51:58;1792:18;;4917:24:34;1673:203:58;4837:119:34;-1:-1:-1;4976:10:34;4589:408;4421:582;;;;;:::o;5543:487::-;5674:17;;:21;5670:354;;5871:10;5865:17;5927:15;5914:10;5910:2;5906:19;5899:44;5670:354;5994:19;;-1:-1:-1;;;5994:19:34;;;;;;;;;;;4314:2231:33;;;;;;;;:::o;14:177:58:-;93:13;;-1:-1:-1;;;;;135:31:58;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:127::-;257:10;252:3;248:20;245:1;238:31;288:4;285:1;278:15;312:4;309:1;302:15;328:250;413:1;423:113;437:6;434:1;431:13;423:113;;;513:11;;;507:18;494:11;;;487:39;459:2;452:10;423:113;;;-1:-1:-1;;570:1:58;552:16;;545:27;328:250::o;583:1085::-;680:6;688;696;749:2;737:9;728:7;724:23;720:32;717:52;;;765:1;762;755:12;717:52;788:40;818:9;788:40;:::i;:::-;778:50;;847:49;892:2;881:9;877:18;847:49;:::i;:::-;940:2;925:18;;919:25;837:59;;-1:-1:-1;;;;;;956:30:58;;953:50;;;999:1;996;989:12;953:50;1022:22;;1075:4;1067:13;;1063:27;-1:-1:-1;1053:55:58;;1104:1;1101;1094:12;1053:55;1131:9;;-1:-1:-1;;;;;1152:30:58;;1149:56;;;1185:18;;:::i;:::-;1234:2;1228:9;1326:2;1288:17;;-1:-1:-1;;1284:31:58;;;1317:2;1280:40;1276:54;1264:67;;-1:-1:-1;;;;;1346:34:58;;1382:22;;;1343:62;1340:88;;;1408:18;;:::i;:::-;1444:2;1437:22;1468;;;1509:15;;;1526:2;1505:24;1502:37;-1:-1:-1;1499:57:58;;;1552:1;1549;1542:12;1499:57;1565:72;1630:6;1625:2;1617:6;1613:15;1608:2;1604;1600:11;1565:72;:::i;:::-;1656:6;1646:16;;;;;583:1085;;;;;:::o;2186:287::-;2315:3;2353:6;2347:13;2369:66;2428:6;2423:3;2416:4;2408:6;2404:17;2369:66;:::i;:::-;2451:16;;;;;2186:287;-1:-1:-1;;2186:287:58:o;:::-;4314:2231:33;;;;;;;;;;;;", | |
"linkReferences": {} | |
}, | |
"deployedBytecode": { | |
"object": "0x608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051610212919061042a565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff81111561039857600080fd5b8301601f810185136103a957600080fd5b803567ffffffffffffffff8111156103c3576103c361033c565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156103f2576103f261033c565b60405281815282820160200187101561040a57600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000825160005b8181101561044b5760208186018101518583015201610431565b50600092019182525091905056fea2646970667358221220f1a05db4c19cba06097c1ea8b33cd49a5d16f90a0be2ba17b8215685102436d664736f6c634300081c0033", | |
"sourceMap": "4314:2231:33:-:0;;;2649:11:28;:9;:11::i;:::-;4314:2231:33;5755:369;5600:6;-1:-1:-1;;;;;5816:27:33;:10;:27;5812:306;;5863:7;;-1:-1:-1;;;;;;5863:7:33;-1:-1:-1;;;5863:65:33;5859:201;;5955:24;;-1:-1:-1;;;5955:24:33;;;;;;;;;;;5859:201;6018:27;:25;:27::i;:::-;5755:369::o;5812:306::-;6090:17;:15;:17::i;6326:217::-;6382:25;;6441:12;:8;6450:1;6441:8;6382:25;6441:12;:::i;:::-;6430:42;;;;;;;:::i;:::-;6381:91;;;;6482:54;6512:17;6531:4;6482:29;:54::i;:::-;6371:172;;6326:217::o;2323:83:28:-;2371:28;2381:17;:15;:17::i;:::-;2371:9;:28::i;2264:344:27:-;2355:37;2374:17;2355:18;:37::i;:::-;2407:36;;-1:-1:-1;;;;;2407:36:27;;;;;;;;2458:11;;:15;2454:148;;2489:53;2518:17;2537:4;2489:28;:53::i;:::-;;6371:172:33;;6326:217::o;2454:148:27:-;2573:18;:16;:18::i;1583:132:26:-;1650:7;1676:32;811:66:27;1519:53;-1:-1:-1;;;;;1519:53:27;;1441:138;1676:32:26;1669:39;;1583:132;:::o;949:895:28:-;1287:14;1284:1;1281;1268:34;1501:1;1498;1482:14;1479:1;1463:14;1456:5;1443:60;1577:16;1574:1;1571;1556:38;1615:6;1682:66;;;;1797:16;1794:1;1787:27;1682:66;1717:16;1714:1;1707:27;1671:281:27;1748:17;-1:-1:-1;;;;;1748:29:27;;1781:1;1748:34;1744:119;;1805:47;;-1:-1:-1;;;1805:47:27;;-1:-1:-1;;;;;1777:32:58;;1805:47:27;;;1759:51:58;1732:18;;1805:47:27;;;;;;;;1744:119;811:66;1872:73;;-1:-1:-1;;;;;;1872:73:27;-1:-1:-1;;;;;1872:73:27;;;;;;;;;;1671:281::o;3900:253:34:-;3983:12;4008;4022:23;4049:6;-1:-1:-1;;;;;4049:19:34;4069:4;4049:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4007:67;;;;4091:55;4118:6;4126:7;4135:10;4091:26;:55::i;:::-;4084:62;3900:253;-1:-1:-1;;;;;3900:253:34:o;6113:122:27:-;6163:9;:13;6159:70;;6199:19;;-1:-1:-1;;;6199:19:27;;;;;;;;;;;4421:582:34;4565:12;4594:7;4589:408;;4617:19;4625:10;4617:7;:19::i;:::-;4589:408;;;4841:17;;:22;:49;;;;-1:-1:-1;;;;;;4867:18:34;;;:23;4841:49;4837:119;;;4917:24;;-1:-1:-1;;;4917:24:34;;-1:-1:-1;;;;;1777:32:58;;4917:24:34;;;1759:51:58;1732:18;;4917:24:34;1613:203:58;4837:119:34;-1:-1:-1;4976:10:34;4589:408;4421:582;;;;;:::o;5543:487::-;5674:17;;:21;5670:354;;5871:10;5865:17;5927:15;5914:10;5910:2;5906:19;5899:44;5670:354;5994:19;;-1:-1:-1;;;5994:19:34;;;;;;;;;;;14:331:58;119:9;130;172:8;160:10;157:24;154:44;;;194:1;191;184:12;154:44;223:6;213:8;210:20;207:40;;;243:1;240;233:12;207:40;-1:-1:-1;;269:23:58;;;314:25;;;;;-1:-1:-1;14:331:58:o;350:127::-;411:10;406:3;402:20;399:1;392:31;442:4;439:1;432:15;466:4;463:1;456:15;482:1126;567:6;575;628:2;616:9;607:7;603:23;599:32;596:52;;;644:1;641;634:12;596:52;670:23;;-1:-1:-1;;;;;722:31:58;;712:42;;702:70;;768:1;765;758:12;702:70;791:5;-1:-1:-1;847:2:58;832:18;;819:32;874:18;863:30;;860:50;;;906:1;903;896:12;860:50;929:22;;982:4;974:13;;970:27;-1:-1:-1;960:55:58;;1011:1;1008;1001:12;960:55;1051:2;1038:16;1077:18;1069:6;1066:30;1063:56;;;1099:18;;:::i;:::-;1148:2;1142:9;1240:2;1202:17;;-1:-1:-1;;1198:31:58;;;1231:2;1194:40;1190:54;1178:67;;1275:18;1260:34;;1296:22;;;1257:62;1254:88;;;1322:18;;:::i;:::-;1358:2;1351:22;1382;;;1423:15;;;1440:2;1419:24;1416:37;-1:-1:-1;1413:57:58;;;1466:1;1463;1456:12;1413:57;1522:6;1517:2;1513;1509:11;1504:2;1496:6;1492:15;1479:50;1575:1;1570:2;1561:6;1553;1549:19;1545:28;1538:39;1596:6;1586:16;;;;;482:1126;;;;;:::o;1821:412::-;1950:3;1988:6;1982:13;2013:1;2023:129;2037:6;2034:1;2031:13;2023:129;;;2135:4;2119:14;;;2115:25;;2109:32;2096:11;;;2089:53;2052:12;2023:129;;;-1:-1:-1;2207:1:58;2171:16;;2196:13;;;-1:-1:-1;2171:16:58;1821:412;-1:-1:-1;1821:412:58:o", | |
"linkReferences": {}, | |
"immutableReferences": { | |
"37615": [ | |
{ | |
"start": 16, | |
"length": 32 | |
} | |
] | |
} | |
}, | |
"methodIdentifiers": {}, | |
"rawMetadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProxyDeniedAdminAccess\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable through an associated {ProxyAdmin} instance. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches the {ITransparentUpgradeableProxy-upgradeToAndCall} function exposed by the proxy itself. 2. If the admin calls the proxy, it can call the `upgradeToAndCall` function but any other call won't be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error indicating the proxy admin cannot fallback to the target implementation. These properties mean that the admin account can only be used for upgrading the proxy, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. For this reason, the proxy deploys an instance of {ProxyAdmin} and allows upgrades only if they come through it. You should think of the `ProxyAdmin` instance as the administrative interface of the proxy, including the ability to change who can trigger upgrades by transferring ownership. NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not inherit from that interface, and instead `upgradeToAndCall` is implicitly implemented using a custom dispatch mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to fully implement transparency without decoding reverts caused by selector clashes between the proxy and the implementation. NOTE: This proxy does not inherit from {Context} deliberately. The {ProxyAdmin} of this contract won't send a meta-transaction in any way, and any other meta-transaction setup should be made in the implementation contract. IMPORTANT: This contract avoids unnecessary storage reads by setting the admin only during construction as an immutable variable, preventing any changes thereafter. However, the admin slot defined in ERC-1967 can still be overwritten by the implementation logic pointed to by this proxy. In such cases, the contract may end up in an undesirable state where the admin slot is different from the actual admin. Relying on the value of the admin slot is generally fine if the implementation is trusted. WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could render the `upgradeToAndCall` function inaccessible, preventing upgradeability and compromising transparency.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidAdmin(address)\":[{\"details\":\"The `admin` of the proxy is invalid.\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"ProxyDeniedAdminAccess()\":[{\"details\":\"The proxy caller is the current admin, and can't fallback to the proxy target.\"}]},\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by an instance of a {ProxyAdmin} with an `initialOwner`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0x0a8a5b994d4c4da9f61d128945cc8c9e60dcbc72bf532f72ae42a48ea90eed9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e63ae15b6b1079b9d3c73913424d4278139f9e9c9658316675b9c48d5883a50d\",\"dweb:/ipfs/QmWLxBYfp8j1YjNMabWgv75ELTaK2eEYEEGx7qsJbxVZZq\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x911c3346ee26afe188f3b9dc267ef62a7ccf940aba1afa963e3922f0ca3d8a06\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04539f4419e44a831807d7203375d2bc6a733da256efd02e51290f5d5015218c\",\"dweb:/ipfs/QmPZ97gsAAgaMRPiE2WJfkzRsudQnW5tPAvMgGj1jcTJtR\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol\":{\"keccak256\":\"0xeb19221d51578ea190f0b7d807c5f196db6ff4eca90fee396f45ce9669080ba0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e4ca4196dab20274d1276d902d17034065f014aeebf496f20e39e760899650b0\",\"dweb:/ipfs/QmXFoF93GmZgZHbUvSqLjBGnQ3MY429Bnvk7SvLKEUsEAN\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"keccak256\":\"0x724b755843cff10a8e1503d374b857c9e7648be24e7acf1e5bee0584f1b0505c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://740ad3ba1c12e426ea32cf234f445431a13efa8dbed38b53c869237e31fc8347\",\"dweb:/ipfs/QmQ3UKUnBQn4gjxjDNGuDLQWuQqcxWzyj1HzwjFgjAJBqh\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]}},\"version\":1}", | |
"metadata": { | |
"compiler": { | |
"version": "0.8.28+commit.7893614a" | |
}, | |
"language": "Solidity", | |
"output": { | |
"abi": [ | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "_logic", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "initialOwner", | |
"type": "address" | |
}, | |
{ | |
"internalType": "bytes", | |
"name": "_data", | |
"type": "bytes" | |
} | |
], | |
"stateMutability": "payable", | |
"type": "constructor" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "target", | |
"type": "address" | |
} | |
], | |
"type": "error", | |
"name": "AddressEmptyCode" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "admin", | |
"type": "address" | |
} | |
], | |
"type": "error", | |
"name": "ERC1967InvalidAdmin" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "implementation", | |
"type": "address" | |
} | |
], | |
"type": "error", | |
"name": "ERC1967InvalidImplementation" | |
}, | |
{ | |
"inputs": [], | |
"type": "error", | |
"name": "ERC1967NonPayable" | |
}, | |
{ | |
"inputs": [], | |
"type": "error", | |
"name": "FailedCall" | |
}, | |
{ | |
"inputs": [], | |
"type": "error", | |
"name": "ProxyDeniedAdminAccess" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "previousAdmin", | |
"type": "address", | |
"indexed": false | |
}, | |
{ | |
"internalType": "address", | |
"name": "newAdmin", | |
"type": "address", | |
"indexed": false | |
} | |
], | |
"type": "event", | |
"name": "AdminChanged", | |
"anonymous": false | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "implementation", | |
"type": "address", | |
"indexed": true | |
} | |
], | |
"type": "event", | |
"name": "Upgraded", | |
"anonymous": false | |
}, | |
{ | |
"inputs": [], | |
"stateMutability": "payable", | |
"type": "fallback" | |
} | |
], | |
"devdoc": { | |
"kind": "dev", | |
"methods": { | |
"constructor": { | |
"details": "Initializes an upgradeable proxy managed by an instance of a {ProxyAdmin} with an `initialOwner`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." | |
} | |
}, | |
"version": 1 | |
}, | |
"userdoc": { | |
"kind": "user", | |
"methods": {}, | |
"version": 1 | |
} | |
}, | |
"settings": { | |
"remappings": [ | |
"@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", | |
"@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/", | |
"ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/", | |
"erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", | |
"forge-std/=lib/forge-std/src/", | |
"halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/", | |
"openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", | |
"openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/", | |
"openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/", | |
"solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/" | |
], | |
"optimizer": { | |
"enabled": true, | |
"runs": 200 | |
}, | |
"metadata": { | |
"bytecodeHash": "ipfs" | |
}, | |
"compilationTarget": { | |
"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": "TransparentUpgradeableProxy" | |
}, | |
"evmVersion": "paris", | |
"libraries": {} | |
}, | |
"sources": { | |
"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/Ownable.sol": { | |
"keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", | |
"urls": [ | |
"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", | |
"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" | |
], | |
"license": "MIT" | |
}, | |
"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol": { | |
"keccak256": "0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486", | |
"urls": [ | |
"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d", | |
"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7" | |
], | |
"license": "MIT" | |
}, | |
"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { | |
"keccak256": "0x0a8a5b994d4c4da9f61d128945cc8c9e60dcbc72bf532f72ae42a48ea90eed9a", | |
"urls": [ | |
"bzz-raw://e63ae15b6b1079b9d3c73913424d4278139f9e9c9658316675b9c48d5883a50d", | |
"dweb:/ipfs/QmWLxBYfp8j1YjNMabWgv75ELTaK2eEYEEGx7qsJbxVZZq" | |
], | |
"license": "MIT" | |
}, | |
"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol": { | |
"keccak256": "0x911c3346ee26afe188f3b9dc267ef62a7ccf940aba1afa963e3922f0ca3d8a06", | |
"urls": [ | |
"bzz-raw://04539f4419e44a831807d7203375d2bc6a733da256efd02e51290f5d5015218c", | |
"dweb:/ipfs/QmPZ97gsAAgaMRPiE2WJfkzRsudQnW5tPAvMgGj1jcTJtR" | |
], | |
"license": "MIT" | |
}, | |
"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { | |
"keccak256": "0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd", | |
"urls": [ | |
"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac", | |
"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e" | |
], | |
"license": "MIT" | |
}, | |
"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { | |
"keccak256": "0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c", | |
"urls": [ | |
"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa", | |
"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM" | |
], | |
"license": "MIT" | |
}, | |
"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol": { | |
"keccak256": "0xeb19221d51578ea190f0b7d807c5f196db6ff4eca90fee396f45ce9669080ba0", | |
"urls": [ | |
"bzz-raw://e4ca4196dab20274d1276d902d17034065f014aeebf496f20e39e760899650b0", | |
"dweb:/ipfs/QmXFoF93GmZgZHbUvSqLjBGnQ3MY429Bnvk7SvLKEUsEAN" | |
], | |
"license": "MIT" | |
}, | |
"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { | |
"keccak256": "0x724b755843cff10a8e1503d374b857c9e7648be24e7acf1e5bee0584f1b0505c", | |
"urls": [ | |
"bzz-raw://740ad3ba1c12e426ea32cf234f445431a13efa8dbed38b53c869237e31fc8347", | |
"dweb:/ipfs/QmQ3UKUnBQn4gjxjDNGuDLQWuQqcxWzyj1HzwjFgjAJBqh" | |
], | |
"license": "MIT" | |
}, | |
"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol": { | |
"keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", | |
"urls": [ | |
"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", | |
"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" | |
], | |
"license": "MIT" | |
}, | |
"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Context.sol": { | |
"keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", | |
"urls": [ | |
"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", | |
"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" | |
], | |
"license": "MIT" | |
}, | |
"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol": { | |
"keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", | |
"urls": [ | |
"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", | |
"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" | |
], | |
"license": "MIT" | |
}, | |
"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { | |
"keccak256": "0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97", | |
"urls": [ | |
"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b", | |
"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM" | |
], | |
"license": "MIT" | |
} | |
}, | |
"version": 1 | |
}, | |
"storageLayout": { | |
"storage": [], | |
"types": {} | |
}, | |
"ast": { | |
"absolutePath": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol", | |
"id": 37725, | |
"exportedSymbols": { | |
"ERC1967Proxy": [37054], | |
"ERC1967Utils": [37348], | |
"IERC1967": [37006], | |
"ITransparentUpgradeableProxy": [37610], | |
"ProxyAdmin": [37588], | |
"TransparentUpgradeableProxy": [37724] | |
}, | |
"nodeType": "SourceUnit", | |
"src": "133:6413:33", | |
"nodes": [ | |
{ | |
"id": 37590, | |
"nodeType": "PragmaDirective", | |
"src": "133:24:33", | |
"nodes": [], | |
"literals": ["solidity", "^", "0.8", ".20"] | |
}, | |
{ | |
"id": 37592, | |
"nodeType": "ImportDirective", | |
"src": "159:57:33", | |
"nodes": [], | |
"absolutePath": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol", | |
"file": "../ERC1967/ERC1967Utils.sol", | |
"nameLocation": "-1:-1:-1", | |
"scope": 37725, | |
"sourceUnit": 37349, | |
"symbolAliases": [ | |
{ | |
"foreign": { | |
"id": 37591, | |
"name": "ERC1967Utils", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": 37348, | |
"src": "167:12:33", | |
"typeDescriptions": {} | |
}, | |
"nameLocation": "-1:-1:-1" | |
} | |
], | |
"unitAlias": "" | |
}, | |
{ | |
"id": 37594, | |
"nodeType": "ImportDirective", | |
"src": "217:57:33", | |
"nodes": [], | |
"absolutePath": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol", | |
"file": "../ERC1967/ERC1967Proxy.sol", | |
"nameLocation": "-1:-1:-1", | |
"scope": 37725, | |
"sourceUnit": 37055, | |
"symbolAliases": [ | |
{ | |
"foreign": { | |
"id": 37593, | |
"name": "ERC1967Proxy", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": 37054, | |
"src": "225:12:33", | |
"typeDescriptions": {} | |
}, | |
"nameLocation": "-1:-1:-1" | |
} | |
], | |
"unitAlias": "" | |
}, | |
{ | |
"id": 37596, | |
"nodeType": "ImportDirective", | |
"src": "275:55:33", | |
"nodes": [], | |
"absolutePath": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol", | |
"file": "../../interfaces/IERC1967.sol", | |
"nameLocation": "-1:-1:-1", | |
"scope": 37725, | |
"sourceUnit": 37007, | |
"symbolAliases": [ | |
{ | |
"foreign": { | |
"id": 37595, | |
"name": "IERC1967", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": 37006, | |
"src": "283:8:33", | |
"typeDescriptions": {} | |
}, | |
"nameLocation": "-1:-1:-1" | |
} | |
], | |
"unitAlias": "" | |
}, | |
{ | |
"id": 37598, | |
"nodeType": "ImportDirective", | |
"src": "331:44:33", | |
"nodes": [], | |
"absolutePath": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol", | |
"file": "./ProxyAdmin.sol", | |
"nameLocation": "-1:-1:-1", | |
"scope": 37725, | |
"sourceUnit": 37589, | |
"symbolAliases": [ | |
{ | |
"foreign": { | |
"id": 37597, | |
"name": "ProxyAdmin", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": 37588, | |
"src": "339:10:33", | |
"typeDescriptions": {} | |
}, | |
"nameLocation": "-1:-1:-1" | |
} | |
], | |
"unitAlias": "" | |
}, | |
{ | |
"id": 37610, | |
"nodeType": "ContractDefinition", | |
"src": "823:202:33", | |
"nodes": [ | |
{ | |
"id": 37609, | |
"nodeType": "FunctionDefinition", | |
"src": "932:91:33", | |
"nodes": [], | |
"documentation": { | |
"id": 37602, | |
"nodeType": "StructuredDocumentation", | |
"src": "880:47:33", | |
"text": "@dev See {UUPSUpgradeable-upgradeToAndCall}" | |
}, | |
"functionSelector": "4f1ef286", | |
"implemented": false, | |
"kind": "function", | |
"modifiers": [], | |
"name": "upgradeToAndCall", | |
"nameLocation": "941:16:33", | |
"parameters": { | |
"id": 37607, | |
"nodeType": "ParameterList", | |
"parameters": [ | |
{ | |
"constant": false, | |
"id": 37604, | |
"mutability": "mutable", | |
"name": "newImplementation", | |
"nameLocation": "966:17:33", | |
"nodeType": "VariableDeclaration", | |
"scope": 37609, | |
"src": "958:25:33", | |
"stateVariable": false, | |
"storageLocation": "default", | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
}, | |
"typeName": { | |
"id": 37603, | |
"name": "address", | |
"nodeType": "ElementaryTypeName", | |
"src": "958:7:33", | |
"stateMutability": "nonpayable", | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
} | |
}, | |
"visibility": "internal" | |
}, | |
{ | |
"constant": false, | |
"id": 37606, | |
"mutability": "mutable", | |
"name": "data", | |
"nameLocation": "1000:4:33", | |
"nodeType": "VariableDeclaration", | |
"scope": 37609, | |
"src": "985:19:33", | |
"stateVariable": false, | |
"storageLocation": "calldata", | |
"typeDescriptions": { | |
"typeIdentifier": "t_bytes_calldata_ptr", | |
"typeString": "bytes" | |
}, | |
"typeName": { | |
"id": 37605, | |
"name": "bytes", | |
"nodeType": "ElementaryTypeName", | |
"src": "985:5:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_bytes_storage_ptr", | |
"typeString": "bytes" | |
} | |
}, | |
"visibility": "internal" | |
} | |
], | |
"src": "957:48:33" | |
}, | |
"returnParameters": { | |
"id": 37608, | |
"nodeType": "ParameterList", | |
"parameters": [], | |
"src": "1022:0:33" | |
}, | |
"scope": 37610, | |
"stateMutability": "payable", | |
"virtual": false, | |
"visibility": "external" | |
} | |
], | |
"abstract": false, | |
"baseContracts": [ | |
{ | |
"baseName": { | |
"id": 37600, | |
"name": "IERC1967", | |
"nameLocations": ["865:8:33"], | |
"nodeType": "IdentifierPath", | |
"referencedDeclaration": 37006, | |
"src": "865:8:33" | |
}, | |
"id": 37601, | |
"nodeType": "InheritanceSpecifier", | |
"src": "865:8:33" | |
} | |
], | |
"canonicalName": "ITransparentUpgradeableProxy", | |
"contractDependencies": [], | |
"contractKind": "interface", | |
"documentation": { | |
"id": 37599, | |
"nodeType": "StructuredDocumentation", | |
"src": "377:445:33", | |
"text": " @dev Interface for {TransparentUpgradeableProxy}. In order to implement transparency, {TransparentUpgradeableProxy}\n does not implement this interface directly, and its upgradeability mechanism is implemented by an internal dispatch\n mechanism. The compiler is unaware that these functions are implemented by {TransparentUpgradeableProxy} and will not\n include them in the ABI so this interface must be used to interact with it." | |
}, | |
"fullyImplemented": false, | |
"linearizedBaseContracts": [37610, 37006], | |
"name": "ITransparentUpgradeableProxy", | |
"nameLocation": "833:28:33", | |
"scope": 37725, | |
"usedErrors": [], | |
"usedEvents": [36993, 37000, 37005] | |
}, | |
{ | |
"id": 37724, | |
"nodeType": "ContractDefinition", | |
"src": "4314:2231:33", | |
"nodes": [ | |
{ | |
"id": 37615, | |
"nodeType": "VariableDeclaration", | |
"src": "4708:32:33", | |
"nodes": [], | |
"constant": false, | |
"mutability": "immutable", | |
"name": "_admin", | |
"nameLocation": "4734:6:33", | |
"scope": 37724, | |
"stateVariable": true, | |
"storageLocation": "default", | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
}, | |
"typeName": { | |
"id": 37614, | |
"name": "address", | |
"nodeType": "ElementaryTypeName", | |
"src": "4708:7:33", | |
"stateMutability": "nonpayable", | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
} | |
}, | |
"visibility": "private" | |
}, | |
{ | |
"id": 37618, | |
"nodeType": "ErrorDefinition", | |
"src": "4854:31:33", | |
"nodes": [], | |
"documentation": { | |
"id": 37616, | |
"nodeType": "StructuredDocumentation", | |
"src": "4747:102:33", | |
"text": " @dev The proxy caller is the current admin, and can't fallback to the proxy target." | |
}, | |
"errorSelector": "d2b576ec", | |
"name": "ProxyDeniedAdminAccess", | |
"nameLocation": "4860:22:33", | |
"parameters": { | |
"id": 37617, | |
"nodeType": "ParameterList", | |
"parameters": [], | |
"src": "4882:2:33" | |
} | |
}, | |
{ | |
"id": 37651, | |
"nodeType": "FunctionDefinition", | |
"src": "5157:296:33", | |
"nodes": [], | |
"body": { | |
"id": 37650, | |
"nodeType": "Block", | |
"src": "5263:190:33", | |
"nodes": [], | |
"statements": [ | |
{ | |
"expression": { | |
"id": 37641, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"lValueRequested": false, | |
"leftHandSide": { | |
"id": 37632, | |
"name": "_admin", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": 37615, | |
"src": "5273:6:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
} | |
}, | |
"nodeType": "Assignment", | |
"operator": "=", | |
"rightHandSide": { | |
"arguments": [ | |
{ | |
"arguments": [ | |
{ | |
"id": 37638, | |
"name": "initialOwner", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": 37623, | |
"src": "5305:12:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
} | |
} | |
], | |
"expression": { | |
"argumentTypes": [ | |
{ | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
} | |
], | |
"id": 37637, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"lValueRequested": false, | |
"nodeType": "NewExpression", | |
"src": "5290:14:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_function_creation_nonpayable$_t_address_$returns$_t_contract$_ProxyAdmin_$37588_$", | |
"typeString": "function (address) returns (contract ProxyAdmin)" | |
}, | |
"typeName": { | |
"id": 37636, | |
"nodeType": "UserDefinedTypeName", | |
"pathNode": { | |
"id": 37635, | |
"name": "ProxyAdmin", | |
"nameLocations": ["5294:10:33"], | |
"nodeType": "IdentifierPath", | |
"referencedDeclaration": 37588, | |
"src": "5294:10:33" | |
}, | |
"referencedDeclaration": 37588, | |
"src": "5294:10:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_contract$_ProxyAdmin_$37588", | |
"typeString": "contract ProxyAdmin" | |
} | |
} | |
}, | |
"id": 37639, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"kind": "functionCall", | |
"lValueRequested": false, | |
"nameLocations": [], | |
"names": [], | |
"nodeType": "FunctionCall", | |
"src": "5290:28:33", | |
"tryCall": false, | |
"typeDescriptions": { | |
"typeIdentifier": "t_contract$_ProxyAdmin_$37588", | |
"typeString": "contract ProxyAdmin" | |
} | |
} | |
], | |
"expression": { | |
"argumentTypes": [ | |
{ | |
"typeIdentifier": "t_contract$_ProxyAdmin_$37588", | |
"typeString": "contract ProxyAdmin" | |
} | |
], | |
"id": 37634, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": true, | |
"lValueRequested": false, | |
"nodeType": "ElementaryTypeNameExpression", | |
"src": "5282:7:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_type$_t_address_$", | |
"typeString": "type(address)" | |
}, | |
"typeName": { | |
"id": 37633, | |
"name": "address", | |
"nodeType": "ElementaryTypeName", | |
"src": "5282:7:33", | |
"typeDescriptions": {} | |
} | |
}, | |
"id": 37640, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"kind": "typeConversion", | |
"lValueRequested": false, | |
"nameLocations": [], | |
"names": [], | |
"nodeType": "FunctionCall", | |
"src": "5282:37:33", | |
"tryCall": false, | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
} | |
}, | |
"src": "5273:46:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
} | |
}, | |
"id": 37642, | |
"nodeType": "ExpressionStatement", | |
"src": "5273:46:33" | |
}, | |
{ | |
"expression": { | |
"arguments": [ | |
{ | |
"arguments": [], | |
"expression": { | |
"argumentTypes": [], | |
"id": 37646, | |
"name": "_proxyAdmin", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": 37660, | |
"src": "5432:11:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", | |
"typeString": "function () view returns (address)" | |
} | |
}, | |
"id": 37647, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"kind": "functionCall", | |
"lValueRequested": false, | |
"nameLocations": [], | |
"names": [], | |
"nodeType": "FunctionCall", | |
"src": "5432:13:33", | |
"tryCall": false, | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
} | |
} | |
], | |
"expression": { | |
"argumentTypes": [ | |
{ | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
} | |
], | |
"expression": { | |
"id": 37643, | |
"name": "ERC1967Utils", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": 37348, | |
"src": "5407:12:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_type$_t_contract$_ERC1967Utils_$37348_$", | |
"typeString": "type(library ERC1967Utils)" | |
} | |
}, | |
"id": 37645, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"lValueRequested": false, | |
"memberLocation": "5420:11:33", | |
"memberName": "changeAdmin", | |
"nodeType": "MemberAccess", | |
"referencedDeclaration": 37230, | |
"src": "5407:24:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", | |
"typeString": "function (address)" | |
} | |
}, | |
"id": 37648, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"kind": "functionCall", | |
"lValueRequested": false, | |
"nameLocations": [], | |
"names": [], | |
"nodeType": "FunctionCall", | |
"src": "5407:39:33", | |
"tryCall": false, | |
"typeDescriptions": { | |
"typeIdentifier": "t_tuple$__$", | |
"typeString": "tuple()" | |
} | |
}, | |
"id": 37649, | |
"nodeType": "ExpressionStatement", | |
"src": "5407:39:33" | |
} | |
] | |
}, | |
"documentation": { | |
"id": 37619, | |
"nodeType": "StructuredDocumentation", | |
"src": "4891:261:33", | |
"text": " @dev Initializes an upgradeable proxy managed by an instance of a {ProxyAdmin} with an `initialOwner`,\n backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in\n {ERC1967Proxy-constructor}." | |
}, | |
"implemented": true, | |
"kind": "constructor", | |
"modifiers": [ | |
{ | |
"arguments": [ | |
{ | |
"id": 37628, | |
"name": "_logic", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": 37621, | |
"src": "5248:6:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
} | |
}, | |
{ | |
"id": 37629, | |
"name": "_data", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": 37625, | |
"src": "5256:5:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_bytes_memory_ptr", | |
"typeString": "bytes memory" | |
} | |
} | |
], | |
"id": 37630, | |
"kind": "baseConstructorSpecifier", | |
"modifierName": { | |
"id": 37627, | |
"name": "ERC1967Proxy", | |
"nameLocations": ["5235:12:33"], | |
"nodeType": "IdentifierPath", | |
"referencedDeclaration": 37054, | |
"src": "5235:12:33" | |
}, | |
"nodeType": "ModifierInvocation", | |
"src": "5235:27:33" | |
} | |
], | |
"name": "", | |
"nameLocation": "-1:-1:-1", | |
"parameters": { | |
"id": 37626, | |
"nodeType": "ParameterList", | |
"parameters": [ | |
{ | |
"constant": false, | |
"id": 37621, | |
"mutability": "mutable", | |
"name": "_logic", | |
"nameLocation": "5177:6:33", | |
"nodeType": "VariableDeclaration", | |
"scope": 37651, | |
"src": "5169:14:33", | |
"stateVariable": false, | |
"storageLocation": "default", | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
}, | |
"typeName": { | |
"id": 37620, | |
"name": "address", | |
"nodeType": "ElementaryTypeName", | |
"src": "5169:7:33", | |
"stateMutability": "nonpayable", | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
} | |
}, | |
"visibility": "internal" | |
}, | |
{ | |
"constant": false, | |
"id": 37623, | |
"mutability": "mutable", | |
"name": "initialOwner", | |
"nameLocation": "5193:12:33", | |
"nodeType": "VariableDeclaration", | |
"scope": 37651, | |
"src": "5185:20:33", | |
"stateVariable": false, | |
"storageLocation": "default", | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
}, | |
"typeName": { | |
"id": 37622, | |
"name": "address", | |
"nodeType": "ElementaryTypeName", | |
"src": "5185:7:33", | |
"stateMutability": "nonpayable", | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
} | |
}, | |
"visibility": "internal" | |
}, | |
{ | |
"constant": false, | |
"id": 37625, | |
"mutability": "mutable", | |
"name": "_data", | |
"nameLocation": "5220:5:33", | |
"nodeType": "VariableDeclaration", | |
"scope": 37651, | |
"src": "5207:18:33", | |
"stateVariable": false, | |
"storageLocation": "memory", | |
"typeDescriptions": { | |
"typeIdentifier": "t_bytes_memory_ptr", | |
"typeString": "bytes" | |
}, | |
"typeName": { | |
"id": 37624, | |
"name": "bytes", | |
"nodeType": "ElementaryTypeName", | |
"src": "5207:5:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_bytes_storage_ptr", | |
"typeString": "bytes" | |
} | |
}, | |
"visibility": "internal" | |
} | |
], | |
"src": "5168:58:33" | |
}, | |
"returnParameters": { | |
"id": 37631, | |
"nodeType": "ParameterList", | |
"parameters": [], | |
"src": "5263:0:33" | |
}, | |
"scope": 37724, | |
"stateMutability": "payable", | |
"virtual": false, | |
"visibility": "public" | |
}, | |
{ | |
"id": 37660, | |
"nodeType": "FunctionDefinition", | |
"src": "5520:93:33", | |
"nodes": [], | |
"body": { | |
"id": 37659, | |
"nodeType": "Block", | |
"src": "5583:30:33", | |
"nodes": [], | |
"statements": [ | |
{ | |
"expression": { | |
"id": 37657, | |
"name": "_admin", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": 37615, | |
"src": "5600:6:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
} | |
}, | |
"functionReturnParameters": 37656, | |
"id": 37658, | |
"nodeType": "Return", | |
"src": "5593:13:33" | |
} | |
] | |
}, | |
"documentation": { | |
"id": 37652, | |
"nodeType": "StructuredDocumentation", | |
"src": "5459:56:33", | |
"text": " @dev Returns the admin of this proxy." | |
}, | |
"implemented": true, | |
"kind": "function", | |
"modifiers": [], | |
"name": "_proxyAdmin", | |
"nameLocation": "5529:11:33", | |
"parameters": { | |
"id": 37653, | |
"nodeType": "ParameterList", | |
"parameters": [], | |
"src": "5540:2:33" | |
}, | |
"returnParameters": { | |
"id": 37656, | |
"nodeType": "ParameterList", | |
"parameters": [ | |
{ | |
"constant": false, | |
"id": 37655, | |
"mutability": "mutable", | |
"name": "", | |
"nameLocation": "-1:-1:-1", | |
"nodeType": "VariableDeclaration", | |
"scope": 37660, | |
"src": "5574:7:33", | |
"stateVariable": false, | |
"storageLocation": "default", | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
}, | |
"typeName": { | |
"id": 37654, | |
"name": "address", | |
"nodeType": "ElementaryTypeName", | |
"src": "5574:7:33", | |
"stateMutability": "nonpayable", | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
} | |
}, | |
"visibility": "internal" | |
} | |
], | |
"src": "5573:9:33" | |
}, | |
"scope": 37724, | |
"stateMutability": "view", | |
"virtual": true, | |
"visibility": "internal" | |
}, | |
{ | |
"id": 37694, | |
"nodeType": "FunctionDefinition", | |
"src": "5755:369:33", | |
"nodes": [], | |
"body": { | |
"id": 37693, | |
"nodeType": "Block", | |
"src": "5802:322:33", | |
"nodes": [], | |
"statements": [ | |
{ | |
"condition": { | |
"commonType": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
}, | |
"id": 37669, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"lValueRequested": false, | |
"leftExpression": { | |
"expression": { | |
"id": 37665, | |
"name": "msg", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": -15, | |
"src": "5816:3:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_magic_message", | |
"typeString": "msg" | |
} | |
}, | |
"id": 37666, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"lValueRequested": false, | |
"memberLocation": "5820:6:33", | |
"memberName": "sender", | |
"nodeType": "MemberAccess", | |
"src": "5816:10:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
} | |
}, | |
"nodeType": "BinaryOperation", | |
"operator": "==", | |
"rightExpression": { | |
"arguments": [], | |
"expression": { | |
"argumentTypes": [], | |
"id": 37667, | |
"name": "_proxyAdmin", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": 37660, | |
"src": "5830:11:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", | |
"typeString": "function () view returns (address)" | |
} | |
}, | |
"id": 37668, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"kind": "functionCall", | |
"lValueRequested": false, | |
"nameLocations": [], | |
"names": [], | |
"nodeType": "FunctionCall", | |
"src": "5830:13:33", | |
"tryCall": false, | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
} | |
}, | |
"src": "5816:27:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_bool", | |
"typeString": "bool" | |
} | |
}, | |
"falseBody": { | |
"id": 37691, | |
"nodeType": "Block", | |
"src": "6076:42:33", | |
"statements": [ | |
{ | |
"expression": { | |
"arguments": [], | |
"expression": { | |
"argumentTypes": [], | |
"expression": { | |
"id": 37686, | |
"name": "super", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": -25, | |
"src": "6090:5:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_type$_t_super$_TransparentUpgradeableProxy_$37724_$", | |
"typeString": "type(contract super TransparentUpgradeableProxy)" | |
} | |
}, | |
"id": 37688, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"lValueRequested": false, | |
"memberLocation": "6096:9:33", | |
"memberName": "_fallback", | |
"nodeType": "MemberAccess", | |
"referencedDeclaration": 37375, | |
"src": "6090:15:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", | |
"typeString": "function ()" | |
} | |
}, | |
"id": 37689, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"kind": "functionCall", | |
"lValueRequested": false, | |
"nameLocations": [], | |
"names": [], | |
"nodeType": "FunctionCall", | |
"src": "6090:17:33", | |
"tryCall": false, | |
"typeDescriptions": { | |
"typeIdentifier": "t_tuple$__$", | |
"typeString": "tuple()" | |
} | |
}, | |
"id": 37690, | |
"nodeType": "ExpressionStatement", | |
"src": "6090:17:33" | |
} | |
] | |
}, | |
"id": 37692, | |
"nodeType": "IfStatement", | |
"src": "5812:306:33", | |
"trueBody": { | |
"id": 37685, | |
"nodeType": "Block", | |
"src": "5845:225:33", | |
"statements": [ | |
{ | |
"condition": { | |
"commonType": { | |
"typeIdentifier": "t_bytes4", | |
"typeString": "bytes4" | |
}, | |
"id": 37675, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"lValueRequested": false, | |
"leftExpression": { | |
"expression": { | |
"id": 37670, | |
"name": "msg", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": -15, | |
"src": "5863:3:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_magic_message", | |
"typeString": "msg" | |
} | |
}, | |
"id": 37671, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"lValueRequested": false, | |
"memberLocation": "5867:3:33", | |
"memberName": "sig", | |
"nodeType": "MemberAccess", | |
"src": "5863:7:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_bytes4", | |
"typeString": "bytes4" | |
} | |
}, | |
"nodeType": "BinaryOperation", | |
"operator": "!=", | |
"rightExpression": { | |
"expression": { | |
"expression": { | |
"id": 37672, | |
"name": "ITransparentUpgradeableProxy", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": 37610, | |
"src": "5874:28:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_type$_t_contract$_ITransparentUpgradeableProxy_$37610_$", | |
"typeString": "type(contract ITransparentUpgradeableProxy)" | |
} | |
}, | |
"id": 37673, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": true, | |
"lValueRequested": false, | |
"memberLocation": "5903:16:33", | |
"memberName": "upgradeToAndCall", | |
"nodeType": "MemberAccess", | |
"referencedDeclaration": 37609, | |
"src": "5874:45:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_function_declaration_payable$_t_address_$_t_bytes_calldata_ptr_$returns$__$", | |
"typeString": "function ITransparentUpgradeableProxy.upgradeToAndCall(address,bytes calldata) payable" | |
} | |
}, | |
"id": 37674, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": true, | |
"lValueRequested": false, | |
"memberLocation": "5920:8:33", | |
"memberName": "selector", | |
"nodeType": "MemberAccess", | |
"src": "5874:54:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_bytes4", | |
"typeString": "bytes4" | |
} | |
}, | |
"src": "5863:65:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_bool", | |
"typeString": "bool" | |
} | |
}, | |
"falseBody": { | |
"id": 37683, | |
"nodeType": "Block", | |
"src": "6000:60:33", | |
"statements": [ | |
{ | |
"expression": { | |
"arguments": [], | |
"expression": { | |
"argumentTypes": [], | |
"id": 37680, | |
"name": "_dispatchUpgradeToAndCall", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": 37723, | |
"src": "6018:25:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", | |
"typeString": "function ()" | |
} | |
}, | |
"id": 37681, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"kind": "functionCall", | |
"lValueRequested": false, | |
"nameLocations": [], | |
"names": [], | |
"nodeType": "FunctionCall", | |
"src": "6018:27:33", | |
"tryCall": false, | |
"typeDescriptions": { | |
"typeIdentifier": "t_tuple$__$", | |
"typeString": "tuple()" | |
} | |
}, | |
"id": 37682, | |
"nodeType": "ExpressionStatement", | |
"src": "6018:27:33" | |
} | |
] | |
}, | |
"id": 37684, | |
"nodeType": "IfStatement", | |
"src": "5859:201:33", | |
"trueBody": { | |
"id": 37679, | |
"nodeType": "Block", | |
"src": "5930:64:33", | |
"statements": [ | |
{ | |
"errorCall": { | |
"arguments": [], | |
"expression": { | |
"argumentTypes": [], | |
"id": 37676, | |
"name": "ProxyDeniedAdminAccess", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": 37618, | |
"src": "5955:22:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", | |
"typeString": "function () pure returns (error)" | |
} | |
}, | |
"id": 37677, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"kind": "functionCall", | |
"lValueRequested": false, | |
"nameLocations": [], | |
"names": [], | |
"nodeType": "FunctionCall", | |
"src": "5955:24:33", | |
"tryCall": false, | |
"typeDescriptions": { | |
"typeIdentifier": "t_error", | |
"typeString": "error" | |
} | |
}, | |
"id": 37678, | |
"nodeType": "RevertStatement", | |
"src": "5948:31:33" | |
} | |
] | |
} | |
} | |
] | |
} | |
} | |
] | |
}, | |
"baseFunctions": [37375], | |
"documentation": { | |
"id": 37661, | |
"nodeType": "StructuredDocumentation", | |
"src": "5619:131:33", | |
"text": " @dev If caller is the admin process the call internally, otherwise transparently fallback to the proxy behavior." | |
}, | |
"implemented": true, | |
"kind": "function", | |
"modifiers": [], | |
"name": "_fallback", | |
"nameLocation": "5764:9:33", | |
"overrides": { | |
"id": 37663, | |
"nodeType": "OverrideSpecifier", | |
"overrides": [], | |
"src": "5793:8:33" | |
}, | |
"parameters": { | |
"id": 37662, | |
"nodeType": "ParameterList", | |
"parameters": [], | |
"src": "5773:2:33" | |
}, | |
"returnParameters": { | |
"id": 37664, | |
"nodeType": "ParameterList", | |
"parameters": [], | |
"src": "5802:0:33" | |
}, | |
"scope": 37724, | |
"stateMutability": "nonpayable", | |
"virtual": true, | |
"visibility": "internal" | |
}, | |
{ | |
"id": 37723, | |
"nodeType": "FunctionDefinition", | |
"src": "6326:217:33", | |
"nodes": [], | |
"body": { | |
"id": 37722, | |
"nodeType": "Block", | |
"src": "6371:172:33", | |
"nodes": [], | |
"statements": [ | |
{ | |
"assignments": [37699, 37701], | |
"declarations": [ | |
{ | |
"constant": false, | |
"id": 37699, | |
"mutability": "mutable", | |
"name": "newImplementation", | |
"nameLocation": "6390:17:33", | |
"nodeType": "VariableDeclaration", | |
"scope": 37722, | |
"src": "6382:25:33", | |
"stateVariable": false, | |
"storageLocation": "default", | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
}, | |
"typeName": { | |
"id": 37698, | |
"name": "address", | |
"nodeType": "ElementaryTypeName", | |
"src": "6382:7:33", | |
"stateMutability": "nonpayable", | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
} | |
}, | |
"visibility": "internal" | |
}, | |
{ | |
"constant": false, | |
"id": 37701, | |
"mutability": "mutable", | |
"name": "data", | |
"nameLocation": "6422:4:33", | |
"nodeType": "VariableDeclaration", | |
"scope": 37722, | |
"src": "6409:17:33", | |
"stateVariable": false, | |
"storageLocation": "memory", | |
"typeDescriptions": { | |
"typeIdentifier": "t_bytes_memory_ptr", | |
"typeString": "bytes" | |
}, | |
"typeName": { | |
"id": 37700, | |
"name": "bytes", | |
"nodeType": "ElementaryTypeName", | |
"src": "6409:5:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_bytes_storage_ptr", | |
"typeString": "bytes" | |
} | |
}, | |
"visibility": "internal" | |
} | |
], | |
"id": 37714, | |
"initialValue": { | |
"arguments": [ | |
{ | |
"baseExpression": { | |
"expression": { | |
"id": 37704, | |
"name": "msg", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": -15, | |
"src": "6441:3:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_magic_message", | |
"typeString": "msg" | |
} | |
}, | |
"id": 37705, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"lValueRequested": false, | |
"memberLocation": "6445:4:33", | |
"memberName": "data", | |
"nodeType": "MemberAccess", | |
"src": "6441:8:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_bytes_calldata_ptr", | |
"typeString": "bytes calldata" | |
} | |
}, | |
"id": 37707, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"lValueRequested": false, | |
"nodeType": "IndexRangeAccess", | |
"src": "6441:12:33", | |
"startExpression": { | |
"hexValue": "34", | |
"id": 37706, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": true, | |
"kind": "number", | |
"lValueRequested": false, | |
"nodeType": "Literal", | |
"src": "6450:1:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_rational_4_by_1", | |
"typeString": "int_const 4" | |
}, | |
"value": "4" | |
}, | |
"typeDescriptions": { | |
"typeIdentifier": "t_bytes_calldata_ptr_slice", | |
"typeString": "bytes calldata slice" | |
} | |
}, | |
{ | |
"components": [ | |
{ | |
"id": 37709, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": true, | |
"lValueRequested": false, | |
"nodeType": "ElementaryTypeNameExpression", | |
"src": "6456:7:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_type$_t_address_$", | |
"typeString": "type(address)" | |
}, | |
"typeName": { | |
"id": 37708, | |
"name": "address", | |
"nodeType": "ElementaryTypeName", | |
"src": "6456:7:33", | |
"typeDescriptions": {} | |
} | |
}, | |
{ | |
"id": 37711, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": true, | |
"lValueRequested": false, | |
"nodeType": "ElementaryTypeNameExpression", | |
"src": "6465:5:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_type$_t_bytes_storage_ptr_$", | |
"typeString": "type(bytes storage pointer)" | |
}, | |
"typeName": { | |
"id": 37710, | |
"name": "bytes", | |
"nodeType": "ElementaryTypeName", | |
"src": "6465:5:33", | |
"typeDescriptions": {} | |
} | |
} | |
], | |
"id": 37712, | |
"isConstant": false, | |
"isInlineArray": false, | |
"isLValue": false, | |
"isPure": true, | |
"lValueRequested": false, | |
"nodeType": "TupleExpression", | |
"src": "6455:16:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_bytes_storage_ptr_$_$", | |
"typeString": "tuple(type(address),type(bytes storage pointer))" | |
} | |
} | |
], | |
"expression": { | |
"argumentTypes": [ | |
{ | |
"typeIdentifier": "t_bytes_calldata_ptr_slice", | |
"typeString": "bytes calldata slice" | |
}, | |
{ | |
"typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_bytes_storage_ptr_$_$", | |
"typeString": "tuple(type(address),type(bytes storage pointer))" | |
} | |
], | |
"expression": { | |
"id": 37702, | |
"name": "abi", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": -1, | |
"src": "6430:3:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_magic_abi", | |
"typeString": "abi" | |
} | |
}, | |
"id": 37703, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": true, | |
"lValueRequested": false, | |
"memberLocation": "6434:6:33", | |
"memberName": "decode", | |
"nodeType": "MemberAccess", | |
"src": "6430:10:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_function_abidecode_pure$__$returns$__$", | |
"typeString": "function () pure" | |
} | |
}, | |
"id": 37713, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"kind": "functionCall", | |
"lValueRequested": false, | |
"nameLocations": [], | |
"names": [], | |
"nodeType": "FunctionCall", | |
"src": "6430:42:33", | |
"tryCall": false, | |
"typeDescriptions": { | |
"typeIdentifier": "t_tuple$_t_address_payable_$_t_bytes_memory_ptr_$", | |
"typeString": "tuple(address payable,bytes memory)" | |
} | |
}, | |
"nodeType": "VariableDeclarationStatement", | |
"src": "6381:91:33" | |
}, | |
{ | |
"expression": { | |
"arguments": [ | |
{ | |
"id": 37718, | |
"name": "newImplementation", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": 37699, | |
"src": "6512:17:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
} | |
}, | |
{ | |
"id": 37719, | |
"name": "data", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": 37701, | |
"src": "6531:4:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_bytes_memory_ptr", | |
"typeString": "bytes memory" | |
} | |
} | |
], | |
"expression": { | |
"argumentTypes": [ | |
{ | |
"typeIdentifier": "t_address", | |
"typeString": "address" | |
}, | |
{ | |
"typeIdentifier": "t_bytes_memory_ptr", | |
"typeString": "bytes memory" | |
} | |
], | |
"expression": { | |
"id": 37715, | |
"name": "ERC1967Utils", | |
"nodeType": "Identifier", | |
"overloadedDeclarations": [], | |
"referencedDeclaration": 37348, | |
"src": "6482:12:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_type$_t_contract$_ERC1967Utils_$37348_$", | |
"typeString": "type(library ERC1967Utils)" | |
} | |
}, | |
"id": 37717, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"lValueRequested": false, | |
"memberLocation": "6495:16:33", | |
"memberName": "upgradeToAndCall", | |
"nodeType": "MemberAccess", | |
"referencedDeclaration": 37163, | |
"src": "6482:29:33", | |
"typeDescriptions": { | |
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$", | |
"typeString": "function (address,bytes memory)" | |
} | |
}, | |
"id": 37720, | |
"isConstant": false, | |
"isLValue": false, | |
"isPure": false, | |
"kind": "functionCall", | |
"lValueRequested": false, | |
"nameLocations": [], | |
"names": [], | |
"nodeType": "FunctionCall", | |
"src": "6482:54:33", | |
"tryCall": false, | |
"typeDescriptions": { | |
"typeIdentifier": "t_tuple$__$", | |
"typeString": "tuple()" | |
} | |
}, | |
"id": 37721, | |
"nodeType": "ExpressionStatement", | |
"src": "6482:54:33" | |
} | |
] | |
}, | |
"documentation": { | |
"id": 37695, | |
"nodeType": "StructuredDocumentation", | |
"src": "6130:191:33", | |
"text": " @dev Upgrade the implementation of the proxy. See {ERC1967Utils-upgradeToAndCall}.\n Requirements:\n - If `data` is empty, `msg.value` must be zero." | |
}, | |
"implemented": true, | |
"kind": "function", | |
"modifiers": [], | |
"name": "_dispatchUpgradeToAndCall", | |
"nameLocation": "6335:25:33", | |
"parameters": { | |
"id": 37696, | |
"nodeType": "ParameterList", | |
"parameters": [], | |
"src": "6360:2:33" | |
}, | |
"returnParameters": { | |
"id": 37697, | |
"nodeType": "ParameterList", | |
"parameters": [], | |
"src": "6371:0:33" | |
}, | |
"scope": 37724, | |
"stateMutability": "nonpayable", | |
"virtual": false, | |
"visibility": "private" | |
} | |
], | |
"abstract": false, | |
"baseContracts": [ | |
{ | |
"baseName": { | |
"id": 37612, | |
"name": "ERC1967Proxy", | |
"nameLocations": ["4354:12:33"], | |
"nodeType": "IdentifierPath", | |
"referencedDeclaration": 37054, | |
"src": "4354:12:33" | |
}, | |
"id": 37613, | |
"nodeType": "InheritanceSpecifier", | |
"src": "4354:12:33" | |
} | |
], | |
"canonicalName": "TransparentUpgradeableProxy", | |
"contractDependencies": [37588], | |
"contractKind": "contract", | |
"documentation": { | |
"id": 37611, | |
"nodeType": "StructuredDocumentation", | |
"src": "1027:3286:33", | |
"text": " @dev This contract implements a proxy that is upgradeable through an associated {ProxyAdmin} instance.\n To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n clashing], which can potentially be used in an attack, this contract uses the\n https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n things that go hand in hand:\n 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n that call matches the {ITransparentUpgradeableProxy-upgradeToAndCall} function exposed by the proxy itself.\n 2. If the admin calls the proxy, it can call the `upgradeToAndCall` function but any other call won't be forwarded to\n the implementation. If the admin tries to call a function on the implementation it will fail with an error indicating\n the proxy admin cannot fallback to the target implementation.\n These properties mean that the admin account can only be used for upgrading the proxy, so it's best if it's a\n dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to\n call a function from the proxy implementation. For this reason, the proxy deploys an instance of {ProxyAdmin} and\n allows upgrades only if they come through it. You should think of the `ProxyAdmin` instance as the administrative\n interface of the proxy, including the ability to change who can trigger upgrades by transferring ownership.\n NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not\n inherit from that interface, and instead `upgradeToAndCall` is implicitly implemented using a custom dispatch\n mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to\n fully implement transparency without decoding reverts caused by selector clashes between the proxy and the\n implementation.\n NOTE: This proxy does not inherit from {Context} deliberately. The {ProxyAdmin} of this contract won't send a\n meta-transaction in any way, and any other meta-transaction setup should be made in the implementation contract.\n IMPORTANT: This contract avoids unnecessary storage reads by setting the admin only during construction as an\n immutable variable, preventing any changes thereafter. However, the admin slot defined in ERC-1967 can still be\n overwritten by the implementation logic pointed to by this proxy. In such cases, the contract may end up in an\n undesirable state where the admin slot is different from the actual admin. Relying on the value of the admin slot\n is generally fine if the implementation is trusted.\n WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the\n compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new\n function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This\n could render the `upgradeToAndCall` function inaccessible, preventing upgradeability and compromising transparency." | |
}, | |
"fullyImplemented": true, | |
"linearizedBaseContracts": [37724, 37054, 37384], | |
"name": "TransparentUpgradeableProxy", | |
"nameLocation": "4323:27:33", | |
"scope": 37725, | |
"usedErrors": [37074, 37079, 37087, 37618, 37734, 38026], | |
"usedEvents": [36993, 37000] | |
} | |
], | |
"license": "MIT" | |
}, | |
"id": 33 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment