Skip to content

Instantly share code, notes, and snippets.

@pasevin
Created November 20, 2024 10:49
Show Gist options
  • Save pasevin/c6da014b49fe243d52dc7a511dca9a58 to your computer and use it in GitHub Desktop.
Save pasevin/c6da014b49fe243d52dc7a511dca9a58 to your computer and use it in GitHub Desktop.
{
"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