diff --git a/README.md b/README.md
index 9f78f7c..2e39a12 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,36 @@
# anotherblock platform contracts
+## contribution workflow
+
+### branches
+
+this git repository is composed of two main branches and feature branches :
+
+#### latest
+
+`latest` branch is synchronized with the latest contracts deployed on _mainnet_.
+_after every mainnet deployment and/or upgrade_, a pull request from `dev` to `latest` must be initiated and merged.
+this branch is the reference for any integration with other sub-systems, i.e. frontend, subgraphs, and so on.
+
+#### dev
+
+`dev` branch is accumulating and consolidating all the new features, bug fixes and upgrades that are _not yet deployed on mainnet_.
+_mainnet deployment must be initiated_ from `dev` branch only after the end-to-end tests have been successfully conducted on testnet.
+_testnet deployment must be initiated_ from `dev` branch.
+
+#### feature branches
+
+feature branches are created every time a new feature, bug fix or upgrade must be developped.
+feature branches are created from `dev` branch.
+feature branches naming convention is `abXXX-featName` where XXX is the Linear Ticket ID and featName is a brief feature description.
+a feature branch can be merge to `dev` _only if all required units tests have been conducted and passed_ and after approval from relevant stakeholders that the feature, bug fix or upgrade will be fit for deployement on mainnet.
+
+### tags
+
+_after every mainnet deployment and/or upgrade_, a tag must be created
+tag naming convention is `vX.Y` where X & Y are digits.
+we increment `X` for major update while we increment `Y` for small update or patches.
+
## install foundry
[foundry installation procedure](https://book.getfoundry.sh/getting-started/installation)
@@ -106,7 +137,6 @@ deploy standalone royalty contract for specific publisher
### base mainnet :
-
simulate platform deployment :
```sh
@@ -130,3 +160,23 @@ deploy standalone royalty contract for specific publisher
```sh
forge script script/base/deploy-royalty.s.sol:DeployRoyalty --rpc-url base --sig "run(address)" --broadcast --verify
```
+
+## contribute
+
+### creating new NFT minting mechanism
+
+in order for anyone to create new minting mechanism NFT contract compatible with anotherblock self-service platform, the contract must comply with below requirements :
+
+1. the new contract shall inherit the abstract contract [ERC721AB](src/token/ERC721/ERC721AB.sol)
+
+2. the new contract state shall include two constants, `IMPLEMENTATION_VERSION` & `IMPLEMENTATION_TYPE`
+
+3. the new contract shall include a function `initDrop` calling the internal function `_initDrop` and contain a minimum set of parameters :
+
+ - amount of share per token
+ - amount of genesis token to be minted
+ - recipient address of the genesis token(s)
+ - currency used to pay-out royalties
+ - base URI
+
+4. the new contract shall include a custom mint function (see [ERC721ABLE](src/token//ERC721/ERC721ABLE.sol) for reference)
diff --git a/broadcast/deploy-upgrade.s.sol/84531/run-1698658644.json b/broadcast/deploy-upgrade.s.sol/84531/run-1698658644.json
new file mode 100644
index 0000000..d9a59eb
--- /dev/null
+++ b/broadcast/deploy-upgrade.s.sol/84531/run-1698658644.json
@@ -0,0 +1,94 @@
+{
+ "transactions": [
+ {
+ "hash": "0x87bbc0bb208ac803aa0b7d13ad37c9da03932cf319c9a3a0b40d0a906b001b0b",
+ "transactionType": "CREATE",
+ "contractName": "ABDataRegistry",
+ "contractAddress": "0x072e8fB0aa2C75F727da6df3220eF676A966bcc8",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "type": "0x02",
+ "from": "0xd71256ec24925873ce9e9f085f89864ca05970bd",
+ "gas": "0x1b490a",
+ "value": "0x0",
+ "data": "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611770806100ed6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80638353b91911610104578063b9138580116100a2578063d547741f11610071578063d547741f146104fd578063da35a26f14610510578063dd3394aa14610523578063f0f442601461053657600080fd5b8063b9138580146104a4578063b9d47392146104c4578063c70eae8c146104d7578063cb9685ba146104ea57600080fd5b806391d14854116100de57806391d1485414610463578063977f82ba14610476578063a217fddf14610489578063ae98d8571461049157600080fd5b80638353b919146104115780638392767d146104245780638ffaa1401461043757600080fd5b80632f2ff15d1161017c5780635eb399681161014b5780635eb399681461036a578063608ebea1146103ac57806369ca69a5146103de57806371ef9a93146103fe57600080fd5b80632f2ff15d146102f357806336568abe1461030657806341859ac8146103195780635134b49a1461034757600080fd5b80630a4d85cd116101b85780630a4d85cd14610265578063145f8dd4146102a657806319742e6c146102bb578063248a9ca3146102d057600080fd5b806301ffc9a7146101df57806304a0fb1714610207578063069a9b641461023c575b600080fd5b6101f26101ed36600461123e565b610549565b60405190151581526020015b60405180910390f35b61022e7fdfbefbf47cfe66b701d8cfdbce1de81c821590819cb07e71cb01b6602fb0ee2781565b6040519081526020016101fe565b61022e61024a366004611284565b6001600160a01b031660009081526099602052604090205490565b61028e610273366004611284565b6098602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016101fe565b61022e60008051602061171b83398151915281565b6102ce6102c936600461129f565b610580565b005b61022e6102de3660046112d9565b60009081526065602052604090206001015490565b6102ce6103013660046112f2565b6105da565b6102ce6103143660046112f2565b610604565b6101f2610327366004611284565b6001600160a01b0390811660009081526098602052604090205416151590565b6101f26103553660046112d9565b609c6020526000908152604090205460ff1681565b61037d6103783660046112d9565b610687565b6040805194855260208501939093526001600160a01b03918216928401929092521660608201526080016101fe565b6103bf6103ba36600461131e565b6106cd565b604080516001600160a01b0390931683526020830191909152016101fe565b61022e6103ec3660046112d9565b609d6020526000908152604090205481565b6102ce61040c36600461131e565b61072b565b6102ce61041f366004611348565b610790565b609b5461028e906001600160a01b031681565b61028e610445366004611284565b6001600160a01b039081166000908152609860205260409020541690565b6101f26104713660046112f2565b610864565b6102ce610484366004611384565b61088f565b61022e600081565b61022e61049f366004611348565b610937565b61022e6104b2366004611284565b60996020526000908152604090205481565b6102ce6104d23660046113d9565b610b2b565b6102ce6104e5366004611284565b610b8c565b6102ce6104f83660046114b4565b610bce565b6102ce61050b3660046112f2565b610c2d565b6102ce61051e3660046112f2565b610c52565b6102ce61053136600461154a565b610dc3565b6102ce610544366004611284565b610e6f565b60006001600160e01b03198216637965db0b60e01b148061057a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b600061058b81610e9d565b6127108211156105ae57604051632627b42d60e11b815260040160405180910390fd5b506000918252609c60209081526040808420805460ff191695151595909517909455609d905291902055565b6000828152606560205260409020600101546105f581610e9d565b6105ff8383610eaa565b505050565b6001600160a01b03811633146106795760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6106838282610f30565b5050565b609a818154811061069757600080fd5b60009182526020909120600490910201805460018201546002830154600390930154919350916001600160a01b03908116911684565b6000818152609c6020526040812054819060ff16156106fb57506000828152609d6020526040902054610716565b506001600160a01b0383166000908152609960205260409020545b609b546001600160a01b031694909350915050565b600061073681610e9d565b6001600160a01b038316600081815260996020908152604091829020859055815192835282018490527fc1c540da095b5b6d54738e18568e3c832ae9d1a26f1abeb3e69efde2d4fd6ec291015b60405180910390a1505050565b7fdfbefbf47cfe66b701d8cfdbce1de81c821590819cb07e71cb01b6602fb0ee276107ba81610e9d565b6001600160a01b0384811660009081526098602052604090205416156107f35760405163515567cf60e01b815260040160405180910390fd5b6001600160a01b03848116600081815260986020908152604080832080546001600160a01b0319169589169586179055609982529182902086905590519182527fb0c28f4dd5b8aa95e332651d07f6930a2f9d46ae2bc4bfa73e2f33e478a1269b910160405180910390a250505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008051602061171b8339815191526108a781610e9d565b6001600160a01b03868116600090815260986020526040908190205490516323f4440760e21b81528783166004820152868316602482015260448101869052606481018590529116908190638fd1101c906084015b600060405180830381600087803b15801561091657600080fd5b505af115801561092a573d6000803e3d6000fd5b5050505050505050505050565b600060008051602061171b83398151915261095181610e9d565b610959610f97565b6040805160808101825282815260208082018781526001600160a01b038a81168486018181523360608701818152609a8054600181018255600091909152975160049098027f44da158ba27f9252712a74ff6a55c5d531f69609f1f6e7f17c4443a8e2089be481019890985594517f44da158ba27f9252712a74ff6a55c5d531f69609f1f6e7f17c4443a8e2089be588015590517f44da158ba27f9252712a74ff6a55c5d531f69609f1f6e7f17c4443a8e2089be6870180549185166001600160a01b031992831617905593517f44da158ba27f9252712a74ff6a55c5d531f69609f1f6e7f17c4443a8e2089be790960180549690931695909316949094179055835190815290810191909152919350849184917f5cbfe9cceabf50e9fcfff39e46cd47b1667ad148238648e99aee4fa0e1193d43910160405180910390a36001600160a01b03841615610b23576001600160a01b0385811660009081526098602052604090819020549051633670855b60e11b8152336004820152868316602482015260448101859052911690636ce10ab690606401600060405180830381600087803b158015610b0a57600080fd5b505af1158015610b1e573d6000803e3d6000fd5b505050505b509392505050565b6000610b3681610e9d565b6001600160a01b038216610b5d57604051632627b42d60e11b815260040160405180910390fd5b506001600160a01b03918216600090815260986020526040902080546001600160a01b03191691909216179055565b7fdfbefbf47cfe66b701d8cfdbce1de81c821590819cb07e71cb01b6602fb0ee27610bb681610e9d565b61068360008051602061171b83398151915283610eaa565b60008051602061171b833981519152610be681610e9d565b6001600160a01b038087166000908152609860205260409081902054905163d518b7ff60e01b8152911690819063d518b7ff906108fc9089908990899089906004016115a3565b600082815260656020526040902060010154610c4881610e9d565b6105ff8383610f30565b600054610100900460ff1615808015610c725750600054600160ff909116105b80610c8c5750303b158015610c8c575060005460ff166001145b610cef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610670565b6000805460ff191660011790558015610d12576000805461ff0019166101001790555b610d1a610fb9565b610d25600033611026565b6097839055609b80546001600160a01b0319166001600160a01b03841690811790915560408051918252602082018590527fa4888636278c973bcfd5eca8f86d67bf0c980edbf1740721c6f229b0421ae1e2910160405180910390a180156105ff576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610783565b6000610dce81610e9d565b6001600160a01b038085166000908152609860205260409020541680610e0757604051632627b42d60e11b815260040160405180910390fd5b60405163b08805a560e01b815260048101859052602481018490526001600160a01b0382169063b08805a590604401600060405180830381600087803b158015610e5057600080fd5b505af1158015610e64573d6000803e3d6000fd5b505050505050505050565b6000610e7a81610e9d565b50609b80546001600160a01b0319166001600160a01b0392909216919091179055565b610ea78133611030565b50565b610eb48282610864565b6106835760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610eec3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610f3a8282610864565b156106835760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b609a54609754600091610fa9916115f7565b610fb49060016115f7565b905090565b600054610100900460ff166110245760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610670565b565b6106838282610eaa565b61103a8282610864565b6106835761104781611089565b61105283602061109b565b60405160200161106392919061162e565b60408051601f198184030181529082905262461bcd60e51b8252610670916004016116a3565b606061057a6001600160a01b03831660145b606060006110aa8360026116d6565b6110b59060026115f7565b67ffffffffffffffff8111156110cd576110cd611403565b6040519080825280601f01601f1916602001820160405280156110f7576020820181803683370190505b509050600360fc1b81600081518110611112576111126116ed565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611141576111416116ed565b60200101906001600160f81b031916908160001a90535060006111658460026116d6565b6111709060016115f7565b90505b60018111156111e8576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106111a4576111a46116ed565b1a60f81b8282815181106111ba576111ba6116ed565b60200101906001600160f81b031916908160001a90535060049490941c936111e181611703565b9050611173565b5083156112375760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610670565b9392505050565b60006020828403121561125057600080fd5b81356001600160e01b03198116811461123757600080fd5b80356001600160a01b038116811461127f57600080fd5b919050565b60006020828403121561129657600080fd5b61123782611268565b6000806000606084860312156112b457600080fd5b833580151581146112c457600080fd5b95602085013595506040909401359392505050565b6000602082840312156112eb57600080fd5b5035919050565b6000806040838503121561130557600080fd5b8235915061131560208401611268565b90509250929050565b6000806040838503121561133157600080fd5b61133a83611268565b946020939093013593505050565b60008060006060848603121561135d57600080fd5b61136684611268565b925061137460208501611268565b9150604084013590509250925092565b600080600080600060a0868803121561139c57600080fd5b6113a586611268565b94506113b360208701611268565b93506113c160408701611268565b94979396509394606081013594506080013592915050565b600080604083850312156113ec57600080fd5b6113f583611268565b915061131560208401611268565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261142a57600080fd5b8135602067ffffffffffffffff8083111561144757611447611403565b8260051b604051601f19603f8301168101818110848211171561146c5761146c611403565b60405293845285810183019383810192508785111561148a57600080fd5b83870191505b848210156114a957813583529183019190830190611490565b979650505050505050565b600080600080600060a086880312156114cc57600080fd5b6114d586611268565b94506114e360208701611268565b93506114f160408701611268565b9250606086013567ffffffffffffffff8082111561150e57600080fd5b61151a89838a01611419565b9350608088013591508082111561153057600080fd5b5061153d88828901611419565b9150509295509295909350565b60008060006060848603121561155f57600080fd5b6112c484611268565b600081518084526020808501945080840160005b838110156115985781518752958201959082019060010161157c565b509495945050505050565b6001600160a01b038581168252841660208201526080604082018190526000906115cf90830185611568565b82810360608401526114a98185611568565b634e487b7160e01b600052601160045260246000fd5b8082018082111561057a5761057a6115e1565b60005b8381101561162557818101518382015260200161160d565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161166681601785016020880161160a565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161169781602884016020880161160a565b01602801949350505050565b60208152600082518060208401526116c281604085016020870161160a565b601f01601f19169190910160400192915050565b808202811582820484141761057a5761057a6115e1565b634e487b7160e01b600052603260045260246000fd5b600081611712576117126115e1565b50600019019056fe40a5c770eee7730548a6335e1f372e76bf4759f6fda1a932bd9cfc33106f0b4ca2646970667358221220b2618605619fe9d7ba99fe3576b090ded9d2e679e72096e3edb485193e189db164736f6c63430008130033",
+ "nonce": "0x483",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xc7d9df9de8d8dd6db347a6ecffd38864a7649c4a6327fc847b1203a24872c293",
+ "transactionType": "CREATE",
+ "contractName": "ERC721ABLE",
+ "contractAddress": "0xdDC710e86c9C0E01852C0770C0817f59416518D7",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "type": "0x02",
+ "from": "0xd71256ec24925873ce9e9f085f89864ca05970bd",
+ "gas": "0x32518c",
+ "value": "0x0",
+ "data": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612c7380620000f46000396000f3fe60806040526004361061020f5760003560e01c806370a0823111610118578063a1db9782116100a0578063d5abeb011161006f578063d5abeb0114610622578063de7ecf8714610638578063e985e9c51461064e578063f2fde38b1461066e578063fe325e961461068e57600080fd5b8063a1db9782146105af578063a22cb465146105cf578063b88d4fde146105ef578063c87b56dd1461060257600080fd5b806384a0c766116100e757806384a0c7661461051c5780638c72c54e1461053c5780638da5cb5b1461055c5780639182ba971461057a57806395d89b411461059a57600080fd5b806370a08231146104ad578063715018a6146104cd578063731133e9146104e2578063754b377c146104f557600080fd5b806342842e0e1161019b57806365e8e4f41161016a57806365e8e4f4146103f557806366748e98146104155780636cc82b841461044d5780636dbdaae61461046d5780636f8b44b01461048d57600080fd5b806342842e0e1461036e5780634b1022621461038157806355f804b3146103b55780636352211e146103d557600080fd5b806318160ddd116101e257806318160ddd146102b857806323b872dd146102db5780632a778c9b146102ee5780632e37eef6146103045780634128541c1461034e57600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063095ea7b3146102a3575b600080fd5b34801561022057600080fd5b5061023461022f3660046121e8565b6106a3565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e6106b4565b6040516102409190612255565b34801561027757600080fd5b5061028b610286366004612268565b61074f565b6040516001600160a01b039091168152602001610240565b6102b66102b1366004612296565b61079c565b005b3480156102c457600080fd5b506102cd6107ac565b604051908152602001610240565b6102b66102e93660046122c2565b6107cc565b3480156102fa57600080fd5b506102cd60685481565b34801561031057600080fd5b5061032461031f366004612268565b6109d0565b6040805195865260208601949094529284019190915260608301521515608082015260a001610240565b34801561035a57600080fd5b5060655461028b906001600160a01b031681565b6102b661037c3660046122c2565b610a14565b34801561038d57600080fd5b506102cd7f73e84917c5def9002f59334ba09785218b36a703c0e3d37d832ea21e233bb17f81565b3480156103c157600080fd5b506102b66103d036600461234b565b610a34565b3480156103e157600080fd5b5061028b6103f0366004612268565b610a49565b34801561040157600080fd5b506102b6610410366004612417565b610a54565b34801561042157600080fd5b506102cd610430366004612296565b606c60209081526000928352604080842090915290825290205481565b34801561045957600080fd5b5060665461028b906001600160a01b031681565b34801561047957600080fd5b506102b6610488366004612268565b610cd9565b34801561049957600080fd5b506102b66104a8366004612268565b610ce6565b3480156104b957600080fd5b506102cd6104c836600461249f565b610d1b565b3480156104d957600080fd5b506102b6610d83565b6102b66104f03660046124bc565b610d97565b34801561050157600080fd5b5061050a600181565b60405160ff9091168152602001610240565b34801561052857600080fd5b506102b6610537366004612525565b610fbe565b34801561054857600080fd5b5060675461028b906001600160a01b031681565b34801561056857600080fd5b506033546001600160a01b031661028b565b34801561058657600080fd5b506102b66105953660046125aa565b611003565b3480156105a657600080fd5b5061025e6111ca565b3480156105bb57600080fd5b506102b66105ca366004612296565b611206565b3480156105db57600080fd5b506102b66105ea36600461262c565b61127f565b6102b66105fd366004612665565b6112fc565b34801561060e57600080fd5b5061025e61061d366004612268565b611346565b34801561062e57600080fd5b506102cd606d5481565b34801561064457600080fd5b506102cd60695481565b34801561065a57600080fd5b506102346106693660046126b8565b6114a1565b34801561067a57600080fd5b506102b661068936600461249f565b6114de565b34801561069a57600080fd5b506102b6611557565b60006106ae82611729565b92915050565b60606106be611777565b60020180546106cc906126e6565b80601f01602080910402602001604051908101604052809291908181526020018280546106f8906126e6565b80156107455780601f1061071a57610100808354040283529160200191610745565b820191906000526020600020905b81548152906001019060200180831161072857829003601f168201915b5050505050905090565b600061075a8261179b565b610777576040516333d1c03960e21b815260040160405180910390fd5b61077f611777565b60009283526006016020525060409020546001600160a01b031690565b6107a8828260016117e4565b5050565b600060016107b8611777565b600101546107c4611777565b540303919050565b60006107d782611899565b9050836001600160a01b0316816001600160a01b03161461080a5760405162a1148160e81b815260040160405180910390fd5b60008061081684611946565b9150915061083b81876108263390565b6001600160a01b039081169116811491141790565b6108665761084986336114a1565b61086657604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661088d57604051633a954ecd60e21b815260040160405180910390fd5b61089a868686600161196e565b80156108a557600082555b6108ad611777565b6001600160a01b03871660009081526005919091016020526040902080546000190190556108d9611777565b6001600160a01b03861660008181526005929092016020526040909120805460010190554260a01b17600160e11b17610910611777565b60008681526004919091016020526040812091909155600160e11b84169003610986576001840161093f611777565b60008281526004919091016020526040812054900361098457610960611777565b5481146109845783610970611777565b600083815260049190910160205260409020555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b606b81815481106109e057600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294509092909160ff1685565b610a2f838383604051806020016040528060008152506112fc565b505050565b610a3c6119ff565b606a610a2f828483612760565b60006106ae82611899565b600080516020612c1e83398151915254610100900460ff16610a8957600080516020612c1e8339815191525460ff1615610a8d565b303b155b610b045760405162461bcd60e51b815260206004820152603760248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e747261637460448201527f20697320616c726561647920696e697469616c697a656400000000000000000060648201526084015b60405180910390fd5b600080516020612c1e83398151915254610100900460ff16158015610b4057600080516020612c1e833981519152805461ffff19166101011790555b600054610100900460ff1615808015610b605750600054600160ff909116105b80610b7a5750303b158015610b7a575060005460ff166001145b610bdd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610afb565b6000805460ff191660011790558015610c00576000805461ff0019166101001790555b610c198360405180602001604052806000815250611a59565b610c21611a97565b610c2a86611ac6565b6000606855606580546001600160a01b038088166001600160a01b0319928316179092556066805487841690831617905560678054928916929091169190911790558015610cb2576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b508015610cd257600080516020612c1e833981519152805461ff00191690555b5050505050565b610ce16119ff565b606955565b610cee6119ff565b610cf6611b18565b811015610d1657604051632627b42d60e11b815260040160405180910390fd5b606d55565b60006001600160a01b038216610d44576040516323d3ad8160e21b815260040160405180910390fd5b6001600160401b03610d54611777565b6005016000846001600160a01b03166001600160a01b0316815260200190815260200160002054169050919050565b610d8b6119ff565b610d956000611ac6565b565b610da084611b2b565b610dbd576040516332f7a9d760e21b815260040160405180910390fd5b6000606b8581548110610dd257610dd261281f565b60009182526020918290206040805160a0810182526005909302909101805483526001810154938301939093526002830154908201526003820154606082015260049091015460ff1615156080820152606d5490915084610e31611b18565b610e3b919061284b565b1115610e5a576040516322eb5e9560e21b815260040160405180910390fd5b8060800151610ef9576066546040516332f1944960e21b81526001600160a01b039091169063cbc6512490610e9b90899030908a908990899060040161285e565b602060405180830381865afa158015610eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edc91906128b2565b610ef9576040516352c973a760e01b815260040160405180910390fd5b60608101516001600160a01b0387166000908152606c60209081526040808320898452909152902054610f2d90869061284b565b1115610f4c57604051631d66b65960e11b815260040160405180910390fd5b838160400151610f5c91906128cf565b3414610f7b576040516318f4198360e21b815260040160405180910390fd5b6001600160a01b0386166000908152606c6020908152604080832088845290915281208054869290610fae90849061284b565b909155506109c890508685611bd2565b610fc66119ff565b606d87905586851115610fec57604051632627b42d60e11b815260040160405180910390fd5b610ffa868686868686611d1a565b50505050505050565b61100b6119ff565b606b541561101f5761101f606b600061217d565b600081815b818110156111905760008585838181106110405761104061281f565b905060a0020180360381019061105691906128e6565b9050838160000151108061106e575060208101518151115b1561108c57604051632627b42d60e11b815260040160405180910390fd5b606b805460018101825560009190915281517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b4600590920291820181905560208301517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b583015560408301517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b683015560608301517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b78301556080909201517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b8909101805460ff191691151591909117905592506111898161295b565b9050611024565b506040518181527ffda37b53117c5bf84916ece7449890be93cbd2842914c83f4a6864adb618654f9060200160405180910390a150505050565b6060606854600014611203576111e1606854611e32565b6040516020016111f19190612974565b60405160208183030381529060405290505b90565b61120e6119ff565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561125b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2f91906128b2565b80611288611777565b336000818152600792909201602090815260408084206001600160a01b03881680865290835293819020805460ff19169515159590951790945592518415158152919290917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6113078484846107cc565b6001600160a01b0383163b156113405761132384848484611ec4565b611340576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60606113518261179b565b61136e57604051632627b42d60e11b815260040160405180910390fd5b6000611378611faf565b9050805160000361139a5760405180602001604052806000815250915061149b565b60408051600180825281830190925260009160208201818036833701905050905081600183516113ca919061299e565b815181106113da576113da61281f565b602001015160f81c60f81b816000815181106113f8576113f861281f565b60200101906001600160f81b031916908160001a905350604051602f60f81b60208201528190602101604051602081830303815290604052805190602001208160405160200161144891906129b1565b6040516020818303038152906040528051906020012003611494578261146d86611fbe565b60405160200161147e9291906129cd565b6040516020818303038152906040529350611498565b8293505b50505b50919050565b60006114ab611777565b6001600160a01b039384166000908152600791909101602090815260408083209490951682529290925250205460ff1690565b6114e66119ff565b6001600160a01b03811661154b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610afb565b61155481611ac6565b50565b61155f6119ff565b60655460675460685460405163608ebea160e01b81526001600160a01b03928316600482015260248101919091526000928392169063608ebea1906044016040805180830381865afa1580156115b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dd91906129fc565b90925090506001600160a01b03821661160957604051632627b42d60e11b815260040160405180910390fd5b47600061271061161984846128cf565b6116239190612a2a565b90506000611631828461299e565b905080156116af576000856001600160a01b03168260405160006040518083038185875af1925050503d8060008114611686576040519150601f19603f3d011682016040523d82523d6000602084013e61168b565b606091505b50509050806116ad57604051631fa55c0760e11b815260040160405180910390fd5b505b8115610cd2576067546040516000916001600160a01b03169084908381818185875af1925050503d8060008114611702576040519150601f19603f3d011682016040523d82523d6000602084013e611707565b606091505b50509050806109c857604051631fa55c0760e11b815260040160405180910390fd5b60006301ffc9a760e01b6001600160e01b03198316148061175a57506380ac58cd60e01b6001600160e01b03198316145b806106ae5750506001600160e01b031916635b5e139f60e01b1490565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4090565b6000816001111580156117b557506117b1611777565b5482105b80156106ae5750600160e01b6117c9611777565b60008481526004919091016020526040902054161592915050565b60006117ef83610a49565b9050811561182e57336001600160a01b0382161461182e5761181181336114a1565b61182e576040516367d9dca160e11b815260040160405180910390fd5b83611837611777565b6000858152600691909101602052604080822080546001600160a01b0319166001600160a01b0394851617905551859287811692908516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a450505050565b60008160011161192d576118ab611777565b600083815260049190910160205260408120549150600160e01b8216900361192d5780600003611928576118dd611777565b5482106118fd57604051636f96cda160e11b815260040160405180910390fd5b611905611777565b6000199092016000818152600493909301602052604090922054905080156118fd575b919050565b604051636f96cda160e11b815260040160405180910390fd5b6000806000611953611777565b60009485526006016020525050604090912080549092909150565b6069541561134057606554606754606854604051634bbfc15d60e11b81526001600160a01b0392831660048201528783166024820152868316604482015260648101919091526084810184905291169063977f82ba9060a401600060405180830381600087803b1580156119e157600080fd5b505af11580156119f5573d6000803e3d6000fd5b5050505050505050565b6033546001600160a01b03163314610d955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610afb565b600080516020612c1e83398151915254610100900460ff16611a8d5760405162461bcd60e51b8152600401610afb90612a4c565b6107a88282612002565b600054610100900460ff16611abe5760405162461bcd60e51b8152600401610afb90612aa0565b610d95612075565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001611b24611777565b5403919050565b606b546000908210611b5057604051632627b42d60e11b815260040160405180910390fd5b6000606b8381548110611b6557611b6561281f565b60009182526020918290206040805160a08101825260059093029091018054808452600182015494840194909452600281015491830191909152600381015460608301526004015460ff161515608082015291504210801590611bcb5750428160200151115b9392505050565b6000611bdc611777565b5490506000829003611c015760405163b562e8dd60e01b815260040160405180910390fd5b611c0e600084838561196e565b680100000000000000018202611c22611777565b6001600160a01b038516600081815260059290920160205260409091208054929092019091554260a01b6001841460e11b1717611c5d611777565b600083815260049190910160205260408120919091556001600160a01b0384169083830190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b818114611ce757808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101611caf565b5081600003611d0857604051622e076360e81b815260040160405180910390fd5b80611d11611777565b5550610a2f9050565b60685415611d3b576040516302d1671b60e41b815260040160405180910390fd5b85158015611d5157506001600160a01b03831615155b80611d6d57506001600160a01b038316158015611d6d57508515155b15611d8b57604051632627b42d60e11b815260040160405180910390fd5b60655460675460405163ae98d85760e01b81526001600160a01b03918216600482015285821660248201526000604482015291169063ae98d857906064016020604051808303816000875af1158015611de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0c9190612aeb565b6068556069869055606a611e21828483612760565b5084156109c8576109c88486611bd2565b60606000611e3f836120a5565b60010190506000816001600160401b03811115611e5e57611e5e61238c565b6040519080825280601f01601f191660200182016040528015611e88576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611e9257509392505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611ef9903390899088908890600401612b04565b6020604051808303816000875af1925050508015611f34575060408051601f3d908101601f19168201909252611f3191810190612b41565b60015b611f92573d808015611f62576040519150601f19603f3d011682016040523d82523d6000602084013e611f67565b606091505b508051600003611f8a576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6060606a80546106cc906126e6565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480611fd85750819003601f19909101908152919050565b600080516020612c1e83398151915254610100900460ff166120365760405162461bcd60e51b8152600401610afb90612a4c565b8161203f611777565b6002019061204d9082612b5e565b5080612057611777565b600301906120659082612b5e565b506001612070611777565b555050565b600054610100900460ff1661209c5760405162461bcd60e51b8152600401610afb90612aa0565b610d9533611ac6565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106120e45772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612110576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061212e57662386f26fc10000830492506010015b6305f5e1008310612146576305f5e100830492506008015b612710831061215a57612710830492506004015b6064831061216c576064830492506002015b600a83106106ae5760010192915050565b508054600082556005029060005260206000209081019061155491905b808211156121ce5760008082556001820181905560028201819055600382015560048101805460ff1916905560050161219a565b5090565b6001600160e01b03198116811461155457600080fd5b6000602082840312156121fa57600080fd5b8135611bcb816121d2565b60005b83811015612220578181015183820152602001612208565b50506000910152565b60008151808452612241816020860160208601612205565b601f01601f19169290920160200192915050565b602081526000611bcb6020830184612229565b60006020828403121561227a57600080fd5b5035919050565b6001600160a01b038116811461155457600080fd5b600080604083850312156122a957600080fd5b82356122b481612281565b946020939093013593505050565b6000806000606084860312156122d757600080fd5b83356122e281612281565b925060208401356122f281612281565b929592945050506040919091013590565b60008083601f84011261231557600080fd5b5081356001600160401b0381111561232c57600080fd5b60208301915083602082850101111561234457600080fd5b9250929050565b6000806020838503121561235e57600080fd5b82356001600160401b0381111561237457600080fd5b61238085828601612303565b90969095509350505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b03808411156123bc576123bc61238c565b604051601f8501601f19908116603f011681019082821181831017156123e4576123e461238c565b816040528093508581528686860111156123fd57600080fd5b858560208301376000602087830101525050509392505050565b6000806000806080858703121561242d57600080fd5b843561243881612281565b9350602085013561244881612281565b9250604085013561245881612281565b915060608501356001600160401b0381111561247357600080fd5b8501601f8101871361248457600080fd5b612493878235602084016123a2565b91505092959194509250565b6000602082840312156124b157600080fd5b8135611bcb81612281565b6000806000806000608086880312156124d457600080fd5b85356124df81612281565b9450602086013593506040860135925060608601356001600160401b0381111561250857600080fd5b61251488828901612303565b969995985093965092949392505050565b600080600080600080600060c0888a03121561254057600080fd5b873596506020880135955060408801359450606088013561256081612281565b9350608088013561257081612281565b925060a08801356001600160401b0381111561258b57600080fd5b6125978a828b01612303565b989b979a50959850939692959293505050565b600080602083850312156125bd57600080fd5b82356001600160401b03808211156125d457600080fd5b818501915085601f8301126125e857600080fd5b8135818111156125f757600080fd5b86602060a08302850101111561260c57600080fd5b60209290920196919550909350505050565b801515811461155457600080fd5b6000806040838503121561263f57600080fd5b823561264a81612281565b9150602083013561265a8161261e565b809150509250929050565b6000806000806080858703121561267b57600080fd5b843561268681612281565b9350602085013561269681612281565b92506040850135915060608501356001600160401b0381111561247357600080fd5b600080604083850312156126cb57600080fd5b82356126d681612281565b9150602083013561265a81612281565b600181811c908216806126fa57607f821691505b60208210810361149b57634e487b7160e01b600052602260045260246000fd5b601f821115610a2f57600081815260208120601f850160051c810160208610156127415750805b601f850160051c820191505b818110156109c85782815560010161274d565b6001600160401b038311156127775761277761238c565b61278b8361278583546126e6565b8361271a565b6000601f8411600181146127bf57600085156127a75750838201355b600019600387901b1c1916600186901b178355610cd2565b600083815260209020601f19861690835b828110156127f057868501358255602094850194600190920191016127d0565b508682101561280d5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156106ae576106ae612835565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6000602082840312156128c457600080fd5b8151611bcb8161261e565b80820281158282048414176106ae576106ae612835565b600060a082840312156128f857600080fd5b60405160a081018181106001600160401b038211171561291a5761291a61238c565b806040525082358152602083013560208201526040830135604082015260608301356060820152608083013561294f8161261e565b60808201529392505050565b60006001820161296d5761296d612835565b5060010190565b6120a160f11b815260008251612991816002850160208701612205565b9190910160020192915050565b818103818111156106ae576106ae612835565b600082516129c3818460208701612205565b9190910192915050565b600083516129df818460208801612205565b8351908301906129f3818360208801612205565b01949350505050565b60008060408385031215612a0f57600080fd5b8251612a1a81612281565b6020939093015192949293505050565b600082612a4757634e487b7160e01b600052601260045260246000fd5b500490565b60208082526034908201527f455243373231415f5f496e697469616c697a61626c653a20636f6e7472616374604082015273206973206e6f7420696e697469616c697a696e6760601b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600060208284031215612afd57600080fd5b5051919050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612b3790830184612229565b9695505050505050565b600060208284031215612b5357600080fd5b8151611bcb816121d2565b81516001600160401b03811115612b7757612b7761238c565b612b8b81612b8584546126e6565b8461271a565b602080601f831160018114612bc05760008415612ba85750858301515b600019600386901b1c1916600185901b1785556109c8565b600085815260208120601f198616915b82811015612bef57888601518255948401946001909101908401612bd0565b5085821015612c0d5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056feee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85fa2646970667358221220a9dd22b04ec37cf2afb5cdba470000e7559163057730e5cac14db8b6a172b7f164736f6c63430008130033",
+ "nonce": "0x484",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xa44071e057ccb66121a40d8e328625d15e471a621569e7f5966f630e080eec4c",
+ "transactionType": "CREATE",
+ "contractName": "ERC721ABOE",
+ "contractAddress": "0xEeB54C912C6971cC808a2f960b6E27148a66715c",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "type": "0x02",
+ "from": "0xd71256ec24925873ce9e9f085f89864ca05970bd",
+ "gas": "0x3084fb",
+ "value": "0x0",
+ "data": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612acf80620000f46000396000f3fe6080604052600436106101f95760003560e01c806370a082311161010d57806395d89b41116100a0578063c87b56dd1161006f578063c87b56dd146105cc578063de7ecf87146105ec578063e985e9c514610602578063f2fde38b14610622578063fe325e961461064257600080fd5b806395d89b4114610564578063a1db978214610579578063a22cb46514610599578063b88d4fde146105b957600080fd5b80638c5c2a5b116100dc5780638c5c2a5b146104e65780638c72c54e146105065780638da5cb5b146105265780639182ba971461054457600080fd5b806370a0823114610477578063715018a614610497578063731133e9146104ac578063754b377c146104bf57600080fd5b80634128541c116101905780636352211e1161015f5780636352211e146103bf57806365e8e4f4146103df57806366748e98146103ff5780636cc82b84146104375780636dbdaae61461045757600080fd5b80634128541c1461033857806342842e0e146103585780634b1022621461036b57806355f804b31461039f57600080fd5b806318160ddd116101cc57806318160ddd146102a257806323b872dd146102c55780632a778c9b146102d85780632e37eef6146102ee57600080fd5b806301ffc9a7146101fe57806306fdde0314610233578063081812fc14610255578063095ea7b31461028d575b600080fd5b34801561020a57600080fd5b5061021e610219366004612061565b610657565b60405190151581526020015b60405180910390f35b34801561023f57600080fd5b50610248610668565b60405161022a91906120ce565b34801561026157600080fd5b506102756102703660046120e1565b610703565b6040516001600160a01b03909116815260200161022a565b6102a061029b36600461210f565b610750565b005b3480156102ae57600080fd5b506102b7610760565b60405190815260200161022a565b6102a06102d336600461213b565b610780565b3480156102e457600080fd5b506102b760685481565b3480156102fa57600080fd5b5061030e6103093660046120e1565b610984565b6040805195865260208601949094529284019190915260608301521515608082015260a00161022a565b34801561034457600080fd5b50606554610275906001600160a01b031681565b6102a061036636600461213b565b6109c8565b34801561037757600080fd5b506102b77fdcfc50123fc6ea3c803b5b1b4cbbc9ce5b81f13451fd3124e43ef593fd840d1981565b3480156103ab57600080fd5b506102a06103ba3660046121c4565b6109e8565b3480156103cb57600080fd5b506102756103da3660046120e1565b6109fd565b3480156103eb57600080fd5b506102a06103fa366004612290565b610a08565b34801561040b57600080fd5b506102b761041a36600461210f565b606c60209081526000928352604080842090915290825290205481565b34801561044357600080fd5b50606654610275906001600160a01b031681565b34801561046357600080fd5b506102a06104723660046120e1565b610c8d565b34801561048357600080fd5b506102b7610492366004612318565b610c9a565b3480156104a357600080fd5b506102a0610d02565b6102a06104ba366004612335565b610d16565b3480156104cb57600080fd5b506104d4600181565b60405160ff909116815260200161022a565b3480156104f257600080fd5b506102a061050136600461239e565b610e79565b34801561051257600080fd5b50606754610275906001600160a01b031681565b34801561053257600080fd5b506033546001600160a01b0316610275565b34801561055057600080fd5b506102a061055f366004612419565b610e8f565b34801561057057600080fd5b50610248611056565b34801561058557600080fd5b506102a061059436600461210f565b611092565b3480156105a557600080fd5b506102a06105b436600461249b565b61110b565b6102a06105c73660046124d4565b611188565b3480156105d857600080fd5b506102486105e73660046120e1565b6111d2565b3480156105f857600080fd5b506102b760695481565b34801561060e57600080fd5b5061021e61061d366004612527565b61132d565b34801561062e57600080fd5b506102a061063d366004612318565b61136a565b34801561064e57600080fd5b506102a06113e3565b6000610662826115b5565b92915050565b6060610672611603565b600201805461068090612555565b80601f01602080910402602001604051908101604052809291908181526020018280546106ac90612555565b80156106f95780601f106106ce576101008083540402835291602001916106f9565b820191906000526020600020905b8154815290600101906020018083116106dc57829003601f168201915b5050505050905090565b600061070e82611627565b61072b576040516333d1c03960e21b815260040160405180910390fd5b610733611603565b60009283526006016020525060409020546001600160a01b031690565b61075c82826001611670565b5050565b6000600161076c611603565b60010154610778611603565b540303919050565b600061078b82611725565b9050836001600160a01b0316816001600160a01b0316146107be5760405162a1148160e81b815260040160405180910390fd5b6000806107ca846117d2565b915091506107ef81876107da3390565b6001600160a01b039081169116811491141790565b61081a576107fd863361132d565b61081a57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661084157604051633a954ecd60e21b815260040160405180910390fd5b61084e86868660016117fa565b801561085957600082555b610861611603565b6001600160a01b038716600090815260059190910160205260409020805460001901905561088d611603565b6001600160a01b03861660008181526005929092016020526040909120805460010190554260a01b17600160e11b176108c4611603565b60008681526004919091016020526040812091909155600160e11b8416900361093a57600184016108f3611603565b60008281526004919091016020526040812054900361093857610914611603565b5481146109385783610924611603565b600083815260049190910160205260409020555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b606b818154811061099457600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294509092909160ff1685565b6109e383838360405180602001604052806000815250611188565b505050565b6109f061188b565b606a6109e38284836125cf565b600061066282611725565b600080516020612a7a83398151915254610100900460ff16610a3d57600080516020612a7a8339815191525460ff1615610a41565b303b155b610ab85760405162461bcd60e51b815260206004820152603760248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e747261637460448201527f20697320616c726561647920696e697469616c697a656400000000000000000060648201526084015b60405180910390fd5b600080516020612a7a83398151915254610100900460ff16158015610af457600080516020612a7a833981519152805461ffff19166101011790555b600054610100900460ff1615808015610b145750600054600160ff909116105b80610b2e5750303b158015610b2e575060005460ff166001145b610b915760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610aaf565b6000805460ff191660011790558015610bb4576000805461ff0019166101001790555b610bcd83604051806020016040528060008152506118e5565b610bd5611923565b610bde86611952565b6000606855606580546001600160a01b038088166001600160a01b0319928316179092556066805487841690831617905560678054928916929091169190911790558015610c66576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b508015610c8657600080516020612a7a833981519152805461ff00191690555b5050505050565b610c9561188b565b606955565b60006001600160a01b038216610cc3576040516323d3ad8160e21b815260040160405180910390fd5b6001600160401b03610cd3611603565b6005016000846001600160a01b03166001600160a01b0316815260200190815260200160002054169050919050565b610d0a61188b565b610d146000611952565b565b610d1f846119a4565b610d3c576040516332f7a9d760e21b815260040160405180910390fd5b6000606b8581548110610d5157610d5161268e565b60009182526020918290206040805160a0810182526005909302909101805483526001810154938301939093526002830154908201526003820154606082015260049091015460ff16151560808201819052909150610e40576066546040516332f1944960e21b81526001600160a01b039091169063cbc6512490610de290899030908a90899089906004016126a4565b602060405180830381865afa158015610dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2391906126f8565b610e40576040516352c973a760e01b815260040160405180910390fd5b838160400151610e50919061272b565b3414610e6f576040516318f4198360e21b815260040160405180910390fd5b61097c8685611a4b565b610e8161188b565b61097c868686868686611b93565b610e9761188b565b606b5415610eab57610eab606b6000611ff6565b600081815b8181101561101c576000858583818110610ecc57610ecc61268e565b905060a00201803603810190610ee29190612742565b90508381600001511080610efa575060208101518151115b15610f1857604051632627b42d60e11b815260040160405180910390fd5b606b805460018101825560009190915281517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b4600590920291820181905560208301517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b583015560408301517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b683015560608301517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b78301556080909201517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b8909101805460ff19169115159190911790559250611015816127b7565b9050610eb0565b506040518181527ffda37b53117c5bf84916ece7449890be93cbd2842914c83f4a6864adb618654f9060200160405180910390a150505050565b606060685460001461108f5761106d606854611cab565b60405160200161107d91906127d0565b60405160208183030381529060405290505b90565b61109a61188b565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156110e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e391906126f8565b80611114611603565b336000818152600792909201602090815260408084206001600160a01b03881680865290835293819020805460ff19169515159590951790945592518415158152919290917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611193848484610780565b6001600160a01b0383163b156111cc576111af84848484611d3d565b6111cc576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60606111dd82611627565b6111fa57604051632627b42d60e11b815260040160405180910390fd5b6000611204611e28565b9050805160000361122657604051806020016040528060008152509150611327565b604080516001808252818301909252600091602082018180368337019050509050816001835161125691906127fa565b815181106112665761126661268e565b602001015160f81c60f81b816000815181106112845761128461268e565b60200101906001600160f81b031916908160001a905350604051602f60f81b6020820152819060210160405160208183030381529060405280519060200120816040516020016112d4919061280d565b604051602081830303815290604052805190602001200361132057826112f986611e37565b60405160200161130a929190612829565b6040516020818303038152906040529350611324565b8293505b50505b50919050565b6000611337611603565b6001600160a01b039384166000908152600791909101602090815260408083209490951682529290925250205460ff1690565b61137261188b565b6001600160a01b0381166113d75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aaf565b6113e081611952565b50565b6113eb61188b565b60655460675460685460405163608ebea160e01b81526001600160a01b03928316600482015260248101919091526000928392169063608ebea1906044016040805180830381865afa158015611445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114699190612858565b90925090506001600160a01b03821661149557604051632627b42d60e11b815260040160405180910390fd5b4760006127106114a5848461272b565b6114af9190612886565b905060006114bd82846127fa565b9050801561153b576000856001600160a01b03168260405160006040518083038185875af1925050503d8060008114611512576040519150601f19603f3d011682016040523d82523d6000602084013e611517565b606091505b505090508061153957604051631fa55c0760e11b815260040160405180910390fd5b505b8115610c86576067546040516000916001600160a01b03169084908381818185875af1925050503d806000811461158e576040519150601f19603f3d011682016040523d82523d6000602084013e611593565b606091505b505090508061097c57604051631fa55c0760e11b815260040160405180910390fd5b60006301ffc9a760e01b6001600160e01b0319831614806115e657506380ac58cd60e01b6001600160e01b03198316145b806106625750506001600160e01b031916635b5e139f60e01b1490565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4090565b600081600111158015611641575061163d611603565b5482105b80156106625750600160e01b611655611603565b60008481526004919091016020526040902054161592915050565b600061167b836109fd565b905081156116ba57336001600160a01b038216146116ba5761169d813361132d565b6116ba576040516367d9dca160e11b815260040160405180910390fd5b836116c3611603565b6000858152600691909101602052604080822080546001600160a01b0319166001600160a01b0394851617905551859287811692908516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a450505050565b6000816001116117b957611737611603565b600083815260049190910160205260408120549150600160e01b821690036117b957806000036117b457611769611603565b54821061178957604051636f96cda160e11b815260040160405180910390fd5b611791611603565b600019909201600081815260049390930160205260409092205490508015611789575b919050565b604051636f96cda160e11b815260040160405180910390fd5b60008060006117df611603565b60009485526006016020525050604090912080549092909150565b606954156111cc57606554606754606854604051634bbfc15d60e11b81526001600160a01b0392831660048201528783166024820152868316604482015260648101919091526084810184905291169063977f82ba9060a401600060405180830381600087803b15801561186d57600080fd5b505af1158015611881573d6000803e3d6000fd5b5050505050505050565b6033546001600160a01b03163314610d145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aaf565b600080516020612a7a83398151915254610100900460ff166119195760405162461bcd60e51b8152600401610aaf906128a8565b61075c8282611e7b565b600054610100900460ff1661194a5760405162461bcd60e51b8152600401610aaf906128fc565b610d14611eee565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606b5460009082106119c957604051632627b42d60e11b815260040160405180910390fd5b6000606b83815481106119de576119de61268e565b60009182526020918290206040805160a08101825260059093029091018054808452600182015494840194909452600281015491830191909152600381015460608301526004015460ff161515608082015291504210801590611a445750428160200151115b9392505050565b6000611a55611603565b5490506000829003611a7a5760405163b562e8dd60e01b815260040160405180910390fd5b611a8760008483856117fa565b680100000000000000018202611a9b611603565b6001600160a01b038516600081815260059290920160205260409091208054929092019091554260a01b6001841460e11b1717611ad6611603565b600083815260049190910160205260408120919091556001600160a01b0384169083830190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b818114611b6057808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101611b28565b5081600003611b8157604051622e076360e81b815260040160405180910390fd5b80611b8a611603565b55506109e39050565b60685415611bb4576040516302d1671b60e41b815260040160405180910390fd5b85158015611bca57506001600160a01b03831615155b80611be657506001600160a01b038316158015611be657508515155b15611c0457604051632627b42d60e11b815260040160405180910390fd5b60655460675460405163ae98d85760e01b81526001600160a01b03918216600482015285821660248201526000604482015291169063ae98d857906064016020604051808303816000875af1158015611c61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c859190612947565b6068556069869055606a611c9a8284836125cf565b50841561097c5761097c8486611a4b565b60606000611cb883611f1e565b60010190506000816001600160401b03811115611cd757611cd7612205565b6040519080825280601f01601f191660200182016040528015611d01576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611d0b57509392505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611d72903390899088908890600401612960565b6020604051808303816000875af1925050508015611dad575060408051601f3d908101601f19168201909252611daa9181019061299d565b60015b611e0b573d808015611ddb576040519150601f19603f3d011682016040523d82523d6000602084013e611de0565b606091505b508051600003611e03576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6060606a805461068090612555565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480611e515750819003601f19909101908152919050565b600080516020612a7a83398151915254610100900460ff16611eaf5760405162461bcd60e51b8152600401610aaf906128a8565b81611eb8611603565b60020190611ec690826129ba565b5080611ed0611603565b60030190611ede90826129ba565b506001611ee9611603565b555050565b600054610100900460ff16611f155760405162461bcd60e51b8152600401610aaf906128fc565b610d1433611952565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611f5d5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611f89576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611fa757662386f26fc10000830492506010015b6305f5e1008310611fbf576305f5e100830492506008015b6127108310611fd357612710830492506004015b60648310611fe5576064830492506002015b600a83106106625760010192915050565b50805460008255600502906000526020600020908101906113e091905b808211156120475760008082556001820181905560028201819055600382015560048101805460ff19169055600501612013565b5090565b6001600160e01b0319811681146113e057600080fd5b60006020828403121561207357600080fd5b8135611a448161204b565b60005b83811015612099578181015183820152602001612081565b50506000910152565b600081518084526120ba81602086016020860161207e565b601f01601f19169290920160200192915050565b602081526000611a4460208301846120a2565b6000602082840312156120f357600080fd5b5035919050565b6001600160a01b03811681146113e057600080fd5b6000806040838503121561212257600080fd5b823561212d816120fa565b946020939093013593505050565b60008060006060848603121561215057600080fd5b833561215b816120fa565b9250602084013561216b816120fa565b929592945050506040919091013590565b60008083601f84011261218e57600080fd5b5081356001600160401b038111156121a557600080fd5b6020830191508360208285010111156121bd57600080fd5b9250929050565b600080602083850312156121d757600080fd5b82356001600160401b038111156121ed57600080fd5b6121f98582860161217c565b90969095509350505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561223557612235612205565b604051601f8501601f19908116603f0116810190828211818310171561225d5761225d612205565b8160405280935085815286868601111561227657600080fd5b858560208301376000602087830101525050509392505050565b600080600080608085870312156122a657600080fd5b84356122b1816120fa565b935060208501356122c1816120fa565b925060408501356122d1816120fa565b915060608501356001600160401b038111156122ec57600080fd5b8501601f810187136122fd57600080fd5b61230c8782356020840161221b565b91505092959194509250565b60006020828403121561232a57600080fd5b8135611a44816120fa565b60008060008060006080868803121561234d57600080fd5b8535612358816120fa565b9450602086013593506040860135925060608601356001600160401b0381111561238157600080fd5b61238d8882890161217c565b969995985093965092949392505050565b60008060008060008060a087890312156123b757600080fd5b863595506020870135945060408701356123d0816120fa565b935060608701356123e0816120fa565b925060808701356001600160401b038111156123fb57600080fd5b61240789828a0161217c565b979a9699509497509295939492505050565b6000806020838503121561242c57600080fd5b82356001600160401b038082111561244357600080fd5b818501915085601f83011261245757600080fd5b81358181111561246657600080fd5b86602060a08302850101111561247b57600080fd5b60209290920196919550909350505050565b80151581146113e057600080fd5b600080604083850312156124ae57600080fd5b82356124b9816120fa565b915060208301356124c98161248d565b809150509250929050565b600080600080608085870312156124ea57600080fd5b84356124f5816120fa565b93506020850135612505816120fa565b92506040850135915060608501356001600160401b038111156122ec57600080fd5b6000806040838503121561253a57600080fd5b8235612545816120fa565b915060208301356124c9816120fa565b600181811c9082168061256957607f821691505b60208210810361132757634e487b7160e01b600052602260045260246000fd5b601f8211156109e357600081815260208120601f850160051c810160208610156125b05750805b601f850160051c820191505b8181101561097c578281556001016125bc565b6001600160401b038311156125e6576125e6612205565b6125fa836125f48354612555565b83612589565b6000601f84116001811461262e57600085156126165750838201355b600019600387901b1c1916600186901b178355610c86565b600083815260209020601f19861690835b8281101561265f578685013582556020948501946001909201910161263f565b508682101561267c5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b60006020828403121561270a57600080fd5b8151611a448161248d565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761066257610662612715565b600060a0828403121561275457600080fd5b60405160a081018181106001600160401b038211171561277657612776612205565b80604052508235815260208301356020820152604083013560408201526060830135606082015260808301356127ab8161248d565b60808201529392505050565b6000600182016127c9576127c9612715565b5060010190565b6120a160f11b8152600082516127ed81600285016020870161207e565b9190910160020192915050565b8181038181111561066257610662612715565b6000825161281f81846020870161207e565b9190910192915050565b6000835161283b81846020880161207e565b83519083019061284f81836020880161207e565b01949350505050565b6000806040838503121561286b57600080fd5b8251612876816120fa565b6020939093015192949293505050565b6000826128a357634e487b7160e01b600052601260045260246000fd5b500490565b60208082526034908201527f455243373231415f5f496e697469616c697a61626c653a20636f6e7472616374604082015273206973206e6f7420696e697469616c697a696e6760601b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60006020828403121561295957600080fd5b5051919050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612993908301846120a2565b9695505050505050565b6000602082840312156129af57600080fd5b8151611a448161204b565b81516001600160401b038111156129d3576129d3612205565b6129e7816129e18454612555565b84612589565b602080601f831160018114612a1c5760008415612a045750858301515b600019600386901b1c1916600185901b17855561097c565b600085815260208120601f198616915b82811015612a4b57888601518255948401946001909101908401612a2c565b5085821015612a695787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056feee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85fa264697066735822122023fa41bc39b9268e59f7967d1440716167d00463f29541b323f7e476d816a66d64736f6c63430008130033",
+ "nonce": "0x485",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x177ee1ac28d6153b493f8d756cac44bc933eab4016f50a7f87bfd058a2b6bf3f",
+ "transactionType": "CALL",
+ "contractName": "TransparentUpgradeableProxy",
+ "contractAddress": "0x9BE7E2B13f70f170B63c0379663313EcdB527294",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "type": "0x02",
+ "from": "0xd71256ec24925873ce9e9f085f89864ca05970bd",
+ "to": "0x9be7e2b13f70f170b63c0379663313ecdb527294",
+ "gas": "0xc552",
+ "value": "0x0",
+ "data": "0x641254bd000000000000000000000000ddc710e86c9c0e01852c0770c0817f59416518d7",
+ "nonce": "0x486",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [
+ "0x87bbc0bb208ac803aa0b7d13ad37c9da03932cf319c9a3a0b40d0a906b001b0b",
+ "0xc7d9df9de8d8dd6db347a6ecffd38864a7649c4a6327fc847b1203a24872c293",
+ "0xa44071e057ccb66121a40d8e328625d15e471a621569e7f5966f630e080eec4c",
+ "0x177ee1ac28d6153b493f8d756cac44bc933eab4016f50a7f87bfd058a2b6bf3f"
+ ],
+ "returns": {},
+ "timestamp": 1698658644,
+ "chain": 84531,
+ "multi": false,
+ "commit": "cec81dc"
+}
\ No newline at end of file
diff --git a/broadcast/deploy-upgrade.s.sol/84531/run-1698658651.json b/broadcast/deploy-upgrade.s.sol/84531/run-1698658651.json
new file mode 100644
index 0000000..8c7f2ee
--- /dev/null
+++ b/broadcast/deploy-upgrade.s.sol/84531/run-1698658651.json
@@ -0,0 +1,196 @@
+{
+ "transactions": [
+ {
+ "hash": "0x87bbc0bb208ac803aa0b7d13ad37c9da03932cf319c9a3a0b40d0a906b001b0b",
+ "transactionType": "CREATE",
+ "contractName": "ABDataRegistry",
+ "contractAddress": "0x072e8fB0aa2C75F727da6df3220eF676A966bcc8",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "type": "0x02",
+ "from": "0xd71256ec24925873ce9e9f085f89864ca05970bd",
+ "gas": "0x1b490a",
+ "value": "0x0",
+ "data": "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611770806100ed6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80638353b91911610104578063b9138580116100a2578063d547741f11610071578063d547741f146104fd578063da35a26f14610510578063dd3394aa14610523578063f0f442601461053657600080fd5b8063b9138580146104a4578063b9d47392146104c4578063c70eae8c146104d7578063cb9685ba146104ea57600080fd5b806391d14854116100de57806391d1485414610463578063977f82ba14610476578063a217fddf14610489578063ae98d8571461049157600080fd5b80638353b919146104115780638392767d146104245780638ffaa1401461043757600080fd5b80632f2ff15d1161017c5780635eb399681161014b5780635eb399681461036a578063608ebea1146103ac57806369ca69a5146103de57806371ef9a93146103fe57600080fd5b80632f2ff15d146102f357806336568abe1461030657806341859ac8146103195780635134b49a1461034757600080fd5b80630a4d85cd116101b85780630a4d85cd14610265578063145f8dd4146102a657806319742e6c146102bb578063248a9ca3146102d057600080fd5b806301ffc9a7146101df57806304a0fb1714610207578063069a9b641461023c575b600080fd5b6101f26101ed36600461123e565b610549565b60405190151581526020015b60405180910390f35b61022e7fdfbefbf47cfe66b701d8cfdbce1de81c821590819cb07e71cb01b6602fb0ee2781565b6040519081526020016101fe565b61022e61024a366004611284565b6001600160a01b031660009081526099602052604090205490565b61028e610273366004611284565b6098602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016101fe565b61022e60008051602061171b83398151915281565b6102ce6102c936600461129f565b610580565b005b61022e6102de3660046112d9565b60009081526065602052604090206001015490565b6102ce6103013660046112f2565b6105da565b6102ce6103143660046112f2565b610604565b6101f2610327366004611284565b6001600160a01b0390811660009081526098602052604090205416151590565b6101f26103553660046112d9565b609c6020526000908152604090205460ff1681565b61037d6103783660046112d9565b610687565b6040805194855260208501939093526001600160a01b03918216928401929092521660608201526080016101fe565b6103bf6103ba36600461131e565b6106cd565b604080516001600160a01b0390931683526020830191909152016101fe565b61022e6103ec3660046112d9565b609d6020526000908152604090205481565b6102ce61040c36600461131e565b61072b565b6102ce61041f366004611348565b610790565b609b5461028e906001600160a01b031681565b61028e610445366004611284565b6001600160a01b039081166000908152609860205260409020541690565b6101f26104713660046112f2565b610864565b6102ce610484366004611384565b61088f565b61022e600081565b61022e61049f366004611348565b610937565b61022e6104b2366004611284565b60996020526000908152604090205481565b6102ce6104d23660046113d9565b610b2b565b6102ce6104e5366004611284565b610b8c565b6102ce6104f83660046114b4565b610bce565b6102ce61050b3660046112f2565b610c2d565b6102ce61051e3660046112f2565b610c52565b6102ce61053136600461154a565b610dc3565b6102ce610544366004611284565b610e6f565b60006001600160e01b03198216637965db0b60e01b148061057a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b600061058b81610e9d565b6127108211156105ae57604051632627b42d60e11b815260040160405180910390fd5b506000918252609c60209081526040808420805460ff191695151595909517909455609d905291902055565b6000828152606560205260409020600101546105f581610e9d565b6105ff8383610eaa565b505050565b6001600160a01b03811633146106795760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6106838282610f30565b5050565b609a818154811061069757600080fd5b60009182526020909120600490910201805460018201546002830154600390930154919350916001600160a01b03908116911684565b6000818152609c6020526040812054819060ff16156106fb57506000828152609d6020526040902054610716565b506001600160a01b0383166000908152609960205260409020545b609b546001600160a01b031694909350915050565b600061073681610e9d565b6001600160a01b038316600081815260996020908152604091829020859055815192835282018490527fc1c540da095b5b6d54738e18568e3c832ae9d1a26f1abeb3e69efde2d4fd6ec291015b60405180910390a1505050565b7fdfbefbf47cfe66b701d8cfdbce1de81c821590819cb07e71cb01b6602fb0ee276107ba81610e9d565b6001600160a01b0384811660009081526098602052604090205416156107f35760405163515567cf60e01b815260040160405180910390fd5b6001600160a01b03848116600081815260986020908152604080832080546001600160a01b0319169589169586179055609982529182902086905590519182527fb0c28f4dd5b8aa95e332651d07f6930a2f9d46ae2bc4bfa73e2f33e478a1269b910160405180910390a250505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008051602061171b8339815191526108a781610e9d565b6001600160a01b03868116600090815260986020526040908190205490516323f4440760e21b81528783166004820152868316602482015260448101869052606481018590529116908190638fd1101c906084015b600060405180830381600087803b15801561091657600080fd5b505af115801561092a573d6000803e3d6000fd5b5050505050505050505050565b600060008051602061171b83398151915261095181610e9d565b610959610f97565b6040805160808101825282815260208082018781526001600160a01b038a81168486018181523360608701818152609a8054600181018255600091909152975160049098027f44da158ba27f9252712a74ff6a55c5d531f69609f1f6e7f17c4443a8e2089be481019890985594517f44da158ba27f9252712a74ff6a55c5d531f69609f1f6e7f17c4443a8e2089be588015590517f44da158ba27f9252712a74ff6a55c5d531f69609f1f6e7f17c4443a8e2089be6870180549185166001600160a01b031992831617905593517f44da158ba27f9252712a74ff6a55c5d531f69609f1f6e7f17c4443a8e2089be790960180549690931695909316949094179055835190815290810191909152919350849184917f5cbfe9cceabf50e9fcfff39e46cd47b1667ad148238648e99aee4fa0e1193d43910160405180910390a36001600160a01b03841615610b23576001600160a01b0385811660009081526098602052604090819020549051633670855b60e11b8152336004820152868316602482015260448101859052911690636ce10ab690606401600060405180830381600087803b158015610b0a57600080fd5b505af1158015610b1e573d6000803e3d6000fd5b505050505b509392505050565b6000610b3681610e9d565b6001600160a01b038216610b5d57604051632627b42d60e11b815260040160405180910390fd5b506001600160a01b03918216600090815260986020526040902080546001600160a01b03191691909216179055565b7fdfbefbf47cfe66b701d8cfdbce1de81c821590819cb07e71cb01b6602fb0ee27610bb681610e9d565b61068360008051602061171b83398151915283610eaa565b60008051602061171b833981519152610be681610e9d565b6001600160a01b038087166000908152609860205260409081902054905163d518b7ff60e01b8152911690819063d518b7ff906108fc9089908990899089906004016115a3565b600082815260656020526040902060010154610c4881610e9d565b6105ff8383610f30565b600054610100900460ff1615808015610c725750600054600160ff909116105b80610c8c5750303b158015610c8c575060005460ff166001145b610cef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610670565b6000805460ff191660011790558015610d12576000805461ff0019166101001790555b610d1a610fb9565b610d25600033611026565b6097839055609b80546001600160a01b0319166001600160a01b03841690811790915560408051918252602082018590527fa4888636278c973bcfd5eca8f86d67bf0c980edbf1740721c6f229b0421ae1e2910160405180910390a180156105ff576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610783565b6000610dce81610e9d565b6001600160a01b038085166000908152609860205260409020541680610e0757604051632627b42d60e11b815260040160405180910390fd5b60405163b08805a560e01b815260048101859052602481018490526001600160a01b0382169063b08805a590604401600060405180830381600087803b158015610e5057600080fd5b505af1158015610e64573d6000803e3d6000fd5b505050505050505050565b6000610e7a81610e9d565b50609b80546001600160a01b0319166001600160a01b0392909216919091179055565b610ea78133611030565b50565b610eb48282610864565b6106835760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610eec3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610f3a8282610864565b156106835760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b609a54609754600091610fa9916115f7565b610fb49060016115f7565b905090565b600054610100900460ff166110245760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610670565b565b6106838282610eaa565b61103a8282610864565b6106835761104781611089565b61105283602061109b565b60405160200161106392919061162e565b60408051601f198184030181529082905262461bcd60e51b8252610670916004016116a3565b606061057a6001600160a01b03831660145b606060006110aa8360026116d6565b6110b59060026115f7565b67ffffffffffffffff8111156110cd576110cd611403565b6040519080825280601f01601f1916602001820160405280156110f7576020820181803683370190505b509050600360fc1b81600081518110611112576111126116ed565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611141576111416116ed565b60200101906001600160f81b031916908160001a90535060006111658460026116d6565b6111709060016115f7565b90505b60018111156111e8576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106111a4576111a46116ed565b1a60f81b8282815181106111ba576111ba6116ed565b60200101906001600160f81b031916908160001a90535060049490941c936111e181611703565b9050611173565b5083156112375760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610670565b9392505050565b60006020828403121561125057600080fd5b81356001600160e01b03198116811461123757600080fd5b80356001600160a01b038116811461127f57600080fd5b919050565b60006020828403121561129657600080fd5b61123782611268565b6000806000606084860312156112b457600080fd5b833580151581146112c457600080fd5b95602085013595506040909401359392505050565b6000602082840312156112eb57600080fd5b5035919050565b6000806040838503121561130557600080fd5b8235915061131560208401611268565b90509250929050565b6000806040838503121561133157600080fd5b61133a83611268565b946020939093013593505050565b60008060006060848603121561135d57600080fd5b61136684611268565b925061137460208501611268565b9150604084013590509250925092565b600080600080600060a0868803121561139c57600080fd5b6113a586611268565b94506113b360208701611268565b93506113c160408701611268565b94979396509394606081013594506080013592915050565b600080604083850312156113ec57600080fd5b6113f583611268565b915061131560208401611268565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261142a57600080fd5b8135602067ffffffffffffffff8083111561144757611447611403565b8260051b604051601f19603f8301168101818110848211171561146c5761146c611403565b60405293845285810183019383810192508785111561148a57600080fd5b83870191505b848210156114a957813583529183019190830190611490565b979650505050505050565b600080600080600060a086880312156114cc57600080fd5b6114d586611268565b94506114e360208701611268565b93506114f160408701611268565b9250606086013567ffffffffffffffff8082111561150e57600080fd5b61151a89838a01611419565b9350608088013591508082111561153057600080fd5b5061153d88828901611419565b9150509295509295909350565b60008060006060848603121561155f57600080fd5b6112c484611268565b600081518084526020808501945080840160005b838110156115985781518752958201959082019060010161157c565b509495945050505050565b6001600160a01b038581168252841660208201526080604082018190526000906115cf90830185611568565b82810360608401526114a98185611568565b634e487b7160e01b600052601160045260246000fd5b8082018082111561057a5761057a6115e1565b60005b8381101561162557818101518382015260200161160d565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161166681601785016020880161160a565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161169781602884016020880161160a565b01602801949350505050565b60208152600082518060208401526116c281604085016020870161160a565b601f01601f19169190910160400192915050565b808202811582820484141761057a5761057a6115e1565b634e487b7160e01b600052603260045260246000fd5b600081611712576117126115e1565b50600019019056fe40a5c770eee7730548a6335e1f372e76bf4759f6fda1a932bd9cfc33106f0b4ca2646970667358221220b2618605619fe9d7ba99fe3576b090ded9d2e679e72096e3edb485193e189db164736f6c63430008130033",
+ "nonce": "0x483",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xc7d9df9de8d8dd6db347a6ecffd38864a7649c4a6327fc847b1203a24872c293",
+ "transactionType": "CREATE",
+ "contractName": "ERC721ABLE",
+ "contractAddress": "0xdDC710e86c9C0E01852C0770C0817f59416518D7",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "type": "0x02",
+ "from": "0xd71256ec24925873ce9e9f085f89864ca05970bd",
+ "gas": "0x32518c",
+ "value": "0x0",
+ "data": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612c7380620000f46000396000f3fe60806040526004361061020f5760003560e01c806370a0823111610118578063a1db9782116100a0578063d5abeb011161006f578063d5abeb0114610622578063de7ecf8714610638578063e985e9c51461064e578063f2fde38b1461066e578063fe325e961461068e57600080fd5b8063a1db9782146105af578063a22cb465146105cf578063b88d4fde146105ef578063c87b56dd1461060257600080fd5b806384a0c766116100e757806384a0c7661461051c5780638c72c54e1461053c5780638da5cb5b1461055c5780639182ba971461057a57806395d89b411461059a57600080fd5b806370a08231146104ad578063715018a6146104cd578063731133e9146104e2578063754b377c146104f557600080fd5b806342842e0e1161019b57806365e8e4f41161016a57806365e8e4f4146103f557806366748e98146104155780636cc82b841461044d5780636dbdaae61461046d5780636f8b44b01461048d57600080fd5b806342842e0e1461036e5780634b1022621461038157806355f804b3146103b55780636352211e146103d557600080fd5b806318160ddd116101e257806318160ddd146102b857806323b872dd146102db5780632a778c9b146102ee5780632e37eef6146103045780634128541c1461034e57600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063095ea7b3146102a3575b600080fd5b34801561022057600080fd5b5061023461022f3660046121e8565b6106a3565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e6106b4565b6040516102409190612255565b34801561027757600080fd5b5061028b610286366004612268565b61074f565b6040516001600160a01b039091168152602001610240565b6102b66102b1366004612296565b61079c565b005b3480156102c457600080fd5b506102cd6107ac565b604051908152602001610240565b6102b66102e93660046122c2565b6107cc565b3480156102fa57600080fd5b506102cd60685481565b34801561031057600080fd5b5061032461031f366004612268565b6109d0565b6040805195865260208601949094529284019190915260608301521515608082015260a001610240565b34801561035a57600080fd5b5060655461028b906001600160a01b031681565b6102b661037c3660046122c2565b610a14565b34801561038d57600080fd5b506102cd7f73e84917c5def9002f59334ba09785218b36a703c0e3d37d832ea21e233bb17f81565b3480156103c157600080fd5b506102b66103d036600461234b565b610a34565b3480156103e157600080fd5b5061028b6103f0366004612268565b610a49565b34801561040157600080fd5b506102b6610410366004612417565b610a54565b34801561042157600080fd5b506102cd610430366004612296565b606c60209081526000928352604080842090915290825290205481565b34801561045957600080fd5b5060665461028b906001600160a01b031681565b34801561047957600080fd5b506102b6610488366004612268565b610cd9565b34801561049957600080fd5b506102b66104a8366004612268565b610ce6565b3480156104b957600080fd5b506102cd6104c836600461249f565b610d1b565b3480156104d957600080fd5b506102b6610d83565b6102b66104f03660046124bc565b610d97565b34801561050157600080fd5b5061050a600181565b60405160ff9091168152602001610240565b34801561052857600080fd5b506102b6610537366004612525565b610fbe565b34801561054857600080fd5b5060675461028b906001600160a01b031681565b34801561056857600080fd5b506033546001600160a01b031661028b565b34801561058657600080fd5b506102b66105953660046125aa565b611003565b3480156105a657600080fd5b5061025e6111ca565b3480156105bb57600080fd5b506102b66105ca366004612296565b611206565b3480156105db57600080fd5b506102b66105ea36600461262c565b61127f565b6102b66105fd366004612665565b6112fc565b34801561060e57600080fd5b5061025e61061d366004612268565b611346565b34801561062e57600080fd5b506102cd606d5481565b34801561064457600080fd5b506102cd60695481565b34801561065a57600080fd5b506102346106693660046126b8565b6114a1565b34801561067a57600080fd5b506102b661068936600461249f565b6114de565b34801561069a57600080fd5b506102b6611557565b60006106ae82611729565b92915050565b60606106be611777565b60020180546106cc906126e6565b80601f01602080910402602001604051908101604052809291908181526020018280546106f8906126e6565b80156107455780601f1061071a57610100808354040283529160200191610745565b820191906000526020600020905b81548152906001019060200180831161072857829003601f168201915b5050505050905090565b600061075a8261179b565b610777576040516333d1c03960e21b815260040160405180910390fd5b61077f611777565b60009283526006016020525060409020546001600160a01b031690565b6107a8828260016117e4565b5050565b600060016107b8611777565b600101546107c4611777565b540303919050565b60006107d782611899565b9050836001600160a01b0316816001600160a01b03161461080a5760405162a1148160e81b815260040160405180910390fd5b60008061081684611946565b9150915061083b81876108263390565b6001600160a01b039081169116811491141790565b6108665761084986336114a1565b61086657604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661088d57604051633a954ecd60e21b815260040160405180910390fd5b61089a868686600161196e565b80156108a557600082555b6108ad611777565b6001600160a01b03871660009081526005919091016020526040902080546000190190556108d9611777565b6001600160a01b03861660008181526005929092016020526040909120805460010190554260a01b17600160e11b17610910611777565b60008681526004919091016020526040812091909155600160e11b84169003610986576001840161093f611777565b60008281526004919091016020526040812054900361098457610960611777565b5481146109845783610970611777565b600083815260049190910160205260409020555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b606b81815481106109e057600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294509092909160ff1685565b610a2f838383604051806020016040528060008152506112fc565b505050565b610a3c6119ff565b606a610a2f828483612760565b60006106ae82611899565b600080516020612c1e83398151915254610100900460ff16610a8957600080516020612c1e8339815191525460ff1615610a8d565b303b155b610b045760405162461bcd60e51b815260206004820152603760248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e747261637460448201527f20697320616c726561647920696e697469616c697a656400000000000000000060648201526084015b60405180910390fd5b600080516020612c1e83398151915254610100900460ff16158015610b4057600080516020612c1e833981519152805461ffff19166101011790555b600054610100900460ff1615808015610b605750600054600160ff909116105b80610b7a5750303b158015610b7a575060005460ff166001145b610bdd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610afb565b6000805460ff191660011790558015610c00576000805461ff0019166101001790555b610c198360405180602001604052806000815250611a59565b610c21611a97565b610c2a86611ac6565b6000606855606580546001600160a01b038088166001600160a01b0319928316179092556066805487841690831617905560678054928916929091169190911790558015610cb2576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b508015610cd257600080516020612c1e833981519152805461ff00191690555b5050505050565b610ce16119ff565b606955565b610cee6119ff565b610cf6611b18565b811015610d1657604051632627b42d60e11b815260040160405180910390fd5b606d55565b60006001600160a01b038216610d44576040516323d3ad8160e21b815260040160405180910390fd5b6001600160401b03610d54611777565b6005016000846001600160a01b03166001600160a01b0316815260200190815260200160002054169050919050565b610d8b6119ff565b610d956000611ac6565b565b610da084611b2b565b610dbd576040516332f7a9d760e21b815260040160405180910390fd5b6000606b8581548110610dd257610dd261281f565b60009182526020918290206040805160a0810182526005909302909101805483526001810154938301939093526002830154908201526003820154606082015260049091015460ff1615156080820152606d5490915084610e31611b18565b610e3b919061284b565b1115610e5a576040516322eb5e9560e21b815260040160405180910390fd5b8060800151610ef9576066546040516332f1944960e21b81526001600160a01b039091169063cbc6512490610e9b90899030908a908990899060040161285e565b602060405180830381865afa158015610eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edc91906128b2565b610ef9576040516352c973a760e01b815260040160405180910390fd5b60608101516001600160a01b0387166000908152606c60209081526040808320898452909152902054610f2d90869061284b565b1115610f4c57604051631d66b65960e11b815260040160405180910390fd5b838160400151610f5c91906128cf565b3414610f7b576040516318f4198360e21b815260040160405180910390fd5b6001600160a01b0386166000908152606c6020908152604080832088845290915281208054869290610fae90849061284b565b909155506109c890508685611bd2565b610fc66119ff565b606d87905586851115610fec57604051632627b42d60e11b815260040160405180910390fd5b610ffa868686868686611d1a565b50505050505050565b61100b6119ff565b606b541561101f5761101f606b600061217d565b600081815b818110156111905760008585838181106110405761104061281f565b905060a0020180360381019061105691906128e6565b9050838160000151108061106e575060208101518151115b1561108c57604051632627b42d60e11b815260040160405180910390fd5b606b805460018101825560009190915281517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b4600590920291820181905560208301517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b583015560408301517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b683015560608301517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b78301556080909201517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b8909101805460ff191691151591909117905592506111898161295b565b9050611024565b506040518181527ffda37b53117c5bf84916ece7449890be93cbd2842914c83f4a6864adb618654f9060200160405180910390a150505050565b6060606854600014611203576111e1606854611e32565b6040516020016111f19190612974565b60405160208183030381529060405290505b90565b61120e6119ff565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561125b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2f91906128b2565b80611288611777565b336000818152600792909201602090815260408084206001600160a01b03881680865290835293819020805460ff19169515159590951790945592518415158152919290917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6113078484846107cc565b6001600160a01b0383163b156113405761132384848484611ec4565b611340576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60606113518261179b565b61136e57604051632627b42d60e11b815260040160405180910390fd5b6000611378611faf565b9050805160000361139a5760405180602001604052806000815250915061149b565b60408051600180825281830190925260009160208201818036833701905050905081600183516113ca919061299e565b815181106113da576113da61281f565b602001015160f81c60f81b816000815181106113f8576113f861281f565b60200101906001600160f81b031916908160001a905350604051602f60f81b60208201528190602101604051602081830303815290604052805190602001208160405160200161144891906129b1565b6040516020818303038152906040528051906020012003611494578261146d86611fbe565b60405160200161147e9291906129cd565b6040516020818303038152906040529350611498565b8293505b50505b50919050565b60006114ab611777565b6001600160a01b039384166000908152600791909101602090815260408083209490951682529290925250205460ff1690565b6114e66119ff565b6001600160a01b03811661154b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610afb565b61155481611ac6565b50565b61155f6119ff565b60655460675460685460405163608ebea160e01b81526001600160a01b03928316600482015260248101919091526000928392169063608ebea1906044016040805180830381865afa1580156115b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dd91906129fc565b90925090506001600160a01b03821661160957604051632627b42d60e11b815260040160405180910390fd5b47600061271061161984846128cf565b6116239190612a2a565b90506000611631828461299e565b905080156116af576000856001600160a01b03168260405160006040518083038185875af1925050503d8060008114611686576040519150601f19603f3d011682016040523d82523d6000602084013e61168b565b606091505b50509050806116ad57604051631fa55c0760e11b815260040160405180910390fd5b505b8115610cd2576067546040516000916001600160a01b03169084908381818185875af1925050503d8060008114611702576040519150601f19603f3d011682016040523d82523d6000602084013e611707565b606091505b50509050806109c857604051631fa55c0760e11b815260040160405180910390fd5b60006301ffc9a760e01b6001600160e01b03198316148061175a57506380ac58cd60e01b6001600160e01b03198316145b806106ae5750506001600160e01b031916635b5e139f60e01b1490565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4090565b6000816001111580156117b557506117b1611777565b5482105b80156106ae5750600160e01b6117c9611777565b60008481526004919091016020526040902054161592915050565b60006117ef83610a49565b9050811561182e57336001600160a01b0382161461182e5761181181336114a1565b61182e576040516367d9dca160e11b815260040160405180910390fd5b83611837611777565b6000858152600691909101602052604080822080546001600160a01b0319166001600160a01b0394851617905551859287811692908516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a450505050565b60008160011161192d576118ab611777565b600083815260049190910160205260408120549150600160e01b8216900361192d5780600003611928576118dd611777565b5482106118fd57604051636f96cda160e11b815260040160405180910390fd5b611905611777565b6000199092016000818152600493909301602052604090922054905080156118fd575b919050565b604051636f96cda160e11b815260040160405180910390fd5b6000806000611953611777565b60009485526006016020525050604090912080549092909150565b6069541561134057606554606754606854604051634bbfc15d60e11b81526001600160a01b0392831660048201528783166024820152868316604482015260648101919091526084810184905291169063977f82ba9060a401600060405180830381600087803b1580156119e157600080fd5b505af11580156119f5573d6000803e3d6000fd5b5050505050505050565b6033546001600160a01b03163314610d955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610afb565b600080516020612c1e83398151915254610100900460ff16611a8d5760405162461bcd60e51b8152600401610afb90612a4c565b6107a88282612002565b600054610100900460ff16611abe5760405162461bcd60e51b8152600401610afb90612aa0565b610d95612075565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001611b24611777565b5403919050565b606b546000908210611b5057604051632627b42d60e11b815260040160405180910390fd5b6000606b8381548110611b6557611b6561281f565b60009182526020918290206040805160a08101825260059093029091018054808452600182015494840194909452600281015491830191909152600381015460608301526004015460ff161515608082015291504210801590611bcb5750428160200151115b9392505050565b6000611bdc611777565b5490506000829003611c015760405163b562e8dd60e01b815260040160405180910390fd5b611c0e600084838561196e565b680100000000000000018202611c22611777565b6001600160a01b038516600081815260059290920160205260409091208054929092019091554260a01b6001841460e11b1717611c5d611777565b600083815260049190910160205260408120919091556001600160a01b0384169083830190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b818114611ce757808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101611caf565b5081600003611d0857604051622e076360e81b815260040160405180910390fd5b80611d11611777565b5550610a2f9050565b60685415611d3b576040516302d1671b60e41b815260040160405180910390fd5b85158015611d5157506001600160a01b03831615155b80611d6d57506001600160a01b038316158015611d6d57508515155b15611d8b57604051632627b42d60e11b815260040160405180910390fd5b60655460675460405163ae98d85760e01b81526001600160a01b03918216600482015285821660248201526000604482015291169063ae98d857906064016020604051808303816000875af1158015611de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0c9190612aeb565b6068556069869055606a611e21828483612760565b5084156109c8576109c88486611bd2565b60606000611e3f836120a5565b60010190506000816001600160401b03811115611e5e57611e5e61238c565b6040519080825280601f01601f191660200182016040528015611e88576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611e9257509392505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611ef9903390899088908890600401612b04565b6020604051808303816000875af1925050508015611f34575060408051601f3d908101601f19168201909252611f3191810190612b41565b60015b611f92573d808015611f62576040519150601f19603f3d011682016040523d82523d6000602084013e611f67565b606091505b508051600003611f8a576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6060606a80546106cc906126e6565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480611fd85750819003601f19909101908152919050565b600080516020612c1e83398151915254610100900460ff166120365760405162461bcd60e51b8152600401610afb90612a4c565b8161203f611777565b6002019061204d9082612b5e565b5080612057611777565b600301906120659082612b5e565b506001612070611777565b555050565b600054610100900460ff1661209c5760405162461bcd60e51b8152600401610afb90612aa0565b610d9533611ac6565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106120e45772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612110576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061212e57662386f26fc10000830492506010015b6305f5e1008310612146576305f5e100830492506008015b612710831061215a57612710830492506004015b6064831061216c576064830492506002015b600a83106106ae5760010192915050565b508054600082556005029060005260206000209081019061155491905b808211156121ce5760008082556001820181905560028201819055600382015560048101805460ff1916905560050161219a565b5090565b6001600160e01b03198116811461155457600080fd5b6000602082840312156121fa57600080fd5b8135611bcb816121d2565b60005b83811015612220578181015183820152602001612208565b50506000910152565b60008151808452612241816020860160208601612205565b601f01601f19169290920160200192915050565b602081526000611bcb6020830184612229565b60006020828403121561227a57600080fd5b5035919050565b6001600160a01b038116811461155457600080fd5b600080604083850312156122a957600080fd5b82356122b481612281565b946020939093013593505050565b6000806000606084860312156122d757600080fd5b83356122e281612281565b925060208401356122f281612281565b929592945050506040919091013590565b60008083601f84011261231557600080fd5b5081356001600160401b0381111561232c57600080fd5b60208301915083602082850101111561234457600080fd5b9250929050565b6000806020838503121561235e57600080fd5b82356001600160401b0381111561237457600080fd5b61238085828601612303565b90969095509350505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b03808411156123bc576123bc61238c565b604051601f8501601f19908116603f011681019082821181831017156123e4576123e461238c565b816040528093508581528686860111156123fd57600080fd5b858560208301376000602087830101525050509392505050565b6000806000806080858703121561242d57600080fd5b843561243881612281565b9350602085013561244881612281565b9250604085013561245881612281565b915060608501356001600160401b0381111561247357600080fd5b8501601f8101871361248457600080fd5b612493878235602084016123a2565b91505092959194509250565b6000602082840312156124b157600080fd5b8135611bcb81612281565b6000806000806000608086880312156124d457600080fd5b85356124df81612281565b9450602086013593506040860135925060608601356001600160401b0381111561250857600080fd5b61251488828901612303565b969995985093965092949392505050565b600080600080600080600060c0888a03121561254057600080fd5b873596506020880135955060408801359450606088013561256081612281565b9350608088013561257081612281565b925060a08801356001600160401b0381111561258b57600080fd5b6125978a828b01612303565b989b979a50959850939692959293505050565b600080602083850312156125bd57600080fd5b82356001600160401b03808211156125d457600080fd5b818501915085601f8301126125e857600080fd5b8135818111156125f757600080fd5b86602060a08302850101111561260c57600080fd5b60209290920196919550909350505050565b801515811461155457600080fd5b6000806040838503121561263f57600080fd5b823561264a81612281565b9150602083013561265a8161261e565b809150509250929050565b6000806000806080858703121561267b57600080fd5b843561268681612281565b9350602085013561269681612281565b92506040850135915060608501356001600160401b0381111561247357600080fd5b600080604083850312156126cb57600080fd5b82356126d681612281565b9150602083013561265a81612281565b600181811c908216806126fa57607f821691505b60208210810361149b57634e487b7160e01b600052602260045260246000fd5b601f821115610a2f57600081815260208120601f850160051c810160208610156127415750805b601f850160051c820191505b818110156109c85782815560010161274d565b6001600160401b038311156127775761277761238c565b61278b8361278583546126e6565b8361271a565b6000601f8411600181146127bf57600085156127a75750838201355b600019600387901b1c1916600186901b178355610cd2565b600083815260209020601f19861690835b828110156127f057868501358255602094850194600190920191016127d0565b508682101561280d5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156106ae576106ae612835565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6000602082840312156128c457600080fd5b8151611bcb8161261e565b80820281158282048414176106ae576106ae612835565b600060a082840312156128f857600080fd5b60405160a081018181106001600160401b038211171561291a5761291a61238c565b806040525082358152602083013560208201526040830135604082015260608301356060820152608083013561294f8161261e565b60808201529392505050565b60006001820161296d5761296d612835565b5060010190565b6120a160f11b815260008251612991816002850160208701612205565b9190910160020192915050565b818103818111156106ae576106ae612835565b600082516129c3818460208701612205565b9190910192915050565b600083516129df818460208801612205565b8351908301906129f3818360208801612205565b01949350505050565b60008060408385031215612a0f57600080fd5b8251612a1a81612281565b6020939093015192949293505050565b600082612a4757634e487b7160e01b600052601260045260246000fd5b500490565b60208082526034908201527f455243373231415f5f496e697469616c697a61626c653a20636f6e7472616374604082015273206973206e6f7420696e697469616c697a696e6760601b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600060208284031215612afd57600080fd5b5051919050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612b3790830184612229565b9695505050505050565b600060208284031215612b5357600080fd5b8151611bcb816121d2565b81516001600160401b03811115612b7757612b7761238c565b612b8b81612b8584546126e6565b8461271a565b602080601f831160018114612bc05760008415612ba85750858301515b600019600386901b1c1916600185901b1785556109c8565b600085815260208120601f198616915b82811015612bef57888601518255948401946001909101908401612bd0565b5085821015612c0d5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056feee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85fa2646970667358221220a9dd22b04ec37cf2afb5cdba470000e7559163057730e5cac14db8b6a172b7f164736f6c63430008130033",
+ "nonce": "0x484",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xa44071e057ccb66121a40d8e328625d15e471a621569e7f5966f630e080eec4c",
+ "transactionType": "CREATE",
+ "contractName": "ERC721ABOE",
+ "contractAddress": "0xEeB54C912C6971cC808a2f960b6E27148a66715c",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "type": "0x02",
+ "from": "0xd71256ec24925873ce9e9f085f89864ca05970bd",
+ "gas": "0x3084fb",
+ "value": "0x0",
+ "data": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612acf80620000f46000396000f3fe6080604052600436106101f95760003560e01c806370a082311161010d57806395d89b41116100a0578063c87b56dd1161006f578063c87b56dd146105cc578063de7ecf87146105ec578063e985e9c514610602578063f2fde38b14610622578063fe325e961461064257600080fd5b806395d89b4114610564578063a1db978214610579578063a22cb46514610599578063b88d4fde146105b957600080fd5b80638c5c2a5b116100dc5780638c5c2a5b146104e65780638c72c54e146105065780638da5cb5b146105265780639182ba971461054457600080fd5b806370a0823114610477578063715018a614610497578063731133e9146104ac578063754b377c146104bf57600080fd5b80634128541c116101905780636352211e1161015f5780636352211e146103bf57806365e8e4f4146103df57806366748e98146103ff5780636cc82b84146104375780636dbdaae61461045757600080fd5b80634128541c1461033857806342842e0e146103585780634b1022621461036b57806355f804b31461039f57600080fd5b806318160ddd116101cc57806318160ddd146102a257806323b872dd146102c55780632a778c9b146102d85780632e37eef6146102ee57600080fd5b806301ffc9a7146101fe57806306fdde0314610233578063081812fc14610255578063095ea7b31461028d575b600080fd5b34801561020a57600080fd5b5061021e610219366004612061565b610657565b60405190151581526020015b60405180910390f35b34801561023f57600080fd5b50610248610668565b60405161022a91906120ce565b34801561026157600080fd5b506102756102703660046120e1565b610703565b6040516001600160a01b03909116815260200161022a565b6102a061029b36600461210f565b610750565b005b3480156102ae57600080fd5b506102b7610760565b60405190815260200161022a565b6102a06102d336600461213b565b610780565b3480156102e457600080fd5b506102b760685481565b3480156102fa57600080fd5b5061030e6103093660046120e1565b610984565b6040805195865260208601949094529284019190915260608301521515608082015260a00161022a565b34801561034457600080fd5b50606554610275906001600160a01b031681565b6102a061036636600461213b565b6109c8565b34801561037757600080fd5b506102b77fdcfc50123fc6ea3c803b5b1b4cbbc9ce5b81f13451fd3124e43ef593fd840d1981565b3480156103ab57600080fd5b506102a06103ba3660046121c4565b6109e8565b3480156103cb57600080fd5b506102756103da3660046120e1565b6109fd565b3480156103eb57600080fd5b506102a06103fa366004612290565b610a08565b34801561040b57600080fd5b506102b761041a36600461210f565b606c60209081526000928352604080842090915290825290205481565b34801561044357600080fd5b50606654610275906001600160a01b031681565b34801561046357600080fd5b506102a06104723660046120e1565b610c8d565b34801561048357600080fd5b506102b7610492366004612318565b610c9a565b3480156104a357600080fd5b506102a0610d02565b6102a06104ba366004612335565b610d16565b3480156104cb57600080fd5b506104d4600181565b60405160ff909116815260200161022a565b3480156104f257600080fd5b506102a061050136600461239e565b610e79565b34801561051257600080fd5b50606754610275906001600160a01b031681565b34801561053257600080fd5b506033546001600160a01b0316610275565b34801561055057600080fd5b506102a061055f366004612419565b610e8f565b34801561057057600080fd5b50610248611056565b34801561058557600080fd5b506102a061059436600461210f565b611092565b3480156105a557600080fd5b506102a06105b436600461249b565b61110b565b6102a06105c73660046124d4565b611188565b3480156105d857600080fd5b506102486105e73660046120e1565b6111d2565b3480156105f857600080fd5b506102b760695481565b34801561060e57600080fd5b5061021e61061d366004612527565b61132d565b34801561062e57600080fd5b506102a061063d366004612318565b61136a565b34801561064e57600080fd5b506102a06113e3565b6000610662826115b5565b92915050565b6060610672611603565b600201805461068090612555565b80601f01602080910402602001604051908101604052809291908181526020018280546106ac90612555565b80156106f95780601f106106ce576101008083540402835291602001916106f9565b820191906000526020600020905b8154815290600101906020018083116106dc57829003601f168201915b5050505050905090565b600061070e82611627565b61072b576040516333d1c03960e21b815260040160405180910390fd5b610733611603565b60009283526006016020525060409020546001600160a01b031690565b61075c82826001611670565b5050565b6000600161076c611603565b60010154610778611603565b540303919050565b600061078b82611725565b9050836001600160a01b0316816001600160a01b0316146107be5760405162a1148160e81b815260040160405180910390fd5b6000806107ca846117d2565b915091506107ef81876107da3390565b6001600160a01b039081169116811491141790565b61081a576107fd863361132d565b61081a57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661084157604051633a954ecd60e21b815260040160405180910390fd5b61084e86868660016117fa565b801561085957600082555b610861611603565b6001600160a01b038716600090815260059190910160205260409020805460001901905561088d611603565b6001600160a01b03861660008181526005929092016020526040909120805460010190554260a01b17600160e11b176108c4611603565b60008681526004919091016020526040812091909155600160e11b8416900361093a57600184016108f3611603565b60008281526004919091016020526040812054900361093857610914611603565b5481146109385783610924611603565b600083815260049190910160205260409020555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b606b818154811061099457600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294509092909160ff1685565b6109e383838360405180602001604052806000815250611188565b505050565b6109f061188b565b606a6109e38284836125cf565b600061066282611725565b600080516020612a7a83398151915254610100900460ff16610a3d57600080516020612a7a8339815191525460ff1615610a41565b303b155b610ab85760405162461bcd60e51b815260206004820152603760248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e747261637460448201527f20697320616c726561647920696e697469616c697a656400000000000000000060648201526084015b60405180910390fd5b600080516020612a7a83398151915254610100900460ff16158015610af457600080516020612a7a833981519152805461ffff19166101011790555b600054610100900460ff1615808015610b145750600054600160ff909116105b80610b2e5750303b158015610b2e575060005460ff166001145b610b915760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610aaf565b6000805460ff191660011790558015610bb4576000805461ff0019166101001790555b610bcd83604051806020016040528060008152506118e5565b610bd5611923565b610bde86611952565b6000606855606580546001600160a01b038088166001600160a01b0319928316179092556066805487841690831617905560678054928916929091169190911790558015610c66576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b508015610c8657600080516020612a7a833981519152805461ff00191690555b5050505050565b610c9561188b565b606955565b60006001600160a01b038216610cc3576040516323d3ad8160e21b815260040160405180910390fd5b6001600160401b03610cd3611603565b6005016000846001600160a01b03166001600160a01b0316815260200190815260200160002054169050919050565b610d0a61188b565b610d146000611952565b565b610d1f846119a4565b610d3c576040516332f7a9d760e21b815260040160405180910390fd5b6000606b8581548110610d5157610d5161268e565b60009182526020918290206040805160a0810182526005909302909101805483526001810154938301939093526002830154908201526003820154606082015260049091015460ff16151560808201819052909150610e40576066546040516332f1944960e21b81526001600160a01b039091169063cbc6512490610de290899030908a90899089906004016126a4565b602060405180830381865afa158015610dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2391906126f8565b610e40576040516352c973a760e01b815260040160405180910390fd5b838160400151610e50919061272b565b3414610e6f576040516318f4198360e21b815260040160405180910390fd5b61097c8685611a4b565b610e8161188b565b61097c868686868686611b93565b610e9761188b565b606b5415610eab57610eab606b6000611ff6565b600081815b8181101561101c576000858583818110610ecc57610ecc61268e565b905060a00201803603810190610ee29190612742565b90508381600001511080610efa575060208101518151115b15610f1857604051632627b42d60e11b815260040160405180910390fd5b606b805460018101825560009190915281517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b4600590920291820181905560208301517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b583015560408301517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b683015560608301517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b78301556080909201517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b8909101805460ff19169115159190911790559250611015816127b7565b9050610eb0565b506040518181527ffda37b53117c5bf84916ece7449890be93cbd2842914c83f4a6864adb618654f9060200160405180910390a150505050565b606060685460001461108f5761106d606854611cab565b60405160200161107d91906127d0565b60405160208183030381529060405290505b90565b61109a61188b565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156110e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e391906126f8565b80611114611603565b336000818152600792909201602090815260408084206001600160a01b03881680865290835293819020805460ff19169515159590951790945592518415158152919290917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611193848484610780565b6001600160a01b0383163b156111cc576111af84848484611d3d565b6111cc576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60606111dd82611627565b6111fa57604051632627b42d60e11b815260040160405180910390fd5b6000611204611e28565b9050805160000361122657604051806020016040528060008152509150611327565b604080516001808252818301909252600091602082018180368337019050509050816001835161125691906127fa565b815181106112665761126661268e565b602001015160f81c60f81b816000815181106112845761128461268e565b60200101906001600160f81b031916908160001a905350604051602f60f81b6020820152819060210160405160208183030381529060405280519060200120816040516020016112d4919061280d565b604051602081830303815290604052805190602001200361132057826112f986611e37565b60405160200161130a929190612829565b6040516020818303038152906040529350611324565b8293505b50505b50919050565b6000611337611603565b6001600160a01b039384166000908152600791909101602090815260408083209490951682529290925250205460ff1690565b61137261188b565b6001600160a01b0381166113d75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aaf565b6113e081611952565b50565b6113eb61188b565b60655460675460685460405163608ebea160e01b81526001600160a01b03928316600482015260248101919091526000928392169063608ebea1906044016040805180830381865afa158015611445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114699190612858565b90925090506001600160a01b03821661149557604051632627b42d60e11b815260040160405180910390fd5b4760006127106114a5848461272b565b6114af9190612886565b905060006114bd82846127fa565b9050801561153b576000856001600160a01b03168260405160006040518083038185875af1925050503d8060008114611512576040519150601f19603f3d011682016040523d82523d6000602084013e611517565b606091505b505090508061153957604051631fa55c0760e11b815260040160405180910390fd5b505b8115610c86576067546040516000916001600160a01b03169084908381818185875af1925050503d806000811461158e576040519150601f19603f3d011682016040523d82523d6000602084013e611593565b606091505b505090508061097c57604051631fa55c0760e11b815260040160405180910390fd5b60006301ffc9a760e01b6001600160e01b0319831614806115e657506380ac58cd60e01b6001600160e01b03198316145b806106625750506001600160e01b031916635b5e139f60e01b1490565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4090565b600081600111158015611641575061163d611603565b5482105b80156106625750600160e01b611655611603565b60008481526004919091016020526040902054161592915050565b600061167b836109fd565b905081156116ba57336001600160a01b038216146116ba5761169d813361132d565b6116ba576040516367d9dca160e11b815260040160405180910390fd5b836116c3611603565b6000858152600691909101602052604080822080546001600160a01b0319166001600160a01b0394851617905551859287811692908516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a450505050565b6000816001116117b957611737611603565b600083815260049190910160205260408120549150600160e01b821690036117b957806000036117b457611769611603565b54821061178957604051636f96cda160e11b815260040160405180910390fd5b611791611603565b600019909201600081815260049390930160205260409092205490508015611789575b919050565b604051636f96cda160e11b815260040160405180910390fd5b60008060006117df611603565b60009485526006016020525050604090912080549092909150565b606954156111cc57606554606754606854604051634bbfc15d60e11b81526001600160a01b0392831660048201528783166024820152868316604482015260648101919091526084810184905291169063977f82ba9060a401600060405180830381600087803b15801561186d57600080fd5b505af1158015611881573d6000803e3d6000fd5b5050505050505050565b6033546001600160a01b03163314610d145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aaf565b600080516020612a7a83398151915254610100900460ff166119195760405162461bcd60e51b8152600401610aaf906128a8565b61075c8282611e7b565b600054610100900460ff1661194a5760405162461bcd60e51b8152600401610aaf906128fc565b610d14611eee565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606b5460009082106119c957604051632627b42d60e11b815260040160405180910390fd5b6000606b83815481106119de576119de61268e565b60009182526020918290206040805160a08101825260059093029091018054808452600182015494840194909452600281015491830191909152600381015460608301526004015460ff161515608082015291504210801590611a445750428160200151115b9392505050565b6000611a55611603565b5490506000829003611a7a5760405163b562e8dd60e01b815260040160405180910390fd5b611a8760008483856117fa565b680100000000000000018202611a9b611603565b6001600160a01b038516600081815260059290920160205260409091208054929092019091554260a01b6001841460e11b1717611ad6611603565b600083815260049190910160205260408120919091556001600160a01b0384169083830190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b818114611b6057808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101611b28565b5081600003611b8157604051622e076360e81b815260040160405180910390fd5b80611b8a611603565b55506109e39050565b60685415611bb4576040516302d1671b60e41b815260040160405180910390fd5b85158015611bca57506001600160a01b03831615155b80611be657506001600160a01b038316158015611be657508515155b15611c0457604051632627b42d60e11b815260040160405180910390fd5b60655460675460405163ae98d85760e01b81526001600160a01b03918216600482015285821660248201526000604482015291169063ae98d857906064016020604051808303816000875af1158015611c61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c859190612947565b6068556069869055606a611c9a8284836125cf565b50841561097c5761097c8486611a4b565b60606000611cb883611f1e565b60010190506000816001600160401b03811115611cd757611cd7612205565b6040519080825280601f01601f191660200182016040528015611d01576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611d0b57509392505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611d72903390899088908890600401612960565b6020604051808303816000875af1925050508015611dad575060408051601f3d908101601f19168201909252611daa9181019061299d565b60015b611e0b573d808015611ddb576040519150601f19603f3d011682016040523d82523d6000602084013e611de0565b606091505b508051600003611e03576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6060606a805461068090612555565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480611e515750819003601f19909101908152919050565b600080516020612a7a83398151915254610100900460ff16611eaf5760405162461bcd60e51b8152600401610aaf906128a8565b81611eb8611603565b60020190611ec690826129ba565b5080611ed0611603565b60030190611ede90826129ba565b506001611ee9611603565b555050565b600054610100900460ff16611f155760405162461bcd60e51b8152600401610aaf906128fc565b610d1433611952565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611f5d5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611f89576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611fa757662386f26fc10000830492506010015b6305f5e1008310611fbf576305f5e100830492506008015b6127108310611fd357612710830492506004015b60648310611fe5576064830492506002015b600a83106106625760010192915050565b50805460008255600502906000526020600020908101906113e091905b808211156120475760008082556001820181905560028201819055600382015560048101805460ff19169055600501612013565b5090565b6001600160e01b0319811681146113e057600080fd5b60006020828403121561207357600080fd5b8135611a448161204b565b60005b83811015612099578181015183820152602001612081565b50506000910152565b600081518084526120ba81602086016020860161207e565b601f01601f19169290920160200192915050565b602081526000611a4460208301846120a2565b6000602082840312156120f357600080fd5b5035919050565b6001600160a01b03811681146113e057600080fd5b6000806040838503121561212257600080fd5b823561212d816120fa565b946020939093013593505050565b60008060006060848603121561215057600080fd5b833561215b816120fa565b9250602084013561216b816120fa565b929592945050506040919091013590565b60008083601f84011261218e57600080fd5b5081356001600160401b038111156121a557600080fd5b6020830191508360208285010111156121bd57600080fd5b9250929050565b600080602083850312156121d757600080fd5b82356001600160401b038111156121ed57600080fd5b6121f98582860161217c565b90969095509350505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561223557612235612205565b604051601f8501601f19908116603f0116810190828211818310171561225d5761225d612205565b8160405280935085815286868601111561227657600080fd5b858560208301376000602087830101525050509392505050565b600080600080608085870312156122a657600080fd5b84356122b1816120fa565b935060208501356122c1816120fa565b925060408501356122d1816120fa565b915060608501356001600160401b038111156122ec57600080fd5b8501601f810187136122fd57600080fd5b61230c8782356020840161221b565b91505092959194509250565b60006020828403121561232a57600080fd5b8135611a44816120fa565b60008060008060006080868803121561234d57600080fd5b8535612358816120fa565b9450602086013593506040860135925060608601356001600160401b0381111561238157600080fd5b61238d8882890161217c565b969995985093965092949392505050565b60008060008060008060a087890312156123b757600080fd5b863595506020870135945060408701356123d0816120fa565b935060608701356123e0816120fa565b925060808701356001600160401b038111156123fb57600080fd5b61240789828a0161217c565b979a9699509497509295939492505050565b6000806020838503121561242c57600080fd5b82356001600160401b038082111561244357600080fd5b818501915085601f83011261245757600080fd5b81358181111561246657600080fd5b86602060a08302850101111561247b57600080fd5b60209290920196919550909350505050565b80151581146113e057600080fd5b600080604083850312156124ae57600080fd5b82356124b9816120fa565b915060208301356124c98161248d565b809150509250929050565b600080600080608085870312156124ea57600080fd5b84356124f5816120fa565b93506020850135612505816120fa565b92506040850135915060608501356001600160401b038111156122ec57600080fd5b6000806040838503121561253a57600080fd5b8235612545816120fa565b915060208301356124c9816120fa565b600181811c9082168061256957607f821691505b60208210810361132757634e487b7160e01b600052602260045260246000fd5b601f8211156109e357600081815260208120601f850160051c810160208610156125b05750805b601f850160051c820191505b8181101561097c578281556001016125bc565b6001600160401b038311156125e6576125e6612205565b6125fa836125f48354612555565b83612589565b6000601f84116001811461262e57600085156126165750838201355b600019600387901b1c1916600186901b178355610c86565b600083815260209020601f19861690835b8281101561265f578685013582556020948501946001909201910161263f565b508682101561267c5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b60006020828403121561270a57600080fd5b8151611a448161248d565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761066257610662612715565b600060a0828403121561275457600080fd5b60405160a081018181106001600160401b038211171561277657612776612205565b80604052508235815260208301356020820152604083013560408201526060830135606082015260808301356127ab8161248d565b60808201529392505050565b6000600182016127c9576127c9612715565b5060010190565b6120a160f11b8152600082516127ed81600285016020870161207e565b9190910160020192915050565b8181038181111561066257610662612715565b6000825161281f81846020870161207e565b9190910192915050565b6000835161283b81846020880161207e565b83519083019061284f81836020880161207e565b01949350505050565b6000806040838503121561286b57600080fd5b8251612876816120fa565b6020939093015192949293505050565b6000826128a357634e487b7160e01b600052601260045260246000fd5b500490565b60208082526034908201527f455243373231415f5f496e697469616c697a61626c653a20636f6e7472616374604082015273206973206e6f7420696e697469616c697a696e6760601b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60006020828403121561295957600080fd5b5051919050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612993908301846120a2565b9695505050505050565b6000602082840312156129af57600080fd5b8151611a448161204b565b81516001600160401b038111156129d3576129d3612205565b6129e7816129e18454612555565b84612589565b602080601f831160018114612a1c5760008415612a045750858301515b600019600386901b1c1916600185901b17855561097c565b600085815260208120601f198616915b82811015612a4b57888601518255948401946001909101908401612a2c565b5085821015612a695787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056feee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85fa264697066735822122023fa41bc39b9268e59f7967d1440716167d00463f29541b323f7e476d816a66d64736f6c63430008130033",
+ "nonce": "0x485",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x177ee1ac28d6153b493f8d756cac44bc933eab4016f50a7f87bfd058a2b6bf3f",
+ "transactionType": "CALL",
+ "contractName": "TransparentUpgradeableProxy",
+ "contractAddress": "0x9BE7E2B13f70f170B63c0379663313EcdB527294",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "type": "0x02",
+ "from": "0xd71256ec24925873ce9e9f085f89864ca05970bd",
+ "to": "0x9be7e2b13f70f170b63c0379663313ecdb527294",
+ "gas": "0xc552",
+ "value": "0x0",
+ "data": "0x641254bd000000000000000000000000ddc710e86c9c0e01852c0770c0817f59416518d7",
+ "nonce": "0x486",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "transactionHash": "0x87bbc0bb208ac803aa0b7d13ad37c9da03932cf319c9a3a0b40d0a906b001b0b",
+ "transactionIndex": "0x1",
+ "blockHash": "0x6ccd9336c9345457abd191a21a5ef21699dd729188653e3d0be0a9fa1481c887",
+ "blockNumber": "0xb30623",
+ "from": "0xD71256eC24925873cE9E9F085f89864Ca05970bD",
+ "to": null,
+ "cumulativeGasUsed": "0x15b421",
+ "gasUsed": "0x14fd1c",
+ "contractAddress": "0x072e8fB0aa2C75F727da6df3220eF676A966bcc8",
+ "logs": [
+ {
+ "address": "0x072e8fB0aa2C75F727da6df3220eF676A966bcc8",
+ "topics": [
+ "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498"
+ ],
+ "data": "0x00000000000000000000000000000000000000000000000000000000000000ff",
+ "blockHash": "0x6ccd9336c9345457abd191a21a5ef21699dd729188653e3d0be0a9fa1481c887",
+ "blockNumber": "0xb30623",
+ "transactionHash": "0x87bbc0bb208ac803aa0b7d13ad37c9da03932cf319c9a3a0b40d0a906b001b0b",
+ "transactionIndex": "0x1",
+ "logIndex": "0x0",
+ "removed": false
+ }
+ ],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000008000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xb2d05e32"
+ },
+ {
+ "transactionHash": "0xc7d9df9de8d8dd6db347a6ecffd38864a7649c4a6327fc847b1203a24872c293",
+ "transactionIndex": "0x2",
+ "blockHash": "0x6ccd9336c9345457abd191a21a5ef21699dd729188653e3d0be0a9fa1481c887",
+ "blockNumber": "0xb30623",
+ "from": "0xD71256eC24925873cE9E9F085f89864Ca05970bD",
+ "to": null,
+ "cumulativeGasUsed": "0x3c6903",
+ "gasUsed": "0x26b4e2",
+ "contractAddress": "0xdDC710e86c9C0E01852C0770C0817f59416518D7",
+ "logs": [
+ {
+ "address": "0xdDC710e86c9C0E01852C0770C0817f59416518D7",
+ "topics": [
+ "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498"
+ ],
+ "data": "0x00000000000000000000000000000000000000000000000000000000000000ff",
+ "blockHash": "0x6ccd9336c9345457abd191a21a5ef21699dd729188653e3d0be0a9fa1481c887",
+ "blockNumber": "0xb30623",
+ "transactionHash": "0xc7d9df9de8d8dd6db347a6ecffd38864a7649c4a6327fc847b1203a24872c293",
+ "transactionIndex": "0x2",
+ "logIndex": "0x1",
+ "removed": false
+ }
+ ],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xb2d05e32"
+ },
+ {
+ "transactionHash": "0xa44071e057ccb66121a40d8e328625d15e471a621569e7f5966f630e080eec4c",
+ "transactionIndex": "0x3",
+ "blockHash": "0x6ccd9336c9345457abd191a21a5ef21699dd729188653e3d0be0a9fa1481c887",
+ "blockNumber": "0xb30623",
+ "from": "0xD71256eC24925873cE9E9F085f89864Ca05970bD",
+ "to": null,
+ "cumulativeGasUsed": "0x61bb9d",
+ "gasUsed": "0x25529a",
+ "contractAddress": "0xEeB54C912C6971cC808a2f960b6E27148a66715c",
+ "logs": [
+ {
+ "address": "0xEeB54C912C6971cC808a2f960b6E27148a66715c",
+ "topics": [
+ "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498"
+ ],
+ "data": "0x00000000000000000000000000000000000000000000000000000000000000ff",
+ "blockHash": "0x6ccd9336c9345457abd191a21a5ef21699dd729188653e3d0be0a9fa1481c887",
+ "blockNumber": "0xb30623",
+ "transactionHash": "0xa44071e057ccb66121a40d8e328625d15e471a621569e7f5966f630e080eec4c",
+ "transactionIndex": "0x3",
+ "logIndex": "0x2",
+ "removed": false
+ }
+ ],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000100000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xb2d05e32"
+ },
+ {
+ "transactionHash": "0x177ee1ac28d6153b493f8d756cac44bc933eab4016f50a7f87bfd058a2b6bf3f",
+ "transactionIndex": "0x4",
+ "blockHash": "0x6ccd9336c9345457abd191a21a5ef21699dd729188653e3d0be0a9fa1481c887",
+ "blockNumber": "0xb30623",
+ "from": "0xD71256eC24925873cE9E9F085f89864Ca05970bD",
+ "to": "0x9BE7E2B13f70f170B63c0379663313EcdB527294",
+ "cumulativeGasUsed": "0x624a79",
+ "gasUsed": "0x8edc",
+ "contractAddress": null,
+ "logs": [],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xb2d05e32"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1698658651,
+ "chain": 84531,
+ "multi": false,
+ "commit": "cec81dc"
+}
\ No newline at end of file
diff --git a/broadcast/deploy-upgrade.s.sol/84531/run-1698658702.json b/broadcast/deploy-upgrade.s.sol/84531/run-1698658702.json
new file mode 100644
index 0000000..80df778
--- /dev/null
+++ b/broadcast/deploy-upgrade.s.sol/84531/run-1698658702.json
@@ -0,0 +1,196 @@
+{
+ "transactions": [
+ {
+ "hash": "0x87bbc0bb208ac803aa0b7d13ad37c9da03932cf319c9a3a0b40d0a906b001b0b",
+ "transactionType": "CREATE",
+ "contractName": "ABDataRegistry",
+ "contractAddress": "0x072e8fB0aa2C75F727da6df3220eF676A966bcc8",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "type": "0x02",
+ "from": "0xd71256ec24925873ce9e9f085f89864ca05970bd",
+ "gas": "0x1b490a",
+ "value": "0x0",
+ "data": "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611770806100ed6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80638353b91911610104578063b9138580116100a2578063d547741f11610071578063d547741f146104fd578063da35a26f14610510578063dd3394aa14610523578063f0f442601461053657600080fd5b8063b9138580146104a4578063b9d47392146104c4578063c70eae8c146104d7578063cb9685ba146104ea57600080fd5b806391d14854116100de57806391d1485414610463578063977f82ba14610476578063a217fddf14610489578063ae98d8571461049157600080fd5b80638353b919146104115780638392767d146104245780638ffaa1401461043757600080fd5b80632f2ff15d1161017c5780635eb399681161014b5780635eb399681461036a578063608ebea1146103ac57806369ca69a5146103de57806371ef9a93146103fe57600080fd5b80632f2ff15d146102f357806336568abe1461030657806341859ac8146103195780635134b49a1461034757600080fd5b80630a4d85cd116101b85780630a4d85cd14610265578063145f8dd4146102a657806319742e6c146102bb578063248a9ca3146102d057600080fd5b806301ffc9a7146101df57806304a0fb1714610207578063069a9b641461023c575b600080fd5b6101f26101ed36600461123e565b610549565b60405190151581526020015b60405180910390f35b61022e7fdfbefbf47cfe66b701d8cfdbce1de81c821590819cb07e71cb01b6602fb0ee2781565b6040519081526020016101fe565b61022e61024a366004611284565b6001600160a01b031660009081526099602052604090205490565b61028e610273366004611284565b6098602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016101fe565b61022e60008051602061171b83398151915281565b6102ce6102c936600461129f565b610580565b005b61022e6102de3660046112d9565b60009081526065602052604090206001015490565b6102ce6103013660046112f2565b6105da565b6102ce6103143660046112f2565b610604565b6101f2610327366004611284565b6001600160a01b0390811660009081526098602052604090205416151590565b6101f26103553660046112d9565b609c6020526000908152604090205460ff1681565b61037d6103783660046112d9565b610687565b6040805194855260208501939093526001600160a01b03918216928401929092521660608201526080016101fe565b6103bf6103ba36600461131e565b6106cd565b604080516001600160a01b0390931683526020830191909152016101fe565b61022e6103ec3660046112d9565b609d6020526000908152604090205481565b6102ce61040c36600461131e565b61072b565b6102ce61041f366004611348565b610790565b609b5461028e906001600160a01b031681565b61028e610445366004611284565b6001600160a01b039081166000908152609860205260409020541690565b6101f26104713660046112f2565b610864565b6102ce610484366004611384565b61088f565b61022e600081565b61022e61049f366004611348565b610937565b61022e6104b2366004611284565b60996020526000908152604090205481565b6102ce6104d23660046113d9565b610b2b565b6102ce6104e5366004611284565b610b8c565b6102ce6104f83660046114b4565b610bce565b6102ce61050b3660046112f2565b610c2d565b6102ce61051e3660046112f2565b610c52565b6102ce61053136600461154a565b610dc3565b6102ce610544366004611284565b610e6f565b60006001600160e01b03198216637965db0b60e01b148061057a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b600061058b81610e9d565b6127108211156105ae57604051632627b42d60e11b815260040160405180910390fd5b506000918252609c60209081526040808420805460ff191695151595909517909455609d905291902055565b6000828152606560205260409020600101546105f581610e9d565b6105ff8383610eaa565b505050565b6001600160a01b03811633146106795760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6106838282610f30565b5050565b609a818154811061069757600080fd5b60009182526020909120600490910201805460018201546002830154600390930154919350916001600160a01b03908116911684565b6000818152609c6020526040812054819060ff16156106fb57506000828152609d6020526040902054610716565b506001600160a01b0383166000908152609960205260409020545b609b546001600160a01b031694909350915050565b600061073681610e9d565b6001600160a01b038316600081815260996020908152604091829020859055815192835282018490527fc1c540da095b5b6d54738e18568e3c832ae9d1a26f1abeb3e69efde2d4fd6ec291015b60405180910390a1505050565b7fdfbefbf47cfe66b701d8cfdbce1de81c821590819cb07e71cb01b6602fb0ee276107ba81610e9d565b6001600160a01b0384811660009081526098602052604090205416156107f35760405163515567cf60e01b815260040160405180910390fd5b6001600160a01b03848116600081815260986020908152604080832080546001600160a01b0319169589169586179055609982529182902086905590519182527fb0c28f4dd5b8aa95e332651d07f6930a2f9d46ae2bc4bfa73e2f33e478a1269b910160405180910390a250505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008051602061171b8339815191526108a781610e9d565b6001600160a01b03868116600090815260986020526040908190205490516323f4440760e21b81528783166004820152868316602482015260448101869052606481018590529116908190638fd1101c906084015b600060405180830381600087803b15801561091657600080fd5b505af115801561092a573d6000803e3d6000fd5b5050505050505050505050565b600060008051602061171b83398151915261095181610e9d565b610959610f97565b6040805160808101825282815260208082018781526001600160a01b038a81168486018181523360608701818152609a8054600181018255600091909152975160049098027f44da158ba27f9252712a74ff6a55c5d531f69609f1f6e7f17c4443a8e2089be481019890985594517f44da158ba27f9252712a74ff6a55c5d531f69609f1f6e7f17c4443a8e2089be588015590517f44da158ba27f9252712a74ff6a55c5d531f69609f1f6e7f17c4443a8e2089be6870180549185166001600160a01b031992831617905593517f44da158ba27f9252712a74ff6a55c5d531f69609f1f6e7f17c4443a8e2089be790960180549690931695909316949094179055835190815290810191909152919350849184917f5cbfe9cceabf50e9fcfff39e46cd47b1667ad148238648e99aee4fa0e1193d43910160405180910390a36001600160a01b03841615610b23576001600160a01b0385811660009081526098602052604090819020549051633670855b60e11b8152336004820152868316602482015260448101859052911690636ce10ab690606401600060405180830381600087803b158015610b0a57600080fd5b505af1158015610b1e573d6000803e3d6000fd5b505050505b509392505050565b6000610b3681610e9d565b6001600160a01b038216610b5d57604051632627b42d60e11b815260040160405180910390fd5b506001600160a01b03918216600090815260986020526040902080546001600160a01b03191691909216179055565b7fdfbefbf47cfe66b701d8cfdbce1de81c821590819cb07e71cb01b6602fb0ee27610bb681610e9d565b61068360008051602061171b83398151915283610eaa565b60008051602061171b833981519152610be681610e9d565b6001600160a01b038087166000908152609860205260409081902054905163d518b7ff60e01b8152911690819063d518b7ff906108fc9089908990899089906004016115a3565b600082815260656020526040902060010154610c4881610e9d565b6105ff8383610f30565b600054610100900460ff1615808015610c725750600054600160ff909116105b80610c8c5750303b158015610c8c575060005460ff166001145b610cef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610670565b6000805460ff191660011790558015610d12576000805461ff0019166101001790555b610d1a610fb9565b610d25600033611026565b6097839055609b80546001600160a01b0319166001600160a01b03841690811790915560408051918252602082018590527fa4888636278c973bcfd5eca8f86d67bf0c980edbf1740721c6f229b0421ae1e2910160405180910390a180156105ff576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610783565b6000610dce81610e9d565b6001600160a01b038085166000908152609860205260409020541680610e0757604051632627b42d60e11b815260040160405180910390fd5b60405163b08805a560e01b815260048101859052602481018490526001600160a01b0382169063b08805a590604401600060405180830381600087803b158015610e5057600080fd5b505af1158015610e64573d6000803e3d6000fd5b505050505050505050565b6000610e7a81610e9d565b50609b80546001600160a01b0319166001600160a01b0392909216919091179055565b610ea78133611030565b50565b610eb48282610864565b6106835760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610eec3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610f3a8282610864565b156106835760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b609a54609754600091610fa9916115f7565b610fb49060016115f7565b905090565b600054610100900460ff166110245760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610670565b565b6106838282610eaa565b61103a8282610864565b6106835761104781611089565b61105283602061109b565b60405160200161106392919061162e565b60408051601f198184030181529082905262461bcd60e51b8252610670916004016116a3565b606061057a6001600160a01b03831660145b606060006110aa8360026116d6565b6110b59060026115f7565b67ffffffffffffffff8111156110cd576110cd611403565b6040519080825280601f01601f1916602001820160405280156110f7576020820181803683370190505b509050600360fc1b81600081518110611112576111126116ed565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611141576111416116ed565b60200101906001600160f81b031916908160001a90535060006111658460026116d6565b6111709060016115f7565b90505b60018111156111e8576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106111a4576111a46116ed565b1a60f81b8282815181106111ba576111ba6116ed565b60200101906001600160f81b031916908160001a90535060049490941c936111e181611703565b9050611173565b5083156112375760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610670565b9392505050565b60006020828403121561125057600080fd5b81356001600160e01b03198116811461123757600080fd5b80356001600160a01b038116811461127f57600080fd5b919050565b60006020828403121561129657600080fd5b61123782611268565b6000806000606084860312156112b457600080fd5b833580151581146112c457600080fd5b95602085013595506040909401359392505050565b6000602082840312156112eb57600080fd5b5035919050565b6000806040838503121561130557600080fd5b8235915061131560208401611268565b90509250929050565b6000806040838503121561133157600080fd5b61133a83611268565b946020939093013593505050565b60008060006060848603121561135d57600080fd5b61136684611268565b925061137460208501611268565b9150604084013590509250925092565b600080600080600060a0868803121561139c57600080fd5b6113a586611268565b94506113b360208701611268565b93506113c160408701611268565b94979396509394606081013594506080013592915050565b600080604083850312156113ec57600080fd5b6113f583611268565b915061131560208401611268565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261142a57600080fd5b8135602067ffffffffffffffff8083111561144757611447611403565b8260051b604051601f19603f8301168101818110848211171561146c5761146c611403565b60405293845285810183019383810192508785111561148a57600080fd5b83870191505b848210156114a957813583529183019190830190611490565b979650505050505050565b600080600080600060a086880312156114cc57600080fd5b6114d586611268565b94506114e360208701611268565b93506114f160408701611268565b9250606086013567ffffffffffffffff8082111561150e57600080fd5b61151a89838a01611419565b9350608088013591508082111561153057600080fd5b5061153d88828901611419565b9150509295509295909350565b60008060006060848603121561155f57600080fd5b6112c484611268565b600081518084526020808501945080840160005b838110156115985781518752958201959082019060010161157c565b509495945050505050565b6001600160a01b038581168252841660208201526080604082018190526000906115cf90830185611568565b82810360608401526114a98185611568565b634e487b7160e01b600052601160045260246000fd5b8082018082111561057a5761057a6115e1565b60005b8381101561162557818101518382015260200161160d565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161166681601785016020880161160a565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161169781602884016020880161160a565b01602801949350505050565b60208152600082518060208401526116c281604085016020870161160a565b601f01601f19169190910160400192915050565b808202811582820484141761057a5761057a6115e1565b634e487b7160e01b600052603260045260246000fd5b600081611712576117126115e1565b50600019019056fe40a5c770eee7730548a6335e1f372e76bf4759f6fda1a932bd9cfc33106f0b4ca2646970667358221220b2618605619fe9d7ba99fe3576b090ded9d2e679e72096e3edb485193e189db164736f6c63430008130033",
+ "nonce": "0x483",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xc7d9df9de8d8dd6db347a6ecffd38864a7649c4a6327fc847b1203a24872c293",
+ "transactionType": "CREATE",
+ "contractName": "ERC721ABLE",
+ "contractAddress": "0xdDC710e86c9C0E01852C0770C0817f59416518D7",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "type": "0x02",
+ "from": "0xd71256ec24925873ce9e9f085f89864ca05970bd",
+ "gas": "0x32518c",
+ "value": "0x0",
+ "data": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612c7380620000f46000396000f3fe60806040526004361061020f5760003560e01c806370a0823111610118578063a1db9782116100a0578063d5abeb011161006f578063d5abeb0114610622578063de7ecf8714610638578063e985e9c51461064e578063f2fde38b1461066e578063fe325e961461068e57600080fd5b8063a1db9782146105af578063a22cb465146105cf578063b88d4fde146105ef578063c87b56dd1461060257600080fd5b806384a0c766116100e757806384a0c7661461051c5780638c72c54e1461053c5780638da5cb5b1461055c5780639182ba971461057a57806395d89b411461059a57600080fd5b806370a08231146104ad578063715018a6146104cd578063731133e9146104e2578063754b377c146104f557600080fd5b806342842e0e1161019b57806365e8e4f41161016a57806365e8e4f4146103f557806366748e98146104155780636cc82b841461044d5780636dbdaae61461046d5780636f8b44b01461048d57600080fd5b806342842e0e1461036e5780634b1022621461038157806355f804b3146103b55780636352211e146103d557600080fd5b806318160ddd116101e257806318160ddd146102b857806323b872dd146102db5780632a778c9b146102ee5780632e37eef6146103045780634128541c1461034e57600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063095ea7b3146102a3575b600080fd5b34801561022057600080fd5b5061023461022f3660046121e8565b6106a3565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e6106b4565b6040516102409190612255565b34801561027757600080fd5b5061028b610286366004612268565b61074f565b6040516001600160a01b039091168152602001610240565b6102b66102b1366004612296565b61079c565b005b3480156102c457600080fd5b506102cd6107ac565b604051908152602001610240565b6102b66102e93660046122c2565b6107cc565b3480156102fa57600080fd5b506102cd60685481565b34801561031057600080fd5b5061032461031f366004612268565b6109d0565b6040805195865260208601949094529284019190915260608301521515608082015260a001610240565b34801561035a57600080fd5b5060655461028b906001600160a01b031681565b6102b661037c3660046122c2565b610a14565b34801561038d57600080fd5b506102cd7f73e84917c5def9002f59334ba09785218b36a703c0e3d37d832ea21e233bb17f81565b3480156103c157600080fd5b506102b66103d036600461234b565b610a34565b3480156103e157600080fd5b5061028b6103f0366004612268565b610a49565b34801561040157600080fd5b506102b6610410366004612417565b610a54565b34801561042157600080fd5b506102cd610430366004612296565b606c60209081526000928352604080842090915290825290205481565b34801561045957600080fd5b5060665461028b906001600160a01b031681565b34801561047957600080fd5b506102b6610488366004612268565b610cd9565b34801561049957600080fd5b506102b66104a8366004612268565b610ce6565b3480156104b957600080fd5b506102cd6104c836600461249f565b610d1b565b3480156104d957600080fd5b506102b6610d83565b6102b66104f03660046124bc565b610d97565b34801561050157600080fd5b5061050a600181565b60405160ff9091168152602001610240565b34801561052857600080fd5b506102b6610537366004612525565b610fbe565b34801561054857600080fd5b5060675461028b906001600160a01b031681565b34801561056857600080fd5b506033546001600160a01b031661028b565b34801561058657600080fd5b506102b66105953660046125aa565b611003565b3480156105a657600080fd5b5061025e6111ca565b3480156105bb57600080fd5b506102b66105ca366004612296565b611206565b3480156105db57600080fd5b506102b66105ea36600461262c565b61127f565b6102b66105fd366004612665565b6112fc565b34801561060e57600080fd5b5061025e61061d366004612268565b611346565b34801561062e57600080fd5b506102cd606d5481565b34801561064457600080fd5b506102cd60695481565b34801561065a57600080fd5b506102346106693660046126b8565b6114a1565b34801561067a57600080fd5b506102b661068936600461249f565b6114de565b34801561069a57600080fd5b506102b6611557565b60006106ae82611729565b92915050565b60606106be611777565b60020180546106cc906126e6565b80601f01602080910402602001604051908101604052809291908181526020018280546106f8906126e6565b80156107455780601f1061071a57610100808354040283529160200191610745565b820191906000526020600020905b81548152906001019060200180831161072857829003601f168201915b5050505050905090565b600061075a8261179b565b610777576040516333d1c03960e21b815260040160405180910390fd5b61077f611777565b60009283526006016020525060409020546001600160a01b031690565b6107a8828260016117e4565b5050565b600060016107b8611777565b600101546107c4611777565b540303919050565b60006107d782611899565b9050836001600160a01b0316816001600160a01b03161461080a5760405162a1148160e81b815260040160405180910390fd5b60008061081684611946565b9150915061083b81876108263390565b6001600160a01b039081169116811491141790565b6108665761084986336114a1565b61086657604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661088d57604051633a954ecd60e21b815260040160405180910390fd5b61089a868686600161196e565b80156108a557600082555b6108ad611777565b6001600160a01b03871660009081526005919091016020526040902080546000190190556108d9611777565b6001600160a01b03861660008181526005929092016020526040909120805460010190554260a01b17600160e11b17610910611777565b60008681526004919091016020526040812091909155600160e11b84169003610986576001840161093f611777565b60008281526004919091016020526040812054900361098457610960611777565b5481146109845783610970611777565b600083815260049190910160205260409020555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b606b81815481106109e057600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294509092909160ff1685565b610a2f838383604051806020016040528060008152506112fc565b505050565b610a3c6119ff565b606a610a2f828483612760565b60006106ae82611899565b600080516020612c1e83398151915254610100900460ff16610a8957600080516020612c1e8339815191525460ff1615610a8d565b303b155b610b045760405162461bcd60e51b815260206004820152603760248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e747261637460448201527f20697320616c726561647920696e697469616c697a656400000000000000000060648201526084015b60405180910390fd5b600080516020612c1e83398151915254610100900460ff16158015610b4057600080516020612c1e833981519152805461ffff19166101011790555b600054610100900460ff1615808015610b605750600054600160ff909116105b80610b7a5750303b158015610b7a575060005460ff166001145b610bdd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610afb565b6000805460ff191660011790558015610c00576000805461ff0019166101001790555b610c198360405180602001604052806000815250611a59565b610c21611a97565b610c2a86611ac6565b6000606855606580546001600160a01b038088166001600160a01b0319928316179092556066805487841690831617905560678054928916929091169190911790558015610cb2576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b508015610cd257600080516020612c1e833981519152805461ff00191690555b5050505050565b610ce16119ff565b606955565b610cee6119ff565b610cf6611b18565b811015610d1657604051632627b42d60e11b815260040160405180910390fd5b606d55565b60006001600160a01b038216610d44576040516323d3ad8160e21b815260040160405180910390fd5b6001600160401b03610d54611777565b6005016000846001600160a01b03166001600160a01b0316815260200190815260200160002054169050919050565b610d8b6119ff565b610d956000611ac6565b565b610da084611b2b565b610dbd576040516332f7a9d760e21b815260040160405180910390fd5b6000606b8581548110610dd257610dd261281f565b60009182526020918290206040805160a0810182526005909302909101805483526001810154938301939093526002830154908201526003820154606082015260049091015460ff1615156080820152606d5490915084610e31611b18565b610e3b919061284b565b1115610e5a576040516322eb5e9560e21b815260040160405180910390fd5b8060800151610ef9576066546040516332f1944960e21b81526001600160a01b039091169063cbc6512490610e9b90899030908a908990899060040161285e565b602060405180830381865afa158015610eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edc91906128b2565b610ef9576040516352c973a760e01b815260040160405180910390fd5b60608101516001600160a01b0387166000908152606c60209081526040808320898452909152902054610f2d90869061284b565b1115610f4c57604051631d66b65960e11b815260040160405180910390fd5b838160400151610f5c91906128cf565b3414610f7b576040516318f4198360e21b815260040160405180910390fd5b6001600160a01b0386166000908152606c6020908152604080832088845290915281208054869290610fae90849061284b565b909155506109c890508685611bd2565b610fc66119ff565b606d87905586851115610fec57604051632627b42d60e11b815260040160405180910390fd5b610ffa868686868686611d1a565b50505050505050565b61100b6119ff565b606b541561101f5761101f606b600061217d565b600081815b818110156111905760008585838181106110405761104061281f565b905060a0020180360381019061105691906128e6565b9050838160000151108061106e575060208101518151115b1561108c57604051632627b42d60e11b815260040160405180910390fd5b606b805460018101825560009190915281517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b4600590920291820181905560208301517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b583015560408301517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b683015560608301517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b78301556080909201517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b8909101805460ff191691151591909117905592506111898161295b565b9050611024565b506040518181527ffda37b53117c5bf84916ece7449890be93cbd2842914c83f4a6864adb618654f9060200160405180910390a150505050565b6060606854600014611203576111e1606854611e32565b6040516020016111f19190612974565b60405160208183030381529060405290505b90565b61120e6119ff565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561125b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2f91906128b2565b80611288611777565b336000818152600792909201602090815260408084206001600160a01b03881680865290835293819020805460ff19169515159590951790945592518415158152919290917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6113078484846107cc565b6001600160a01b0383163b156113405761132384848484611ec4565b611340576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60606113518261179b565b61136e57604051632627b42d60e11b815260040160405180910390fd5b6000611378611faf565b9050805160000361139a5760405180602001604052806000815250915061149b565b60408051600180825281830190925260009160208201818036833701905050905081600183516113ca919061299e565b815181106113da576113da61281f565b602001015160f81c60f81b816000815181106113f8576113f861281f565b60200101906001600160f81b031916908160001a905350604051602f60f81b60208201528190602101604051602081830303815290604052805190602001208160405160200161144891906129b1565b6040516020818303038152906040528051906020012003611494578261146d86611fbe565b60405160200161147e9291906129cd565b6040516020818303038152906040529350611498565b8293505b50505b50919050565b60006114ab611777565b6001600160a01b039384166000908152600791909101602090815260408083209490951682529290925250205460ff1690565b6114e66119ff565b6001600160a01b03811661154b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610afb565b61155481611ac6565b50565b61155f6119ff565b60655460675460685460405163608ebea160e01b81526001600160a01b03928316600482015260248101919091526000928392169063608ebea1906044016040805180830381865afa1580156115b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dd91906129fc565b90925090506001600160a01b03821661160957604051632627b42d60e11b815260040160405180910390fd5b47600061271061161984846128cf565b6116239190612a2a565b90506000611631828461299e565b905080156116af576000856001600160a01b03168260405160006040518083038185875af1925050503d8060008114611686576040519150601f19603f3d011682016040523d82523d6000602084013e61168b565b606091505b50509050806116ad57604051631fa55c0760e11b815260040160405180910390fd5b505b8115610cd2576067546040516000916001600160a01b03169084908381818185875af1925050503d8060008114611702576040519150601f19603f3d011682016040523d82523d6000602084013e611707565b606091505b50509050806109c857604051631fa55c0760e11b815260040160405180910390fd5b60006301ffc9a760e01b6001600160e01b03198316148061175a57506380ac58cd60e01b6001600160e01b03198316145b806106ae5750506001600160e01b031916635b5e139f60e01b1490565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4090565b6000816001111580156117b557506117b1611777565b5482105b80156106ae5750600160e01b6117c9611777565b60008481526004919091016020526040902054161592915050565b60006117ef83610a49565b9050811561182e57336001600160a01b0382161461182e5761181181336114a1565b61182e576040516367d9dca160e11b815260040160405180910390fd5b83611837611777565b6000858152600691909101602052604080822080546001600160a01b0319166001600160a01b0394851617905551859287811692908516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a450505050565b60008160011161192d576118ab611777565b600083815260049190910160205260408120549150600160e01b8216900361192d5780600003611928576118dd611777565b5482106118fd57604051636f96cda160e11b815260040160405180910390fd5b611905611777565b6000199092016000818152600493909301602052604090922054905080156118fd575b919050565b604051636f96cda160e11b815260040160405180910390fd5b6000806000611953611777565b60009485526006016020525050604090912080549092909150565b6069541561134057606554606754606854604051634bbfc15d60e11b81526001600160a01b0392831660048201528783166024820152868316604482015260648101919091526084810184905291169063977f82ba9060a401600060405180830381600087803b1580156119e157600080fd5b505af11580156119f5573d6000803e3d6000fd5b5050505050505050565b6033546001600160a01b03163314610d955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610afb565b600080516020612c1e83398151915254610100900460ff16611a8d5760405162461bcd60e51b8152600401610afb90612a4c565b6107a88282612002565b600054610100900460ff16611abe5760405162461bcd60e51b8152600401610afb90612aa0565b610d95612075565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001611b24611777565b5403919050565b606b546000908210611b5057604051632627b42d60e11b815260040160405180910390fd5b6000606b8381548110611b6557611b6561281f565b60009182526020918290206040805160a08101825260059093029091018054808452600182015494840194909452600281015491830191909152600381015460608301526004015460ff161515608082015291504210801590611bcb5750428160200151115b9392505050565b6000611bdc611777565b5490506000829003611c015760405163b562e8dd60e01b815260040160405180910390fd5b611c0e600084838561196e565b680100000000000000018202611c22611777565b6001600160a01b038516600081815260059290920160205260409091208054929092019091554260a01b6001841460e11b1717611c5d611777565b600083815260049190910160205260408120919091556001600160a01b0384169083830190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b818114611ce757808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101611caf565b5081600003611d0857604051622e076360e81b815260040160405180910390fd5b80611d11611777565b5550610a2f9050565b60685415611d3b576040516302d1671b60e41b815260040160405180910390fd5b85158015611d5157506001600160a01b03831615155b80611d6d57506001600160a01b038316158015611d6d57508515155b15611d8b57604051632627b42d60e11b815260040160405180910390fd5b60655460675460405163ae98d85760e01b81526001600160a01b03918216600482015285821660248201526000604482015291169063ae98d857906064016020604051808303816000875af1158015611de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0c9190612aeb565b6068556069869055606a611e21828483612760565b5084156109c8576109c88486611bd2565b60606000611e3f836120a5565b60010190506000816001600160401b03811115611e5e57611e5e61238c565b6040519080825280601f01601f191660200182016040528015611e88576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611e9257509392505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611ef9903390899088908890600401612b04565b6020604051808303816000875af1925050508015611f34575060408051601f3d908101601f19168201909252611f3191810190612b41565b60015b611f92573d808015611f62576040519150601f19603f3d011682016040523d82523d6000602084013e611f67565b606091505b508051600003611f8a576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6060606a80546106cc906126e6565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480611fd85750819003601f19909101908152919050565b600080516020612c1e83398151915254610100900460ff166120365760405162461bcd60e51b8152600401610afb90612a4c565b8161203f611777565b6002019061204d9082612b5e565b5080612057611777565b600301906120659082612b5e565b506001612070611777565b555050565b600054610100900460ff1661209c5760405162461bcd60e51b8152600401610afb90612aa0565b610d9533611ac6565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106120e45772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612110576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061212e57662386f26fc10000830492506010015b6305f5e1008310612146576305f5e100830492506008015b612710831061215a57612710830492506004015b6064831061216c576064830492506002015b600a83106106ae5760010192915050565b508054600082556005029060005260206000209081019061155491905b808211156121ce5760008082556001820181905560028201819055600382015560048101805460ff1916905560050161219a565b5090565b6001600160e01b03198116811461155457600080fd5b6000602082840312156121fa57600080fd5b8135611bcb816121d2565b60005b83811015612220578181015183820152602001612208565b50506000910152565b60008151808452612241816020860160208601612205565b601f01601f19169290920160200192915050565b602081526000611bcb6020830184612229565b60006020828403121561227a57600080fd5b5035919050565b6001600160a01b038116811461155457600080fd5b600080604083850312156122a957600080fd5b82356122b481612281565b946020939093013593505050565b6000806000606084860312156122d757600080fd5b83356122e281612281565b925060208401356122f281612281565b929592945050506040919091013590565b60008083601f84011261231557600080fd5b5081356001600160401b0381111561232c57600080fd5b60208301915083602082850101111561234457600080fd5b9250929050565b6000806020838503121561235e57600080fd5b82356001600160401b0381111561237457600080fd5b61238085828601612303565b90969095509350505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b03808411156123bc576123bc61238c565b604051601f8501601f19908116603f011681019082821181831017156123e4576123e461238c565b816040528093508581528686860111156123fd57600080fd5b858560208301376000602087830101525050509392505050565b6000806000806080858703121561242d57600080fd5b843561243881612281565b9350602085013561244881612281565b9250604085013561245881612281565b915060608501356001600160401b0381111561247357600080fd5b8501601f8101871361248457600080fd5b612493878235602084016123a2565b91505092959194509250565b6000602082840312156124b157600080fd5b8135611bcb81612281565b6000806000806000608086880312156124d457600080fd5b85356124df81612281565b9450602086013593506040860135925060608601356001600160401b0381111561250857600080fd5b61251488828901612303565b969995985093965092949392505050565b600080600080600080600060c0888a03121561254057600080fd5b873596506020880135955060408801359450606088013561256081612281565b9350608088013561257081612281565b925060a08801356001600160401b0381111561258b57600080fd5b6125978a828b01612303565b989b979a50959850939692959293505050565b600080602083850312156125bd57600080fd5b82356001600160401b03808211156125d457600080fd5b818501915085601f8301126125e857600080fd5b8135818111156125f757600080fd5b86602060a08302850101111561260c57600080fd5b60209290920196919550909350505050565b801515811461155457600080fd5b6000806040838503121561263f57600080fd5b823561264a81612281565b9150602083013561265a8161261e565b809150509250929050565b6000806000806080858703121561267b57600080fd5b843561268681612281565b9350602085013561269681612281565b92506040850135915060608501356001600160401b0381111561247357600080fd5b600080604083850312156126cb57600080fd5b82356126d681612281565b9150602083013561265a81612281565b600181811c908216806126fa57607f821691505b60208210810361149b57634e487b7160e01b600052602260045260246000fd5b601f821115610a2f57600081815260208120601f850160051c810160208610156127415750805b601f850160051c820191505b818110156109c85782815560010161274d565b6001600160401b038311156127775761277761238c565b61278b8361278583546126e6565b8361271a565b6000601f8411600181146127bf57600085156127a75750838201355b600019600387901b1c1916600186901b178355610cd2565b600083815260209020601f19861690835b828110156127f057868501358255602094850194600190920191016127d0565b508682101561280d5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156106ae576106ae612835565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6000602082840312156128c457600080fd5b8151611bcb8161261e565b80820281158282048414176106ae576106ae612835565b600060a082840312156128f857600080fd5b60405160a081018181106001600160401b038211171561291a5761291a61238c565b806040525082358152602083013560208201526040830135604082015260608301356060820152608083013561294f8161261e565b60808201529392505050565b60006001820161296d5761296d612835565b5060010190565b6120a160f11b815260008251612991816002850160208701612205565b9190910160020192915050565b818103818111156106ae576106ae612835565b600082516129c3818460208701612205565b9190910192915050565b600083516129df818460208801612205565b8351908301906129f3818360208801612205565b01949350505050565b60008060408385031215612a0f57600080fd5b8251612a1a81612281565b6020939093015192949293505050565b600082612a4757634e487b7160e01b600052601260045260246000fd5b500490565b60208082526034908201527f455243373231415f5f496e697469616c697a61626c653a20636f6e7472616374604082015273206973206e6f7420696e697469616c697a696e6760601b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600060208284031215612afd57600080fd5b5051919050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612b3790830184612229565b9695505050505050565b600060208284031215612b5357600080fd5b8151611bcb816121d2565b81516001600160401b03811115612b7757612b7761238c565b612b8b81612b8584546126e6565b8461271a565b602080601f831160018114612bc05760008415612ba85750858301515b600019600386901b1c1916600185901b1785556109c8565b600085815260208120601f198616915b82811015612bef57888601518255948401946001909101908401612bd0565b5085821015612c0d5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056feee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85fa2646970667358221220a9dd22b04ec37cf2afb5cdba470000e7559163057730e5cac14db8b6a172b7f164736f6c63430008130033",
+ "nonce": "0x484",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0xa44071e057ccb66121a40d8e328625d15e471a621569e7f5966f630e080eec4c",
+ "transactionType": "CREATE",
+ "contractName": "ERC721ABOE",
+ "contractAddress": "0xEeB54C912C6971cC808a2f960b6E27148a66715c",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "type": "0x02",
+ "from": "0xd71256ec24925873ce9e9f085f89864ca05970bd",
+ "gas": "0x3084fb",
+ "value": "0x0",
+ "data": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612acf80620000f46000396000f3fe6080604052600436106101f95760003560e01c806370a082311161010d57806395d89b41116100a0578063c87b56dd1161006f578063c87b56dd146105cc578063de7ecf87146105ec578063e985e9c514610602578063f2fde38b14610622578063fe325e961461064257600080fd5b806395d89b4114610564578063a1db978214610579578063a22cb46514610599578063b88d4fde146105b957600080fd5b80638c5c2a5b116100dc5780638c5c2a5b146104e65780638c72c54e146105065780638da5cb5b146105265780639182ba971461054457600080fd5b806370a0823114610477578063715018a614610497578063731133e9146104ac578063754b377c146104bf57600080fd5b80634128541c116101905780636352211e1161015f5780636352211e146103bf57806365e8e4f4146103df57806366748e98146103ff5780636cc82b84146104375780636dbdaae61461045757600080fd5b80634128541c1461033857806342842e0e146103585780634b1022621461036b57806355f804b31461039f57600080fd5b806318160ddd116101cc57806318160ddd146102a257806323b872dd146102c55780632a778c9b146102d85780632e37eef6146102ee57600080fd5b806301ffc9a7146101fe57806306fdde0314610233578063081812fc14610255578063095ea7b31461028d575b600080fd5b34801561020a57600080fd5b5061021e610219366004612061565b610657565b60405190151581526020015b60405180910390f35b34801561023f57600080fd5b50610248610668565b60405161022a91906120ce565b34801561026157600080fd5b506102756102703660046120e1565b610703565b6040516001600160a01b03909116815260200161022a565b6102a061029b36600461210f565b610750565b005b3480156102ae57600080fd5b506102b7610760565b60405190815260200161022a565b6102a06102d336600461213b565b610780565b3480156102e457600080fd5b506102b760685481565b3480156102fa57600080fd5b5061030e6103093660046120e1565b610984565b6040805195865260208601949094529284019190915260608301521515608082015260a00161022a565b34801561034457600080fd5b50606554610275906001600160a01b031681565b6102a061036636600461213b565b6109c8565b34801561037757600080fd5b506102b77fdcfc50123fc6ea3c803b5b1b4cbbc9ce5b81f13451fd3124e43ef593fd840d1981565b3480156103ab57600080fd5b506102a06103ba3660046121c4565b6109e8565b3480156103cb57600080fd5b506102756103da3660046120e1565b6109fd565b3480156103eb57600080fd5b506102a06103fa366004612290565b610a08565b34801561040b57600080fd5b506102b761041a36600461210f565b606c60209081526000928352604080842090915290825290205481565b34801561044357600080fd5b50606654610275906001600160a01b031681565b34801561046357600080fd5b506102a06104723660046120e1565b610c8d565b34801561048357600080fd5b506102b7610492366004612318565b610c9a565b3480156104a357600080fd5b506102a0610d02565b6102a06104ba366004612335565b610d16565b3480156104cb57600080fd5b506104d4600181565b60405160ff909116815260200161022a565b3480156104f257600080fd5b506102a061050136600461239e565b610e79565b34801561051257600080fd5b50606754610275906001600160a01b031681565b34801561053257600080fd5b506033546001600160a01b0316610275565b34801561055057600080fd5b506102a061055f366004612419565b610e8f565b34801561057057600080fd5b50610248611056565b34801561058557600080fd5b506102a061059436600461210f565b611092565b3480156105a557600080fd5b506102a06105b436600461249b565b61110b565b6102a06105c73660046124d4565b611188565b3480156105d857600080fd5b506102486105e73660046120e1565b6111d2565b3480156105f857600080fd5b506102b760695481565b34801561060e57600080fd5b5061021e61061d366004612527565b61132d565b34801561062e57600080fd5b506102a061063d366004612318565b61136a565b34801561064e57600080fd5b506102a06113e3565b6000610662826115b5565b92915050565b6060610672611603565b600201805461068090612555565b80601f01602080910402602001604051908101604052809291908181526020018280546106ac90612555565b80156106f95780601f106106ce576101008083540402835291602001916106f9565b820191906000526020600020905b8154815290600101906020018083116106dc57829003601f168201915b5050505050905090565b600061070e82611627565b61072b576040516333d1c03960e21b815260040160405180910390fd5b610733611603565b60009283526006016020525060409020546001600160a01b031690565b61075c82826001611670565b5050565b6000600161076c611603565b60010154610778611603565b540303919050565b600061078b82611725565b9050836001600160a01b0316816001600160a01b0316146107be5760405162a1148160e81b815260040160405180910390fd5b6000806107ca846117d2565b915091506107ef81876107da3390565b6001600160a01b039081169116811491141790565b61081a576107fd863361132d565b61081a57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661084157604051633a954ecd60e21b815260040160405180910390fd5b61084e86868660016117fa565b801561085957600082555b610861611603565b6001600160a01b038716600090815260059190910160205260409020805460001901905561088d611603565b6001600160a01b03861660008181526005929092016020526040909120805460010190554260a01b17600160e11b176108c4611603565b60008681526004919091016020526040812091909155600160e11b8416900361093a57600184016108f3611603565b60008281526004919091016020526040812054900361093857610914611603565b5481146109385783610924611603565b600083815260049190910160205260409020555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b606b818154811061099457600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294509092909160ff1685565b6109e383838360405180602001604052806000815250611188565b505050565b6109f061188b565b606a6109e38284836125cf565b600061066282611725565b600080516020612a7a83398151915254610100900460ff16610a3d57600080516020612a7a8339815191525460ff1615610a41565b303b155b610ab85760405162461bcd60e51b815260206004820152603760248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e747261637460448201527f20697320616c726561647920696e697469616c697a656400000000000000000060648201526084015b60405180910390fd5b600080516020612a7a83398151915254610100900460ff16158015610af457600080516020612a7a833981519152805461ffff19166101011790555b600054610100900460ff1615808015610b145750600054600160ff909116105b80610b2e5750303b158015610b2e575060005460ff166001145b610b915760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610aaf565b6000805460ff191660011790558015610bb4576000805461ff0019166101001790555b610bcd83604051806020016040528060008152506118e5565b610bd5611923565b610bde86611952565b6000606855606580546001600160a01b038088166001600160a01b0319928316179092556066805487841690831617905560678054928916929091169190911790558015610c66576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b508015610c8657600080516020612a7a833981519152805461ff00191690555b5050505050565b610c9561188b565b606955565b60006001600160a01b038216610cc3576040516323d3ad8160e21b815260040160405180910390fd5b6001600160401b03610cd3611603565b6005016000846001600160a01b03166001600160a01b0316815260200190815260200160002054169050919050565b610d0a61188b565b610d146000611952565b565b610d1f846119a4565b610d3c576040516332f7a9d760e21b815260040160405180910390fd5b6000606b8581548110610d5157610d5161268e565b60009182526020918290206040805160a0810182526005909302909101805483526001810154938301939093526002830154908201526003820154606082015260049091015460ff16151560808201819052909150610e40576066546040516332f1944960e21b81526001600160a01b039091169063cbc6512490610de290899030908a90899089906004016126a4565b602060405180830381865afa158015610dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2391906126f8565b610e40576040516352c973a760e01b815260040160405180910390fd5b838160400151610e50919061272b565b3414610e6f576040516318f4198360e21b815260040160405180910390fd5b61097c8685611a4b565b610e8161188b565b61097c868686868686611b93565b610e9761188b565b606b5415610eab57610eab606b6000611ff6565b600081815b8181101561101c576000858583818110610ecc57610ecc61268e565b905060a00201803603810190610ee29190612742565b90508381600001511080610efa575060208101518151115b15610f1857604051632627b42d60e11b815260040160405180910390fd5b606b805460018101825560009190915281517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b4600590920291820181905560208301517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b583015560408301517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b683015560608301517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b78301556080909201517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b8909101805460ff19169115159190911790559250611015816127b7565b9050610eb0565b506040518181527ffda37b53117c5bf84916ece7449890be93cbd2842914c83f4a6864adb618654f9060200160405180910390a150505050565b606060685460001461108f5761106d606854611cab565b60405160200161107d91906127d0565b60405160208183030381529060405290505b90565b61109a61188b565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156110e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e391906126f8565b80611114611603565b336000818152600792909201602090815260408084206001600160a01b03881680865290835293819020805460ff19169515159590951790945592518415158152919290917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611193848484610780565b6001600160a01b0383163b156111cc576111af84848484611d3d565b6111cc576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60606111dd82611627565b6111fa57604051632627b42d60e11b815260040160405180910390fd5b6000611204611e28565b9050805160000361122657604051806020016040528060008152509150611327565b604080516001808252818301909252600091602082018180368337019050509050816001835161125691906127fa565b815181106112665761126661268e565b602001015160f81c60f81b816000815181106112845761128461268e565b60200101906001600160f81b031916908160001a905350604051602f60f81b6020820152819060210160405160208183030381529060405280519060200120816040516020016112d4919061280d565b604051602081830303815290604052805190602001200361132057826112f986611e37565b60405160200161130a929190612829565b6040516020818303038152906040529350611324565b8293505b50505b50919050565b6000611337611603565b6001600160a01b039384166000908152600791909101602090815260408083209490951682529290925250205460ff1690565b61137261188b565b6001600160a01b0381166113d75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aaf565b6113e081611952565b50565b6113eb61188b565b60655460675460685460405163608ebea160e01b81526001600160a01b03928316600482015260248101919091526000928392169063608ebea1906044016040805180830381865afa158015611445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114699190612858565b90925090506001600160a01b03821661149557604051632627b42d60e11b815260040160405180910390fd5b4760006127106114a5848461272b565b6114af9190612886565b905060006114bd82846127fa565b9050801561153b576000856001600160a01b03168260405160006040518083038185875af1925050503d8060008114611512576040519150601f19603f3d011682016040523d82523d6000602084013e611517565b606091505b505090508061153957604051631fa55c0760e11b815260040160405180910390fd5b505b8115610c86576067546040516000916001600160a01b03169084908381818185875af1925050503d806000811461158e576040519150601f19603f3d011682016040523d82523d6000602084013e611593565b606091505b505090508061097c57604051631fa55c0760e11b815260040160405180910390fd5b60006301ffc9a760e01b6001600160e01b0319831614806115e657506380ac58cd60e01b6001600160e01b03198316145b806106625750506001600160e01b031916635b5e139f60e01b1490565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4090565b600081600111158015611641575061163d611603565b5482105b80156106625750600160e01b611655611603565b60008481526004919091016020526040902054161592915050565b600061167b836109fd565b905081156116ba57336001600160a01b038216146116ba5761169d813361132d565b6116ba576040516367d9dca160e11b815260040160405180910390fd5b836116c3611603565b6000858152600691909101602052604080822080546001600160a01b0319166001600160a01b0394851617905551859287811692908516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a450505050565b6000816001116117b957611737611603565b600083815260049190910160205260408120549150600160e01b821690036117b957806000036117b457611769611603565b54821061178957604051636f96cda160e11b815260040160405180910390fd5b611791611603565b600019909201600081815260049390930160205260409092205490508015611789575b919050565b604051636f96cda160e11b815260040160405180910390fd5b60008060006117df611603565b60009485526006016020525050604090912080549092909150565b606954156111cc57606554606754606854604051634bbfc15d60e11b81526001600160a01b0392831660048201528783166024820152868316604482015260648101919091526084810184905291169063977f82ba9060a401600060405180830381600087803b15801561186d57600080fd5b505af1158015611881573d6000803e3d6000fd5b5050505050505050565b6033546001600160a01b03163314610d145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aaf565b600080516020612a7a83398151915254610100900460ff166119195760405162461bcd60e51b8152600401610aaf906128a8565b61075c8282611e7b565b600054610100900460ff1661194a5760405162461bcd60e51b8152600401610aaf906128fc565b610d14611eee565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606b5460009082106119c957604051632627b42d60e11b815260040160405180910390fd5b6000606b83815481106119de576119de61268e565b60009182526020918290206040805160a08101825260059093029091018054808452600182015494840194909452600281015491830191909152600381015460608301526004015460ff161515608082015291504210801590611a445750428160200151115b9392505050565b6000611a55611603565b5490506000829003611a7a5760405163b562e8dd60e01b815260040160405180910390fd5b611a8760008483856117fa565b680100000000000000018202611a9b611603565b6001600160a01b038516600081815260059290920160205260409091208054929092019091554260a01b6001841460e11b1717611ad6611603565b600083815260049190910160205260408120919091556001600160a01b0384169083830190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b818114611b6057808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101611b28565b5081600003611b8157604051622e076360e81b815260040160405180910390fd5b80611b8a611603565b55506109e39050565b60685415611bb4576040516302d1671b60e41b815260040160405180910390fd5b85158015611bca57506001600160a01b03831615155b80611be657506001600160a01b038316158015611be657508515155b15611c0457604051632627b42d60e11b815260040160405180910390fd5b60655460675460405163ae98d85760e01b81526001600160a01b03918216600482015285821660248201526000604482015291169063ae98d857906064016020604051808303816000875af1158015611c61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c859190612947565b6068556069869055606a611c9a8284836125cf565b50841561097c5761097c8486611a4b565b60606000611cb883611f1e565b60010190506000816001600160401b03811115611cd757611cd7612205565b6040519080825280601f01601f191660200182016040528015611d01576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611d0b57509392505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611d72903390899088908890600401612960565b6020604051808303816000875af1925050508015611dad575060408051601f3d908101601f19168201909252611daa9181019061299d565b60015b611e0b573d808015611ddb576040519150601f19603f3d011682016040523d82523d6000602084013e611de0565b606091505b508051600003611e03576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6060606a805461068090612555565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480611e515750819003601f19909101908152919050565b600080516020612a7a83398151915254610100900460ff16611eaf5760405162461bcd60e51b8152600401610aaf906128a8565b81611eb8611603565b60020190611ec690826129ba565b5080611ed0611603565b60030190611ede90826129ba565b506001611ee9611603565b555050565b600054610100900460ff16611f155760405162461bcd60e51b8152600401610aaf906128fc565b610d1433611952565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611f5d5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611f89576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611fa757662386f26fc10000830492506010015b6305f5e1008310611fbf576305f5e100830492506008015b6127108310611fd357612710830492506004015b60648310611fe5576064830492506002015b600a83106106625760010192915050565b50805460008255600502906000526020600020908101906113e091905b808211156120475760008082556001820181905560028201819055600382015560048101805460ff19169055600501612013565b5090565b6001600160e01b0319811681146113e057600080fd5b60006020828403121561207357600080fd5b8135611a448161204b565b60005b83811015612099578181015183820152602001612081565b50506000910152565b600081518084526120ba81602086016020860161207e565b601f01601f19169290920160200192915050565b602081526000611a4460208301846120a2565b6000602082840312156120f357600080fd5b5035919050565b6001600160a01b03811681146113e057600080fd5b6000806040838503121561212257600080fd5b823561212d816120fa565b946020939093013593505050565b60008060006060848603121561215057600080fd5b833561215b816120fa565b9250602084013561216b816120fa565b929592945050506040919091013590565b60008083601f84011261218e57600080fd5b5081356001600160401b038111156121a557600080fd5b6020830191508360208285010111156121bd57600080fd5b9250929050565b600080602083850312156121d757600080fd5b82356001600160401b038111156121ed57600080fd5b6121f98582860161217c565b90969095509350505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561223557612235612205565b604051601f8501601f19908116603f0116810190828211818310171561225d5761225d612205565b8160405280935085815286868601111561227657600080fd5b858560208301376000602087830101525050509392505050565b600080600080608085870312156122a657600080fd5b84356122b1816120fa565b935060208501356122c1816120fa565b925060408501356122d1816120fa565b915060608501356001600160401b038111156122ec57600080fd5b8501601f810187136122fd57600080fd5b61230c8782356020840161221b565b91505092959194509250565b60006020828403121561232a57600080fd5b8135611a44816120fa565b60008060008060006080868803121561234d57600080fd5b8535612358816120fa565b9450602086013593506040860135925060608601356001600160401b0381111561238157600080fd5b61238d8882890161217c565b969995985093965092949392505050565b60008060008060008060a087890312156123b757600080fd5b863595506020870135945060408701356123d0816120fa565b935060608701356123e0816120fa565b925060808701356001600160401b038111156123fb57600080fd5b61240789828a0161217c565b979a9699509497509295939492505050565b6000806020838503121561242c57600080fd5b82356001600160401b038082111561244357600080fd5b818501915085601f83011261245757600080fd5b81358181111561246657600080fd5b86602060a08302850101111561247b57600080fd5b60209290920196919550909350505050565b80151581146113e057600080fd5b600080604083850312156124ae57600080fd5b82356124b9816120fa565b915060208301356124c98161248d565b809150509250929050565b600080600080608085870312156124ea57600080fd5b84356124f5816120fa565b93506020850135612505816120fa565b92506040850135915060608501356001600160401b038111156122ec57600080fd5b6000806040838503121561253a57600080fd5b8235612545816120fa565b915060208301356124c9816120fa565b600181811c9082168061256957607f821691505b60208210810361132757634e487b7160e01b600052602260045260246000fd5b601f8211156109e357600081815260208120601f850160051c810160208610156125b05750805b601f850160051c820191505b8181101561097c578281556001016125bc565b6001600160401b038311156125e6576125e6612205565b6125fa836125f48354612555565b83612589565b6000601f84116001811461262e57600085156126165750838201355b600019600387901b1c1916600186901b178355610c86565b600083815260209020601f19861690835b8281101561265f578685013582556020948501946001909201910161263f565b508682101561267c5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b60006020828403121561270a57600080fd5b8151611a448161248d565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761066257610662612715565b600060a0828403121561275457600080fd5b60405160a081018181106001600160401b038211171561277657612776612205565b80604052508235815260208301356020820152604083013560408201526060830135606082015260808301356127ab8161248d565b60808201529392505050565b6000600182016127c9576127c9612715565b5060010190565b6120a160f11b8152600082516127ed81600285016020870161207e565b9190910160020192915050565b8181038181111561066257610662612715565b6000825161281f81846020870161207e565b9190910192915050565b6000835161283b81846020880161207e565b83519083019061284f81836020880161207e565b01949350505050565b6000806040838503121561286b57600080fd5b8251612876816120fa565b6020939093015192949293505050565b6000826128a357634e487b7160e01b600052601260045260246000fd5b500490565b60208082526034908201527f455243373231415f5f496e697469616c697a61626c653a20636f6e7472616374604082015273206973206e6f7420696e697469616c697a696e6760601b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60006020828403121561295957600080fd5b5051919050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612993908301846120a2565b9695505050505050565b6000602082840312156129af57600080fd5b8151611a448161204b565b81516001600160401b038111156129d3576129d3612205565b6129e7816129e18454612555565b84612589565b602080601f831160018114612a1c5760008415612a045750858301515b600019600386901b1c1916600185901b17855561097c565b600085815260208120601f198616915b82811015612a4b57888601518255948401946001909101908401612a2c565b5085821015612a695787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056feee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85fa264697066735822122023fa41bc39b9268e59f7967d1440716167d00463f29541b323f7e476d816a66d64736f6c63430008130033",
+ "nonce": "0x485",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ },
+ {
+ "hash": "0x177ee1ac28d6153b493f8d756cac44bc933eab4016f50a7f87bfd058a2b6bf3f",
+ "transactionType": "CALL",
+ "contractName": "TransparentUpgradeableProxy",
+ "contractAddress": "0x9BE7E2B13f70f170B63c0379663313EcdB527294",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "type": "0x02",
+ "from": "0xd71256ec24925873ce9e9f085f89864ca05970bd",
+ "to": "0x9be7e2b13f70f170b63c0379663313ecdb527294",
+ "gas": "0xc552",
+ "value": "0x0",
+ "data": "0x641254bd000000000000000000000000ddc710e86c9c0e01852c0770c0817f59416518d7",
+ "nonce": "0x486",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "transactionHash": "0x87bbc0bb208ac803aa0b7d13ad37c9da03932cf319c9a3a0b40d0a906b001b0b",
+ "transactionIndex": "0x1",
+ "blockHash": "0x6ccd9336c9345457abd191a21a5ef21699dd729188653e3d0be0a9fa1481c887",
+ "blockNumber": "0xb30623",
+ "from": "0xD71256eC24925873cE9E9F085f89864Ca05970bD",
+ "to": null,
+ "cumulativeGasUsed": "0x15b421",
+ "gasUsed": "0x14fd1c",
+ "contractAddress": "0x072e8fB0aa2C75F727da6df3220eF676A966bcc8",
+ "logs": [
+ {
+ "address": "0x072e8fB0aa2C75F727da6df3220eF676A966bcc8",
+ "topics": [
+ "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498"
+ ],
+ "data": "0x00000000000000000000000000000000000000000000000000000000000000ff",
+ "blockHash": "0x6ccd9336c9345457abd191a21a5ef21699dd729188653e3d0be0a9fa1481c887",
+ "blockNumber": "0xb30623",
+ "transactionHash": "0x87bbc0bb208ac803aa0b7d13ad37c9da03932cf319c9a3a0b40d0a906b001b0b",
+ "transactionIndex": "0x1",
+ "logIndex": "0x0",
+ "removed": false
+ }
+ ],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000008000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xb2d05e32"
+ },
+ {
+ "transactionHash": "0xc7d9df9de8d8dd6db347a6ecffd38864a7649c4a6327fc847b1203a24872c293",
+ "transactionIndex": "0x2",
+ "blockHash": "0x6ccd9336c9345457abd191a21a5ef21699dd729188653e3d0be0a9fa1481c887",
+ "blockNumber": "0xb30623",
+ "from": "0xD71256eC24925873cE9E9F085f89864Ca05970bD",
+ "to": null,
+ "cumulativeGasUsed": "0x3c6903",
+ "gasUsed": "0x26b4e2",
+ "contractAddress": "0xdDC710e86c9C0E01852C0770C0817f59416518D7",
+ "logs": [
+ {
+ "address": "0xdDC710e86c9C0E01852C0770C0817f59416518D7",
+ "topics": [
+ "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498"
+ ],
+ "data": "0x00000000000000000000000000000000000000000000000000000000000000ff",
+ "blockHash": "0x6ccd9336c9345457abd191a21a5ef21699dd729188653e3d0be0a9fa1481c887",
+ "blockNumber": "0xb30623",
+ "transactionHash": "0xc7d9df9de8d8dd6db347a6ecffd38864a7649c4a6327fc847b1203a24872c293",
+ "transactionIndex": "0x2",
+ "logIndex": "0x1",
+ "removed": false
+ }
+ ],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xb2d05e32"
+ },
+ {
+ "transactionHash": "0xa44071e057ccb66121a40d8e328625d15e471a621569e7f5966f630e080eec4c",
+ "transactionIndex": "0x3",
+ "blockHash": "0x6ccd9336c9345457abd191a21a5ef21699dd729188653e3d0be0a9fa1481c887",
+ "blockNumber": "0xb30623",
+ "from": "0xD71256eC24925873cE9E9F085f89864Ca05970bD",
+ "to": null,
+ "cumulativeGasUsed": "0x61bb9d",
+ "gasUsed": "0x25529a",
+ "contractAddress": "0xEeB54C912C6971cC808a2f960b6E27148a66715c",
+ "logs": [
+ {
+ "address": "0xEeB54C912C6971cC808a2f960b6E27148a66715c",
+ "topics": [
+ "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498"
+ ],
+ "data": "0x00000000000000000000000000000000000000000000000000000000000000ff",
+ "blockHash": "0x6ccd9336c9345457abd191a21a5ef21699dd729188653e3d0be0a9fa1481c887",
+ "blockNumber": "0xb30623",
+ "transactionHash": "0xa44071e057ccb66121a40d8e328625d15e471a621569e7f5966f630e080eec4c",
+ "transactionIndex": "0x3",
+ "logIndex": "0x2",
+ "removed": false
+ }
+ ],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000100000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xb2d05e32"
+ },
+ {
+ "transactionHash": "0x177ee1ac28d6153b493f8d756cac44bc933eab4016f50a7f87bfd058a2b6bf3f",
+ "transactionIndex": "0x4",
+ "blockHash": "0x6ccd9336c9345457abd191a21a5ef21699dd729188653e3d0be0a9fa1481c887",
+ "blockNumber": "0xb30623",
+ "from": "0xD71256eC24925873cE9E9F085f89864Ca05970bD",
+ "to": "0x9BE7E2B13f70f170B63c0379663313EcdB527294",
+ "cumulativeGasUsed": "0x624a79",
+ "gasUsed": "0x8edc",
+ "contractAddress": null,
+ "logs": [],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xb2d05e32"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1698658702,
+ "chain": 84531,
+ "multi": false,
+ "commit": "cec81dc"
+}
\ No newline at end of file
diff --git a/broadcast/deploy-upgrade.s.sol/84531/run-1698933961.json b/broadcast/deploy-upgrade.s.sol/84531/run-1698933961.json
new file mode 100644
index 0000000..69beb9c
--- /dev/null
+++ b/broadcast/deploy-upgrade.s.sol/84531/run-1698933961.json
@@ -0,0 +1,33 @@
+{
+ "transactions": [
+ {
+ "hash": "0xeabe34dcfea19a18b0dd7899af40f375eb75969788ca5ff94de8b1b3f7fd1756",
+ "transactionType": "CREATE",
+ "contractName": "AnotherCloneFactory",
+ "contractAddress": "0x2b0DDB1926B69337F83314537a24a2713da00fa5",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "type": "0x02",
+ "from": "0xd71256ec24925873ce9e9f085f89864ca05970bd",
+ "gas": "0x1c9a2f",
+ "value": "0x0",
+ "data": "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6118a5806100ed6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80636b7e394911610104578063a217fddf116100a2578063d57f966b11610071578063d57f966b14610411578063d8f4b6fd1461041a578063e442ac181461042f578063fdbda0ec1461044257600080fd5b8063a217fddf146103ce578063bdd2fe78146103d6578063cfc5a0c0146103e9578063d547741f146103fe57600080fd5b8063832ca2f5116100de578063832ca2f5146103825780638d058ac81461039557806391d14854146103a85780639f1fb80d146103bb57600080fd5b80636b7e3949146103495780636cc82b841461035c5780637d2405bb1461036f57600080fd5b8063248a9ca31161017c57806347fcac3b1161014b57806347fcac3b146102fd5780634c7dfac314610310578063641254bd14610323578063678213491461033657600080fd5b8063248a9ca3146102935780632f2ff15d146102c457806336568abe146102d75780634128541c146102ea57600080fd5b80631c8518c2116101b85780631c8518c21461022f5780631ce6e4441461025a5780631e5b36841461026d578063229a8a821461028057600080fd5b806301ffc9a7146101df5780631459457a1461020757806318c25d8a1461021c575b600080fd5b6101f26101ed3660046113b7565b610475565b60405190151581526020015b60405180910390f35b61021a6102153660046113f8565b6104ac565b005b61021a61022a36600461145d565b61062d565b609b54610242906001600160a01b031681565b6040516001600160a01b0390911681526020016101fe565b609a54610242906001600160a01b031681565b61021a61027b366004611487565b61079c565b61024261028e366004611487565b61084e565b6102b66102a1366004611487565b60009081526065602052604090206001015490565b6040519081526020016101fe565b61021a6102d23660046114a0565b610868565b61021a6102e53660046114a0565b61088d565b609854610242906001600160a01b031681565b61024261030b36600461145d565b61090b565b6101f261031e3660046114cc565b61091f565b61021a6103313660046114cc565b610939565b61021a6103443660046114e7565b610967565b61021a6103573660046114cc565b610a4f565b609954610242906001600160a01b031681565b61021a61037d3660046114cc565b610a7f565b61021a6103903660046114cc565b610aad565b6102426103a3366004611487565b610adb565b6101f26103b63660046114a0565b610af5565b61021a6103c93660046115c6565b610b20565b6102b6600081565b609c54610242906001600160a01b031681565b6102b660008051602061183083398151915281565b61021a61040c3660046114a0565b610c4a565b6102b6609d5481565b6102b660008051602061185083398151915281565b61021a61043d36600461162c565b610c6f565b610455610450366004611487565b610d1b565b604080516001600160a01b039384168152929091166020830152016101fe565b60006001600160e01b03198216637965db0b60e01b14806104a657506301ffc9a760e01b6001600160e01b03198316145b92915050565b600054610100900460ff16158080156104cc5750600054600160ff909116105b806104e65750303b1580156104e6575060005460ff166001145b61054e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610571576000805461ff0019166101001790555b609880546001600160a01b03199081166001600160a01b0389811691909117909255609980548216888416179055609a80548216878416179055609b80548216868416179055609c80549091169184169190911790556000609d556105d4610d54565b6105df600033610dc1565b8015610625576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b60008051602061183083398151915261064581610dcb565b61271082111561066857604051632627b42d60e11b815260040160405180910390fd5b6001600160a01b03831661068f57604051632627b42d60e11b815260040160405180910390fd5b609c546000906106a7906001600160a01b0316610dd8565b60985460405163485cc95560e01b81526001600160a01b038781166004830152918216602482015291925082169063485cc95590604401600060405180830381600087803b1580156106f857600080fd5b505af115801561070c573d6000803e3d6000fd5b5050609854604051638353b91960e01b81526001600160a01b0388811660048301528581166024830152604482018890529091169250638353b9199150606401600060405180830381600087803b15801561076657600080fd5b505af115801561077a573d6000803e3d6000fd5b5050505061079660008051602061185083398151915285610e72565b50505050565b6000805160206118508339815191526107b481610dcb565b609b546000906107cd906001600160a01b031684610ef8565b60985460995460405163c0c53b8b60e01b81523360048201526001600160a01b039283166024820152908216604482015291925082169063c0c53b8b90606401600060405180830381600087803b15801561082757600080fd5b505af115801561083b573d6000803e3d6000fd5b505050506108498133610f95565b505050565b609a546000906104a6906001600160a01b031683306110ed565b60008281526065602052604090206001015461088381610dcb565b6108498383610e72565b6001600160a01b03811633146108fd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610545565b6109078282611149565b5050565b60006109188383306110ed565b9392505050565b60006104a660008051602061185083398151915283610af5565b600061094481610dcb565b50609a80546001600160a01b0319166001600160a01b0392909216919091179055565b60008051602061183083398151915261097f81610dcb565b6127108211156109a257604051632627b42d60e11b815260040160405180910390fd5b6001600160a01b0384166109c957604051632627b42d60e11b815260040160405180910390fd5b609854604051638353b91960e01b81526001600160a01b03868116600483015285811660248301526044820185905290911690638353b91990606401600060405180830381600087803b158015610a1f57600080fd5b505af1158015610a33573d6000803e3d6000fd5b5050505061079660008051602061185083398151915285610868565b600080516020611830833981519152610a6781610dcb565b61090760008051602061185083398151915283610c4a565b6000610a8a81610dcb565b50609b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ab881610dcb565b50609c80546001600160a01b0319166001600160a01b0392909216919091179055565b609b546000906104a6906001600160a01b031683306110ed565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020611830833981519152610b3881610dcb565b609854604051630830b35960e31b81526001600160a01b038681166004830152909116906341859ac890602401602060405180830381865afa158015610b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba69190611671565b610bc357604051634f3bd42760e01b815260040160405180910390fd5b6000610bcf8684610ef8565b60985460995460405163197a393d60e21b81529293506001600160a01b03808516936365e8e4f493610c0e938b93918216929116908a906004016116e3565b600060405180830381600087803b158015610c2857600080fd5b505af1158015610c3c573d6000803e3d6000fd5b505050506106258186610f95565b600082815260656020526040902060010154610c6581610dcb565b6108498383611149565b600080516020611850833981519152610c8781610dcb565b609a54600090610ca0906001600160a01b031684610ef8565b60985460995460405163197a393d60e21b81529293506001600160a01b03808516936365e8e4f493610cdf933393918216929116908a906004016116e3565b600060405180830381600087803b158015610cf957600080fd5b505af1158015610d0d573d6000803e3d6000fd5b505050506107968133610f95565b60978181548110610d2b57600080fd5b6000918252602090912060029091020180546001909101546001600160a01b0391821692501682565b600054610100900460ff16610dbf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610545565b565b6109078282610e72565b610dd581336111b0565b50565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b038116610e6d5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b6044820152606401610545565b919050565b610e7c8282610af5565b6109075760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610eb43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b0381166104a65760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401610545565b6040805180820182526001600160a01b0380851682528381166020830190815260978054600181018255600091909152925160029093027f354a83ed9988f79f6038d4c7a7dadbad8af32f4ad6df893e0e5807a1b1944ff9810180549484166001600160a01b031995861617905590517f354a83ed9988f79f6038d4c7a7dadbad8af32f4ad6df893e0e5807a1b1944ffa9091018054918316919093161790915560985491516331c3aba360e21b815291169063c70eae8c9061106b9085906004016001600160a01b0391909116815260200190565b600060405180830381600087803b15801561108557600080fd5b505af1158015611099573d6000803e3d6000fd5b50505050609d600081546110ac90611737565b909155506040516001600160a01b0380831691908416907f5d0de243db1669e3a7056744cd715c625f0c1c348736c2c2d53d0ddebff1a6c790600090a35050565b60405160388101919091526f5af43d82803e903d91602b57fd5bf3ff60248201526014810192909252733d602d80600a3d3981f3363d3d373d3d3d363d73825260588201526037600c8201206078820152605560439091012090565b6111538282610af5565b156109075760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6111ba8282610af5565b610907576111c781611209565b6111d283602061121b565b6040516020016111e3929190611750565b60408051601f198184030181529082905262461bcd60e51b8252610545916004016117c5565b60606104a66001600160a01b03831660145b6060600061122a8360026117d8565b6112359060026117ef565b67ffffffffffffffff81111561124d5761124d611523565b6040519080825280601f01601f191660200182016040528015611277576020820181803683370190505b509050600360fc1b8160008151811061129257611292611802565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106112c1576112c1611802565b60200101906001600160f81b031916908160001a90535060006112e58460026117d8565b6112f09060016117ef565b90505b6001811115611368576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061132457611324611802565b1a60f81b82828151811061133a5761133a611802565b60200101906001600160f81b031916908160001a90535060049490941c9361136181611818565b90506112f3565b5083156109185760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610545565b6000602082840312156113c957600080fd5b81356001600160e01b03198116811461091857600080fd5b80356001600160a01b0381168114610e6d57600080fd5b600080600080600060a0868803121561141057600080fd5b611419866113e1565b9450611427602087016113e1565b9350611435604087016113e1565b9250611443606087016113e1565b9150611451608087016113e1565b90509295509295909350565b6000806040838503121561147057600080fd5b611479836113e1565b946020939093013593505050565b60006020828403121561149957600080fd5b5035919050565b600080604083850312156114b357600080fd5b823591506114c3602084016113e1565b90509250929050565b6000602082840312156114de57600080fd5b610918826113e1565b6000806000606084860312156114fc57600080fd5b611505846113e1565b9250611513602085016113e1565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261154a57600080fd5b813567ffffffffffffffff8082111561156557611565611523565b604051601f8301601f19908116603f0116810190828211818310171561158d5761158d611523565b816040528381528660208588010111156115a657600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080608085870312156115dc57600080fd5b6115e5856113e1565b93506115f3602086016113e1565b9250604085013567ffffffffffffffff81111561160f57600080fd5b61161b87828801611539565b949793965093946060013593505050565b6000806040838503121561163f57600080fd5b823567ffffffffffffffff81111561165657600080fd5b61166285828601611539565b95602094909401359450505050565b60006020828403121561168357600080fd5b8151801515811461091857600080fd5b60005b838110156116ae578181015183820152602001611696565b50506000910152565b600081518084526116cf816020860160208601611693565b601f01601f19169290920160200192915050565b6001600160a01b038581168252848116602083015283166040820152608060608201819052600090611717908301846116b7565b9695505050505050565b634e487b7160e01b600052601160045260246000fd5b60006001820161174957611749611721565b5060010190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611788816017850160208801611693565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516117b9816028840160208801611693565b01602801949350505050565b60208152600061091860208301846116b7565b80820281158282048414176104a6576104a6611721565b808201808211156104a6576104a6611721565b634e487b7160e01b600052603260045260246000fd5b60008161182757611827611721565b50600019019056fe2ceaf29507f118cd1f62635058556b732f02f44e3a3a133e73c60008a777fd3e0ac90c257048ef1c3e387c26d4a99bde06894efbcbff862dc1885c3a9319308aa264697066735822122048db67ee1ffecdefc42751a373454d0957c4a30cb81daab953553f592408248e64736f6c63430008130033",
+ "nonce": "0x496",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [],
+ "libraries": [],
+ "pending": [
+ "0xeabe34dcfea19a18b0dd7899af40f375eb75969788ca5ff94de8b1b3f7fd1756"
+ ],
+ "returns": {},
+ "timestamp": 1698933961,
+ "chain": 84531,
+ "multi": false,
+ "commit": "3a8a171"
+}
\ No newline at end of file
diff --git a/broadcast/deploy-upgrade.s.sol/84531/run-1698933967.json b/broadcast/deploy-upgrade.s.sol/84531/run-1698933967.json
new file mode 100644
index 0000000..9aa28aa
--- /dev/null
+++ b/broadcast/deploy-upgrade.s.sol/84531/run-1698933967.json
@@ -0,0 +1,62 @@
+{
+ "transactions": [
+ {
+ "hash": "0xeabe34dcfea19a18b0dd7899af40f375eb75969788ca5ff94de8b1b3f7fd1756",
+ "transactionType": "CREATE",
+ "contractName": "AnotherCloneFactory",
+ "contractAddress": "0x2b0DDB1926B69337F83314537a24a2713da00fa5",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "type": "0x02",
+ "from": "0xd71256ec24925873ce9e9f085f89864ca05970bd",
+ "gas": "0x1c9a2f",
+ "value": "0x0",
+ "data": "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6118a5806100ed6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80636b7e394911610104578063a217fddf116100a2578063d57f966b11610071578063d57f966b14610411578063d8f4b6fd1461041a578063e442ac181461042f578063fdbda0ec1461044257600080fd5b8063a217fddf146103ce578063bdd2fe78146103d6578063cfc5a0c0146103e9578063d547741f146103fe57600080fd5b8063832ca2f5116100de578063832ca2f5146103825780638d058ac81461039557806391d14854146103a85780639f1fb80d146103bb57600080fd5b80636b7e3949146103495780636cc82b841461035c5780637d2405bb1461036f57600080fd5b8063248a9ca31161017c57806347fcac3b1161014b57806347fcac3b146102fd5780634c7dfac314610310578063641254bd14610323578063678213491461033657600080fd5b8063248a9ca3146102935780632f2ff15d146102c457806336568abe146102d75780634128541c146102ea57600080fd5b80631c8518c2116101b85780631c8518c21461022f5780631ce6e4441461025a5780631e5b36841461026d578063229a8a821461028057600080fd5b806301ffc9a7146101df5780631459457a1461020757806318c25d8a1461021c575b600080fd5b6101f26101ed3660046113b7565b610475565b60405190151581526020015b60405180910390f35b61021a6102153660046113f8565b6104ac565b005b61021a61022a36600461145d565b61062d565b609b54610242906001600160a01b031681565b6040516001600160a01b0390911681526020016101fe565b609a54610242906001600160a01b031681565b61021a61027b366004611487565b61079c565b61024261028e366004611487565b61084e565b6102b66102a1366004611487565b60009081526065602052604090206001015490565b6040519081526020016101fe565b61021a6102d23660046114a0565b610868565b61021a6102e53660046114a0565b61088d565b609854610242906001600160a01b031681565b61024261030b36600461145d565b61090b565b6101f261031e3660046114cc565b61091f565b61021a6103313660046114cc565b610939565b61021a6103443660046114e7565b610967565b61021a6103573660046114cc565b610a4f565b609954610242906001600160a01b031681565b61021a61037d3660046114cc565b610a7f565b61021a6103903660046114cc565b610aad565b6102426103a3366004611487565b610adb565b6101f26103b63660046114a0565b610af5565b61021a6103c93660046115c6565b610b20565b6102b6600081565b609c54610242906001600160a01b031681565b6102b660008051602061183083398151915281565b61021a61040c3660046114a0565b610c4a565b6102b6609d5481565b6102b660008051602061185083398151915281565b61021a61043d36600461162c565b610c6f565b610455610450366004611487565b610d1b565b604080516001600160a01b039384168152929091166020830152016101fe565b60006001600160e01b03198216637965db0b60e01b14806104a657506301ffc9a760e01b6001600160e01b03198316145b92915050565b600054610100900460ff16158080156104cc5750600054600160ff909116105b806104e65750303b1580156104e6575060005460ff166001145b61054e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610571576000805461ff0019166101001790555b609880546001600160a01b03199081166001600160a01b0389811691909117909255609980548216888416179055609a80548216878416179055609b80548216868416179055609c80549091169184169190911790556000609d556105d4610d54565b6105df600033610dc1565b8015610625576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b60008051602061183083398151915261064581610dcb565b61271082111561066857604051632627b42d60e11b815260040160405180910390fd5b6001600160a01b03831661068f57604051632627b42d60e11b815260040160405180910390fd5b609c546000906106a7906001600160a01b0316610dd8565b60985460405163485cc95560e01b81526001600160a01b038781166004830152918216602482015291925082169063485cc95590604401600060405180830381600087803b1580156106f857600080fd5b505af115801561070c573d6000803e3d6000fd5b5050609854604051638353b91960e01b81526001600160a01b0388811660048301528581166024830152604482018890529091169250638353b9199150606401600060405180830381600087803b15801561076657600080fd5b505af115801561077a573d6000803e3d6000fd5b5050505061079660008051602061185083398151915285610e72565b50505050565b6000805160206118508339815191526107b481610dcb565b609b546000906107cd906001600160a01b031684610ef8565b60985460995460405163c0c53b8b60e01b81523360048201526001600160a01b039283166024820152908216604482015291925082169063c0c53b8b90606401600060405180830381600087803b15801561082757600080fd5b505af115801561083b573d6000803e3d6000fd5b505050506108498133610f95565b505050565b609a546000906104a6906001600160a01b031683306110ed565b60008281526065602052604090206001015461088381610dcb565b6108498383610e72565b6001600160a01b03811633146108fd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610545565b6109078282611149565b5050565b60006109188383306110ed565b9392505050565b60006104a660008051602061185083398151915283610af5565b600061094481610dcb565b50609a80546001600160a01b0319166001600160a01b0392909216919091179055565b60008051602061183083398151915261097f81610dcb565b6127108211156109a257604051632627b42d60e11b815260040160405180910390fd5b6001600160a01b0384166109c957604051632627b42d60e11b815260040160405180910390fd5b609854604051638353b91960e01b81526001600160a01b03868116600483015285811660248301526044820185905290911690638353b91990606401600060405180830381600087803b158015610a1f57600080fd5b505af1158015610a33573d6000803e3d6000fd5b5050505061079660008051602061185083398151915285610868565b600080516020611830833981519152610a6781610dcb565b61090760008051602061185083398151915283610c4a565b6000610a8a81610dcb565b50609b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ab881610dcb565b50609c80546001600160a01b0319166001600160a01b0392909216919091179055565b609b546000906104a6906001600160a01b031683306110ed565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020611830833981519152610b3881610dcb565b609854604051630830b35960e31b81526001600160a01b038681166004830152909116906341859ac890602401602060405180830381865afa158015610b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba69190611671565b610bc357604051634f3bd42760e01b815260040160405180910390fd5b6000610bcf8684610ef8565b60985460995460405163197a393d60e21b81529293506001600160a01b03808516936365e8e4f493610c0e938b93918216929116908a906004016116e3565b600060405180830381600087803b158015610c2857600080fd5b505af1158015610c3c573d6000803e3d6000fd5b505050506106258186610f95565b600082815260656020526040902060010154610c6581610dcb565b6108498383611149565b600080516020611850833981519152610c8781610dcb565b609a54600090610ca0906001600160a01b031684610ef8565b60985460995460405163197a393d60e21b81529293506001600160a01b03808516936365e8e4f493610cdf933393918216929116908a906004016116e3565b600060405180830381600087803b158015610cf957600080fd5b505af1158015610d0d573d6000803e3d6000fd5b505050506107968133610f95565b60978181548110610d2b57600080fd5b6000918252602090912060029091020180546001909101546001600160a01b0391821692501682565b600054610100900460ff16610dbf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610545565b565b6109078282610e72565b610dd581336111b0565b50565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b038116610e6d5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b6044820152606401610545565b919050565b610e7c8282610af5565b6109075760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610eb43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b0381166104a65760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401610545565b6040805180820182526001600160a01b0380851682528381166020830190815260978054600181018255600091909152925160029093027f354a83ed9988f79f6038d4c7a7dadbad8af32f4ad6df893e0e5807a1b1944ff9810180549484166001600160a01b031995861617905590517f354a83ed9988f79f6038d4c7a7dadbad8af32f4ad6df893e0e5807a1b1944ffa9091018054918316919093161790915560985491516331c3aba360e21b815291169063c70eae8c9061106b9085906004016001600160a01b0391909116815260200190565b600060405180830381600087803b15801561108557600080fd5b505af1158015611099573d6000803e3d6000fd5b50505050609d600081546110ac90611737565b909155506040516001600160a01b0380831691908416907f5d0de243db1669e3a7056744cd715c625f0c1c348736c2c2d53d0ddebff1a6c790600090a35050565b60405160388101919091526f5af43d82803e903d91602b57fd5bf3ff60248201526014810192909252733d602d80600a3d3981f3363d3d373d3d3d363d73825260588201526037600c8201206078820152605560439091012090565b6111538282610af5565b156109075760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6111ba8282610af5565b610907576111c781611209565b6111d283602061121b565b6040516020016111e3929190611750565b60408051601f198184030181529082905262461bcd60e51b8252610545916004016117c5565b60606104a66001600160a01b03831660145b6060600061122a8360026117d8565b6112359060026117ef565b67ffffffffffffffff81111561124d5761124d611523565b6040519080825280601f01601f191660200182016040528015611277576020820181803683370190505b509050600360fc1b8160008151811061129257611292611802565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106112c1576112c1611802565b60200101906001600160f81b031916908160001a90535060006112e58460026117d8565b6112f09060016117ef565b90505b6001811115611368576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061132457611324611802565b1a60f81b82828151811061133a5761133a611802565b60200101906001600160f81b031916908160001a90535060049490941c9361136181611818565b90506112f3565b5083156109185760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610545565b6000602082840312156113c957600080fd5b81356001600160e01b03198116811461091857600080fd5b80356001600160a01b0381168114610e6d57600080fd5b600080600080600060a0868803121561141057600080fd5b611419866113e1565b9450611427602087016113e1565b9350611435604087016113e1565b9250611443606087016113e1565b9150611451608087016113e1565b90509295509295909350565b6000806040838503121561147057600080fd5b611479836113e1565b946020939093013593505050565b60006020828403121561149957600080fd5b5035919050565b600080604083850312156114b357600080fd5b823591506114c3602084016113e1565b90509250929050565b6000602082840312156114de57600080fd5b610918826113e1565b6000806000606084860312156114fc57600080fd5b611505846113e1565b9250611513602085016113e1565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261154a57600080fd5b813567ffffffffffffffff8082111561156557611565611523565b604051601f8301601f19908116603f0116810190828211818310171561158d5761158d611523565b816040528381528660208588010111156115a657600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080608085870312156115dc57600080fd5b6115e5856113e1565b93506115f3602086016113e1565b9250604085013567ffffffffffffffff81111561160f57600080fd5b61161b87828801611539565b949793965093946060013593505050565b6000806040838503121561163f57600080fd5b823567ffffffffffffffff81111561165657600080fd5b61166285828601611539565b95602094909401359450505050565b60006020828403121561168357600080fd5b8151801515811461091857600080fd5b60005b838110156116ae578181015183820152602001611696565b50506000910152565b600081518084526116cf816020860160208601611693565b601f01601f19169290920160200192915050565b6001600160a01b038581168252848116602083015283166040820152608060608201819052600090611717908301846116b7565b9695505050505050565b634e487b7160e01b600052601160045260246000fd5b60006001820161174957611749611721565b5060010190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611788816017850160208801611693565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516117b9816028840160208801611693565b01602801949350505050565b60208152600061091860208301846116b7565b80820281158282048414176104a6576104a6611721565b808201808211156104a6576104a6611721565b634e487b7160e01b600052603260045260246000fd5b60008161182757611827611721565b50600019019056fe2ceaf29507f118cd1f62635058556b732f02f44e3a3a133e73c60008a777fd3e0ac90c257048ef1c3e387c26d4a99bde06894efbcbff862dc1885c3a9319308aa264697066735822122048db67ee1ffecdefc42751a373454d0957c4a30cb81daab953553f592408248e64736f6c63430008130033",
+ "nonce": "0x496",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "transactionHash": "0xeabe34dcfea19a18b0dd7899af40f375eb75969788ca5ff94de8b1b3f7fd1756",
+ "transactionIndex": "0x1",
+ "blockHash": "0x2d84bda58b7e6ee53c8fb9ab50110ea7fc81c3f8aa23f9aed11d7a8eab56f725",
+ "blockNumber": "0xb51fdd",
+ "from": "0xD71256eC24925873cE9E9F085f89864Ca05970bD",
+ "to": null,
+ "cumulativeGasUsed": "0x16b76c",
+ "gasUsed": "0x160073",
+ "contractAddress": "0x2b0DDB1926B69337F83314537a24a2713da00fa5",
+ "logs": [
+ {
+ "address": "0x2b0DDB1926B69337F83314537a24a2713da00fa5",
+ "topics": [
+ "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498"
+ ],
+ "data": "0x00000000000000000000000000000000000000000000000000000000000000ff",
+ "blockHash": "0x2d84bda58b7e6ee53c8fb9ab50110ea7fc81c3f8aa23f9aed11d7a8eab56f725",
+ "blockNumber": "0xb51fdd",
+ "transactionHash": "0xeabe34dcfea19a18b0dd7899af40f375eb75969788ca5ff94de8b1b3f7fd1756",
+ "transactionIndex": "0x1",
+ "logIndex": "0x0",
+ "removed": false
+ }
+ ],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000100000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xb2d05e32"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1698933967,
+ "chain": 84531,
+ "multi": false,
+ "commit": "3a8a171"
+}
\ No newline at end of file
diff --git a/broadcast/deploy-upgrade.s.sol/84531/run-1698933984.json b/broadcast/deploy-upgrade.s.sol/84531/run-1698933984.json
new file mode 100644
index 0000000..b63fcca
--- /dev/null
+++ b/broadcast/deploy-upgrade.s.sol/84531/run-1698933984.json
@@ -0,0 +1,62 @@
+{
+ "transactions": [
+ {
+ "hash": "0xeabe34dcfea19a18b0dd7899af40f375eb75969788ca5ff94de8b1b3f7fd1756",
+ "transactionType": "CREATE",
+ "contractName": "AnotherCloneFactory",
+ "contractAddress": "0x2b0DDB1926B69337F83314537a24a2713da00fa5",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "type": "0x02",
+ "from": "0xd71256ec24925873ce9e9f085f89864ca05970bd",
+ "gas": "0x1c9a2f",
+ "value": "0x0",
+ "data": "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6118a5806100ed6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80636b7e394911610104578063a217fddf116100a2578063d57f966b11610071578063d57f966b14610411578063d8f4b6fd1461041a578063e442ac181461042f578063fdbda0ec1461044257600080fd5b8063a217fddf146103ce578063bdd2fe78146103d6578063cfc5a0c0146103e9578063d547741f146103fe57600080fd5b8063832ca2f5116100de578063832ca2f5146103825780638d058ac81461039557806391d14854146103a85780639f1fb80d146103bb57600080fd5b80636b7e3949146103495780636cc82b841461035c5780637d2405bb1461036f57600080fd5b8063248a9ca31161017c57806347fcac3b1161014b57806347fcac3b146102fd5780634c7dfac314610310578063641254bd14610323578063678213491461033657600080fd5b8063248a9ca3146102935780632f2ff15d146102c457806336568abe146102d75780634128541c146102ea57600080fd5b80631c8518c2116101b85780631c8518c21461022f5780631ce6e4441461025a5780631e5b36841461026d578063229a8a821461028057600080fd5b806301ffc9a7146101df5780631459457a1461020757806318c25d8a1461021c575b600080fd5b6101f26101ed3660046113b7565b610475565b60405190151581526020015b60405180910390f35b61021a6102153660046113f8565b6104ac565b005b61021a61022a36600461145d565b61062d565b609b54610242906001600160a01b031681565b6040516001600160a01b0390911681526020016101fe565b609a54610242906001600160a01b031681565b61021a61027b366004611487565b61079c565b61024261028e366004611487565b61084e565b6102b66102a1366004611487565b60009081526065602052604090206001015490565b6040519081526020016101fe565b61021a6102d23660046114a0565b610868565b61021a6102e53660046114a0565b61088d565b609854610242906001600160a01b031681565b61024261030b36600461145d565b61090b565b6101f261031e3660046114cc565b61091f565b61021a6103313660046114cc565b610939565b61021a6103443660046114e7565b610967565b61021a6103573660046114cc565b610a4f565b609954610242906001600160a01b031681565b61021a61037d3660046114cc565b610a7f565b61021a6103903660046114cc565b610aad565b6102426103a3366004611487565b610adb565b6101f26103b63660046114a0565b610af5565b61021a6103c93660046115c6565b610b20565b6102b6600081565b609c54610242906001600160a01b031681565b6102b660008051602061183083398151915281565b61021a61040c3660046114a0565b610c4a565b6102b6609d5481565b6102b660008051602061185083398151915281565b61021a61043d36600461162c565b610c6f565b610455610450366004611487565b610d1b565b604080516001600160a01b039384168152929091166020830152016101fe565b60006001600160e01b03198216637965db0b60e01b14806104a657506301ffc9a760e01b6001600160e01b03198316145b92915050565b600054610100900460ff16158080156104cc5750600054600160ff909116105b806104e65750303b1580156104e6575060005460ff166001145b61054e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610571576000805461ff0019166101001790555b609880546001600160a01b03199081166001600160a01b0389811691909117909255609980548216888416179055609a80548216878416179055609b80548216868416179055609c80549091169184169190911790556000609d556105d4610d54565b6105df600033610dc1565b8015610625576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b60008051602061183083398151915261064581610dcb565b61271082111561066857604051632627b42d60e11b815260040160405180910390fd5b6001600160a01b03831661068f57604051632627b42d60e11b815260040160405180910390fd5b609c546000906106a7906001600160a01b0316610dd8565b60985460405163485cc95560e01b81526001600160a01b038781166004830152918216602482015291925082169063485cc95590604401600060405180830381600087803b1580156106f857600080fd5b505af115801561070c573d6000803e3d6000fd5b5050609854604051638353b91960e01b81526001600160a01b0388811660048301528581166024830152604482018890529091169250638353b9199150606401600060405180830381600087803b15801561076657600080fd5b505af115801561077a573d6000803e3d6000fd5b5050505061079660008051602061185083398151915285610e72565b50505050565b6000805160206118508339815191526107b481610dcb565b609b546000906107cd906001600160a01b031684610ef8565b60985460995460405163c0c53b8b60e01b81523360048201526001600160a01b039283166024820152908216604482015291925082169063c0c53b8b90606401600060405180830381600087803b15801561082757600080fd5b505af115801561083b573d6000803e3d6000fd5b505050506108498133610f95565b505050565b609a546000906104a6906001600160a01b031683306110ed565b60008281526065602052604090206001015461088381610dcb565b6108498383610e72565b6001600160a01b03811633146108fd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610545565b6109078282611149565b5050565b60006109188383306110ed565b9392505050565b60006104a660008051602061185083398151915283610af5565b600061094481610dcb565b50609a80546001600160a01b0319166001600160a01b0392909216919091179055565b60008051602061183083398151915261097f81610dcb565b6127108211156109a257604051632627b42d60e11b815260040160405180910390fd5b6001600160a01b0384166109c957604051632627b42d60e11b815260040160405180910390fd5b609854604051638353b91960e01b81526001600160a01b03868116600483015285811660248301526044820185905290911690638353b91990606401600060405180830381600087803b158015610a1f57600080fd5b505af1158015610a33573d6000803e3d6000fd5b5050505061079660008051602061185083398151915285610868565b600080516020611830833981519152610a6781610dcb565b61090760008051602061185083398151915283610c4a565b6000610a8a81610dcb565b50609b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ab881610dcb565b50609c80546001600160a01b0319166001600160a01b0392909216919091179055565b609b546000906104a6906001600160a01b031683306110ed565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020611830833981519152610b3881610dcb565b609854604051630830b35960e31b81526001600160a01b038681166004830152909116906341859ac890602401602060405180830381865afa158015610b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba69190611671565b610bc357604051634f3bd42760e01b815260040160405180910390fd5b6000610bcf8684610ef8565b60985460995460405163197a393d60e21b81529293506001600160a01b03808516936365e8e4f493610c0e938b93918216929116908a906004016116e3565b600060405180830381600087803b158015610c2857600080fd5b505af1158015610c3c573d6000803e3d6000fd5b505050506106258186610f95565b600082815260656020526040902060010154610c6581610dcb565b6108498383611149565b600080516020611850833981519152610c8781610dcb565b609a54600090610ca0906001600160a01b031684610ef8565b60985460995460405163197a393d60e21b81529293506001600160a01b03808516936365e8e4f493610cdf933393918216929116908a906004016116e3565b600060405180830381600087803b158015610cf957600080fd5b505af1158015610d0d573d6000803e3d6000fd5b505050506107968133610f95565b60978181548110610d2b57600080fd5b6000918252602090912060029091020180546001909101546001600160a01b0391821692501682565b600054610100900460ff16610dbf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610545565b565b6109078282610e72565b610dd581336111b0565b50565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b038116610e6d5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b6044820152606401610545565b919050565b610e7c8282610af5565b6109075760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610eb43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b0381166104a65760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401610545565b6040805180820182526001600160a01b0380851682528381166020830190815260978054600181018255600091909152925160029093027f354a83ed9988f79f6038d4c7a7dadbad8af32f4ad6df893e0e5807a1b1944ff9810180549484166001600160a01b031995861617905590517f354a83ed9988f79f6038d4c7a7dadbad8af32f4ad6df893e0e5807a1b1944ffa9091018054918316919093161790915560985491516331c3aba360e21b815291169063c70eae8c9061106b9085906004016001600160a01b0391909116815260200190565b600060405180830381600087803b15801561108557600080fd5b505af1158015611099573d6000803e3d6000fd5b50505050609d600081546110ac90611737565b909155506040516001600160a01b0380831691908416907f5d0de243db1669e3a7056744cd715c625f0c1c348736c2c2d53d0ddebff1a6c790600090a35050565b60405160388101919091526f5af43d82803e903d91602b57fd5bf3ff60248201526014810192909252733d602d80600a3d3981f3363d3d373d3d3d363d73825260588201526037600c8201206078820152605560439091012090565b6111538282610af5565b156109075760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6111ba8282610af5565b610907576111c781611209565b6111d283602061121b565b6040516020016111e3929190611750565b60408051601f198184030181529082905262461bcd60e51b8252610545916004016117c5565b60606104a66001600160a01b03831660145b6060600061122a8360026117d8565b6112359060026117ef565b67ffffffffffffffff81111561124d5761124d611523565b6040519080825280601f01601f191660200182016040528015611277576020820181803683370190505b509050600360fc1b8160008151811061129257611292611802565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106112c1576112c1611802565b60200101906001600160f81b031916908160001a90535060006112e58460026117d8565b6112f09060016117ef565b90505b6001811115611368576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061132457611324611802565b1a60f81b82828151811061133a5761133a611802565b60200101906001600160f81b031916908160001a90535060049490941c9361136181611818565b90506112f3565b5083156109185760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610545565b6000602082840312156113c957600080fd5b81356001600160e01b03198116811461091857600080fd5b80356001600160a01b0381168114610e6d57600080fd5b600080600080600060a0868803121561141057600080fd5b611419866113e1565b9450611427602087016113e1565b9350611435604087016113e1565b9250611443606087016113e1565b9150611451608087016113e1565b90509295509295909350565b6000806040838503121561147057600080fd5b611479836113e1565b946020939093013593505050565b60006020828403121561149957600080fd5b5035919050565b600080604083850312156114b357600080fd5b823591506114c3602084016113e1565b90509250929050565b6000602082840312156114de57600080fd5b610918826113e1565b6000806000606084860312156114fc57600080fd5b611505846113e1565b9250611513602085016113e1565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261154a57600080fd5b813567ffffffffffffffff8082111561156557611565611523565b604051601f8301601f19908116603f0116810190828211818310171561158d5761158d611523565b816040528381528660208588010111156115a657600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080608085870312156115dc57600080fd5b6115e5856113e1565b93506115f3602086016113e1565b9250604085013567ffffffffffffffff81111561160f57600080fd5b61161b87828801611539565b949793965093946060013593505050565b6000806040838503121561163f57600080fd5b823567ffffffffffffffff81111561165657600080fd5b61166285828601611539565b95602094909401359450505050565b60006020828403121561168357600080fd5b8151801515811461091857600080fd5b60005b838110156116ae578181015183820152602001611696565b50506000910152565b600081518084526116cf816020860160208601611693565b601f01601f19169290920160200192915050565b6001600160a01b038581168252848116602083015283166040820152608060608201819052600090611717908301846116b7565b9695505050505050565b634e487b7160e01b600052601160045260246000fd5b60006001820161174957611749611721565b5060010190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611788816017850160208801611693565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516117b9816028840160208801611693565b01602801949350505050565b60208152600061091860208301846116b7565b80820281158282048414176104a6576104a6611721565b808201808211156104a6576104a6611721565b634e487b7160e01b600052603260045260246000fd5b60008161182757611827611721565b50600019019056fe2ceaf29507f118cd1f62635058556b732f02f44e3a3a133e73c60008a777fd3e0ac90c257048ef1c3e387c26d4a99bde06894efbcbff862dc1885c3a9319308aa264697066735822122048db67ee1ffecdefc42751a373454d0957c4a30cb81daab953553f592408248e64736f6c63430008130033",
+ "nonce": "0x496",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "transactionHash": "0xeabe34dcfea19a18b0dd7899af40f375eb75969788ca5ff94de8b1b3f7fd1756",
+ "transactionIndex": "0x1",
+ "blockHash": "0x2d84bda58b7e6ee53c8fb9ab50110ea7fc81c3f8aa23f9aed11d7a8eab56f725",
+ "blockNumber": "0xb51fdd",
+ "from": "0xD71256eC24925873cE9E9F085f89864Ca05970bD",
+ "to": null,
+ "cumulativeGasUsed": "0x16b76c",
+ "gasUsed": "0x160073",
+ "contractAddress": "0x2b0DDB1926B69337F83314537a24a2713da00fa5",
+ "logs": [
+ {
+ "address": "0x2b0DDB1926B69337F83314537a24a2713da00fa5",
+ "topics": [
+ "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498"
+ ],
+ "data": "0x00000000000000000000000000000000000000000000000000000000000000ff",
+ "blockHash": "0x2d84bda58b7e6ee53c8fb9ab50110ea7fc81c3f8aa23f9aed11d7a8eab56f725",
+ "blockNumber": "0xb51fdd",
+ "transactionHash": "0xeabe34dcfea19a18b0dd7899af40f375eb75969788ca5ff94de8b1b3f7fd1756",
+ "transactionIndex": "0x1",
+ "logIndex": "0x0",
+ "removed": false
+ }
+ ],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000100000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xb2d05e32"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1698933984,
+ "chain": 84531,
+ "multi": false,
+ "commit": "3a8a171"
+}
\ No newline at end of file
diff --git a/broadcast/deploy-upgrade.s.sol/84531/run-latest.json b/broadcast/deploy-upgrade.s.sol/84531/run-latest.json
new file mode 100644
index 0000000..b63fcca
--- /dev/null
+++ b/broadcast/deploy-upgrade.s.sol/84531/run-latest.json
@@ -0,0 +1,62 @@
+{
+ "transactions": [
+ {
+ "hash": "0xeabe34dcfea19a18b0dd7899af40f375eb75969788ca5ff94de8b1b3f7fd1756",
+ "transactionType": "CREATE",
+ "contractName": "AnotherCloneFactory",
+ "contractAddress": "0x2b0DDB1926B69337F83314537a24a2713da00fa5",
+ "function": null,
+ "arguments": null,
+ "transaction": {
+ "type": "0x02",
+ "from": "0xd71256ec24925873ce9e9f085f89864ca05970bd",
+ "gas": "0x1c9a2f",
+ "value": "0x0",
+ "data": "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6118a5806100ed6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80636b7e394911610104578063a217fddf116100a2578063d57f966b11610071578063d57f966b14610411578063d8f4b6fd1461041a578063e442ac181461042f578063fdbda0ec1461044257600080fd5b8063a217fddf146103ce578063bdd2fe78146103d6578063cfc5a0c0146103e9578063d547741f146103fe57600080fd5b8063832ca2f5116100de578063832ca2f5146103825780638d058ac81461039557806391d14854146103a85780639f1fb80d146103bb57600080fd5b80636b7e3949146103495780636cc82b841461035c5780637d2405bb1461036f57600080fd5b8063248a9ca31161017c57806347fcac3b1161014b57806347fcac3b146102fd5780634c7dfac314610310578063641254bd14610323578063678213491461033657600080fd5b8063248a9ca3146102935780632f2ff15d146102c457806336568abe146102d75780634128541c146102ea57600080fd5b80631c8518c2116101b85780631c8518c21461022f5780631ce6e4441461025a5780631e5b36841461026d578063229a8a821461028057600080fd5b806301ffc9a7146101df5780631459457a1461020757806318c25d8a1461021c575b600080fd5b6101f26101ed3660046113b7565b610475565b60405190151581526020015b60405180910390f35b61021a6102153660046113f8565b6104ac565b005b61021a61022a36600461145d565b61062d565b609b54610242906001600160a01b031681565b6040516001600160a01b0390911681526020016101fe565b609a54610242906001600160a01b031681565b61021a61027b366004611487565b61079c565b61024261028e366004611487565b61084e565b6102b66102a1366004611487565b60009081526065602052604090206001015490565b6040519081526020016101fe565b61021a6102d23660046114a0565b610868565b61021a6102e53660046114a0565b61088d565b609854610242906001600160a01b031681565b61024261030b36600461145d565b61090b565b6101f261031e3660046114cc565b61091f565b61021a6103313660046114cc565b610939565b61021a6103443660046114e7565b610967565b61021a6103573660046114cc565b610a4f565b609954610242906001600160a01b031681565b61021a61037d3660046114cc565b610a7f565b61021a6103903660046114cc565b610aad565b6102426103a3366004611487565b610adb565b6101f26103b63660046114a0565b610af5565b61021a6103c93660046115c6565b610b20565b6102b6600081565b609c54610242906001600160a01b031681565b6102b660008051602061183083398151915281565b61021a61040c3660046114a0565b610c4a565b6102b6609d5481565b6102b660008051602061185083398151915281565b61021a61043d36600461162c565b610c6f565b610455610450366004611487565b610d1b565b604080516001600160a01b039384168152929091166020830152016101fe565b60006001600160e01b03198216637965db0b60e01b14806104a657506301ffc9a760e01b6001600160e01b03198316145b92915050565b600054610100900460ff16158080156104cc5750600054600160ff909116105b806104e65750303b1580156104e6575060005460ff166001145b61054e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610571576000805461ff0019166101001790555b609880546001600160a01b03199081166001600160a01b0389811691909117909255609980548216888416179055609a80548216878416179055609b80548216868416179055609c80549091169184169190911790556000609d556105d4610d54565b6105df600033610dc1565b8015610625576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b60008051602061183083398151915261064581610dcb565b61271082111561066857604051632627b42d60e11b815260040160405180910390fd5b6001600160a01b03831661068f57604051632627b42d60e11b815260040160405180910390fd5b609c546000906106a7906001600160a01b0316610dd8565b60985460405163485cc95560e01b81526001600160a01b038781166004830152918216602482015291925082169063485cc95590604401600060405180830381600087803b1580156106f857600080fd5b505af115801561070c573d6000803e3d6000fd5b5050609854604051638353b91960e01b81526001600160a01b0388811660048301528581166024830152604482018890529091169250638353b9199150606401600060405180830381600087803b15801561076657600080fd5b505af115801561077a573d6000803e3d6000fd5b5050505061079660008051602061185083398151915285610e72565b50505050565b6000805160206118508339815191526107b481610dcb565b609b546000906107cd906001600160a01b031684610ef8565b60985460995460405163c0c53b8b60e01b81523360048201526001600160a01b039283166024820152908216604482015291925082169063c0c53b8b90606401600060405180830381600087803b15801561082757600080fd5b505af115801561083b573d6000803e3d6000fd5b505050506108498133610f95565b505050565b609a546000906104a6906001600160a01b031683306110ed565b60008281526065602052604090206001015461088381610dcb565b6108498383610e72565b6001600160a01b03811633146108fd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610545565b6109078282611149565b5050565b60006109188383306110ed565b9392505050565b60006104a660008051602061185083398151915283610af5565b600061094481610dcb565b50609a80546001600160a01b0319166001600160a01b0392909216919091179055565b60008051602061183083398151915261097f81610dcb565b6127108211156109a257604051632627b42d60e11b815260040160405180910390fd5b6001600160a01b0384166109c957604051632627b42d60e11b815260040160405180910390fd5b609854604051638353b91960e01b81526001600160a01b03868116600483015285811660248301526044820185905290911690638353b91990606401600060405180830381600087803b158015610a1f57600080fd5b505af1158015610a33573d6000803e3d6000fd5b5050505061079660008051602061185083398151915285610868565b600080516020611830833981519152610a6781610dcb565b61090760008051602061185083398151915283610c4a565b6000610a8a81610dcb565b50609b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ab881610dcb565b50609c80546001600160a01b0319166001600160a01b0392909216919091179055565b609b546000906104a6906001600160a01b031683306110ed565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020611830833981519152610b3881610dcb565b609854604051630830b35960e31b81526001600160a01b038681166004830152909116906341859ac890602401602060405180830381865afa158015610b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba69190611671565b610bc357604051634f3bd42760e01b815260040160405180910390fd5b6000610bcf8684610ef8565b60985460995460405163197a393d60e21b81529293506001600160a01b03808516936365e8e4f493610c0e938b93918216929116908a906004016116e3565b600060405180830381600087803b158015610c2857600080fd5b505af1158015610c3c573d6000803e3d6000fd5b505050506106258186610f95565b600082815260656020526040902060010154610c6581610dcb565b6108498383611149565b600080516020611850833981519152610c8781610dcb565b609a54600090610ca0906001600160a01b031684610ef8565b60985460995460405163197a393d60e21b81529293506001600160a01b03808516936365e8e4f493610cdf933393918216929116908a906004016116e3565b600060405180830381600087803b158015610cf957600080fd5b505af1158015610d0d573d6000803e3d6000fd5b505050506107968133610f95565b60978181548110610d2b57600080fd5b6000918252602090912060029091020180546001909101546001600160a01b0391821692501682565b600054610100900460ff16610dbf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610545565b565b6109078282610e72565b610dd581336111b0565b50565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b038116610e6d5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b6044820152606401610545565b919050565b610e7c8282610af5565b6109075760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610eb43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b0381166104a65760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401610545565b6040805180820182526001600160a01b0380851682528381166020830190815260978054600181018255600091909152925160029093027f354a83ed9988f79f6038d4c7a7dadbad8af32f4ad6df893e0e5807a1b1944ff9810180549484166001600160a01b031995861617905590517f354a83ed9988f79f6038d4c7a7dadbad8af32f4ad6df893e0e5807a1b1944ffa9091018054918316919093161790915560985491516331c3aba360e21b815291169063c70eae8c9061106b9085906004016001600160a01b0391909116815260200190565b600060405180830381600087803b15801561108557600080fd5b505af1158015611099573d6000803e3d6000fd5b50505050609d600081546110ac90611737565b909155506040516001600160a01b0380831691908416907f5d0de243db1669e3a7056744cd715c625f0c1c348736c2c2d53d0ddebff1a6c790600090a35050565b60405160388101919091526f5af43d82803e903d91602b57fd5bf3ff60248201526014810192909252733d602d80600a3d3981f3363d3d373d3d3d363d73825260588201526037600c8201206078820152605560439091012090565b6111538282610af5565b156109075760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6111ba8282610af5565b610907576111c781611209565b6111d283602061121b565b6040516020016111e3929190611750565b60408051601f198184030181529082905262461bcd60e51b8252610545916004016117c5565b60606104a66001600160a01b03831660145b6060600061122a8360026117d8565b6112359060026117ef565b67ffffffffffffffff81111561124d5761124d611523565b6040519080825280601f01601f191660200182016040528015611277576020820181803683370190505b509050600360fc1b8160008151811061129257611292611802565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106112c1576112c1611802565b60200101906001600160f81b031916908160001a90535060006112e58460026117d8565b6112f09060016117ef565b90505b6001811115611368576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061132457611324611802565b1a60f81b82828151811061133a5761133a611802565b60200101906001600160f81b031916908160001a90535060049490941c9361136181611818565b90506112f3565b5083156109185760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610545565b6000602082840312156113c957600080fd5b81356001600160e01b03198116811461091857600080fd5b80356001600160a01b0381168114610e6d57600080fd5b600080600080600060a0868803121561141057600080fd5b611419866113e1565b9450611427602087016113e1565b9350611435604087016113e1565b9250611443606087016113e1565b9150611451608087016113e1565b90509295509295909350565b6000806040838503121561147057600080fd5b611479836113e1565b946020939093013593505050565b60006020828403121561149957600080fd5b5035919050565b600080604083850312156114b357600080fd5b823591506114c3602084016113e1565b90509250929050565b6000602082840312156114de57600080fd5b610918826113e1565b6000806000606084860312156114fc57600080fd5b611505846113e1565b9250611513602085016113e1565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261154a57600080fd5b813567ffffffffffffffff8082111561156557611565611523565b604051601f8301601f19908116603f0116810190828211818310171561158d5761158d611523565b816040528381528660208588010111156115a657600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080608085870312156115dc57600080fd5b6115e5856113e1565b93506115f3602086016113e1565b9250604085013567ffffffffffffffff81111561160f57600080fd5b61161b87828801611539565b949793965093946060013593505050565b6000806040838503121561163f57600080fd5b823567ffffffffffffffff81111561165657600080fd5b61166285828601611539565b95602094909401359450505050565b60006020828403121561168357600080fd5b8151801515811461091857600080fd5b60005b838110156116ae578181015183820152602001611696565b50506000910152565b600081518084526116cf816020860160208601611693565b601f01601f19169290920160200192915050565b6001600160a01b038581168252848116602083015283166040820152608060608201819052600090611717908301846116b7565b9695505050505050565b634e487b7160e01b600052601160045260246000fd5b60006001820161174957611749611721565b5060010190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611788816017850160208801611693565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516117b9816028840160208801611693565b01602801949350505050565b60208152600061091860208301846116b7565b80820281158282048414176104a6576104a6611721565b808201808211156104a6576104a6611721565b634e487b7160e01b600052603260045260246000fd5b60008161182757611827611721565b50600019019056fe2ceaf29507f118cd1f62635058556b732f02f44e3a3a133e73c60008a777fd3e0ac90c257048ef1c3e387c26d4a99bde06894efbcbff862dc1885c3a9319308aa264697066735822122048db67ee1ffecdefc42751a373454d0957c4a30cb81daab953553f592408248e64736f6c63430008130033",
+ "nonce": "0x496",
+ "accessList": []
+ },
+ "additionalContracts": [],
+ "isFixedGasLimit": false
+ }
+ ],
+ "receipts": [
+ {
+ "transactionHash": "0xeabe34dcfea19a18b0dd7899af40f375eb75969788ca5ff94de8b1b3f7fd1756",
+ "transactionIndex": "0x1",
+ "blockHash": "0x2d84bda58b7e6ee53c8fb9ab50110ea7fc81c3f8aa23f9aed11d7a8eab56f725",
+ "blockNumber": "0xb51fdd",
+ "from": "0xD71256eC24925873cE9E9F085f89864Ca05970bD",
+ "to": null,
+ "cumulativeGasUsed": "0x16b76c",
+ "gasUsed": "0x160073",
+ "contractAddress": "0x2b0DDB1926B69337F83314537a24a2713da00fa5",
+ "logs": [
+ {
+ "address": "0x2b0DDB1926B69337F83314537a24a2713da00fa5",
+ "topics": [
+ "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498"
+ ],
+ "data": "0x00000000000000000000000000000000000000000000000000000000000000ff",
+ "blockHash": "0x2d84bda58b7e6ee53c8fb9ab50110ea7fc81c3f8aa23f9aed11d7a8eab56f725",
+ "blockNumber": "0xb51fdd",
+ "transactionHash": "0xeabe34dcfea19a18b0dd7899af40f375eb75969788ca5ff94de8b1b3f7fd1756",
+ "transactionIndex": "0x1",
+ "logIndex": "0x0",
+ "removed": false
+ }
+ ],
+ "status": "0x1",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000100000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0xb2d05e32"
+ }
+ ],
+ "libraries": [],
+ "pending": [],
+ "returns": {},
+ "timestamp": 1698933984,
+ "chain": 84531,
+ "multi": false,
+ "commit": "3a8a171"
+}
\ No newline at end of file
diff --git a/deployment/84531/ABDataRegistry/address b/deployment/84531/ABDataRegistry/address
index 7e5c6e2..9163b91 100644
--- a/deployment/84531/ABDataRegistry/address
+++ b/deployment/84531/ABDataRegistry/address
@@ -1 +1 @@
-0xba1Bb5a85AD1e3a8fC4DEb8369b092BFe061A2d3
\ No newline at end of file
+0x7a9718F6d09e7A6ce84aFef32Ba68965b796a29D
\ No newline at end of file
diff --git a/deployment/84531/ABVerifier/address b/deployment/84531/ABVerifier/address
index 2d7fe42..8fdd817 100644
--- a/deployment/84531/ABVerifier/address
+++ b/deployment/84531/ABVerifier/address
@@ -1 +1 @@
-0x98385696FD5487628ECB2d722c9d69116a0c5Af3
\ No newline at end of file
+0x9e71972F69d67fb133B78036a4ba16F85968e0fa
\ No newline at end of file
diff --git a/deployment/84531/AnotherCloneFactory/address b/deployment/84531/AnotherCloneFactory/address
index d010d98..6bcb78c 100644
--- a/deployment/84531/AnotherCloneFactory/address
+++ b/deployment/84531/AnotherCloneFactory/address
@@ -1 +1 @@
-0x4E393A0DD0331cE371d4d6fdd0B97E4b02450514
\ No newline at end of file
+0x9BE7E2B13f70f170B63c0379663313EcdB527294
\ No newline at end of file
diff --git a/forge-cache/deploy-upgrade.s.sol/84531/dry-run/run-1698658617.json b/forge-cache/deploy-upgrade.s.sol/84531/dry-run/run-1698658617.json
new file mode 100644
index 0000000..3566a86
--- /dev/null
+++ b/forge-cache/deploy-upgrade.s.sol/84531/dry-run/run-1698658617.json
@@ -0,0 +1,16 @@
+{
+ "transactions": [
+ {
+ "rpc": "https://goerli.base.org"
+ },
+ {
+ "rpc": "https://goerli.base.org"
+ },
+ {
+ "rpc": "https://goerli.base.org"
+ },
+ {
+ "rpc": "https://goerli.base.org"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/forge-cache/deploy-upgrade.s.sol/84531/dry-run/run-latest.json b/forge-cache/deploy-upgrade.s.sol/84531/dry-run/run-latest.json
new file mode 100644
index 0000000..3566a86
--- /dev/null
+++ b/forge-cache/deploy-upgrade.s.sol/84531/dry-run/run-latest.json
@@ -0,0 +1,16 @@
+{
+ "transactions": [
+ {
+ "rpc": "https://goerli.base.org"
+ },
+ {
+ "rpc": "https://goerli.base.org"
+ },
+ {
+ "rpc": "https://goerli.base.org"
+ },
+ {
+ "rpc": "https://goerli.base.org"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/forge-cache/deploy-upgrade.s.sol/84531/run-1698658644.json b/forge-cache/deploy-upgrade.s.sol/84531/run-1698658644.json
new file mode 100644
index 0000000..3566a86
--- /dev/null
+++ b/forge-cache/deploy-upgrade.s.sol/84531/run-1698658644.json
@@ -0,0 +1,16 @@
+{
+ "transactions": [
+ {
+ "rpc": "https://goerli.base.org"
+ },
+ {
+ "rpc": "https://goerli.base.org"
+ },
+ {
+ "rpc": "https://goerli.base.org"
+ },
+ {
+ "rpc": "https://goerli.base.org"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/forge-cache/deploy-upgrade.s.sol/84531/run-1698658651.json b/forge-cache/deploy-upgrade.s.sol/84531/run-1698658651.json
new file mode 100644
index 0000000..3566a86
--- /dev/null
+++ b/forge-cache/deploy-upgrade.s.sol/84531/run-1698658651.json
@@ -0,0 +1,16 @@
+{
+ "transactions": [
+ {
+ "rpc": "https://goerli.base.org"
+ },
+ {
+ "rpc": "https://goerli.base.org"
+ },
+ {
+ "rpc": "https://goerli.base.org"
+ },
+ {
+ "rpc": "https://goerli.base.org"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/forge-cache/deploy-upgrade.s.sol/84531/run-1698658702.json b/forge-cache/deploy-upgrade.s.sol/84531/run-1698658702.json
new file mode 100644
index 0000000..3566a86
--- /dev/null
+++ b/forge-cache/deploy-upgrade.s.sol/84531/run-1698658702.json
@@ -0,0 +1,16 @@
+{
+ "transactions": [
+ {
+ "rpc": "https://goerli.base.org"
+ },
+ {
+ "rpc": "https://goerli.base.org"
+ },
+ {
+ "rpc": "https://goerli.base.org"
+ },
+ {
+ "rpc": "https://goerli.base.org"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/forge-cache/deploy-upgrade.s.sol/84531/run-1698933961.json b/forge-cache/deploy-upgrade.s.sol/84531/run-1698933961.json
new file mode 100644
index 0000000..6b3debb
--- /dev/null
+++ b/forge-cache/deploy-upgrade.s.sol/84531/run-1698933961.json
@@ -0,0 +1,7 @@
+{
+ "transactions": [
+ {
+ "rpc": "https://goerli.base.org"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/forge-cache/deploy-upgrade.s.sol/84531/run-1698933967.json b/forge-cache/deploy-upgrade.s.sol/84531/run-1698933967.json
new file mode 100644
index 0000000..6b3debb
--- /dev/null
+++ b/forge-cache/deploy-upgrade.s.sol/84531/run-1698933967.json
@@ -0,0 +1,7 @@
+{
+ "transactions": [
+ {
+ "rpc": "https://goerli.base.org"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/forge-cache/deploy-upgrade.s.sol/84531/run-1698933984.json b/forge-cache/deploy-upgrade.s.sol/84531/run-1698933984.json
new file mode 100644
index 0000000..6b3debb
--- /dev/null
+++ b/forge-cache/deploy-upgrade.s.sol/84531/run-1698933984.json
@@ -0,0 +1,7 @@
+{
+ "transactions": [
+ {
+ "rpc": "https://goerli.base.org"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/forge-cache/deploy-upgrade.s.sol/84531/run-latest.json b/forge-cache/deploy-upgrade.s.sol/84531/run-latest.json
new file mode 100644
index 0000000..6b3debb
--- /dev/null
+++ b/forge-cache/deploy-upgrade.s.sol/84531/run-latest.json
@@ -0,0 +1,7 @@
+{
+ "transactions": [
+ {
+ "rpc": "https://goerli.base.org"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/forge-cache/solidity-files-cache.json b/forge-cache/solidity-files-cache.json
index 9b85118..969c372 100644
--- a/forge-cache/solidity-files-cache.json
+++ b/forge-cache/solidity-files-cache.json
@@ -22,6 +22,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -62,6 +63,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -110,6 +112,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -152,6 +155,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -192,6 +196,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -232,6 +237,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -272,6 +278,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -321,6 +328,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -373,6 +381,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -416,6 +425,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -458,6 +468,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -504,6 +515,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -544,6 +556,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -584,6 +597,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -626,6 +640,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -666,6 +681,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -711,6 +727,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -753,6 +770,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -796,6 +814,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -853,6 +872,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -896,6 +916,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -936,6 +957,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -976,6 +998,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1016,6 +1039,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1058,6 +1082,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1098,6 +1123,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1138,6 +1164,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1185,6 +1212,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1230,6 +1258,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1270,6 +1299,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1310,6 +1340,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1361,6 +1392,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1409,6 +1441,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1451,6 +1484,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1499,6 +1533,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1541,6 +1576,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1583,6 +1619,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1626,6 +1663,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1671,6 +1709,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1715,6 +1754,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1759,6 +1799,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1799,6 +1840,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1841,6 +1883,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1881,6 +1924,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1925,6 +1969,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -1975,6 +2020,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2017,6 +2063,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2057,6 +2104,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2100,6 +2148,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2140,6 +2189,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2180,6 +2230,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2220,6 +2271,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2260,6 +2312,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2300,6 +2353,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2340,6 +2394,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2382,6 +2437,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2425,6 +2481,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2467,6 +2524,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2507,6 +2565,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2547,6 +2606,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2587,6 +2647,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2627,6 +2688,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2667,6 +2729,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2716,6 +2779,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2756,6 +2820,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2800,6 +2865,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2842,6 +2908,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2891,6 +2958,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2933,6 +3001,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -2975,6 +3044,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3018,6 +3088,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3058,6 +3129,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3101,6 +3173,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3143,6 +3216,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3187,6 +3261,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3227,6 +3302,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3267,6 +3343,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3322,6 +3399,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3365,6 +3443,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3408,6 +3487,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3460,6 +3540,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3503,6 +3584,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3556,6 +3638,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3609,6 +3692,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3662,6 +3746,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3715,6 +3800,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3768,6 +3854,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3811,6 +3898,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3854,6 +3942,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3894,6 +3983,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3936,6 +4026,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -3976,6 +4067,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -4016,6 +4108,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -4084,6 +4177,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -4140,6 +4234,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -4184,6 +4279,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -4214,7 +4310,7 @@
}
},
"script/base/create-publisher.s.sol": {
- "lastModificationDate": 1687533127276,
+ "lastModificationDate": 1693465366216,
"contentHash": "66795bf71d6064ceb68bf8b87fcf82ef",
"sourceName": "script/base/create-publisher.s.sol",
"solcConfig": {
@@ -4224,6 +4320,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -4314,7 +4411,7 @@
}
},
"script/base/deploy-ABSuperToken.s.sol": {
- "lastModificationDate": 1689597375820,
+ "lastModificationDate": 1695374870138,
"contentHash": "85ab0e2433f5fdcad0153d0db2dcfd74",
"sourceName": "script/base/deploy-ABSuperToken.s.sol",
"solcConfig": {
@@ -4324,6 +4421,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -4396,8 +4494,8 @@
}
},
"script/base/deploy-implementations.s.sol": {
- "lastModificationDate": 1691479173485,
- "contentHash": "b66690fb869c9bde3ccf6371daedb26d",
+ "lastModificationDate": 1698045674541,
+ "contentHash": "7b91a7e4dd208eed116e3d6df13ec06b",
"sourceName": "script/base/deploy-implementations.s.sol",
"solcConfig": {
"settings": {
@@ -4406,6 +4504,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -4485,19 +4584,20 @@
"src/royalty/IABRoyalty.sol",
"src/token/ERC1155/ERC1155AB.sol",
"src/token/ERC721/ERC721AB.sol",
+ "src/token/ERC721/ERC721ABLE.sol",
"src/utils/IABDataRegistry.sol",
"src/utils/IABVerifier.sol"
],
"versionRequirement": "^0.8.18",
"artifacts": {
"DeployImplementation": {
- "0.8.19+commit.7dd6d404.Darwin.appleclang": "deploy-implementations.s.sol/DeployImplementation.json"
+ "0.8.19+commit.7dd6d404.Darwin.appleclang": "base/deploy-implementations.s.sol/DeployImplementation.json"
}
}
},
"script/base/deploy-platform.s.sol": {
- "lastModificationDate": 1691062918645,
- "contentHash": "bb0b1272e7bc230429fb4c45d19a3631",
+ "lastModificationDate": 1698045674542,
+ "contentHash": "b249659654ea2b392c4629c74cc3f49e",
"sourceName": "script/base/deploy-platform.s.sol",
"solcConfig": {
"settings": {
@@ -4506,6 +4606,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -4597,6 +4698,7 @@
"src/royalty/IABRoyalty.sol",
"src/token/ERC1155/ERC1155AB.sol",
"src/token/ERC721/ERC721AB.sol",
+ "src/token/ERC721/ERC721ABLE.sol",
"src/utils/ABDataRegistry.sol",
"src/utils/ABVerifier.sol",
"src/utils/IABDataRegistry.sol",
@@ -4610,7 +4712,7 @@
}
},
"script/base/deploy-royalty.s.sol": {
- "lastModificationDate": 1689080613542,
+ "lastModificationDate": 1695374870138,
"contentHash": "8f8077a3a079d877814bee151a073325",
"sourceName": "script/base/deploy-royalty.s.sol",
"solcConfig": {
@@ -4620,6 +4722,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -4701,8 +4804,112 @@
}
}
},
+ "script/base/deploy-v1_1.s.sol": {
+ "lastModificationDate": 1699346432137,
+ "contentHash": "04063eb25d5f988bc0b2f3a60fb763b7",
+ "sourceName": "script/base/deploy-v1_1.s.sol",
+ "solcConfig": {
+ "settings": {
+ "optimizer": {
+ "enabled": true,
+ "runs": 200
+ },
+ "metadata": {
+ "useLiteralContent": false,
+ "bytecodeHash": "ipfs",
+ "appendCBOR": true
+ },
+ "outputSelection": {
+ "*": {
+ "": [
+ "ast"
+ ],
+ "*": [
+ "abi",
+ "evm.bytecode",
+ "evm.deployedBytecode",
+ "evm.methodIdentifiers",
+ "metadata"
+ ]
+ }
+ },
+ "evmVersion": "paris",
+ "libraries": {}
+ }
+ },
+ "imports": [
+ "lib/ERC721A-Upgradeable/contracts/ERC721AStorage.sol",
+ "lib/ERC721A-Upgradeable/contracts/ERC721AUpgradeable.sol",
+ "lib/ERC721A-Upgradeable/contracts/ERC721A__Initializable.sol",
+ "lib/ERC721A-Upgradeable/contracts/ERC721A__InitializableStorage.sol",
+ "lib/ERC721A-Upgradeable/contracts/IERC721AUpgradeable.sol",
+ "lib/forge-std/src/Base.sol",
+ "lib/forge-std/src/Script.sol",
+ "lib/forge-std/src/StdChains.sol",
+ "lib/forge-std/src/StdCheats.sol",
+ "lib/forge-std/src/StdJson.sol",
+ "lib/forge-std/src/StdMath.sol",
+ "lib/forge-std/src/StdStorage.sol",
+ "lib/forge-std/src/StdUtils.sol",
+ "lib/forge-std/src/Vm.sol",
+ "lib/forge-std/src/console.sol",
+ "lib/forge-std/src/console2.sol",
+ "lib/forge-std/src/interfaces/IMulticall3.sol",
+ "lib/openzeppelin-contracts/contracts/proxy/Clones.sol",
+ "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol",
+ "lib/openzeppelin-contracts/contracts/token/ERC777/IERC777.sol",
+ "lib/openzeppelin-contracts/contracts/utils/Strings.sol",
+ "lib/openzeppelin-contracts/contracts/utils/math/Math.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/access/IAccessControlUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/ERC1155Upgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/IERC1155ReceiverUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/IERC1155Upgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/extensions/IERC1155MetadataURIUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/StringsUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/IERC165Upgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/math/MathUpgradeable.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/apps/SuperTokenV1Library.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/agreements/IConstantFlowAgreementV1.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/agreements/IInstantDistributionAgreementV1.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/Definitions.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperAgreement.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperApp.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperToken.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperTokenFactory.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperfluid.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperfluidGovernance.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperfluidToken.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/tokens/ERC20WithTokenInfo.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/tokens/TokenInfo.sol",
+ "src/factory/AnotherCloneFactory.sol",
+ "src/libraries/ABDataTypes.sol",
+ "src/libraries/ABErrors.sol",
+ "src/libraries/ABEvents.sol",
+ "src/royalty/ABRoyalty.sol",
+ "src/royalty/IABRoyalty.sol",
+ "src/token/ERC1155/ERC1155AB.sol",
+ "src/token/ERC721/ERC721AB.sol",
+ "src/token/ERC721/ERC721ABLE.sol",
+ "src/token/ERC721/ERC721ABOE.sol",
+ "src/utils/ABDataRegistry.sol",
+ "src/utils/IABDataRegistry.sol",
+ "src/utils/IABVerifier.sol"
+ ],
+ "versionRequirement": "^0.8.18",
+ "artifacts": {
+ "DeployUpgrade": {
+ "0.8.19+commit.7dd6d404.Darwin.appleclang": "deploy-v1_1.s.sol/DeployUpgrade.json"
+ }
+ }
+ },
"script/base-goerli/create-publisher.s.sol": {
- "lastModificationDate": 1691420621216,
+ "lastModificationDate": 1695374870137,
"contentHash": "e2267180499cb7133e1684156d386c07",
"sourceName": "script/base-goerli/create-publisher.s.sol",
"solcConfig": {
@@ -4712,6 +4919,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -4802,7 +5010,7 @@
}
},
"script/base-goerli/deploy-ABSuperToken.s.sol": {
- "lastModificationDate": 1689847774948,
+ "lastModificationDate": 1695374870137,
"contentHash": "85ab0e2433f5fdcad0153d0db2dcfd74",
"sourceName": "script/base-goerli/deploy-ABSuperToken.s.sol",
"solcConfig": {
@@ -4812,6 +5020,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -4884,8 +5093,8 @@
}
},
"script/base-goerli/deploy-implementations.s.sol": {
- "lastModificationDate": 1691479390306,
- "contentHash": "bd3a8040855ba864fb6a06e40d867a3c",
+ "lastModificationDate": 1698045674541,
+ "contentHash": "05dbd9c58bd38f549b31bb572d64d339",
"sourceName": "script/base-goerli/deploy-implementations.s.sol",
"solcConfig": {
"settings": {
@@ -4894,6 +5103,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -4973,19 +5183,20 @@
"src/royalty/IABRoyalty.sol",
"src/token/ERC1155/ERC1155AB.sol",
"src/token/ERC721/ERC721AB.sol",
+ "src/token/ERC721/ERC721ABLE.sol",
"src/utils/IABDataRegistry.sol",
"src/utils/IABVerifier.sol"
],
"versionRequirement": "^0.8.18",
"artifacts": {
"DeployImplementation": {
- "0.8.19+commit.7dd6d404.Darwin.appleclang": "deploy-implementations.s.sol/DeployImplementation.json"
+ "0.8.19+commit.7dd6d404.Darwin.appleclang": "base-goerli/deploy-implementations.s.sol/DeployImplementation.json"
}
}
},
"script/base-goerli/deploy-platform.s.sol": {
- "lastModificationDate": 1691420625921,
- "contentHash": "362038700fdab1493800300d36faf139",
+ "lastModificationDate": 1699351517436,
+ "contentHash": "cbacf930a7cb4bf9d8fb6c6666a246aa",
"sourceName": "script/base-goerli/deploy-platform.s.sol",
"solcConfig": {
"settings": {
@@ -4994,6 +5205,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -5085,6 +5297,8 @@
"src/royalty/IABRoyalty.sol",
"src/token/ERC1155/ERC1155AB.sol",
"src/token/ERC721/ERC721AB.sol",
+ "src/token/ERC721/ERC721ABLE.sol",
+ "src/token/ERC721/ERC721ABOE.sol",
"src/utils/ABDataRegistry.sol",
"src/utils/ABVerifier.sol",
"src/utils/IABDataRegistry.sol",
@@ -5098,7 +5312,7 @@
}
},
"script/base-goerli/deploy-royalty.s.sol": {
- "lastModificationDate": 1689847774949,
+ "lastModificationDate": 1695374870138,
"contentHash": "8f8077a3a079d877814bee151a073325",
"sourceName": "script/base-goerli/deploy-royalty.s.sol",
"solcConfig": {
@@ -5108,6 +5322,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -5189,8 +5404,112 @@
}
}
},
+ "script/base-goerli/deploy-upgrade.s.sol": {
+ "lastModificationDate": 1699258935132,
+ "contentHash": "17ffe38bcdb1a46ab3332f5ba0577919",
+ "sourceName": "script/base-goerli/deploy-upgrade.s.sol",
+ "solcConfig": {
+ "settings": {
+ "optimizer": {
+ "enabled": true,
+ "runs": 200
+ },
+ "metadata": {
+ "useLiteralContent": false,
+ "bytecodeHash": "ipfs",
+ "appendCBOR": true
+ },
+ "outputSelection": {
+ "*": {
+ "": [
+ "ast"
+ ],
+ "*": [
+ "abi",
+ "evm.bytecode",
+ "evm.deployedBytecode",
+ "evm.methodIdentifiers",
+ "metadata"
+ ]
+ }
+ },
+ "evmVersion": "paris",
+ "libraries": {}
+ }
+ },
+ "imports": [
+ "lib/ERC721A-Upgradeable/contracts/ERC721AStorage.sol",
+ "lib/ERC721A-Upgradeable/contracts/ERC721AUpgradeable.sol",
+ "lib/ERC721A-Upgradeable/contracts/ERC721A__Initializable.sol",
+ "lib/ERC721A-Upgradeable/contracts/ERC721A__InitializableStorage.sol",
+ "lib/ERC721A-Upgradeable/contracts/IERC721AUpgradeable.sol",
+ "lib/forge-std/src/Base.sol",
+ "lib/forge-std/src/Script.sol",
+ "lib/forge-std/src/StdChains.sol",
+ "lib/forge-std/src/StdCheats.sol",
+ "lib/forge-std/src/StdJson.sol",
+ "lib/forge-std/src/StdMath.sol",
+ "lib/forge-std/src/StdStorage.sol",
+ "lib/forge-std/src/StdUtils.sol",
+ "lib/forge-std/src/Vm.sol",
+ "lib/forge-std/src/console.sol",
+ "lib/forge-std/src/console2.sol",
+ "lib/forge-std/src/interfaces/IMulticall3.sol",
+ "lib/openzeppelin-contracts/contracts/proxy/Clones.sol",
+ "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol",
+ "lib/openzeppelin-contracts/contracts/token/ERC777/IERC777.sol",
+ "lib/openzeppelin-contracts/contracts/utils/Strings.sol",
+ "lib/openzeppelin-contracts/contracts/utils/math/Math.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/access/IAccessControlUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/ERC1155Upgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/IERC1155ReceiverUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/IERC1155Upgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/extensions/IERC1155MetadataURIUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/StringsUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/IERC165Upgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/math/MathUpgradeable.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/apps/SuperTokenV1Library.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/agreements/IConstantFlowAgreementV1.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/agreements/IInstantDistributionAgreementV1.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/Definitions.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperAgreement.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperApp.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperToken.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperTokenFactory.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperfluid.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperfluidGovernance.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperfluidToken.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/tokens/ERC20WithTokenInfo.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/tokens/TokenInfo.sol",
+ "src/factory/AnotherCloneFactory.sol",
+ "src/libraries/ABDataTypes.sol",
+ "src/libraries/ABErrors.sol",
+ "src/libraries/ABEvents.sol",
+ "src/royalty/ABRoyalty.sol",
+ "src/royalty/IABRoyalty.sol",
+ "src/token/ERC1155/ERC1155AB.sol",
+ "src/token/ERC721/ERC721AB.sol",
+ "src/token/ERC721/ERC721ABLE.sol",
+ "src/token/ERC721/ERC721ABOE.sol",
+ "src/utils/ABDataRegistry.sol",
+ "src/utils/IABDataRegistry.sol",
+ "src/utils/IABVerifier.sol"
+ ],
+ "versionRequirement": "^0.8.18",
+ "artifacts": {
+ "DeployUpgrade": {
+ "0.8.19+commit.7dd6d404.Darwin.appleclang": "deploy-upgrade.s.sol/DeployUpgrade.json"
+ }
+ }
+ },
"script/op/deploy-ABSuperToken.s.sol": {
- "lastModificationDate": 1685104963887,
+ "lastModificationDate": 1693465366217,
"contentHash": "1d056aa991c6d5dfab2d1e455afd5113",
"sourceName": "script/op/deploy-ABSuperToken.s.sol",
"solcConfig": {
@@ -5200,6 +5519,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -5272,8 +5592,8 @@
}
},
"script/op/deploy-platform.s.sol": {
- "lastModificationDate": 1689249568517,
- "contentHash": "bf5977017d6fc6e7fb50592a34bee58d",
+ "lastModificationDate": 1698045674543,
+ "contentHash": "bd1558a2a1b08abdadcab46e1dc68d55",
"sourceName": "script/op/deploy-platform.s.sol",
"solcConfig": {
"settings": {
@@ -5282,6 +5602,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -5373,6 +5694,7 @@
"src/royalty/IABRoyalty.sol",
"src/token/ERC1155/ERC1155AB.sol",
"src/token/ERC721/ERC721AB.sol",
+ "src/token/ERC721/ERC721ABLE.sol",
"src/utils/ABDataRegistry.sol",
"src/utils/ABVerifier.sol",
"src/utils/IABDataRegistry.sol",
@@ -5386,7 +5708,7 @@
}
},
"script/op/deploy-royalty.s.sol": {
- "lastModificationDate": 1688991732243,
+ "lastModificationDate": 1695374870139,
"contentHash": "bb2815d1b7297d11c82eee3952d59434",
"sourceName": "script/op/deploy-royalty.s.sol",
"solcConfig": {
@@ -5396,6 +5718,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -5478,8 +5801,8 @@
}
},
"src/factory/AnotherCloneFactory.sol": {
- "lastModificationDate": 1691161016156,
- "contentHash": "19bd4bec59b487a82156b5506ac19fe8",
+ "lastModificationDate": 1698932348920,
+ "contentHash": "b370aa7ef541079cc15fe35e58d87c2e",
"sourceName": "src/factory/AnotherCloneFactory.sol",
"solcConfig": {
"settings": {
@@ -5488,6 +5811,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -5565,7 +5889,7 @@
}
},
"src/libraries/ABDataTypes.sol": {
- "lastModificationDate": 1689942031383,
+ "lastModificationDate": 1695374870140,
"contentHash": "1fb8a463a53cb3f46035daf65d058bd8",
"sourceName": "src/libraries/ABDataTypes.sol",
"solcConfig": {
@@ -5575,6 +5899,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -5605,8 +5930,8 @@
}
},
"src/libraries/ABErrors.sol": {
- "lastModificationDate": 1689941612251,
- "contentHash": "6182110616230ba2872975119c9c13ff",
+ "lastModificationDate": 1699259015359,
+ "contentHash": "a830557b02dcd7a590b70f262663f586",
"sourceName": "src/libraries/ABErrors.sol",
"solcConfig": {
"settings": {
@@ -5615,6 +5940,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -5645,7 +5971,7 @@
}
},
"src/libraries/ABEvents.sol": {
- "lastModificationDate": 1690966702420,
+ "lastModificationDate": 1698653960245,
"contentHash": "fd828f54bf1543d5aafa603c67c38bda",
"sourceName": "src/libraries/ABEvents.sol",
"solcConfig": {
@@ -5655,6 +5981,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -5685,7 +6012,7 @@
}
},
"src/royalty/ABRoyalty.sol": {
- "lastModificationDate": 1690358295665,
+ "lastModificationDate": 1695374870141,
"contentHash": "b245d965a64ac207654b99c35b633852",
"sourceName": "src/royalty/ABRoyalty.sol",
"solcConfig": {
@@ -5695,6 +6022,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -5753,7 +6081,7 @@
}
},
"src/royalty/IABRoyalty.sol": {
- "lastModificationDate": 1689945711053,
+ "lastModificationDate": 1695374870141,
"contentHash": "0f8ece50d5fa6fa360a39af9be68a08a",
"sourceName": "src/royalty/IABRoyalty.sol",
"solcConfig": {
@@ -5763,6 +6091,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -5793,8 +6122,8 @@
}
},
"src/token/ERC1155/ERC1155AB.sol": {
- "lastModificationDate": 1691162551904,
- "contentHash": "866228a3aa35e59c4026fe0d27ab21a6",
+ "lastModificationDate": 1698045674543,
+ "contentHash": "1452971d484276b84b000f29153aaca4",
"sourceName": "src/token/ERC1155/ERC1155AB.sol",
"solcConfig": {
"settings": {
@@ -5803,6 +6132,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -5850,8 +6180,8 @@
}
},
"src/token/ERC721/ERC721AB.sol": {
- "lastModificationDate": 1691161159888,
- "contentHash": "59541c35d3ba197d9a9c9b721c1191f2",
+ "lastModificationDate": 1699349155791,
+ "contentHash": "17d03817fde02f2207eb384b9a9d4244",
"sourceName": "src/token/ERC721/ERC721AB.sol",
"solcConfig": {
"settings": {
@@ -5860,6 +6190,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -5907,9 +6238,129 @@
}
}
},
+ "src/token/ERC721/ERC721ABLE.sol": {
+ "lastModificationDate": 1699349138016,
+ "contentHash": "8a218f9e4a907b72e13264a421178cad",
+ "sourceName": "src/token/ERC721/ERC721ABLE.sol",
+ "solcConfig": {
+ "settings": {
+ "optimizer": {
+ "enabled": true,
+ "runs": 200
+ },
+ "metadata": {
+ "useLiteralContent": false,
+ "bytecodeHash": "ipfs",
+ "appendCBOR": true
+ },
+ "outputSelection": {
+ "*": {
+ "": [
+ "ast"
+ ],
+ "*": [
+ "abi",
+ "evm.bytecode",
+ "evm.deployedBytecode",
+ "evm.methodIdentifiers",
+ "metadata"
+ ]
+ }
+ },
+ "evmVersion": "paris",
+ "libraries": {}
+ }
+ },
+ "imports": [
+ "lib/ERC721A-Upgradeable/contracts/ERC721AStorage.sol",
+ "lib/ERC721A-Upgradeable/contracts/ERC721AUpgradeable.sol",
+ "lib/ERC721A-Upgradeable/contracts/ERC721A__Initializable.sol",
+ "lib/ERC721A-Upgradeable/contracts/ERC721A__InitializableStorage.sol",
+ "lib/ERC721A-Upgradeable/contracts/IERC721AUpgradeable.sol",
+ "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol",
+ "lib/openzeppelin-contracts/contracts/utils/Strings.sol",
+ "lib/openzeppelin-contracts/contracts/utils/math/Math.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol",
+ "src/libraries/ABDataTypes.sol",
+ "src/libraries/ABErrors.sol",
+ "src/libraries/ABEvents.sol",
+ "src/token/ERC721/ERC721AB.sol",
+ "src/utils/IABDataRegistry.sol",
+ "src/utils/IABVerifier.sol"
+ ],
+ "versionRequirement": "^0.8.18",
+ "artifacts": {
+ "ERC721ABLE": {
+ "0.8.19+commit.7dd6d404.Darwin.appleclang": "ERC721ABLE.sol/ERC721ABLE.json"
+ }
+ }
+ },
+ "src/token/ERC721/ERC721ABOE.sol": {
+ "lastModificationDate": 1699349152220,
+ "contentHash": "2e939a79a96748e57db51583a275929f",
+ "sourceName": "src/token/ERC721/ERC721ABOE.sol",
+ "solcConfig": {
+ "settings": {
+ "optimizer": {
+ "enabled": true,
+ "runs": 200
+ },
+ "metadata": {
+ "useLiteralContent": false,
+ "bytecodeHash": "ipfs",
+ "appendCBOR": true
+ },
+ "outputSelection": {
+ "*": {
+ "": [
+ "ast"
+ ],
+ "*": [
+ "abi",
+ "evm.bytecode",
+ "evm.deployedBytecode",
+ "evm.methodIdentifiers",
+ "metadata"
+ ]
+ }
+ },
+ "evmVersion": "paris",
+ "libraries": {}
+ }
+ },
+ "imports": [
+ "lib/ERC721A-Upgradeable/contracts/ERC721AStorage.sol",
+ "lib/ERC721A-Upgradeable/contracts/ERC721AUpgradeable.sol",
+ "lib/ERC721A-Upgradeable/contracts/ERC721A__Initializable.sol",
+ "lib/ERC721A-Upgradeable/contracts/ERC721A__InitializableStorage.sol",
+ "lib/ERC721A-Upgradeable/contracts/IERC721AUpgradeable.sol",
+ "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol",
+ "lib/openzeppelin-contracts/contracts/utils/Strings.sol",
+ "lib/openzeppelin-contracts/contracts/utils/math/Math.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol",
+ "src/libraries/ABDataTypes.sol",
+ "src/libraries/ABErrors.sol",
+ "src/libraries/ABEvents.sol",
+ "src/token/ERC721/ERC721AB.sol",
+ "src/utils/IABDataRegistry.sol",
+ "src/utils/IABVerifier.sol"
+ ],
+ "versionRequirement": "^0.8.18",
+ "artifacts": {
+ "ERC721ABOE": {
+ "0.8.19+commit.7dd6d404.Darwin.appleclang": "ERC721ABOE.sol/ERC721ABOE.json"
+ }
+ }
+ },
"src/utils/ABDataRegistry.sol": {
- "lastModificationDate": 1690966709602,
- "contentHash": "b98398aab09b7ace084cab48697e404c",
+ "lastModificationDate": 1698656722561,
+ "contentHash": "01daae19991c3d298a84da11cea6a548",
"sourceName": "src/utils/ABDataRegistry.sol",
"solcConfig": {
"settings": {
@@ -5918,6 +6369,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -5963,7 +6415,7 @@
}
},
"src/utils/ABVerifier.sol": {
- "lastModificationDate": 1689948318640,
+ "lastModificationDate": 1698654153571,
"contentHash": "65412e9bc6f0764bc78b283d2e1af36c",
"sourceName": "src/utils/ABVerifier.sol",
"solcConfig": {
@@ -5973,6 +6425,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -6018,8 +6471,8 @@
}
},
"src/utils/IABDataRegistry.sol": {
- "lastModificationDate": 1689948536040,
- "contentHash": "77e916c3a170f7877ca9b70ec1307191",
+ "lastModificationDate": 1698045674545,
+ "contentHash": "072410114586180b67b3b28e70466677",
"sourceName": "src/utils/IABDataRegistry.sol",
"solcConfig": {
"settings": {
@@ -6028,6 +6481,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -6058,7 +6512,7 @@
}
},
"src/utils/IABVerifier.sol": {
- "lastModificationDate": 1689948314191,
+ "lastModificationDate": 1698654153571,
"contentHash": "4fbc1efff48937c20859fb673ba4ff0a",
"sourceName": "src/utils/IABVerifier.sol",
"solcConfig": {
@@ -6068,6 +6522,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -6098,7 +6553,7 @@
}
},
"test/_mocks/ABSuperToken.sol": {
- "lastModificationDate": 1689595715692,
+ "lastModificationDate": 1695374870143,
"contentHash": "e3ae917be85f9c4b702856168287dc50",
"sourceName": "test/_mocks/ABSuperToken.sol",
"solcConfig": {
@@ -6108,6 +6563,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -6167,7 +6623,7 @@
}
},
"test/_mocks/MockNFT.sol": {
- "lastModificationDate": 1684750159507,
+ "lastModificationDate": 1693465366219,
"contentHash": "46e23044e7157f33ccba3b4e3c835c2a",
"sourceName": "test/_mocks/MockNFT.sol",
"solcConfig": {
@@ -6177,6 +6633,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -6218,7 +6675,7 @@
}
},
"test/_mocks/MockNFT1155.sol": {
- "lastModificationDate": 1684750159507,
+ "lastModificationDate": 1693465366220,
"contentHash": "f2a125a3dfdfd7723da9119b3256488d",
"sourceName": "test/_mocks/MockNFT1155.sol",
"solcConfig": {
@@ -6228,6 +6685,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -6267,7 +6725,7 @@
}
},
"test/_mocks/MockToken.sol": {
- "lastModificationDate": 1687533127279,
+ "lastModificationDate": 1693465366220,
"contentHash": "76f897607ba873482fa32a4ffa54661b",
"sourceName": "test/_mocks/MockToken.sol",
"solcConfig": {
@@ -6277,6 +6735,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -6312,7 +6771,7 @@
}
},
"test/_testdata/ABRoyalty.td.sol": {
- "lastModificationDate": 1689681102233,
+ "lastModificationDate": 1695374870143,
"contentHash": "5c33f38ecb1bb6df367bbb9a27b1e70d",
"sourceName": "test/_testdata/ABRoyalty.td.sol",
"solcConfig": {
@@ -6322,6 +6781,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -6352,7 +6812,7 @@
}
},
"test/_testdata/ABVerifier.td.sol": {
- "lastModificationDate": 1684750159507,
+ "lastModificationDate": 1693465366220,
"contentHash": "bbc9cfbadf55c2bba8535e2f112b0cd4",
"sourceName": "test/_testdata/ABVerifier.td.sol",
"solcConfig": {
@@ -6362,6 +6822,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -6392,7 +6853,7 @@
}
},
"test/_testdata/AnotherCloneFactory.td.sol": {
- "lastModificationDate": 1689681108087,
+ "lastModificationDate": 1695374870144,
"contentHash": "e8260c770956ee743d56367a16870e5a",
"sourceName": "test/_testdata/AnotherCloneFactory.td.sol",
"solcConfig": {
@@ -6402,6 +6863,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -6432,7 +6894,7 @@
}
},
"test/_testdata/ERC1155AB.td.sol": {
- "lastModificationDate": 1689681613537,
+ "lastModificationDate": 1695374870144,
"contentHash": "23ad035185459b78fc89b380a079b389",
"sourceName": "test/_testdata/ERC1155AB.td.sol",
"solcConfig": {
@@ -6442,6 +6904,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -6471,10 +6934,10 @@
}
}
},
- "test/_testdata/ERC721AB.td.sol": {
- "lastModificationDate": 1689681114633,
- "contentHash": "c39be0c899a171fd25c6db423146b6f7",
- "sourceName": "test/_testdata/ERC721AB.td.sol",
+ "test/_testdata/ERC721ABLE.td.sol": {
+ "lastModificationDate": 1698045674546,
+ "contentHash": "18e471e2024322ed2364a9b96590a5d4",
+ "sourceName": "test/_testdata/ERC721ABLE.td.sol",
"solcConfig": {
"settings": {
"optimizer": {
@@ -6482,6 +6945,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -6507,13 +6971,54 @@
"versionRequirement": "^0.8.18",
"artifacts": {
"ERC721ABTestData": {
- "0.8.19+commit.7dd6d404.Darwin.appleclang": "ERC721AB.td.sol/ERC721ABTestData.json"
+ "0.8.19+commit.7dd6d404.Darwin.appleclang": "ERC721ABLE.td.sol/ERC721ABTestData.json"
+ }
+ }
+ },
+ "test/_testdata/ERC721ABOE.td.sol": {
+ "lastModificationDate": 1698653960247,
+ "contentHash": "0788ecee578ed53f129ab21f714a4788",
+ "sourceName": "test/_testdata/ERC721ABOE.td.sol",
+ "solcConfig": {
+ "settings": {
+ "optimizer": {
+ "enabled": true,
+ "runs": 200
+ },
+ "metadata": {
+ "useLiteralContent": false,
+ "bytecodeHash": "ipfs",
+ "appendCBOR": true
+ },
+ "outputSelection": {
+ "*": {
+ "": [
+ "ast"
+ ],
+ "*": [
+ "abi",
+ "evm.bytecode",
+ "evm.deployedBytecode",
+ "evm.methodIdentifiers",
+ "metadata"
+ ]
+ }
+ },
+ "evmVersion": "paris",
+ "libraries": {}
+ }
+ },
+ "imports": [],
+ "versionRequirement": "^0.8.18",
+ "artifacts": {
+ "ERC721ABOETestData": {
+ "0.8.19+commit.7dd6d404.Darwin.appleclang": "ERC721ABOE.td.sol/ERC721ABOETestData.json"
}
}
},
"test/factory/AnotherCloneFactory.t.sol": {
- "lastModificationDate": 1691161197755,
- "contentHash": "0cd9ba923e6d9d827dd0977c6bede06a",
+ "lastModificationDate": 1698933866742,
+ "contentHash": "231bdc9a61da91b7c17310ca391a1f50",
"sourceName": "test/factory/AnotherCloneFactory.t.sol",
"solcConfig": {
"settings": {
@@ -6522,6 +7027,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -6618,6 +7124,8 @@
"src/royalty/IABRoyalty.sol",
"src/token/ERC1155/ERC1155AB.sol",
"src/token/ERC721/ERC721AB.sol",
+ "src/token/ERC721/ERC721ABLE.sol",
+ "src/token/ERC721/ERC721ABOE.sol",
"src/utils/ABDataRegistry.sol",
"src/utils/ABVerifier.sol",
"src/utils/IABDataRegistry.sol",
@@ -6632,8 +7140,8 @@
}
},
"test/royalty/ABRoyalty.t.sol": {
- "lastModificationDate": 1691396829052,
- "contentHash": "d9dcf566dbcca70b46b0fb565e521a02",
+ "lastModificationDate": 1698045674547,
+ "contentHash": "1709c4b58e65fec2eb5d4f2a98d2dab4",
"sourceName": "test/royalty/ABRoyalty.t.sol",
"solcConfig": {
"settings": {
@@ -6642,6 +7150,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -6753,6 +7262,7 @@
"src/royalty/IABRoyalty.sol",
"src/token/ERC1155/ERC1155AB.sol",
"src/token/ERC721/ERC721AB.sol",
+ "src/token/ERC721/ERC721ABLE.sol",
"src/utils/ABDataRegistry.sol",
"src/utils/ABVerifier.sol",
"src/utils/IABDataRegistry.sol",
@@ -6768,8 +7278,8 @@
}
},
"test/token/ERC1155/ERC1155AB.t.sol": {
- "lastModificationDate": 1691162671739,
- "contentHash": "43ec890988ab59aba76d4911d7a22215",
+ "lastModificationDate": 1698045674548,
+ "contentHash": "7e601132d94c61b0b8aea76a591768ba",
"sourceName": "test/token/ERC1155/ERC1155AB.t.sol",
"solcConfig": {
"settings": {
@@ -6778,6 +7288,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -6896,6 +7407,7 @@
"src/royalty/IABRoyalty.sol",
"src/token/ERC1155/ERC1155AB.sol",
"src/token/ERC721/ERC721AB.sol",
+ "src/token/ERC721/ERC721ABLE.sol",
"src/utils/ABDataRegistry.sol",
"src/utils/ABVerifier.sol",
"src/utils/IABDataRegistry.sol",
@@ -6911,10 +7423,10 @@
}
}
},
- "test/token/ERC721/ERC721AB.t.sol": {
- "lastModificationDate": 1691161403285,
- "contentHash": "c5b5c1369f1b15c64d4e17df4ae9e332",
- "sourceName": "test/token/ERC721/ERC721AB.t.sol",
+ "test/token/ERC721/ERC721ABLE.t.sol": {
+ "lastModificationDate": 1698045674548,
+ "contentHash": "c3871a4701ce436512f1844c328b512f",
+ "sourceName": "test/token/ERC721/ERC721ABLE.t.sol",
"solcConfig": {
"settings": {
"optimizer": {
@@ -6922,6 +7434,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -7035,24 +7548,166 @@
"src/royalty/IABRoyalty.sol",
"src/token/ERC1155/ERC1155AB.sol",
"src/token/ERC721/ERC721AB.sol",
+ "src/token/ERC721/ERC721ABLE.sol",
"src/utils/ABDataRegistry.sol",
"src/utils/ABVerifier.sol",
"src/utils/IABDataRegistry.sol",
"src/utils/IABVerifier.sol",
"test/_mocks/ABSuperToken.sol",
"test/_mocks/MockToken.sol",
- "test/_testdata/ERC721AB.td.sol"
+ "test/_testdata/ERC721ABLE.td.sol"
],
"versionRequirement": "^0.8.18",
"artifacts": {
"ERC721ABTest": {
- "0.8.19+commit.7dd6d404.Darwin.appleclang": "ERC721AB.t.sol/ERC721ABTest.json"
+ "0.8.19+commit.7dd6d404.Darwin.appleclang": "ERC721ABLE.t.sol/ERC721ABTest.json"
+ }
+ }
+ },
+ "test/token/ERC721/ERC721ABOE.t.sol": {
+ "lastModificationDate": 1699258924774,
+ "contentHash": "a7b541a46d9274042a34a4f4a02dbbde",
+ "sourceName": "test/token/ERC721/ERC721ABOE.t.sol",
+ "solcConfig": {
+ "settings": {
+ "optimizer": {
+ "enabled": true,
+ "runs": 200
+ },
+ "metadata": {
+ "useLiteralContent": false,
+ "bytecodeHash": "ipfs",
+ "appendCBOR": true
+ },
+ "outputSelection": {
+ "*": {
+ "": [
+ "ast"
+ ],
+ "*": [
+ "abi",
+ "evm.bytecode",
+ "evm.deployedBytecode",
+ "evm.methodIdentifiers",
+ "metadata"
+ ]
+ }
+ },
+ "evmVersion": "paris",
+ "libraries": {}
+ }
+ },
+ "imports": [
+ "lib/ERC721A-Upgradeable/contracts/ERC721AStorage.sol",
+ "lib/ERC721A-Upgradeable/contracts/ERC721AUpgradeable.sol",
+ "lib/ERC721A-Upgradeable/contracts/ERC721A__Initializable.sol",
+ "lib/ERC721A-Upgradeable/contracts/ERC721A__InitializableStorage.sol",
+ "lib/ERC721A-Upgradeable/contracts/IERC721AUpgradeable.sol",
+ "lib/forge-std/lib/ds-test/src/test.sol",
+ "lib/forge-std/src/Base.sol",
+ "lib/forge-std/src/StdAssertions.sol",
+ "lib/forge-std/src/StdChains.sol",
+ "lib/forge-std/src/StdCheats.sol",
+ "lib/forge-std/src/StdError.sol",
+ "lib/forge-std/src/StdInvariant.sol",
+ "lib/forge-std/src/StdJson.sol",
+ "lib/forge-std/src/StdMath.sol",
+ "lib/forge-std/src/StdStorage.sol",
+ "lib/forge-std/src/StdStyle.sol",
+ "lib/forge-std/src/StdUtils.sol",
+ "lib/forge-std/src/Test.sol",
+ "lib/forge-std/src/Vm.sol",
+ "lib/forge-std/src/console.sol",
+ "lib/forge-std/src/console2.sol",
+ "lib/forge-std/src/interfaces/IMulticall3.sol",
+ "lib/openzeppelin-contracts/contracts/access/Ownable.sol",
+ "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol",
+ "lib/openzeppelin-contracts/contracts/proxy/Clones.sol",
+ "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol",
+ "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol",
+ "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol",
+ "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol",
+ "lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol",
+ "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol",
+ "lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol",
+ "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol",
+ "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol",
+ "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol",
+ "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol",
+ "lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol",
+ "lib/openzeppelin-contracts/contracts/token/ERC777/IERC777.sol",
+ "lib/openzeppelin-contracts/contracts/token/ERC777/IERC777Recipient.sol",
+ "lib/openzeppelin-contracts/contracts/token/ERC777/IERC777Sender.sol",
+ "lib/openzeppelin-contracts/contracts/utils/Address.sol",
+ "lib/openzeppelin-contracts/contracts/utils/Context.sol",
+ "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol",
+ "lib/openzeppelin-contracts/contracts/utils/Strings.sol",
+ "lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol",
+ "lib/openzeppelin-contracts/contracts/utils/introspection/IERC1820Registry.sol",
+ "lib/openzeppelin-contracts/contracts/utils/math/Math.sol",
+ "lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol",
+ "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/access/IAccessControlUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/ERC1155Upgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/IERC1155ReceiverUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/IERC1155Upgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/extensions/IERC1155MetadataURIUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/StringsUpgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/IERC165Upgradeable.sol",
+ "lib/openzeppelin-contracts-upgradeable/contracts/utils/math/MathUpgradeable.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/apps/SuperTokenV1Library.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/agreements/IConstantFlowAgreementV1.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/agreements/IInstantDistributionAgreementV1.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/Definitions.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperAgreement.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperApp.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperToken.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperTokenFactory.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperfluid.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperfluidGovernance.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperfluidToken.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/tokens/ERC20WithTokenInfo.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/interfaces/tokens/TokenInfo.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/libs/ERC777Helper.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/libs/EventsEmitter.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/libs/FixedSizeData.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/superfluid/SuperToken.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/superfluid/SuperfluidToken.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/upgradability/UUPSProxiable.sol",
+ "lib/protocol-monorepo/packages/ethereum-contracts/contracts/upgradability/UUPSUtils.sol",
+ "src/factory/AnotherCloneFactory.sol",
+ "src/libraries/ABDataTypes.sol",
+ "src/libraries/ABErrors.sol",
+ "src/libraries/ABEvents.sol",
+ "src/royalty/ABRoyalty.sol",
+ "src/royalty/IABRoyalty.sol",
+ "src/token/ERC1155/ERC1155AB.sol",
+ "src/token/ERC721/ERC721AB.sol",
+ "src/token/ERC721/ERC721ABOE.sol",
+ "src/utils/ABDataRegistry.sol",
+ "src/utils/ABVerifier.sol",
+ "src/utils/IABDataRegistry.sol",
+ "src/utils/IABVerifier.sol",
+ "test/_mocks/ABSuperToken.sol",
+ "test/_mocks/MockToken.sol",
+ "test/_testdata/ERC721ABOE.td.sol"
+ ],
+ "versionRequirement": "^0.8.18",
+ "artifacts": {
+ "ERC721ABOETest": {
+ "0.8.19+commit.7dd6d404.Darwin.appleclang": "ERC721ABOE.t.sol/ERC721ABOETest.json"
}
}
},
"test/utils/ABDataRegistry.t.sol": {
- "lastModificationDate": 1690364495334,
- "contentHash": "b11a60b7b176b82ce0b6f935f79a7d1f",
+ "lastModificationDate": 1698763838746,
+ "contentHash": "c5537f68bf6c3c9c871bbde7e9d6c952",
"sourceName": "test/utils/ABDataRegistry.t.sol",
"solcConfig": {
"settings": {
@@ -7061,6 +7716,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
@@ -7167,8 +7823,8 @@
}
},
"test/utils/ABVerifier.t.sol": {
- "lastModificationDate": 1690277038555,
- "contentHash": "cf028e2861199c5b945ef2e0e1e81444",
+ "lastModificationDate": 1698045674549,
+ "contentHash": "9c9577365435fdbc47bbf215a8914342",
"sourceName": "test/utils/ABVerifier.t.sol",
"solcConfig": {
"settings": {
@@ -7177,6 +7833,7 @@
"runs": 200
},
"metadata": {
+ "useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
diff --git a/foundry.toml b/foundry.toml
index e9efac0..f5f2839 100644
--- a/foundry.toml
+++ b/foundry.toml
@@ -22,7 +22,7 @@ base-goerli = { key = "${ETHERSCAN_API_KEY}", chain = 84531, url = "https://api-
base = { key = "${BASE_ETHERSCAN_API_KEY}", chain = 8453, url = "https://api.basescan.org/api" }
[fuzz]
-seed = 10
+seed = "0x3130"
# See more config options https://github.com/foundry-rs/foundry/tree/master/config
diff --git a/lcov.info b/lcov.info
index b5a3fb6..924951b 100644
--- a/lcov.info
+++ b/lcov.info
@@ -32,37 +32,55 @@ BRF:0
BRH:0
end_of_record
TN:
+SF:script/base-goerli/deploy-implementations.s.sol
+FN:19,DeployImplementation.run
+FNDA:0,DeployImplementation.run
+DA:21,0
+DA:24,0
+DA:27,0
+DA:28,0
+DA:31,0
+DA:32,0
+DA:34,0
+FNF:1
+FNH:0
+LF:7
+LH:0
+BRF:0
+BRH:0
+end_of_record
+TN:
SF:script/base-goerli/deploy-platform.s.sol
-FN:33,DeployPlatform.run
+FN:35,DeployPlatform.run
FNDA:0,DeployPlatform.run
-DA:35,0
-DA:36,0
+DA:37,0
DA:39,0
DA:42,0
-DA:43,0
-DA:44,0
+DA:45,0
+DA:46,0
DA:47,0
-DA:57,0
-DA:62,0
-BRDA:62,0,0,-
-BRDA:62,0,1,-
-DA:63,0
-DA:67,0
-DA:72,0
-BRDA:72,1,0,-
-BRDA:72,1,1,-
-DA:73,0
-DA:77,0
-DA:88,0
-BRDA:88,2,0,-
-BRDA:88,2,1,-
-DA:89,0
+DA:50,0
+DA:60,0
+DA:65,0
+BRDA:65,0,0,-
+BRDA:65,0,1,-
+DA:66,0
+DA:70,0
+DA:75,0
+BRDA:75,1,0,-
+BRDA:75,1,1,-
+DA:76,0
+DA:80,0
+DA:91,0
+BRDA:91,2,0,-
+BRDA:91,2,1,-
DA:92,0
-DA:97,0
-DA:99,0
-FN:102,DeployPlatform._writeAddressToFile
+DA:95,0
+DA:100,0
+DA:102,0
+FN:105,DeployPlatform._writeAddressToFile
FNDA:0,DeployPlatform._writeAddressToFile
-DA:103,0
+DA:106,0
FNF:2
FNH:0
LF:20
@@ -121,40 +139,57 @@ BRF:0
BRH:0
end_of_record
TN:
+SF:script/base/deploy-implementations.s.sol
+FN:20,DeployImplementation.run
+FNDA:0,DeployImplementation.run
+DA:22,0
+DA:25,0
+DA:28,0
+DA:29,0
+DA:32,0
+DA:33,0
+DA:35,0
+FNF:1
+FNH:0
+LF:7
+LH:0
+BRF:0
+BRH:0
+end_of_record
+TN:
SF:script/base/deploy-platform.s.sol
-FN:35,DeployPlatform.run
+FN:37,DeployPlatform.run
FNDA:0,DeployPlatform.run
-DA:37,0
-DA:38,0
-DA:41,0
-DA:44,0
+DA:39,0
+DA:42,0
DA:45,0
DA:46,0
-DA:49,0
-DA:59,0
-DA:64,0
-BRDA:64,0,0,-
-BRDA:64,0,1,-
-DA:65,0
-DA:69,0
-DA:74,0
-BRDA:74,1,0,-
-BRDA:74,1,1,-
-DA:75,0
-DA:79,0
-DA:90,0
-BRDA:90,2,0,-
-BRDA:90,2,1,-
-DA:91,0
-DA:94,0
-DA:99,0
+DA:47,0
+DA:50,0
+DA:61,0
+DA:66,0
+BRDA:66,0,0,-
+BRDA:66,0,1,-
+DA:67,0
+DA:71,0
+DA:76,0
+BRDA:76,1,0,-
+BRDA:76,1,1,-
+DA:77,0
+DA:81,0
+DA:92,0
+BRDA:92,2,0,-
+BRDA:92,2,1,-
+DA:93,0
+DA:96,0
DA:101,0
-FN:104,DeployPlatform._writeAddressToFile
-FNDA:0,DeployPlatform._writeAddressToFile
DA:105,0
+FN:108,DeployPlatform._writeAddressToFile
+FNDA:0,DeployPlatform._writeAddressToFile
+DA:109,0
FNF:2
FNH:0
-LF:20
+LF:19
LH:0
BRF:6
BRH:0
@@ -249,694 +284,704 @@ BRH:0
end_of_record
TN:
SF:src/factory/AnotherCloneFactory.sol
-FN:112,AnotherCloneFactory.initialize
-FNDA:2,AnotherCloneFactory.initialize
-DA:119,1
-DA:120,1
-DA:121,1
-DA:122,1
-DA:123,1
-DA:126,1
-DA:127,1
-FN:144,AnotherCloneFactory.createCollection721
-FNDA:768,AnotherCloneFactory.createCollection721
-DA:146,512
-DA:149,512
-DA:152,512
-FN:162,AnotherCloneFactory.createCollection1155
-FNDA:768,AnotherCloneFactory.createCollection1155
-DA:164,512
-DA:167,512
-DA:170,512
-FN:190,AnotherCloneFactory.createCollection721FromImplementation
-FNDA:768,AnotherCloneFactory.createCollection721FromImplementation
-DA:196,512
-BRDA:196,0,0,256
-BRDA:196,0,1,256
-DA:199,256
-DA:202,256
-DA:205,256
-FN:217,AnotherCloneFactory.createPublisherProfile
-FNDA:1023,AnotherCloneFactory.createPublisherProfile
-DA:222,768
-BRDA:222,1,0,256
-BRDA:222,1,1,512
-DA:225,512
-BRDA:225,2,0,256
-BRDA:225,2,1,256
-DA:228,256
-DA:231,256
-FN:242,AnotherCloneFactory.createPublisherProfile
-FNDA:3328,AnotherCloneFactory.createPublisherProfile
-DA:244,3072
-BRDA:244,3,0,256
-BRDA:244,3,1,2816
-DA:247,2816
-BRDA:247,4,0,256
-BRDA:247,4,1,2560
-DA:250,2560
-DA:253,2560
-DA:256,2560
-DA:259,2560
-FN:269,AnotherCloneFactory.revokePublisherAccess
-FNDA:512,AnotherCloneFactory.revokePublisherAccess
-DA:271,256
-FN:281,AnotherCloneFactory.setERC721Implementation
-FNDA:257,AnotherCloneFactory.setERC721Implementation
-DA:282,1
-FN:292,AnotherCloneFactory.setERC1155Implementation
-FNDA:257,AnotherCloneFactory.setERC1155Implementation
-DA:293,1
-FN:303,AnotherCloneFactory.setABRoyaltyImplementation
-FNDA:257,AnotherCloneFactory.setABRoyaltyImplementation
-DA:304,1
-FN:321,AnotherCloneFactory.predictERC721Address
-FNDA:256,AnotherCloneFactory.predictERC721Address
-DA:322,256
-FN:333,AnotherCloneFactory.predictERC1155Address
-FNDA:256,AnotherCloneFactory.predictERC1155Address
-DA:334,256
-FN:345,AnotherCloneFactory.hasPublisherRole
-FNDA:512,AnotherCloneFactory.hasPublisherRole
-DA:346,512
-FN:354,AnotherCloneFactory._setupCollection
-FNDA:1280,AnotherCloneFactory._setupCollection
-DA:356,1280
-DA:359,1280
-DA:362,1280
+FN:115,AnotherCloneFactory.initialize
+FNDA:0,AnotherCloneFactory.initialize
+DA:122,0
+DA:123,0
+DA:124,0
+DA:125,0
+DA:126,0
+DA:128,0
+DA:131,0
+DA:132,0
+FN:149,AnotherCloneFactory.createCollection721
+FNDA:0,AnotherCloneFactory.createCollection721
+DA:151,0
+DA:154,0
+DA:157,0
+FN:167,AnotherCloneFactory.createCollection1155
+FNDA:0,AnotherCloneFactory.createCollection1155
+DA:169,0
+DA:172,0
+DA:175,0
+FN:195,AnotherCloneFactory.createCollection721FromImplementation
+FNDA:0,AnotherCloneFactory.createCollection721FromImplementation
+DA:201,0
+BRDA:201,0,0,-
+BRDA:201,0,1,-
+DA:204,0
+DA:207,0
+DA:210,0
+FN:222,AnotherCloneFactory.createPublisherProfile
+FNDA:0,AnotherCloneFactory.createPublisherProfile
+DA:227,0
+BRDA:227,1,0,-
+BRDA:227,1,1,-
+DA:230,0
+BRDA:230,2,0,-
+BRDA:230,2,1,-
+DA:233,0
+DA:236,0
+FN:247,AnotherCloneFactory.createPublisherProfile
+FNDA:0,AnotherCloneFactory.createPublisherProfile
+DA:249,0
+BRDA:249,3,0,-
+BRDA:249,3,1,-
+DA:252,0
+BRDA:252,4,0,-
+BRDA:252,4,1,-
+DA:255,0
+DA:258,0
+DA:261,0
+DA:264,0
+FN:274,AnotherCloneFactory.revokePublisherAccess
+FNDA:0,AnotherCloneFactory.revokePublisherAccess
+DA:276,0
+FN:286,AnotherCloneFactory.setERC721Implementation
+FNDA:0,AnotherCloneFactory.setERC721Implementation
+DA:287,0
+FN:297,AnotherCloneFactory.setERC1155Implementation
+FNDA:0,AnotherCloneFactory.setERC1155Implementation
+DA:298,0
+FN:308,AnotherCloneFactory.setABRoyaltyImplementation
+FNDA:0,AnotherCloneFactory.setABRoyaltyImplementation
+DA:309,0
+FN:326,AnotherCloneFactory.predictERC721Address
+FNDA:0,AnotherCloneFactory.predictERC721Address
+DA:327,0
+FN:338,AnotherCloneFactory.predictERC1155Address
+FNDA:0,AnotherCloneFactory.predictERC1155Address
+DA:339,0
+FN:350,AnotherCloneFactory.hasPublisherRole
+FNDA:0,AnotherCloneFactory.hasPublisherRole
+DA:351,0
+FN:359,AnotherCloneFactory._setupCollection
+FNDA:0,AnotherCloneFactory._setupCollection
+DA:361,0
+DA:364,0
+DA:367,0
+DA:370,0
FNF:14
-FNH:14
-LF:37
-LH:37
+FNH:0
+LF:39
+LH:0
BRF:10
-BRH:10
+BRH:0
end_of_record
TN:
SF:src/royalty/ABRoyalty.sol
FN:105,ABRoyalty.initialize
-FNDA:2562,ABRoyalty.initialize
-DA:107,2561
-DA:108,2561
-DA:109,2561
-DA:110,2561
-DA:113,2561
+FNDA:0,ABRoyalty.initialize
+DA:107,0
+DA:108,0
+DA:109,0
+DA:110,0
+DA:113,0
FN:129,ABRoyalty.claimPayout
-FNDA:256,ABRoyalty.claimPayout
-DA:131,256
+FNDA:0,ABRoyalty.claimPayout
+DA:131,0
FN:141,ABRoyalty.claimPayouts
-FNDA:256,ABRoyalty.claimPayouts
-DA:142,256
-DA:143,256
-DA:144,512
+FNDA:0,ABRoyalty.claimPayouts
+DA:142,0
+DA:143,0
+DA:144,0
FN:164,ABRoyalty.distribute
-FNDA:3072,ABRoyalty.distribute
-DA:165,3072
+FNDA:0,ABRoyalty.distribute
+DA:165,0
BRDA:165,0,0,-
-BRDA:165,0,1,2560
-DA:166,3072
+BRDA:165,0,1,-
+DA:166,0
FN:176,ABRoyalty.claimPayoutsOnBehalf
-FNDA:256,ABRoyalty.claimPayoutsOnBehalf
-DA:178,256
+FNDA:0,ABRoyalty.claimPayoutsOnBehalf
+DA:178,0
FN:188,ABRoyalty.claimPayoutsOnBehalf
-FNDA:256,ABRoyalty.claimPayoutsOnBehalf
-DA:189,256
-DA:190,256
-DA:191,512
+FNDA:0,ABRoyalty.claimPayoutsOnBehalf
+DA:189,0
+DA:190,0
+DA:191,0
FN:203,ABRoyalty.claimPayoutsOnMultipleBehalf
-FNDA:256,ABRoyalty.claimPayoutsOnMultipleBehalf
-DA:208,256
-DA:210,512
+FNDA:0,ABRoyalty.claimPayoutsOnMultipleBehalf
+DA:208,0
+DA:210,0
FN:222,ABRoyalty.claimPayoutsOnMultipleBehalf
-FNDA:256,ABRoyalty.claimPayoutsOnMultipleBehalf
-DA:226,256
-DA:227,256
-DA:230,256
-DA:232,512
-DA:234,1024
+FNDA:0,ABRoyalty.claimPayoutsOnMultipleBehalf
+DA:226,0
+DA:227,0
+DA:230,0
+DA:232,0
+DA:234,0
FN:255,ABRoyalty.initPayoutIndex
-FNDA:8007,ABRoyalty.initPayoutIndex
-DA:259,7751
-DA:260,7751
+FNDA:768,ABRoyalty.initPayoutIndex
+DA:259,768
+DA:260,768
BRDA:260,1,0,-
-BRDA:260,1,1,7751
+BRDA:260,1,1,768
DA:261,0
-DA:263,7751
-DA:264,7751
+DA:263,768
+DA:264,768
FN:277,ABRoyalty.updatePayout1155
-FNDA:1845,ABRoyalty.updatePayout1155
-DA:283,1589
-DA:284,1589
-BRDA:284,2,0,256
-BRDA:284,2,1,1333
-DA:286,1333
-DA:288,2617
-DA:291,2617
+FNDA:0,ABRoyalty.updatePayout1155
+DA:283,0
+DA:284,0
+BRDA:284,2,0,-
+BRDA:284,2,1,-
+DA:286,0
+DA:288,0
+DA:291,0
FN:305,ABRoyalty.updatePayout721
-FNDA:8215,ABRoyalty.updatePayout721
-DA:310,7959
-DA:313,7959
+FNDA:512,ABRoyalty.updatePayout721
+DA:310,512
+DA:313,512
FN:324,ABRoyalty.distributeOnBehalf
FNDA:256,ABRoyalty.distributeOnBehalf
DA:325,256
FN:343,ABRoyalty.getUserSubscription
-FNDA:5632,ABRoyalty.getUserSubscription
-DA:345,5632
+FNDA:0,ABRoyalty.getUserSubscription
+DA:345,0
FN:357,ABRoyalty.getClaimableAmount
FNDA:256,ABRoyalty.getClaimableAmount
DA:359,256
FN:372,ABRoyalty.getIndexInfo
-FNDA:256,ABRoyalty.getIndexInfo
-DA:377,256
+FNDA:0,ABRoyalty.getIndexInfo
+DA:377,0
FN:395,ABRoyalty._gainShare
-FNDA:10576,ABRoyalty._gainShare
-DA:397,10576
-BRDA:397,3,0,9808
-BRDA:397,3,1,10576
-DA:400,9808
-DA:401,9808
-DA:404,9808
+FNDA:512,ABRoyalty._gainShare
+DA:397,512
+BRDA:397,3,0,512
+BRDA:397,3,1,512
+DA:400,512
+DA:401,512
+DA:404,512
FN:417,ABRoyalty._loseShare
-FNDA:10576,ABRoyalty._loseShare
-DA:419,10576
-BRDA:419,4,0,1792
-BRDA:419,4,1,10576
-DA:422,1792
-DA:423,1792
-DA:426,1792
-BRDA:426,5,0,1536
-BRDA:426,5,1,256
-DA:428,1536
-DA:431,256
+FNDA:512,ABRoyalty._loseShare
+DA:419,512
+BRDA:419,4,0,-
+BRDA:419,4,1,512
+DA:422,0
+DA:423,0
+DA:426,0
+BRDA:426,5,0,-
+BRDA:426,5,1,-
+DA:428,0
+DA:431,0
FN:444,ABRoyalty._distribute
-FNDA:3328,ABRoyalty._distribute
-DA:446,3328
-DA:447,3328
-DA:450,3328
-DA:453,3072
+FNDA:256,ABRoyalty._distribute
+DA:446,256
+DA:447,256
+DA:450,256
+DA:453,256
FN:463,ABRoyalty._claimPayout
-FNDA:3072,ABRoyalty._claimPayout
-DA:465,3072
+FNDA:0,ABRoyalty._claimPayout
+DA:465,0
FNF:19
-FNH:19
+FNH:7
LF:53
-LH:52
+LH:17
BRF:12
-BRH:10
+BRH:4
end_of_record
TN:
SF:src/token/ERC1155/ERC1155AB.sol
FN:103,ERC1155AB.initialize
-FNDA:514,ERC1155AB.initialize
-DA:105,513
-DA:108,513
-DA:109,513
-DA:110,513
-DA:113,513
-DA:116,513
-DA:119,513
-DA:122,513
-FN:138,ERC1155AB.mint
-FNDA:13,ERC1155AB.mint
-DA:140,13
-DA:143,13
-BRDA:143,0,0,1
-BRDA:143,0,1,12
-DA:146,12
-DA:149,12
-BRDA:149,1,0,1
-BRDA:149,1,1,10
-DA:152,10
-BRDA:152,2,0,2
-BRDA:152,2,1,8
-DA:153,2
-DA:157,8
-BRDA:157,3,0,1
-BRDA:157,3,1,6
-DA:160,7
-BRDA:159,4,0,1
-BRDA:159,4,1,6
-DA:164,1
-DA:169,7
-BRDA:169,5,0,1
-BRDA:169,5,1,6
-DA:170,1
-DA:174,6
-BRDA:174,6,0,2
-BRDA:174,6,1,4
-DA:175,2
-DA:179,4
-DA:182,4
-DA:185,4
-FN:195,ERC1155AB.mintBatch
-FNDA:8,ERC1155AB.mintBatch
-DA:196,8
-DA:198,8
-DA:199,8
-DA:201,8
-DA:203,8
-DA:205,8
-DA:207,14
-DA:210,14
-BRDA:210,7,0,1
-BRDA:210,7,1,13
-DA:213,13
-DA:216,13
-BRDA:216,8,0,1
-BRDA:216,8,1,12
-DA:219,12
-BRDA:219,9,0,1
-BRDA:219,9,1,11
-DA:220,1
-DA:224,11
-BRDA:224,10,0,1
-BRDA:224,10,1,10
-DA:227,11
-BRDA:226,11,0,1
-BRDA:226,11,1,10
-DA:231,1
-DA:236,10
-BRDA:235,12,0,1
-BRDA:235,12,1,9
-DA:239,1
-DA:243,9
-DA:246,9
-DA:249,9
-DA:252,9
-DA:253,9
-DA:257,3
-BRDA:257,13,0,1
-BRDA:257,13,1,2
-DA:258,1
-DA:260,2
-FN:277,ERC1155AB.initDrop
-FNDA:22,ERC1155AB.initDrop
-DA:278,21
-FN:288,ERC1155AB.initDrop
-FNDA:11,ERC1155AB.initDrop
-DA:289,10
-DA:291,10
-DA:292,30
-FN:304,ERC1155AB.setDropPhases
-FNDA:31,ERC1155AB.setDropPhases
-DA:309,30
-DA:311,30
-DA:313,30
-DA:314,30
-DA:315,33
-DA:318,33
-BRDA:318,14,0,1
-BRDA:318,14,1,32
-DA:319,1
-DA:323,32
-DA:324,32
-DA:328,29
-DA:330,29
-FN:339,ERC1155AB.withdrawToRightholder
-FNDA:1280,ERC1155AB.withdrawToRightholder
-DA:340,1024
-DA:342,1024
-BRDA:342,15,0,256
-BRDA:342,15,1,768
-DA:344,768
-DA:345,768
-DA:346,768
-DA:348,768
-BRDA:348,16,0,-
-BRDA:348,16,1,512
-DA:349,512
-DA:350,512
-BRDA:350,17,0,-
-BRDA:350,17,1,512
-DA:353,768
-BRDA:353,18,0,-
-BRDA:353,18,1,512
-DA:354,512
-DA:355,512
-BRDA:355,19,0,-
-BRDA:355,19,1,512
-FN:367,ERC1155AB.withdrawERC20
-FNDA:257,ERC1155AB.withdrawERC20
-DA:369,1
-FN:381,ERC1155AB.setTokenURI
-FNDA:2,ERC1155AB.setTokenURI
-DA:382,1
-FN:393,ERC1155AB.setMaxSupply
-FNDA:2,ERC1155AB.setMaxSupply
-DA:394,2
-BRDA:394,20,0,1
-BRDA:394,20,1,1
-DA:395,1
-FN:412,ERC1155AB.uri
-FNDA:2,ERC1155AB.uri
-DA:413,2
-FN:425,ERC1155AB.getPhaseInfo
-FNDA:4,ERC1155AB.getPhaseInfo
-DA:426,4
-FN:429,ERC1155AB.supportsInterface
-FNDA:1,ERC1155AB.supportsInterface
-DA:436,1
-DA:437,1
-FN:452,ERC1155AB._initDrop
-FNDA:51,ERC1155AB._initDrop
-DA:455,51
-BRDA:454,21,0,2
-BRDA:454,21,1,49
-DA:457,2
-DA:459,49
-DA:462,49
-DA:465,49
-DA:468,49
-DA:471,49
-DA:474,49
-DA:477,49
-BRDA:477,22,0,1
-BRDA:477,22,1,47
-DA:479,48
-BRDA:479,23,0,1
-BRDA:479,23,1,47
-DA:482,47
-DA:485,47
-DA:489,48
-FN:500,ERC1155AB._isPhaseActive
-FNDA:25,ERC1155AB._isPhaseActive
-DA:502,25
-BRDA:502,24,0,1
-BRDA:502,24,1,24
-DA:505,24
-FN:508,ERC1155AB._beforeTokenTransfer
-FNDA:53,ERC1155AB._beforeTokenTransfer
-DA:516,53
-DA:517,53
-DA:520,53
-DA:521,57
-BRDA:521,25,0,57
-BRDA:521,25,1,57
-DA:525,53
-DA:526,53
-DA:528,53
-DA:531,53
-DA:532,57
-BRDA:532,26,0,-
-BRDA:532,26,1,57
-DA:533,57
-DA:534,57
-DA:535,57
-DA:538,53
+FNDA:0,ERC1155AB.initialize
+DA:105,0
+DA:108,0
+DA:109,0
+DA:112,0
+DA:115,0
+DA:118,0
+DA:121,0
+FN:137,ERC1155AB.mint
+FNDA:0,ERC1155AB.mint
+DA:139,0
+DA:142,0
+BRDA:142,0,0,-
+BRDA:142,0,1,-
+DA:145,0
+DA:148,0
+BRDA:148,1,0,-
+BRDA:148,1,1,-
+DA:151,0
+BRDA:151,2,0,-
+BRDA:151,2,1,-
+DA:152,0
+DA:156,0
+BRDA:156,3,0,-
+BRDA:156,3,1,-
+DA:159,0
+BRDA:158,4,0,-
+BRDA:158,4,1,-
+DA:163,0
+DA:168,0
+BRDA:168,5,0,-
+BRDA:168,5,1,-
+DA:169,0
+DA:173,0
+BRDA:173,6,0,-
+BRDA:173,6,1,-
+DA:174,0
+DA:178,0
+DA:181,0
+DA:184,0
+FN:194,ERC1155AB.mintBatch
+FNDA:0,ERC1155AB.mintBatch
+DA:195,0
+DA:197,0
+DA:198,0
+DA:200,0
+DA:202,0
+DA:204,0
+DA:206,0
+DA:209,0
+BRDA:209,7,0,-
+BRDA:209,7,1,-
+DA:212,0
+DA:215,0
+BRDA:215,8,0,-
+BRDA:215,8,1,-
+DA:218,0
+BRDA:218,9,0,-
+BRDA:218,9,1,-
+DA:219,0
+DA:223,0
+BRDA:223,10,0,-
+BRDA:223,10,1,-
+DA:226,0
+BRDA:225,11,0,-
+BRDA:225,11,1,-
+DA:230,0
+DA:235,0
+BRDA:234,12,0,-
+BRDA:234,12,1,-
+DA:238,0
+DA:242,0
+DA:245,0
+DA:248,0
+DA:251,0
+DA:252,0
+DA:256,0
+BRDA:256,13,0,-
+BRDA:256,13,1,-
+DA:257,0
+DA:259,0
+FN:276,ERC1155AB.initDrop
+FNDA:0,ERC1155AB.initDrop
+DA:277,0
+FN:287,ERC1155AB.initDrop
+FNDA:0,ERC1155AB.initDrop
+DA:288,0
+DA:290,0
+DA:291,0
+FN:303,ERC1155AB.setDropPhases
+FNDA:0,ERC1155AB.setDropPhases
+DA:305,0
+DA:307,0
+DA:309,0
+DA:310,0
+DA:311,0
+DA:314,0
+BRDA:314,14,0,-
+BRDA:314,14,1,-
+DA:315,0
+DA:319,0
+DA:320,0
+DA:324,0
+DA:326,0
+FN:335,ERC1155AB.withdrawToRightholder
+FNDA:0,ERC1155AB.withdrawToRightholder
+DA:336,0
+DA:338,0
+BRDA:338,15,0,-
+BRDA:338,15,1,-
+DA:340,0
+DA:341,0
+DA:342,0
+DA:344,0
+BRDA:344,16,0,-
+BRDA:344,16,1,-
+DA:345,0
+DA:346,0
+BRDA:346,17,0,-
+BRDA:346,17,1,-
+DA:349,0
+BRDA:349,18,0,-
+BRDA:349,18,1,-
+DA:350,0
+DA:351,0
+BRDA:351,19,0,-
+BRDA:351,19,1,-
+FN:363,ERC1155AB.withdrawERC20
+FNDA:0,ERC1155AB.withdrawERC20
+DA:365,0
+FN:377,ERC1155AB.setTokenURI
+FNDA:0,ERC1155AB.setTokenURI
+DA:378,0
+FN:389,ERC1155AB.setMaxSupply
+FNDA:0,ERC1155AB.setMaxSupply
+DA:390,0
+BRDA:390,20,0,-
+BRDA:390,20,1,-
+DA:391,0
+FN:408,ERC1155AB.uri
+FNDA:0,ERC1155AB.uri
+DA:409,0
+FN:421,ERC1155AB.getPhaseInfo
+FNDA:0,ERC1155AB.getPhaseInfo
+DA:422,0
+FN:425,ERC1155AB.supportsInterface
+FNDA:0,ERC1155AB.supportsInterface
+DA:426,0
+FN:441,ERC1155AB._initDrop
+FNDA:0,ERC1155AB._initDrop
+DA:444,0
+BRDA:443,21,0,-
+BRDA:443,21,1,-
+DA:446,0
+DA:448,0
+DA:451,0
+DA:454,0
+DA:457,0
+DA:460,0
+DA:463,0
+DA:466,0
+BRDA:466,22,0,-
+BRDA:466,22,1,-
+DA:468,0
+BRDA:468,23,0,-
+BRDA:468,23,1,-
+DA:471,0
+DA:474,0
+DA:478,0
+FN:489,ERC1155AB._isPhaseActive
+FNDA:0,ERC1155AB._isPhaseActive
+DA:491,0
+BRDA:491,24,0,-
+BRDA:491,24,1,-
+DA:494,0
+FN:497,ERC1155AB._beforeTokenTransfer
+FNDA:0,ERC1155AB._beforeTokenTransfer
+DA:505,0
+DA:506,0
+DA:509,0
+DA:510,0
+BRDA:510,25,0,-
+BRDA:510,25,1,-
+DA:514,0
+DA:515,0
+DA:517,0
+DA:520,0
+DA:521,0
+BRDA:521,26,0,-
+BRDA:521,26,1,-
+DA:522,0
+DA:523,0
+DA:524,0
+DA:527,0
FNF:16
-FNH:16
-LF:111
-LH:111
+FNH:0
+LF:109
+LH:0
BRF:54
-BRH:49
+BRH:0
end_of_record
TN:
SF:src/token/ERC721/ERC721AB.sol
FN:116,ERC721AB.initialize
-FNDA:770,ERC721AB.initialize
-DA:122,769
-DA:125,769
-DA:126,769
-DA:127,769
-DA:129,769
-DA:132,769
-DA:135,769
-DA:138,769
-FN:156,ERC721AB.mint
-FNDA:12,ERC721AB.mint
-DA:158,12
-BRDA:158,0,0,1
-BRDA:158,0,1,10
-DA:161,10
-DA:164,10
-BRDA:164,1,0,2
-BRDA:164,1,1,8
-DA:165,2
-DA:169,8
-BRDA:169,2,0,1
-BRDA:169,2,1,6
-DA:171,7
-BRDA:171,3,0,1
-BRDA:171,3,1,6
-DA:172,1
-DA:177,7
-BRDA:177,4,0,1
-BRDA:177,4,1,6
-DA:180,6
-BRDA:180,5,0,2
-BRDA:180,5,1,4
-DA:183,4
-DA:186,4
-FN:208,ERC721AB.initDrop
-FNDA:539,ERC721AB.initDrop
-DA:217,538
-BRDA:217,6,0,1
-BRDA:217,6,1,537
-DA:221,537
-BRDA:220,7,0,2
-BRDA:220,7,1,535
-DA:223,2
-DA:226,535
-DA:229,535
-DA:232,535
-DA:235,535
-DA:238,535
-BRDA:238,8,0,1
-BRDA:238,8,1,532
-DA:239,533
-BRDA:239,9,0,1
-BRDA:239,9,1,532
-DA:240,532
-FN:251,ERC721AB.setBaseURI
-FNDA:2,ERC721AB.setBaseURI
-DA:252,1
-FN:262,ERC721AB.setSharePerToken
-FNDA:512,ERC721AB.setSharePerToken
-DA:263,256
-FN:274,ERC721AB.setDropPhases
-FNDA:16,ERC721AB.setDropPhases
-DA:276,15
-BRDA:276,10,0,2
-BRDA:276,10,1,15
-DA:277,2
-DA:280,15
-DA:282,15
-DA:284,15
-DA:285,22
-DA:288,22
-BRDA:288,11,0,1
-BRDA:288,11,1,21
-DA:289,1
-DA:292,21
-DA:293,21
-DA:296,14
-FN:305,ERC721AB.withdrawToRightholder
-FNDA:1280,ERC721AB.withdrawToRightholder
-DA:306,1024
-DA:308,1024
-BRDA:308,12,0,256
-BRDA:308,12,1,768
-DA:310,768
-DA:311,768
-DA:312,768
-DA:314,768
-BRDA:314,13,0,-
-BRDA:314,13,1,512
-DA:315,512
-DA:316,512
-BRDA:316,14,0,-
-BRDA:316,14,1,512
-DA:319,768
-BRDA:319,15,0,-
-BRDA:319,15,1,512
-DA:320,512
-DA:321,512
-BRDA:321,16,0,-
-BRDA:321,16,1,512
-FN:333,ERC721AB.withdrawERC20
-FNDA:257,ERC721AB.withdrawERC20
-DA:335,1
-FN:345,ERC721AB.setMaxSupply
-FNDA:2,ERC721AB.setMaxSupply
-DA:346,2
-BRDA:346,17,0,1
-BRDA:346,17,1,1
-DA:347,1
-FN:356,ERC721AB.supportsInterface
-FNDA:1,ERC721AB.supportsInterface
-DA:363,1
-DA:364,1
-FN:373,ERC721AB.symbol
-FNDA:2,ERC721AB.symbol
-DA:374,2
-BRDA:374,18,0,1
-BRDA:374,18,1,2
-DA:375,1
-FN:387,ERC721AB.tokenURI
-FNDA:8,ERC721AB.tokenURI
-DA:388,8
-BRDA:388,19,0,1
-BRDA:388,19,1,7
-DA:390,7
-DA:392,7
-BRDA:392,20,0,1
-BRDA:392,20,1,6
-DA:393,1
-DA:395,6
-DA:397,6
-DA:398,6
-DA:400,6
-BRDA:400,21,0,5
-BRDA:400,21,1,1
-DA:401,5
-DA:403,1
-FN:422,ERC721AB._isPhaseActive
-FNDA:12,ERC721AB._isPhaseActive
-DA:424,12
-BRDA:424,22,0,1
-BRDA:424,22,1,11
-DA:425,11
-DA:427,11
-FN:436,ERC721AB._baseURI
-FNDA:7,ERC721AB._baseURI
-DA:437,7
-FN:446,ERC721AB._startTokenId
-FNDA:789,ERC721AB._startTokenId
-DA:447,789
-FN:450,ERC721AB._beforeTokenTransfers
-FNDA:536,ERC721AB._beforeTokenTransfers
-DA:454,536
-BRDA:454,23,0,-
-BRDA:454,23,1,535
-DA:455,535
+FNDA:0,ERC721AB.initialize
+DA:122,0
+DA:125,0
+DA:126,0
+DA:128,0
+DA:131,0
+DA:134,0
+DA:137,0
+FN:155,ERC721AB.mint
+FNDA:0,ERC721AB.mint
+DA:157,0
+BRDA:157,0,0,-
+BRDA:157,0,1,-
+DA:160,0
+DA:163,0
+BRDA:163,1,0,-
+BRDA:163,1,1,-
+DA:164,0
+DA:168,0
+BRDA:168,2,0,-
+BRDA:168,2,1,-
+DA:170,0
+BRDA:170,3,0,-
+BRDA:170,3,1,-
+DA:171,0
+DA:176,0
+BRDA:176,4,0,-
+BRDA:176,4,1,-
+DA:179,0
+BRDA:179,5,0,-
+BRDA:179,5,1,-
+DA:182,0
+DA:185,0
+FN:207,ERC721AB.initDrop
+FNDA:0,ERC721AB.initDrop
+DA:216,0
+BRDA:216,6,0,-
+BRDA:216,6,1,-
+DA:220,0
+BRDA:219,7,0,-
+BRDA:219,7,1,-
+DA:222,0
+DA:225,0
+DA:228,0
+DA:231,0
+DA:234,0
+DA:237,0
+BRDA:237,8,0,-
+BRDA:237,8,1,-
+DA:238,0
+BRDA:238,9,0,-
+BRDA:238,9,1,-
+DA:239,0
+FN:250,ERC721AB.setBaseURI
+FNDA:0,ERC721AB.setBaseURI
+DA:251,0
+FN:261,ERC721AB.setSharePerToken
+FNDA:0,ERC721AB.setSharePerToken
+DA:262,0
+FN:273,ERC721AB.setDropPhases
+FNDA:0,ERC721AB.setDropPhases
+DA:275,0
+BRDA:275,10,0,-
+BRDA:275,10,1,-
+DA:276,0
+DA:279,0
+DA:281,0
+DA:283,0
+DA:284,0
+DA:287,0
+BRDA:287,11,0,-
+BRDA:287,11,1,-
+DA:288,0
+DA:291,0
+DA:292,0
+DA:295,0
+FN:304,ERC721AB.withdrawToRightholder
+FNDA:0,ERC721AB.withdrawToRightholder
+DA:305,0
+DA:307,0
+BRDA:307,12,0,-
+BRDA:307,12,1,-
+DA:309,0
+DA:310,0
+DA:311,0
+DA:313,0
+BRDA:313,13,0,-
+BRDA:313,13,1,-
+DA:314,0
+DA:315,0
+BRDA:315,14,0,-
+BRDA:315,14,1,-
+DA:318,0
+BRDA:318,15,0,-
+BRDA:318,15,1,-
+DA:319,0
+DA:320,0
+BRDA:320,16,0,-
+BRDA:320,16,1,-
+FN:332,ERC721AB.withdrawERC20
+FNDA:0,ERC721AB.withdrawERC20
+DA:334,0
+FN:344,ERC721AB.setMaxSupply
+FNDA:0,ERC721AB.setMaxSupply
+DA:345,0
+BRDA:345,17,0,-
+BRDA:345,17,1,-
+DA:346,0
+FN:355,ERC721AB.supportsInterface
+FNDA:0,ERC721AB.supportsInterface
+DA:356,0
+FN:365,ERC721AB.symbol
+FNDA:0,ERC721AB.symbol
+DA:366,0
+BRDA:366,18,0,-
+BRDA:366,18,1,-
+DA:367,0
+FN:379,ERC721AB.tokenURI
+FNDA:0,ERC721AB.tokenURI
+DA:380,0
+BRDA:380,19,0,-
+BRDA:380,19,1,-
+DA:382,0
+DA:384,0
+BRDA:384,20,0,-
+BRDA:384,20,1,-
+DA:385,0
+DA:387,0
+DA:389,0
+DA:390,0
+DA:392,0
+BRDA:392,21,0,-
+BRDA:392,21,1,-
+DA:393,0
+DA:395,0
+FN:414,ERC721AB._isPhaseActive
+FNDA:0,ERC721AB._isPhaseActive
+DA:416,0
+BRDA:416,22,0,-
+BRDA:416,22,1,-
+DA:417,0
+DA:419,0
+FN:428,ERC721AB._baseURI
+FNDA:0,ERC721AB._baseURI
+DA:429,0
+FN:438,ERC721AB._startTokenId
+FNDA:0,ERC721AB._startTokenId
+DA:439,0
+FN:442,ERC721AB._beforeTokenTransfers
+FNDA:0,ERC721AB._beforeTokenTransfers
+DA:446,0
+BRDA:446,23,0,-
+BRDA:446,23,1,-
+DA:447,0
FNF:16
-FNH:16
-LF:77
-LH:77
+FNH:0
+LF:75
+LH:0
BRF:48
-BRH:43
+BRH:0
end_of_record
TN:
SF:src/utils/ABDataRegistry.sol
-FN:104,ABDataRegistry.initialize
+FN:110,ABDataRegistry.initialize
FNDA:2,ABDataRegistry.initialize
-DA:106,1
-DA:107,1
-DA:109,1
-DA:110,1
DA:112,1
-FN:133,ABDataRegistry.registerDrop
-FNDA:1864,ABDataRegistry.registerDrop
-DA:139,1608
-DA:142,1608
-DA:145,1608
-DA:147,1608
-BRDA:147,0,0,-
-BRDA:147,0,1,1351
-DA:149,1351
-FN:164,ABDataRegistry.on721TokenTransfer
-FNDA:1047,ABDataRegistry.on721TokenTransfer
-DA:168,1047
-DA:169,1047
-FN:184,ABDataRegistry.on1155TokenTransfer
-FNDA:53,ABDataRegistry.on1155TokenTransfer
-DA:191,53
-DA:192,53
-FN:212,ABDataRegistry.registerPublisher
-FNDA:6656,ABDataRegistry.registerPublisher
-DA:216,6400
-BRDA:216,1,0,256
-BRDA:216,1,1,6144
-DA:219,6144
-DA:222,6144
-DA:225,6144
-FN:236,ABDataRegistry.grantCollectionRole
-FNDA:1792,ABDataRegistry.grantCollectionRole
-DA:238,1536
-FN:257,ABDataRegistry.distributeOnBehalf
+DA:113,1
+DA:115,1
+DA:116,1
+DA:118,1
+FN:139,ABDataRegistry.registerDrop
+FNDA:1280,ABDataRegistry.registerDrop
+DA:145,1024
+DA:148,1024
+DA:151,1024
+DA:153,1024
+BRDA:153,0,0,-
+BRDA:153,0,1,768
+DA:155,768
+FN:170,ABDataRegistry.on721TokenTransfer
+FNDA:512,ABDataRegistry.on721TokenTransfer
+DA:174,512
+DA:175,512
+FN:190,ABDataRegistry.on1155TokenTransfer
+FNDA:0,ABDataRegistry.on1155TokenTransfer
+DA:197,0
+DA:198,0
+FN:218,ABDataRegistry.registerPublisher
+FNDA:3840,ABDataRegistry.registerPublisher
+DA:222,3584
+BRDA:222,1,0,256
+BRDA:222,1,1,3328
+DA:225,3328
+DA:228,3328
+DA:231,3328
+FN:242,ABDataRegistry.grantCollectionRole
+FNDA:512,ABDataRegistry.grantCollectionRole
+DA:244,256
+FN:263,ABDataRegistry.distributeOnBehalf
FNDA:768,ABDataRegistry.distributeOnBehalf
-DA:261,512
-DA:262,512
-BRDA:262,2,0,256
-BRDA:262,2,1,256
-DA:263,256
-FN:273,ABDataRegistry.setTreasury
-FNDA:1024,ABDataRegistry.setTreasury
-DA:274,768
-FN:285,ABDataRegistry.setPublisherFee
-FNDA:1280,ABDataRegistry.setPublisherFee
-DA:286,1280
-FN:297,ABDataRegistry.updatePublisher
+DA:267,512
+DA:268,512
+BRDA:268,2,0,256
+BRDA:268,2,1,256
+DA:269,256
+FN:279,ABDataRegistry.setTreasury
+FNDA:512,ABDataRegistry.setTreasury
+DA:280,256
+FN:291,ABDataRegistry.setPublisherFee
+FNDA:256,ABDataRegistry.setPublisherFee
+DA:292,256
+DA:293,256
+FN:305,ABDataRegistry.setDropFee
+FNDA:0,ABDataRegistry.setDropFee
+DA:306,0
+BRDA:306,3,0,-
+BRDA:306,3,1,-
+DA:307,0
+DA:308,0
+FN:319,ABDataRegistry.updatePublisher
FNDA:768,ABDataRegistry.updatePublisher
-DA:298,512
-BRDA:298,3,0,256
-BRDA:298,3,1,256
-DA:299,256
-FN:316,ABDataRegistry.isPublisher
-FNDA:1024,ABDataRegistry.isPublisher
-DA:317,1024
-FN:328,ABDataRegistry.getRoyaltyContract
+DA:320,512
+BRDA:320,4,0,256
+BRDA:320,4,1,256
+DA:321,256
+FN:338,ABDataRegistry.isPublisher
+FNDA:512,ABDataRegistry.isPublisher
+DA:339,512
+FN:350,ABDataRegistry.getRoyaltyContract
FNDA:512,ABDataRegistry.getRoyaltyContract
-DA:329,512
-FN:340,ABDataRegistry.getPublisherFee
+DA:351,512
+FN:362,ABDataRegistry.getPublisherFee
FNDA:512,ABDataRegistry.getPublisherFee
-DA:341,512
-FN:353,ABDataRegistry.getPayoutDetails
-FNDA:2304,ABDataRegistry.getPayoutDetails
-DA:354,2304
-DA:355,2304
-FN:370,ABDataRegistry._getNextDropId
-FNDA:1608,ABDataRegistry._getNextDropId
-DA:371,1608
-FNF:15
-FNH:15
-LF:32
+DA:363,512
+FN:376,ABDataRegistry.getPayoutDetails
+FNDA:256,ABDataRegistry.getPayoutDetails
+DA:381,256
+BRDA:381,5,0,-
+BRDA:381,5,1,256
+DA:382,0
+DA:384,256
+DA:386,256
+FN:401,ABDataRegistry._getNextDropId
+FNDA:1024,ABDataRegistry._getNextDropId
+DA:402,1024
+FNF:16
+FNH:14
+LF:38
LH:32
-BRF:8
-BRH:7
+BRF:12
+BRH:8
end_of_record
TN:
SF:src/utils/ABVerifier.sol
FN:91,ABVerifier.initialize
-FNDA:3,ABVerifier.initialize
-DA:92,2
-BRDA:92,0,0,1
-BRDA:92,0,1,1
-DA:93,1
-DA:96,1
-DA:97,1
+FNDA:0,ABVerifier.initialize
+DA:92,0
+BRDA:92,0,0,-
+BRDA:92,0,1,-
+DA:93,0
+DA:96,0
+DA:97,0
FN:117,ABVerifier.verifySignature721
-FNDA:521,ABVerifier.verifySignature721
-DA:122,521
-DA:124,521
-DA:129,521
+FNDA:0,ABVerifier.verifySignature721
+DA:122,0
+DA:124,0
+DA:129,0
FN:144,ABVerifier.verifySignature1155
-FNDA:788,ABVerifier.verifySignature1155
-DA:151,788
-DA:153,788
-DA:158,788
+FNDA:0,ABVerifier.verifySignature1155
+DA:151,0
+DA:153,0
+DA:158,0
FN:174,ABVerifier.setDefaultSigner
-FNDA:2,ABVerifier.setDefaultSigner
-DA:175,1
+FNDA:0,ABVerifier.setDefaultSigner
+DA:175,0
FN:185,ABVerifier.setCollectionSigner
-FNDA:4,ABVerifier.setCollectionSigner
-DA:186,3
+FNDA:0,ABVerifier.setCollectionSigner
+DA:186,0
FN:203,ABVerifier.getSigner
-FNDA:4,ABVerifier.getSigner
-DA:204,4
+FNDA:0,ABVerifier.getSigner
+DA:204,0
FN:221,ABVerifier._getSigner
-FNDA:1313,ABVerifier._getSigner
-DA:222,1313
-DA:223,1313
-DA:224,1313
-BRDA:224,1,0,2
-BRDA:224,1,1,1313
-DA:225,2
+FNDA:0,ABVerifier._getSigner
+DA:222,0
+DA:223,0
+DA:224,0
+BRDA:224,1,0,-
+BRDA:224,1,1,-
+DA:225,0
FNF:7
-FNH:7
+FNH:0
LF:17
-LH:17
+LH:0
BRF:4
-BRH:4
+BRH:0
end_of_record
TN:
SF:test/_mocks/ABSuperToken.sol
diff --git a/script/base-goerli/deploy-implementations.s.sol b/script/base-goerli/deploy-implementations.s.sol
index 371a5eb..3919796 100644
--- a/script/base-goerli/deploy-implementations.s.sol
+++ b/script/base-goerli/deploy-implementations.s.sol
@@ -9,11 +9,11 @@ pragma solidity ^0.8.18;
import "forge-std/Script.sol";
import {ERC1155AB} from "src/token/ERC1155/ERC1155AB.sol";
-import {ERC721AB} from "src/token/ERC721/ERC721AB.sol";
+import {ERC721ABLE} from "src/token/ERC721/ERC721ABLE.sol";
import {AnotherCloneFactory} from "src/factory/AnotherCloneFactory.sol";
contract DeployImplementation is Script {
- ERC721AB public erc721Impl;
+ ERC721ABLE public erc721Impl;
ERC1155AB public erc1155Impl;
function run() external {
@@ -24,7 +24,7 @@ contract DeployImplementation is Script {
vm.startBroadcast(deployerPrivateKey);
// Deploy Implementation Contracts
- erc721Impl = new ERC721AB();
+ erc721Impl = new ERC721ABLE();
erc1155Impl = new ERC1155AB();
// Set new implementation contracts addresses in AnotherCloneFactory
diff --git a/script/base-goerli/deploy-platform.s.sol b/script/base-goerli/deploy-platform.s.sol
index cb5d84a..e0a3a20 100644
--- a/script/base-goerli/deploy-platform.s.sol
+++ b/script/base-goerli/deploy-platform.s.sol
@@ -11,7 +11,8 @@ import {ABRoyalty} from "src/royalty/ABRoyalty.sol";
import {ABVerifier} from "src/utils/ABVerifier.sol";
import {AnotherCloneFactory} from "src/factory/AnotherCloneFactory.sol";
import {ERC1155AB} from "src/token/ERC1155/ERC1155AB.sol";
-import {ERC721AB} from "src/token/ERC721/ERC721AB.sol";
+import {ERC721ABLE} from "src/token/ERC721/ERC721ABLE.sol";
+import {ERC721ABOE} from "src/token/ERC721/ERC721ABOE.sol";
contract DeployPlatform is Script {
uint256 public constant DROP_ID_OFFSET = 20_000;
@@ -21,7 +22,8 @@ contract DeployPlatform is Script {
string public constant FACTORY_PATH = "deployment/84531/AnotherCloneFactory/address";
string public constant PROXY_ADMIN_PATH = "deployment/84531/ProxyAdmin/address";
- ERC721AB public erc721Impl;
+ ERC721ABLE public erc721Impl;
+ ERC721ABOE public erc721OEImpl;
ERC1155AB public erc1155Impl;
ABRoyalty public royaltyImpl;
ProxyAdmin public proxyAdmin;
@@ -42,7 +44,8 @@ contract DeployPlatform is Script {
vm.startBroadcast(deployerPrivateKey);
// Deploy Implementation Contracts
- erc721Impl = new ERC721AB();
+ erc721Impl = new ERC721ABLE();
+ erc721OEImpl = new ERC721ABOE();
erc1155Impl = new ERC1155AB();
royaltyImpl = new ABRoyalty();
diff --git a/script/base-goerli/deploy-upgrade.s.sol b/script/base-goerli/deploy-upgrade.s.sol
new file mode 100644
index 0000000..299bd45
--- /dev/null
+++ b/script/base-goerli/deploy-upgrade.s.sol
@@ -0,0 +1,40 @@
+/*
+forge script script/base-goerli/deploy-upgrade.s.sol:DeployUpgrade --rpc-url base-goerli
+forge script script/base-goerli/deploy-upgrade.s.sol:DeployUpgrade --rpc-url base-goerli --broadcast --verify
+*/
+
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.18;
+
+import "forge-std/Script.sol";
+
+import {ABDataRegistry} from "src/utils/ABDataRegistry.sol";
+import {ERC721ABOE} from "src/token/ERC721/ERC721ABOE.sol";
+import {ERC721ABLE} from "src/token/ERC721/ERC721ABLE.sol";
+import {AnotherCloneFactory} from "src/factory/AnotherCloneFactory.sol";
+
+contract DeployUpgrade is Script {
+ ERC721ABLE public erc721LimitedEditionImpl;
+
+ function run() external {
+ // Account to deploy from
+ uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
+
+ // Start broadcasting transactions
+ vm.startBroadcast(deployerPrivateKey);
+
+ // Deploy Implementation Contracts
+ new ABDataRegistry();
+
+ // Deploy Implementation Contracts
+ erc721LimitedEditionImpl = new ERC721ABLE();
+ new ERC721ABOE();
+
+ // Set new implementation contracts addresses in AnotherCloneFactory
+ AnotherCloneFactory(0x9BE7E2B13f70f170B63c0379663313EcdB527294).setERC721Implementation(
+ address(erc721LimitedEditionImpl)
+ );
+
+ vm.stopBroadcast();
+ }
+}
diff --git a/script/base/deploy-implementations.s.sol b/script/base/deploy-implementations.s.sol
index c5e364f..e32941a 100644
--- a/script/base/deploy-implementations.s.sol
+++ b/script/base/deploy-implementations.s.sol
@@ -9,11 +9,11 @@ pragma solidity ^0.8.18;
import "forge-std/Script.sol";
import {ERC1155AB} from "src/token/ERC1155/ERC1155AB.sol";
-import {ERC721AB} from "src/token/ERC721/ERC721AB.sol";
+import {ERC721ABLE} from "src/token/ERC721/ERC721ABLE.sol";
import {AnotherCloneFactory} from "src/factory/AnotherCloneFactory.sol";
contract DeployImplementation is Script {
- ERC721AB public erc721Impl;
+ ERC721ABLE public erc721Impl;
ERC1155AB public erc1155Impl;
address public anotherCloneFactory = 0x137d7d27af9B4d7b467Ac008AFdcDb8C9Ac4ddd9;
@@ -25,7 +25,7 @@ contract DeployImplementation is Script {
vm.startBroadcast(deployerPrivateKey);
// Deploy Implementation Contracts
- erc721Impl = new ERC721AB();
+ erc721Impl = new ERC721ABLE();
erc1155Impl = new ERC1155AB();
// Set new implementation contracts addresses in AnotherCloneFactory
diff --git a/script/base/deploy-platform.s.sol b/script/base/deploy-platform.s.sol
index 85676fe..404ffaf 100644
--- a/script/base/deploy-platform.s.sol
+++ b/script/base/deploy-platform.s.sol
@@ -11,7 +11,7 @@ import {ABRoyalty} from "src/royalty/ABRoyalty.sol";
import {ABVerifier} from "src/utils/ABVerifier.sol";
import {AnotherCloneFactory} from "src/factory/AnotherCloneFactory.sol";
import {ERC1155AB} from "src/token/ERC1155/ERC1155AB.sol";
-import {ERC721AB} from "src/token/ERC721/ERC721AB.sol";
+import {ERC721ABLE} from "src/token/ERC721/ERC721ABLE.sol";
contract DeployPlatform is Script {
uint256 public constant DROP_ID_OFFSET = 10_000;
@@ -25,7 +25,7 @@ contract DeployPlatform is Script {
string public constant FACTORY_PATH = "deployment/8453/AnotherCloneFactory/address";
string public constant PROXY_ADMIN_PATH = "deployment/8453/ProxyAdmin/address";
- ERC721AB public erc721Impl;
+ ERC721ABLE public erc721Impl;
ERC1155AB public erc1155Impl;
ABRoyalty public royaltyImpl;
ProxyAdmin public proxyAdmin;
@@ -42,7 +42,7 @@ contract DeployPlatform is Script {
vm.startBroadcast(deployerPrivateKey);
// Deploy Implementation Contracts
- erc721Impl = new ERC721AB();
+ erc721Impl = new ERC721ABLE();
erc1155Impl = new ERC1155AB();
royaltyImpl = new ABRoyalty();
diff --git a/script/base/deploy-v1_1.s.sol b/script/base/deploy-v1_1.s.sol
new file mode 100644
index 0000000..cd34b23
--- /dev/null
+++ b/script/base/deploy-v1_1.s.sol
@@ -0,0 +1,40 @@
+/*
+forge script script/base/deploy-v1_1.s.sol:DeployUpgrade --rpc-url base
+forge script script/base/deploy-v1_1.s.sol:DeployUpgrade --rpc-url base --broadcast --verify
+*/
+
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.18;
+
+import "forge-std/Script.sol";
+
+import {ERC721ABLE} from "src/token/ERC721/ERC721ABLE.sol";
+import {ERC721ABOE} from "src/token/ERC721/ERC721ABOE.sol";
+import {ABDataRegistry} from "src/utils/ABDataRegistry.sol";
+import {AnotherCloneFactory} from "src/factory/AnotherCloneFactory.sol";
+
+contract DeployUpgrade is Script {
+ function run() external {
+ // Account to deploy from
+ uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
+
+ // Start broadcasting transactions
+ vm.startBroadcast(deployerPrivateKey);
+
+ // Deploy Implementation Contracts
+ new ERC721ABLE();
+ new ERC721ABOE();
+ new ABDataRegistry();
+ new AnotherCloneFactory();
+
+ vm.stopBroadcast();
+
+ /*
+ TODO Manually
+ 1) Update Proxy Implementation (thru Proxy Admin) of ABDataRegistry contract
+ 2) Update Proxy Implementation (thru Proxy Admin) of AnotherCloneFactory contract
+ 3) setERC721ABImplementation of AnotherCloneFactory (using erc721LimitedEditionImpl address as parameter)
+ 4) Update theGraph on Base (added some checks on maxSupply)
+ */
+ }
+}
diff --git a/script/op/deploy-platform.s.sol b/script/op/deploy-platform.s.sol
index e9a84c7..436c8f2 100644
--- a/script/op/deploy-platform.s.sol
+++ b/script/op/deploy-platform.s.sol
@@ -11,7 +11,7 @@ import {ABRoyalty} from "src/royalty/ABRoyalty.sol";
import {ABVerifier} from "src/utils/ABVerifier.sol";
import {AnotherCloneFactory} from "src/factory/AnotherCloneFactory.sol";
import {ERC1155AB} from "src/token/ERC1155/ERC1155AB.sol";
-import {ERC721AB} from "src/token/ERC721/ERC721AB.sol";
+import {ERC721ABLE} from "src/token/ERC721/ERC721ABLE.sol";
contract DeployPlatform is Script {
uint256 public constant DROP_ID_OFFSET = 10_000;
@@ -21,7 +21,7 @@ contract DeployPlatform is Script {
string public constant FACTORY_PATH = "deployment/420/AnotherCloneFactory/address";
string public constant PROXY_ADMIN_PATH = "deployment/420/ProxyAdmin/address";
- ERC721AB public erc721Impl;
+ ERC721ABLE public erc721Impl;
ERC1155AB public erc1155Impl;
ABRoyalty public royaltyImpl;
ProxyAdmin public proxyAdmin;
@@ -39,7 +39,7 @@ contract DeployPlatform is Script {
vm.startBroadcast(deployerPrivateKey);
// Deploy Implementation Contracts
- erc721Impl = new ERC721AB();
+ erc721Impl = new ERC721ABLE();
erc1155Impl = new ERC1155AB();
royaltyImpl = new ABRoyalty();
diff --git a/src/factory/AnotherCloneFactory.sol b/src/factory/AnotherCloneFactory.sol
index fbc4f5c..3f14799 100644
--- a/src/factory/AnotherCloneFactory.sol
+++ b/src/factory/AnotherCloneFactory.sol
@@ -261,7 +261,7 @@ contract AnotherCloneFactory is AccessControlUpgradeable {
abDataRegistry.registerPublisher(_account, address(newRoyalty), _publisherFee);
// Grant publisher role to `_account`
- grantRole(PUBLISHER_ROLE, _account);
+ _grantRole(PUBLISHER_ROLE, _account);
}
/**
@@ -339,6 +339,23 @@ contract AnotherCloneFactory is AccessControlUpgradeable {
_predicted = Clones.predictDeterministicAddress(erc1155Impl, _salt, address(this));
}
+ /**
+ * @notice
+ * Predict the new collection address for a given implementation address
+ *
+ * @param _impl implementation contract address to be cloned
+ * @param _salt address of the new implementation contract
+ *
+ * @return _predicted predicted address for the given `_salt`
+ */
+ function predictAddressFromImplementation(address _impl, bytes32 _salt)
+ external
+ view
+ returns (address _predicted)
+ {
+ _predicted = Clones.predictDeterministicAddress(_impl, _salt, address(this));
+ }
+
/**
* @notice
* Returns true if `_account` has `PUBLISHER_ROLE`, false otherwise
@@ -347,6 +364,7 @@ contract AnotherCloneFactory is AccessControlUpgradeable {
*
* @return _hasRole true if `_account` has `PUBLISHER_ROLE`, false otherwise
*/
+
function hasPublisherRole(address _account) external view returns (bool _hasRole) {
_hasRole = hasRole(PUBLISHER_ROLE, _account);
}
diff --git a/src/libraries/ABErrors.sol b/src/libraries/ABErrors.sol
index fa4356a..5f14e41 100644
--- a/src/libraries/ABErrors.sol
+++ b/src/libraries/ABErrors.sol
@@ -39,6 +39,9 @@ library ABErrors {
///@dev Error returned if the drop has already been initialized
error DROP_ALREADY_INITIALIZED();
+ ///@dev Error returned if the drop has not been initialized
+ error DROP_NOT_INITIALIZED();
+
/// @dev Error returned if supply is insufficient
error NOT_ENOUGH_TOKEN_AVAILABLE();
diff --git a/src/token/ERC1155/ERC1155AB.sol b/src/token/ERC1155/ERC1155AB.sol
index a748929..29a76c9 100644
--- a/src/token/ERC1155/ERC1155AB.sol
+++ b/src/token/ERC1155/ERC1155AB.sol
@@ -333,7 +333,7 @@ contract ERC1155AB is ERC1155Upgradeable, OwnableUpgradeable {
*
*/
function withdrawToRightholder() external onlyOwner {
- (address abTreasury, uint256 fee) = abDataRegistry.getPayoutDetails(publisher);
+ (address abTreasury, uint256 fee) = abDataRegistry.getPayoutDetails(publisher, 0);
if (abTreasury == address(0)) revert ABErrors.INVALID_PARAMETER();
diff --git a/src/token/ERC721/ERC721AB.sol b/src/token/ERC721/ERC721AB.sol
index e95e9e9..fb4568e 100644
--- a/src/token/ERC721/ERC721AB.sol
+++ b/src/token/ERC721/ERC721AB.sol
@@ -52,7 +52,7 @@ import {ABEvents} from "src/libraries/ABEvents.sol";
import {IABVerifier} from "src/utils/IABVerifier.sol";
import {IABDataRegistry} from "src/utils/IABDataRegistry.sol";
-contract ERC721AB is ERC721AUpgradeable, OwnableUpgradeable {
+abstract contract ERC721AB is ERC721AUpgradeable, OwnableUpgradeable {
// _____ __ __
// / ___// /_____ _/ /____ _____
// \__ \/ __/ __ `/ __/ _ \/ ___/
@@ -71,9 +71,6 @@ contract ERC721AB is ERC721AUpgradeable, OwnableUpgradeable {
/// @dev Drop Identifier
uint256 public dropId;
- /// @dev Supply cap for this collection
- uint256 public maxSupply;
-
/// @dev Percentage ownership of the full master right for one token (to be divided by 1e6)
uint256 public sharePerToken;
@@ -86,9 +83,6 @@ contract ERC721AB is ERC721AUpgradeable, OwnableUpgradeable {
/// @dev Mapping storing the amount minted per wallet and per phase
mapping(address user => mapping(uint256 phaseId => uint256 minted)) public mintedPerPhase;
- /// @dev ERC721AB implementation version
- uint8 public constant IMPLEMENTATION_VERSION = 1;
-
// ______ __ __
// / ____/___ ____ _____/ /________ _______/ /_____ _____
// / / / __ \/ __ \/ ___/ __/ ___/ / / / ___/ __/ __ \/ ___/
@@ -113,6 +107,7 @@ contract ERC721AB is ERC721AUpgradeable, OwnableUpgradeable {
* @param _abVerifier ABVerifier contract address
* @param _name NFT collection name
*/
+
function initialize(address _publisher, address _abDataRegistry, address _abVerifier, string memory _name)
external
initializerERC721A
@@ -137,54 +132,6 @@ contract ERC721AB is ERC721AUpgradeable, OwnableUpgradeable {
publisher = _publisher;
}
- // ______ __ __ ______ __ _
- // / ____/ __/ /____ _________ ____ _/ / / ____/_ ______ _____/ /_(_)___ ____ _____
- // / __/ | |/_/ __/ _ \/ ___/ __ \/ __ `/ / / /_ / / / / __ \/ ___/ __/ / __ \/ __ \/ ___/
- // / /____> /_/ __/ / / / / / /_/ / / / __/ / /_/ / / / / /__/ /_/ / /_/ / / / (__ )
- // /_____/_/|_|\__/\___/_/ /_/ /_/\__,_/_/ /_/ \__,_/_/ /_/\___/\__/_/\____/_/ /_/____/
-
- /**
- * @notice
- * Mint `_quantity` tokens to `_to` address based on the current `_phaseId` if `_signature` is valid
- *
- * @param _to token recipient address (must be whitelisted)
- * @param _phaseId current minting phase (must be started)
- * @param _quantity quantity of tokens requested (must be less than max mint per phase)
- * @param _signature signature to verify allowlist status
- */
- function mint(address _to, uint256 _phaseId, uint256 _quantity, bytes calldata _signature) external payable {
- // Check that the requested minting phase has started
- if (!_isPhaseActive(_phaseId)) revert ABErrors.PHASE_NOT_ACTIVE();
-
- // Get requested phase details
- ABDataTypes.Phase memory phase = phases[_phaseId];
-
- // Check that there are enough tokens available for sale
- if (_totalMinted() + _quantity > maxSupply) {
- revert ABErrors.NOT_ENOUGH_TOKEN_AVAILABLE();
- }
-
- // Check if the current phase is private
- if (!phase.isPublic) {
- // Check that the user is included in the allowlist
- if (!abVerifier.verifySignature721(_to, address(this), _phaseId, _signature)) {
- revert ABErrors.NOT_ELIGIBLE();
- }
- }
-
- // Check that user did not mint / is not asking to mint more than the max mint per address for the current phase
- if (mintedPerPhase[_to][_phaseId] + _quantity > phase.maxMint) revert ABErrors.MAX_MINT_PER_ADDRESS();
-
- // Check that user is sending the correct amount of ETH (will revert if user send too much or not enough)
- if (msg.value != phase.price * _quantity) revert ABErrors.INCORRECT_ETH_SENT();
-
- // Set quantity minted for `_to` during the current phase
- mintedPerPhase[_to][_phaseId] += _quantity;
-
- // Mint `_quantity` amount to `_to` address
- _mint(_to, _quantity);
- }
-
// ____ __ ___ __ _
// / __ \____ / /_ __ / | ____/ /___ ___ (_)___
// / / / / __ \/ / / / / / /| |/ __ / __ `__ \/ / __ \
@@ -192,54 +139,6 @@ contract ERC721AB is ERC721AUpgradeable, OwnableUpgradeable {
// \____/_/ /_/_/\__, / /_/ |_\__,_/_/ /_/ /_/_/_/ /_/
// /____/
- /**
- * @notice
- * Initialize the Drop parameters
- * Only the contract owner can perform this operation
- *
- * @param _maxSupply supply cap for this drop
- * @param _sharePerToken percentage ownership of the full master right for one token (to be divided by 1e6)
- * @param _mintGenesis amount of genesis tokens to be minted
- * @param _genesisRecipient recipient address of genesis tokens
- * @param _royaltyCurrency royalty currency contract address
- * @param _baseUri base URI for this drop
- */
- function initDrop(
- uint256 _maxSupply,
- uint256 _sharePerToken,
- uint256 _mintGenesis,
- address _genesisRecipient,
- address _royaltyCurrency,
- string calldata _baseUri
- ) external virtual onlyOwner {
- // Check that the drop hasn't been already initialized
- if (dropId != 0) revert ABErrors.DROP_ALREADY_INITIALIZED();
-
- // Check that share per token & royalty currency are consistent
- if (
- (_sharePerToken == 0 && _royaltyCurrency != address(0))
- || (_royaltyCurrency == address(0) && _sharePerToken != 0)
- ) revert ABErrors.INVALID_PARAMETER();
-
- // Register Drop within ABDropRegistry
- dropId = abDataRegistry.registerDrop(publisher, _royaltyCurrency, 0);
-
- // Set supply cap
- maxSupply = _maxSupply;
-
- // Set the royalty share
- sharePerToken = _sharePerToken;
-
- // Set base URI
- baseTokenURI = _baseUri;
-
- // Mint Genesis tokens to `_genesisRecipient` address
- if (_mintGenesis > 0) {
- if (_mintGenesis > _maxSupply) revert ABErrors.INVALID_PARAMETER();
- _mint(_genesisRecipient, _mintGenesis);
- }
- }
-
/**
* @notice
* Update the Base URI
@@ -302,7 +201,7 @@ contract ERC721AB is ERC721AUpgradeable, OwnableUpgradeable {
*
*/
function withdrawToRightholder() external onlyOwner {
- (address abTreasury, uint256 fee) = abDataRegistry.getPayoutDetails(publisher);
+ (address abTreasury, uint256 fee) = abDataRegistry.getPayoutDetails(publisher, dropId);
if (abTreasury == address(0)) revert ABErrors.INVALID_PARAMETER();
@@ -334,18 +233,6 @@ contract ERC721AB is ERC721AUpgradeable, OwnableUpgradeable {
IERC20(_token).transfer(msg.sender, _amount);
}
- /**
- * @notice
- * Set the maximum supply
- * Only the contract owner can perform this operation
- *
- * @param _maxSupply new maximum supply to be set
- */
- function setMaxSupply(uint256 _maxSupply) external onlyOwner {
- if (_maxSupply < _totalMinted()) revert ABErrors.INVALID_PARAMETER();
- maxSupply = _maxSupply;
- }
-
// _ ___ ______ __ _
// | | / (_)__ _ __ / ____/_ ______ _____/ /_(_)___ ____ _____
// | | / / / _ \ | /| / / / /_ / / / / __ \/ ___/ __/ / __ \/ __ \/ ___/
@@ -403,6 +290,48 @@ contract ERC721AB is ERC721AUpgradeable, OwnableUpgradeable {
// _/ // / / / /_/ __/ / / / / / /_/ / / / __/ / /_/ / / / / /__/ /_/ / /_/ / / / (__ )
// /___/_/ /_/\__/\___/_/ /_/ /_/\__,_/_/ /_/ \__,_/_/ /_/\___/\__/_/\____/_/ /_/____/
+ /**
+ * @notice
+ * Initialize the Drop parameters
+ * Only the contract owner can perform this operation
+ *
+ * @param _sharePerToken percentage ownership of the full master right for one token (to be divided by 1e6)
+ * @param _mintGenesis amount of genesis tokens to be minted
+ * @param _genesisRecipient recipient address of genesis tokens
+ * @param _royaltyCurrency royalty currency contract address
+ * @param _baseUri base URI for this drop
+ */
+ function _initDrop(
+ uint256 _sharePerToken,
+ uint256 _mintGenesis,
+ address _genesisRecipient,
+ address _royaltyCurrency,
+ string calldata _baseUri
+ ) internal {
+ // Check that the drop hasn't been already initialized
+ if (dropId != 0) revert ABErrors.DROP_ALREADY_INITIALIZED();
+
+ // Check that share per token & royalty currency are consistent
+ if (
+ (_sharePerToken == 0 && _royaltyCurrency != address(0))
+ || (_royaltyCurrency == address(0) && _sharePerToken != 0)
+ ) revert ABErrors.INVALID_PARAMETER();
+
+ // Register Drop within ABDropRegistry
+ dropId = abDataRegistry.registerDrop(publisher, _royaltyCurrency, 0);
+
+ // Set the royalty share
+ sharePerToken = _sharePerToken;
+
+ // Set base URI
+ baseTokenURI = _baseUri;
+
+ // Mint Genesis tokens to `_genesisRecipient` address
+ if (_mintGenesis > 0) {
+ _mint(_genesisRecipient, _mintGenesis);
+ }
+ }
+
/**
* @notice
* Returns true if the passed phase ID is active
diff --git a/src/token/ERC721/ERC721ABLE.sol b/src/token/ERC721/ERC721ABLE.sol
new file mode 100644
index 0000000..80fbb42
--- /dev/null
+++ b/src/token/ERC721/ERC721ABLE.sol
@@ -0,0 +1,154 @@
+// ██████████████████████████████████
+// ██████████████████████████████████
+// ██████████████████████████████████
+// ██████████████████████████████████
+// ██████████████████████████████████
+// ██████████████████████████████████
+// ██████████████████████████████████
+// ██████████████████████████████████
+// ██████████████████████████████████
+// ████████████████████████ ██████████
+// ████████████████████████ ██████████
+// ████████████████████████ ██████████
+// ████████████████████████ ██████████
+// ████████████████████
+// ████████████████████
+// ████████████████████
+// ████████████████████
+//
+//
+// █████╗ ███╗ ██╗ ██████╗ ████████╗██╗ ██╗███████╗██████╗ ██████╗ ██╗ ██████╗ ██████╗██╗ ██╗
+// ██╔══██╗████╗ ██║██╔═══██╗╚══██╔══╝██║ ██║██╔════╝██╔══██╗██╔══██╗██║ ██╔═══██╗██╔════╝██║ ██╔╝
+// ███████║██╔██╗ ██║██║ ██║ ██║ ███████║█████╗ ██████╔╝██████╔╝██║ ██║ ██║██║ █████╔╝
+// ██╔══██║██║╚██╗██║██║ ██║ ██║ ██╔══██║██╔══╝ ██╔══██╗██╔══██╗██║ ██║ ██║██║ ██╔═██╗
+// ██║ ██║██║ ╚████║╚██████╔╝ ██║ ██║ ██║███████╗██║ ██║██████╔╝███████╗╚██████╔╝╚██████╗██║ ██╗
+// ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═════╝ ╚══════╝ ╚═════╝ ╚═════╝╚═╝ ╚═╝
+//
+
+/**
+ * @title ERC721ABLE
+ * @author anotherblock Technical Team
+ * @notice anotherblock ERC721 contract used for regular mint mechanism & limited edition
+ *
+ */
+
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.18;
+
+/* anotherblock Contract */
+import {ERC721AB} from "src/token/ERC721/ERC721AB.sol";
+
+/* anotherblock Libraries */
+import {ABDataTypes} from "src/libraries/ABDataTypes.sol";
+import {ABErrors} from "src/libraries/ABErrors.sol";
+
+contract ERC721ABLE is ERC721AB {
+ // _____ __ __
+ // / ___// /_____ _/ /____ _____
+ // \__ \/ __/ __ `/ __/ _ \/ ___/
+ // ___/ / /_/ /_/ / /_/ __(__ )
+ // /____/\__/\__,_/\__/\___/____/
+
+ /// @dev Supply cap for this collection
+ uint256 public maxSupply;
+
+ /// @dev Implementation Type
+ bytes32 public constant IMPLEMENTATION_TYPE = keccak256("LIMITED_EDITION");
+
+ /// @dev ERC721AB implementation version
+ uint8 public constant IMPLEMENTATION_VERSION = 1;
+
+ // ______ __ __ ______ __ _
+ // / ____/ __/ /____ _________ ____ _/ / / ____/_ ______ _____/ /_(_)___ ____ _____
+ // / __/ | |/_/ __/ _ \/ ___/ __ \/ __ `/ / / /_ / / / / __ \/ ___/ __/ / __ \/ __ \/ ___/
+ // / /____> /_/ __/ / / / / / /_/ / / / __/ / /_/ / / / / /__/ /_/ / /_/ / / / (__ )
+ // /_____/_/|_|\__/\___/_/ /_/ /_/\__,_/_/ /_/ \__,_/_/ /_/\___/\__/_/\____/_/ /_/____/
+
+ /**
+ * @notice
+ * Mint `_quantity` tokens to `_to` address based on the current `_phaseId` if `_signature` is valid
+ *
+ * @param _to token recipient address (must be whitelisted)
+ * @param _phaseId current minting phase (must be started)
+ * @param _quantity quantity of tokens requested (must be less than max mint per phase)
+ * @param _signature signature to verify allowlist status
+ */
+ function mint(address _to, uint256 _phaseId, uint256 _quantity, bytes calldata _signature) external payable {
+ // Check that the requested minting phase has started
+ if (!_isPhaseActive(_phaseId)) revert ABErrors.PHASE_NOT_ACTIVE();
+
+ // Get requested phase details
+ ABDataTypes.Phase memory phase = phases[_phaseId];
+
+ // Check that there are enough tokens available for sale
+ if (_totalMinted() + _quantity > maxSupply) {
+ revert ABErrors.NOT_ENOUGH_TOKEN_AVAILABLE();
+ }
+
+ // Check if the current phase is private
+ if (!phase.isPublic) {
+ // Check that the user is included in the allowlist
+ if (!abVerifier.verifySignature721(_to, address(this), _phaseId, _signature)) {
+ revert ABErrors.NOT_ELIGIBLE();
+ }
+ }
+
+ // Check that user did not mint / is not asking to mint more than the max mint per address for the current phase
+ if (mintedPerPhase[_to][_phaseId] + _quantity > phase.maxMint) revert ABErrors.MAX_MINT_PER_ADDRESS();
+
+ // Check that user is sending the correct amount of ETH (will revert if user send too much or not enough)
+ if (msg.value != phase.price * _quantity) revert ABErrors.INCORRECT_ETH_SENT();
+
+ // Set quantity minted for `_to` during the current phase
+ mintedPerPhase[_to][_phaseId] += _quantity;
+
+ // Mint `_quantity` amount to `_to` address
+ _mint(_to, _quantity);
+ }
+
+ // ____ __ ___ __ _
+ // / __ \____ / /_ __ / | ____/ /___ ___ (_)___
+ // / / / / __ \/ / / / / / /| |/ __ / __ `__ \/ / __ \
+ // / /_/ / / / / / /_/ / / ___ / /_/ / / / / / / / / / /
+ // \____/_/ /_/_/\__, / /_/ |_\__,_/_/ /_/ /_/_/_/ /_/
+ // /____/
+
+ /**
+ * @notice
+ * Initialize the Drop parameters
+ * Only the contract owner can perform this operation
+ *
+ * @param _maxSupply supply cap for this drop
+ * @param _sharePerToken percentage ownership of the full master right for one token (to be divided by 1e6)
+ * @param _mintGenesis amount of genesis tokens to be minted
+ * @param _genesisRecipient recipient address of genesis tokens
+ * @param _royaltyCurrency royalty currency contract address
+ * @param _baseUri base URI for this drop
+ */
+ function initDrop(
+ uint256 _maxSupply,
+ uint256 _sharePerToken,
+ uint256 _mintGenesis,
+ address _genesisRecipient,
+ address _royaltyCurrency,
+ string calldata _baseUri
+ ) external onlyOwner {
+ // Set supply cap
+ maxSupply = _maxSupply;
+ if (_mintGenesis > _maxSupply) revert ABErrors.INVALID_PARAMETER();
+
+ _initDrop(_sharePerToken, _mintGenesis, _genesisRecipient, _royaltyCurrency, _baseUri);
+ }
+
+ /**
+ * @notice
+ * Set the maximum supply
+ * Only the contract owner can perform this operation
+ *
+ * @param _maxSupply new maximum supply to be set
+ */
+ function setMaxSupply(uint256 _maxSupply) external onlyOwner {
+ if (_maxSupply < _totalMinted()) revert ABErrors.INVALID_PARAMETER();
+ maxSupply = _maxSupply;
+ }
+}
diff --git a/src/token/ERC721/ERC721ABOE.sol b/src/token/ERC721/ERC721ABOE.sol
new file mode 100644
index 0000000..81299a1
--- /dev/null
+++ b/src/token/ERC721/ERC721ABOE.sol
@@ -0,0 +1,125 @@
+// ██████████████████████████████████
+// ██████████████████████████████████
+// ██████████████████████████████████
+// ██████████████████████████████████
+// ██████████████████████████████████
+// ██████████████████████████████████
+// ██████████████████████████████████
+// ██████████████████████████████████
+// ██████████████████████████████████
+// ████████████████████████ ██████████
+// ████████████████████████ ██████████
+// ████████████████████████ ██████████
+// ████████████████████████ ██████████
+// ████████████████████
+// ████████████████████
+// ████████████████████
+// ████████████████████
+//
+//
+// █████╗ ███╗ ██╗ ██████╗ ████████╗██╗ ██╗███████╗██████╗ ██████╗ ██╗ ██████╗ ██████╗██╗ ██╗
+// ██╔══██╗████╗ ██║██╔═══██╗╚══██╔══╝██║ ██║██╔════╝██╔══██╗██╔══██╗██║ ██╔═══██╗██╔════╝██║ ██╔╝
+// ███████║██╔██╗ ██║██║ ██║ ██║ ███████║█████╗ ██████╔╝██████╔╝██║ ██║ ██║██║ █████╔╝
+// ██╔══██║██║╚██╗██║██║ ██║ ██║ ██╔══██║██╔══╝ ██╔══██╗██╔══██╗██║ ██║ ██║██║ ██╔═██╗
+// ██║ ██║██║ ╚████║╚██████╔╝ ██║ ██║ ██║███████╗██║ ██║██████╔╝███████╗╚██████╔╝╚██████╗██║ ██╗
+// ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═════╝ ╚══════╝ ╚═════╝ ╚═════╝╚═╝ ╚═╝
+//
+
+/**
+ * @title ERC721ABOE
+ * @author anotherblock Technical Team
+ * @notice anotherblock ERC721 Open Edition contract standard
+ *
+ */
+
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.18;
+
+/* anotherblock Contract */
+import {ERC721AB} from "src/token/ERC721/ERC721AB.sol";
+
+/* anotherblock Libraries */
+import {ABDataTypes} from "src/libraries/ABDataTypes.sol";
+import {ABErrors} from "src/libraries/ABErrors.sol";
+
+contract ERC721ABOE is ERC721AB {
+ // _____ __ __
+ // / ___// /_____ _/ /____ _____
+ // \__ \/ __/ __ `/ __/ _ \/ ___/
+ // ___/ / /_/ /_/ / /_/ __(__ )
+ // /____/\__/\__,_/\__/\___/____/
+
+ /// @dev Implementation Type
+ bytes32 public constant IMPLEMENTATION_TYPE = keccak256("OPEN_EDITION");
+
+ /// @dev ERC721ABOE implementation version
+ uint8 public constant IMPLEMENTATION_VERSION = 1;
+
+ // ______ __ __ ______ __ _
+ // / ____/ __/ /____ _________ ____ _/ / / ____/_ ______ _____/ /_(_)___ ____ _____
+ // / __/ | |/_/ __/ _ \/ ___/ __ \/ __ `/ / / /_ / / / / __ \/ ___/ __/ / __ \/ __ \/ ___/
+ // / /____> /_/ __/ / / / / / /_/ / / / __/ / /_/ / / / / /__/ /_/ / /_/ / / / (__ )
+ // /_____/_/|_|\__/\___/_/ /_/ /_/\__,_/_/ /_/ \__,_/_/ /_/\___/\__/_/\____/_/ /_/____/
+
+ /**
+ * @notice
+ * Mint `_quantity` tokens to `_to` address based on the current `_phaseId` if `_signature` is valid
+ *
+ * @param _to token recipient address (must be whitelisted)
+ * @param _phaseId current minting phase (must be started)
+ * @param _quantity quantity of tokens requested (must be less than max mint per phase)
+ * @param _signature signature to verify allowlist status
+ */
+ function mint(address _to, uint256 _phaseId, uint256 _quantity, bytes calldata _signature) external payable {
+ // Check that the drop is initialized
+ if (dropId == 0) revert ABErrors.DROP_NOT_INITIALIZED();
+
+ // Check that the requested minting phase has started
+ if (!_isPhaseActive(_phaseId)) revert ABErrors.PHASE_NOT_ACTIVE();
+
+ // Get requested phase details
+ ABDataTypes.Phase memory phase = phases[_phaseId];
+
+ // Check if the current phase is private
+ if (!phase.isPublic) {
+ // Check that the user is included in the allowlist
+ if (!abVerifier.verifySignature721(_to, address(this), _phaseId, _signature)) {
+ revert ABErrors.NOT_ELIGIBLE();
+ }
+ }
+
+ // Check that user is sending the correct amount of ETH (will revert if user send too much or not enough)
+ if (msg.value != phase.price * _quantity) revert ABErrors.INCORRECT_ETH_SENT();
+
+ // Mint `_quantity` amount to `_to` address
+ _mint(_to, _quantity);
+ }
+
+ // ____ __ ___ __ _
+ // / __ \____ / /_ __ / | ____/ /___ ___ (_)___
+ // / / / / __ \/ / / / / / /| |/ __ / __ `__ \/ / __ \
+ // / /_/ / / / / / /_/ / / ___ / /_/ / / / / / / / / / /
+ // \____/_/ /_/_/\__, / /_/ |_\__,_/_/ /_/ /_/_/_/ /_/
+ // /____/
+
+ /**
+ * @notice
+ * Initialize the Drop parameters
+ * Only the contract owner can perform this operation
+ *
+ * @param _sharePerToken percentage ownership of the full master right for one token (to be divided by 1e6)
+ * @param _mintGenesis amount of genesis tokens to be minted
+ * @param _genesisRecipient recipient address of genesis tokens
+ * @param _royaltyCurrency royalty currency contract address
+ * @param _baseUri base URI for this drop
+ */
+ function initDrop(
+ uint256 _sharePerToken,
+ uint256 _mintGenesis,
+ address _genesisRecipient,
+ address _royaltyCurrency,
+ string calldata _baseUri
+ ) external virtual onlyOwner {
+ _initDrop(_sharePerToken, _mintGenesis, _genesisRecipient, _royaltyCurrency, _baseUri);
+ }
+}
diff --git a/src/utils/ABDataRegistry.sol b/src/utils/ABDataRegistry.sol
index ae72e7d..66a93f4 100644
--- a/src/utils/ABDataRegistry.sol
+++ b/src/utils/ABDataRegistry.sol
@@ -75,8 +75,14 @@ contract ABDataRegistry is IABDataRegistry, AccessControlUpgradeable {
/// @dev Factory Role
bytes32 public constant FACTORY_ROLE = keccak256("FACTORY_ROLE");
+ /// @dev Mapping storing a boolean indicating if a drop has specific feeswew
+ mapping(uint256 dropId => bool dropSpecific) public hasDropSpecificFees;
+
+ /// @dev Mapping storing Publisher Fee for a given drop identifier
+ mapping(uint256 dropId => uint256 fee) public dropFees;
+
/// @dev Storage gap used for future upgrades (30 * 32 bytes)
- uint256[30] __gap;
+ uint256[28] __gap;
// ______ __ __
// / ____/___ ____ _____/ /________ _______/ /_____ _____
@@ -287,6 +293,21 @@ contract ABDataRegistry is IABDataRegistry, AccessControlUpgradeable {
emit ABEvents.PublisherFeesUpdated(_publisher, _fee);
}
+ /**
+ * @notice
+ * Update a drop specific fee
+ * Only contract owner can perform this operation
+ *
+ * @param _isSpecific true to apply specific fee or false to apply publisher fee
+ * @param _dropId drop identifier to be updated
+ * @param _fee new fees to be set
+ */
+ function setDropFee(bool _isSpecific, uint256 _dropId, uint256 _fee) external onlyRole(DEFAULT_ADMIN_ROLE) {
+ if (_fee > 10_000) revert ABErrors.INVALID_PARAMETER();
+ hasDropSpecificFees[_dropId] = _isSpecific;
+ dropFees[_dropId] = _fee;
+ }
+
/**
* @notice
* Update a publisher royalty contract
@@ -347,13 +368,22 @@ contract ABDataRegistry is IABDataRegistry, AccessControlUpgradeable {
* Return the details required to withdraw the mint proceeds
*
* @param _publisher publisher to be queried
+ * @param _dropId drop identifier to be queried
*
* @return _treasury the treasury account address
* @return _fee the fees associated to the given `_publisher`
*/
- function getPayoutDetails(address _publisher) external view returns (address _treasury, uint256 _fee) {
+ function getPayoutDetails(address _publisher, uint256 _dropId)
+ external
+ view
+ returns (address _treasury, uint256 _fee)
+ {
+ if (hasDropSpecificFees[_dropId]) {
+ _fee = dropFees[_dropId];
+ } else {
+ _fee = publisherFees[_publisher];
+ }
_treasury = abTreasury;
- _fee = publisherFees[_publisher];
}
// ____ __ __ ______ __ _
diff --git a/src/utils/IABDataRegistry.sol b/src/utils/IABDataRegistry.sol
index 366f62a..1169868 100644
--- a/src/utils/IABDataRegistry.sol
+++ b/src/utils/IABDataRegistry.sol
@@ -158,6 +158,17 @@ interface IABDataRegistry {
*/
function setPublisherFee(address _publisher, uint256 _fee) external;
+ /**
+ * @notice
+ * Update a drop specific fee
+ * Only contract owner can perform this operation
+ *
+ * @param _isSpecific true to apply specific fee or false to apply publisher fee
+ * @param _dropId drop identifier to be updated
+ * @param _fee new fees to be set
+ */
+ function setDropFee(bool _isSpecific, uint256 _dropId, uint256 _fee) external;
+
/**
* @notice
* Update a publisher royalty contract
@@ -209,9 +220,13 @@ interface IABDataRegistry {
* Return the details required to withdraw the mint proceeds
*
* @param _publisher publisher to be queried
+ * @param _dropId drop identifier to be queried
*
* @return _treasury the treasury account address
* @return _fee the fees associated to the given `_publisher`
*/
- function getPayoutDetails(address _publisher) external view returns (address _treasury, uint256 _fee);
+ function getPayoutDetails(address _publisher, uint256 _dropId)
+ external
+ view
+ returns (address _treasury, uint256 _fee);
}
diff --git a/test/_testdata/ERC721AB.td.sol b/test/_testdata/ERC721ABLE.td.sol
similarity index 97%
rename from test/_testdata/ERC721AB.td.sol
rename to test/_testdata/ERC721ABLE.td.sol
index e5bc5fc..6e7e7f9 100644
--- a/test/_testdata/ERC721AB.td.sol
+++ b/test/_testdata/ERC721ABLE.td.sol
@@ -15,6 +15,7 @@ contract ERC721ABTestData {
string public constant MOCK_TOKEN_NAME = "Mock Token";
string public constant MOCK_TOKEN_SYMBOL = "MOCK";
uint256 public constant PUBLISHER_FEE = 9_000;
+ uint256 public constant DROP_SPECIFIC_FEE = 5_000;
uint256 public constant PRICE = 0.1 ether;
uint256 public constant SUPPLY = 5;
uint256 public constant SHARE_PER_TOKEN = 90_000;
diff --git a/test/_testdata/ERC721ABOE.td.sol b/test/_testdata/ERC721ABOE.td.sol
new file mode 100644
index 0000000..a5951d2
--- /dev/null
+++ b/test/_testdata/ERC721ABOE.td.sol
@@ -0,0 +1,49 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.18;
+
+contract ERC721ABOETestData {
+ /* Superfluid Host */
+ address public constant SF_HOST = 0x4C073B3baB6d8826b8C5b229f3cfdC1eC6E47E74;
+
+ /* Roles Hash */
+ bytes32 public constant DEFAULT_ADMIN_ROLE_HASH = 0x0000000000000000000000000000000000000000000000000000000000000000;
+ bytes32 public constant PUBLISHER_ROLE_HASH = keccak256("PUBLISHER_ROLE");
+ bytes32 public constant AB_ADMIN_ROLE_HASH = keccak256("AB_ADMIN_ROLE");
+ bytes32 public constant FACTORY_ROLE_HASH = keccak256("FACTORY_ROLE");
+
+ /* Test Data */
+ string public constant MOCK_TOKEN_NAME = "Mock Token";
+ string public constant MOCK_TOKEN_SYMBOL = "MOCK";
+ uint256 public constant PUBLISHER_FEE = 9_000;
+ uint256 public constant PRICE = 0.1 ether;
+ uint256 public constant SHARE_PER_TOKEN = 90_000;
+ uint256 public constant MINT_GENESIS = 1;
+ uint256 public constant UNITS_PRECISION = 1_000;
+ string public constant NAME = "name";
+ string public constant SYMBOL = "SYMBOL";
+ string public constant URI = "http://uri.ipfs/";
+ bytes32 public constant SALT = "SALT";
+ bytes32 public constant SALT_2 = "SALT_2";
+
+ bool public constant PUBLIC_PHASE = true;
+ bool public constant PRIVATE_PHASE = false;
+
+ uint256 public constant PHASE_ID_0 = 0;
+ uint256 public constant PHASE_ID_1 = 1;
+ uint256 public constant PHASE_ID_2 = 2;
+
+ uint256 public constant P0_PRICE = 0.1 ether;
+ uint256 public constant P0_START = 1680000000;
+ uint256 public constant P0_END = 1680000100;
+ uint256 public constant P0_MAX_MINT = 3;
+
+ uint256 public constant P1_PRICE = 0.125 ether;
+ uint256 public constant P1_START = 1680100001;
+ uint256 public constant P1_END = 1680100100;
+ uint256 public constant P1_MAX_MINT = 3;
+
+ uint256 public constant P2_PRICE = 0.15 ether;
+ uint256 public constant P2_START = 1680200001;
+ uint256 public constant P2_END = 1680200100;
+ uint256 public constant P2_MAX_MINT = 3;
+}
diff --git a/test/factory/AnotherCloneFactory.t.sol b/test/factory/AnotherCloneFactory.t.sol
index cde0992..02b52e3 100644
--- a/test/factory/AnotherCloneFactory.t.sol
+++ b/test/factory/AnotherCloneFactory.t.sol
@@ -3,7 +3,8 @@ pragma solidity ^0.8.18;
import "forge-std/Test.sol";
-import {ERC721AB} from "src/token/ERC721/ERC721AB.sol";
+import {ERC721ABLE} from "src/token/ERC721/ERC721ABLE.sol";
+import {ERC721ABOE} from "src/token/ERC721/ERC721ABOE.sol";
import {ERC1155AB} from "src/token/ERC1155/ERC1155AB.sol";
import {ABDataRegistry} from "src/utils/ABDataRegistry.sol";
import {AnotherCloneFactory} from "src/factory/AnotherCloneFactory.sol";
@@ -16,6 +17,7 @@ import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.s
import {AnotherCloneFactoryTestData} from "test/_testdata/AnotherCloneFactory.td.sol";
+/* solhint-disable */
contract AnotherCloneFactoryTest is Test, AnotherCloneFactoryTestData {
/* Contracts */
ABVerifier public abVerifier;
@@ -23,7 +25,8 @@ contract AnotherCloneFactoryTest is Test, AnotherCloneFactoryTestData {
AnotherCloneFactory public anotherCloneFactory;
ABRoyalty public royaltyImplementation;
ERC1155AB public erc1155Implementation;
- ERC721AB public erc721Implementation;
+ ERC721ABLE public erc721Implementation;
+ ERC721ABOE public erc721OEImplementation;
ProxyAdmin public proxyAdmin;
TransparentUpgradeableProxy public anotherCloneFactoryProxy;
@@ -51,9 +54,12 @@ contract AnotherCloneFactoryTest is Test, AnotherCloneFactoryTestData {
erc1155Implementation = new ERC1155AB();
vm.label(address(erc1155Implementation), "erc1155Implementation");
- erc721Implementation = new ERC721AB();
+ erc721Implementation = new ERC721ABLE();
vm.label(address(erc721Implementation), "erc721Implementation");
+ erc721OEImplementation = new ERC721ABOE();
+ vm.label(address(erc721OEImplementation), "erc721OEImplementation");
+
royaltyImplementation = new ABRoyalty();
vm.label(address(royaltyImplementation), "royaltyImplementation");
@@ -123,10 +129,12 @@ contract AnotherCloneFactoryTest is Test, AnotherCloneFactoryTestData {
);
}
- function test_createPublisherProfile_admin(address _publisher, uint256 _fee) public {
+ function test_createPublisherProfile_admin(address _sender, address _publisher, uint256 _fee) public {
vm.assume(_fee <= 10_000);
vm.assume(anotherCloneFactory.hasRole(PUBLISHER_ROLE_HASH, _publisher) == false && _publisher != address(0));
+ anotherCloneFactory.grantRole(AB_ADMIN_ROLE_HASH, _sender);
+ vm.prank(_sender);
anotherCloneFactory.createPublisherProfile(_publisher, _fee);
assertEq(anotherCloneFactory.hasRole(PUBLISHER_ROLE_HASH, _publisher), true);
@@ -218,7 +226,7 @@ contract AnotherCloneFactoryTest is Test, AnotherCloneFactoryTestData {
anotherCloneFactory.createCollection721(NAME, SALT);
(address nft, address publisher) = anotherCloneFactory.collections(0);
- assertEq(ERC721AB(nft).owner(), _publisher);
+ assertEq(ERC721ABLE(nft).owner(), _publisher);
assertEq(publisher, _publisher);
vm.stopPrank();
@@ -245,7 +253,7 @@ contract AnotherCloneFactoryTest is Test, AnotherCloneFactoryTestData {
anotherCloneFactory.createCollection721FromImplementation(address(erc721Implementation), _publisher, NAME, SALT);
(address nft, address publisher) = anotherCloneFactory.collections(0);
- assertEq(ERC721AB(nft).owner(), _publisher);
+ assertEq(ERC721ABLE(nft).owner(), _publisher);
assertEq(publisher, _publisher);
vm.stopPrank();
@@ -255,6 +263,7 @@ contract AnotherCloneFactoryTest is Test, AnotherCloneFactoryTestData {
public
{
vm.assume(_sender != address(0));
+ vm.assume(_sender != address(proxyAdmin));
vm.assume(anotherCloneFactory.hasRole(PUBLISHER_ROLE_HASH, _publisher) == false);
vm.assume(_publisher != address(anotherCloneFactory) && _publisher != address(0));
@@ -305,7 +314,7 @@ contract AnotherCloneFactoryTest is Test, AnotherCloneFactoryTestData {
}
function test_setERC721Implementation_admin() public {
- ERC721AB newErc721Implementation = new ERC721AB();
+ ERC721ABLE newErc721Implementation = new ERC721ABLE();
assertEq(anotherCloneFactory.erc721Impl(), address(erc721Implementation));
@@ -317,7 +326,7 @@ contract AnotherCloneFactoryTest is Test, AnotherCloneFactoryTestData {
function test_setERC721Implementation_nonAdmin(address _nonAdmin) public {
vm.assume(_nonAdmin != address(this));
- ERC721AB newErc721Implementation = new ERC721AB();
+ ERC721ABLE newErc721Implementation = new ERC721ABLE();
vm.prank(_nonAdmin);
@@ -393,6 +402,26 @@ contract AnotherCloneFactoryTest is Test, AnotherCloneFactoryTestData {
assertEq(predictedAddress, nft);
}
+ function test_predictAddressFromImplementation(address _sender, address _publisher, bytes32 _salt) public {
+ vm.assume(_publisher != address(0));
+ vm.assume(_sender != address(0));
+ vm.assume(_sender != _publisher);
+
+ anotherCloneFactory.createPublisherProfile(_publisher, PUBLISHER_FEE);
+ anotherCloneFactory.grantRole(AB_ADMIN_ROLE_HASH, _sender);
+
+ address predictedAddress =
+ anotherCloneFactory.predictAddressFromImplementation(address(erc721OEImplementation), _salt);
+
+ vm.prank(_sender);
+ anotherCloneFactory.createCollection721FromImplementation(
+ address(erc721OEImplementation), _publisher, NAME, _salt
+ );
+ (address nft,) = anotherCloneFactory.collections(0);
+
+ assertEq(predictedAddress, nft);
+ }
+
function test_hasPublisherRole(address _publisher, address _nonPublisher) public {
vm.assume(_publisher != _nonPublisher);
vm.assume(anotherCloneFactory.hasRole(PUBLISHER_ROLE_HASH, _publisher) == false && _publisher != address(0));
diff --git a/test/royalty/ABRoyalty.t.sol b/test/royalty/ABRoyalty.t.sol
index 611a824..82b7efe 100644
--- a/test/royalty/ABRoyalty.t.sol
+++ b/test/royalty/ABRoyalty.t.sol
@@ -3,7 +3,7 @@ pragma solidity ^0.8.18;
import "forge-std/Test.sol";
-import {ERC721AB} from "src/token/ERC721/ERC721AB.sol";
+import {ERC721ABLE} from "src/token/ERC721/ERC721ABLE.sol";
import {ERC1155AB} from "src/token/ERC1155/ERC1155AB.sol";
import {ABDataRegistry} from "src/utils/ABDataRegistry.sol";
import {AnotherCloneFactory} from "src/factory/AnotherCloneFactory.sol";
@@ -18,6 +18,7 @@ import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
+/* solhint-disable */
contract ABRoyaltyTest is Test, ABRoyaltyTestData {
/* Users */
address payable public publisher;
@@ -34,7 +35,7 @@ contract ABRoyaltyTest is Test, ABRoyaltyTestData {
ABVerifier public abVerifier;
ABDataRegistry public abDataRegistry;
AnotherCloneFactory public anotherCloneFactory;
- ERC721AB public erc721Impl;
+ ERC721ABLE public erc721Impl;
ERC1155AB public erc1155Impl;
ProxyAdmin public proxyAdmin;
TransparentUpgradeableProxy public anotherCloneFactoryProxy;
@@ -79,7 +80,7 @@ contract ABRoyaltyTest is Test, ABRoyaltyTestData {
erc1155Impl = new ERC1155AB();
vm.label(address(erc1155Impl), "erc1155Impl");
- erc721Impl = new ERC721AB();
+ erc721Impl = new ERC721ABLE();
vm.label(address(erc721Impl), "erc721Impl");
abRoyaltyImpl = new ABRoyalty();
diff --git a/test/token/ERC1155/ERC1155AB.t.sol b/test/token/ERC1155/ERC1155AB.t.sol
index ee47ee2..2251110 100644
--- a/test/token/ERC1155/ERC1155AB.t.sol
+++ b/test/token/ERC1155/ERC1155AB.t.sol
@@ -3,7 +3,7 @@ pragma solidity ^0.8.18;
import "forge-std/Test.sol";
-import {ERC721AB} from "src/token/ERC721/ERC721AB.sol";
+import {ERC721ABLE} from "src/token/ERC721/ERC721ABLE.sol";
import {ERC1155AB} from "src/token/ERC1155/ERC1155AB.sol";
import {ABDataRegistry} from "src/utils/ABDataRegistry.sol";
import {AnotherCloneFactory} from "src/factory/AnotherCloneFactory.sol";
@@ -21,8 +21,8 @@ import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155
import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
-import {IAccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";
+/* solhint-disable */
contract ERC1155ABTest is Test, ERC1155ABTestData, ERC1155Holder {
using ECDSA for bytes32;
@@ -45,7 +45,7 @@ contract ERC1155ABTest is Test, ERC1155ABTestData, ERC1155Holder {
ABDataRegistry public abDataRegistry;
AnotherCloneFactory public anotherCloneFactory;
ABRoyalty public royaltyImpl;
- ERC721AB public erc721Impl;
+ ERC721ABLE public erc721Impl;
ERC1155AB public erc1155Impl;
ProxyAdmin public proxyAdmin;
TransparentUpgradeableProxy public anotherCloneFactoryProxy;
@@ -109,7 +109,7 @@ contract ERC1155ABTest is Test, ERC1155ABTestData, ERC1155Holder {
erc1155Impl = new ERC1155AB();
vm.label(address(erc1155Impl), "erc1155Impl");
- erc721Impl = new ERC721AB();
+ erc721Impl = new ERC721ABLE();
vm.label(address(erc721Impl), "erc721Impl");
royaltyImpl = new ABRoyalty();
diff --git a/test/token/ERC721/ERC721AB.t.sol b/test/token/ERC721/ERC721ABLE.t.sol
similarity index 95%
rename from test/token/ERC721/ERC721AB.t.sol
rename to test/token/ERC721/ERC721ABLE.t.sol
index 81dfd2d..e6df19d 100644
--- a/test/token/ERC721/ERC721AB.t.sol
+++ b/test/token/ERC721/ERC721ABLE.t.sol
@@ -3,7 +3,7 @@ pragma solidity ^0.8.18;
import "forge-std/Test.sol";
-import {ERC721AB} from "src/token/ERC721/ERC721AB.sol";
+import {ERC721ABLE} from "src/token/ERC721/ERC721ABLE.sol";
import {ERC1155AB} from "src/token/ERC1155/ERC1155AB.sol";
import {ABDataRegistry} from "src/utils/ABDataRegistry.sol";
import {AnotherCloneFactory} from "src/factory/AnotherCloneFactory.sol";
@@ -14,14 +14,14 @@ import {ABErrors} from "src/libraries/ABErrors.sol";
import {ABSuperToken} from "test/_mocks/ABSuperToken.sol";
import {MockToken} from "test/_mocks/MockToken.sol";
-import {ERC721ABTestData} from "test/_testdata/ERC721AB.td.sol";
+import {ERC721ABTestData} from "test/_testdata/ERC721ABLE.td.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
-import {IAccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";
+/* solhint-disable */
contract ERC721ABTest is Test, ERC721ABTestData {
using ECDSA for bytes32;
@@ -45,14 +45,14 @@ contract ERC721ABTest is Test, ERC721ABTestData {
ABDataRegistry public abDataRegistry;
AnotherCloneFactory public anotherCloneFactory;
ABRoyalty public royaltyImpl;
- ERC721AB public erc721Impl;
+ ERC721ABLE public erc721Impl;
ERC1155AB public erc1155Impl;
ProxyAdmin public proxyAdmin;
TransparentUpgradeableProxy public anotherCloneFactoryProxy;
TransparentUpgradeableProxy public abDataRegistryProxy;
TransparentUpgradeableProxy public abVerifierProxy;
- ERC721AB public nft;
+ ERC721ABLE public nft;
uint256 public constant DROP_ID_OFFSET = 10_000;
@@ -109,7 +109,7 @@ contract ERC721ABTest is Test, ERC721ABTestData {
erc1155Impl = new ERC1155AB();
vm.label(address(erc1155Impl), "erc1155Impl");
- erc721Impl = new ERC721AB();
+ erc721Impl = new ERC721ABLE();
vm.label(address(erc721Impl), "erc721Impl");
royaltyImpl = new ABRoyalty();
@@ -153,17 +153,17 @@ contract ERC721ABTest is Test, ERC721ABTestData {
(address nftAddr,) = anotherCloneFactory.collections(0);
- nft = ERC721AB(nftAddr);
+ nft = ERC721ABLE(nftAddr);
}
function test_initialize() public {
TransparentUpgradeableProxy erc721proxy = new TransparentUpgradeableProxy(
- address(new ERC721AB()),
+ address(new ERC721ABLE()),
address(proxyAdmin),
""
);
- nft = ERC721AB(address(erc721proxy));
+ nft = ERC721ABLE(address(erc721proxy));
nft.initialize(publisher, address(abDataRegistry), address(abVerifier), NAME);
assertEq(address(nft.abDataRegistry()), address(abDataRegistry));
@@ -822,6 +822,46 @@ contract ERC721ABTest is Test, ERC721ABTestData {
assertEq(publisher.balance, expectedPublisherBalance);
}
+ function test_withdrawToRightholder_dropSpecific_allToPublisher(uint256 _amount) public {
+ vm.assume(_amount > 10);
+ vm.assume(_amount < 1e30);
+ vm.deal(address(nft), _amount);
+
+ vm.prank(publisher);
+ nft.initDrop(SUPPLY, SHARE_PER_TOKEN, MINT_GENESIS, genesisRecipient, address(royaltyToken), URI);
+
+ abDataRegistry.setDropFee(true, nft.dropId(), 10_000);
+
+ vm.prank(publisher);
+ nft.withdrawToRightholder();
+
+ uint256 expectedPublisherBalance = _amount;
+ uint256 expectedTreasuryBalance = 0;
+
+ assertEq(treasury.balance, expectedTreasuryBalance);
+ assertEq(publisher.balance, expectedPublisherBalance);
+ }
+
+ function test_withdrawToRightholder_dropSpecific_allToTreasury(uint256 _amount) public {
+ vm.assume(_amount > 10);
+ vm.assume(_amount < 1e30);
+ vm.deal(address(nft), _amount);
+
+ vm.prank(publisher);
+ nft.initDrop(SUPPLY, SHARE_PER_TOKEN, MINT_GENESIS, genesisRecipient, address(royaltyToken), URI);
+
+ abDataRegistry.setDropFee(true, nft.dropId(), 0);
+
+ vm.prank(publisher);
+ nft.withdrawToRightholder();
+
+ uint256 expectedPublisherBalance = 0;
+ uint256 expectedTreasuryBalance = _amount;
+
+ assertEq(treasury.balance, expectedTreasuryBalance);
+ assertEq(publisher.balance, expectedPublisherBalance);
+ }
+
function test_withdrawToRightholder_invalidParameter(uint256 _amount) public {
vm.assume(_amount > 10);
vm.assume(_amount < 1e30);
diff --git a/test/token/ERC721/ERC721ABOE.t.sol b/test/token/ERC721/ERC721ABOE.t.sol
new file mode 100644
index 0000000..a5ad40b
--- /dev/null
+++ b/test/token/ERC721/ERC721ABOE.t.sol
@@ -0,0 +1,819 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.18;
+
+import "forge-std/Test.sol";
+
+import {ERC721ABOE} from "src/token/ERC721/ERC721ABOE.sol";
+import {ERC1155AB} from "src/token/ERC1155/ERC1155AB.sol";
+import {ABDataRegistry} from "src/utils/ABDataRegistry.sol";
+import {AnotherCloneFactory} from "src/factory/AnotherCloneFactory.sol";
+import {ABVerifier} from "src/utils/ABVerifier.sol";
+import {ABRoyalty} from "src/royalty/ABRoyalty.sol";
+import {ABDataTypes} from "src/libraries/ABDataTypes.sol";
+import {ABErrors} from "src/libraries/ABErrors.sol";
+
+import {ABSuperToken} from "test/_mocks/ABSuperToken.sol";
+import {MockToken} from "test/_mocks/MockToken.sol";
+import {ERC721ABOETestData} from "test/_testdata/ERC721ABOE.td.sol";
+
+import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
+import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
+import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
+import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
+
+contract ERC721ABOETest is Test, ERC721ABOETestData {
+ using ECDSA for bytes32;
+
+ /* Admin */
+ uint256 public abSignerPkey = 69;
+ address public abSigner;
+ address public genesisRecipient;
+ address payable public treasury;
+
+ /* Users */
+ address payable public alice;
+ address payable public bob;
+ address payable public publisher;
+
+ /* Contracts */
+ ABVerifier public abVerifier;
+ ABSuperToken public royaltyToken;
+ MockToken public mockToken;
+ ABDataRegistry public abDataRegistry;
+ AnotherCloneFactory public anotherCloneFactory;
+ ABRoyalty public royaltyImpl;
+ ERC721ABOE public erc721Impl;
+ ERC721ABOE public erc721OEImpl;
+ ERC1155AB public erc1155Impl;
+ ProxyAdmin public proxyAdmin;
+ TransparentUpgradeableProxy public anotherCloneFactoryProxy;
+ TransparentUpgradeableProxy public abDataRegistryProxy;
+ TransparentUpgradeableProxy public abVerifierProxy;
+
+ ERC721ABOE public nft;
+
+ uint256 public constant DROP_ID_OFFSET = 10_000;
+
+ /* Environment Variables */
+ string BASE_RPC_URL = vm.envString("BASE_RPC");
+
+ function setUp() public {
+ vm.selectFork(vm.createFork(BASE_RPC_URL));
+
+ /* Setup admins */
+ abSigner = vm.addr(abSignerPkey);
+ genesisRecipient = vm.addr(100);
+
+ /* Setup users */
+ alice = payable(vm.addr(1));
+ bob = payable(vm.addr(2));
+ publisher = payable(vm.addr(5));
+ treasury = payable(vm.addr(1000));
+
+ vm.deal(alice, 100 ether);
+ vm.deal(bob, 100 ether);
+
+ vm.label(alice, "alice");
+ vm.label(bob, "bob");
+ vm.label(publisher, "publisher");
+ vm.label(treasury, "treasury");
+
+ /* Contracts Deployments */
+ proxyAdmin = new ProxyAdmin();
+
+ mockToken = new MockToken(MOCK_TOKEN_NAME, MOCK_TOKEN_SYMBOL);
+ vm.label(address(mockToken), "mockToken");
+ mockToken.mint(alice, 100e18);
+ mockToken.mint(bob, 100e18);
+
+ royaltyToken = new ABSuperToken(SF_HOST);
+ royaltyToken.initialize(IERC20(address(0)), 18, "fakeSuperToken", "FST");
+ vm.label(address(royaltyToken), "royaltyToken");
+
+ abVerifierProxy = new TransparentUpgradeableProxy(
+ address(new ABVerifier()),
+ address(proxyAdmin),
+ abi.encodeWithSelector(ABVerifier.initialize.selector, abSigner)
+ );
+ abVerifier = ABVerifier(address(abVerifierProxy));
+ vm.label(address(abVerifier), "abVerifier");
+
+ erc1155Impl = new ERC1155AB();
+ vm.label(address(erc1155Impl), "erc1155Impl");
+
+ erc721Impl = new ERC721ABOE();
+ vm.label(address(erc721Impl), "erc721Impl");
+
+ erc721OEImpl = new ERC721ABOE();
+ vm.label(address(erc721OEImpl), "erc721OEImpl");
+
+ royaltyImpl = new ABRoyalty();
+ vm.label(address(royaltyImpl), "royaltyImpl");
+
+ abDataRegistryProxy = new TransparentUpgradeableProxy(
+ address(new ABDataRegistry()),
+ address(proxyAdmin),
+ abi.encodeWithSelector(ABDataRegistry.initialize.selector, DROP_ID_OFFSET, treasury)
+ );
+
+ abDataRegistry = ABDataRegistry(address(abDataRegistryProxy));
+ vm.label(address(abDataRegistry), "abDataRegistry");
+
+ anotherCloneFactoryProxy = new TransparentUpgradeableProxy(
+ address(new AnotherCloneFactory()),
+ address(proxyAdmin),
+ abi.encodeWithSelector(AnotherCloneFactory.initialize.selector,
+ address(abDataRegistry),
+ address(abVerifier),
+ address(erc721Impl),
+ address(erc1155Impl),
+ address(royaltyImpl)
+ )
+ );
+
+ anotherCloneFactory = AnotherCloneFactory(address(anotherCloneFactoryProxy));
+
+ vm.label(address(anotherCloneFactory), "anotherCloneFactory");
+
+ /* Setup Access Control Roles */
+ anotherCloneFactory.grantRole(AB_ADMIN_ROLE_HASH, address(this));
+
+ /* Init contracts params */
+ abDataRegistry.grantRole(keccak256("FACTORY_ROLE"), address(anotherCloneFactory));
+
+ anotherCloneFactory.createPublisherProfile(publisher, PUBLISHER_FEE);
+
+ anotherCloneFactory.createCollection721FromImplementation(address(erc721OEImpl), publisher, NAME, SALT);
+
+ (address nftAddr,) = anotherCloneFactory.collections(0);
+
+ nft = ERC721ABOE(nftAddr);
+ }
+
+ function test_initialize() public {
+ TransparentUpgradeableProxy erc721proxy = new TransparentUpgradeableProxy(
+ address(new ERC721ABOE()),
+ address(proxyAdmin),
+ ""
+ );
+
+ nft = ERC721ABOE(address(erc721proxy));
+ nft.initialize(publisher, address(abDataRegistry), address(abVerifier), NAME);
+
+ assertEq(address(nft.abDataRegistry()), address(abDataRegistry));
+ assertEq(address(nft.abVerifier()), address(abVerifier));
+ assertEq(nft.publisher(), publisher);
+ }
+
+ function test_initialize_alreadyInitialized() public {
+ vm.expectRevert("ERC721A__Initializable: contract is already initialized");
+ nft.initialize(address(this), address(abDataRegistry), address(abVerifier), NAME);
+ }
+
+ function test_initDrop_owner() public {
+ vm.prank(publisher);
+
+ nft.initDrop(SHARE_PER_TOKEN, MINT_GENESIS, genesisRecipient, address(royaltyToken), URI);
+
+ uint256 dropId = nft.dropId();
+ assertEq(dropId, DROP_ID_OFFSET + 1);
+
+ assertEq(nft.balanceOf(genesisRecipient), MINT_GENESIS);
+
+ string memory currentURI = nft.tokenURI(1);
+ assertEq(keccak256(abi.encodePacked(currentURI)), keccak256(abi.encodePacked(URI, "1")));
+ }
+
+ function test_initDrop_noRoyaltyNFT() public {
+ vm.prank(publisher);
+
+ nft.initDrop(0, MINT_GENESIS, genesisRecipient, address(0), URI);
+
+ uint256 dropId = nft.dropId();
+ assertEq(dropId, DROP_ID_OFFSET + 1);
+
+ uint256 sharePerToken = nft.sharePerToken();
+ assertEq(sharePerToken, 0);
+
+ assertEq(nft.balanceOf(genesisRecipient), MINT_GENESIS);
+
+ string memory currentURI = nft.tokenURI(1);
+ assertEq(keccak256(abi.encodePacked(currentURI)), keccak256(abi.encodePacked(URI, "1")));
+ }
+
+ function test_initDrop_alreadyInitialized() public {
+ vm.startPrank(publisher);
+ nft.initDrop(SHARE_PER_TOKEN, MINT_GENESIS, genesisRecipient, address(royaltyToken), URI);
+
+ vm.expectRevert(ABErrors.DROP_ALREADY_INITIALIZED.selector);
+ nft.initDrop(SHARE_PER_TOKEN, MINT_GENESIS, genesisRecipient, address(royaltyToken), URI);
+ vm.stopPrank();
+ }
+
+ function test_initDrop_noGenesisMint() public {
+ vm.prank(publisher);
+ nft.initDrop(SHARE_PER_TOKEN, 0, genesisRecipient, address(royaltyToken), URI);
+
+ assertEq(nft.balanceOf(genesisRecipient), 0);
+ }
+
+ function test_initDrop_nonOwner() public {
+ vm.prank(alice);
+ vm.expectRevert();
+ nft.initDrop(SHARE_PER_TOKEN, MINT_GENESIS, genesisRecipient, address(royaltyToken), URI);
+ }
+
+ function test_initDrop_invalidSharePerToken() public {
+ vm.expectRevert(ABErrors.INVALID_PARAMETER.selector);
+ vm.prank(publisher);
+
+ nft.initDrop(0, MINT_GENESIS, genesisRecipient, address(royaltyToken), URI);
+ }
+
+ function test_initDrop_invalidRoyaltyCurrency() public {
+ vm.expectRevert(ABErrors.INVALID_PARAMETER.selector);
+ vm.prank(publisher);
+
+ nft.initDrop(SHARE_PER_TOKEN, MINT_GENESIS, genesisRecipient, address(0), URI);
+ }
+
+ function test_setBaseURI_owner() public {
+ vm.startPrank(publisher);
+ nft.initDrop(SHARE_PER_TOKEN, MINT_GENESIS, genesisRecipient, address(royaltyToken), URI);
+
+ string memory currentURI = nft.tokenURI(1);
+ assertEq(keccak256(abi.encodePacked(currentURI)), keccak256(abi.encodePacked(URI, "1")));
+
+ string memory newURI = "http://new-uri.ipfs/";
+
+ nft.setBaseURI(newURI);
+ currentURI = nft.tokenURI(1);
+ assertEq(keccak256(abi.encodePacked(currentURI)), keccak256(abi.encodePacked(newURI, "1")));
+
+ vm.stopPrank();
+ }
+
+ function test_setBaseURI_nonOwner() public {
+ vm.prank(publisher);
+ nft.initDrop(SHARE_PER_TOKEN, MINT_GENESIS, genesisRecipient, address(royaltyToken), URI);
+
+ string memory newURI = "http://new-uri.ipfs/";
+
+ vm.prank(alice);
+
+ vm.expectRevert();
+ nft.setBaseURI(newURI);
+ }
+
+ function test_setDropPhases_owner_multiplePhases() public {
+ ABDataTypes.Phase memory phase0 = ABDataTypes.Phase(P0_START, P0_END, P0_PRICE, P0_MAX_MINT, PRIVATE_PHASE);
+ ABDataTypes.Phase memory phase1 = ABDataTypes.Phase(P1_START, P1_END, P1_PRICE, P1_MAX_MINT, PRIVATE_PHASE);
+ ABDataTypes.Phase memory phase2 = ABDataTypes.Phase(P2_START, P2_END, P2_PRICE, P2_MAX_MINT, PRIVATE_PHASE);
+ ABDataTypes.Phase[] memory phases = new ABDataTypes.Phase[](3);
+ phases[0] = phase0;
+ phases[1] = phase1;
+ phases[2] = phase2;
+
+ vm.prank(publisher);
+ nft.setDropPhases(phases);
+
+ (uint256 _P0_START, uint256 _P0_END, uint256 _P0_PRICE, uint256 _P0_MAX_MINT, bool _P0_PHASE_STATUS) =
+ nft.phases(0);
+ (uint256 _P1_START, uint256 _P1_END, uint256 _P1_PRICE, uint256 _P1_MAX_MINT, bool _P1_PHASE_STATUS) =
+ nft.phases(1);
+ (uint256 _P2_START, uint256 _P2_END, uint256 _P2_PRICE, uint256 _P2_MAX_MINT, bool _P2_PHASE_STATUS) =
+ nft.phases(2);
+
+ assertEq(_P0_START, P0_START);
+ assertEq(_P0_END, P0_END);
+ assertEq(_P0_PRICE, P0_PRICE);
+ assertEq(_P0_MAX_MINT, P0_MAX_MINT);
+ assertEq(_P0_PHASE_STATUS, PRIVATE_PHASE);
+
+ assertEq(_P1_START, P1_START);
+ assertEq(_P1_END, P1_END);
+ assertEq(_P1_PRICE, P1_PRICE);
+ assertEq(_P1_MAX_MINT, P1_MAX_MINT);
+ assertEq(_P1_PHASE_STATUS, PRIVATE_PHASE);
+
+ assertEq(_P2_START, P2_START);
+ assertEq(_P2_END, P2_END);
+ assertEq(_P2_PRICE, P2_PRICE);
+ assertEq(_P2_MAX_MINT, P2_MAX_MINT);
+ assertEq(_P2_PHASE_STATUS, PRIVATE_PHASE);
+ }
+
+ function test_setDropPhases_owner_onePhase() public {
+ ABDataTypes.Phase memory phase0 = ABDataTypes.Phase(P0_START, P0_END, P0_PRICE, P0_MAX_MINT, PRIVATE_PHASE);
+ ABDataTypes.Phase[] memory phases = new ABDataTypes.Phase[](1);
+ phases[0] = phase0;
+
+ vm.prank(publisher);
+ nft.setDropPhases(phases);
+
+ (uint256 _P0_START, uint256 _P0_END, uint256 _P0_PRICE, uint256 _P0_MAX_MINT, bool _P0_PHASE_STATUS) =
+ nft.phases(0);
+
+ assertEq(_P0_START, P0_START);
+ assertEq(_P0_END, P0_END);
+ assertEq(_P0_PRICE, P0_PRICE);
+ assertEq(_P0_MAX_MINT, P0_MAX_MINT);
+ assertEq(_P0_PHASE_STATUS, PRIVATE_PHASE);
+ }
+
+ function test_setDropPhases_owner_rewritePhasesManyToOne() public {
+ ABDataTypes.Phase memory phase0 = ABDataTypes.Phase(P0_START, P0_END, P0_PRICE, P0_MAX_MINT, PRIVATE_PHASE);
+ ABDataTypes.Phase memory phase1 = ABDataTypes.Phase(P1_START, P1_END, P1_PRICE, P1_MAX_MINT, PRIVATE_PHASE);
+ ABDataTypes.Phase memory phase2 = ABDataTypes.Phase(P2_START, P2_END, P2_PRICE, P2_MAX_MINT, PRIVATE_PHASE);
+ ABDataTypes.Phase[] memory phases = new ABDataTypes.Phase[](3);
+ phases[0] = phase0;
+ phases[1] = phase1;
+ phases[2] = phase2;
+
+ vm.prank(publisher);
+ nft.setDropPhases(phases);
+
+ (uint256 _START, uint256 _END, uint256 _PRICE, uint256 _MAX_MINT, bool _PHASE_STATUS) = nft.phases(0);
+
+ assertEq(_START, P0_START);
+ assertEq(_END, P0_END);
+ assertEq(_PRICE, P0_PRICE);
+ assertEq(_MAX_MINT, P0_MAX_MINT);
+ assertEq(_PHASE_STATUS, PRIVATE_PHASE);
+
+ (_START, _END, _PRICE, _MAX_MINT, _PHASE_STATUS) = nft.phases(1);
+
+ assertEq(_START, P1_START);
+ assertEq(_END, P1_END);
+ assertEq(_PRICE, P1_PRICE);
+ assertEq(_MAX_MINT, P1_MAX_MINT);
+ assertEq(_PHASE_STATUS, PRIVATE_PHASE);
+
+ (_START, _END, _PRICE, _MAX_MINT, _PHASE_STATUS) = nft.phases(2);
+
+ assertEq(_START, P2_START);
+ assertEq(_END, P2_END);
+ assertEq(_PRICE, P2_PRICE);
+ assertEq(_MAX_MINT, P2_MAX_MINT);
+ assertEq(_PHASE_STATUS, PRIVATE_PHASE);
+
+ phases = new ABDataTypes.Phase[](1);
+ phases[0] = phase0;
+
+ vm.prank(publisher);
+ nft.setDropPhases(phases);
+
+ (_START, _END, _PRICE, _MAX_MINT, _PHASE_STATUS) = nft.phases(0);
+
+ assertEq(_START, P0_START);
+ assertEq(_END, P0_END);
+ assertEq(_PRICE, P0_PRICE);
+ assertEq(_MAX_MINT, P0_MAX_MINT);
+ assertEq(_PHASE_STATUS, PRIVATE_PHASE);
+
+ vm.expectRevert();
+ (_START, _END, _PRICE, _MAX_MINT, _PHASE_STATUS) = nft.phases(1);
+ }
+
+ function test_setDropPhases_owner_rewritePhasesOneToMany() public {
+ ABDataTypes.Phase memory phase0 = ABDataTypes.Phase(P0_START, P0_END, P0_PRICE, P0_MAX_MINT, PRIVATE_PHASE);
+ ABDataTypes.Phase[] memory phases = new ABDataTypes.Phase[](1);
+ phases[0] = phase0;
+
+ vm.prank(publisher);
+ nft.setDropPhases(phases);
+
+ (uint256 _START, uint256 _END, uint256 _PRICE, uint256 _MAX_MINT, bool _PHASE_STATUS) = nft.phases(0);
+
+ assertEq(_START, P0_START);
+ assertEq(_END, P0_END);
+ assertEq(_PRICE, P0_PRICE);
+ assertEq(_MAX_MINT, P0_MAX_MINT);
+ assertEq(_PHASE_STATUS, PRIVATE_PHASE);
+
+ ABDataTypes.Phase memory phase1 = ABDataTypes.Phase(P1_START, P1_END, P1_PRICE, P1_MAX_MINT, PRIVATE_PHASE);
+ ABDataTypes.Phase memory phase2 = ABDataTypes.Phase(P2_START, P2_END, P2_PRICE, P2_MAX_MINT, PRIVATE_PHASE);
+ phases = new ABDataTypes.Phase[](3);
+ phases[0] = phase0;
+ phases[1] = phase1;
+ phases[2] = phase2;
+
+ vm.prank(publisher);
+ nft.setDropPhases(phases);
+
+ (_START, _END, _PRICE, _MAX_MINT, _PHASE_STATUS) = nft.phases(0);
+
+ assertEq(_START, P0_START);
+ assertEq(_END, P0_END);
+ assertEq(_PRICE, P0_PRICE);
+ assertEq(_MAX_MINT, P0_MAX_MINT);
+ assertEq(_PHASE_STATUS, PRIVATE_PHASE);
+
+ (_START, _END, _PRICE, _MAX_MINT, _PHASE_STATUS) = nft.phases(1);
+
+ assertEq(_START, P1_START);
+ assertEq(_END, P1_END);
+ assertEq(_PRICE, P1_PRICE);
+ assertEq(_MAX_MINT, P1_MAX_MINT);
+ assertEq(_PHASE_STATUS, PRIVATE_PHASE);
+
+ (_START, _END, _PRICE, _MAX_MINT, _PHASE_STATUS) = nft.phases(2);
+
+ assertEq(_START, P2_START);
+ assertEq(_END, P2_END);
+ assertEq(_PRICE, P2_PRICE);
+ assertEq(_MAX_MINT, P2_MAX_MINT);
+ assertEq(_PHASE_STATUS, PRIVATE_PHASE);
+ }
+
+ function test_setDropPhases_incorrectPhaseOrder() public {
+ ABDataTypes.Phase memory phase0 = ABDataTypes.Phase(P0_START, P0_END, P0_PRICE, P0_MAX_MINT, PRIVATE_PHASE);
+ ABDataTypes.Phase memory phase1 = ABDataTypes.Phase(P1_START, P1_END, P1_PRICE, P1_MAX_MINT, PRIVATE_PHASE);
+
+ ABDataTypes.Phase[] memory phases = new ABDataTypes.Phase[](2);
+ phases[0] = phase1;
+ phases[1] = phase0;
+
+ vm.prank(publisher);
+ vm.expectRevert(ABErrors.INVALID_PARAMETER.selector);
+ nft.setDropPhases(phases);
+ }
+
+ function test_setDropPhases_nonOwner() public {
+ ABDataTypes.Phase memory phase0 = ABDataTypes.Phase(P0_START, P0_END, P0_PRICE, P0_MAX_MINT, PRIVATE_PHASE);
+ ABDataTypes.Phase[] memory phases = new ABDataTypes.Phase[](1);
+ phases[0] = phase0;
+
+ vm.prank(bob);
+
+ vm.expectRevert();
+ nft.setDropPhases(phases);
+ }
+
+ function test_mint() public {
+ vm.startPrank(publisher);
+ nft.initDrop(SHARE_PER_TOKEN, MINT_GENESIS, genesisRecipient, address(royaltyToken), URI);
+
+ // Set block.timestamp to be after the start of Phase 0
+ vm.warp(P0_START + 1);
+
+ // Set the phases
+ ABDataTypes.Phase memory phase0 = ABDataTypes.Phase(P0_START, P0_END, PRICE, P0_MAX_MINT, PRIVATE_PHASE);
+ ABDataTypes.Phase[] memory phases = new ABDataTypes.Phase[](1);
+ phases[0] = phase0;
+ nft.setDropPhases(phases);
+ vm.stopPrank();
+
+ // Create signature for `alice` dropId 0 and phaseId 0
+ bytes memory signature = _generateBackendSignature(alice, address(nft), PHASE_ID_0);
+
+ // Impersonate `alice`
+ vm.prank(alice);
+ nft.mint{value: PRICE}(alice, PHASE_ID_0, 1, signature);
+ assertEq(nft.balanceOf(alice), 1);
+ }
+
+ function test_mint_noPhaseSet() public {
+ vm.prank(publisher);
+ nft.initDrop(SHARE_PER_TOKEN, MINT_GENESIS, genesisRecipient, address(royaltyToken), URI);
+
+ uint256 aliceMintQty = 3;
+
+ // Create signature for `alice` dropId 0 and phaseId 0
+ bytes memory signature = _generateBackendSignature(alice, address(nft), PHASE_ID_0);
+
+ vm.prank(alice);
+ vm.expectRevert();
+ nft.mint{value: PRICE * aliceMintQty}(alice, PHASE_ID_0, aliceMintQty, signature);
+ }
+
+ function test_mint_incorrectETHSent() public {
+ vm.startPrank(publisher);
+ nft.initDrop(SHARE_PER_TOKEN, MINT_GENESIS, genesisRecipient, address(royaltyToken), URI);
+
+ // Set block.timestamp to be after the start of Phase 0
+ vm.warp(P0_START + 1);
+
+ // Set the phases
+ ABDataTypes.Phase memory phase0 = ABDataTypes.Phase(P0_START, P0_END, PRICE, 10, PRIVATE_PHASE);
+ ABDataTypes.Phase[] memory phases = new ABDataTypes.Phase[](1);
+ phases[0] = phase0;
+ nft.setDropPhases(phases);
+
+ vm.stopPrank();
+
+ // Create signature for `alice` dropId 0 and phaseId 0
+ bytes memory signature = _generateBackendSignature(alice, address(nft), PHASE_ID_0);
+
+ // Impersonate `alice`
+ vm.startPrank(alice);
+
+ uint256 mintQty = 4;
+
+ uint256 tooHighPrice = PRICE * (mintQty + 1);
+ uint256 tooLowPrice = PRICE * (mintQty - 1);
+
+ vm.expectRevert(ABErrors.INCORRECT_ETH_SENT.selector);
+ nft.mint{value: tooHighPrice}(alice, PHASE_ID_0, mintQty, signature);
+
+ vm.expectRevert(ABErrors.INCORRECT_ETH_SENT.selector);
+ nft.mint{value: tooLowPrice}(alice, PHASE_ID_0, mintQty, signature);
+
+ vm.stopPrank();
+ }
+
+ function test_mint_phaseNotActive() public {
+ vm.startPrank(publisher);
+ nft.initDrop(SHARE_PER_TOKEN, MINT_GENESIS, genesisRecipient, address(royaltyToken), URI);
+
+ // Set block.timestamp to be before the start of Phase 0
+ vm.warp(P0_START - 1);
+
+ // Set the phases
+ ABDataTypes.Phase memory phase0 = ABDataTypes.Phase(P0_START, P0_END, PRICE, 10, PRIVATE_PHASE);
+ ABDataTypes.Phase[] memory phases = new ABDataTypes.Phase[](1);
+ phases[0] = phase0;
+ nft.setDropPhases(phases);
+
+ vm.stopPrank();
+
+ // Create signature for `alice` dropId 0 and phaseId 0
+ bytes memory signature = _generateBackendSignature(alice, address(nft), PHASE_ID_0);
+
+ // Impersonate `alice`
+ vm.startPrank(alice);
+
+ uint256 mintQty = 4;
+
+ vm.expectRevert(ABErrors.PHASE_NOT_ACTIVE.selector);
+ nft.mint{value: PRICE * mintQty}(alice, PHASE_ID_0, mintQty, signature);
+
+ vm.stopPrank();
+ }
+
+ function test_mint_notEligible() public {
+ vm.startPrank(publisher);
+ nft.initDrop(SHARE_PER_TOKEN, MINT_GENESIS, genesisRecipient, address(royaltyToken), URI);
+
+ // Set block.timestamp to be after the start of Phase 0
+ vm.warp(P0_START + 1);
+
+ // Set the phases
+ ABDataTypes.Phase memory phase0 = ABDataTypes.Phase(P0_START, P0_END, PRICE, 10, PRIVATE_PHASE);
+ ABDataTypes.Phase[] memory phases = new ABDataTypes.Phase[](1);
+ phases[0] = phase0;
+ nft.setDropPhases(phases);
+
+ vm.stopPrank();
+
+ // Impersonate `alice`
+ vm.startPrank(alice);
+
+ uint256 mintQty = 4;
+
+ bytes memory invalidSignature = _generateInvalidSignature(alice, address(nft), PHASE_ID_0);
+
+ vm.expectRevert(ABErrors.NOT_ELIGIBLE.selector);
+ nft.mint{value: PRICE * mintQty}(alice, PHASE_ID_0, mintQty, invalidSignature);
+
+ vm.stopPrank();
+ }
+
+ function test_mint_public() public {
+ vm.startPrank(publisher);
+ nft.initDrop(SHARE_PER_TOKEN, MINT_GENESIS, genesisRecipient, address(royaltyToken), URI);
+
+ // Set block.timestamp to be after the start of Phase 0
+ vm.warp(P0_START + 1);
+
+ // Set the phases
+ ABDataTypes.Phase memory phase0 = ABDataTypes.Phase(P0_START, P0_END, PRICE, 10, PUBLIC_PHASE);
+ ABDataTypes.Phase[] memory phases = new ABDataTypes.Phase[](1);
+ phases[0] = phase0;
+ nft.setDropPhases(phases);
+
+ vm.stopPrank();
+
+ // Impersonate `alice`
+ vm.startPrank(alice);
+
+ uint256 mintQty = 4;
+
+ nft.mint{value: PRICE * mintQty}(alice, PHASE_ID_0, mintQty, "");
+
+ assertEq(nft.balanceOf(alice), mintQty);
+
+ vm.stopPrank();
+ }
+
+ function test_setSharePerToken_admin(uint256 _newShare) public {
+ vm.assume(_newShare != SHARE_PER_TOKEN);
+ vm.assume(_newShare < 1_000_000);
+
+ vm.startPrank(publisher);
+ nft.initDrop(SHARE_PER_TOKEN, MINT_GENESIS, genesisRecipient, address(royaltyToken), URI);
+
+ assertEq(nft.sharePerToken(), SHARE_PER_TOKEN);
+
+ nft.setSharePerToken(_newShare);
+
+ assertEq(nft.sharePerToken(), _newShare);
+ vm.stopPrank();
+ }
+
+ function test_setSharePerToken_nonAdmin(address _nonAdmin, uint256 _newShare) public {
+ vm.assume(_newShare != SHARE_PER_TOKEN);
+ vm.assume(_newShare < 1_000_000);
+ vm.assume(_nonAdmin != address(this));
+ vm.assume(_nonAdmin != publisher);
+
+ vm.prank(publisher);
+ nft.initDrop(SHARE_PER_TOKEN, MINT_GENESIS, genesisRecipient, address(royaltyToken), URI);
+
+ assertEq(nft.sharePerToken(), SHARE_PER_TOKEN);
+
+ vm.prank(_nonAdmin);
+ vm.expectRevert();
+ nft.setSharePerToken(_newShare);
+ }
+
+ function test_withdrawERC20_admin() public {
+ vm.prank(alice);
+ mockToken.transfer(address(nft), 10e18);
+
+ assertEq(mockToken.balanceOf(publisher), 0);
+ assertEq(mockToken.balanceOf(address(nft)), 10e18);
+
+ vm.prank(publisher);
+ nft.withdrawERC20(address(mockToken), 10e18);
+
+ assertEq(mockToken.balanceOf(publisher), 10e18);
+ assertEq(mockToken.balanceOf(address(nft)), 0);
+ }
+
+ function test_withdrawERC20_nonAdmin(address _nonAdmin) public {
+ vm.assume(_nonAdmin != address(this));
+ vm.assume(_nonAdmin != publisher);
+
+ vm.prank(alice);
+ mockToken.transfer(address(nft), 10e18);
+
+ vm.prank(_nonAdmin);
+ vm.expectRevert();
+ nft.withdrawERC20(address(mockToken), 10e18);
+ }
+
+ function test_withdrawToRightholder(uint256 _amount) public {
+ vm.assume(_amount > 10);
+ vm.assume(_amount < 1e30);
+ vm.deal(address(nft), _amount);
+
+ vm.prank(publisher);
+ nft.withdrawToRightholder();
+
+ uint256 expectedPublisherBalance = _amount * PUBLISHER_FEE / 10_000;
+ uint256 expectedTreasuryBalance = _amount - expectedPublisherBalance;
+
+ assertEq(treasury.balance, expectedTreasuryBalance);
+ assertEq(publisher.balance, expectedPublisherBalance);
+ }
+
+ function test_withdrawToRightholder_allToPublisher(uint256 _amount) public {
+ vm.assume(_amount > 10);
+ vm.assume(_amount < 1e30);
+ vm.deal(address(nft), _amount);
+
+ abDataRegistry.setPublisherFee(publisher, 10_000);
+
+ vm.prank(publisher);
+ nft.withdrawToRightholder();
+
+ uint256 expectedPublisherBalance = _amount;
+ uint256 expectedTreasuryBalance = 0;
+
+ assertEq(treasury.balance, expectedTreasuryBalance);
+ assertEq(publisher.balance, expectedPublisherBalance);
+ }
+
+ function test_withdrawToRightholder_allToTreasury(uint256 _amount) public {
+ vm.assume(_amount > 10);
+ vm.assume(_amount < 1e30);
+ vm.deal(address(nft), _amount);
+
+ abDataRegistry.setPublisherFee(publisher, 0);
+
+ vm.prank(publisher);
+ nft.withdrawToRightholder();
+
+ uint256 expectedPublisherBalance = 0;
+ uint256 expectedTreasuryBalance = _amount;
+
+ assertEq(treasury.balance, expectedTreasuryBalance);
+ assertEq(publisher.balance, expectedPublisherBalance);
+ }
+
+ function test_withdrawToRightholder_invalidParameter(uint256 _amount) public {
+ vm.assume(_amount > 10);
+ vm.assume(_amount < 1e30);
+ vm.deal(address(nft), _amount);
+
+ abDataRegistry.setTreasury(address(0));
+
+ vm.prank(publisher);
+ vm.expectRevert(ABErrors.INVALID_PARAMETER.selector);
+ nft.withdrawToRightholder();
+ }
+
+ function test_withdrawToRightholder_nonAdmin(address _sender, uint256 _amount) public {
+ vm.assume(_amount > 10);
+ vm.assume(_amount < 1e30);
+ vm.assume(nft.owner() != _sender);
+
+ vm.deal(address(nft), _amount);
+
+ vm.prank(_sender);
+ vm.expectRevert();
+ nft.withdrawToRightholder();
+ }
+
+ function test_symbol_initialized() public {
+ vm.startPrank(publisher);
+ nft.initDrop(SHARE_PER_TOKEN, 2, genesisRecipient, address(royaltyToken), URI);
+
+ string memory symbol = nft.symbol();
+
+ assertEq(keccak256(abi.encodePacked(symbol)) == keccak256(abi.encodePacked("AB10001")), true);
+ }
+
+ function test_symbol_notInitialized() public {
+ string memory symbol = nft.symbol();
+
+ assertEq(keccak256(abi.encodePacked(symbol)) == keccak256(abi.encodePacked("")), true);
+ }
+
+ function test_tokenURI_nonUnique() public {
+ string memory tokenURI = "metadata.io/";
+
+ vm.prank(publisher);
+ nft.initDrop(SHARE_PER_TOKEN, MINT_GENESIS, genesisRecipient, address(royaltyToken), tokenURI);
+
+ string memory returnedTokenURI = nft.tokenURI(1);
+ assertEq(keccak256(abi.encodePacked(returnedTokenURI)) == keccak256(abi.encodePacked("metadata.io/1")), true);
+ }
+
+ function test_tokenURI_unique() public {
+ string memory tokenURI = "metadata.io";
+
+ vm.prank(publisher);
+ nft.initDrop(SHARE_PER_TOKEN, MINT_GENESIS, genesisRecipient, address(royaltyToken), tokenURI);
+
+ string memory returnedTokenURI = nft.tokenURI(1);
+ assertEq(keccak256(abi.encodePacked(returnedTokenURI)) == keccak256(abi.encodePacked("metadata.io")), true);
+ }
+
+ function test_tokenURI_empty() public {
+ string memory tokenURI = "";
+
+ vm.prank(publisher);
+ nft.initDrop(SHARE_PER_TOKEN, MINT_GENESIS, genesisRecipient, address(royaltyToken), tokenURI);
+
+ string memory returnedTokenURI = nft.tokenURI(1);
+ assertEq(keccak256(abi.encodePacked(returnedTokenURI)) == keccak256(abi.encodePacked("")), true);
+ }
+
+ function test_tokenURI_unminted() public {
+ string memory tokenURI = "metadata.io/";
+
+ vm.prank(publisher);
+ nft.initDrop(SHARE_PER_TOKEN, 0, genesisRecipient, address(royaltyToken), tokenURI);
+
+ vm.expectRevert(ABErrors.INVALID_PARAMETER.selector);
+ nft.tokenURI(1);
+ }
+
+ /* ******************************************************************************************/
+ /* UTILITY FUNCTIONS */
+ /* ******************************************************************************************/
+
+ function _generateBackendSignature(address _signFor, address _collection, uint256 _phaseId)
+ internal
+ view
+ returns (bytes memory signature)
+ {
+ // Create signature for user `signFor` for drop ID `_dropId` and phase ID `_phaseId`
+ bytes32 msgHash = keccak256(abi.encodePacked(_signFor, _collection, _phaseId)).toEthSignedMessageHash();
+ (uint8 v, bytes32 r, bytes32 s) = vm.sign(abSignerPkey, msgHash);
+ signature = abi.encodePacked(r, s, v);
+ }
+
+ function _generateInvalidSignature(address _signFor, address _collection, uint256 _phaseId)
+ internal
+ pure
+ returns (bytes memory signature)
+ {
+ // Create signature for user `signFor` for drop ID `_dropId` and phase ID `_phaseId`
+ bytes32 msgHash = keccak256(abi.encodePacked(_signFor, _collection, _phaseId)).toEthSignedMessageHash();
+ (uint8 v, bytes32 r, bytes32 s) = vm.sign(1000, msgHash);
+ signature = abi.encodePacked(r, s, v);
+ }
+}
diff --git a/test/utils/ABDataRegistry.t.sol b/test/utils/ABDataRegistry.t.sol
index efc1e2e..cc76d0b 100644
--- a/test/utils/ABDataRegistry.t.sol
+++ b/test/utils/ABDataRegistry.t.sol
@@ -2,7 +2,6 @@
pragma solidity ^0.8.18;
import "forge-std/Test.sol";
-// import "forge-std/Console.sol";
import {ABDataRegistry} from "src/utils/ABDataRegistry.sol";
import {ABErrors} from "src/libraries/ABErrors.sol";
@@ -13,6 +12,7 @@ import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
+/* solhint-disable */
contract ABDataRegistryTest is Test {
/* Constants */
uint256 public constant DROP_ID_OFFSET = 100;
@@ -272,7 +272,24 @@ contract ABDataRegistryTest is Test {
vm.prank(_sender);
abDataRegistry.registerPublisher(_publisher, _royalty, _fee);
- (address treasury, uint256 fee) = abDataRegistry.getPayoutDetails(_publisher);
+ (address treasury, uint256 fee) = abDataRegistry.getPayoutDetails(_publisher, 0);
+
+ assertEq(fee, _fee);
+ assertEq(treasury, abTreasury);
+ }
+
+ function test_getPayoutDetails_dropSpecific(address _sender, address _publisher, uint256 _dropId, uint256 _fee)
+ public
+ {
+ vm.assume(_sender != address(proxyAdmin));
+ vm.assume(_fee <= 10_000);
+
+ abDataRegistry.grantRole(DEFAULT_ADMIN_ROLE_HASH, _sender);
+
+ vm.prank(_sender);
+ abDataRegistry.setDropFee(true, _dropId, _fee);
+
+ (address treasury, uint256 fee) = abDataRegistry.getPayoutDetails(_publisher, _dropId);
assertEq(fee, _fee);
assertEq(treasury, abTreasury);
@@ -291,6 +308,42 @@ contract ABDataRegistryTest is Test {
assertEq(fee, _fee);
}
+ function test_setDropFee_correctRole(address _sender, uint256 _dropId, uint256 _fee) public {
+ vm.assume(_sender != address(proxyAdmin));
+ vm.assume(_fee <= 10_000);
+
+ abDataRegistry.grantRole(DEFAULT_ADMIN_ROLE_HASH, _sender);
+
+ vm.prank(_sender);
+ abDataRegistry.setDropFee(true, _dropId, _fee);
+
+ uint256 fee = abDataRegistry.dropFees(_dropId);
+ bool hasDropFee = abDataRegistry.hasDropSpecificFees(_dropId);
+
+ assertEq(fee, _fee);
+ assertEq(hasDropFee, true);
+ }
+
+ function test_setDropFee_incorrectRole(address _sender, uint256 _dropId, uint256 _fee) public {
+ vm.assume(abDataRegistry.hasRole(DEFAULT_ADMIN_ROLE_HASH, _sender) == false);
+ vm.assume(_sender != address(proxyAdmin));
+
+ vm.prank(_sender);
+ vm.expectRevert();
+ abDataRegistry.setDropFee(true, _dropId, _fee);
+ }
+
+ function test_setDropFee_invalidParameter(address _sender, uint256 _dropId, uint256 _fee) public {
+ vm.assume(_sender != address(proxyAdmin));
+ vm.assume(_fee > 10_000);
+
+ abDataRegistry.grantRole(DEFAULT_ADMIN_ROLE_HASH, _sender);
+
+ vm.prank(_sender);
+ vm.expectRevert(ABErrors.INVALID_PARAMETER.selector);
+ abDataRegistry.setDropFee(true, _dropId, _fee);
+ }
+
function test_updatePublisher_correctRole(
address _sender,
address _publisher,
diff --git a/test/utils/ABVerifier.t.sol b/test/utils/ABVerifier.t.sol
index 8fba3cc..8373161 100644
--- a/test/utils/ABVerifier.t.sol
+++ b/test/utils/ABVerifier.t.sol
@@ -12,6 +12,7 @@ import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
+/* solhint-disable */
contract ABVerifierTest is Test, ABVerifierTestData {
using ECDSA for bytes32;