diff --git a/.gitignore b/.gitignore index 3c27f0b..8d8e512 100644 --- a/.gitignore +++ b/.gitignore @@ -3,11 +3,7 @@ cache/ out/ # Ignores development broadcast logs -!/broadcast -/broadcast/*/31337/ -/broadcast/**/dry-run/ -broadcast/ -contracts/broadcast/* +lib/ # Docs docs/ diff --git a/abi/UserRegistry.json b/abi/UserRegistry.json deleted file mode 100644 index 4eeb14b..0000000 --- a/abi/UserRegistry.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"accessManager","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"authority","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"banUser","inputs":[{"name":"_userAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getRegisteredUserIds","inputs":[],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getUserId","inputs":[{"name":"_address","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"isConsumingScheduledOp","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"isRegisteredUser","inputs":[{"name":"_address","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isUserBanned","inputs":[{"name":"_userAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"registerUser","inputs":[{"name":"_name","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setAuthority","inputs":[{"name":"newAuthority","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferUserId","inputs":[{"name":"_oldAddress","type":"address","internalType":"address"},{"name":"_newAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unbanUser","inputs":[{"name":"_userAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"users","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"id","type":"uint256","internalType":"uint256"},{"name":"name","type":"string","internalType":"string"},{"name":"isBanned","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"event","name":"AuthorityUpdated","inputs":[{"name":"authority","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"UserBanned","inputs":[{"name":"userAddress","type":"address","indexed":true,"internalType":"address"},{"name":"userId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"UserRegistered","inputs":[{"name":"userAddress","type":"address","indexed":true,"internalType":"address"},{"name":"userId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"UserUnbanned","inputs":[{"name":"userAddress","type":"address","indexed":true,"internalType":"address"},{"name":"userId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AccessManagedInvalidAuthority","inputs":[{"name":"authority","type":"address","internalType":"address"}]},{"type":"error","name":"AccessManagedRequiredDelay","inputs":[{"name":"caller","type":"address","internalType":"address"},{"name":"delay","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"AccessManagedUnauthorized","inputs":[{"name":"caller","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x608060405234801561001057600080fd5b506040516111c63803806111c683398101604081905261002f91610094565b8061003981610040565b50506100c4565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9060200160405180910390a150565b6000602082840312156100a657600080fd5b81516001600160a01b03811681146100bd57600080fd5b9392505050565b6110f3806100d36000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80637a9e5e4b116100715780637a9e5e4b146101665780638fb3603714610179578063998528291461019a5780639ed9b4fd146101af578063a87430ba146101c2578063bf7e214f146101e457600080fd5b806310d86b1f146100b95780631f5bdf5d146100ce5780632b956ff7146100f65780634d12b6951461012d57806369852c8a14610140578063704f1b9414610153575b600080fd5b6100cc6100c7366004610c71565b6101ff565b005b6100e16100dc366004610c71565b6102be565b60405190151581526020015b60405180910390f35b61011f610104366004610c71565b6001600160a01b031660009081526001602052604090205490565b6040519081526020016100ed565b6100cc61013b366004610c71565b6102db565b6100cc61014e366004610c8c565b6103e2565b6100cc610161366004610cd5565b610622565b6100cc610174366004610c71565b610739565b6101816107b3565b6040516001600160e01b031990911681526020016100ed565b6101a26107d9565b6040516100ed9190610d86565b6100e16101bd366004610c71565b6107e5565b6101d56101d0366004610c71565b61081d565b6040516100ed93929190610dee565b6000546040516001600160a01b0390911681526020016100ed565b61020c335b6000366108ca565b610215816102be565b61025c5760405162461bcd60e51b8152602060048201526013602482015272155cd95c881b9bdd081c9959da5cdd195c9959606a1b60448201526064015b60405180910390fd5b6001600160a01b03811660008181526001602081815260409283902060028101805460ff1916909317909255905491519182527fd47d10d20745ca261609da04f2be5d753e72753697166d0788294a90f63385ce91015b60405180910390a250565b6001600160a01b0316600090815260016020526040902054151590565b6102e433610204565b6102ed816102be565b61032f5760405162461bcd60e51b8152602060048201526013602482015272155cd95c881b9bdd081c9959da5cdd195c9959606a1b6044820152606401610253565b6001600160a01b03811660009081526001602052604090206002015460ff1661038c5760405162461bcd60e51b815260206004820152600f60248201526e155cd95c881b9bdd0818985b9b9959608a1b6044820152606401610253565b6001600160a01b03811660008181526001602090815260409182902060028101805460ff191690555491519182527fea171eb708881d69efb9931dcca95ea6827f6fb5a1471ff9f8eda431bc3175d691016102b3565b6103eb33610204565b6103f4826102be565b6104405760405162461bcd60e51b815260206004820152601a60248201527f4f6c642061646472657373206e6f7420726567697374657265640000000000006044820152606401610253565b610449816102be565b156104965760405162461bcd60e51b815260206004820152601e60248201527f4e6577206164647265737320616c7265616479207265676973746572656400006044820152606401610253565b6001600160a01b038216600090815260016020819052604082208054910180549192916104c290610e30565b80601f01602080910402602001604051908101604052809291908181526020018280546104ee90610e30565b801561053b5780601f106105105761010080835404028352916020019161053b565b820191906000526020600020905b81548152906001019060200180831161051e57829003601f168201915b5050506001600160a01b0387166000908152600160208190526040822082815594955090925061056e9150830182610bff565b50600201805460ff1916905560408051606081018252838152602080820184815260008385018190526001600160a01b038816815260019283905293909320825181559251919291908201906105c49082610ebb565b50604091820151600291909101805460ff1916911515919091179055518281526001600160a01b038416907fe29d35093005f4d575e1003753426b57a7f64378ba73332eef9c6ccc2b8decd69060200160405180910390a250505050565b336000908152600160205260409020541561067f5760405162461bcd60e51b815260206004820152601760248201527f5573657220616c726561647920726567697374657265640000000000000000006044820152606401610253565b600061068b60026109ca565b610696906001610f7b565b6040805160608101825282815260208082018681526000838501819052338152600192839052939093208251815592519394509092908201906106d99082610ebb565b50604091909101516002918201805460ff19169115159190911790556106ff90826109d4565b5060405181815233907fe29d35093005f4d575e1003753426b57a7f64378ba73332eef9c6ccc2b8decd69060200160405180910390a25050565b60005433906001600160a01b031681146107705760405162d1953b60e31b81526001600160a01b0382166004820152602401610253565b816001600160a01b03163b6000036107a6576040516361798f2f60e11b81526001600160a01b0383166004820152602401610253565b6107af826109e7565b5050565b60008054600160a01b900460ff166107cb5750600090565b638fb3603760e01b5b905090565b60606107d46002610a3b565b60006107f0826102be565b801561081757506001600160a01b03821660009081526001602052604090206002015460ff165b92915050565b60016020819052600091825260409091208054918101805461083e90610e30565b80601f016020809104026020016040519081016040528092919081815260200182805461086a90610e30565b80156108b75780601f1061088c576101008083540402835291602001916108b7565b820191906000526020600020905b81548152906001019060200180831161089a57829003601f168201915b5050506002909301549192505060ff1683565b6000806109006108e26000546001600160a01b031690565b86306108f260046000898b610f9c565b6108fb91610fc6565b610a48565b91509150816109c35763ffffffff8116156109a0576000805460ff60a01b198116600160a01b17909155604051634a63ebf760e11b81526001600160a01b03909116906394c7d7ee9061095b90889088908890600401610ff6565b600060405180830381600087803b15801561097557600080fd5b505af1158015610989573d6000803e3d6000fd5b50506000805460ff60a01b19169055506109c39050565b60405162d1953b60e31b81526001600160a01b0386166004820152602401610253565b5050505050565b6000610817825490565b60006109e08383610b54565b9392505050565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9060200160405180910390a150565b606060006109e083610ba3565b6040516001600160a01b03848116602483015283811660448301526001600160e01b03198316606483015260009182918291829189169060840160408051601f198184030181529181526020820180516001600160e01b031663b700961360e01b17905251610ab79190611036565b600060405180830381855afa9150503d8060008114610af2576040519150601f19603f3d011682016040523d82523d6000602084013e610af7565b606091505b50915091508115610b49576040815110610b295780806020019051810190610b1f9190611062565b9094509250610b49565b6020815110610b495780806020019051810190610b4691906110a2565b93505b505094509492505050565b6000818152600183016020526040812054610b9b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610817565b506000610817565b606081600001805480602002602001604051908101604052809291908181526020018280548015610bf357602002820191906000526020600020905b815481526020019060010190808311610bdf575b50505050509050919050565b508054610c0b90610e30565b6000825580601f10610c1b575050565b601f016020900490600052602060002090810190610c399190610c3c565b50565b5b80821115610c515760008155600101610c3d565b5090565b80356001600160a01b0381168114610c6c57600080fd5b919050565b600060208284031215610c8357600080fd5b6109e082610c55565b60008060408385031215610c9f57600080fd5b610ca883610c55565b9150610cb660208401610c55565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215610ce757600080fd5b813567ffffffffffffffff80821115610cff57600080fd5b818401915084601f830112610d1357600080fd5b813581811115610d2557610d25610cbf565b604051601f8201601f19908116603f01168101908382118183101715610d4d57610d4d610cbf565b81604052828152876020848701011115610d6657600080fd5b826020860160208301376000928101602001929092525095945050505050565b6020808252825182820181905260009190848201906040850190845b81811015610dbe57835183529284019291840191600101610da2565b50909695505050505050565b60005b83811015610de5578181015183820152602001610dcd565b50506000910152565b8381526060602082015260008351806060840152610e13816080850160208801610dca565b921515604083015250601f91909101601f19160160800192915050565b600181811c90821680610e4457607f821691505b602082108103610e6457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610eb6576000816000526020600020601f850160051c81016020861015610e935750805b601f850160051c820191505b81811015610eb257828155600101610e9f565b5050505b505050565b815167ffffffffffffffff811115610ed557610ed5610cbf565b610ee981610ee38454610e30565b84610e6a565b602080601f831160018114610f1e5760008415610f065750858301515b600019600386901b1c1916600185901b178555610eb2565b600085815260208120601f198616915b82811015610f4d57888601518255948401946001909101908401610f2e565b5085821015610f6b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082018082111561081757634e487b7160e01b600052601160045260246000fd5b60008085851115610fac57600080fd5b83861115610fb957600080fd5b5050820193919092039150565b6001600160e01b03198135818116916004851015610fee5780818660040360031b1b83161692505b505092915050565b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b60008251611048818460208701610dca565b9190910192915050565b80518015158114610c6c57600080fd5b6000806040838503121561107557600080fd5b61107e83611052565b9150602083015163ffffffff8116811461109757600080fd5b809150509250929050565b6000602082840312156110b457600080fd5b6109e08261105256fea26469706673582212203267b201bb0f536f0aa5a65d59ea463aed9554eefed98ccedfc0ad404c93f11f64736f6c63430008180033","sourceMap":"374:3826:36:-:0;;;927:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;976:13;1190:31:0;976:13:36;1190::0;:31::i;:::-;1142:86;927:67:36;374:3826;;3803:149:0;3875:10;:25;;-1:-1:-1;;;;;;3875:25:0;-1:-1:-1;;;;;3875:25:0;;;;;;;;3915:30;;455:51:40;;;3915:30:0;;443:2:40;428:18;3915:30:0;;;;;;;3803:149;:::o;14:290:40:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:40;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:40:o;309:203::-;374:3826:36;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80637a9e5e4b116100715780637a9e5e4b146101665780638fb3603714610179578063998528291461019a5780639ed9b4fd146101af578063a87430ba146101c2578063bf7e214f146101e457600080fd5b806310d86b1f146100b95780631f5bdf5d146100ce5780632b956ff7146100f65780634d12b6951461012d57806369852c8a14610140578063704f1b9414610153575b600080fd5b6100cc6100c7366004610c71565b6101ff565b005b6100e16100dc366004610c71565b6102be565b60405190151581526020015b60405180910390f35b61011f610104366004610c71565b6001600160a01b031660009081526001602052604090205490565b6040519081526020016100ed565b6100cc61013b366004610c71565b6102db565b6100cc61014e366004610c8c565b6103e2565b6100cc610161366004610cd5565b610622565b6100cc610174366004610c71565b610739565b6101816107b3565b6040516001600160e01b031990911681526020016100ed565b6101a26107d9565b6040516100ed9190610d86565b6100e16101bd366004610c71565b6107e5565b6101d56101d0366004610c71565b61081d565b6040516100ed93929190610dee565b6000546040516001600160a01b0390911681526020016100ed565b61020c335b6000366108ca565b610215816102be565b61025c5760405162461bcd60e51b8152602060048201526013602482015272155cd95c881b9bdd081c9959da5cdd195c9959606a1b60448201526064015b60405180910390fd5b6001600160a01b03811660008181526001602081815260409283902060028101805460ff1916909317909255905491519182527fd47d10d20745ca261609da04f2be5d753e72753697166d0788294a90f63385ce91015b60405180910390a250565b6001600160a01b0316600090815260016020526040902054151590565b6102e433610204565b6102ed816102be565b61032f5760405162461bcd60e51b8152602060048201526013602482015272155cd95c881b9bdd081c9959da5cdd195c9959606a1b6044820152606401610253565b6001600160a01b03811660009081526001602052604090206002015460ff1661038c5760405162461bcd60e51b815260206004820152600f60248201526e155cd95c881b9bdd0818985b9b9959608a1b6044820152606401610253565b6001600160a01b03811660008181526001602090815260409182902060028101805460ff191690555491519182527fea171eb708881d69efb9931dcca95ea6827f6fb5a1471ff9f8eda431bc3175d691016102b3565b6103eb33610204565b6103f4826102be565b6104405760405162461bcd60e51b815260206004820152601a60248201527f4f6c642061646472657373206e6f7420726567697374657265640000000000006044820152606401610253565b610449816102be565b156104965760405162461bcd60e51b815260206004820152601e60248201527f4e6577206164647265737320616c7265616479207265676973746572656400006044820152606401610253565b6001600160a01b038216600090815260016020819052604082208054910180549192916104c290610e30565b80601f01602080910402602001604051908101604052809291908181526020018280546104ee90610e30565b801561053b5780601f106105105761010080835404028352916020019161053b565b820191906000526020600020905b81548152906001019060200180831161051e57829003601f168201915b5050506001600160a01b0387166000908152600160208190526040822082815594955090925061056e9150830182610bff565b50600201805460ff1916905560408051606081018252838152602080820184815260008385018190526001600160a01b038816815260019283905293909320825181559251919291908201906105c49082610ebb565b50604091820151600291909101805460ff1916911515919091179055518281526001600160a01b038416907fe29d35093005f4d575e1003753426b57a7f64378ba73332eef9c6ccc2b8decd69060200160405180910390a250505050565b336000908152600160205260409020541561067f5760405162461bcd60e51b815260206004820152601760248201527f5573657220616c726561647920726567697374657265640000000000000000006044820152606401610253565b600061068b60026109ca565b610696906001610f7b565b6040805160608101825282815260208082018681526000838501819052338152600192839052939093208251815592519394509092908201906106d99082610ebb565b50604091909101516002918201805460ff19169115159190911790556106ff90826109d4565b5060405181815233907fe29d35093005f4d575e1003753426b57a7f64378ba73332eef9c6ccc2b8decd69060200160405180910390a25050565b60005433906001600160a01b031681146107705760405162d1953b60e31b81526001600160a01b0382166004820152602401610253565b816001600160a01b03163b6000036107a6576040516361798f2f60e11b81526001600160a01b0383166004820152602401610253565b6107af826109e7565b5050565b60008054600160a01b900460ff166107cb5750600090565b638fb3603760e01b5b905090565b60606107d46002610a3b565b60006107f0826102be565b801561081757506001600160a01b03821660009081526001602052604090206002015460ff165b92915050565b60016020819052600091825260409091208054918101805461083e90610e30565b80601f016020809104026020016040519081016040528092919081815260200182805461086a90610e30565b80156108b75780601f1061088c576101008083540402835291602001916108b7565b820191906000526020600020905b81548152906001019060200180831161089a57829003601f168201915b5050506002909301549192505060ff1683565b6000806109006108e26000546001600160a01b031690565b86306108f260046000898b610f9c565b6108fb91610fc6565b610a48565b91509150816109c35763ffffffff8116156109a0576000805460ff60a01b198116600160a01b17909155604051634a63ebf760e11b81526001600160a01b03909116906394c7d7ee9061095b90889088908890600401610ff6565b600060405180830381600087803b15801561097557600080fd5b505af1158015610989573d6000803e3d6000fd5b50506000805460ff60a01b19169055506109c39050565b60405162d1953b60e31b81526001600160a01b0386166004820152602401610253565b5050505050565b6000610817825490565b60006109e08383610b54565b9392505050565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9060200160405180910390a150565b606060006109e083610ba3565b6040516001600160a01b03848116602483015283811660448301526001600160e01b03198316606483015260009182918291829189169060840160408051601f198184030181529181526020820180516001600160e01b031663b700961360e01b17905251610ab79190611036565b600060405180830381855afa9150503d8060008114610af2576040519150601f19603f3d011682016040523d82523d6000602084013e610af7565b606091505b50915091508115610b49576040815110610b295780806020019051810190610b1f9190611062565b9094509250610b49565b6020815110610b495780806020019051810190610b4691906110a2565b93505b505094509492505050565b6000818152600183016020526040812054610b9b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610817565b506000610817565b606081600001805480602002602001604051908101604052809291908181526020018280548015610bf357602002820191906000526020600020905b815481526020019060010190808311610bdf575b50505050509050919050565b508054610c0b90610e30565b6000825580601f10610c1b575050565b601f016020900490600052602060002090810190610c399190610c3c565b50565b5b80821115610c515760008155600101610c3d565b5090565b80356001600160a01b0381168114610c6c57600080fd5b919050565b600060208284031215610c8357600080fd5b6109e082610c55565b60008060408385031215610c9f57600080fd5b610ca883610c55565b9150610cb660208401610c55565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215610ce757600080fd5b813567ffffffffffffffff80821115610cff57600080fd5b818401915084601f830112610d1357600080fd5b813581811115610d2557610d25610cbf565b604051601f8201601f19908116603f01168101908382118183101715610d4d57610d4d610cbf565b81604052828152876020848701011115610d6657600080fd5b826020860160208301376000928101602001929092525095945050505050565b6020808252825182820181905260009190848201906040850190845b81811015610dbe57835183529284019291840191600101610da2565b50909695505050505050565b60005b83811015610de5578181015183820152602001610dcd565b50506000910152565b8381526060602082015260008351806060840152610e13816080850160208801610dca565b921515604083015250601f91909101601f19160160800192915050565b600181811c90821680610e4457607f821691505b602082108103610e6457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610eb6576000816000526020600020601f850160051c81016020861015610e935750805b601f850160051c820191505b81811015610eb257828155600101610e9f565b5050505b505050565b815167ffffffffffffffff811115610ed557610ed5610cbf565b610ee981610ee38454610e30565b84610e6a565b602080601f831160018114610f1e5760008415610f065750858301515b600019600386901b1c1916600185901b178555610eb2565b600085815260208120601f198616915b82811015610f4d57888601518255948401946001909101908401610f2e565b5085821015610f6b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082018082111561081757634e487b7160e01b600052601160045260246000fd5b60008085851115610fac57600080fd5b83861115610fb957600080fd5b5050820193919092039150565b6001600160e01b03198135818116916004851015610fee5780818660040360031b1b83161692505b505092915050565b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b60008251611048818460208701610dca565b9190910192915050565b80518015158114610c6c57600080fd5b6000806040838503121561107557600080fd5b61107e83611052565b9150602083015163ffffffff8116811461109757600080fd5b809150509250929050565b6000602082840312156110b457600080fd5b6109e08261105256fea26469706673582212203267b201bb0f536f0aa5a65d59ea463aed9554eefed98ccedfc0ad404c93f11f64736f6c63430008180033","sourceMap":"374:3826:36:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2442:246;;;;;;:::i;:::-;;:::i;:::-;;1908:118;;;;;;:::i;:::-;;:::i;:::-;;;548:14:40;;541:22;523:41;;511:2;496:18;1908:118:36;;;;;;;;2199:109;;;;;;:::i;:::-;-1:-1:-1;;;;;2283:15:36;2257:7;2283:15;;;:5;:15;;;;;:18;;2199:109;;;;721:25:40;;;709:2;694:18;2199:109:36;575:177:40;2826:317:36;;;;;;:::i;:::-;;:::i;3700:498::-;;;;;;:::i;:::-;;:::i;1366:331::-;;;;;;:::i;:::-;;:::i;3056:362:0:-;;;;;;:::i;:::-;;:::i;3459:156::-;;;:::i;:::-;;;-1:-1:-1;;;;;;2243:33:40;;;2225:52;;2213:2;2198:18;3459:156:0;2081:202:40;1121:121:36;;;:::i;:::-;;;;;;;:::i;3333:157::-;;;;;;:::i;:::-;;:::i;471:37::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;2922:93:0:-;2972:7;2998:10;2922:93;;-1:-1:-1;;;;;2998:10:0;;;3881:51:40;;3869:2;3854:18;2922:93:0;3735:203:40;2442:246:36;2824:39:0;735:10:11;2838:12:0;809:14:11;;2824:13:0;:39::i;:::-;2517:30:36::1;2534:12;2517:16;:30::i;:::-;2509:62;;;::::0;-1:-1:-1;;;2509:62:36;;4145:2:40;2509:62:36::1;::::0;::::1;4127:21:40::0;4184:2;4164:18;;;4157:30;-1:-1:-1;;;4203:18:40;;;4196:49;4262:18;;2509:62:36::1;;;;;;;;;-1:-1:-1::0;;;;;2582:19:36;::::1;;::::0;;;2613:4:::1;2582:19;::::0;;;;;;;;:28:::1;::::0;::::1;:35:::0;;-1:-1:-1;;2582:35:36::1;::::0;;::::1;::::0;;;2658:22;;2633:48;;721:25:40;;;2633:48:36::1;::::0;694:18:40;2633:48:36::1;;;;;;;;2442:246:::0;:::o;1908:118::-;-1:-1:-1;;;;;1996:15:36;1973:4;1996:15;;;:5;:15;;;;;:18;:23;;;1908:118::o;2826:317::-;2824:39:0;735:10:11;2838:12:0;656:96:11;2824:39:0;2903:30:36::1;2920:12;2903:16;:30::i;:::-;2895:62;;;::::0;-1:-1:-1;;;2895:62:36;;4145:2:40;2895:62:36::1;::::0;::::1;4127:21:40::0;4184:2;4164:18;;;4157:30;-1:-1:-1;;;4203:18:40;;;4196:49;4262:18;;2895:62:36::1;3943:343:40::0;2895:62:36::1;-1:-1:-1::0;;;;;2975:19:36;::::1;;::::0;;;:5:::1;:19;::::0;;;;:28:::1;;::::0;::::1;;2967:56;;;::::0;-1:-1:-1;;;2967:56:36;;4493:2:40;2967:56:36::1;::::0;::::1;4475:21:40::0;4532:2;4512:18;;;4505:30;-1:-1:-1;;;4551:18:40;;;4544:45;4606:18;;2967:56:36::1;4291:339:40::0;2967:56:36::1;-1:-1:-1::0;;;;;3034:19:36;::::1;3065:5;3034:19:::0;;;:5:::1;:19;::::0;;;;;;;;:28:::1;::::0;::::1;:36:::0;;-1:-1:-1;;3034:36:36::1;::::0;;3113:22;3086:50;;721:25:40;;;3086:50:36::1;::::0;694:18:40;3086:50:36::1;575:177:40::0;3700:498:36;2824:39:0;735:10:11;2838:12:0;656:96:11;2824:39:0;3802:29:36::1;3819:11;3802:16;:29::i;:::-;3794:68;;;::::0;-1:-1:-1;;;3794:68:36;;4837:2:40;3794:68:36::1;::::0;::::1;4819:21:40::0;4876:2;4856:18;;;4849:30;4915:28;4895:18;;;4888:56;4961:18;;3794:68:36::1;4635:350:40::0;3794:68:36::1;3881:29;3898:11;3881:16;:29::i;:::-;3880:30;3872:73;;;::::0;-1:-1:-1;;;3872:73:36;;5192:2:40;3872:73:36::1;::::0;::::1;5174:21:40::0;5231:2;5211:18;;;5204:30;5270:32;5250:18;;;5243:60;5320:18;;3872:73:36::1;4990:354:40::0;3872:73:36::1;-1:-1:-1::0;;;;;3973:18:36;::::1;3956:14;3973:18:::0;;;:5:::1;:18;::::0;;;;;;:21;;4025:23;::::1;4004:44:::0;;3973:21;;3956:14;4004:44:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;4066:18:36;::::1;;::::0;;;:5:::1;:18;::::0;;;;;;4059:25;;;4004:44;;-1:-1:-1;4066:18:36;;-1:-1:-1;4059:25:36::1;::::0;-1:-1:-1;4059:25:36;::::1;4066:18:::0;4059:25:::1;:::i;:::-;-1:-1:-1::0;4059:25:36::1;;::::0;;-1:-1:-1;;4059:25:36::1;::::0;;4115::::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;4059::::1;4115::::0;;;;;;-1:-1:-1;;;;;4094:18:36;::::1;::::0;;4059:25;4094:18;;;;;;;;:46;;;;;;4115:25;;4094:18;:46;;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;4094:46:36::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;4094:46:36::1;::::0;::::1;;::::0;;;::::1;::::0;;4156:35;721:25:40;;;-1:-1:-1;;;;;4156:35:36;::::1;::::0;::::1;::::0;709:2:40;694:18;4156:35:36::1;;;;;;;3784:414;;3700:498:::0;;:::o;1366:331::-;1440:10;1434:17;;;;:5;:17;;;;;:20;:25;1426:61;;;;-1:-1:-1;;;1426:61:36;;8131:2:40;1426:61:36;;;8113:21:40;8170:2;8150:18;;;8143:30;8209:25;8189:18;;;8182:53;8252:18;;1426:61:36;7929:347:40;1426:61:36;1498:14;1515:26;:17;:24;:26::i;:::-;:30;;1544:1;1515:30;:::i;:::-;1575:26;;;;;;;;;;;;;;;;;;-1:-1:-1;1575:26:36;;;;;;1561:10;1555:17;;1575:26;1555:17;;;;;;;;:46;;;;;;1498:47;;-1:-1:-1;1575:26:36;;1555:46;;;;;;;;:::i;:::-;-1:-1:-1;1555:46:36;;;;;;;;;;;;-1:-1:-1;;1555:46:36;;;;;;;;;;1611:29;;1633:6;1611:21;:29::i;:::-;-1:-1:-1;1656:34:36;;721:25:40;;;1671:10:36;;1656:34;;709:2:40;694:18;1656:34:36;;;;;;;1416:281;1366:331;:::o;3056:362:0:-;3125:14;2998:10;735::11;;-1:-1:-1;;;;;2998:10:0;3168:21;;3164:92;;3212:33;;-1:-1:-1;;;3212:33:0;;-1:-1:-1;;;;;3899:32:40;;3212:33:0;;;3881:51:40;3854:18;;3212:33:0;3735:203:40;3164:92:0;3269:12;-1:-1:-1;;;;;3269:24:0;;3297:1;3269:29;3265:110;;3321:43;;-1:-1:-1;;;3321:43:0;;-1:-1:-1;;;;;3899:32:40;;3321:43:0;;;3881:51:40;3854:18;;3321:43:0;3735:203:40;3265:110:0;3384:27;3398:12;3384:13;:27::i;:::-;3115:303;3056:362;:::o;3459:156::-;3514:6;3539:18;;-1:-1:-1;;;3539:18:0;;;;:69;;-1:-1:-1;3606:1:0;;3459:156::o;3539:69::-;-1:-1:-1;;;3539:69:0;3532:76;;3459:156;:::o;1121:121:36:-;1174:16;1209:26;:17;:24;:26::i;3333:157::-;3398:4;3421:30;3438:12;3421:16;:30::i;:::-;:62;;;;-1:-1:-1;;;;;;3455:19:36;;;;;;:5;:19;;;;;:28;;;;;3421:62;3414:69;3333:157;-1:-1:-1;;3333:157:36:o;471:37::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;471:37:36;;;;;;;-1:-1:-1;;471:37:36;;;:::o;4127:594:0:-;4215:14;4231:12;4247:144;4292:11;2972:7;2998:10;-1:-1:-1;;;;;2998:10:0;;2922:93;4292:11;4317:6;4345:4;4371:9;4378:1;4376;4371:4;;:9;:::i;:::-;4364:17;;;:::i;:::-;4247:31;:144::i;:::-;4214:177;;;;4406:9;4401:314;;4435:9;;;;4431:274;;4464:18;:25;;-1:-1:-1;;;;4464:25:0;;-1:-1:-1;;;4464:25:0;;;;4507:60;;-1:-1:-1;;;4507:60:0;;-1:-1:-1;;;;;2998:10:0;;;;4507:46;;:60;;4554:6;;4562:4;;;;4507:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4606:5:0;4585:26;;-1:-1:-1;;;;4585:26:0;;;-1:-1:-1;4431:274:0;;-1:-1:-1;4431:274:0;;4657:33;;-1:-1:-1;;;4657:33:0;;-1:-1:-1;;;;;3899:32:40;;4657:33:0;;;3881:51:40;3854:18;;4657:33:0;3735:203:40;4431:274:0;4204:517;;4127:594;;;:::o;11542:112:15:-;11602:7;11628:19;11636:3;4556:18;;4474:107;10804:129;10871:4;10894:32;10899:3;10919:5;10894:4;:32::i;:::-;10887:39;10804:129;-1:-1:-1;;;10804:129:15:o;3803:149:0:-;3875:10;:25;;-1:-1:-1;;;;;;3875:25:0;-1:-1:-1;;;;;3875:25:0;;;;;;;;3915:30;;3881:51:40;;;3915:30:0;;3869:2:40;3854:18;3915:30:0;;;;;;;3803:149;:::o;12671:297:15:-;12731:16;12759:22;12784:19;12792:3;12784:7;:19::i;591:636:2:-;856:62;;-1:-1:-1;;;;;9918:15:40;;;856:62:2;;;9900:34:40;9970:15;;;9950:18;;;9943:43;-1:-1:-1;;;;;;10022:33:40;;10002:18;;;9995:61;746:14:2;;;;;;;;822:20;;;9835:18:40;;856:62:2;;;-1:-1:-1;;856:62:2;;;;;;;;;;;;;;-1:-1:-1;;;;;856:62:2;-1:-1:-1;;;856:62:2;;;822:106;;;856:62;822:106;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;786:142;;;;942:7;938:248;;;984:4;969;:11;:19;965:211;;1040:4;1029:32;;;;;;;;;;;;:::i;:::-;1008:53;;-1:-1:-1;1008:53:2;-1:-1:-1;965:211:2;;;1101:4;1086;:11;:19;1082:94;;1148:4;1137:24;;;;;;;;;;;;:::i;:::-;1125:36;;1082:94;1195:25;;591:636;;;;;;;:::o;2241:406:15:-;2304:4;4360:21;;;:14;;;:21;;;;;;2320:321;;-1:-1:-1;2362:23:15;;;;;;;;:11;:23;;;;;;;;;;;;;2544:18;;2520:21;;;:14;;;:21;;;;;;:42;;;;2576:11;;2320:321;-1:-1:-1;2625:5:15;2618:12;;5581:109;5637:16;5672:3;:11;;5665:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5581:109;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;14:173:40:-;82:20;;-1:-1:-1;;;;;131:31:40;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;757:260::-;825:6;833;886:2;874:9;865:7;861:23;857:32;854:52;;;902:1;899;892:12;854:52;925:29;944:9;925:29;:::i;:::-;915:39;;973:38;1007:2;996:9;992:18;973:38;:::i;:::-;963:48;;757:260;;;;;:::o;1022:127::-;1083:10;1078:3;1074:20;1071:1;1064:31;1114:4;1111:1;1104:15;1138:4;1135:1;1128:15;1154:922;1223:6;1276:2;1264:9;1255:7;1251:23;1247:32;1244:52;;;1292:1;1289;1282:12;1244:52;1332:9;1319:23;1361:18;1402:2;1394:6;1391:14;1388:34;;;1418:1;1415;1408:12;1388:34;1456:6;1445:9;1441:22;1431:32;;1501:7;1494:4;1490:2;1486:13;1482:27;1472:55;;1523:1;1520;1513:12;1472:55;1559:2;1546:16;1581:2;1577;1574:10;1571:36;;;1587:18;;:::i;:::-;1662:2;1656:9;1630:2;1716:13;;-1:-1:-1;;1712:22:40;;;1736:2;1708:31;1704:40;1692:53;;;1760:18;;;1780:22;;;1757:46;1754:72;;;1806:18;;:::i;:::-;1846:10;1842:2;1835:22;1881:2;1873:6;1866:18;1921:7;1916:2;1911;1907;1903:11;1899:20;1896:33;1893:53;;;1942:1;1939;1932:12;1893:53;1998:2;1993;1989;1985:11;1980:2;1972:6;1968:15;1955:46;2043:1;2021:15;;;2038:2;2017:24;2010:35;;;;-1:-1:-1;2025:6:40;1154:922;-1:-1:-1;;;;;1154:922:40:o;2288:632::-;2459:2;2511:21;;;2581:13;;2484:18;;;2603:22;;;2430:4;;2459:2;2682:15;;;;2656:2;2641:18;;;2430:4;2725:169;2739:6;2736:1;2733:13;2725:169;;;2800:13;;2788:26;;2869:15;;;;2834:12;;;;2761:1;2754:9;2725:169;;;-1:-1:-1;2911:3:40;;2288:632;-1:-1:-1;;;;;;2288:632:40:o;2925:250::-;3010:1;3020:113;3034:6;3031:1;3028:13;3020:113;;;3110:11;;;3104:18;3091:11;;;3084:39;3056:2;3049:10;3020:113;;;-1:-1:-1;;3167:1:40;3149:16;;3142:27;2925:250::o;3180:550::-;3379:6;3368:9;3361:25;3422:2;3417;3406:9;3402:18;3395:30;3342:4;3454:6;3448:13;3497:6;3492:2;3481:9;3477:18;3470:34;3513:80;3586:6;3580:3;3569:9;3565:19;3560:2;3552:6;3548:15;3513:80;:::i;:::-;3708:14;;3701:22;3696:2;3681:18;;3674:50;-1:-1:-1;3654:2:40;3633:15;;;;-1:-1:-1;;3629:29:40;3614:45;3661:3;3610:55;;3180:550;-1:-1:-1;;3180:550:40:o;5349:380::-;5428:1;5424:12;;;;5471;;;5492:61;;5546:4;5538:6;5534:17;5524:27;;5492:61;5599:2;5591:6;5588:14;5568:18;5565:38;5562:161;;5645:10;5640:3;5636:20;5633:1;5626:31;5680:4;5677:1;5670:15;5708:4;5705:1;5698:15;5562:161;;5349:380;;;:::o;5860:543::-;5962:2;5957:3;5954:11;5951:446;;;5998:1;6022:5;6019:1;6012:16;6066:4;6063:1;6053:18;6136:2;6124:10;6120:19;6117:1;6113:27;6107:4;6103:38;6172:4;6160:10;6157:20;6154:47;;;-1:-1:-1;6195:4:40;6154:47;6250:2;6245:3;6241:12;6238:1;6234:20;6228:4;6224:31;6214:41;;6305:82;6323:2;6316:5;6313:13;6305:82;;;6368:17;;;6349:1;6338:13;6305:82;;;6309:3;;;5951:446;5860:543;;;:::o;6579:1345::-;6705:3;6699:10;6732:18;6724:6;6721:30;6718:56;;;6754:18;;:::i;:::-;6783:97;6873:6;6833:38;6865:4;6859:11;6833:38;:::i;:::-;6827:4;6783:97;:::i;:::-;6935:4;;6992:2;6981:14;;7009:1;7004:663;;;;7711:1;7728:6;7725:89;;;-1:-1:-1;7780:19:40;;;7774:26;7725:89;-1:-1:-1;;6536:1:40;6532:11;;;6528:24;6524:29;6514:40;6560:1;6556:11;;;6511:57;7827:81;;6974:944;;7004:663;5807:1;5800:14;;;5844:4;5831:18;;-1:-1:-1;;7040:20:40;;;7158:236;7172:7;7169:1;7166:14;7158:236;;;7261:19;;;7255:26;7240:42;;7353:27;;;;7321:1;7309:14;;;;7188:19;;7158:236;;;7162:3;7422:6;7413:7;7410:19;7407:201;;;7483:19;;;7477:26;-1:-1:-1;;7566:1:40;7562:14;;;7578:3;7558:24;7554:37;7550:42;7535:58;7520:74;;7407:201;-1:-1:-1;;;;;7654:1:40;7638:14;;;7634:22;7621:36;;-1:-1:-1;6579:1345:40:o;8281:222::-;8346:9;;;8367:10;;;8364:133;;;8419:10;8414:3;8410:20;8407:1;8400:31;8454:4;8451:1;8444:15;8482:4;8479:1;8472:15;8508:331;8613:9;8624;8666:8;8654:10;8651:24;8648:44;;;8688:1;8685;8678:12;8648:44;8717:6;8707:8;8704:20;8701:40;;;8737:1;8734;8727:12;8701:40;-1:-1:-1;;8763:23:40;;;8808:25;;;;;-1:-1:-1;8508:331:40:o;8844:323::-;-1:-1:-1;;;;;;8964:19:40;;9040:11;;;;9071:1;9063:10;;9060:101;;;9148:2;9142;9135:3;9132:1;9128:11;9125:1;9121:19;9117:28;9113:2;9109:37;9105:46;9096:55;;9060:101;;;8844:323;;;;:::o;9172:485::-;-1:-1:-1;;;;;9357:32:40;;9339:51;;9426:2;9421;9406:18;;9399:30;;;9445:18;;9438:34;;;9465:6;9514;9509:2;9494:18;;9481:48;9578:1;9549:22;;;9573:2;9545:31;;;9538:42;;;;9641:2;9620:15;;;-1:-1:-1;;9616:29:40;9601:45;9597:54;;9172:485;-1:-1:-1;;9172:485:40:o;10067:287::-;10196:3;10234:6;10228:13;10250:66;10309:6;10304:3;10297:4;10289:6;10285:17;10250:66;:::i;:::-;10332:16;;;;;10067:287;-1:-1:-1;;10067:287:40:o;10359:164::-;10435:13;;10484;;10477:21;10467:32;;10457:60;;10513:1;10510;10503:12;10528:359;10603:6;10611;10664:2;10652:9;10643:7;10639:23;10635:32;10632:52;;;10680:1;10677;10670:12;10632:52;10703:37;10730:9;10703:37;:::i;:::-;10693:47;;10783:2;10772:9;10768:18;10762:25;10827:10;10820:5;10816:22;10809:5;10806:33;10796:61;;10853:1;10850;10843:12;10796:61;10876:5;10866:15;;;10528:359;;;;;:::o;10892:202::-;10959:6;11012:2;11000:9;10991:7;10987:23;10983:32;10980:52;;;11028:1;11025;11018:12;10980:52;11051:37;11078:9;11051:37;:::i","linkReferences":{}},"methodIdentifiers":{"authority()":"bf7e214f","banUser(address)":"10d86b1f","getRegisteredUserIds()":"99852829","getUserId(address)":"2b956ff7","isConsumingScheduledOp()":"8fb36037","isRegisteredUser(address)":"1f5bdf5d","isUserBanned(address)":"9ed9b4fd","registerUser(string)":"704f1b94","setAuthority(address)":"7a9e5e4b","transferUserId(address,address)":"69852c8a","unbanUser(address)":"4d12b695","users(address)":"a87430ba"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"accessManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"authority\",\"type\":\"address\"}],\"name\":\"AccessManagedInvalidAuthority\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"delay\",\"type\":\"uint32\"}],\"name\":\"AccessManagedRequiredDelay\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AccessManagedUnauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"authority\",\"type\":\"address\"}],\"name\":\"AuthorityUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"userId\",\"type\":\"uint256\"}],\"name\":\"UserBanned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"userId\",\"type\":\"uint256\"}],\"name\":\"UserRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"userId\",\"type\":\"uint256\"}],\"name\":\"UserUnbanned\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"authority\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"}],\"name\":\"banUser\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRegisteredUserIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"getUserId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isConsumingScheduledOp\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"isRegisteredUser\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"}],\"name\":\"isUserBanned\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"registerUser\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAuthority\",\"type\":\"address\"}],\"name\":\"setAuthority\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oldAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newAddress\",\"type\":\"address\"}],\"name\":\"transferUserId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"}],\"name\":\"unbanUser\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"users\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"isBanned\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"ronfflex\",\"events\":{\"AuthorityUpdated(address)\":{\"details\":\"Authority that manages this contract was updated.\"}},\"kind\":\"dev\",\"methods\":{\"authority()\":{\"details\":\"Returns the current authority.\"},\"banUser(address)\":{\"params\":{\"_userAddress\":\"The address of the user to ban.\"}},\"getRegisteredUserIds()\":{\"returns\":{\"_0\":\"uint256[] An array of user IDs.\"}},\"getUserId(address)\":{\"params\":{\"_address\":\"The address of the user.\"},\"returns\":{\"_0\":\"uint256 The user ID.\"}},\"isConsumingScheduledOp()\":{\"details\":\"Returns true only in the context of a delayed restricted call, at the moment that the scheduled operation is being consumed. Prevents denial of service for delayed restricted calls in the case that the contract performs attacker controlled calls.\"},\"isRegisteredUser(address)\":{\"params\":{\"_address\":\"The address to check.\"},\"returns\":{\"_0\":\"bool True if the address is a registered user, false otherwise.\"}},\"isUserBanned(address)\":{\"params\":{\"_userAddress\":\"The address of the user.\"},\"returns\":{\"_0\":\"bool True if the user is banned, false otherwise.\"}},\"registerUser(string)\":{\"params\":{\"_name\":\"The name of the user.\"}},\"setAuthority(address)\":{\"details\":\"Transfers control to a new authority. The caller must be the current authority.\"},\"transferUserId(address,address)\":{\"params\":{\"_newAddress\":\"The new address of the user.\",\"_oldAddress\":\"The old address of the user.\"}},\"unbanUser(address)\":{\"params\":{\"_userAddress\":\"The address of the user to unban.\"}}},\"title\":\"UserRegistry\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"banUser(address)\":{\"notice\":\"Bans the user with the given address.\"},\"getRegisteredUserIds()\":{\"notice\":\"Gets the user IDs of all registered users.\"},\"getUserId(address)\":{\"notice\":\"Gets the user ID associated with the given address.\"},\"isRegisteredUser(address)\":{\"notice\":\"Checks if the given address is a registered user.\"},\"isUserBanned(address)\":{\"notice\":\"Checks if the given user is banned.\"},\"registerUser(string)\":{\"notice\":\"Registers a new user with the provided name.\"},\"transferUserId(address,address)\":{\"notice\":\"Transfers the user ID from the old address to the new address.\"},\"unbanUser(address)\":{\"notice\":\"Unbans the user with the given address.\"}},\"notice\":\"This contract manages user registration, authentication, and administration for a decentralized exchange (DEX) platform.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/UserRegistry.sol\":\"UserRegistry\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/openzeppelin-contracts/lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/manager/AccessManaged.sol\":{\"keccak256\":\"0x137a4c22eb762b1580c632f575868d1f3b764291e58702ebe484fa1cef5447dc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ef14292067a6f91705f6cafcfa136870e6332de4bd36924a8679b4211531234\",\"dweb:/ipfs/QmWEBkKmdmDzaTEFRTNvguuWbD1Z3L8P7XV8bcTAkzc4fr\"]},\"lib/openzeppelin-contracts/contracts/access/manager/AuthorityUtils.sol\":{\"keccak256\":\"0xb3875997b0d8705e29aa20fee88e1dfef93df438794ae1ad8ba2eb016a4dd4e4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f9e50192f7c7a22829cacfbd14221c3a3d869da64a2333f330d527777f275d9e\",\"dweb:/ipfs/QmaxMQb26ggDmW3SDwJ8y6hRC8dbWbLMpUZBVzZtXqzycJ\"]},\"lib/openzeppelin-contracts/contracts/access/manager/IAccessManaged.sol\":{\"keccak256\":\"0xaba93d42cd70e1418782951132d97b31ddce5f50ad81090884b6d0e41caac9d6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b110886f83e3e98a11255a3b56790322e8d83e513304dde71299406685fc6694\",\"dweb:/ipfs/QmPwroS7MUUk1EmsvaJqU6aarhQ8ewJtJMg7xxmTsaxZEv\"]},\"lib/openzeppelin-contracts/contracts/access/manager/IAccessManager.sol\":{\"keccak256\":\"0xdabf85e3bab52e7cfade4f77e661bcf7a2f9f95097bfd2ca5ddb193a0c21ee8b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://402259332090488a587a858ec0113bc7fe55e9dbc6e329927b87ed0f1cce7d08\",\"dweb:/ipfs/QmPJufTJJJifny3JscKTASsPzCrpXRbhtsJnwkCdbaKDTf\"]},\"lib/openzeppelin-contracts/contracts/access/manager/IAuthority.sol\":{\"keccak256\":\"0x4cc0766bd7fb7b3bafb70afa2a93b6e313a0baec7a35ad1b57505be7861c1030\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85871c47ac00d10664b858ef71ecd8b9787c1d313e544ab2c57210c520a3c06c\",\"dweb:/ipfs/QmUMTwojLzURuHftQLzAVuDmib9roj4KwcHCkg3LhZ2AdH\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1\",\"dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA\"]},\"lib/openzeppelin-contracts/contracts/utils/types/Time.sol\":{\"keccak256\":\"0xc7755af115020049e4140f224f9ee88d7e1799ffb0646f37bf0df24bf6213f58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7f09bf94d5274334ec021f61a04659db303f31e60460e14b709c9bf187740111\",\"dweb:/ipfs/QmNvgomZYUwFAt4cZbPWAiTeSZQreGehY9BK5xyVJsUttb\"]},\"src/UserRegistry.sol\":{\"keccak256\":\"0x9a3df50a4779dbd725119681561bf54d09af89ad0714b57ded2ced03adaf3747\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3a4468c15094826917eb8c1a9a04f8011dc3cca3e77331777304e42bda91621f\",\"dweb:/ipfs/QmYqfQ3KgUo4vWyaNUMdgDvJnBWdRtdipCXHhH2JEShTvf\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"accessManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"authority","type":"address"}],"type":"error","name":"AccessManagedInvalidAuthority"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"uint32","name":"delay","type":"uint32"}],"type":"error","name":"AccessManagedRequiredDelay"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"type":"error","name":"AccessManagedUnauthorized"},{"inputs":[{"internalType":"address","name":"authority","type":"address","indexed":false}],"type":"event","name":"AuthorityUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"userAddress","type":"address","indexed":true},{"internalType":"uint256","name":"userId","type":"uint256","indexed":false}],"type":"event","name":"UserBanned","anonymous":false},{"inputs":[{"internalType":"address","name":"userAddress","type":"address","indexed":true},{"internalType":"uint256","name":"userId","type":"uint256","indexed":false}],"type":"event","name":"UserRegistered","anonymous":false},{"inputs":[{"internalType":"address","name":"userAddress","type":"address","indexed":true},{"internalType":"uint256","name":"userId","type":"uint256","indexed":false}],"type":"event","name":"UserUnbanned","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"authority","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"banUser"},{"inputs":[],"stateMutability":"view","type":"function","name":"getRegisteredUserIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"stateMutability":"view","type":"function","name":"getUserId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"isConsumingScheduledOp","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"stateMutability":"view","type":"function","name":"isRegisteredUser","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"}],"stateMutability":"view","type":"function","name":"isUserBanned","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"registerUser"},{"inputs":[{"internalType":"address","name":"newAuthority","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setAuthority"},{"inputs":[{"internalType":"address","name":"_oldAddress","type":"address"},{"internalType":"address","name":"_newAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferUserId"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"unbanUser"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"users","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"bool","name":"isBanned","type":"bool"}]}],"devdoc":{"kind":"dev","methods":{"authority()":{"details":"Returns the current authority."},"banUser(address)":{"params":{"_userAddress":"The address of the user to ban."}},"getRegisteredUserIds()":{"returns":{"_0":"uint256[] An array of user IDs."}},"getUserId(address)":{"params":{"_address":"The address of the user."},"returns":{"_0":"uint256 The user ID."}},"isConsumingScheduledOp()":{"details":"Returns true only in the context of a delayed restricted call, at the moment that the scheduled operation is being consumed. Prevents denial of service for delayed restricted calls in the case that the contract performs attacker controlled calls."},"isRegisteredUser(address)":{"params":{"_address":"The address to check."},"returns":{"_0":"bool True if the address is a registered user, false otherwise."}},"isUserBanned(address)":{"params":{"_userAddress":"The address of the user."},"returns":{"_0":"bool True if the user is banned, false otherwise."}},"registerUser(string)":{"params":{"_name":"The name of the user."}},"setAuthority(address)":{"details":"Transfers control to a new authority. The caller must be the current authority."},"transferUserId(address,address)":{"params":{"_newAddress":"The new address of the user.","_oldAddress":"The old address of the user."}},"unbanUser(address)":{"params":{"_userAddress":"The address of the user to unban."}}},"version":1},"userdoc":{"kind":"user","methods":{"banUser(address)":{"notice":"Bans the user with the given address."},"getRegisteredUserIds()":{"notice":"Gets the user IDs of all registered users."},"getUserId(address)":{"notice":"Gets the user ID associated with the given address."},"isRegisteredUser(address)":{"notice":"Checks if the given address is a registered user."},"isUserBanned(address)":{"notice":"Checks if the given user is banned."},"registerUser(string)":{"notice":"Registers a new user with the provided name."},"transferUserId(address,address)":{"notice":"Transfers the user ID from the old address to the new address."},"unbanUser(address)":{"notice":"Unbans the user with the given address."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/openzeppelin-contracts/lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/UserRegistry.sol":"UserRegistry"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/access/manager/AccessManaged.sol":{"keccak256":"0x137a4c22eb762b1580c632f575868d1f3b764291e58702ebe484fa1cef5447dc","urls":["bzz-raw://0ef14292067a6f91705f6cafcfa136870e6332de4bd36924a8679b4211531234","dweb:/ipfs/QmWEBkKmdmDzaTEFRTNvguuWbD1Z3L8P7XV8bcTAkzc4fr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/manager/AuthorityUtils.sol":{"keccak256":"0xb3875997b0d8705e29aa20fee88e1dfef93df438794ae1ad8ba2eb016a4dd4e4","urls":["bzz-raw://f9e50192f7c7a22829cacfbd14221c3a3d869da64a2333f330d527777f275d9e","dweb:/ipfs/QmaxMQb26ggDmW3SDwJ8y6hRC8dbWbLMpUZBVzZtXqzycJ"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/manager/IAccessManaged.sol":{"keccak256":"0xaba93d42cd70e1418782951132d97b31ddce5f50ad81090884b6d0e41caac9d6","urls":["bzz-raw://b110886f83e3e98a11255a3b56790322e8d83e513304dde71299406685fc6694","dweb:/ipfs/QmPwroS7MUUk1EmsvaJqU6aarhQ8ewJtJMg7xxmTsaxZEv"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/manager/IAccessManager.sol":{"keccak256":"0xdabf85e3bab52e7cfade4f77e661bcf7a2f9f95097bfd2ca5ddb193a0c21ee8b","urls":["bzz-raw://402259332090488a587a858ec0113bc7fe55e9dbc6e329927b87ed0f1cce7d08","dweb:/ipfs/QmPJufTJJJifny3JscKTASsPzCrpXRbhtsJnwkCdbaKDTf"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/manager/IAuthority.sol":{"keccak256":"0x4cc0766bd7fb7b3bafb70afa2a93b6e313a0baec7a35ad1b57505be7861c1030","urls":["bzz-raw://85871c47ac00d10664b858ef71ecd8b9787c1d313e544ab2c57210c520a3c06c","dweb:/ipfs/QmUMTwojLzURuHftQLzAVuDmib9roj4KwcHCkg3LhZ2AdH"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d","urls":["bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875","dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe","urls":["bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c","dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol":{"keccak256":"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa","urls":["bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1","dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/types/Time.sol":{"keccak256":"0xc7755af115020049e4140f224f9ee88d7e1799ffb0646f37bf0df24bf6213f58","urls":["bzz-raw://7f09bf94d5274334ec021f61a04659db303f31e60460e14b709c9bf187740111","dweb:/ipfs/QmNvgomZYUwFAt4cZbPWAiTeSZQreGehY9BK5xyVJsUttb"],"license":"MIT"},"src/UserRegistry.sol":{"keccak256":"0x9a3df50a4779dbd725119681561bf54d09af89ad0714b57ded2ced03adaf3747","urls":["bzz-raw://3a4468c15094826917eb8c1a9a04f8011dc3cca3e77331777304e42bda91621f","dweb:/ipfs/QmYqfQ3KgUo4vWyaNUMdgDvJnBWdRtdipCXHhH2JEShTvf"],"license":"MIT"}},"version":1},"id":36} \ No newline at end of file diff --git a/abi/address.txt b/abi/address.txt deleted file mode 100644 index 6df52ac..0000000 --- a/abi/address.txt +++ /dev/null @@ -1,21 +0,0 @@ -No files changed, compilation skipped -Traces: - [3104957] DeployDexContracts::run() - ├─ [2141636] → new DexAccessManager@0xC7f2Cf4845C6db0e1a1e91ED41Bcd0FcC1b0E141 - │ ├─ emit RoleGranted(roleId: 0, account: DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], delay: 0, since: 1714038168 [1.714e9], newMember: true) - │ └─ ← [Return] 10568 bytes of code - ├─ [892133] → new UserRegistry@0xdaE97900D4B184c5D2012dcdB658c008966466DD - │ ├─ emit AuthorityUpdated(authority: DexAccessManager: [0xC7f2Cf4845C6db0e1a1e91ED41Bcd0FcC1b0E141]) - │ └─ ← [Return] 4339 bytes of code - ├─ [0] console::log("UserRegistry deployed to:", UserRegistry: [0xdaE97900D4B184c5D2012dcdB658c008966466DD]) [staticcall] - │ └─ ← [Stop]  - ├─ [0] console::log("DexRegistry deployed to:", DexAccessManager: [0xC7f2Cf4845C6db0e1a1e91ED41Bcd0FcC1b0E141]) [staticcall] - │ └─ ← [Stop]  - └─ ← [Stop]  - - -Script ran successfully. - -== Logs == - UserRegistry deployed to: 0xdaE97900D4B184c5D2012dcdB658c008966466DD - DexRegistry deployed to: 0xC7f2Cf4845C6db0e1a1e91ED41Bcd0FcC1b0E141 diff --git a/contracts/.env.example b/contracts/.env.example index 21472b0..574d224 100644 --- a/contracts/.env.example +++ b/contracts/.env.example @@ -1,66 +1,66 @@ -## Network (MAINNET, ROPSTEN, RINKEBY, KOVAN, GOERLI, SEPOLIA) -DEPLOYMENT_NETWORK= -## RPC (ALCHEMY, INFURA) -RPC= - -## ------------------------------ -## ------- SEPOLIA CONFIG ------- -## ------------------------------ - -## AccessManager Deployer -MNEMONIC_SEPOLIA= -INDEX_SEPOLIA= # https://river.com/learn/images/articles/BIP-32-Hierarchial-Deterministic-Wallets.png - -## Addresses for AccessManager -INITIAL_HOLDER_SEPOLIA= # Optional -ADMIN_SEPOLIA= -UPGRADER_SEPOLIA= -UPGRADER_ADMIN_SEPOLIA= # Optional -UPGRADER_GUARDIAN_SEPOLIA= # Optional -CALLER_SEPOLIA= -CALLER_ADMIN_SEPOLIA= # Optional -CALLER_GUARDIAN_SEPOLIA= # Optional -MINTER_SEPOLIA= -MINTER_ADMIN_SEPOLIA= # Optional -MINTER_GUARDIAN_SEPOLIA= # Optional - -## RPC API Keys -API_KEY_ALCHEMY_SEPOLIA= -API_KEY_INFURA_SEPOLIA= - -## Block explorer API Keys -API_KEY_ETHERSCAN_SEPOLIA= - -## Misc -FOUNDRY_PROFILE=default - -## ------------------------------- -## ------- MAINNETS CONFIG ------- -## ------------------------------- - -## AccessManager Deployer -MNEMONIC_MAINNET= -INDEX_MAINNET= # https://river.com/learn/images/articles/BIP-32-Hierarchial-Deterministic-Wallets.png - -## Addresses for AccessManager -INITIAL_HOLDER_MAINNET= # Optional -ADMIN_MAINNET= -UPGRADER_MAINNET= -UPGRADER_ADMIN_MAINNET= # Optional -UPGRADER_GUARDIAN_MAINNET= # Optional -CALLER_MAINNET= -CALLER_ADMIN_MAINNET= # Optional -CALLER_GUARDIAN_MAINNET= # Optional -MINTER_MAINNET= -MINTER_ADMIN_MAINNET= # Optional -MINTER_GUARDIAN_MAINNET= # Optional - -## RPC API Keys -API_KEY_ALCHEMY_MAINNET= -API_KEY_INFURA_MAINNET= - -## Block explorer API Keys -API_KEY_ETHERSCAN_MAINNET= - -## Misc +## Network (MAINNET, ROPSTEN, RINKEBY, KOVAN, GOERLI, SEPOLIA) +DEPLOYMENT_NETWORK= +## RPC (ALCHEMY, INFURA) +RPC= + +## ------------------------------ +## ------- SEPOLIA CONFIG ------- +## ------------------------------ + +## AccessManager Deployer +MNEMONIC_SEPOLIA= +INDEX_SEPOLIA= # https://river.com/learn/images/articles/BIP-32-Hierarchial-Deterministic-Wallets.png + +## Addresses for AccessManager +INITIAL_HOLDER_SEPOLIA= # Optional +ADMIN_SEPOLIA= +UPGRADER_SEPOLIA= +UPGRADER_ADMIN_SEPOLIA= # Optional +UPGRADER_GUARDIAN_SEPOLIA= # Optional +CALLER_SEPOLIA= +CALLER_ADMIN_SEPOLIA= # Optional +CALLER_GUARDIAN_SEPOLIA= # Optional +MINTER_SEPOLIA= +MINTER_ADMIN_SEPOLIA= # Optional +MINTER_GUARDIAN_SEPOLIA= # Optional + +## RPC API Keys +API_KEY_ALCHEMY_SEPOLIA= +API_KEY_INFURA_SEPOLIA= + +## Block explorer API Keys +API_KEY_ETHERSCAN_SEPOLIA= + +## Misc +FOUNDRY_PROFILE=default + +## ------------------------------- +## ------- MAINNETS CONFIG ------- +## ------------------------------- + +## AccessManager Deployer +MNEMONIC_MAINNET= +INDEX_MAINNET= # https://river.com/learn/images/articles/BIP-32-Hierarchial-Deterministic-Wallets.png + +## Addresses for AccessManager +INITIAL_HOLDER_MAINNET= # Optional +ADMIN_MAINNET= +UPGRADER_MAINNET= +UPGRADER_ADMIN_MAINNET= # Optional +UPGRADER_GUARDIAN_MAINNET= # Optional +CALLER_MAINNET= +CALLER_ADMIN_MAINNET= # Optional +CALLER_GUARDIAN_MAINNET= # Optional +MINTER_MAINNET= +MINTER_ADMIN_MAINNET= # Optional +MINTER_GUARDIAN_MAINNET= # Optional + +## RPC API Keys +API_KEY_ALCHEMY_MAINNET= +API_KEY_INFURA_MAINNET= + +## Block explorer API Keys +API_KEY_ETHERSCAN_MAINNET= + +## Misc FOUNDRY_PROFILE=default \ No newline at end of file diff --git a/contracts/.prettierignore b/contracts/.prettierignore index 92e527f..6eeb669 100644 --- a/contracts/.prettierignore +++ b/contracts/.prettierignore @@ -1,4 +1,4 @@ -lib -node_modules -cache +lib +node_modules +cache out \ No newline at end of file diff --git a/contracts/.prettierrc b/contracts/.prettierrc index 6c21f27..ff7e270 100644 --- a/contracts/.prettierrc +++ b/contracts/.prettierrc @@ -1,16 +1,16 @@ -{ - "plugins": ["prettier-plugin-solidity"], - "overrides": [ - { - "files": "*.sol", - "options": { - "parser": "solidity-parse", - "printWidth": 120, - "tabWidth": 4, - "useTabs": false, - "singleQuote": false, - "bracketSpacing": false - } - } - ] +{ + "plugins": ["prettier-plugin-solidity"], + "overrides": [ + { + "files": "*.sol", + "options": { + "parser": "solidity-parse", + "printWidth": 120, + "tabWidth": 4, + "useTabs": false, + "singleQuote": false, + "bracketSpacing": false + } + } + ] } \ No newline at end of file diff --git a/contracts/broadcast/deploy_liquidityPools.s.sol/80002/dry-run/run-latest.json b/contracts/broadcast/deploy_liquidityPools.s.sol/80002/dry-run/run-latest.json new file mode 100644 index 0000000..1bf0ee0 --- /dev/null +++ b/contracts/broadcast/deploy_liquidityPools.s.sol/80002/dry-run/run-latest.json @@ -0,0 +1,124 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE", + "contractName": "Token", + "contractAddress": "0x366a41534f7aa36c4169b35e28ef6b6501f676de", + "function": null, + "arguments": [ + "\"Genx\"", + "\"GENX\"", + "10000000000000000000000000" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "gas": "0xbe835", + "value": "0x0", + "input": "0x60806040523480156200001157600080fd5b5060405162000c9338038062000c938339810160408190526200003491620002ab565b82826003620000448382620003ad565b506004620000538282620003ad565b5050506200006833826200007160201b60201c565b505050620004a1565b6001600160a01b038216620000a15760405163ec442f0560e01b8152600060048201526024015b60405180910390fd5b620000af60008383620000b3565b5050565b6001600160a01b038316620000e2578060026000828254620000d6919062000479565b90915550620001569050565b6001600160a01b03831660009081526020819052604090205481811015620001375760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640162000098565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620001745760028054829003905562000193565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001d991815260200190565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020e57600080fd5b81516001600160401b03808211156200022b576200022b620001e6565b604051601f8301601f19908116603f01168101908282118183101715620002565762000256620001e6565b816040528381526020925086838588010111156200027357600080fd5b600091505b8382101562000297578582018301518183018401529082019062000278565b600093810190920192909252949350505050565b600080600060608486031215620002c157600080fd5b83516001600160401b0380821115620002d957600080fd5b620002e787838801620001fc565b94506020860151915080821115620002fe57600080fd5b506200030d86828701620001fc565b925050604084015190509250925092565b600181811c908216806200033357607f821691505b6020821081036200035457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003a857600081815260208120601f850160051c81016020861015620003835750805b601f850160051c820191505b81811015620003a4578281556001016200038f565b5050505b505050565b81516001600160401b03811115620003c957620003c9620001e6565b620003e181620003da84546200031e565b846200035a565b602080601f831160018114620004195760008415620004005750858301515b600019600386901b1c1916600185901b178555620003a4565b600085815260208120601f198616915b828110156200044a5788860151825594840194600190910190840162000429565b5085821015620004695787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200049b57634e487b7160e01b600052601160045260246000fd5b92915050565b6107e280620004b16000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806340c10f191161007157806340c10f191461012357806370a082311461013857806395d89b41146101615780639dc29fac14610169578063a9059cbb1461017c578063dd62ed3e1461018f57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101c8565b6040516100c3919061062c565b60405180910390f35b6100df6100da366004610696565b61025a565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f3660046106c0565b610274565b604051601281526020016100c3565b610136610131366004610696565b610298565b005b6100f36101463660046106fc565b6001600160a01b031660009081526020819052604090205490565b6100b66102a6565b610136610177366004610696565b6102b5565b6100df61018a366004610696565b6102bf565b6100f361019d36600461071e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101d790610751565b80601f016020809104026020016040519081016040528092919081815260200182805461020390610751565b80156102505780601f1061022557610100808354040283529160200191610250565b820191906000526020600020905b81548152906001019060200180831161023357829003601f168201915b5050505050905090565b6000336102688185856102cd565b60019150505b92915050565b6000336102828582856102df565b61028d858585610362565b506001949350505050565b6102a282826103c1565b5050565b6060600480546101d790610751565b6102a282826103f7565b600033610268818585610362565b6102da838383600161042d565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461035c578181101561034d57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b61035c8484848403600061042d565b50505050565b6001600160a01b03831661038c57604051634b637e8f60e11b815260006004820152602401610344565b6001600160a01b0382166103b65760405163ec442f0560e01b815260006004820152602401610344565b6102da838383610502565b6001600160a01b0382166103eb5760405163ec442f0560e01b815260006004820152602401610344565b6102a260008383610502565b6001600160a01b03821661042157604051634b637e8f60e11b815260006004820152602401610344565b6102a282600083610502565b6001600160a01b0384166104575760405163e602df0560e01b815260006004820152602401610344565b6001600160a01b03831661048157604051634a1406b160e11b815260006004820152602401610344565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561035c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104f491815260200190565b60405180910390a350505050565b6001600160a01b03831661052d578060026000828254610522919061078b565b9091555061059f9050565b6001600160a01b038316600090815260208190526040902054818110156105805760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610344565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166105bb576002805482900390556105da565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161061f91815260200190565b60405180910390a3505050565b600060208083528351808285015260005b818110156106595785810183015185820160400152820161063d565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461069157600080fd5b919050565b600080604083850312156106a957600080fd5b6106b28361067a565b946020939093013593505050565b6000806000606084860312156106d557600080fd5b6106de8461067a565b92506106ec6020850161067a565b9150604084013590509250925092565b60006020828403121561070e57600080fd5b6107178261067a565b9392505050565b6000806040838503121561073157600080fd5b61073a8361067a565b91506107486020840161067a565b90509250929050565b600181811c9082168061076557607f821691505b60208210810361078557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561026e57634e487b7160e01b600052601160045260246000fdfea2646970667358221220abef116e539327f2c5b6530f9de1449b7db17a371a8343668b2147fe8252324164736f6c63430008140033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000084595161401484a000000000000000000000000000000000000000000000000000000000000000000000447656e7800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000447454e5800000000000000000000000000000000000000000000000000000000", + "nonce": "0xed", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE", + "contractName": "Token", + "contractAddress": "0x1b1291d36f810dfadd1be80daf2831a3c0fc905b", + "function": null, + "arguments": [ + "\"Gens\"", + "\"GENS\"", + "1000000000000000000000000" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "gas": "0xbe826", + "value": "0x0", + "input": "0x60806040523480156200001157600080fd5b5060405162000c9338038062000c938339810160408190526200003491620002ab565b82826003620000448382620003ad565b506004620000538282620003ad565b5050506200006833826200007160201b60201c565b505050620004a1565b6001600160a01b038216620000a15760405163ec442f0560e01b8152600060048201526024015b60405180910390fd5b620000af60008383620000b3565b5050565b6001600160a01b038316620000e2578060026000828254620000d6919062000479565b90915550620001569050565b6001600160a01b03831660009081526020819052604090205481811015620001375760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640162000098565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620001745760028054829003905562000193565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001d991815260200190565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020e57600080fd5b81516001600160401b03808211156200022b576200022b620001e6565b604051601f8301601f19908116603f01168101908282118183101715620002565762000256620001e6565b816040528381526020925086838588010111156200027357600080fd5b600091505b8382101562000297578582018301518183018401529082019062000278565b600093810190920192909252949350505050565b600080600060608486031215620002c157600080fd5b83516001600160401b0380821115620002d957600080fd5b620002e787838801620001fc565b94506020860151915080821115620002fe57600080fd5b506200030d86828701620001fc565b925050604084015190509250925092565b600181811c908216806200033357607f821691505b6020821081036200035457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003a857600081815260208120601f850160051c81016020861015620003835750805b601f850160051c820191505b81811015620003a4578281556001016200038f565b5050505b505050565b81516001600160401b03811115620003c957620003c9620001e6565b620003e181620003da84546200031e565b846200035a565b602080601f831160018114620004195760008415620004005750858301515b600019600386901b1c1916600185901b178555620003a4565b600085815260208120601f198616915b828110156200044a5788860151825594840194600190910190840162000429565b5085821015620004695787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200049b57634e487b7160e01b600052601160045260246000fd5b92915050565b6107e280620004b16000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806340c10f191161007157806340c10f191461012357806370a082311461013857806395d89b41146101615780639dc29fac14610169578063a9059cbb1461017c578063dd62ed3e1461018f57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101c8565b6040516100c3919061062c565b60405180910390f35b6100df6100da366004610696565b61025a565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f3660046106c0565b610274565b604051601281526020016100c3565b610136610131366004610696565b610298565b005b6100f36101463660046106fc565b6001600160a01b031660009081526020819052604090205490565b6100b66102a6565b610136610177366004610696565b6102b5565b6100df61018a366004610696565b6102bf565b6100f361019d36600461071e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101d790610751565b80601f016020809104026020016040519081016040528092919081815260200182805461020390610751565b80156102505780601f1061022557610100808354040283529160200191610250565b820191906000526020600020905b81548152906001019060200180831161023357829003601f168201915b5050505050905090565b6000336102688185856102cd565b60019150505b92915050565b6000336102828582856102df565b61028d858585610362565b506001949350505050565b6102a282826103c1565b5050565b6060600480546101d790610751565b6102a282826103f7565b600033610268818585610362565b6102da838383600161042d565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461035c578181101561034d57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b61035c8484848403600061042d565b50505050565b6001600160a01b03831661038c57604051634b637e8f60e11b815260006004820152602401610344565b6001600160a01b0382166103b65760405163ec442f0560e01b815260006004820152602401610344565b6102da838383610502565b6001600160a01b0382166103eb5760405163ec442f0560e01b815260006004820152602401610344565b6102a260008383610502565b6001600160a01b03821661042157604051634b637e8f60e11b815260006004820152602401610344565b6102a282600083610502565b6001600160a01b0384166104575760405163e602df0560e01b815260006004820152602401610344565b6001600160a01b03831661048157604051634a1406b160e11b815260006004820152602401610344565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561035c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104f491815260200190565b60405180910390a350505050565b6001600160a01b03831661052d578060026000828254610522919061078b565b9091555061059f9050565b6001600160a01b038316600090815260208190526040902054818110156105805760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610344565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166105bb576002805482900390556105da565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161061f91815260200190565b60405180910390a3505050565b600060208083528351808285015260005b818110156106595785810183015185820160400152820161063d565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461069157600080fd5b919050565b600080604083850312156106a957600080fd5b6106b28361067a565b946020939093013593505050565b6000806000606084860312156106d557600080fd5b6106de8461067a565b92506106ec6020850161067a565b9150604084013590509250925092565b60006020828403121561070e57600080fd5b6107178261067a565b9392505050565b6000806040838503121561073157600080fd5b61073a8361067a565b91506107486020840161067a565b90509250929050565b600181811c9082168061076557607f821691505b60208210810361078557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561026e57634e487b7160e01b600052601160045260246000fdfea2646970667358221220abef116e539327f2c5b6530f9de1449b7db17a371a8343668b2147fe8252324164736f6c63430008140033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000d3c21bcecceda1000000000000000000000000000000000000000000000000000000000000000000000447656e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000447454e5300000000000000000000000000000000000000000000000000000000", + "nonce": "0xee", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE", + "contractName": "LiquidityToken", + "contractAddress": "0x73312eabe93b36569a23ea986ec07c053ae73481", + "function": null, + "arguments": null, + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "gas": "0xabcb0", + "value": "0x0", + "input": "0x608060405234801561001057600080fd5b506040518060400160405280601481526020017f4c697175696469747920506f6f6c20546f6b656e0000000000000000000000008152506040518060400160405280600381526020016213141560ea1b81525081600390816100729190610126565b50600461007f8282610126565b5050506101e5565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806100b157607f821691505b6020821081036100d157634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561012157600081815260208120601f850160051c810160208610156100fe5750805b601f850160051c820191505b8181101561011d5782815560010161010a565b5050505b505050565b81516001600160401b0381111561013f5761013f610087565b6101538161014d845461009d565b846100d7565b602080601f83116001811461018857600084156101705750858301515b600019600386901b1c1916600185901b17855561011d565b600085815260208120601f198616915b828110156101b757888601518255948401946001909101908401610198565b50858210156101d55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6107e2806101f46000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806340c10f191161007157806340c10f191461012357806370a082311461013857806395d89b41146101615780639dc29fac14610169578063a9059cbb1461017c578063dd62ed3e1461018f57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101c8565b6040516100c3919061062c565b60405180910390f35b6100df6100da366004610696565b61025a565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f3660046106c0565b610274565b604051601281526020016100c3565b610136610131366004610696565b610298565b005b6100f36101463660046106fc565b6001600160a01b031660009081526020819052604090205490565b6100b66102a6565b610136610177366004610696565b6102b5565b6100df61018a366004610696565b6102bf565b6100f361019d36600461071e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101d790610751565b80601f016020809104026020016040519081016040528092919081815260200182805461020390610751565b80156102505780601f1061022557610100808354040283529160200191610250565b820191906000526020600020905b81548152906001019060200180831161023357829003601f168201915b5050505050905090565b6000336102688185856102cd565b60019150505b92915050565b6000336102828582856102df565b61028d858585610362565b506001949350505050565b6102a282826103c1565b5050565b6060600480546101d790610751565b6102a282826103f7565b600033610268818585610362565b6102da838383600161042d565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461035c578181101561034d57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b61035c8484848403600061042d565b50505050565b6001600160a01b03831661038c57604051634b637e8f60e11b815260006004820152602401610344565b6001600160a01b0382166103b65760405163ec442f0560e01b815260006004820152602401610344565b6102da838383610502565b6001600160a01b0382166103eb5760405163ec442f0560e01b815260006004820152602401610344565b6102a260008383610502565b6001600160a01b03821661042157604051634b637e8f60e11b815260006004820152602401610344565b6102a282600083610502565b6001600160a01b0384166104575760405163e602df0560e01b815260006004820152602401610344565b6001600160a01b03831661048157604051634a1406b160e11b815260006004820152602401610344565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561035c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104f491815260200190565b60405180910390a350505050565b6001600160a01b03831661052d578060026000828254610522919061078b565b9091555061059f9050565b6001600160a01b038316600090815260208190526040902054818110156105805760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610344565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166105bb576002805482900390556105da565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161061f91815260200190565b60405180910390a3505050565b600060208083528351808285015260005b818110156106595785810183015185820160400152820161063d565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461069157600080fd5b919050565b600080604083850312156106a957600080fd5b6106b28361067a565b946020939093013593505050565b6000806000606084860312156106d557600080fd5b6106de8461067a565b92506106ec6020850161067a565b9150604084013590509250925092565b60006020828403121561070e57600080fd5b6107178261067a565b9392505050565b6000806040838503121561073157600080fd5b61073a8361067a565b91506107486020840161067a565b90509250929050565b600181811c9082168061076557607f821691505b60208210810361078557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561026e57634e487b7160e01b600052601160045260246000fdfea264697066735822122049dc43d1cee50c3efc79b352e96f6c1d287239e9c804c9f16dd825440d73917d64736f6c63430008140033", + "nonce": "0xef", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE", + "contractName": "LiquidityPoolFactory", + "contractAddress": "0x1edface3a9ddca2dc09e69c76ef7449943486f7e", + "function": null, + "arguments": [ + "0x73312EABE93B36569a23Ea986Ec07c053aE73481", + "0x3964D0011EB003488Ab59B1ce0C235baA3998bdd" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "gas": "0x2b25f0", + "value": "0x0", + "input": "0x608060405234801561001057600080fd5b5060405161261838038061261883398101604081905261002f9161013f565b60016000908155600480546001600160a01b0319166001600160a01b03851617905561005b908261008e565b506100867fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758261008e565b505050610172565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101195760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a450600161011d565b5060005b92915050565b80516001600160a01b038116811461013a57600080fd5b919050565b6000806040838503121561015257600080fd5b61015b83610123565b915061016960208401610123565b90509250929050565b612497806101816000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063531aa03e1161009757806393c907b41161006657806393c907b414610293578063a217fddf146102a6578063d547741f146102ae578063efde4e64146102c157600080fd5b8063531aa03e1461021057806365c940e51461024457806375b238fc1461025957806391d148541461028057600080fd5b806336568abe116100d357806336568abe1461019f5780633fa1e0c8146101b257806341d1de97146101ea57806343cd8f7e146101fd57600080fd5b806301ffc9a714610105578063179671831461012d578063248a9ca3146101585780632f2ff15d1461018a575b600080fd5b610118610113366004610964565b6102c9565b60405190151581526020015b60405180910390f35b61014061013b366004610995565b610300565b6040516001600160a01b039091168152602001610124565b61017c610166366004610995565b6000908152600160208190526040909120015490565b604051908152602001610124565b61019d6101983660046109ca565b610330565b005b61019d6101ad3660046109ca565b61035c565b6101406101c03660046109f6565b6001600160a01b039182166000908152600260209081526040808320938516835292905220541690565b6101406101f8366004610995565b610394565b600454610140906001600160a01b031681565b61014061021e3660046109f6565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b61024c6103be565b6040516101249190610a20565b61017c7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b61011861028e3660046109ca565b610420565b6101406102a1366004610a6d565b61044b565b61017c600081565b61019d6102bc3660046109ca565b6107d7565b60035461017c565b60006001600160e01b03198216637965db0b60e01b14806102fa57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006003828154811061031557610315610ab8565b6000918252602090912001546001600160a01b031692915050565b6000828152600160208190526040909120015461034c816107fd565b610356838361080a565b50505050565b6001600160a01b03811633146103855760405163334bd91960e11b815260040160405180910390fd5b61038f8282610883565b505050565b600381815481106103a457600080fd5b6000918252602090912001546001600160a01b0316905081565b6060600380548060200260200160405190810160405280929190818152602001828054801561041657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116103f8575b5050505050905090565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006104556108f0565b6001600160a01b0385161580159061047557506001600160a01b03841615155b6104c65760405162461bcd60e51b815260206004820181905260248201527f466163746f72793a20696e76616c696420746f6b656e2061646472657373657360448201526064015b60405180910390fd5b836001600160a01b0316856001600160a01b0316036105325760405162461bcd60e51b815260206004820152602260248201527f466163746f72793a206964656e746963616c20746f6b656e2061646472657373604482015261657360f01b60648201526084016104bd565b6001600160a01b03858116600090815260026020908152604080832088851684529091529020541615801561058c57506001600160a01b038481166000908152600260209081526040808320898516845290915290205416155b6105d85760405162461bcd60e51b815260206004820152601c60248201527f466163746f72793a20706f6f6c20616c7265616479206578697374730000000060448201526064016104bd565b6106027fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610420565b61064e5760405162461bcd60e51b815260206004820152601c60248201527f466163746f72793a2063616c6c6572206973206e6f742061646d696e0000000060448201526064016104bd565b600060405161065c90610957565b604051809103906000f080158015610678573d6000803e3d6000fd5b50600480546040516325b1b7b960e11b81526001600160a01b038a8116938201939093528883166024820152908216604482015260648101869052600a608482015286821660a4820152919250821690634b636f729060c401600060405180830381600087803b1580156106eb57600080fd5b505af11580156106ff573d6000803e3d6000fd5b505050506001600160a01b0386811660008181526002602081815260408084208b871680865290835281852080549789166001600160a01b03199889168117909155938352818520868652835281852080548816851790556003805460018101825595527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90940180549096168317909555935190815290927f9c5d829b9b23efc461f9aeef91979ec04bb903feb3bee4f26d22114abfc7335b910160405180910390a390506107cf6001600055565b949350505050565b600082815260016020819052604090912001546107f3816107fd565b6103568383610883565b610807813361091a565b50565b60006108168383610420565b61087b5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016102fa565b5060006102fa565b600061088f8383610420565b1561087b5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102fa565b60026000540361091357604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b6109248282610420565b6109535760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016104bd565b5050565b61199380610acf83390190565b60006020828403121561097657600080fd5b81356001600160e01b03198116811461098e57600080fd5b9392505050565b6000602082840312156109a757600080fd5b5035919050565b80356001600160a01b03811681146109c557600080fd5b919050565b600080604083850312156109dd57600080fd5b823591506109ed602084016109ae565b90509250929050565b60008060408385031215610a0957600080fd5b610a12836109ae565b91506109ed602084016109ae565b6020808252825182820181905260009190848201906040850190845b81811015610a615783516001600160a01b031683529284019291840191600101610a3c565b50909695505050505050565b60008060008060808587031215610a8357600080fd5b610a8c856109ae565b9350610a9a602086016109ae565b9250610aa8604086016109ae565b9396929550929360600135925050565b634e487b7160e01b600052603260045260246000fdfe608060405234801561001057600080fd5b50600160005561196e806100256000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80635f64b55b116100b85780639f1d0f591161007c5780639f1d0f59146102b9578063a217fddf146102cc578063aa0b5988146102d4578063c1f1b1b5146102e7578063d547741f1461030d578063f140a35a1461032057600080fd5b80635f64b55b1461024657806375b238fc1461025957806391d14854146102805780639c8f9f23146102935780639cd441da146102a657600080fd5b80632f2ff15d116100ff5780632f2ff15d146101e557806336568abe146101fa57806343cd8f7e1461020d578063449e815d146102205780634b636f721461023357600080fd5b806301ffc9a71461013c5780630902f1ac146101645780630fc63d101461017f578063248a9ca3146101aa57806326232a2e146101dc575b600080fd5b61014f61014a36600461171d565b610333565b60405190151581526020015b60405180910390f35b6005546006546040805192835260208301919091520161015b565b600254610192906001600160a01b031681565b6040516001600160a01b03909116815260200161015b565b6101ce6101b8366004611747565b6000908152600160208190526040909120015490565b60405190815260200161015b565b6101ce60075481565b6101f86101f3366004611777565b61036a565b005b6101f8610208366004611777565b610396565b600454610192906001600160a01b031681565b6101ce61022e3660046117a3565b6103ce565b6101f86102413660046117cd565b6103e1565b600354610192906001600160a01b031681565b6101ce7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b61014f61028e366004611777565b610639565b6101f86102a1366004611747565b610664565b6101f86102b4366004611833565b610a95565b6101f86102c7366004611855565b610ef3565b6101ce600081565b6101f86102e2366004611747565b611303565b600254600354604080516001600160a01b0393841681529290911660208301520161015b565b6101f861031b366004611777565b611387565b6101ce61032e366004611777565b6113ad565b60006001600160e01b03198216637965db0b60e01b148061036457506301ffc9a760e01b6001600160e01b03198316145b92915050565b600082815260016020819052604090912001546103868161144f565b6103908383611459565b50505050565b6001600160a01b03811633146103bf5760405163334bd91960e11b815260040160405180910390fd5b6103c982826114d2565b505050565b60006103da82846113ad565b9392505050565b6103e961153f565b6001600160a01b0386161580159061040957506001600160a01b03851615155b61045a5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420746f6b656e2061646472657373657300000000000000000060448201526064015b60405180910390fd5b846001600160a01b0316866001600160a01b0316036104bb5760405162461bcd60e51b815260206004820152601960248201527f4964656e746963616c20746f6b656e20616464726573736573000000000000006044820152606401610451565b6001600160a01b0384166105115760405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964206c697175696469747920746f6b656e2061646472657373006044820152606401610451565b600083118015610522575061271083105b6105655760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420706c6174666f726d2066656560601b6044820152606401610451565b600082116105b55760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964206d696e696d756d206c6971756964697479000000000000006044820152606401610451565b600280546001600160a01b038089166001600160a01b031992831617909255600380548884169083161790556004805492871692909116919091179055600783905560088290556106267fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177582611459565b506106316001600055565b505050505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61066c61153f565b600081116106bc5760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206c697175696469747920616d6f756e7400000000000000006044820152606401610451565b6000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610711573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107359190611888565b60055461074290846118b7565b61074c91906118ce565b90506000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c79190611888565b6006546107d490856118b7565b6107de91906118ce565b90506000821180156107f05750600081115b61083c5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c6964207769746864726177616c20616d6f756e74730000000000006044820152606401610451565b60048054604051632770a7eb60e21b81523392810192909252602482018590526001600160a01b031690639dc29fac90604401600060405180830381600087803b15801561088957600080fd5b505af115801561089d573d6000803e3d6000fd5b505060025460405163a9059cbb60e01b8152336004820152602481018690526001600160a01b03909116925063a9059cbb91506044016020604051808303816000875af11580156108f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091691906118f0565b61095e5760405162461bcd60e51b8152602060048201526019602482015278151c985b9cd9995c881bd9881d1bdad95b904819985a5b1959603a1b6044820152606401610451565b60035460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156109af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d391906118f0565b610a1b5760405162461bcd60e51b8152602060048201526019602482015278151c985b9cd9995c881bd9881d1bdad95b908819985a5b1959603a1b6044820152606401610451565b8160056000828254610a2d9190611912565b925050819055508060066000828254610a469190611912565b9091555050604080518381526020810183905233917f96cd817c6329656790ef8fba7675405193677d39619571282f5e21f3a98cd059910160405180910390a25050610a926001600055565b50565b610a9d61153f565b600082118015610aad5750600081115b610aeb5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420616d6f756e747360881b6044820152606401610451565b6002546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6691906118f0565b610bae5760405162461bcd60e51b8152602060048201526019602482015278151c985b9cd9995c881bd9881d1bdad95b904819985a5b1959603a1b6044820152606401610451565b6003546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2991906118f0565b610c715760405162461bcd60e51b8152602060048201526019602482015278151c985b9cd9995c881bd9881d1bdad95b908819985a5b1959603a1b6044820152606401610451565b6000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cea9190611888565b600003610db757610cfb8383611569565b905060008111610d4d5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e74206c6971756964697479206d696e7465640000006044820152606401610451565b600480546040516340c10f1960e01b81523392810192909252602482018390526001600160a01b0316906340c10f1990604401600060405180830381600087803b158015610d9a57600080fd5b505af1158015610dae573d6000803e3d6000fd5b50505050610e79565b610dc1838361158b565b905060008111610e135760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e74206c6971756964697479206d696e7465640000006044820152606401610451565b600480546040516340c10f1960e01b81523392810192909252602482018390526001600160a01b0316906340c10f1990604401600060405180830381600087803b158015610e6057600080fd5b505af1158015610e74573d6000803e3d6000fd5b505050505b8260056000828254610e8b9190611925565b925050819055508160066000828254610ea49190611925565b9091555050604080518481526020810184905233917fac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee45910160405180910390a250610eef6001600055565b5050565b610efb61153f565b6002546001600160a01b0384811691161480610f2457506003546001600160a01b038481169116145b610f685760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401610451565b60008211610faf5760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081a5b9c1d5d08185b5bdd5b9d60621b6044820152606401610451565b6002546000906001600160a01b03858116911614610fd8576002546001600160a01b0316610fe5565b6003546001600160a01b03165b90506000610ff384866113ad565b9050828110156110455760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e74206f757470757420616d6f756e740000000000006044820152606401610451565b6040516323b872dd60e01b8152336004820152306024820152604481018590526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015611098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bc91906118f0565b6111085760405162461bcd60e51b815260206004820152601a60248201527f5472616e73666572206f6620746f6b656e496e206661696c65640000000000006044820152606401610451565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611155573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117991906118f0565b6111c55760405162461bcd60e51b815260206004820152601b60248201527f5472616e73666572206f6620746f6b656e4f7574206661696c656400000000006044820152606401610451565b6002546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561120d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112319190611888565b6005556003546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561127c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190611888565b600655604080516001600160a01b0387811682526020820187905284168183015260608101839052905133917f5380cf97d8f645d3c4896da60c053458dca03a3a31cec642ac80e1ddf0d8d02a919081900360800190a250506103c96001600055565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561132d8161144f565b60008211801561133e575061271082105b6113815760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420706c6174666f726d2066656560601b6044820152606401610451565b50600755565b600082815260016020819052604090912001546113a38161144f565b61039083836114d2565b60025460009081906001600160a01b038481169116146113cf576006546113d3565b6005545b6002549091506000906001600160a01b038581169116146113f6576005546113fa565b6006545b905060006127106007546127106114119190611912565b61141b90886118b7565b61142591906118ce565b90506114318184611925565b61143b83836118b7565b61144591906118ce565b9695505050505050565b610a92813361165e565b60006114658383610639565b6114ca5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610364565b506000610364565b60006114de8383610639565b156114ca5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610364565b60026000540361156257604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b60085460009061158161157c84866118b7565b611697565b6103da9190611912565b60048054604080516318160ddd60e01b8152905160009384936001600160a01b0316926318160ddd92818301926020928290030181865afa1580156115d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f89190611888565b9050801561163c576005546116379061161183876118b7565b61161b91906118ce565b60065461162884876118b7565b61163291906118ce565b611707565b611656565b60085461164c61157c85876118b7565b6116569190611912565b949350505050565b6116688282610639565b610eef5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610451565b600060038211156116f857508060006116b16002836118ce565b6116bc906001611925565b90505b818110156116f2579050806002816116d781866118ce565b6116e19190611925565b6116eb91906118ce565b90506116bf565b50919050565b8115611702575060015b919050565b600081831061171657816103da565b5090919050565b60006020828403121561172f57600080fd5b81356001600160e01b0319811681146103da57600080fd5b60006020828403121561175957600080fd5b5035919050565b80356001600160a01b038116811461170257600080fd5b6000806040838503121561178a57600080fd5b8235915061179a60208401611760565b90509250929050565b600080604083850312156117b657600080fd5b6117bf83611760565b946020939093013593505050565b60008060008060008060c087890312156117e657600080fd5b6117ef87611760565b95506117fd60208801611760565b945061180b60408801611760565b9350606087013592506080870135915061182760a08801611760565b90509295509295509295565b6000806040838503121561184657600080fd5b50508035926020909101359150565b60008060006060848603121561186a57600080fd5b61187384611760565b95602085013595506040909401359392505050565b60006020828403121561189a57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610364576103646118a1565b6000826118eb57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561190257600080fd5b815180151581146103da57600080fd5b81810381811115610364576103646118a1565b80820180821115610364576103646118a156fea2646970667358221220a9c559f9a9b8149d8201eab0250ffecd35c73de717669a16e36a7816f2cf870664736f6c63430008140033a2646970667358221220b1ae913848a01339afbc3c9afdbb273ad2fd43daeabed459d3ce5fd9a10fba1864736f6c6343000814003300000000000000000000000073312eabe93b36569a23ea986ec07c053ae734810000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "nonce": "0xf0", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "LiquidityPoolFactory", + "contractAddress": "0x1edface3a9ddca2dc09e69c76ef7449943486f7e", + "function": "createPool(address,address,address,uint256)", + "arguments": [ + "0x366a41534f7Aa36C4169B35E28eF6b6501f676dE", + "0x1B1291D36F810DFADd1be80Daf2831A3C0fC905B", + "0x3964D0011EB003488Ab59B1ce0C235baA3998bdd", + "30" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x1edface3a9ddca2dc09e69c76ef7449943486f7e", + "gas": "0x24164d", + "value": "0x0", + "input": "0x93c907b4000000000000000000000000366a41534f7aa36c4169b35e28ef6b6501f676de0000000000000000000000001b1291d36f810dfadd1be80daf2831a3c0fc905b0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd000000000000000000000000000000000000000000000000000000000000001e", + "nonce": "0xf1", + "chainId": "0x13882" + }, + "additionalContracts": [ + { + "transactionType": "CREATE", + "address": "0xd51a8175247d27953204c3df1715c1a4d54e7419", + "initCode": "0x608060405234801561001057600080fd5b50600160005561196e806100256000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80635f64b55b116100b85780639f1d0f591161007c5780639f1d0f59146102b9578063a217fddf146102cc578063aa0b5988146102d4578063c1f1b1b5146102e7578063d547741f1461030d578063f140a35a1461032057600080fd5b80635f64b55b1461024657806375b238fc1461025957806391d14854146102805780639c8f9f23146102935780639cd441da146102a657600080fd5b80632f2ff15d116100ff5780632f2ff15d146101e557806336568abe146101fa57806343cd8f7e1461020d578063449e815d146102205780634b636f721461023357600080fd5b806301ffc9a71461013c5780630902f1ac146101645780630fc63d101461017f578063248a9ca3146101aa57806326232a2e146101dc575b600080fd5b61014f61014a36600461171d565b610333565b60405190151581526020015b60405180910390f35b6005546006546040805192835260208301919091520161015b565b600254610192906001600160a01b031681565b6040516001600160a01b03909116815260200161015b565b6101ce6101b8366004611747565b6000908152600160208190526040909120015490565b60405190815260200161015b565b6101ce60075481565b6101f86101f3366004611777565b61036a565b005b6101f8610208366004611777565b610396565b600454610192906001600160a01b031681565b6101ce61022e3660046117a3565b6103ce565b6101f86102413660046117cd565b6103e1565b600354610192906001600160a01b031681565b6101ce7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b61014f61028e366004611777565b610639565b6101f86102a1366004611747565b610664565b6101f86102b4366004611833565b610a95565b6101f86102c7366004611855565b610ef3565b6101ce600081565b6101f86102e2366004611747565b611303565b600254600354604080516001600160a01b0393841681529290911660208301520161015b565b6101f861031b366004611777565b611387565b6101ce61032e366004611777565b6113ad565b60006001600160e01b03198216637965db0b60e01b148061036457506301ffc9a760e01b6001600160e01b03198316145b92915050565b600082815260016020819052604090912001546103868161144f565b6103908383611459565b50505050565b6001600160a01b03811633146103bf5760405163334bd91960e11b815260040160405180910390fd5b6103c982826114d2565b505050565b60006103da82846113ad565b9392505050565b6103e961153f565b6001600160a01b0386161580159061040957506001600160a01b03851615155b61045a5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420746f6b656e2061646472657373657300000000000000000060448201526064015b60405180910390fd5b846001600160a01b0316866001600160a01b0316036104bb5760405162461bcd60e51b815260206004820152601960248201527f4964656e746963616c20746f6b656e20616464726573736573000000000000006044820152606401610451565b6001600160a01b0384166105115760405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964206c697175696469747920746f6b656e2061646472657373006044820152606401610451565b600083118015610522575061271083105b6105655760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420706c6174666f726d2066656560601b6044820152606401610451565b600082116105b55760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964206d696e696d756d206c6971756964697479000000000000006044820152606401610451565b600280546001600160a01b038089166001600160a01b031992831617909255600380548884169083161790556004805492871692909116919091179055600783905560088290556106267fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177582611459565b506106316001600055565b505050505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61066c61153f565b600081116106bc5760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206c697175696469747920616d6f756e7400000000000000006044820152606401610451565b6000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610711573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107359190611888565b60055461074290846118b7565b61074c91906118ce565b90506000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c79190611888565b6006546107d490856118b7565b6107de91906118ce565b90506000821180156107f05750600081115b61083c5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c6964207769746864726177616c20616d6f756e74730000000000006044820152606401610451565b60048054604051632770a7eb60e21b81523392810192909252602482018590526001600160a01b031690639dc29fac90604401600060405180830381600087803b15801561088957600080fd5b505af115801561089d573d6000803e3d6000fd5b505060025460405163a9059cbb60e01b8152336004820152602481018690526001600160a01b03909116925063a9059cbb91506044016020604051808303816000875af11580156108f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091691906118f0565b61095e5760405162461bcd60e51b8152602060048201526019602482015278151c985b9cd9995c881bd9881d1bdad95b904819985a5b1959603a1b6044820152606401610451565b60035460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156109af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d391906118f0565b610a1b5760405162461bcd60e51b8152602060048201526019602482015278151c985b9cd9995c881bd9881d1bdad95b908819985a5b1959603a1b6044820152606401610451565b8160056000828254610a2d9190611912565b925050819055508060066000828254610a469190611912565b9091555050604080518381526020810183905233917f96cd817c6329656790ef8fba7675405193677d39619571282f5e21f3a98cd059910160405180910390a25050610a926001600055565b50565b610a9d61153f565b600082118015610aad5750600081115b610aeb5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420616d6f756e747360881b6044820152606401610451565b6002546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6691906118f0565b610bae5760405162461bcd60e51b8152602060048201526019602482015278151c985b9cd9995c881bd9881d1bdad95b904819985a5b1959603a1b6044820152606401610451565b6003546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2991906118f0565b610c715760405162461bcd60e51b8152602060048201526019602482015278151c985b9cd9995c881bd9881d1bdad95b908819985a5b1959603a1b6044820152606401610451565b6000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cea9190611888565b600003610db757610cfb8383611569565b905060008111610d4d5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e74206c6971756964697479206d696e7465640000006044820152606401610451565b600480546040516340c10f1960e01b81523392810192909252602482018390526001600160a01b0316906340c10f1990604401600060405180830381600087803b158015610d9a57600080fd5b505af1158015610dae573d6000803e3d6000fd5b50505050610e79565b610dc1838361158b565b905060008111610e135760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e74206c6971756964697479206d696e7465640000006044820152606401610451565b600480546040516340c10f1960e01b81523392810192909252602482018390526001600160a01b0316906340c10f1990604401600060405180830381600087803b158015610e6057600080fd5b505af1158015610e74573d6000803e3d6000fd5b505050505b8260056000828254610e8b9190611925565b925050819055508160066000828254610ea49190611925565b9091555050604080518481526020810184905233917fac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee45910160405180910390a250610eef6001600055565b5050565b610efb61153f565b6002546001600160a01b0384811691161480610f2457506003546001600160a01b038481169116145b610f685760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401610451565b60008211610faf5760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081a5b9c1d5d08185b5bdd5b9d60621b6044820152606401610451565b6002546000906001600160a01b03858116911614610fd8576002546001600160a01b0316610fe5565b6003546001600160a01b03165b90506000610ff384866113ad565b9050828110156110455760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e74206f757470757420616d6f756e740000000000006044820152606401610451565b6040516323b872dd60e01b8152336004820152306024820152604481018590526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015611098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bc91906118f0565b6111085760405162461bcd60e51b815260206004820152601a60248201527f5472616e73666572206f6620746f6b656e496e206661696c65640000000000006044820152606401610451565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611155573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117991906118f0565b6111c55760405162461bcd60e51b815260206004820152601b60248201527f5472616e73666572206f6620746f6b656e4f7574206661696c656400000000006044820152606401610451565b6002546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561120d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112319190611888565b6005556003546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561127c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190611888565b600655604080516001600160a01b0387811682526020820187905284168183015260608101839052905133917f5380cf97d8f645d3c4896da60c053458dca03a3a31cec642ac80e1ddf0d8d02a919081900360800190a250506103c96001600055565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561132d8161144f565b60008211801561133e575061271082105b6113815760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420706c6174666f726d2066656560601b6044820152606401610451565b50600755565b600082815260016020819052604090912001546113a38161144f565b61039083836114d2565b60025460009081906001600160a01b038481169116146113cf576006546113d3565b6005545b6002549091506000906001600160a01b038581169116146113f6576005546113fa565b6006545b905060006127106007546127106114119190611912565b61141b90886118b7565b61142591906118ce565b90506114318184611925565b61143b83836118b7565b61144591906118ce565b9695505050505050565b610a92813361165e565b60006114658383610639565b6114ca5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610364565b506000610364565b60006114de8383610639565b156114ca5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610364565b60026000540361156257604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b60085460009061158161157c84866118b7565b611697565b6103da9190611912565b60048054604080516318160ddd60e01b8152905160009384936001600160a01b0316926318160ddd92818301926020928290030181865afa1580156115d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f89190611888565b9050801561163c576005546116379061161183876118b7565b61161b91906118ce565b60065461162884876118b7565b61163291906118ce565b611707565b611656565b60085461164c61157c85876118b7565b6116569190611912565b949350505050565b6116688282610639565b610eef5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610451565b600060038211156116f857508060006116b16002836118ce565b6116bc906001611925565b90505b818110156116f2579050806002816116d781866118ce565b6116e19190611925565b6116eb91906118ce565b90506116bf565b50919050565b8115611702575060015b919050565b600081831061171657816103da565b5090919050565b60006020828403121561172f57600080fd5b81356001600160e01b0319811681146103da57600080fd5b60006020828403121561175957600080fd5b5035919050565b80356001600160a01b038116811461170257600080fd5b6000806040838503121561178a57600080fd5b8235915061179a60208401611760565b90509250929050565b600080604083850312156117b657600080fd5b6117bf83611760565b946020939093013593505050565b60008060008060008060c087890312156117e657600080fd5b6117ef87611760565b95506117fd60208801611760565b945061180b60408801611760565b9350606087013592506080870135915061182760a08801611760565b90509295509295509295565b6000806040838503121561184657600080fd5b50508035926020909101359150565b60008060006060848603121561186a57600080fd5b61187384611760565b95602085013595506040909401359392505050565b60006020828403121561189a57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610364576103646118a1565b6000826118eb57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561190257600080fd5b815180151581146103da57600080fd5b81810381811115610364576103646118a1565b80820180821115610364576103646118a156fea2646970667358221220a9c559f9a9b8149d8201eab0250ffecd35c73de717669a16e36a7816f2cf870664736f6c63430008140033" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1719266506, + "chain": 80002, + "commit": "de4b5bc" +} \ No newline at end of file diff --git a/contracts/broadcast/deploy_liquidityPools.s.sol/80002/run-1718809455.json b/contracts/broadcast/deploy_liquidityPools.s.sol/80002/run-1718809455.json new file mode 100644 index 0000000..2b595af --- /dev/null +++ b/contracts/broadcast/deploy_liquidityPools.s.sol/80002/run-1718809455.json @@ -0,0 +1,523 @@ +{ + "transactions": [ + { + "hash": "0x07e5e135d50947d6ac6ee57d8e4ff8ee3cc36325f1458a8f4d1a2a768a00c9d4", + "transactionType": "CREATE", + "contractName": "GensToken", + "contractAddress": "0x1cf57a7b60bb82046cd1bca88f1b567e9f296865", + "function": null, + "arguments": null, + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "gas": "0xe9941", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b50610c5a8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806340c10f191161007157806340c10f19146101425780634cd88b761461015757806370a082311461016a57806395d89b41146101a0578063a9059cbb146101a8578063dd62ed3e146101bb57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610120578063313ce56714610133575b600080fd5b6100b66101ce565b6040516100c3919061086c565b60405180910390f35b6100df6100da3660046108d7565b610291565b60405190151581526020016100c3565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040519081526020016100c3565b6100df61012e366004610901565b6102ab565b604051601281526020016100c3565b6101556101503660046108d7565b6102cf565b005b6101556101653660046109e0565b6102dd565b610112610178366004610a44565b6001600160a01b03166000908152600080516020610c05833981519152602052604090205490565b6100b66103ef565b6100df6101b63660046108d7565b61042e565b6101126101c9366004610a66565b61043c565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020610c058339815191529161020d90610a99565b80601f016020809104026020016040519081016040528092919081815260200182805461023990610a99565b80156102865780601f1061025b57610100808354040283529160200191610286565b820191906000526020600020905b81548152906001019060200180831161026957829003601f168201915b505050505091505090565b60003361029f818585610486565b60019150505b92915050565b6000336102b9858285610498565b6102c4858585610503565b506001949350505050565b6102d98282610562565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156103235750825b905060008267ffffffffffffffff1660011480156103405750303b155b90508115801561034e575080155b1561036c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561039657845460ff60401b1916600160401b1785555b6103a08787610598565b83156103e657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020610c058339815191529161020d90610a99565b60003361029f818585610503565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b61049383838360016105aa565b505050565b60006104a4848461043c565b905060001981146104fd57818110156104ee57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b6104fd848484840360006105aa565b50505050565b6001600160a01b03831661052d57604051634b637e8f60e11b8152600060048201526024016104e5565b6001600160a01b0382166105575760405163ec442f0560e01b8152600060048201526024016104e5565b610493838383610692565b6001600160a01b03821661058c5760405163ec442f0560e01b8152600060048201526024016104e5565b6102d960008383610692565b6105a06107d0565b6102d9828261081b565b600080516020610c058339815191526001600160a01b0385166105e35760405163e602df0560e01b8152600060048201526024016104e5565b6001600160a01b03841661060d57604051634a1406b160e11b8152600060048201526024016104e5565b6001600160a01b0380861660009081526001830160209081526040808320938816835292905220839055811561068b57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161068291815260200190565b60405180910390a35b5050505050565b600080516020610c058339815191526001600160a01b0384166106ce57818160020160008282546106c39190610ad3565b909155506107409050565b6001600160a01b038416600090815260208290526040902054828110156107215760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016104e5565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b03831661075e57600281018054839003905561077d565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107c291815260200190565b60405180910390a350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661081957604051631afcd79f60e31b815260040160405180910390fd5b565b6108236107d0565b600080516020610c058339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361085d8482610b44565b50600481016104fd8382610b44565b60006020808352835180602085015260005b8181101561089a5785810183015185820160400152820161087e565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146108d257600080fd5b919050565b600080604083850312156108ea57600080fd5b6108f3836108bb565b946020939093013593505050565b60008060006060848603121561091657600080fd5b61091f846108bb565b925061092d602085016108bb565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261096457600080fd5b813567ffffffffffffffff8082111561097f5761097f61093d565b604051601f8301601f19908116603f011681019082821181831017156109a7576109a761093d565b816040528381528660208588010111156109c057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156109f357600080fd5b823567ffffffffffffffff80821115610a0b57600080fd5b610a1786838701610953565b93506020850135915080821115610a2d57600080fd5b50610a3a85828601610953565b9150509250929050565b600060208284031215610a5657600080fd5b610a5f826108bb565b9392505050565b60008060408385031215610a7957600080fd5b610a82836108bb565b9150610a90602084016108bb565b90509250929050565b600181811c90821680610aad57607f821691505b602082108103610acd57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156102a557634e487b7160e01b600052601160045260246000fd5b601f821115610493576000816000526020600020601f850160051c81016020861015610b1d5750805b601f850160051c820191505b81811015610b3c57828155600101610b29565b505050505050565b815167ffffffffffffffff811115610b5e57610b5e61093d565b610b7281610b6c8454610a99565b84610af4565b602080601f831160018114610ba75760008415610b8f5750858301515b600019600386901b1c1916600185901b178555610b3c565b600085815260208120601f198616915b82811015610bd657888601518255948401946001909101908401610bb7565b5085821015610bf45787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a2646970667358221220d6ce0bc34cf5e38b6a59085954510cc2ee5ffe85a527cc55a370a14a14acfaa364736f6c63430008190033", + "nonce": "0x80", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x4224b7fe3e2090ba5375380c5b34bc211a39050403ffc4d8c3c4a67e15f54a99", + "transactionType": "CALL", + "contractName": "GensToken", + "contractAddress": "0x1cf57a7b60bb82046cd1bca88f1b567e9f296865", + "function": "initialize(string,string)", + "arguments": [ + "\"Genesis\"", + "\"GENX\"" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x1cf57a7b60bb82046cd1bca88f1b567e9f296865", + "gas": "0x1f264", + "value": "0x0", + "input": "0x4cd88b7600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000747656e6573697300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000447454e5800000000000000000000000000000000000000000000000000000000", + "nonce": "0x81", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x3471d4b5d61c7841c0f074404b15ace9b57ece38f3568ffaf2bbcf3b36788d0d", + "transactionType": "CREATE", + "contractName": "GensToken", + "contractAddress": "0xfd2161129751820217d6aa71ef93e4c8d3cc00c6", + "function": null, + "arguments": null, + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "gas": "0xe9941", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b50610c5a8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806340c10f191161007157806340c10f19146101425780634cd88b761461015757806370a082311461016a57806395d89b41146101a0578063a9059cbb146101a8578063dd62ed3e146101bb57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610120578063313ce56714610133575b600080fd5b6100b66101ce565b6040516100c3919061086c565b60405180910390f35b6100df6100da3660046108d7565b610291565b60405190151581526020016100c3565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040519081526020016100c3565b6100df61012e366004610901565b6102ab565b604051601281526020016100c3565b6101556101503660046108d7565b6102cf565b005b6101556101653660046109e0565b6102dd565b610112610178366004610a44565b6001600160a01b03166000908152600080516020610c05833981519152602052604090205490565b6100b66103ef565b6100df6101b63660046108d7565b61042e565b6101126101c9366004610a66565b61043c565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020610c058339815191529161020d90610a99565b80601f016020809104026020016040519081016040528092919081815260200182805461023990610a99565b80156102865780601f1061025b57610100808354040283529160200191610286565b820191906000526020600020905b81548152906001019060200180831161026957829003601f168201915b505050505091505090565b60003361029f818585610486565b60019150505b92915050565b6000336102b9858285610498565b6102c4858585610503565b506001949350505050565b6102d98282610562565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156103235750825b905060008267ffffffffffffffff1660011480156103405750303b155b90508115801561034e575080155b1561036c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561039657845460ff60401b1916600160401b1785555b6103a08787610598565b83156103e657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020610c058339815191529161020d90610a99565b60003361029f818585610503565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b61049383838360016105aa565b505050565b60006104a4848461043c565b905060001981146104fd57818110156104ee57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b6104fd848484840360006105aa565b50505050565b6001600160a01b03831661052d57604051634b637e8f60e11b8152600060048201526024016104e5565b6001600160a01b0382166105575760405163ec442f0560e01b8152600060048201526024016104e5565b610493838383610692565b6001600160a01b03821661058c5760405163ec442f0560e01b8152600060048201526024016104e5565b6102d960008383610692565b6105a06107d0565b6102d9828261081b565b600080516020610c058339815191526001600160a01b0385166105e35760405163e602df0560e01b8152600060048201526024016104e5565b6001600160a01b03841661060d57604051634a1406b160e11b8152600060048201526024016104e5565b6001600160a01b0380861660009081526001830160209081526040808320938816835292905220839055811561068b57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161068291815260200190565b60405180910390a35b5050505050565b600080516020610c058339815191526001600160a01b0384166106ce57818160020160008282546106c39190610ad3565b909155506107409050565b6001600160a01b038416600090815260208290526040902054828110156107215760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016104e5565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b03831661075e57600281018054839003905561077d565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107c291815260200190565b60405180910390a350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661081957604051631afcd79f60e31b815260040160405180910390fd5b565b6108236107d0565b600080516020610c058339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361085d8482610b44565b50600481016104fd8382610b44565b60006020808352835180602085015260005b8181101561089a5785810183015185820160400152820161087e565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146108d257600080fd5b919050565b600080604083850312156108ea57600080fd5b6108f3836108bb565b946020939093013593505050565b60008060006060848603121561091657600080fd5b61091f846108bb565b925061092d602085016108bb565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261096457600080fd5b813567ffffffffffffffff8082111561097f5761097f61093d565b604051601f8301601f19908116603f011681019082821181831017156109a7576109a761093d565b816040528381528660208588010111156109c057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156109f357600080fd5b823567ffffffffffffffff80821115610a0b57600080fd5b610a1786838701610953565b93506020850135915080821115610a2d57600080fd5b50610a3a85828601610953565b9150509250929050565b600060208284031215610a5657600080fd5b610a5f826108bb565b9392505050565b60008060408385031215610a7957600080fd5b610a82836108bb565b9150610a90602084016108bb565b90509250929050565b600181811c90821680610aad57607f821691505b602082108103610acd57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156102a557634e487b7160e01b600052601160045260246000fd5b601f821115610493576000816000526020600020601f850160051c81016020861015610b1d5750805b601f850160051c820191505b81811015610b3c57828155600101610b29565b505050505050565b815167ffffffffffffffff811115610b5e57610b5e61093d565b610b7281610b6c8454610a99565b84610af4565b602080601f831160018114610ba75760008415610b8f5750858301515b600019600386901b1c1916600185901b178555610b3c565b600085815260208120601f198616915b82811015610bd657888601518255948401946001909101908401610bb7565b5085821015610bf45787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a2646970667358221220d6ce0bc34cf5e38b6a59085954510cc2ee5ffe85a527cc55a370a14a14acfaa364736f6c63430008190033", + "nonce": "0x82", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x372c03c0e940c1da4361c5f43eca116d99234fca6d6d1670405dfa249ed07449", + "transactionType": "CALL", + "contractName": "GensToken", + "contractAddress": "0xfd2161129751820217d6aa71ef93e4c8d3cc00c6", + "function": "initialize(string,string)", + "arguments": [ + "\"Gens\"", + "\"GENS\"" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0xfd2161129751820217d6aa71ef93e4c8d3cc00c6", + "gas": "0x1f233", + "value": "0x0", + "input": "0x4cd88b7600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000447656e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000447454e5300000000000000000000000000000000000000000000000000000000", + "nonce": "0x83", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xf5ead9ba4f072c7302267048a48c8b82215784bd869e348f88757a46ac492113", + "transactionType": "CALL", + "contractName": "GensToken", + "contractAddress": "0x1cf57a7b60bb82046cd1bca88f1b567e9f296865", + "function": "mint(address,uint256)", + "arguments": [ + "0x3964D0011EB003488Ab59B1ce0C235baA3998bdd", + "10000000" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x1cf57a7b60bb82046cd1bca88f1b567e9f296865", + "gas": "0x17134", + "value": "0x0", + "input": "0x40c10f190000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd0000000000000000000000000000000000000000000000000000000000989680", + "nonce": "0x84", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x594c745d78f50893b26897685fd1a9221b6b949deec37b9718f42f7132826816", + "transactionType": "CALL", + "contractName": "GensToken", + "contractAddress": "0xfd2161129751820217d6aa71ef93e4c8d3cc00c6", + "function": "mint(address,uint256)", + "arguments": [ + "0x3964D0011EB003488Ab59B1ce0C235baA3998bdd", + "10000000" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0xfd2161129751820217d6aa71ef93e4c8d3cc00c6", + "gas": "0x17134", + "value": "0x0", + "input": "0x40c10f190000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd0000000000000000000000000000000000000000000000000000000000989680", + "nonce": "0x85", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x308eaacdcbc47a658f30be557720496704addb0f3dc9071aecb89bb6e40e58c6", + "transactionType": "CREATE", + "contractName": "LiquidityPoolFactory", + "contractAddress": "0x246f6f82880bc03ff6f3c2e4fad1cff64ba3e6a3", + "function": null, + "arguments": null, + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "gas": "0x298d09", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b506124ef8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b1461011857806393c907b414610148578063c4d66de81461015b578063efde4e641461016e578063f2fde38b1461017f57600080fd5b806341d1de9714610098578063531aa03e146100c857806365c940e5146100f9578063715018a61461010e575b600080fd5b6100ab6100a636600461086d565b610192565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ab6100d63660046108a2565b60006020818152928152604080822090935290815220546001600160a01b031681565b6101016101bc565b6040516100bf91906108d5565b61011661021e565b005b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166100ab565b6100ab610156366004610922565b610232565b61011661016936600461096d565b610554565b6001546040519081526020016100bf565b61011661018d36600461096d565b61066c565b600181815481106101a257600080fd5b6000918252602090912001546001600160a01b0316905081565b6060600180548060200260200160405190810160405280929190818152602001828054801561021457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116101f6575b5050505050905090565b6102266106aa565b6102306000610705565b565b600061023c6106aa565b610244610776565b6001600160a01b0385161580159061026457506001600160a01b03841615155b6102b55760405162461bcd60e51b815260206004820181905260248201527f466163746f72793a20696e76616c696420746f6b656e2061646472657373657360448201526064015b60405180910390fd5b836001600160a01b0316856001600160a01b0316036103215760405162461bcd60e51b815260206004820152602260248201527f466163746f72793a206964656e746963616c20746f6b656e2061646472657373604482015261657360f01b60648201526084016102ac565b6001600160a01b0385811660009081526020818152604080832088851684529091529020541615801561037757506001600160a01b03848116600090815260208181526040808320898516845290915290205416155b6103c35760405162461bcd60e51b815260206004820152601c60248201527f466163746f72793a20706f6f6c20616c7265616479206578697374730000000060448201526064016102ac565b6040516103cf90610860565b604051809103906000f0801580156103eb573d6000803e3d6000fd5b506040516314d6c7d760e31b81526001600160a01b0387811660048301528681166024830152858116604483015260648201859052600a60848301529192509082169063a6b63eb89060a401600060405180830381600087803b15801561045157600080fd5b505af1158015610465573d6000803e3d6000fd5b505050506001600160a01b0385811660008181526020818152604080832089861680855290835281842080549688166001600160a01b031997881681179091558484528285208686528452828520805488168217905560018054808201825595527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690940180549096168417909555519182527f9c5d829b9b23efc461f9aeef91979ec04bb903feb3bee4f26d22114abfc7335b910160405180910390a361054c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff1660008115801561059a5750825b905060008267ffffffffffffffff1660011480156105b75750303b155b9050811580156105c5575080155b156105e35760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561060d57845460ff60401b1916600160401b1785555b610616866107e6565b61061e6107f7565b831561066457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6106746106aa565b6001600160a01b03811661069e57604051631e4fbdf760e01b8152600060048201526024016102ac565b6106a781610705565b50565b336106dc7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146102305760405163118cdaa760e01b81523360048201526024016102ac565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f008054600119016107ba57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6107ee610807565b6106a781610850565b6107ff610807565b610230610858565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661023057604051631afcd79f60e31b815260040160405180910390fd5b610674610807565b6107c0610807565b611b2a8061099083390190565b60006020828403121561087f57600080fd5b5035919050565b80356001600160a01b038116811461089d57600080fd5b919050565b600080604083850312156108b557600080fd5b6108be83610886565b91506108cc60208401610886565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156109165783516001600160a01b0316835292840192918401916001016108f1565b50909695505050505050565b6000806000806080858703121561093857600080fd5b61094185610886565b935061094f60208601610886565b925061095d60408601610886565b9396929550929360600135925050565b60006020828403121561097f57600080fd5b61098882610886565b939250505056fe6080604052348015600f57600080fd5b50611b0b8061001f6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c3578063a6b63eb81161007c578063a6b63eb81461030c578063a9059cbb1461031f578063aa0b598814610332578063dd62ed3e14610345578063f140a35a14610358578063f2fde38b1461036b57600080fd5b8063715018a6146102915780638da5cb5b1461029b57806395d89b41146102cb5780639c8f9f23146102d35780639cd441da146102e65780639f1d0f59146102f957600080fd5b806323b872dd1161011557806323b872dd1461020a57806326232a2e1461021d578063313ce56714610226578063449e815d146102355780635f64b55b1461024857806370a082311461025b57600080fd5b806306fdde03146101525780630902f1ac14610170578063095ea7b31461018b5780630fc63d10146101ae57806318160ddd146101d9575b600080fd5b61015a61037e565b604051610167919061166a565b60405180910390f35b60025460035460408051928352602083019190915201610167565b61019e6101993660046116d5565b610441565b6040519015158152602001610167565b6000546101c1906001600160a01b031681565b6040516001600160a01b039091168152602001610167565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610167565b61019e6102183660046116ff565b61045b565b6101fc60045481565b60405160128152602001610167565b6101fc6102433660046116d5565b61047f565b6001546101c1906001600160a01b031681565b6101fc61026936600461173b565b6001600160a01b03166000908152600080516020611a96833981519152602052604090205490565b610299610492565b005b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166101c1565b61015a6104a6565b6102996102e1366004611756565b6104e5565b6102996102f436600461176f565b61071d565b610299610307366004611791565b6108e2565b61029961031a3660046117c4565b610b96565b61019e61032d3660046116d5565b610d3e565b610299610340366004611756565b610d4c565b6101fc610353366004611819565b610d59565b6101fc61036636600461184c565b610da3565b61029961037936600461173b565b610e42565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020611a96833981519152916103bd9061186f565b80601f01602080910402602001604051908101604052809291908181526020018280546103e99061186f565b80156104365780601f1061040b57610100808354040283529160200191610436565b820191906000526020600020905b81548152906001019060200180831161041957829003601f168201915b505050505091505090565b60003361044f818585610e7d565b60019150505b92915050565b600033610469858285610e8a565b610474858585610ef0565b506001949350505050565b600061048b8284610da3565b9392505050565b61049a610f4f565b6104a46000610faa565b565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020611a96833981519152916103bd9061186f565b6104ed61101b565b600081116105425760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206c697175696469747920616d6f756e74000000000000000060448201526064015b60405180910390fd5b600061056c7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b60025461057990846118bf565b61058391906118ec565b905060006105af7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b6003546105bc90856118bf565b6105c691906118ec565b90506105d23384611053565b60005460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610623573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610647919061190e565b5060015460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bd919061190e565b506106c6611089565b604080518381526020810183905233917f96cd817c6329656790ef8fba7675405193677d39619571282f5e21f3a98cd059910160405180910390a2505061071a6001600080516020611ab683398151915255565b50565b61072561101b565b6000821180156107355750600081115b6107735760405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420616d6f756e747360881b6044820152606401610539565b6000546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee919061190e565b506001546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086a919061190e565b506000610877838361117d565b9050610883338261119f565b61088b611089565b604080518481526020810184905233917fac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee45910160405180910390a2506108de6001600080516020611ab683398151915255565b5050565b6108ea61101b565b6000546001600160a01b038481169116148061091357506001546001600160a01b038481169116145b6109575760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401610539565b6000821161099e5760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081a5b9c1d5d08185b5bdd5b9d60621b6044820152606401610539565b600080546001600160a01b038581169116146109c5576000546001600160a01b03166109d2565b6001546001600160a01b03165b905060006109e08486610da3565b905082811015610a325760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e74206f757470757420616d6f756e740000000000006044820152606401610539565b6040516323b872dd60e01b8152336004820152306024820152604481018590526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa9919061190e565b5060405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610af7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1b919061190e565b50610b24611089565b604080516001600160a01b0387811682526020820187905284168183015260608101839052905133917f5380cf97d8f645d3c4896da60c053458dca03a3a31cec642ac80e1ddf0d8d02a919081900360800190a25050610b916001600080516020611ab683398151915255565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610bdc5750825b905060008267ffffffffffffffff166001148015610bf95750303b155b905081158015610c07575080155b15610c255760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c4f57845460ff60401b1916600160401b1785555b610ca1604051806040016040528060158152602001744c697175696469747920506f6f6c20546f6b656e7360581b8152506040518060400160405280600381526020016213141560ea1b8152506111d5565b610ca96111e7565b610cb2886111f7565b600080546001600160a01b03808d166001600160a01b03199283161790925560018054928c1692909116919091179055600487905560058690558315610d3257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b60003361044f818585610ef0565b610d54610f4f565b600455565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6000805481906001600160a01b03848116911614610dc357600354610dc7565b6002545b60008054919250906001600160a01b03858116911614610de957600254610ded565b6003545b90506000612710600454612710610e049190611930565b610e0e90886118bf565b610e1891906118ec565b9050610e248184611943565b610e2e83836118bf565b610e3891906118ec565b9695505050505050565b610e4a610f4f565b6001600160a01b038116610e7457604051631e4fbdf760e01b815260006004820152602401610539565b61071a81610faa565b610b918383836001611208565b6000610e968484610d59565b90506000198114610eea5781811015610edb57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610539565b610eea84848484036000611208565b50505050565b6001600160a01b038316610f1a57604051634b637e8f60e11b815260006004820152602401610539565b6001600160a01b038216610f445760405163ec442f0560e01b815260006004820152602401610539565b610b918383836112f0565b33610f817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104a45760405163118cdaa760e01b8152336004820152602401610539565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600080516020611ab683398151915280546001190161104d57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6001600160a01b03821661107d57604051634b637e8f60e11b815260006004820152602401610539565b6108de826000836112f0565b6000546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156110d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f59190611956565b6002556001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611140573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111649190611956565b600355565b6001600080516020611ab683398151915255565b60055460009061119561119084866118bf565b61142e565b61048b9190611930565b6001600160a01b0382166111c95760405163ec442f0560e01b815260006004820152602401610539565b6108de600083836112f0565b6111dd611516565b6108de828261155f565b6111ef611516565b6104a46115b0565b6111ff611516565b61071a816115b8565b600080516020611a968339815191526001600160a01b0385166112415760405163e602df0560e01b815260006004820152602401610539565b6001600160a01b03841661126b57604051634a1406b160e11b815260006004820152602401610539565b6001600160a01b038086166000908152600183016020908152604080832093881683529290522083905581156112e957836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516112e091815260200190565b60405180910390a35b5050505050565b600080516020611a968339815191526001600160a01b03841661132c57818160020160008282546113219190611943565b9091555061139e9050565b6001600160a01b0384166000908152602082905260409020548281101561137f5760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610539565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b0383166113bc5760028101805483900390556113db565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161142091815260200190565b60405180910390a350505050565b60008160000361144057506000919050565b6000600161144d846115c0565b901c6001901b90506001818481611466576114666118d6565b048201901c9050600181848161147e5761147e6118d6565b048201901c90506001818481611496576114966118d6565b048201901c905060018184816114ae576114ae6118d6565b048201901c905060018184816114c6576114c66118d6565b048201901c905060018184816114de576114de6118d6565b048201901c905060018184816114f6576114f66118d6565b048201901c905061048b81828581611510576115106118d6565b04611654565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166104a457604051631afcd79f60e31b815260040160405180910390fd5b611567611516565b600080516020611a968339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036115a184826119d5565b5060048101610eea83826119d5565b611169611516565b610e4a611516565b600080608083901c156115d557608092831c92015b604083901c156115e757604092831c92015b602083901c156115f957602092831c92015b601083901c1561160b57601092831c92015b600883901c1561161d57600892831c92015b600483901c1561162f57600492831c92015b600283901c1561164157600292831c92015b600183901c156104555760010192915050565b6000818310611663578161048b565b5090919050565b60006020808352835180602085015260005b818110156116985785810183015185820160400152820161167c565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146116d057600080fd5b919050565b600080604083850312156116e857600080fd5b6116f1836116b9565b946020939093013593505050565b60008060006060848603121561171457600080fd5b61171d846116b9565b925061172b602085016116b9565b9150604084013590509250925092565b60006020828403121561174d57600080fd5b61048b826116b9565b60006020828403121561176857600080fd5b5035919050565b6000806040838503121561178257600080fd5b50508035926020909101359150565b6000806000606084860312156117a657600080fd5b6117af846116b9565b95602085013595506040909401359392505050565b600080600080600060a086880312156117dc57600080fd5b6117e5866116b9565b94506117f3602087016116b9565b9350611801604087016116b9565b94979396509394606081013594506080013592915050565b6000806040838503121561182c57600080fd5b611835836116b9565b9150611843602084016116b9565b90509250929050565b6000806040838503121561185f57600080fd5b82359150611843602084016116b9565b600181811c9082168061188357607f821691505b6020821081036118a357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610455576104556118a9565b634e487b7160e01b600052601260045260246000fd5b60008261190957634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561192057600080fd5b8151801515811461048b57600080fd5b81810381811115610455576104556118a9565b80820180821115610455576104556118a9565b60006020828403121561196857600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b601f821115610b91576000816000526020600020601f850160051c810160208610156119ae5750805b601f850160051c820191505b818110156119cd578281556001016119ba565b505050505050565b815167ffffffffffffffff8111156119ef576119ef61196f565b611a03816119fd845461186f565b84611985565b602080601f831160018114611a385760008415611a205750858301515b600019600386901b1c1916600185901b1785556119cd565b600085815260208120601f198616915b82811015611a6757888601518255948401946001909101908401611a48565b5085821015611a855787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220e0423eae0aa90fc5ee1352ff74fa5459728b920dceca8eed2d5216ce9c6da6d364736f6c63430008190033a264697066735822122035fde0218447f8f56a5a80ba1a28c22894ef95ad622fff963cd828e4a63c3ed564736f6c63430008190033", + "nonce": "0x86", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8dbcd95597b2fcede709bac47fdf8d88b99d55746d1e2715aa657a7596e3a5ad", + "transactionType": "CALL", + "contractName": "LiquidityPoolFactory", + "contractAddress": "0x246f6f82880bc03ff6f3c2e4fad1cff64ba3e6a3", + "function": "initialize(address)", + "arguments": [ + "0x3964D0011EB003488Ab59B1ce0C235baA3998bdd" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x246f6f82880bc03ff6f3c2e4fad1cff64ba3e6a3", + "gas": "0x20fa8", + "value": "0x0", + "input": "0xc4d66de80000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "nonce": "0x87", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xb3b98", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x0000000000000000000000004ad84f7014b7b44f723f284a85b1662337971439" + ], + "data": "0x000000000000000000000000000000000000000000000000004f3ea5f15be800000000000000000000000000000000000000000000000004eeecf3e68b189c8500000000000000000000000000000000000000000000010becb35ca52618c7fa000000000000000000000000000000000000000000000004ee9db54099bcb48500000000000000000000000000000000000000000000010bed029b4b1774affa", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "transactionHash": "0x07e5e135d50947d6ac6ee57d8e4ff8ee3cc36325f1458a8f4d1a2a768a00c9d4", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000008400000000000000000000000000000000000800000000000000000000100001000000000000000000000000000000000000000000000000000000080000000000000000000000000002000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000008000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x07e5e135d50947d6ac6ee57d8e4ff8ee3cc36325f1458a8f4d1a2a768a00c9d4", + "transactionIndex": "0x0", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "gasUsed": "0xb3b98", + "effectiveGasPrice": "0x70e054f0f", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": null, + "contractAddress": "0x1cf57a7b60bb82046cd1bca88f1b567e9f296865" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xca46c", + "logs": [ + { + "address": "0x1cf57a7b60bb82046cd1bca88f1b567e9f296865", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "transactionHash": "0x4224b7fe3e2090ba5375380c5b34bc211a39050403ffc4d8c3c4a67e15f54a99", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x0000000000000000000000004ad84f7014b7b44f723f284a85b1662337971439" + ], + "data": "0x0000000000000000000000000000000000000000000000000009f18f137d6c00000000000000000000000000000000000000000000000004ee9db5409914369d00000000000000000000000000000000000000000000010bed029b4b1774affa000000000000000000000000000000000000000000000004ee93c3b18596ca9d00000000000000000000000000000000000000000000010bed0c8cda2af21bfa", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "transactionHash": "0x4224b7fe3e2090ba5375380c5b34bc211a39050403ffc4d8c3c4a67e15f54a99", + "transactionIndex": "0x1", + "logIndex": "0x2", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000008000000000000000000008400000000000000000000000000000000000800000000000000000000100001000000000000000000000000000000000000000000000000000000080000000000000000000000000002000000800000000000000000000000080000000000000200000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000004000000100000000000000000000000000000000000000000008000000000000000000000000000100020", + "type": "0x2", + "transactionHash": "0x4224b7fe3e2090ba5375380c5b34bc211a39050403ffc4d8c3c4a67e15f54a99", + "transactionIndex": "0x1", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "gasUsed": "0x168d4", + "effectiveGasPrice": "0x70e054f0f", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x1cf57a7b60bb82046cd1bca88f1b567e9f296865", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x17e004", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x0000000000000000000000004ad84f7014b7b44f723f284a85b1662337971439" + ], + "data": "0x000000000000000000000000000000000000000000000000004f3ea5f15be800000000000000000000000000000000000000000000000004ee93c3b18581a63100000000000000000000000000000000000000000000010bed0c8cda2af21bfa000000000000000000000000000000000000000000000004ee44850b9425be3100000000000000000000000000000000000000000000010bed5bcb801c4e03fa", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "transactionHash": "0x3471d4b5d61c7841c0f074404b15ace9b57ece38f3568ffaf2bbcf3b36788d0d", + "transactionIndex": "0x2", + "logIndex": "0x3", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000008400000000000000000000000000000000000800000000000000000000100001000000000000000000000000000000000000000000000000000000080000000000000000000000000002000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000008000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x3471d4b5d61c7841c0f074404b15ace9b57ece38f3568ffaf2bbcf3b36788d0d", + "transactionIndex": "0x2", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "gasUsed": "0xb3b98", + "effectiveGasPrice": "0x70e054f0f", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": null, + "contractAddress": "0xfd2161129751820217d6aa71ef93e4c8d3cc00c6" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1948b4", + "logs": [ + { + "address": "0xfd2161129751820217d6aa71ef93e4c8d3cc00c6", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "transactionHash": "0x372c03c0e940c1da4361c5f43eca116d99234fca6d6d1670405dfa249ed07449", + "transactionIndex": "0x3", + "logIndex": "0x4", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x0000000000000000000000004ad84f7014b7b44f723f284a85b1662337971439" + ], + "data": "0x0000000000000000000000000000000000000000000000000009f0911abe5000000000000000000000000000000000000000000000000004ee44850b937d404900000000000000000000000000000000000000000000010bed5bcb801c4e03fa000000000000000000000000000000000000000000000004ee3a947a78bef04900000000000000000000000000000000000000000000010bed65bc11370c53fa", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "transactionHash": "0x372c03c0e940c1da4361c5f43eca116d99234fca6d6d1670405dfa249ed07449", + "transactionIndex": "0x3", + "logIndex": "0x5", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000008400000000000000000000000000000000000800000000000000000000900001000000000000000000000000000000000000000000000000000000080000000000010000000000000002000000800000000000000000000000080000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000008000001000000000000000000000004000000100000000000000000000000000000000000000000008000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x372c03c0e940c1da4361c5f43eca116d99234fca6d6d1670405dfa249ed07449", + "transactionIndex": "0x3", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "gasUsed": "0x168b0", + "effectiveGasPrice": "0x70e054f0f", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0xfd2161129751820217d6aa71ef93e4c8d3cc00c6", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1a5401", + "logs": [ + { + "address": "0x1cf57a7b60bb82046cd1bca88f1b567e9f296865", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000989680", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "transactionHash": "0xf5ead9ba4f072c7302267048a48c8b82215784bd869e348f88757a46ac492113", + "transactionIndex": "0x4", + "logIndex": "0x6", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x0000000000000000000000004ad84f7014b7b44f723f284a85b1662337971439" + ], + "data": "0x00000000000000000000000000000000000000000000000000075dbec0fdc300000000000000000000000000000000000000000000000004ee3a947a78a9cdf900000000000000000000000000000000000000000000010bed65bc11370c53fa000000000000000000000000000000000000000000000004ee3336bbb7ac0af900000000000000000000000000000000000000000000010bed6d19cff80a16fa", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "transactionHash": "0xf5ead9ba4f072c7302267048a48c8b82215784bd869e348f88757a46ac492113", + "transactionIndex": "0x4", + "logIndex": "0x7", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000008000000000000000000008400000000000000000000000000008000000800000000000000000000100001000000000000000020000000000000000000800000000000000000080000010000000000000000000002000000000000000000000000000000000000000000000200000200000000000000000000000000000000000000000000000000000000000004000000002000000000001000000000000000000000000000000100000000020000000000000000000000000000000008000000000000000000000000000100020", + "type": "0x2", + "transactionHash": "0xf5ead9ba4f072c7302267048a48c8b82215784bd869e348f88757a46ac492113", + "transactionIndex": "0x4", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "gasUsed": "0x10b4d", + "effectiveGasPrice": "0x70e054f0f", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x1cf57a7b60bb82046cd1bca88f1b567e9f296865", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1b5f4e", + "logs": [ + { + "address": "0xfd2161129751820217d6aa71ef93e4c8d3cc00c6", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000989680", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "transactionHash": "0x594c745d78f50893b26897685fd1a9221b6b949deec37b9718f42f7132826816", + "transactionIndex": "0x5", + "logIndex": "0x8", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x0000000000000000000000004ad84f7014b7b44f723f284a85b1662337971439" + ], + "data": "0x00000000000000000000000000000000000000000000000000075dbec0fdc300000000000000000000000000000000000000000000000004ee3336bbb79c617600000000000000000000000000000000000000000000010bed6d19cff80a16fa000000000000000000000000000000000000000000000004ee2bd8fcf69e9e7600000000000000000000000000000000000000000000010bed74778eb907d9fa", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "transactionHash": "0x594c745d78f50893b26897685fd1a9221b6b949deec37b9718f42f7132826816", + "transactionIndex": "0x5", + "logIndex": "0x9", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000008400000000000000000000000000008000000800000000000000000000900001000000000000000020000000000000000000800000000000000000080000010000010000000000000002000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000002000008000001000000000000000000000000000000100000000020000000000000000000000000000000008000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x594c745d78f50893b26897685fd1a9221b6b949deec37b9718f42f7132826816", + "transactionIndex": "0x5", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "gasUsed": "0x10b4d", + "effectiveGasPrice": "0x70e054f0f", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0xfd2161129751820217d6aa71ef93e4c8d3cc00c6", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x3b57f6", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x0000000000000000000000004ad84f7014b7b44f723f284a85b1662337971439" + ], + "data": "0x00000000000000000000000000000000000000000000000000e18cdae903d800000000000000000000000000000000000000000000000004ee2bd8fcf68ef4f300000000000000000000000000000000000000000000010bed74778eb907d9fa000000000000000000000000000000000000000000000004ed4a4c220d8b1cf300000000000000000000000000000000000000000000010bee560469a20bb1fa", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "transactionHash": "0x308eaacdcbc47a658f30be557720496704addb0f3dc9071aecb89bb6e40e58c6", + "transactionIndex": "0x6", + "logIndex": "0xa", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000008400000000000000000000000000000000000800000000000000000000100001000000000000000000000000000000000000000000000000000000080000000000000000000000000002000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000008000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x308eaacdcbc47a658f30be557720496704addb0f3dc9071aecb89bb6e40e58c6", + "transactionIndex": "0x6", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "gasUsed": "0x1ff8a8", + "effectiveGasPrice": "0x70e054f0f", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": null, + "contractAddress": "0x246f6f82880bc03ff6f3c2e4fad1cff64ba3e6a3" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x3cc0c1", + "logs": [ + { + "address": "0x246f6f82880bc03ff6f3c2e4fad1cff64ba3e6a3", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd" + ], + "data": "0x", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "transactionHash": "0x8dbcd95597b2fcede709bac47fdf8d88b99d55746d1e2715aa657a7596e3a5ad", + "transactionIndex": "0x7", + "logIndex": "0xb", + "removed": false + }, + { + "address": "0x246f6f82880bc03ff6f3c2e4fad1cff64ba3e6a3", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "transactionHash": "0x8dbcd95597b2fcede709bac47fdf8d88b99d55746d1e2715aa657a7596e3a5ad", + "transactionIndex": "0x7", + "logIndex": "0xc", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x0000000000000000000000004ad84f7014b7b44f723f284a85b1662337971439" + ], + "data": "0x0000000000000000000000000000000000000000000000000009f14f954da500000000000000000000000000000000000000000000000004ed4a4c220bab8b1b00000000000000000000000000000000000000000000010bee560469a20bb1fa000000000000000000000000000000000000000000000004ed405ad2765de61b00000000000000000000000000000000000000000000010bee5ff5b9375956fa", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "transactionHash": "0x8dbcd95597b2fcede709bac47fdf8d88b99d55746d1e2715aa657a7596e3a5ad", + "transactionIndex": "0x7", + "logIndex": "0xd", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000008000000000000000000008400000000000000000000000000000000000804001000000000000000100001000000000000000020000000000000000000a00000000000000000080000000000000400000000000002000000800000000000000000000000080000000000000000000200000000000000000000000000000000000000000000000000000000000004000000080000000000001000000000000000000000004000000100000000020000000000000000000000000000000008000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x8dbcd95597b2fcede709bac47fdf8d88b99d55746d1e2715aa657a7596e3a5ad", + "transactionIndex": "0x7", + "blockHash": "0xcfbe79c895dcd7cd985c586473673519b2db28d22e2d409b3871e4e54a237ce4", + "blockNumber": "0x8152d8", + "gasUsed": "0x168cb", + "effectiveGasPrice": "0x70e054f0f", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x246f6f82880bc03ff6f3c2e4fad1cff64ba3e6a3", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1718809455, + "chain": 80002, + "commit": "2bc5ab5" +} \ No newline at end of file diff --git a/contracts/broadcast/deploy_liquidityPools.s.sol/80002/run-1718830663.json b/contracts/broadcast/deploy_liquidityPools.s.sol/80002/run-1718830663.json new file mode 100644 index 0000000..e0e3425 --- /dev/null +++ b/contracts/broadcast/deploy_liquidityPools.s.sol/80002/run-1718830663.json @@ -0,0 +1,523 @@ +{ + "transactions": [ + { + "hash": "0x1d50e44a0af3133d2fa04413ac79831223023b7fc2781183628f25648e13e89d", + "transactionType": "CREATE", + "contractName": "GensToken", + "contractAddress": "0x303f6f54a992adaa74456e492c93ca801b33e197", + "function": null, + "arguments": null, + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "gas": "0xe9941", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b50610c5a8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806340c10f191161007157806340c10f19146101425780634cd88b761461015757806370a082311461016a57806395d89b41146101a0578063a9059cbb146101a8578063dd62ed3e146101bb57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610120578063313ce56714610133575b600080fd5b6100b66101ce565b6040516100c3919061086c565b60405180910390f35b6100df6100da3660046108d7565b610291565b60405190151581526020016100c3565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040519081526020016100c3565b6100df61012e366004610901565b6102ab565b604051601281526020016100c3565b6101556101503660046108d7565b6102cf565b005b6101556101653660046109e0565b6102dd565b610112610178366004610a44565b6001600160a01b03166000908152600080516020610c05833981519152602052604090205490565b6100b66103ef565b6100df6101b63660046108d7565b61042e565b6101126101c9366004610a66565b61043c565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020610c058339815191529161020d90610a99565b80601f016020809104026020016040519081016040528092919081815260200182805461023990610a99565b80156102865780601f1061025b57610100808354040283529160200191610286565b820191906000526020600020905b81548152906001019060200180831161026957829003601f168201915b505050505091505090565b60003361029f818585610486565b60019150505b92915050565b6000336102b9858285610498565b6102c4858585610503565b506001949350505050565b6102d98282610562565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156103235750825b905060008267ffffffffffffffff1660011480156103405750303b155b90508115801561034e575080155b1561036c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561039657845460ff60401b1916600160401b1785555b6103a08787610598565b83156103e657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020610c058339815191529161020d90610a99565b60003361029f818585610503565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b61049383838360016105aa565b505050565b60006104a4848461043c565b905060001981146104fd57818110156104ee57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b6104fd848484840360006105aa565b50505050565b6001600160a01b03831661052d57604051634b637e8f60e11b8152600060048201526024016104e5565b6001600160a01b0382166105575760405163ec442f0560e01b8152600060048201526024016104e5565b610493838383610692565b6001600160a01b03821661058c5760405163ec442f0560e01b8152600060048201526024016104e5565b6102d960008383610692565b6105a06107d0565b6102d9828261081b565b600080516020610c058339815191526001600160a01b0385166105e35760405163e602df0560e01b8152600060048201526024016104e5565b6001600160a01b03841661060d57604051634a1406b160e11b8152600060048201526024016104e5565b6001600160a01b0380861660009081526001830160209081526040808320938816835292905220839055811561068b57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161068291815260200190565b60405180910390a35b5050505050565b600080516020610c058339815191526001600160a01b0384166106ce57818160020160008282546106c39190610ad3565b909155506107409050565b6001600160a01b038416600090815260208290526040902054828110156107215760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016104e5565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b03831661075e57600281018054839003905561077d565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107c291815260200190565b60405180910390a350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661081957604051631afcd79f60e31b815260040160405180910390fd5b565b6108236107d0565b600080516020610c058339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361085d8482610b44565b50600481016104fd8382610b44565b60006020808352835180602085015260005b8181101561089a5785810183015185820160400152820161087e565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146108d257600080fd5b919050565b600080604083850312156108ea57600080fd5b6108f3836108bb565b946020939093013593505050565b60008060006060848603121561091657600080fd5b61091f846108bb565b925061092d602085016108bb565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261096457600080fd5b813567ffffffffffffffff8082111561097f5761097f61093d565b604051601f8301601f19908116603f011681019082821181831017156109a7576109a761093d565b816040528381528660208588010111156109c057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156109f357600080fd5b823567ffffffffffffffff80821115610a0b57600080fd5b610a1786838701610953565b93506020850135915080821115610a2d57600080fd5b50610a3a85828601610953565b9150509250929050565b600060208284031215610a5657600080fd5b610a5f826108bb565b9392505050565b60008060408385031215610a7957600080fd5b610a82836108bb565b9150610a90602084016108bb565b90509250929050565b600181811c90821680610aad57607f821691505b602082108103610acd57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156102a557634e487b7160e01b600052601160045260246000fd5b601f821115610493576000816000526020600020601f850160051c81016020861015610b1d5750805b601f850160051c820191505b81811015610b3c57828155600101610b29565b505050505050565b815167ffffffffffffffff811115610b5e57610b5e61093d565b610b7281610b6c8454610a99565b84610af4565b602080601f831160018114610ba75760008415610b8f5750858301515b600019600386901b1c1916600185901b178555610b3c565b600085815260208120601f198616915b82811015610bd657888601518255948401946001909101908401610bb7565b5085821015610bf45787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a2646970667358221220d6ce0bc34cf5e38b6a59085954510cc2ee5ffe85a527cc55a370a14a14acfaa364736f6c63430008190033", + "nonce": "0x94", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x6cd57d3d71145c07181d86457727d071155225ea9bec165ee7941ac02bf917e7", + "transactionType": "CALL", + "contractName": "GensToken", + "contractAddress": "0x303f6f54a992adaa74456e492c93ca801b33e197", + "function": "initialize(string,string)", + "arguments": [ + "\"Genesis\"", + "\"GENX\"" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x303f6f54a992adaa74456e492c93ca801b33e197", + "gas": "0x1f264", + "value": "0x0", + "input": "0x4cd88b7600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000747656e6573697300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000447454e5800000000000000000000000000000000000000000000000000000000", + "nonce": "0x95", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe009c85af4435b8acab6b4bc866fad1310ec465aba9a17bb26d7063def3531da", + "transactionType": "CREATE", + "contractName": "GensToken", + "contractAddress": "0x90fa57a65ff13de0ed02a250814754d8eb70516c", + "function": null, + "arguments": null, + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "gas": "0xe9941", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b50610c5a8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806340c10f191161007157806340c10f19146101425780634cd88b761461015757806370a082311461016a57806395d89b41146101a0578063a9059cbb146101a8578063dd62ed3e146101bb57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610120578063313ce56714610133575b600080fd5b6100b66101ce565b6040516100c3919061086c565b60405180910390f35b6100df6100da3660046108d7565b610291565b60405190151581526020016100c3565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040519081526020016100c3565b6100df61012e366004610901565b6102ab565b604051601281526020016100c3565b6101556101503660046108d7565b6102cf565b005b6101556101653660046109e0565b6102dd565b610112610178366004610a44565b6001600160a01b03166000908152600080516020610c05833981519152602052604090205490565b6100b66103ef565b6100df6101b63660046108d7565b61042e565b6101126101c9366004610a66565b61043c565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020610c058339815191529161020d90610a99565b80601f016020809104026020016040519081016040528092919081815260200182805461023990610a99565b80156102865780601f1061025b57610100808354040283529160200191610286565b820191906000526020600020905b81548152906001019060200180831161026957829003601f168201915b505050505091505090565b60003361029f818585610486565b60019150505b92915050565b6000336102b9858285610498565b6102c4858585610503565b506001949350505050565b6102d98282610562565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156103235750825b905060008267ffffffffffffffff1660011480156103405750303b155b90508115801561034e575080155b1561036c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561039657845460ff60401b1916600160401b1785555b6103a08787610598565b83156103e657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020610c058339815191529161020d90610a99565b60003361029f818585610503565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b61049383838360016105aa565b505050565b60006104a4848461043c565b905060001981146104fd57818110156104ee57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b6104fd848484840360006105aa565b50505050565b6001600160a01b03831661052d57604051634b637e8f60e11b8152600060048201526024016104e5565b6001600160a01b0382166105575760405163ec442f0560e01b8152600060048201526024016104e5565b610493838383610692565b6001600160a01b03821661058c5760405163ec442f0560e01b8152600060048201526024016104e5565b6102d960008383610692565b6105a06107d0565b6102d9828261081b565b600080516020610c058339815191526001600160a01b0385166105e35760405163e602df0560e01b8152600060048201526024016104e5565b6001600160a01b03841661060d57604051634a1406b160e11b8152600060048201526024016104e5565b6001600160a01b0380861660009081526001830160209081526040808320938816835292905220839055811561068b57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161068291815260200190565b60405180910390a35b5050505050565b600080516020610c058339815191526001600160a01b0384166106ce57818160020160008282546106c39190610ad3565b909155506107409050565b6001600160a01b038416600090815260208290526040902054828110156107215760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016104e5565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b03831661075e57600281018054839003905561077d565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107c291815260200190565b60405180910390a350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661081957604051631afcd79f60e31b815260040160405180910390fd5b565b6108236107d0565b600080516020610c058339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361085d8482610b44565b50600481016104fd8382610b44565b60006020808352835180602085015260005b8181101561089a5785810183015185820160400152820161087e565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146108d257600080fd5b919050565b600080604083850312156108ea57600080fd5b6108f3836108bb565b946020939093013593505050565b60008060006060848603121561091657600080fd5b61091f846108bb565b925061092d602085016108bb565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261096457600080fd5b813567ffffffffffffffff8082111561097f5761097f61093d565b604051601f8301601f19908116603f011681019082821181831017156109a7576109a761093d565b816040528381528660208588010111156109c057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156109f357600080fd5b823567ffffffffffffffff80821115610a0b57600080fd5b610a1786838701610953565b93506020850135915080821115610a2d57600080fd5b50610a3a85828601610953565b9150509250929050565b600060208284031215610a5657600080fd5b610a5f826108bb565b9392505050565b60008060408385031215610a7957600080fd5b610a82836108bb565b9150610a90602084016108bb565b90509250929050565b600181811c90821680610aad57607f821691505b602082108103610acd57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156102a557634e487b7160e01b600052601160045260246000fd5b601f821115610493576000816000526020600020601f850160051c81016020861015610b1d5750805b601f850160051c820191505b81811015610b3c57828155600101610b29565b505050505050565b815167ffffffffffffffff811115610b5e57610b5e61093d565b610b7281610b6c8454610a99565b84610af4565b602080601f831160018114610ba75760008415610b8f5750858301515b600019600386901b1c1916600185901b178555610b3c565b600085815260208120601f198616915b82811015610bd657888601518255948401946001909101908401610bb7565b5085821015610bf45787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a2646970667358221220d6ce0bc34cf5e38b6a59085954510cc2ee5ffe85a527cc55a370a14a14acfaa364736f6c63430008190033", + "nonce": "0x96", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xd26c197c7b155ef7d6ee37a96287fafbd8a28b3d709d35116261c0091840c494", + "transactionType": "CALL", + "contractName": "GensToken", + "contractAddress": "0x90fa57a65ff13de0ed02a250814754d8eb70516c", + "function": "initialize(string,string)", + "arguments": [ + "\"Gens\"", + "\"GENS\"" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x90fa57a65ff13de0ed02a250814754d8eb70516c", + "gas": "0x1f233", + "value": "0x0", + "input": "0x4cd88b7600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000447656e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000447454e5300000000000000000000000000000000000000000000000000000000", + "nonce": "0x97", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x1b3b20806027d7e8d2bbcbcdf2fbaa75ece21d8639af8ec890d7ede3c8a122c3", + "transactionType": "CALL", + "contractName": "GensToken", + "contractAddress": "0x303f6f54a992adaa74456e492c93ca801b33e197", + "function": "mint(address,uint256)", + "arguments": [ + "0x3964D0011EB003488Ab59B1ce0C235baA3998bdd", + "10000000" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x303f6f54a992adaa74456e492c93ca801b33e197", + "gas": "0x17134", + "value": "0x0", + "input": "0x40c10f190000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd0000000000000000000000000000000000000000000000000000000000989680", + "nonce": "0x98", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xbf3f5f9eb74a1b6bce4054f59c7d9b76f0bd9ec3e7c8b5337320513432dee9ad", + "transactionType": "CALL", + "contractName": "GensToken", + "contractAddress": "0x90fa57a65ff13de0ed02a250814754d8eb70516c", + "function": "mint(address,uint256)", + "arguments": [ + "0x3964D0011EB003488Ab59B1ce0C235baA3998bdd", + "10000000" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x90fa57a65ff13de0ed02a250814754d8eb70516c", + "gas": "0x17134", + "value": "0x0", + "input": "0x40c10f190000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd0000000000000000000000000000000000000000000000000000000000989680", + "nonce": "0x99", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x01648d05211558113c8d8b8ad7320d77c46fa4888ab8ca83d2e6e67d143a8b2c", + "transactionType": "CREATE", + "contractName": "LiquidityPoolFactory", + "contractAddress": "0x7101734f6178c68a242ab3b9506fb52f5afac955", + "function": null, + "arguments": null, + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "gas": "0x2a41d5", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b506125948061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063715018a611610071578063715018a61461016d5780638da5cb5b1461017757806393c907b4146101a7578063c4d66de8146101ba578063efde4e64146101cd578063f2fde38b146101de57600080fd5b806317967183146100ae5780633fa1e0c8146100de57806341d1de9714610114578063531aa03e1461012757806365c940e514610158575b600080fd5b6100c16100bc3660046108fc565b6101f1565b6040516001600160a01b0390911681526020015b60405180910390f35b6100c16100ec366004610931565b6001600160a01b03918216600090815260208181526040808320938516835292905220541690565b6100c16101223660046108fc565b610221565b6100c1610135366004610931565b60006020818152928152604080822090935290815220546001600160a01b031681565b61016061024b565b6040516100d59190610964565b6101756102ad565b005b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166100c1565b6100c16101b53660046109b1565b6102c1565b6101756101c83660046109fc565b6105e3565b6001546040519081526020016100d5565b6101756101ec3660046109fc565b6106fb565b60006001828154811061020657610206610a1e565b6000918252602090912001546001600160a01b031692915050565b6001818154811061023157600080fd5b6000918252602090912001546001600160a01b0316905081565b606060018054806020026020016040519081016040528092919081815260200182805480156102a357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610285575b5050505050905090565b6102b5610739565b6102bf6000610794565b565b60006102cb610739565b6102d3610805565b6001600160a01b038516158015906102f357506001600160a01b03841615155b6103445760405162461bcd60e51b815260206004820181905260248201527f466163746f72793a20696e76616c696420746f6b656e2061646472657373657360448201526064015b60405180910390fd5b836001600160a01b0316856001600160a01b0316036103b05760405162461bcd60e51b815260206004820152602260248201527f466163746f72793a206964656e746963616c20746f6b656e2061646472657373604482015261657360f01b606482015260840161033b565b6001600160a01b0385811660009081526020818152604080832088851684529091529020541615801561040657506001600160a01b03848116600090815260208181526040808320898516845290915290205416155b6104525760405162461bcd60e51b815260206004820152601c60248201527f466163746f72793a20706f6f6c20616c72656164792065786973747300000000604482015260640161033b565b60405161045e906108ef565b604051809103906000f08015801561047a573d6000803e3d6000fd5b506040516314d6c7d760e31b81526001600160a01b0387811660048301528681166024830152858116604483015260648201859052600a60848301529192509082169063a6b63eb89060a401600060405180830381600087803b1580156104e057600080fd5b505af11580156104f4573d6000803e3d6000fd5b505050506001600160a01b0385811660008181526020818152604080832089861680855290835281842080549688166001600160a01b031997881681179091558484528285208686528452828520805488168217905560018054808201825595527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690940180549096168417909555519182527f9c5d829b9b23efc461f9aeef91979ec04bb903feb3bee4f26d22114abfc7335b910160405180910390a36105db60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156106295750825b905060008267ffffffffffffffff1660011480156106465750303b155b905081158015610654575080155b156106725760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561069c57845460ff60401b1916600160401b1785555b6106a586610875565b6106ad610886565b83156106f357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b610703610739565b6001600160a01b03811661072d57604051631e4fbdf760e01b81526000600482015260240161033b565b61073681610794565b50565b3361076b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146102bf5760405163118cdaa760e01b815233600482015260240161033b565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080546001190161084957604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61087d610896565b610736816108df565b61088e610896565b6102bf6108e7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166102bf57604051631afcd79f60e31b815260040160405180910390fd5b610703610896565b61084f610896565b611b2a80610a3583390190565b60006020828403121561090e57600080fd5b5035919050565b80356001600160a01b038116811461092c57600080fd5b919050565b6000806040838503121561094457600080fd5b61094d83610915565b915061095b60208401610915565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156109a55783516001600160a01b031683529284019291840191600101610980565b50909695505050505050565b600080600080608085870312156109c757600080fd5b6109d085610915565b93506109de60208601610915565b92506109ec60408601610915565b9396929550929360600135925050565b600060208284031215610a0e57600080fd5b610a1782610915565b9392505050565b634e487b7160e01b600052603260045260246000fdfe6080604052348015600f57600080fd5b50611b0b8061001f6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c3578063a6b63eb81161007c578063a6b63eb81461030c578063a9059cbb1461031f578063aa0b598814610332578063dd62ed3e14610345578063f140a35a14610358578063f2fde38b1461036b57600080fd5b8063715018a6146102915780638da5cb5b1461029b57806395d89b41146102cb5780639c8f9f23146102d35780639cd441da146102e65780639f1d0f59146102f957600080fd5b806323b872dd1161011557806323b872dd1461020a57806326232a2e1461021d578063313ce56714610226578063449e815d146102355780635f64b55b1461024857806370a082311461025b57600080fd5b806306fdde03146101525780630902f1ac14610170578063095ea7b31461018b5780630fc63d10146101ae57806318160ddd146101d9575b600080fd5b61015a61037e565b604051610167919061166a565b60405180910390f35b60025460035460408051928352602083019190915201610167565b61019e6101993660046116d5565b610441565b6040519015158152602001610167565b6000546101c1906001600160a01b031681565b6040516001600160a01b039091168152602001610167565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610167565b61019e6102183660046116ff565b61045b565b6101fc60045481565b60405160128152602001610167565b6101fc6102433660046116d5565b61047f565b6001546101c1906001600160a01b031681565b6101fc61026936600461173b565b6001600160a01b03166000908152600080516020611a96833981519152602052604090205490565b610299610492565b005b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166101c1565b61015a6104a6565b6102996102e1366004611756565b6104e5565b6102996102f436600461176f565b61071d565b610299610307366004611791565b6108e2565b61029961031a3660046117c4565b610b96565b61019e61032d3660046116d5565b610d3e565b610299610340366004611756565b610d4c565b6101fc610353366004611819565b610d59565b6101fc61036636600461184c565b610da3565b61029961037936600461173b565b610e42565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020611a96833981519152916103bd9061186f565b80601f01602080910402602001604051908101604052809291908181526020018280546103e99061186f565b80156104365780601f1061040b57610100808354040283529160200191610436565b820191906000526020600020905b81548152906001019060200180831161041957829003601f168201915b505050505091505090565b60003361044f818585610e7d565b60019150505b92915050565b600033610469858285610e8a565b610474858585610ef0565b506001949350505050565b600061048b8284610da3565b9392505050565b61049a610f4f565b6104a46000610faa565b565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020611a96833981519152916103bd9061186f565b6104ed61101b565b600081116105425760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206c697175696469747920616d6f756e74000000000000000060448201526064015b60405180910390fd5b600061056c7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b60025461057990846118bf565b61058391906118ec565b905060006105af7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b6003546105bc90856118bf565b6105c691906118ec565b90506105d23384611053565b60005460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610623573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610647919061190e565b5060015460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bd919061190e565b506106c6611089565b604080518381526020810183905233917f96cd817c6329656790ef8fba7675405193677d39619571282f5e21f3a98cd059910160405180910390a2505061071a6001600080516020611ab683398151915255565b50565b61072561101b565b6000821180156107355750600081115b6107735760405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420616d6f756e747360881b6044820152606401610539565b6000546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee919061190e565b506001546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086a919061190e565b506000610877838361117d565b9050610883338261119f565b61088b611089565b604080518481526020810184905233917fac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee45910160405180910390a2506108de6001600080516020611ab683398151915255565b5050565b6108ea61101b565b6000546001600160a01b038481169116148061091357506001546001600160a01b038481169116145b6109575760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401610539565b6000821161099e5760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081a5b9c1d5d08185b5bdd5b9d60621b6044820152606401610539565b600080546001600160a01b038581169116146109c5576000546001600160a01b03166109d2565b6001546001600160a01b03165b905060006109e08486610da3565b905082811015610a325760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e74206f757470757420616d6f756e740000000000006044820152606401610539565b6040516323b872dd60e01b8152336004820152306024820152604481018590526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa9919061190e565b5060405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610af7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1b919061190e565b50610b24611089565b604080516001600160a01b0387811682526020820187905284168183015260608101839052905133917f5380cf97d8f645d3c4896da60c053458dca03a3a31cec642ac80e1ddf0d8d02a919081900360800190a25050610b916001600080516020611ab683398151915255565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610bdc5750825b905060008267ffffffffffffffff166001148015610bf95750303b155b905081158015610c07575080155b15610c255760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c4f57845460ff60401b1916600160401b1785555b610ca1604051806040016040528060158152602001744c697175696469747920506f6f6c20546f6b656e7360581b8152506040518060400160405280600381526020016213141560ea1b8152506111d5565b610ca96111e7565b610cb2886111f7565b600080546001600160a01b03808d166001600160a01b03199283161790925560018054928c1692909116919091179055600487905560058690558315610d3257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b60003361044f818585610ef0565b610d54610f4f565b600455565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6000805481906001600160a01b03848116911614610dc357600354610dc7565b6002545b60008054919250906001600160a01b03858116911614610de957600254610ded565b6003545b90506000612710600454612710610e049190611930565b610e0e90886118bf565b610e1891906118ec565b9050610e248184611943565b610e2e83836118bf565b610e3891906118ec565b9695505050505050565b610e4a610f4f565b6001600160a01b038116610e7457604051631e4fbdf760e01b815260006004820152602401610539565b61071a81610faa565b610b918383836001611208565b6000610e968484610d59565b90506000198114610eea5781811015610edb57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610539565b610eea84848484036000611208565b50505050565b6001600160a01b038316610f1a57604051634b637e8f60e11b815260006004820152602401610539565b6001600160a01b038216610f445760405163ec442f0560e01b815260006004820152602401610539565b610b918383836112f0565b33610f817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104a45760405163118cdaa760e01b8152336004820152602401610539565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600080516020611ab683398151915280546001190161104d57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6001600160a01b03821661107d57604051634b637e8f60e11b815260006004820152602401610539565b6108de826000836112f0565b6000546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156110d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f59190611956565b6002556001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611140573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111649190611956565b600355565b6001600080516020611ab683398151915255565b60055460009061119561119084866118bf565b61142e565b61048b9190611930565b6001600160a01b0382166111c95760405163ec442f0560e01b815260006004820152602401610539565b6108de600083836112f0565b6111dd611516565b6108de828261155f565b6111ef611516565b6104a46115b0565b6111ff611516565b61071a816115b8565b600080516020611a968339815191526001600160a01b0385166112415760405163e602df0560e01b815260006004820152602401610539565b6001600160a01b03841661126b57604051634a1406b160e11b815260006004820152602401610539565b6001600160a01b038086166000908152600183016020908152604080832093881683529290522083905581156112e957836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516112e091815260200190565b60405180910390a35b5050505050565b600080516020611a968339815191526001600160a01b03841661132c57818160020160008282546113219190611943565b9091555061139e9050565b6001600160a01b0384166000908152602082905260409020548281101561137f5760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610539565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b0383166113bc5760028101805483900390556113db565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161142091815260200190565b60405180910390a350505050565b60008160000361144057506000919050565b6000600161144d846115c0565b901c6001901b90506001818481611466576114666118d6565b048201901c9050600181848161147e5761147e6118d6565b048201901c90506001818481611496576114966118d6565b048201901c905060018184816114ae576114ae6118d6565b048201901c905060018184816114c6576114c66118d6565b048201901c905060018184816114de576114de6118d6565b048201901c905060018184816114f6576114f66118d6565b048201901c905061048b81828581611510576115106118d6565b04611654565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166104a457604051631afcd79f60e31b815260040160405180910390fd5b611567611516565b600080516020611a968339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036115a184826119d5565b5060048101610eea83826119d5565b611169611516565b610e4a611516565b600080608083901c156115d557608092831c92015b604083901c156115e757604092831c92015b602083901c156115f957602092831c92015b601083901c1561160b57601092831c92015b600883901c1561161d57600892831c92015b600483901c1561162f57600492831c92015b600283901c1561164157600292831c92015b600183901c156104555760010192915050565b6000818310611663578161048b565b5090919050565b60006020808352835180602085015260005b818110156116985785810183015185820160400152820161167c565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146116d057600080fd5b919050565b600080604083850312156116e857600080fd5b6116f1836116b9565b946020939093013593505050565b60008060006060848603121561171457600080fd5b61171d846116b9565b925061172b602085016116b9565b9150604084013590509250925092565b60006020828403121561174d57600080fd5b61048b826116b9565b60006020828403121561176857600080fd5b5035919050565b6000806040838503121561178257600080fd5b50508035926020909101359150565b6000806000606084860312156117a657600080fd5b6117af846116b9565b95602085013595506040909401359392505050565b600080600080600060a086880312156117dc57600080fd5b6117e5866116b9565b94506117f3602087016116b9565b9350611801604087016116b9565b94979396509394606081013594506080013592915050565b6000806040838503121561182c57600080fd5b611835836116b9565b9150611843602084016116b9565b90509250929050565b6000806040838503121561185f57600080fd5b82359150611843602084016116b9565b600181811c9082168061188357607f821691505b6020821081036118a357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610455576104556118a9565b634e487b7160e01b600052601260045260246000fd5b60008261190957634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561192057600080fd5b8151801515811461048b57600080fd5b81810381811115610455576104556118a9565b80820180821115610455576104556118a9565b60006020828403121561196857600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b601f821115610b91576000816000526020600020601f850160051c810160208610156119ae5750805b601f850160051c820191505b818110156119cd578281556001016119ba565b505050505050565b815167ffffffffffffffff8111156119ef576119ef61196f565b611a03816119fd845461186f565b84611985565b602080601f831160018114611a385760008415611a205750858301515b600019600386901b1c1916600185901b1785556119cd565b600085815260208120601f198616915b82811015611a6757888601518255948401946001909101908401611a48565b5085821015611a855787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220e0423eae0aa90fc5ee1352ff74fa5459728b920dceca8eed2d5216ce9c6da6d364736f6c63430008190033a26469706673582212204f97b874e11a35e0c0f9a329931e1a7c5767e22dc1079a440daa678e8bdab93464736f6c63430008190033", + "nonce": "0x9a", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb61950de3dd068e3ffce3be9d28b09d1a233930c9a76cc6fa7db77b845d28498", + "transactionType": "CALL", + "contractName": "LiquidityPoolFactory", + "contractAddress": "0x7101734f6178c68a242ab3b9506fb52f5afac955", + "function": "initialize(address)", + "arguments": [ + "0x3964D0011EB003488Ab59B1ce0C235baA3998bdd" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x7101734f6178c68a242ab3b9506fb52f5afac955", + "gas": "0x20fc8", + "value": "0x0", + "input": "0xc4d66de80000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "nonce": "0x9b", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xcba44", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x00000000000000000000000009207a6efee346cb3e4a54ac18523e3715d38b3f" + ], + "data": "0x00000000000000000000000000000000000000000000000000bb19610745fde8000000000000000000000000000000000000000000000004ec344cd7a133dfce00000000000000000000000000000000000000000000011b6317de91ca979545000000000000000000000000000000000000000000000004eb79337699ede1e600000000000000000000000000000000000000000000011b63d2f7f2d1dd932d", + "blockHash": "0x670bb0828e7501e27576c70a0d402280ae86a337b5cc1a0013ff97fb90946c4f", + "blockNumber": "0x8179c3", + "transactionHash": "0x1d50e44a0af3133d2fa04413ac79831223023b7fc2781183628f25648e13e89d", + "transactionIndex": "0x2", + "logIndex": "0x4", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000010008000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000002000000000000000000000004000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000010000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x1d50e44a0af3133d2fa04413ac79831223023b7fc2781183628f25648e13e89d", + "transactionIndex": "0x2", + "blockHash": "0x670bb0828e7501e27576c70a0d402280ae86a337b5cc1a0013ff97fb90946c4f", + "blockNumber": "0x8179c3", + "gasUsed": "0xb3b98", + "effectiveGasPrice": "0x10a811901e", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": null, + "contractAddress": "0x303f6f54a992adaa74456e492c93ca801b33e197" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xe2318", + "logs": [ + { + "address": "0x303f6f54a992adaa74456e492c93ca801b33e197", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x670bb0828e7501e27576c70a0d402280ae86a337b5cc1a0013ff97fb90946c4f", + "blockNumber": "0x8179c3", + "transactionHash": "0x6cd57d3d71145c07181d86457727d071155225ea9bec165ee7941ac02bf917e7", + "transactionIndex": "0x3", + "logIndex": "0x5", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x00000000000000000000000009207a6efee346cb3e4a54ac18523e3715d38b3f" + ], + "data": "0x00000000000000000000000000000000000000000000000000177a23e120646c000000000000000000000000000000000000000000000004eb793376994563fe00000000000000000000000000000000000000000000011b63d2f7f2d1dd932d000000000000000000000000000000000000000000000004eb61b952b824ff9200000000000000000000000000000000000000000000011b63ea7216b2fdf799", + "blockHash": "0x670bb0828e7501e27576c70a0d402280ae86a337b5cc1a0013ff97fb90946c4f", + "blockNumber": "0x8179c3", + "transactionHash": "0x6cd57d3d71145c07181d86457727d071155225ea9bec165ee7941ac02bf917e7", + "transactionIndex": "0x3", + "logIndex": "0x6", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000008000000000000000010008000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000002000000800000000000000004000000080000000000000000000200000000000000000000800000000000000000000000000000000000000004004000000000000000001000000000000000000000004000000100000000000000000000000000000000000010000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x6cd57d3d71145c07181d86457727d071155225ea9bec165ee7941ac02bf917e7", + "transactionIndex": "0x3", + "blockHash": "0x670bb0828e7501e27576c70a0d402280ae86a337b5cc1a0013ff97fb90946c4f", + "blockNumber": "0x8179c3", + "gasUsed": "0x168d4", + "effectiveGasPrice": "0x10a811901e", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x303f6f54a992adaa74456e492c93ca801b33e197", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x195eb0", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x00000000000000000000000009207a6efee346cb3e4a54ac18523e3715d38b3f" + ], + "data": "0x00000000000000000000000000000000000000000000000000bb19610745fde8000000000000000000000000000000000000000000000004eb61b952b80fdb2600000000000000000000000000000000000000000000011b63ea7216b2fdf799000000000000000000000000000000000000000000000004eaa69ff1b0c9dd3e00000000000000000000000000000000000000000000011b64a58b77ba43f581", + "blockHash": "0x670bb0828e7501e27576c70a0d402280ae86a337b5cc1a0013ff97fb90946c4f", + "blockNumber": "0x8179c3", + "transactionHash": "0xe009c85af4435b8acab6b4bc866fad1310ec465aba9a17bb26d7063def3531da", + "transactionIndex": "0x4", + "logIndex": "0x7", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000010008000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000002000000000000000000000004000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000010000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0xe009c85af4435b8acab6b4bc866fad1310ec465aba9a17bb26d7063def3531da", + "transactionIndex": "0x4", + "blockHash": "0x670bb0828e7501e27576c70a0d402280ae86a337b5cc1a0013ff97fb90946c4f", + "blockNumber": "0x8179c3", + "gasUsed": "0xb3b98", + "effectiveGasPrice": "0x10a811901e", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": null, + "contractAddress": "0x90fa57a65ff13de0ed02a250814754d8eb70516c" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1ac760", + "logs": [ + { + "address": "0x90fa57a65ff13de0ed02a250814754d8eb70516c", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x670bb0828e7501e27576c70a0d402280ae86a337b5cc1a0013ff97fb90946c4f", + "blockNumber": "0x8179c3", + "transactionHash": "0xd26c197c7b155ef7d6ee37a96287fafbd8a28b3d709d35116261c0091840c494", + "transactionIndex": "0x5", + "logIndex": "0x8", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x00000000000000000000000009207a6efee346cb3e4a54ac18523e3715d38b3f" + ], + "data": "0x000000000000000000000000000000000000000000000000001777cc3ea82250000000000000000000000000000000000000000000000004eaa69ff1b0215f5600000000000000000000000000000000000000000000011b64a58b77ba43f581000000000000000000000000000000000000000000000004ea8f282571793d0600000000000000000000000000000000000000000000011b64bd0343f8ec17d1", + "blockHash": "0x670bb0828e7501e27576c70a0d402280ae86a337b5cc1a0013ff97fb90946c4f", + "blockNumber": "0x8179c3", + "transactionHash": "0xd26c197c7b155ef7d6ee37a96287fafbd8a28b3d709d35116261c0091840c494", + "transactionIndex": "0x5", + "logIndex": "0x9", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000010008000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000020080000001000000000200000000002000000800000000000000004000000080000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000004000000100000000000000000000000000000000000010000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0xd26c197c7b155ef7d6ee37a96287fafbd8a28b3d709d35116261c0091840c494", + "transactionIndex": "0x5", + "blockHash": "0x670bb0828e7501e27576c70a0d402280ae86a337b5cc1a0013ff97fb90946c4f", + "blockNumber": "0x8179c3", + "gasUsed": "0x168b0", + "effectiveGasPrice": "0x10a811901e", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x90fa57a65ff13de0ed02a250814754d8eb70516c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1bd2ad", + "logs": [ + { + "address": "0x303f6f54a992adaa74456e492c93ca801b33e197", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000989680", + "blockHash": "0x670bb0828e7501e27576c70a0d402280ae86a337b5cc1a0013ff97fb90946c4f", + "blockNumber": "0x8179c3", + "transactionHash": "0x1b3b20806027d7e8d2bbcbcdf2fbaa75ece21d8639af8ec890d7ede3c8a122c3", + "transactionIndex": "0x6", + "logIndex": "0xa", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x00000000000000000000000009207a6efee346cb3e4a54ac18523e3715d38b3f" + ], + "data": "0x0000000000000000000000000000000000000000000000000011644cde87f983000000000000000000000000000000000000000000000004ea8f282571641ab600000000000000000000000000000000000000000000011b64bd0343f8ec17d1000000000000000000000000000000000000000000000004ea7dc3d892dc213300000000000000000000000000000000000000000000011b64ce6790d7741154", + "blockHash": "0x670bb0828e7501e27576c70a0d402280ae86a337b5cc1a0013ff97fb90946c4f", + "blockNumber": "0x8179c3", + "transactionHash": "0x1b3b20806027d7e8d2bbcbcdf2fbaa75ece21d8639af8ec890d7ede3c8a122c3", + "transactionIndex": "0x6", + "logIndex": "0xb", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000008000000000000000010008000000000000000000000000000008000000800000000000000000000100000000000000000000020000000000000000000800000000000000000080000010000000000000000000002000000000000000000000004000000000000000000000000000200000000000000000000800000000000000000000000000000000000000004004000002000000000001000000000000000000000000000000100000000020000000000000000000000000010000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x1b3b20806027d7e8d2bbcbcdf2fbaa75ece21d8639af8ec890d7ede3c8a122c3", + "transactionIndex": "0x6", + "blockHash": "0x670bb0828e7501e27576c70a0d402280ae86a337b5cc1a0013ff97fb90946c4f", + "blockNumber": "0x8179c3", + "gasUsed": "0x10b4d", + "effectiveGasPrice": "0x10a811901e", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x303f6f54a992adaa74456e492c93ca801b33e197", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1cddfa", + "logs": [ + { + "address": "0x90fa57a65ff13de0ed02a250814754d8eb70516c", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000989680", + "blockHash": "0x670bb0828e7501e27576c70a0d402280ae86a337b5cc1a0013ff97fb90946c4f", + "blockNumber": "0x8179c3", + "transactionHash": "0xbf3f5f9eb74a1b6bce4054f59c7d9b76f0bd9ec3e7c8b5337320513432dee9ad", + "transactionIndex": "0x7", + "logIndex": "0xc", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x00000000000000000000000009207a6efee346cb3e4a54ac18523e3715d38b3f" + ], + "data": "0x0000000000000000000000000000000000000000000000000011644cde87f983000000000000000000000000000000000000000000000004ea7dc3d892cc77b000000000000000000000000000000000000000000000011b64ce6790d7741154000000000000000000000000000000000000000000000004ea6c5f8bb4447e2d00000000000000000000000000000000000000000000011b64dfcbddb5fc0ad7", + "blockHash": "0x670bb0828e7501e27576c70a0d402280ae86a337b5cc1a0013ff97fb90946c4f", + "blockNumber": "0x8179c3", + "transactionHash": "0xbf3f5f9eb74a1b6bce4054f59c7d9b76f0bd9ec3e7c8b5337320513432dee9ad", + "transactionIndex": "0x7", + "logIndex": "0xd", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000010008000000000000000000000000000008000000800000000000000000000100000000000000000000020000000000000000000800000000000000020080000011000000000200000000002000000000000000000000004000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000002000000000001000000000000000000000000000000100000000020000000000000000000000000010000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0xbf3f5f9eb74a1b6bce4054f59c7d9b76f0bd9ec3e7c8b5337320513432dee9ad", + "transactionIndex": "0x7", + "blockHash": "0x670bb0828e7501e27576c70a0d402280ae86a337b5cc1a0013ff97fb90946c4f", + "blockNumber": "0x8179c3", + "gasUsed": "0x10b4d", + "effectiveGasPrice": "0x10a811901e", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x90fa57a65ff13de0ed02a250814754d8eb70516c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x2083c5", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x00000000000000000000000009207a6efee346cb3e4a54ac18523e3715d38b3f" + ], + "data": "0x000000000000000000000000000000000000000000000000021d9504541b888b000000000000000000000000000000000000000000000004ea6c5f8bb434d4aa00000000000000000000000000000000000000000000011b64ff06b759e06a6f000000000000000000000000000000000000000000000004e84eca8760194c1f00000000000000000000000000000000000000000000011b671c9bbbadfbf2fa", + "blockHash": "0xcd2de63e0d899df182a1c607aef11924902132699309612529775a6629913946", + "blockNumber": "0x8179c4", + "transactionHash": "0x01648d05211558113c8d8b8ad7320d77c46fa4888ab8ca83d2e6e67d143a8b2c", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000010008000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000002000000000000000000000004000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000010000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x01648d05211558113c8d8b8ad7320d77c46fa4888ab8ca83d2e6e67d143a8b2c", + "transactionIndex": "0x0", + "blockHash": "0xcd2de63e0d899df182a1c607aef11924902132699309612529775a6629913946", + "blockNumber": "0x8179c4", + "gasUsed": "0x2083c5", + "effectiveGasPrice": "0x10a811901e", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": null, + "contractAddress": "0x7101734f6178c68a242ab3b9506fb52f5afac955" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x21eca6", + "logs": [ + { + "address": "0x7101734f6178c68a242ab3b9506fb52f5afac955", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd" + ], + "data": "0x", + "blockHash": "0xcd2de63e0d899df182a1c607aef11924902132699309612529775a6629913946", + "blockNumber": "0x8179c4", + "transactionHash": "0xb61950de3dd068e3ffce3be9d28b09d1a233930c9a76cc6fa7db77b845d28498", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + }, + { + "address": "0x7101734f6178c68a242ab3b9506fb52f5afac955", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xcd2de63e0d899df182a1c607aef11924902132699309612529775a6629913946", + "blockNumber": "0x8179c4", + "transactionHash": "0xb61950de3dd068e3ffce3be9d28b09d1a233930c9a76cc6fa7db77b845d28498", + "transactionIndex": "0x1", + "logIndex": "0x2", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x00000000000000000000000009207a6efee346cb3e4a54ac18523e3715d38b3f" + ], + "data": "0x00000000000000000000000000000000000000000000000000177afc6a04b52f000000000000000000000000000000000000000000000004e84eca875e31939400000000000000000000000000000000000000000000011b671c9bbbadfbf2fa000000000000000000000000000000000000000000000004e8374f8af42cde6500000000000000000000000000000000000000000000011b673416b81800a829", + "blockHash": "0xcd2de63e0d899df182a1c607aef11924902132699309612529775a6629913946", + "blockNumber": "0x8179c4", + "transactionHash": "0xb61950de3dd068e3ffce3be9d28b09d1a233930c9a76cc6fa7db77b845d28498", + "transactionIndex": "0x1", + "logIndex": "0x3", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000008000000000000000010008000000000000000000000000000000000000800001000000000000000100000000000000000000020000000000000000000800000000000000000080000000000000400000000000002000000800000000000000004000000080000000000000000000200000000000000000002000000000000000000000000000000000000000004000000000000000000001000000000000000000000004000000100000000020000000000000000000000000010000000000000000000022000000000000100000", + "type": "0x2", + "transactionHash": "0xb61950de3dd068e3ffce3be9d28b09d1a233930c9a76cc6fa7db77b845d28498", + "transactionIndex": "0x1", + "blockHash": "0xcd2de63e0d899df182a1c607aef11924902132699309612529775a6629913946", + "blockNumber": "0x8179c4", + "gasUsed": "0x168e1", + "effectiveGasPrice": "0x10a811901e", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x7101734f6178c68a242ab3b9506fb52f5afac955", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1718830663, + "chain": 80002, + "commit": "2bc5ab5" +} \ No newline at end of file diff --git a/contracts/broadcast/deploy_liquidityPools.s.sol/80002/run-1718833845.json b/contracts/broadcast/deploy_liquidityPools.s.sol/80002/run-1718833845.json new file mode 100644 index 0000000..425e175 --- /dev/null +++ b/contracts/broadcast/deploy_liquidityPools.s.sol/80002/run-1718833845.json @@ -0,0 +1,390 @@ +{ + "transactions": [ + { + "hash": "0xf55fbc0c45c1a3728591b76f2a1130e73b10631d1fc934ea12857884b224e455", + "transactionType": "CREATE", + "contractName": "GensToken", + "contractAddress": "0xeab4ddb07e6e1188a23dc8360073d2f38aeaeb3f", + "function": null, + "arguments": null, + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "gas": "0xe9941", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b50610c5a8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806340c10f191161007157806340c10f19146101425780634cd88b761461015757806370a082311461016a57806395d89b41146101a0578063a9059cbb146101a8578063dd62ed3e146101bb57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610120578063313ce56714610133575b600080fd5b6100b66101ce565b6040516100c3919061086c565b60405180910390f35b6100df6100da3660046108d7565b610291565b60405190151581526020016100c3565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040519081526020016100c3565b6100df61012e366004610901565b6102ab565b604051601281526020016100c3565b6101556101503660046108d7565b6102cf565b005b6101556101653660046109e0565b6102dd565b610112610178366004610a44565b6001600160a01b03166000908152600080516020610c05833981519152602052604090205490565b6100b66103ef565b6100df6101b63660046108d7565b61042e565b6101126101c9366004610a66565b61043c565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020610c058339815191529161020d90610a99565b80601f016020809104026020016040519081016040528092919081815260200182805461023990610a99565b80156102865780601f1061025b57610100808354040283529160200191610286565b820191906000526020600020905b81548152906001019060200180831161026957829003601f168201915b505050505091505090565b60003361029f818585610486565b60019150505b92915050565b6000336102b9858285610498565b6102c4858585610503565b506001949350505050565b6102d98282610562565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156103235750825b905060008267ffffffffffffffff1660011480156103405750303b155b90508115801561034e575080155b1561036c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561039657845460ff60401b1916600160401b1785555b6103a08787610598565b83156103e657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020610c058339815191529161020d90610a99565b60003361029f818585610503565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b61049383838360016105aa565b505050565b60006104a4848461043c565b905060001981146104fd57818110156104ee57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b6104fd848484840360006105aa565b50505050565b6001600160a01b03831661052d57604051634b637e8f60e11b8152600060048201526024016104e5565b6001600160a01b0382166105575760405163ec442f0560e01b8152600060048201526024016104e5565b610493838383610692565b6001600160a01b03821661058c5760405163ec442f0560e01b8152600060048201526024016104e5565b6102d960008383610692565b6105a06107d0565b6102d9828261081b565b600080516020610c058339815191526001600160a01b0385166105e35760405163e602df0560e01b8152600060048201526024016104e5565b6001600160a01b03841661060d57604051634a1406b160e11b8152600060048201526024016104e5565b6001600160a01b0380861660009081526001830160209081526040808320938816835292905220839055811561068b57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161068291815260200190565b60405180910390a35b5050505050565b600080516020610c058339815191526001600160a01b0384166106ce57818160020160008282546106c39190610ad3565b909155506107409050565b6001600160a01b038416600090815260208290526040902054828110156107215760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016104e5565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b03831661075e57600281018054839003905561077d565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107c291815260200190565b60405180910390a350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661081957604051631afcd79f60e31b815260040160405180910390fd5b565b6108236107d0565b600080516020610c058339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361085d8482610b44565b50600481016104fd8382610b44565b60006020808352835180602085015260005b8181101561089a5785810183015185820160400152820161087e565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146108d257600080fd5b919050565b600080604083850312156108ea57600080fd5b6108f3836108bb565b946020939093013593505050565b60008060006060848603121561091657600080fd5b61091f846108bb565b925061092d602085016108bb565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261096457600080fd5b813567ffffffffffffffff8082111561097f5761097f61093d565b604051601f8301601f19908116603f011681019082821181831017156109a7576109a761093d565b816040528381528660208588010111156109c057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156109f357600080fd5b823567ffffffffffffffff80821115610a0b57600080fd5b610a1786838701610953565b93506020850135915080821115610a2d57600080fd5b50610a3a85828601610953565b9150509250929050565b600060208284031215610a5657600080fd5b610a5f826108bb565b9392505050565b60008060408385031215610a7957600080fd5b610a82836108bb565b9150610a90602084016108bb565b90509250929050565b600181811c90821680610aad57607f821691505b602082108103610acd57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156102a557634e487b7160e01b600052601160045260246000fd5b601f821115610493576000816000526020600020601f850160051c81016020861015610b1d5750805b601f850160051c820191505b81811015610b3c57828155600101610b29565b505050505050565b815167ffffffffffffffff811115610b5e57610b5e61093d565b610b7281610b6c8454610a99565b84610af4565b602080601f831160018114610ba75760008415610b8f5750858301515b600019600386901b1c1916600185901b178555610b3c565b600085815260208120601f198616915b82811015610bd657888601518255948401946001909101908401610bb7565b5085821015610bf45787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a2646970667358221220d6ce0bc34cf5e38b6a59085954510cc2ee5ffe85a527cc55a370a14a14acfaa364736f6c63430008190033", + "nonce": "0xa0", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xc159b28bc93feb9e2de1137504249e0da0a900000080607419c586306ecb954a", + "transactionType": "CALL", + "contractName": "GensToken", + "contractAddress": "0xeab4ddb07e6e1188a23dc8360073d2f38aeaeb3f", + "function": "initialize(string,string)", + "arguments": [ + "\"Genesis\"", + "\"GENX\"" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0xeab4ddb07e6e1188a23dc8360073d2f38aeaeb3f", + "gas": "0x1f264", + "value": "0x0", + "input": "0x4cd88b7600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000747656e6573697300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000447454e5800000000000000000000000000000000000000000000000000000000", + "nonce": "0xa1", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x24bc8f6afbaf635357d22077025849599742af919af24c00c3b147bdb734dfb2", + "transactionType": "CREATE", + "contractName": "GensToken", + "contractAddress": "0x3607e52bee359b179c895df9dc3fca727a9870e2", + "function": null, + "arguments": null, + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "gas": "0xe9941", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b50610c5a8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806340c10f191161007157806340c10f19146101425780634cd88b761461015757806370a082311461016a57806395d89b41146101a0578063a9059cbb146101a8578063dd62ed3e146101bb57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610120578063313ce56714610133575b600080fd5b6100b66101ce565b6040516100c3919061086c565b60405180910390f35b6100df6100da3660046108d7565b610291565b60405190151581526020016100c3565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040519081526020016100c3565b6100df61012e366004610901565b6102ab565b604051601281526020016100c3565b6101556101503660046108d7565b6102cf565b005b6101556101653660046109e0565b6102dd565b610112610178366004610a44565b6001600160a01b03166000908152600080516020610c05833981519152602052604090205490565b6100b66103ef565b6100df6101b63660046108d7565b61042e565b6101126101c9366004610a66565b61043c565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020610c058339815191529161020d90610a99565b80601f016020809104026020016040519081016040528092919081815260200182805461023990610a99565b80156102865780601f1061025b57610100808354040283529160200191610286565b820191906000526020600020905b81548152906001019060200180831161026957829003601f168201915b505050505091505090565b60003361029f818585610486565b60019150505b92915050565b6000336102b9858285610498565b6102c4858585610503565b506001949350505050565b6102d98282610562565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156103235750825b905060008267ffffffffffffffff1660011480156103405750303b155b90508115801561034e575080155b1561036c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561039657845460ff60401b1916600160401b1785555b6103a08787610598565b83156103e657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020610c058339815191529161020d90610a99565b60003361029f818585610503565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b61049383838360016105aa565b505050565b60006104a4848461043c565b905060001981146104fd57818110156104ee57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b6104fd848484840360006105aa565b50505050565b6001600160a01b03831661052d57604051634b637e8f60e11b8152600060048201526024016104e5565b6001600160a01b0382166105575760405163ec442f0560e01b8152600060048201526024016104e5565b610493838383610692565b6001600160a01b03821661058c5760405163ec442f0560e01b8152600060048201526024016104e5565b6102d960008383610692565b6105a06107d0565b6102d9828261081b565b600080516020610c058339815191526001600160a01b0385166105e35760405163e602df0560e01b8152600060048201526024016104e5565b6001600160a01b03841661060d57604051634a1406b160e11b8152600060048201526024016104e5565b6001600160a01b0380861660009081526001830160209081526040808320938816835292905220839055811561068b57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161068291815260200190565b60405180910390a35b5050505050565b600080516020610c058339815191526001600160a01b0384166106ce57818160020160008282546106c39190610ad3565b909155506107409050565b6001600160a01b038416600090815260208290526040902054828110156107215760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016104e5565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b03831661075e57600281018054839003905561077d565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107c291815260200190565b60405180910390a350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661081957604051631afcd79f60e31b815260040160405180910390fd5b565b6108236107d0565b600080516020610c058339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361085d8482610b44565b50600481016104fd8382610b44565b60006020808352835180602085015260005b8181101561089a5785810183015185820160400152820161087e565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146108d257600080fd5b919050565b600080604083850312156108ea57600080fd5b6108f3836108bb565b946020939093013593505050565b60008060006060848603121561091657600080fd5b61091f846108bb565b925061092d602085016108bb565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261096457600080fd5b813567ffffffffffffffff8082111561097f5761097f61093d565b604051601f8301601f19908116603f011681019082821181831017156109a7576109a761093d565b816040528381528660208588010111156109c057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156109f357600080fd5b823567ffffffffffffffff80821115610a0b57600080fd5b610a1786838701610953565b93506020850135915080821115610a2d57600080fd5b50610a3a85828601610953565b9150509250929050565b600060208284031215610a5657600080fd5b610a5f826108bb565b9392505050565b60008060408385031215610a7957600080fd5b610a82836108bb565b9150610a90602084016108bb565b90509250929050565b600181811c90821680610aad57607f821691505b602082108103610acd57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156102a557634e487b7160e01b600052601160045260246000fd5b601f821115610493576000816000526020600020601f850160051c81016020861015610b1d5750805b601f850160051c820191505b81811015610b3c57828155600101610b29565b505050505050565b815167ffffffffffffffff811115610b5e57610b5e61093d565b610b7281610b6c8454610a99565b84610af4565b602080601f831160018114610ba75760008415610b8f5750858301515b600019600386901b1c1916600185901b178555610b3c565b600085815260208120601f198616915b82811015610bd657888601518255948401946001909101908401610bb7565b5085821015610bf45787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a2646970667358221220d6ce0bc34cf5e38b6a59085954510cc2ee5ffe85a527cc55a370a14a14acfaa364736f6c63430008190033", + "nonce": "0xa2", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x971c56021fb0e34c85be0544fdceabc0ae060b61070ff303cc23a1ab7835cffa", + "transactionType": "CALL", + "contractName": "GensToken", + "contractAddress": "0x3607e52bee359b179c895df9dc3fca727a9870e2", + "function": "initialize(string,string)", + "arguments": [ + "\"Gens\"", + "\"GENS\"" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x3607e52bee359b179c895df9dc3fca727a9870e2", + "gas": "0x1f233", + "value": "0x0", + "input": "0x4cd88b7600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000447656e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000447454e5300000000000000000000000000000000000000000000000000000000", + "nonce": "0xa3", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xda114ab66f69bc16a5b8fa31cc43c7a8bf0727847520382304540f90f28b71b1", + "transactionType": "CALL", + "contractName": "GensToken", + "contractAddress": "0xeab4ddb07e6e1188a23dc8360073d2f38aeaeb3f", + "function": "mint(address,uint256)", + "arguments": [ + "0x3964D0011EB003488Ab59B1ce0C235baA3998bdd", + "1000000000000000000000000" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0xeab4ddb07e6e1188a23dc8360073d2f38aeaeb3f", + "gas": "0x17176", + "value": "0x0", + "input": "0x40c10f190000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd00000000000000000000000000000000000000000000d3c21bcecceda1000000", + "nonce": "0xa4", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x73510b355c8b6f1230a64762deeb0eab70e8db99482083297fafabc30fc8ae30", + "transactionType": "CALL", + "contractName": "GensToken", + "contractAddress": "0x3607e52bee359b179c895df9dc3fca727a9870e2", + "function": "mint(address,uint256)", + "arguments": [ + "0x3964D0011EB003488Ab59B1ce0C235baA3998bdd", + "1000000000000000000000000" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x3607e52bee359b179c895df9dc3fca727a9870e2", + "gas": "0x17176", + "value": "0x0", + "input": "0x40c10f190000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd00000000000000000000000000000000000000000000d3c21bcecceda1000000", + "nonce": "0xa5", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xb3b98", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x0000000000000000000000006dc2dd54f24979ec26212794c71afefed722280c" + ], + "data": "0x00000000000000000000000000000000000000000000000000713f06bc07b9f8000000000000000000000000000000000000000000000004e7291df516f701f40000000000000000000000000000000000000000000001c86f3fbc53d2a78f5d000000000000000000000000000000000000000000000004e6b7deee5aef47fc0000000000000000000000000000000000000000000001c86fb0fb5a8eaf4955", + "blockHash": "0x4b051e4f6dd7857d818c507a2c551ee1f149179f2ca8778c0dd3275a48187bf9", + "blockNumber": "0x817f9d", + "transactionHash": "0xf55fbc0c45c1a3728591b76f2a1130e73b10631d1fc934ea12857884b224e455", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000008000000000000000000000000000000000000800000000000000000000100080000000000000000000000000000000000000000000000000000000080000000000000020000000000002000000000000040000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0xf55fbc0c45c1a3728591b76f2a1130e73b10631d1fc934ea12857884b224e455", + "transactionIndex": "0x0", + "blockHash": "0x4b051e4f6dd7857d818c507a2c551ee1f149179f2ca8778c0dd3275a48187bf9", + "blockNumber": "0x817f9d", + "gasUsed": "0xb3b98", + "effectiveGasPrice": "0xa14edc614", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": null, + "contractAddress": "0xeab4ddb07e6e1188a23dc8360073d2f38aeaeb3f" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xca46c", + "logs": [ + { + "address": "0xeab4ddb07e6e1188a23dc8360073d2f38aeaeb3f", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x4b051e4f6dd7857d818c507a2c551ee1f149179f2ca8778c0dd3275a48187bf9", + "blockNumber": "0x817f9d", + "transactionHash": "0xc159b28bc93feb9e2de1137504249e0da0a900000080607419c586306ecb954a", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x0000000000000000000000006dc2dd54f24979ec26212794c71afefed722280c" + ], + "data": "0x000000000000000000000000000000000000000000000000000e35c7b35f0424000000000000000000000000000000000000000000000004e6b7deee5a46ca140000000000000000000000000000000000000000000001c86fb0fb5a8eaf4955000000000000000000000000000000000000000000000004e6a9a926a6e7c5f00000000000000000000000000000000000000000000001c86fbf3122420e4d79", + "blockHash": "0x4b051e4f6dd7857d818c507a2c551ee1f149179f2ca8778c0dd3275a48187bf9", + "blockNumber": "0x817f9d", + "transactionHash": "0xc159b28bc93feb9e2de1137504249e0da0a900000080607419c586306ecb954a", + "transactionIndex": "0x1", + "logIndex": "0x2", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000008000000000000000000000000000000000000800000000000000000000100080000000000000000800000000000000000000000000000000000000080000000000000020000000000002000000800000040000000000000000080000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000100000001000000000000000000000004000000100000000000000000000000000000000000000000200000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0xc159b28bc93feb9e2de1137504249e0da0a900000080607419c586306ecb954a", + "transactionIndex": "0x1", + "blockHash": "0x4b051e4f6dd7857d818c507a2c551ee1f149179f2ca8778c0dd3275a48187bf9", + "blockNumber": "0x817f9d", + "gasUsed": "0x168d4", + "effectiveGasPrice": "0xa14edc614", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0xeab4ddb07e6e1188a23dc8360073d2f38aeaeb3f", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x17e004", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x0000000000000000000000006dc2dd54f24979ec26212794c71afefed722280c" + ], + "data": "0x00000000000000000000000000000000000000000000000000713f06bc07b9f8000000000000000000000000000000000000000000000004e6a9a926a6d2a1840000000000000000000000000000000000000000000001c86fbf3122420e4d79000000000000000000000000000000000000000000000004e6386a1feacae78c0000000000000000000000000000000000000000000001c870307028fe160771", + "blockHash": "0x4b051e4f6dd7857d818c507a2c551ee1f149179f2ca8778c0dd3275a48187bf9", + "blockNumber": "0x817f9d", + "transactionHash": "0x24bc8f6afbaf635357d22077025849599742af919af24c00c3b147bdb734dfb2", + "transactionIndex": "0x2", + "logIndex": "0x3", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000008000000000000000000000000000000000000800000000000000000000100080000000000000000000000000000000000000000000000000000000080000000000000020000000000002000000000000040000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x24bc8f6afbaf635357d22077025849599742af919af24c00c3b147bdb734dfb2", + "transactionIndex": "0x2", + "blockHash": "0x4b051e4f6dd7857d818c507a2c551ee1f149179f2ca8778c0dd3275a48187bf9", + "blockNumber": "0x817f9d", + "gasUsed": "0xb3b98", + "effectiveGasPrice": "0xa14edc614", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": null, + "contractAddress": "0x3607e52bee359b179c895df9dc3fca727a9870e2" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1948b4", + "logs": [ + { + "address": "0x3607e52bee359b179c895df9dc3fca727a9870e2", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x4b051e4f6dd7857d818c507a2c551ee1f149179f2ca8778c0dd3275a48187bf9", + "blockNumber": "0x817f9d", + "transactionHash": "0x971c56021fb0e34c85be0544fdceabc0ae060b61070ff303cc23a1ab7835cffa", + "transactionIndex": "0x3", + "logIndex": "0x4", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x0000000000000000000000006dc2dd54f24979ec26212794c71afefed722280c" + ], + "data": "0x000000000000000000000000000000000000000000000000000e345cc1ef2b70000000000000000000000000000000000000000000000004e6386a1fea2269a40000000000000000000000000000000000000000000001c870307028fe160771000000000000000000000000000000000000000000000004e62a35c328333e340000000000000000000000000000000000000000000001c8703ea485c00532e1", + "blockHash": "0x4b051e4f6dd7857d818c507a2c551ee1f149179f2ca8778c0dd3275a48187bf9", + "blockNumber": "0x817f9d", + "transactionHash": "0x971c56021fb0e34c85be0544fdceabc0ae060b61070ff303cc23a1ab7835cffa", + "transactionIndex": "0x3", + "logIndex": "0x5", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000400000000000008000000000000000000000000000000000000800000000000000000000100080000000000000000000000000000000000000000000000000000000080000000000000020000000000002000000800000040000000000000000080000000000000000000200000000000000000000000000000000400000000000000000000000000004000000000000000000001000000000000000000000004100000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x971c56021fb0e34c85be0544fdceabc0ae060b61070ff303cc23a1ab7835cffa", + "transactionIndex": "0x3", + "blockHash": "0x4b051e4f6dd7857d818c507a2c551ee1f149179f2ca8778c0dd3275a48187bf9", + "blockNumber": "0x817f9d", + "gasUsed": "0x168b0", + "effectiveGasPrice": "0xa14edc614", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x3607e52bee359b179c895df9dc3fca727a9870e2", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1a5431", + "logs": [ + { + "address": "0xeab4ddb07e6e1188a23dc8360073d2f38aeaeb3f", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd" + ], + "data": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", + "blockHash": "0x4b051e4f6dd7857d818c507a2c551ee1f149179f2ca8778c0dd3275a48187bf9", + "blockNumber": "0x817f9d", + "transactionHash": "0xda114ab66f69bc16a5b8fa31cc43c7a8bf0727847520382304540f90f28b71b1", + "transactionIndex": "0x4", + "logIndex": "0x6", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x0000000000000000000000006dc2dd54f24979ec26212794c71afefed722280c" + ], + "data": "0x000000000000000000000000000000000000000000000000000a88c035a0e771000000000000000000000000000000000000000000000004e62a35c3281e1be40000000000000000000000000000000000000000000001c8703ea485c00532e1000000000000000000000000000000000000000000000004e61fad02f27d34730000000000000000000000000000000000000000000001c870492d45f5a61a52", + "blockHash": "0x4b051e4f6dd7857d818c507a2c551ee1f149179f2ca8778c0dd3275a48187bf9", + "blockNumber": "0x817f9d", + "transactionHash": "0xda114ab66f69bc16a5b8fa31cc43c7a8bf0727847520382304540f90f28b71b1", + "transactionIndex": "0x4", + "logIndex": "0x7", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000008000000000000000000000000000008000000800000000000000000000100080000000000000000820000000000000000000800000000000000000080000010000000020000000000002000000000000040000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000002000100000001000000000000000000000000000000100000000020000000000000000000000000000000200000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0xda114ab66f69bc16a5b8fa31cc43c7a8bf0727847520382304540f90f28b71b1", + "transactionIndex": "0x4", + "blockHash": "0x4b051e4f6dd7857d818c507a2c551ee1f149179f2ca8778c0dd3275a48187bf9", + "blockNumber": "0x817f9d", + "gasUsed": "0x10b7d", + "effectiveGasPrice": "0xa14edc614", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0xeab4ddb07e6e1188a23dc8360073d2f38aeaeb3f", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1b5fae", + "logs": [ + { + "address": "0x3607e52bee359b179c895df9dc3fca727a9870e2", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd" + ], + "data": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", + "blockHash": "0x4b051e4f6dd7857d818c507a2c551ee1f149179f2ca8778c0dd3275a48187bf9", + "blockNumber": "0x817f9d", + "transactionHash": "0x73510b355c8b6f1230a64762deeb0eab70e8db99482083297fafabc30fc8ae30", + "transactionIndex": "0x5", + "logIndex": "0x8", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x0000000000000000000000006dc2dd54f24979ec26212794c71afefed722280c" + ], + "data": "0x000000000000000000000000000000000000000000000000000a88c035a0e771000000000000000000000000000000000000000000000004e61fad02f26d88200000000000000000000000000000000000000000000001c870492d45f5a61a52000000000000000000000000000000000000000000000004e6152442bccca0af0000000000000000000000000000000000000000000001c87053b6062b4701c3", + "blockHash": "0x4b051e4f6dd7857d818c507a2c551ee1f149179f2ca8778c0dd3275a48187bf9", + "blockNumber": "0x817f9d", + "transactionHash": "0x73510b355c8b6f1230a64762deeb0eab70e8db99482083297fafabc30fc8ae30", + "transactionIndex": "0x5", + "logIndex": "0x9", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000400000000000008000000000000000000000000000008000000800000000000000000000100080000000000000000020000000000000000000800000000000000000080000010000000020000000000002000000000000040000000000000000000000000000000000000200000000000000000000000000000000400000000000000000000000000004000000002000000000001000000000000000000000000100000100000000020000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x73510b355c8b6f1230a64762deeb0eab70e8db99482083297fafabc30fc8ae30", + "transactionIndex": "0x5", + "blockHash": "0x4b051e4f6dd7857d818c507a2c551ee1f149179f2ca8778c0dd3275a48187bf9", + "blockNumber": "0x817f9d", + "gasUsed": "0x10b7d", + "effectiveGasPrice": "0xa14edc614", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x3607e52bee359b179c895df9dc3fca727a9870e2", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1718833845, + "chain": 80002, + "commit": "2bc5ab5" +} \ No newline at end of file diff --git a/contracts/broadcast/deploy_liquidityPools.s.sol/80002/run-latest.json b/contracts/broadcast/deploy_liquidityPools.s.sol/80002/run-latest.json new file mode 100644 index 0000000..8155197 --- /dev/null +++ b/contracts/broadcast/deploy_liquidityPools.s.sol/80002/run-latest.json @@ -0,0 +1,383 @@ +{ + "transactions": [ + { + "hash": "0x4388ad3d2d39c3cb2a309b9c35ef6570f4d0c5d6b37034b4de99cf11d9407444", + "transactionType": "CREATE", + "contractName": "Token", + "contractAddress": "0x366a41534f7aa36c4169b35e28ef6b6501f676de", + "function": null, + "arguments": [ + "\"Genx\"", + "\"GENX\"", + "10000000000000000000000000" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "gas": "0xbe835", + "value": "0x0", + "input": "0x60806040523480156200001157600080fd5b5060405162000c9338038062000c938339810160408190526200003491620002ab565b82826003620000448382620003ad565b506004620000538282620003ad565b5050506200006833826200007160201b60201c565b505050620004a1565b6001600160a01b038216620000a15760405163ec442f0560e01b8152600060048201526024015b60405180910390fd5b620000af60008383620000b3565b5050565b6001600160a01b038316620000e2578060026000828254620000d6919062000479565b90915550620001569050565b6001600160a01b03831660009081526020819052604090205481811015620001375760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640162000098565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620001745760028054829003905562000193565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001d991815260200190565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020e57600080fd5b81516001600160401b03808211156200022b576200022b620001e6565b604051601f8301601f19908116603f01168101908282118183101715620002565762000256620001e6565b816040528381526020925086838588010111156200027357600080fd5b600091505b8382101562000297578582018301518183018401529082019062000278565b600093810190920192909252949350505050565b600080600060608486031215620002c157600080fd5b83516001600160401b0380821115620002d957600080fd5b620002e787838801620001fc565b94506020860151915080821115620002fe57600080fd5b506200030d86828701620001fc565b925050604084015190509250925092565b600181811c908216806200033357607f821691505b6020821081036200035457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003a857600081815260208120601f850160051c81016020861015620003835750805b601f850160051c820191505b81811015620003a4578281556001016200038f565b5050505b505050565b81516001600160401b03811115620003c957620003c9620001e6565b620003e181620003da84546200031e565b846200035a565b602080601f831160018114620004195760008415620004005750858301515b600019600386901b1c1916600185901b178555620003a4565b600085815260208120601f198616915b828110156200044a5788860151825594840194600190910190840162000429565b5085821015620004695787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200049b57634e487b7160e01b600052601160045260246000fd5b92915050565b6107e280620004b16000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806340c10f191161007157806340c10f191461012357806370a082311461013857806395d89b41146101615780639dc29fac14610169578063a9059cbb1461017c578063dd62ed3e1461018f57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101c8565b6040516100c3919061062c565b60405180910390f35b6100df6100da366004610696565b61025a565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f3660046106c0565b610274565b604051601281526020016100c3565b610136610131366004610696565b610298565b005b6100f36101463660046106fc565b6001600160a01b031660009081526020819052604090205490565b6100b66102a6565b610136610177366004610696565b6102b5565b6100df61018a366004610696565b6102bf565b6100f361019d36600461071e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101d790610751565b80601f016020809104026020016040519081016040528092919081815260200182805461020390610751565b80156102505780601f1061022557610100808354040283529160200191610250565b820191906000526020600020905b81548152906001019060200180831161023357829003601f168201915b5050505050905090565b6000336102688185856102cd565b60019150505b92915050565b6000336102828582856102df565b61028d858585610362565b506001949350505050565b6102a282826103c1565b5050565b6060600480546101d790610751565b6102a282826103f7565b600033610268818585610362565b6102da838383600161042d565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461035c578181101561034d57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b61035c8484848403600061042d565b50505050565b6001600160a01b03831661038c57604051634b637e8f60e11b815260006004820152602401610344565b6001600160a01b0382166103b65760405163ec442f0560e01b815260006004820152602401610344565b6102da838383610502565b6001600160a01b0382166103eb5760405163ec442f0560e01b815260006004820152602401610344565b6102a260008383610502565b6001600160a01b03821661042157604051634b637e8f60e11b815260006004820152602401610344565b6102a282600083610502565b6001600160a01b0384166104575760405163e602df0560e01b815260006004820152602401610344565b6001600160a01b03831661048157604051634a1406b160e11b815260006004820152602401610344565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561035c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104f491815260200190565b60405180910390a350505050565b6001600160a01b03831661052d578060026000828254610522919061078b565b9091555061059f9050565b6001600160a01b038316600090815260208190526040902054818110156105805760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610344565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166105bb576002805482900390556105da565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161061f91815260200190565b60405180910390a3505050565b600060208083528351808285015260005b818110156106595785810183015185820160400152820161063d565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461069157600080fd5b919050565b600080604083850312156106a957600080fd5b6106b28361067a565b946020939093013593505050565b6000806000606084860312156106d557600080fd5b6106de8461067a565b92506106ec6020850161067a565b9150604084013590509250925092565b60006020828403121561070e57600080fd5b6107178261067a565b9392505050565b6000806040838503121561073157600080fd5b61073a8361067a565b91506107486020840161067a565b90509250929050565b600181811c9082168061076557607f821691505b60208210810361078557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561026e57634e487b7160e01b600052601160045260246000fdfea2646970667358221220abef116e539327f2c5b6530f9de1449b7db17a371a8343668b2147fe8252324164736f6c63430008140033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000084595161401484a000000000000000000000000000000000000000000000000000000000000000000000447656e7800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000447454e5800000000000000000000000000000000000000000000000000000000", + "nonce": "0xed", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x4c3e1aaf7455cbd8a32561520fce248a71fe03ea460b3fd9d3f0390c6be22ecc", + "transactionType": "CREATE", + "contractName": "Token", + "contractAddress": "0x1b1291d36f810dfadd1be80daf2831a3c0fc905b", + "function": null, + "arguments": [ + "\"Gens\"", + "\"GENS\"", + "1000000000000000000000000" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "gas": "0xbe826", + "value": "0x0", + "input": "0x60806040523480156200001157600080fd5b5060405162000c9338038062000c938339810160408190526200003491620002ab565b82826003620000448382620003ad565b506004620000538282620003ad565b5050506200006833826200007160201b60201c565b505050620004a1565b6001600160a01b038216620000a15760405163ec442f0560e01b8152600060048201526024015b60405180910390fd5b620000af60008383620000b3565b5050565b6001600160a01b038316620000e2578060026000828254620000d6919062000479565b90915550620001569050565b6001600160a01b03831660009081526020819052604090205481811015620001375760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640162000098565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620001745760028054829003905562000193565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001d991815260200190565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020e57600080fd5b81516001600160401b03808211156200022b576200022b620001e6565b604051601f8301601f19908116603f01168101908282118183101715620002565762000256620001e6565b816040528381526020925086838588010111156200027357600080fd5b600091505b8382101562000297578582018301518183018401529082019062000278565b600093810190920192909252949350505050565b600080600060608486031215620002c157600080fd5b83516001600160401b0380821115620002d957600080fd5b620002e787838801620001fc565b94506020860151915080821115620002fe57600080fd5b506200030d86828701620001fc565b925050604084015190509250925092565b600181811c908216806200033357607f821691505b6020821081036200035457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003a857600081815260208120601f850160051c81016020861015620003835750805b601f850160051c820191505b81811015620003a4578281556001016200038f565b5050505b505050565b81516001600160401b03811115620003c957620003c9620001e6565b620003e181620003da84546200031e565b846200035a565b602080601f831160018114620004195760008415620004005750858301515b600019600386901b1c1916600185901b178555620003a4565b600085815260208120601f198616915b828110156200044a5788860151825594840194600190910190840162000429565b5085821015620004695787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200049b57634e487b7160e01b600052601160045260246000fd5b92915050565b6107e280620004b16000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806340c10f191161007157806340c10f191461012357806370a082311461013857806395d89b41146101615780639dc29fac14610169578063a9059cbb1461017c578063dd62ed3e1461018f57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101c8565b6040516100c3919061062c565b60405180910390f35b6100df6100da366004610696565b61025a565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f3660046106c0565b610274565b604051601281526020016100c3565b610136610131366004610696565b610298565b005b6100f36101463660046106fc565b6001600160a01b031660009081526020819052604090205490565b6100b66102a6565b610136610177366004610696565b6102b5565b6100df61018a366004610696565b6102bf565b6100f361019d36600461071e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101d790610751565b80601f016020809104026020016040519081016040528092919081815260200182805461020390610751565b80156102505780601f1061022557610100808354040283529160200191610250565b820191906000526020600020905b81548152906001019060200180831161023357829003601f168201915b5050505050905090565b6000336102688185856102cd565b60019150505b92915050565b6000336102828582856102df565b61028d858585610362565b506001949350505050565b6102a282826103c1565b5050565b6060600480546101d790610751565b6102a282826103f7565b600033610268818585610362565b6102da838383600161042d565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461035c578181101561034d57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b61035c8484848403600061042d565b50505050565b6001600160a01b03831661038c57604051634b637e8f60e11b815260006004820152602401610344565b6001600160a01b0382166103b65760405163ec442f0560e01b815260006004820152602401610344565b6102da838383610502565b6001600160a01b0382166103eb5760405163ec442f0560e01b815260006004820152602401610344565b6102a260008383610502565b6001600160a01b03821661042157604051634b637e8f60e11b815260006004820152602401610344565b6102a282600083610502565b6001600160a01b0384166104575760405163e602df0560e01b815260006004820152602401610344565b6001600160a01b03831661048157604051634a1406b160e11b815260006004820152602401610344565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561035c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104f491815260200190565b60405180910390a350505050565b6001600160a01b03831661052d578060026000828254610522919061078b565b9091555061059f9050565b6001600160a01b038316600090815260208190526040902054818110156105805760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610344565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166105bb576002805482900390556105da565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161061f91815260200190565b60405180910390a3505050565b600060208083528351808285015260005b818110156106595785810183015185820160400152820161063d565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461069157600080fd5b919050565b600080604083850312156106a957600080fd5b6106b28361067a565b946020939093013593505050565b6000806000606084860312156106d557600080fd5b6106de8461067a565b92506106ec6020850161067a565b9150604084013590509250925092565b60006020828403121561070e57600080fd5b6107178261067a565b9392505050565b6000806040838503121561073157600080fd5b61073a8361067a565b91506107486020840161067a565b90509250929050565b600181811c9082168061076557607f821691505b60208210810361078557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561026e57634e487b7160e01b600052601160045260246000fdfea2646970667358221220abef116e539327f2c5b6530f9de1449b7db17a371a8343668b2147fe8252324164736f6c63430008140033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000d3c21bcecceda1000000000000000000000000000000000000000000000000000000000000000000000447656e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000447454e5300000000000000000000000000000000000000000000000000000000", + "nonce": "0xee", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x9fe66d3f398c33164e2ab3ed5fdb86ee42a1d49481541a7e691784cab805b640", + "transactionType": "CREATE", + "contractName": "LiquidityToken", + "contractAddress": "0x73312eabe93b36569a23ea986ec07c053ae73481", + "function": null, + "arguments": null, + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "gas": "0xabcb0", + "value": "0x0", + "input": "0x608060405234801561001057600080fd5b506040518060400160405280601481526020017f4c697175696469747920506f6f6c20546f6b656e0000000000000000000000008152506040518060400160405280600381526020016213141560ea1b81525081600390816100729190610126565b50600461007f8282610126565b5050506101e5565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806100b157607f821691505b6020821081036100d157634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561012157600081815260208120601f850160051c810160208610156100fe5750805b601f850160051c820191505b8181101561011d5782815560010161010a565b5050505b505050565b81516001600160401b0381111561013f5761013f610087565b6101538161014d845461009d565b846100d7565b602080601f83116001811461018857600084156101705750858301515b600019600386901b1c1916600185901b17855561011d565b600085815260208120601f198616915b828110156101b757888601518255948401946001909101908401610198565b50858210156101d55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6107e2806101f46000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806340c10f191161007157806340c10f191461012357806370a082311461013857806395d89b41146101615780639dc29fac14610169578063a9059cbb1461017c578063dd62ed3e1461018f57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101c8565b6040516100c3919061062c565b60405180910390f35b6100df6100da366004610696565b61025a565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f3660046106c0565b610274565b604051601281526020016100c3565b610136610131366004610696565b610298565b005b6100f36101463660046106fc565b6001600160a01b031660009081526020819052604090205490565b6100b66102a6565b610136610177366004610696565b6102b5565b6100df61018a366004610696565b6102bf565b6100f361019d36600461071e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101d790610751565b80601f016020809104026020016040519081016040528092919081815260200182805461020390610751565b80156102505780601f1061022557610100808354040283529160200191610250565b820191906000526020600020905b81548152906001019060200180831161023357829003601f168201915b5050505050905090565b6000336102688185856102cd565b60019150505b92915050565b6000336102828582856102df565b61028d858585610362565b506001949350505050565b6102a282826103c1565b5050565b6060600480546101d790610751565b6102a282826103f7565b600033610268818585610362565b6102da838383600161042d565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461035c578181101561034d57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b61035c8484848403600061042d565b50505050565b6001600160a01b03831661038c57604051634b637e8f60e11b815260006004820152602401610344565b6001600160a01b0382166103b65760405163ec442f0560e01b815260006004820152602401610344565b6102da838383610502565b6001600160a01b0382166103eb5760405163ec442f0560e01b815260006004820152602401610344565b6102a260008383610502565b6001600160a01b03821661042157604051634b637e8f60e11b815260006004820152602401610344565b6102a282600083610502565b6001600160a01b0384166104575760405163e602df0560e01b815260006004820152602401610344565b6001600160a01b03831661048157604051634a1406b160e11b815260006004820152602401610344565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561035c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104f491815260200190565b60405180910390a350505050565b6001600160a01b03831661052d578060026000828254610522919061078b565b9091555061059f9050565b6001600160a01b038316600090815260208190526040902054818110156105805760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610344565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166105bb576002805482900390556105da565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161061f91815260200190565b60405180910390a3505050565b600060208083528351808285015260005b818110156106595785810183015185820160400152820161063d565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461069157600080fd5b919050565b600080604083850312156106a957600080fd5b6106b28361067a565b946020939093013593505050565b6000806000606084860312156106d557600080fd5b6106de8461067a565b92506106ec6020850161067a565b9150604084013590509250925092565b60006020828403121561070e57600080fd5b6107178261067a565b9392505050565b6000806040838503121561073157600080fd5b61073a8361067a565b91506107486020840161067a565b90509250929050565b600181811c9082168061076557607f821691505b60208210810361078557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561026e57634e487b7160e01b600052601160045260246000fdfea264697066735822122049dc43d1cee50c3efc79b352e96f6c1d287239e9c804c9f16dd825440d73917d64736f6c63430008140033", + "nonce": "0xef", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x815bdbc3af5acb6e6c4445ecdc8768699b62f4e06e78bb59c2cce60e86d79af3", + "transactionType": "CREATE", + "contractName": "LiquidityPoolFactory", + "contractAddress": "0x1edface3a9ddca2dc09e69c76ef7449943486f7e", + "function": null, + "arguments": [ + "0x73312EABE93B36569a23Ea986Ec07c053aE73481", + "0x3964D0011EB003488Ab59B1ce0C235baA3998bdd" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "gas": "0x2b25f0", + "value": "0x0", + "input": "0x608060405234801561001057600080fd5b5060405161261838038061261883398101604081905261002f9161013f565b60016000908155600480546001600160a01b0319166001600160a01b03851617905561005b908261008e565b506100867fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758261008e565b505050610172565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101195760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a450600161011d565b5060005b92915050565b80516001600160a01b038116811461013a57600080fd5b919050565b6000806040838503121561015257600080fd5b61015b83610123565b915061016960208401610123565b90509250929050565b612497806101816000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063531aa03e1161009757806393c907b41161006657806393c907b414610293578063a217fddf146102a6578063d547741f146102ae578063efde4e64146102c157600080fd5b8063531aa03e1461021057806365c940e51461024457806375b238fc1461025957806391d148541461028057600080fd5b806336568abe116100d357806336568abe1461019f5780633fa1e0c8146101b257806341d1de97146101ea57806343cd8f7e146101fd57600080fd5b806301ffc9a714610105578063179671831461012d578063248a9ca3146101585780632f2ff15d1461018a575b600080fd5b610118610113366004610964565b6102c9565b60405190151581526020015b60405180910390f35b61014061013b366004610995565b610300565b6040516001600160a01b039091168152602001610124565b61017c610166366004610995565b6000908152600160208190526040909120015490565b604051908152602001610124565b61019d6101983660046109ca565b610330565b005b61019d6101ad3660046109ca565b61035c565b6101406101c03660046109f6565b6001600160a01b039182166000908152600260209081526040808320938516835292905220541690565b6101406101f8366004610995565b610394565b600454610140906001600160a01b031681565b61014061021e3660046109f6565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b61024c6103be565b6040516101249190610a20565b61017c7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b61011861028e3660046109ca565b610420565b6101406102a1366004610a6d565b61044b565b61017c600081565b61019d6102bc3660046109ca565b6107d7565b60035461017c565b60006001600160e01b03198216637965db0b60e01b14806102fa57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006003828154811061031557610315610ab8565b6000918252602090912001546001600160a01b031692915050565b6000828152600160208190526040909120015461034c816107fd565b610356838361080a565b50505050565b6001600160a01b03811633146103855760405163334bd91960e11b815260040160405180910390fd5b61038f8282610883565b505050565b600381815481106103a457600080fd5b6000918252602090912001546001600160a01b0316905081565b6060600380548060200260200160405190810160405280929190818152602001828054801561041657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116103f8575b5050505050905090565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006104556108f0565b6001600160a01b0385161580159061047557506001600160a01b03841615155b6104c65760405162461bcd60e51b815260206004820181905260248201527f466163746f72793a20696e76616c696420746f6b656e2061646472657373657360448201526064015b60405180910390fd5b836001600160a01b0316856001600160a01b0316036105325760405162461bcd60e51b815260206004820152602260248201527f466163746f72793a206964656e746963616c20746f6b656e2061646472657373604482015261657360f01b60648201526084016104bd565b6001600160a01b03858116600090815260026020908152604080832088851684529091529020541615801561058c57506001600160a01b038481166000908152600260209081526040808320898516845290915290205416155b6105d85760405162461bcd60e51b815260206004820152601c60248201527f466163746f72793a20706f6f6c20616c7265616479206578697374730000000060448201526064016104bd565b6106027fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610420565b61064e5760405162461bcd60e51b815260206004820152601c60248201527f466163746f72793a2063616c6c6572206973206e6f742061646d696e0000000060448201526064016104bd565b600060405161065c90610957565b604051809103906000f080158015610678573d6000803e3d6000fd5b50600480546040516325b1b7b960e11b81526001600160a01b038a8116938201939093528883166024820152908216604482015260648101869052600a608482015286821660a4820152919250821690634b636f729060c401600060405180830381600087803b1580156106eb57600080fd5b505af11580156106ff573d6000803e3d6000fd5b505050506001600160a01b0386811660008181526002602081815260408084208b871680865290835281852080549789166001600160a01b03199889168117909155938352818520868652835281852080548816851790556003805460018101825595527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90940180549096168317909555935190815290927f9c5d829b9b23efc461f9aeef91979ec04bb903feb3bee4f26d22114abfc7335b910160405180910390a390506107cf6001600055565b949350505050565b600082815260016020819052604090912001546107f3816107fd565b6103568383610883565b610807813361091a565b50565b60006108168383610420565b61087b5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016102fa565b5060006102fa565b600061088f8383610420565b1561087b5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102fa565b60026000540361091357604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b6109248282610420565b6109535760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016104bd565b5050565b61199380610acf83390190565b60006020828403121561097657600080fd5b81356001600160e01b03198116811461098e57600080fd5b9392505050565b6000602082840312156109a757600080fd5b5035919050565b80356001600160a01b03811681146109c557600080fd5b919050565b600080604083850312156109dd57600080fd5b823591506109ed602084016109ae565b90509250929050565b60008060408385031215610a0957600080fd5b610a12836109ae565b91506109ed602084016109ae565b6020808252825182820181905260009190848201906040850190845b81811015610a615783516001600160a01b031683529284019291840191600101610a3c565b50909695505050505050565b60008060008060808587031215610a8357600080fd5b610a8c856109ae565b9350610a9a602086016109ae565b9250610aa8604086016109ae565b9396929550929360600135925050565b634e487b7160e01b600052603260045260246000fdfe608060405234801561001057600080fd5b50600160005561196e806100256000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80635f64b55b116100b85780639f1d0f591161007c5780639f1d0f59146102b9578063a217fddf146102cc578063aa0b5988146102d4578063c1f1b1b5146102e7578063d547741f1461030d578063f140a35a1461032057600080fd5b80635f64b55b1461024657806375b238fc1461025957806391d14854146102805780639c8f9f23146102935780639cd441da146102a657600080fd5b80632f2ff15d116100ff5780632f2ff15d146101e557806336568abe146101fa57806343cd8f7e1461020d578063449e815d146102205780634b636f721461023357600080fd5b806301ffc9a71461013c5780630902f1ac146101645780630fc63d101461017f578063248a9ca3146101aa57806326232a2e146101dc575b600080fd5b61014f61014a36600461171d565b610333565b60405190151581526020015b60405180910390f35b6005546006546040805192835260208301919091520161015b565b600254610192906001600160a01b031681565b6040516001600160a01b03909116815260200161015b565b6101ce6101b8366004611747565b6000908152600160208190526040909120015490565b60405190815260200161015b565b6101ce60075481565b6101f86101f3366004611777565b61036a565b005b6101f8610208366004611777565b610396565b600454610192906001600160a01b031681565b6101ce61022e3660046117a3565b6103ce565b6101f86102413660046117cd565b6103e1565b600354610192906001600160a01b031681565b6101ce7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b61014f61028e366004611777565b610639565b6101f86102a1366004611747565b610664565b6101f86102b4366004611833565b610a95565b6101f86102c7366004611855565b610ef3565b6101ce600081565b6101f86102e2366004611747565b611303565b600254600354604080516001600160a01b0393841681529290911660208301520161015b565b6101f861031b366004611777565b611387565b6101ce61032e366004611777565b6113ad565b60006001600160e01b03198216637965db0b60e01b148061036457506301ffc9a760e01b6001600160e01b03198316145b92915050565b600082815260016020819052604090912001546103868161144f565b6103908383611459565b50505050565b6001600160a01b03811633146103bf5760405163334bd91960e11b815260040160405180910390fd5b6103c982826114d2565b505050565b60006103da82846113ad565b9392505050565b6103e961153f565b6001600160a01b0386161580159061040957506001600160a01b03851615155b61045a5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420746f6b656e2061646472657373657300000000000000000060448201526064015b60405180910390fd5b846001600160a01b0316866001600160a01b0316036104bb5760405162461bcd60e51b815260206004820152601960248201527f4964656e746963616c20746f6b656e20616464726573736573000000000000006044820152606401610451565b6001600160a01b0384166105115760405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964206c697175696469747920746f6b656e2061646472657373006044820152606401610451565b600083118015610522575061271083105b6105655760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420706c6174666f726d2066656560601b6044820152606401610451565b600082116105b55760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964206d696e696d756d206c6971756964697479000000000000006044820152606401610451565b600280546001600160a01b038089166001600160a01b031992831617909255600380548884169083161790556004805492871692909116919091179055600783905560088290556106267fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177582611459565b506106316001600055565b505050505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61066c61153f565b600081116106bc5760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206c697175696469747920616d6f756e7400000000000000006044820152606401610451565b6000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610711573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107359190611888565b60055461074290846118b7565b61074c91906118ce565b90506000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c79190611888565b6006546107d490856118b7565b6107de91906118ce565b90506000821180156107f05750600081115b61083c5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c6964207769746864726177616c20616d6f756e74730000000000006044820152606401610451565b60048054604051632770a7eb60e21b81523392810192909252602482018590526001600160a01b031690639dc29fac90604401600060405180830381600087803b15801561088957600080fd5b505af115801561089d573d6000803e3d6000fd5b505060025460405163a9059cbb60e01b8152336004820152602481018690526001600160a01b03909116925063a9059cbb91506044016020604051808303816000875af11580156108f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091691906118f0565b61095e5760405162461bcd60e51b8152602060048201526019602482015278151c985b9cd9995c881bd9881d1bdad95b904819985a5b1959603a1b6044820152606401610451565b60035460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156109af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d391906118f0565b610a1b5760405162461bcd60e51b8152602060048201526019602482015278151c985b9cd9995c881bd9881d1bdad95b908819985a5b1959603a1b6044820152606401610451565b8160056000828254610a2d9190611912565b925050819055508060066000828254610a469190611912565b9091555050604080518381526020810183905233917f96cd817c6329656790ef8fba7675405193677d39619571282f5e21f3a98cd059910160405180910390a25050610a926001600055565b50565b610a9d61153f565b600082118015610aad5750600081115b610aeb5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420616d6f756e747360881b6044820152606401610451565b6002546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6691906118f0565b610bae5760405162461bcd60e51b8152602060048201526019602482015278151c985b9cd9995c881bd9881d1bdad95b904819985a5b1959603a1b6044820152606401610451565b6003546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2991906118f0565b610c715760405162461bcd60e51b8152602060048201526019602482015278151c985b9cd9995c881bd9881d1bdad95b908819985a5b1959603a1b6044820152606401610451565b6000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cea9190611888565b600003610db757610cfb8383611569565b905060008111610d4d5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e74206c6971756964697479206d696e7465640000006044820152606401610451565b600480546040516340c10f1960e01b81523392810192909252602482018390526001600160a01b0316906340c10f1990604401600060405180830381600087803b158015610d9a57600080fd5b505af1158015610dae573d6000803e3d6000fd5b50505050610e79565b610dc1838361158b565b905060008111610e135760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e74206c6971756964697479206d696e7465640000006044820152606401610451565b600480546040516340c10f1960e01b81523392810192909252602482018390526001600160a01b0316906340c10f1990604401600060405180830381600087803b158015610e6057600080fd5b505af1158015610e74573d6000803e3d6000fd5b505050505b8260056000828254610e8b9190611925565b925050819055508160066000828254610ea49190611925565b9091555050604080518481526020810184905233917fac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee45910160405180910390a250610eef6001600055565b5050565b610efb61153f565b6002546001600160a01b0384811691161480610f2457506003546001600160a01b038481169116145b610f685760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401610451565b60008211610faf5760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081a5b9c1d5d08185b5bdd5b9d60621b6044820152606401610451565b6002546000906001600160a01b03858116911614610fd8576002546001600160a01b0316610fe5565b6003546001600160a01b03165b90506000610ff384866113ad565b9050828110156110455760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e74206f757470757420616d6f756e740000000000006044820152606401610451565b6040516323b872dd60e01b8152336004820152306024820152604481018590526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015611098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bc91906118f0565b6111085760405162461bcd60e51b815260206004820152601a60248201527f5472616e73666572206f6620746f6b656e496e206661696c65640000000000006044820152606401610451565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611155573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117991906118f0565b6111c55760405162461bcd60e51b815260206004820152601b60248201527f5472616e73666572206f6620746f6b656e4f7574206661696c656400000000006044820152606401610451565b6002546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561120d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112319190611888565b6005556003546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561127c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190611888565b600655604080516001600160a01b0387811682526020820187905284168183015260608101839052905133917f5380cf97d8f645d3c4896da60c053458dca03a3a31cec642ac80e1ddf0d8d02a919081900360800190a250506103c96001600055565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561132d8161144f565b60008211801561133e575061271082105b6113815760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420706c6174666f726d2066656560601b6044820152606401610451565b50600755565b600082815260016020819052604090912001546113a38161144f565b61039083836114d2565b60025460009081906001600160a01b038481169116146113cf576006546113d3565b6005545b6002549091506000906001600160a01b038581169116146113f6576005546113fa565b6006545b905060006127106007546127106114119190611912565b61141b90886118b7565b61142591906118ce565b90506114318184611925565b61143b83836118b7565b61144591906118ce565b9695505050505050565b610a92813361165e565b60006114658383610639565b6114ca5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610364565b506000610364565b60006114de8383610639565b156114ca5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610364565b60026000540361156257604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b60085460009061158161157c84866118b7565b611697565b6103da9190611912565b60048054604080516318160ddd60e01b8152905160009384936001600160a01b0316926318160ddd92818301926020928290030181865afa1580156115d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f89190611888565b9050801561163c576005546116379061161183876118b7565b61161b91906118ce565b60065461162884876118b7565b61163291906118ce565b611707565b611656565b60085461164c61157c85876118b7565b6116569190611912565b949350505050565b6116688282610639565b610eef5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610451565b600060038211156116f857508060006116b16002836118ce565b6116bc906001611925565b90505b818110156116f2579050806002816116d781866118ce565b6116e19190611925565b6116eb91906118ce565b90506116bf565b50919050565b8115611702575060015b919050565b600081831061171657816103da565b5090919050565b60006020828403121561172f57600080fd5b81356001600160e01b0319811681146103da57600080fd5b60006020828403121561175957600080fd5b5035919050565b80356001600160a01b038116811461170257600080fd5b6000806040838503121561178a57600080fd5b8235915061179a60208401611760565b90509250929050565b600080604083850312156117b657600080fd5b6117bf83611760565b946020939093013593505050565b60008060008060008060c087890312156117e657600080fd5b6117ef87611760565b95506117fd60208801611760565b945061180b60408801611760565b9350606087013592506080870135915061182760a08801611760565b90509295509295509295565b6000806040838503121561184657600080fd5b50508035926020909101359150565b60008060006060848603121561186a57600080fd5b61187384611760565b95602085013595506040909401359392505050565b60006020828403121561189a57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610364576103646118a1565b6000826118eb57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561190257600080fd5b815180151581146103da57600080fd5b81810381811115610364576103646118a1565b80820180821115610364576103646118a156fea2646970667358221220a9c559f9a9b8149d8201eab0250ffecd35c73de717669a16e36a7816f2cf870664736f6c63430008140033a2646970667358221220b1ae913848a01339afbc3c9afdbb273ad2fd43daeabed459d3ce5fd9a10fba1864736f6c6343000814003300000000000000000000000073312eabe93b36569a23ea986ec07c053ae734810000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "nonce": "0xf0", + "chainId": "0x13882" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x3aca757df01ecfba0fc7f12d36f2320f4fd75e58cb0f23510210d335c97cf487", + "transactionType": "CALL", + "contractName": "LiquidityPoolFactory", + "contractAddress": "0x1edface3a9ddca2dc09e69c76ef7449943486f7e", + "function": "createPool(address,address,address,uint256)", + "arguments": [ + "0x366a41534f7Aa36C4169B35E28eF6b6501f676dE", + "0x1B1291D36F810DFADd1be80Daf2831A3C0fC905B", + "0x3964D0011EB003488Ab59B1ce0C235baA3998bdd", + "30" + ], + "transaction": { + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x1edface3a9ddca2dc09e69c76ef7449943486f7e", + "gas": "0x24164d", + "value": "0x0", + "input": "0x93c907b4000000000000000000000000366a41534f7aa36c4169b35e28ef6b6501f676de0000000000000000000000001b1291d36f810dfadd1be80daf2831a3c0fc905b0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd000000000000000000000000000000000000000000000000000000000000001e", + "nonce": "0xf1", + "chainId": "0x13882" + }, + "additionalContracts": [ + { + "transactionType": "CREATE", + "address": "0xd51a8175247d27953204c3df1715c1a4d54e7419", + "initCode": "0x608060405234801561001057600080fd5b50600160005561196e806100256000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80635f64b55b116100b85780639f1d0f591161007c5780639f1d0f59146102b9578063a217fddf146102cc578063aa0b5988146102d4578063c1f1b1b5146102e7578063d547741f1461030d578063f140a35a1461032057600080fd5b80635f64b55b1461024657806375b238fc1461025957806391d14854146102805780639c8f9f23146102935780639cd441da146102a657600080fd5b80632f2ff15d116100ff5780632f2ff15d146101e557806336568abe146101fa57806343cd8f7e1461020d578063449e815d146102205780634b636f721461023357600080fd5b806301ffc9a71461013c5780630902f1ac146101645780630fc63d101461017f578063248a9ca3146101aa57806326232a2e146101dc575b600080fd5b61014f61014a36600461171d565b610333565b60405190151581526020015b60405180910390f35b6005546006546040805192835260208301919091520161015b565b600254610192906001600160a01b031681565b6040516001600160a01b03909116815260200161015b565b6101ce6101b8366004611747565b6000908152600160208190526040909120015490565b60405190815260200161015b565b6101ce60075481565b6101f86101f3366004611777565b61036a565b005b6101f8610208366004611777565b610396565b600454610192906001600160a01b031681565b6101ce61022e3660046117a3565b6103ce565b6101f86102413660046117cd565b6103e1565b600354610192906001600160a01b031681565b6101ce7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b61014f61028e366004611777565b610639565b6101f86102a1366004611747565b610664565b6101f86102b4366004611833565b610a95565b6101f86102c7366004611855565b610ef3565b6101ce600081565b6101f86102e2366004611747565b611303565b600254600354604080516001600160a01b0393841681529290911660208301520161015b565b6101f861031b366004611777565b611387565b6101ce61032e366004611777565b6113ad565b60006001600160e01b03198216637965db0b60e01b148061036457506301ffc9a760e01b6001600160e01b03198316145b92915050565b600082815260016020819052604090912001546103868161144f565b6103908383611459565b50505050565b6001600160a01b03811633146103bf5760405163334bd91960e11b815260040160405180910390fd5b6103c982826114d2565b505050565b60006103da82846113ad565b9392505050565b6103e961153f565b6001600160a01b0386161580159061040957506001600160a01b03851615155b61045a5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420746f6b656e2061646472657373657300000000000000000060448201526064015b60405180910390fd5b846001600160a01b0316866001600160a01b0316036104bb5760405162461bcd60e51b815260206004820152601960248201527f4964656e746963616c20746f6b656e20616464726573736573000000000000006044820152606401610451565b6001600160a01b0384166105115760405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964206c697175696469747920746f6b656e2061646472657373006044820152606401610451565b600083118015610522575061271083105b6105655760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420706c6174666f726d2066656560601b6044820152606401610451565b600082116105b55760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964206d696e696d756d206c6971756964697479000000000000006044820152606401610451565b600280546001600160a01b038089166001600160a01b031992831617909255600380548884169083161790556004805492871692909116919091179055600783905560088290556106267fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177582611459565b506106316001600055565b505050505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61066c61153f565b600081116106bc5760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206c697175696469747920616d6f756e7400000000000000006044820152606401610451565b6000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610711573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107359190611888565b60055461074290846118b7565b61074c91906118ce565b90506000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c79190611888565b6006546107d490856118b7565b6107de91906118ce565b90506000821180156107f05750600081115b61083c5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c6964207769746864726177616c20616d6f756e74730000000000006044820152606401610451565b60048054604051632770a7eb60e21b81523392810192909252602482018590526001600160a01b031690639dc29fac90604401600060405180830381600087803b15801561088957600080fd5b505af115801561089d573d6000803e3d6000fd5b505060025460405163a9059cbb60e01b8152336004820152602481018690526001600160a01b03909116925063a9059cbb91506044016020604051808303816000875af11580156108f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091691906118f0565b61095e5760405162461bcd60e51b8152602060048201526019602482015278151c985b9cd9995c881bd9881d1bdad95b904819985a5b1959603a1b6044820152606401610451565b60035460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156109af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d391906118f0565b610a1b5760405162461bcd60e51b8152602060048201526019602482015278151c985b9cd9995c881bd9881d1bdad95b908819985a5b1959603a1b6044820152606401610451565b8160056000828254610a2d9190611912565b925050819055508060066000828254610a469190611912565b9091555050604080518381526020810183905233917f96cd817c6329656790ef8fba7675405193677d39619571282f5e21f3a98cd059910160405180910390a25050610a926001600055565b50565b610a9d61153f565b600082118015610aad5750600081115b610aeb5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420616d6f756e747360881b6044820152606401610451565b6002546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6691906118f0565b610bae5760405162461bcd60e51b8152602060048201526019602482015278151c985b9cd9995c881bd9881d1bdad95b904819985a5b1959603a1b6044820152606401610451565b6003546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2991906118f0565b610c715760405162461bcd60e51b8152602060048201526019602482015278151c985b9cd9995c881bd9881d1bdad95b908819985a5b1959603a1b6044820152606401610451565b6000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cea9190611888565b600003610db757610cfb8383611569565b905060008111610d4d5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e74206c6971756964697479206d696e7465640000006044820152606401610451565b600480546040516340c10f1960e01b81523392810192909252602482018390526001600160a01b0316906340c10f1990604401600060405180830381600087803b158015610d9a57600080fd5b505af1158015610dae573d6000803e3d6000fd5b50505050610e79565b610dc1838361158b565b905060008111610e135760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e74206c6971756964697479206d696e7465640000006044820152606401610451565b600480546040516340c10f1960e01b81523392810192909252602482018390526001600160a01b0316906340c10f1990604401600060405180830381600087803b158015610e6057600080fd5b505af1158015610e74573d6000803e3d6000fd5b505050505b8260056000828254610e8b9190611925565b925050819055508160066000828254610ea49190611925565b9091555050604080518481526020810184905233917fac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee45910160405180910390a250610eef6001600055565b5050565b610efb61153f565b6002546001600160a01b0384811691161480610f2457506003546001600160a01b038481169116145b610f685760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401610451565b60008211610faf5760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081a5b9c1d5d08185b5bdd5b9d60621b6044820152606401610451565b6002546000906001600160a01b03858116911614610fd8576002546001600160a01b0316610fe5565b6003546001600160a01b03165b90506000610ff384866113ad565b9050828110156110455760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e74206f757470757420616d6f756e740000000000006044820152606401610451565b6040516323b872dd60e01b8152336004820152306024820152604481018590526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015611098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bc91906118f0565b6111085760405162461bcd60e51b815260206004820152601a60248201527f5472616e73666572206f6620746f6b656e496e206661696c65640000000000006044820152606401610451565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611155573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117991906118f0565b6111c55760405162461bcd60e51b815260206004820152601b60248201527f5472616e73666572206f6620746f6b656e4f7574206661696c656400000000006044820152606401610451565b6002546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561120d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112319190611888565b6005556003546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561127c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190611888565b600655604080516001600160a01b0387811682526020820187905284168183015260608101839052905133917f5380cf97d8f645d3c4896da60c053458dca03a3a31cec642ac80e1ddf0d8d02a919081900360800190a250506103c96001600055565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561132d8161144f565b60008211801561133e575061271082105b6113815760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420706c6174666f726d2066656560601b6044820152606401610451565b50600755565b600082815260016020819052604090912001546113a38161144f565b61039083836114d2565b60025460009081906001600160a01b038481169116146113cf576006546113d3565b6005545b6002549091506000906001600160a01b038581169116146113f6576005546113fa565b6006545b905060006127106007546127106114119190611912565b61141b90886118b7565b61142591906118ce565b90506114318184611925565b61143b83836118b7565b61144591906118ce565b9695505050505050565b610a92813361165e565b60006114658383610639565b6114ca5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610364565b506000610364565b60006114de8383610639565b156114ca5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610364565b60026000540361156257604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b60085460009061158161157c84866118b7565b611697565b6103da9190611912565b60048054604080516318160ddd60e01b8152905160009384936001600160a01b0316926318160ddd92818301926020928290030181865afa1580156115d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f89190611888565b9050801561163c576005546116379061161183876118b7565b61161b91906118ce565b60065461162884876118b7565b61163291906118ce565b611707565b611656565b60085461164c61157c85876118b7565b6116569190611912565b949350505050565b6116688282610639565b610eef5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610451565b600060038211156116f857508060006116b16002836118ce565b6116bc906001611925565b90505b818110156116f2579050806002816116d781866118ce565b6116e19190611925565b6116eb91906118ce565b90506116bf565b50919050565b8115611702575060015b919050565b600081831061171657816103da565b5090919050565b60006020828403121561172f57600080fd5b81356001600160e01b0319811681146103da57600080fd5b60006020828403121561175957600080fd5b5035919050565b80356001600160a01b038116811461170257600080fd5b6000806040838503121561178a57600080fd5b8235915061179a60208401611760565b90509250929050565b600080604083850312156117b657600080fd5b6117bf83611760565b946020939093013593505050565b60008060008060008060c087890312156117e657600080fd5b6117ef87611760565b95506117fd60208801611760565b945061180b60408801611760565b9350606087013592506080870135915061182760a08801611760565b90509295509295509295565b6000806040838503121561184657600080fd5b50508035926020909101359150565b60008060006060848603121561186a57600080fd5b61187384611760565b95602085013595506040909401359392505050565b60006020828403121561189a57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610364576103646118a1565b6000826118eb57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561190257600080fd5b815180151581146103da57600080fd5b81810381811115610364576103646118a1565b80820180821115610364576103646118a156fea2646970667358221220a9c559f9a9b8149d8201eab0250ffecd35c73de717669a16e36a7816f2cf870664736f6c63430008140033" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xd0152", + "logs": [ + { + "address": "0x366a41534f7aa36c4169b35e28ef6b6501f676de", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd" + ], + "data": "0x000000000000000000000000000000000000000000084595161401484a000000", + "blockHash": "0x9a67ec25df824f436d2ba52cb30c6dea75683f0b3201fcef28034832004c3cab", + "blockNumber": "0x847e40", + "transactionHash": "0x4388ad3d2d39c3cb2a309b9c35ef6570f4d0c5d6b37034b4de99cf11d9407444", + "transactionIndex": "0x2", + "logIndex": "0x8", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x00000000000000000000000009207a6efee346cb3e4a54ac18523e3715d38b3f" + ], + "data": "0x000000000000000000000000000000000000000000000000004cccc4d5a49800000000000000000000000000000000000000000000000004df34f29877dac5bc00000000000000000000000000000000000000000000012befd2e64b5aba7b27000000000000000000000000000000000000000000000004dee825d3a2362dbc00000000000000000000000000000000000000000000012bf01fb310305f1327", + "blockHash": "0x9a67ec25df824f436d2ba52cb30c6dea75683f0b3201fcef28034832004c3cab", + "blockNumber": "0x847e40", + "transactionHash": "0x4388ad3d2d39c3cb2a309b9c35ef6570f4d0c5d6b37034b4de99cf11d9407444", + "transactionIndex": "0x2", + "logIndex": "0x9", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000010008000000000000000000000000000008000000800000000000000000000100000000000000000000020000000000000000000800000000000000000080000010000200000000000000002000000000000000000000004000000000000000000000010000200000000000000000000000000000000000000800000000000000000000004000000002000000000001000000000000000000000000000000100000000020000000000000000000000000010000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x4388ad3d2d39c3cb2a309b9c35ef6570f4d0c5d6b37034b4de99cf11d9407444", + "transactionIndex": "0x2", + "blockHash": "0x9a67ec25df824f436d2ba52cb30c6dea75683f0b3201fcef28034832004c3cab", + "blockNumber": "0x847e40", + "gasUsed": "0x9299f", + "effectiveGasPrice": "0x861c4680f", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": null, + "contractAddress": "0x366a41534f7aa36c4169b35e28ef6b6501f676de" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x162ae5", + "logs": [ + { + "address": "0x1b1291d36f810dfadd1be80daf2831a3c0fc905b", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd" + ], + "data": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", + "blockHash": "0x9a67ec25df824f436d2ba52cb30c6dea75683f0b3201fcef28034832004c3cab", + "blockNumber": "0x847e40", + "transactionHash": "0x4c3e1aaf7455cbd8a32561520fce248a71fe03ea460b3fd9d3f0390c6be22ecc", + "transactionIndex": "0x3", + "logIndex": "0xa", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x00000000000000000000000009207a6efee346cb3e4a54ac18523e3715d38b3f" + ], + "data": "0x000000000000000000000000000000000000000000000000004ccc60406fb800000000000000000000000000000000000000000000000004dee825d3a1acbd6b00000000000000000000000000000000000000000000012bf01fb310305f1327000000000000000000000000000000000000000000000004de9b5973613d056b00000000000000000000000000000000000000000000012bf06c7f7070cecb27", + "blockHash": "0x9a67ec25df824f436d2ba52cb30c6dea75683f0b3201fcef28034832004c3cab", + "blockNumber": "0x847e40", + "transactionHash": "0x4c3e1aaf7455cbd8a32561520fce248a71fe03ea460b3fd9d3f0390c6be22ecc", + "transactionIndex": "0x3", + "logIndex": "0xb", + "removed": false + } + ], + "logsBloom": "0x00010008000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000010008000000000000000020000000000008000000800000000000000000000100000000000000000000020000000000000000000800000000000000000080000010000000000000000000002000000000000000000000004000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000002000000000001000000000000000000000000000000100000000020000000000000000000000000010000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x4c3e1aaf7455cbd8a32561520fce248a71fe03ea460b3fd9d3f0390c6be22ecc", + "transactionIndex": "0x3", + "blockHash": "0x9a67ec25df824f436d2ba52cb30c6dea75683f0b3201fcef28034832004c3cab", + "blockNumber": "0x847e40", + "gasUsed": "0x92993", + "effectiveGasPrice": "0x861c4680f", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": null, + "contractAddress": "0x1b1291d36f810dfadd1be80daf2831a3c0fc905b" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1e6de3", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x00000000000000000000000009207a6efee346cb3e4a54ac18523e3715d38b3f" + ], + "data": "0x00000000000000000000000000000000000000000000000000453fa8e3af3000000000000000000000000000000000000000000000000004de9b597360b395ce00000000000000000000000000000000000000000000012bf06c7f7070cecb27000000000000000000000000000000000000000000000004de5619ca7d0465ce00000000000000000000000000000000000000000000012bf0b1bf19547dfb27", + "blockHash": "0x9a67ec25df824f436d2ba52cb30c6dea75683f0b3201fcef28034832004c3cab", + "blockNumber": "0x847e40", + "transactionHash": "0x9fe66d3f398c33164e2ab3ed5fdb86ee42a1d49481541a7e691784cab805b640", + "transactionIndex": "0x4", + "logIndex": "0xc", + "removed": false + } + ], + "logsBloom": "0x00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000010008000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000002000000000000000000000004000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000010000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x9fe66d3f398c33164e2ab3ed5fdb86ee42a1d49481541a7e691784cab805b640", + "transactionIndex": "0x4", + "blockHash": "0x9a67ec25df824f436d2ba52cb30c6dea75683f0b3201fcef28034832004c3cab", + "blockNumber": "0x847e40", + "gasUsed": "0x842fe", + "effectiveGasPrice": "0x861c4680f", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": null, + "contractAddress": "0x73312eabe93b36569a23ea986ec07c053ae73481" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x3fa129", + "logs": [ + { + "address": "0x1edface3a9ddca2dc09e69c76ef7449943486f7e", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd" + ], + "data": "0x", + "blockHash": "0x9a67ec25df824f436d2ba52cb30c6dea75683f0b3201fcef28034832004c3cab", + "blockNumber": "0x847e40", + "transactionHash": "0x815bdbc3af5acb6e6c4445ecdc8768699b62f4e06e78bb59c2cce60e86d79af3", + "transactionIndex": "0x5", + "logIndex": "0xd", + "removed": false + }, + { + "address": "0x1edface3a9ddca2dc09e69c76ef7449943486f7e", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd" + ], + "data": "0x", + "blockHash": "0x9a67ec25df824f436d2ba52cb30c6dea75683f0b3201fcef28034832004c3cab", + "blockNumber": "0x847e40", + "transactionHash": "0x815bdbc3af5acb6e6c4445ecdc8768699b62f4e06e78bb59c2cce60e86d79af3", + "transactionIndex": "0x5", + "logIndex": "0xe", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x00000000000000000000000009207a6efee346cb3e4a54ac18523e3715d38b3f" + ], + "data": "0x00000000000000000000000000000000000000000000000001164816446c7000000000000000000000000000000000000000000000000004de5619ca7c8878ec00000000000000000000000000000000000000000000012bf0b1bf19547dfb27000000000000000000000000000000000000000000000004dd3fd1b4381c08ec00000000000000000000000000000000000000000000012bf1c8072f98ea6b27", + "blockHash": "0x9a67ec25df824f436d2ba52cb30c6dea75683f0b3201fcef28034832004c3cab", + "blockNumber": "0x847e40", + "transactionHash": "0x815bdbc3af5acb6e6c4445ecdc8768699b62f4e06e78bb59c2cce60e86d79af3", + "transactionIndex": "0x5", + "logIndex": "0xf", + "removed": false + } + ], + "logsBloom": "0x00010004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000010008000000000000000000000000000000000000800000000020000000000100000000000000000000020800000000000000000800000000000000000880000000000000000000000000002000000000000000004000004000000000000000000000000000200000010000000000000000000000000000000000000000001000000000004000000000000000000001000000000000000000000000000100120000000020000000000000000000000000010000000000000000000000000000000000100000", + "type": "0x2", + "transactionHash": "0x815bdbc3af5acb6e6c4445ecdc8768699b62f4e06e78bb59c2cce60e86d79af3", + "transactionIndex": "0x5", + "blockHash": "0x9a67ec25df824f436d2ba52cb30c6dea75683f0b3201fcef28034832004c3cab", + "blockNumber": "0x847e40", + "gasUsed": "0x213346", + "effectiveGasPrice": "0x861c4680f", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": null, + "contractAddress": "0x1edface3a9ddca2dc09e69c76ef7449943486f7e" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x584f8d", + "logs": [ + { + "address": "0xd51a8175247d27953204c3df1715c1a4d54e7419", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0xa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x0000000000000000000000001edface3a9ddca2dc09e69c76ef7449943486f7e" + ], + "data": "0x", + "blockHash": "0x9a67ec25df824f436d2ba52cb30c6dea75683f0b3201fcef28034832004c3cab", + "blockNumber": "0x847e40", + "transactionHash": "0x3aca757df01ecfba0fc7f12d36f2320f4fd75e58cb0f23510210d335c97cf487", + "transactionIndex": "0x6", + "logIndex": "0x10", + "removed": false + }, + { + "address": "0x1edface3a9ddca2dc09e69c76ef7449943486f7e", + "topics": [ + "0x9c5d829b9b23efc461f9aeef91979ec04bb903feb3bee4f26d22114abfc7335b", + "0x000000000000000000000000366a41534f7aa36c4169b35e28ef6b6501f676de", + "0x0000000000000000000000001b1291d36f810dfadd1be80daf2831a3c0fc905b" + ], + "data": "0x000000000000000000000000d51a8175247d27953204c3df1715c1a4d54e7419", + "blockHash": "0x9a67ec25df824f436d2ba52cb30c6dea75683f0b3201fcef28034832004c3cab", + "blockNumber": "0x847e40", + "transactionHash": "0x3aca757df01ecfba0fc7f12d36f2320f4fd75e58cb0f23510210d335c97cf487", + "transactionIndex": "0x6", + "logIndex": "0x11", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000003964d0011eb003488ab59b1ce0c235baa3998bdd", + "0x00000000000000000000000009207a6efee346cb3e4a54ac18523e3715d38b3f" + ], + "data": "0x00000000000000000000000000000000000000000000000000cee0236f68a000000000000000000000000000000000000000000000000004dd3fd1b4362a07d200000000000000000000000000000000000000000000012bf1c8072f98ea6b27000000000000000000000000000000000000000000000004dc70f190c6c167d200000000000000000000000000000000000000000000012bf296e75308530b27", + "blockHash": "0x9a67ec25df824f436d2ba52cb30c6dea75683f0b3201fcef28034832004c3cab", + "blockNumber": "0x847e40", + "transactionHash": "0x3aca757df01ecfba0fc7f12d36f2320f4fd75e58cb0f23510210d335c97cf487", + "transactionIndex": "0x6", + "logIndex": "0x12", + "removed": false + } + ], + "logsBloom": "0x00112004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000010008000000000000040000400000000000000000800000000020000080000100000000000000000028000800000000000000000000000000000000000880000000000000000100000000002002000000000000004000004000000000000000000000000000220000010000000000000000000000000000010000000000001000000000004100000000000000000801000000000000000000000000000100120000000000000000000000008000000000010000000000000000100000000000000000100000", + "type": "0x2", + "transactionHash": "0x3aca757df01ecfba0fc7f12d36f2320f4fd75e58cb0f23510210d335c97cf487", + "transactionIndex": "0x6", + "blockHash": "0x9a67ec25df824f436d2ba52cb30c6dea75683f0b3201fcef28034832004c3cab", + "blockNumber": "0x847e40", + "gasUsed": "0x18ae64", + "effectiveGasPrice": "0x861c4680f", + "from": "0x3964d0011eb003488ab59b1ce0c235baa3998bdd", + "to": "0x1edface3a9ddca2dc09e69c76ef7449943486f7e", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1719266552, + "chain": 80002, + "commit": "de4b5bc" +} \ No newline at end of file diff --git a/contracts/foundry.toml b/contracts/foundry.toml index c809beb..d0c483e 100644 --- a/contracts/foundry.toml +++ b/contracts/foundry.toml @@ -1,25 +1,27 @@ -[profile.default] -src = "src" -out = "out" -libs = ["lib"] -solc = "0.8.25" -ffi = true -ast = true -build_info = true -extra_output = ["storageLayout"] -remappings = [ - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", - "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", - "@openzeppelin/foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/" - ] - -[rpc_endpoints] -sepolia = "${API_KEY_ALCHEMY_SEPOLIA}" -sepolia_infura = "${API_KEY_INFURA_SEPOLIA}" -mainnet = "${API_KEY_ALCHEMY_MAINNET}" -mainnet_infura = "${API_KEY_INFURA_MAINNET}" - -[etherscan] -polygon-amoy = { key = "${AMOY_API_KEY}", url = "https://www.oklink.com/api/explorer/v1/contract/verify/async/api/polygonAmoy" } - +[profile.default] +src = "src" +out = "out" +libs = ["lib"] +solc = "0.8.20" +ffi = true +ast = true +build_info = true +extra_output = ["storageLayout"] +gas_reports = ["*"] + +remappings = [ + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", + "@openzeppelin/foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/" + ] + +[rpc_endpoints] +sepolia = "${API_KEY_ALCHEMY_SEPOLIA}" +sepolia_infura = "${API_KEY_INFURA_SEPOLIA}" +mainnet = "${API_KEY_ALCHEMY_MAINNET}" +mainnet_infura = "${API_KEY_INFURA_MAINNET}" + +[etherscan] +polygon-amoy = { key = "${AMOY_API_KEY}", url = "https://www.oklink.com/api/explorer/v1/contract/verify/async/api/polygonAmoy" } + # See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options \ No newline at end of file diff --git a/contracts/package.json b/contracts/package.json index f18a82e..198c69a 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -1,26 +1,26 @@ -{ - "name": "dex", - "version": "1.0.0", - "description": "Decentralized Exchange", - "main": "index.js", - "license": "MIT", - "files": [ - "src/**/*.sol" - ], - "devDependencies": { - "prettier": "3.2.5", - "prettier-plugin-solidity": "1.3.1" - }, - "scripts": { - "prettier": "prettier --write --plugin=prettier-plugin-solidity 'contracts/**/*.sol'", - "lint": "prettier --list-different --plugin=prettier-plugin-solidity 'contracts/**/*.sol'", - "sub-modules": "cd ../ && git submodule update --init --recursive", - "gas-report": "forge test --gas-report", - "build": "forge build", - "test": "forge test -vvvv", - "deploy-access-manager": "forge script script/00_deployAccessManager.s.sol --rpc-url $RPC_URL --private-key $ACCOUNT_PRIVATE_KEY --broadcast --verify -vvvv" - }, - "dependencies": { - "dotenv": "16.4.5" - } -} +{ + "name": "dex", + "version": "1.0.0", + "description": "Decentralized Exchange", + "main": "index.js", + "license": "MIT", + "files": [ + "src/**/*.sol" + ], + "devDependencies": { + "prettier": "3.2.5", + "prettier-plugin-solidity": "1.3.1" + }, + "scripts": { + "prettier": "prettier --write --plugin=prettier-plugin-solidity 'contracts/**/*.sol'", + "lint": "prettier --list-different --plugin=prettier-plugin-solidity 'contracts/**/*.sol'", + "sub-modules": "cd ../ && git submodule update --init --recursive", + "gas-report": "forge test --gas-report", + "build": "forge build", + "test": "forge test -vvvv", + "deploy-access-manager": "forge script script/00_deployAccessManager.s.sol --rpc-url $RPC_URL --private-key $ACCOUNT_PRIVATE_KEY --broadcast --verify -vvvv" + }, + "dependencies": { + "dotenv": "16.4.5" + } +} diff --git a/contracts/script/00_DeployAllContracts.s.sol b/contracts/script/00_DeployAllContracts.s.sol deleted file mode 100644 index 6d27342..0000000 --- a/contracts/script/00_DeployAllContracts.s.sol +++ /dev/null @@ -1,58 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {BaseScript} from "./utils/Base.s.sol"; -import {AccessManagerHelpers} from "./utils/AccessManagerHelpers.s.sol"; -import "forge-std/console.sol"; -import "@openzeppelin/contracts/access/manager/AccessManager.sol"; -import "../src/libraries/Roles.sol"; - -import "../src/LiquidityPoolFactory.sol"; -import "../src/LiquidityPool.sol"; - -contract DeployAllContractsScript is BaseScript, AccessManagerHelpers { - /// @dev Instance of contracts - AccessManager manager; - LiquidityPoolV2 liquidityPool; - LiquidityPoolFactoryV2 liquidityPoolFactory; - - address private testRes; - bool private forTest; - - function run() public broadcast { - if (forTest) { - manager = new AccessManager(broadcaster); - console.log( - "AccessManager instance deployed at", - address(manager), - "with the next temporary super admin", - broadcaster - ); - testRes = address(manager); - } else { - manager = new AccessManager(broadcaster); - liquidityPool = new LiquidityPoolV2(); - liquidityPoolFactory = new LiquidityPoolFactoryV2(); - liquidityPoolFactory.initialize(address(liquidityPool), msg.sender); - - console.log("AccessManager instance deployed at", address(manager), "with super admin", broadcaster); - console.log("LiquidityPoolFactory instance deployed at", address(liquidityPoolFactory)); - console.log("LiquidityPool instance deployed at", address(liquidityPool)); - } - } - - function deployForTest(address _deployer) public returns (address _testRes) { - forTest = true; - broadcaster = _deployer; - run(); - _testRes = testRes; - // Reset the variables for the next test - forTest = false; - testRes = address(0); - broadcaster = address(0); - } - - // Deploy the all contracts. - // Then Restrict functions - // Then assign roles -} diff --git a/contracts/script/deploy.s.sol b/contracts/script/deploy.s.sol deleted file mode 100644 index 1683c6c..0000000 --- a/contracts/script/deploy.s.sol +++ /dev/null @@ -1,125 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "forge-std/Script.sol"; -import "../src/LiquidityPool.sol"; -import "../src/GensToken.sol"; -import "@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol"; -import "../src/LiquidityPoolFactory.sol"; - -contract DeployAndInteractWithLiquidityPool is Script { - LiquidityPoolFactory factory; - LiquidityPool liquidityPool; - GensToken tokenA; - GensToken tokenB; - AccessManagerUpgradeable accessManager; - address admin; - - function setUp() public { - admin = vm.envAddress("ADMIN_ADDRESS"); - } - - function run() public { - vm.startBroadcast(admin); - - // Deploy mock ERC20 tokens - tokenA = new GensToken(); - tokenA.initialize("Genesis", "GENX"); - tokenB = new GensToken(); - tokenB.initialize("Gens", "GENS"); - - // Mint some tokens to the admin for testing - tokenA.mint(admin, 1000 wei); - tokenB.mint(admin, 1000 wei); - - // Deploy the LiquidityPoolFactory contract - factory = new LiquidityPoolFactory(); - factory.initialize(admin); - - // Create a new liquidity pool using the factory - factory.createPool(address(tokenA), address(tokenB), admin, 30); - address poolAddress = factory.getPool(address(tokenA), address(tokenB)); - liquidityPool = LiquidityPool(poolAddress); - - vm.stopBroadcast(); - } - - function testAddLiquidity() internal { - vm.startBroadcast(admin); - - uint256 tokenAAmount = 100 wei; - uint256 tokenBAmount = 100 wei; - - // Approve tokens for the liquidity pool - tokenA.approve(address(liquidityPool), tokenAAmount); - tokenB.approve(address(liquidityPool), tokenBAmount); - - // Add liquidity - liquidityPool.addLiquidity(tokenAAmount, tokenBAmount); - - // Check the reserves - (uint256 reserveA, uint256 reserveB) = liquidityPool.getReserves(); - require(reserveA == tokenAAmount, "Reserve A mismatch"); - require(reserveB == tokenBAmount, "Reserve B mismatch"); - - vm.stopBroadcast(); - } - - function testSwap() internal { - vm.startBroadcast(admin); - - uint256 amountIn = 10 wei; - uint256 minAmountOut = 1 wei; // Lowering the minimum amount to avoid revert, should be set based on the expected output :) - - // Approve tokens for the liquidity pool - tokenA.approve(address(liquidityPool), amountIn); - - // Get reserves before swap - (uint256 reserveABefore, uint256 reserveBBefore) = liquidityPool.getReserves(); - console.log("Reserves before swap:"); - console.log("Reserve A:", reserveABefore); - console.log("Reserve B:", reserveBBefore); - - // Perform the swap - try liquidityPool.swap(address(tokenA), amountIn, minAmountOut) { - // Get reserves after swap - (uint256 reserveAAfter, uint256 reserveBAfter) = liquidityPool.getReserves(); - console.log("Reserves after swap:"); - console.log("Reserve A:", reserveAAfter); - console.log("Reserve B:", reserveBAfter); - - uint256 amountOut = liquidityPool.getPrice(address(tokenA), amountIn); - console.log("Swapped", amountIn); - console.log("Received", amountOut); - } catch Error(string memory reason) { - console.log("Swap failed:", reason); - } - - vm.stopBroadcast(); - } - - function testRemoveLiquidity() internal { - vm.startBroadcast(admin); - - // Approve liquidity tokens for the liquidity pool - uint256 liquidityTokens = 50 wei; - - // Remove liquidity - liquidityPool.removeLiquidity(liquidityTokens); - - // Check the updated reserves - (uint256 reserveA, uint256 reserveB) = liquidityPool.getReserves(); - console.log("Reserve A:", reserveA); - console.log("Reserve B:", reserveB); - - vm.stopBroadcast(); - } - - function testToUpdateFees() internal { - vm.startBroadcast(admin); - - liquidityPool.updatePlatformFee(50); - - vm.stopBroadcast(); - } -} diff --git a/contracts/script/deploy_liquidityPools.s.sol b/contracts/script/deploy_liquidityPools.s.sol new file mode 100644 index 0000000..3d99e68 --- /dev/null +++ b/contracts/script/deploy_liquidityPools.s.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import "forge-std/Script.sol"; +import "../src/token/Token.sol"; +import "../src/token/LiquidityPoolToken.sol"; +import "../src/LiquidityPool.sol"; +import "../src/LiquidityPoolFactory.sol"; + +contract DeployLiquidityPool is Script { + address admin; + + function setUp() public { + admin = vm.envAddress("ADMIN_ADDRESS"); + } + + function run() external { + vm.startBroadcast(admin); + + Token tokenA = new Token("Genx", "GENX", 10000000 * 10 ** 18); + Token tokenB = new Token("Gens", "GENS", 1000000 * 10 ** 18); + LiquidityToken liquidityToken = new LiquidityToken(); + + LiquidityPoolFactory factory = new LiquidityPoolFactory(address(liquidityToken), admin); + + address pool = factory.createPool(address(tokenA), address(tokenB), admin, 30); + console.log("Pool address: %s", pool); + + vm.stopBroadcast(); + } +} diff --git a/contracts/src/GensToken.sol b/contracts/src/GensToken.sol deleted file mode 100644 index b9570fd..0000000 --- a/contracts/src/GensToken.sol +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; - -contract GensToken is ERC20Upgradeable { - function initialize(string memory name, string memory symbol) public initializer { - __ERC20_init(name, symbol); - } - - function mint(address to, uint256 amount) external { - _mint(to, amount); - } -} diff --git a/contracts/src/LiquidityPool.sol b/contracts/src/LiquidityPool.sol index 13497bd..006c2c6 100644 --- a/contracts/src/LiquidityPool.sol +++ b/contracts/src/LiquidityPool.sol @@ -1,111 +1,157 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import "./LiquidityPoolInterfaces.sol"; -import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; - -contract LiquidityPool is Initializable, ERC20Upgradeable, ReentrancyGuardUpgradeable, OwnableUpgradeable { - address public tokenA; - address public tokenB; - uint256 private reserveA; - uint256 private reserveB; - uint256 public platformFee; - uint256 private MINIMUM_LIQUIDITY; - - event LiquidityAdded(address indexed user, uint256 amountTokenA, uint256 amountTokenB); - event LiquidityRemoved(address indexed user, uint256 amountTokenA, uint256 amountTokenB); - event Swap(address indexed user, address tokenIn, uint256 amountIn, address tokenOut, uint256 amountOut); - - function initialize( - address _tokenA, - address _tokenB, - address addressManager, - uint256 _platformFee, - uint256 _minimumLiquidity - ) public initializer { - __ERC20_init("Liquidity Pool Tokens", "LPT"); - __ReentrancyGuard_init(); - __Ownable_init(addressManager); - tokenA = _tokenA; - tokenB = _tokenB; - platformFee = _platformFee; - MINIMUM_LIQUIDITY = _minimumLiquidity; - } - - function addLiquidity(uint256 tokenAAmount, uint256 tokenBAmount) external nonReentrant { - require(tokenAAmount > 0 && tokenBAmount > 0, "Invalid amounts"); - - ERC20Upgradeable(tokenA).transferFrom(msg.sender, address(this), tokenAAmount); - ERC20Upgradeable(tokenB).transferFrom(msg.sender, address(this), tokenBAmount); - - uint256 liquidity = calculateLiquidity(tokenAAmount, tokenBAmount); - _mint(msg.sender, liquidity); - - updateReserves(); - - emit LiquidityAdded(msg.sender, tokenAAmount, tokenBAmount); - } - - function removeLiquidity(uint256 liquidity) external nonReentrant { - require(liquidity > 0, "Invalid liquidity amount"); - - uint256 tokenAAmount = (liquidity * reserveA) / totalSupply(); - uint256 tokenBAmount = (liquidity * reserveB) / totalSupply(); - _burn(msg.sender, liquidity); - - ERC20Upgradeable(tokenA).transfer(msg.sender, tokenAAmount); - ERC20Upgradeable(tokenB).transfer(msg.sender, tokenBAmount); - - updateReserves(); - - emit LiquidityRemoved(msg.sender, tokenAAmount, tokenBAmount); - } - - function swap(address tokenIn, uint256 amountIn, uint256 minAmountOut) external nonReentrant { - require(tokenIn == tokenA || tokenIn == tokenB, "Invalid token address"); - require(amountIn > 0, "Invalid input amount"); - - address tokenOut = (tokenIn == tokenA) ? tokenB : tokenA; - uint256 amountOut = getAmountOut(amountIn, tokenIn); - - require(amountOut >= minAmountOut, "Insufficient output amount"); - - ERC20Upgradeable(tokenIn).transferFrom(msg.sender, address(this), amountIn); - ERC20Upgradeable(tokenOut).transfer(msg.sender, amountOut); - - updateReserves(); - - emit Swap(msg.sender, tokenIn, amountIn, tokenOut, amountOut); - } - - function getAmountOut(uint256 amountIn, address tokenIn) public view returns (uint256) { - uint256 reserveIn = (tokenIn == tokenA) ? reserveA : reserveB; - uint256 reserveOut = (tokenIn == tokenA) ? reserveB : reserveA; - uint256 amountInWithFee = (amountIn * (10000 - platformFee)) / 10000; - return (amountInWithFee * reserveOut) / (reserveIn + amountInWithFee); - } - - function updateReserves() private { - reserveA = ERC20Upgradeable(tokenA).balanceOf(address(this)); - reserveB = ERC20Upgradeable(tokenB).balanceOf(address(this)); - } - - function calculateLiquidity(uint256 tokenAAmount, uint256 tokenBAmount) private view returns (uint256) { - return Math.sqrt(tokenAAmount * tokenBAmount) - MINIMUM_LIQUIDITY; - } - - function getReserves() external view returns (uint256, uint256) { - return (reserveA, reserveB); - } - - function getPrice(address tokenIn, uint256 amountIn) external view returns (uint256) { - return getAmountOut(amountIn, tokenIn); - } - - function updatePlatformFee(uint256 _platformFee) external onlyOwner { - platformFee = _platformFee; - } -} +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; +import "@openzeppelin/contracts/access/AccessControl.sol"; +import "./token/Token.sol"; +import "./token/LiquidityPoolToken.sol"; + +contract LiquidityPool is ReentrancyGuard, AccessControl { + bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE"); + + Token public tokenA; + Token public tokenB; + LiquidityToken public liquidityToken; + uint256 private reserveA; + uint256 private reserveB; + uint256 public platformFee; + uint256 private MINIMUM_LIQUIDITY; + + event LiquidityAdded(address indexed user, uint256 amountTokenA, uint256 amountTokenB); + event LiquidityRemoved(address indexed user, uint256 amountTokenA, uint256 amountTokenB); + event Swap(address indexed user, address tokenIn, uint256 amountIn, address tokenOut, uint256 amountOut); + + function initialize( + address _tokenA, + address _tokenB, + address _liquidityToken, + uint256 _platformFee, + uint256 _minimumLiquidity, + address _admin + ) external nonReentrant { + require(_tokenA != address(0) && _tokenB != address(0), "Invalid token addresses"); + require(_tokenA != _tokenB, "Identical token addresses"); + require(_liquidityToken != address(0), "Invalid liquidity token address"); + require(_platformFee > 0 && _platformFee < 10000, "Invalid platform fee"); + require(_minimumLiquidity > 0, "Invalid minimum liquidity"); + + tokenA = Token(_tokenA); + tokenB = Token(_tokenB); + liquidityToken = LiquidityToken(_liquidityToken); + platformFee = _platformFee; + MINIMUM_LIQUIDITY = _minimumLiquidity; + _grantRole(ADMIN_ROLE, _admin); + } + + function addLiquidity(uint256 tokenAAmount, uint256 tokenBAmount) external nonReentrant { + require(tokenAAmount > 0 && tokenBAmount > 0, "Invalid amounts"); + + require(tokenA.transferFrom(msg.sender, address(this), tokenAAmount), "Transfer of tokenA failed"); + require(tokenB.transferFrom(msg.sender, address(this), tokenBAmount), "Transfer of tokenB failed"); + + uint256 liquidity; + if (liquidityToken.totalSupply() == 0) { + liquidity = calculateInitialLiquidity(tokenAAmount, tokenBAmount); + require(liquidity > 0, "Insufficient liquidity minted"); + liquidityToken.mint(msg.sender, liquidity); + } else { + liquidity = calculateLiquidity(tokenAAmount, tokenBAmount); + require(liquidity > 0, "Insufficient liquidity minted"); + liquidityToken.mint(msg.sender, liquidity); + } + + reserveA += tokenAAmount; + reserveB += tokenBAmount; + + emit LiquidityAdded(msg.sender, tokenAAmount, tokenBAmount); + } + + function removeLiquidity(uint256 liquidity) external nonReentrant { + require(liquidity > 0, "Invalid liquidity amount"); + + uint256 tokenAAmount = (liquidity * reserveA) / liquidityToken.totalSupply(); + uint256 tokenBAmount = (liquidity * reserveB) / liquidityToken.totalSupply(); + require(tokenAAmount > 0 && tokenBAmount > 0, "Invalid withdrawal amounts"); + + liquidityToken.burn(msg.sender, liquidity); + + require(tokenA.transfer(msg.sender, tokenAAmount), "Transfer of tokenA failed"); + require(tokenB.transfer(msg.sender, tokenBAmount), "Transfer of tokenB failed"); + + reserveA -= tokenAAmount; + reserveB -= tokenBAmount; + + emit LiquidityRemoved(msg.sender, tokenAAmount, tokenBAmount); + } + + function swap(address tokenIn, uint256 amountIn, uint256 minAmountOut) external nonReentrant { + require(tokenIn == address(tokenA) || tokenIn == address(tokenB), "Invalid token address"); + require(amountIn > 0, "Invalid input amount"); + + address tokenOut = (tokenIn == address(tokenA)) ? address(tokenB) : address(tokenA); + uint256 amountOut = getAmountOut(amountIn, tokenIn); + + require(amountOut >= minAmountOut, "Insufficient output amount"); + + require(Token(tokenIn).transferFrom(msg.sender, address(this), amountIn), "Transfer of tokenIn failed"); + require(Token(tokenOut).transfer(msg.sender, amountOut), "Transfer of tokenOut failed"); + + reserveA = tokenA.balanceOf(address(this)); + reserveB = tokenB.balanceOf(address(this)); + + emit Swap(msg.sender, tokenIn, amountIn, tokenOut, amountOut); + } + + function getAmountOut(uint256 amountIn, address tokenIn) public view returns (uint256) { + uint256 reserveIn = (tokenIn == address(tokenA)) ? reserveA : reserveB; + uint256 reserveOut = (tokenIn == address(tokenA)) ? reserveB : reserveA; + uint256 amountInWithFee = (amountIn * (10000 - platformFee)) / 10000; + return (amountInWithFee * reserveOut) / (reserveIn + amountInWithFee); + } + + function calculateInitialLiquidity(uint256 tokenAAmount, uint256 tokenBAmount) private view returns (uint256) { + return sqrt(tokenAAmount * tokenBAmount) - MINIMUM_LIQUIDITY; + } + + function calculateLiquidity(uint256 tokenAAmount, uint256 tokenBAmount) private view returns (uint256) { + uint256 totalSupply_ = liquidityToken.totalSupply(); + return + totalSupply_ == 0 + ? sqrt(tokenAAmount * tokenBAmount) - MINIMUM_LIQUIDITY + : min((tokenAAmount * totalSupply_) / reserveA, (tokenBAmount * totalSupply_) / reserveB); + } + + function sqrt(uint y) internal pure returns (uint z) { + if (y > 3) { + z = y; + uint x = y / 2 + 1; + while (x < z) { + z = x; + x = (y / x + x) / 2; + } + } else if (y != 0) { + z = 1; + } + } + + function min(uint256 a, uint256 b) private pure returns (uint256) { + return a < b ? a : b; + } + + function getReserves() external view returns (uint256, uint256) { + return (reserveA, reserveB); + } + + function getPrice(address tokenIn, uint256 amountIn) external view returns (uint256) { + return getAmountOut(amountIn, tokenIn); + } + + function updatePlatformFee(uint256 _platformFee) external onlyRole(ADMIN_ROLE) { + require(_platformFee > 0 && _platformFee < 10000, "Invalid platform fee"); + platformFee = _platformFee; + } + + function getPair() external view returns (address, address) { + return (address(tokenA), address(tokenB)); + } +} diff --git a/contracts/src/LiquidityPoolFactory.sol b/contracts/src/LiquidityPoolFactory.sol index bfe87e8..134f66b 100644 --- a/contracts/src/LiquidityPoolFactory.sol +++ b/contracts/src/LiquidityPoolFactory.sol @@ -1,65 +1,65 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import "./LiquidityPool.sol"; - -contract LiquidityPoolFactory is Initializable, ReentrancyGuardUpgradeable, OwnableUpgradeable { - // Event emitted when a new pool is created - event PoolCreated(address indexed tokenA, address indexed tokenB, address poolAddress); - - // Mapping from tokens to pool address - mapping(address => mapping(address => address)) public getPool; - - // All address of pools - address[] public allPools; - - /** Initializer function (replaces constructor by OpenZeppelin standards) */ - function initialize(address owner) public initializer { - __Ownable_init(owner); - __ReentrancyGuard_init(); - } - - /** - * @notice Function to create a new liquidity pool - * @param tokenA Address of the first token - * @param tokenB Address of the second token - * @param platformFee Platform fee in basis points - */ - function createPool( - address tokenA, - address tokenB, - address owner, - uint256 platformFee - ) external onlyOwner nonReentrant returns (address pool) { - require(tokenA != address(0) && tokenB != address(0), "Factory: invalid token addresses"); - require(tokenA != tokenB, "Factory: identical token addresses"); - require( - getPool[tokenA][tokenB] == address(0) && getPool[tokenB][tokenA] == address(0), - "Factory: pool already exists" - ); - - // Deploy a new LiquidityPool contract - pool = address(new LiquidityPool()); - - // Call Initialize methods of LiquidityPool Contract - LiquidityPool(pool).initialize(tokenA, tokenB, owner, platformFee, 10); - - // Store the pool address in the mapping and array - getPool[tokenA][tokenB] = pool; - getPool[tokenB][tokenA] = pool; - allPools.push(pool); - - emit PoolCreated(tokenA, tokenB, pool); - } - - /** - * @notice Function to get the number of all pools - * @return allPools.length Number of all pools - */ - function allPoolsLength() external view returns (uint256) { - return allPools.length; - } -} +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/access/AccessControl.sol"; +import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; +import "./LiquidityPool.sol"; +import "./token/LiquidityPoolToken.sol"; + +contract LiquidityPoolFactory is ReentrancyGuard, AccessControl { + bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE"); + + event PoolCreated(address indexed tokenA, address indexed tokenB, address poolAddress); + + mapping(address => mapping(address => address)) public getPool; + address[] public allPools; + + LiquidityToken public liquidityToken; + + constructor(address _liquidityToken, address admin) { + liquidityToken = LiquidityToken(_liquidityToken); + _grantRole(DEFAULT_ADMIN_ROLE, admin); + _grantRole(ADMIN_ROLE, admin); + } + + function createPool( + address tokenA, + address tokenB, + address poolOwner, + uint256 platformFee + ) external nonReentrant returns (address pool) { + require(tokenA != address(0) && tokenB != address(0), "Factory: invalid token addresses"); + require(tokenA != tokenB, "Factory: identical token addresses"); + require( + getPool[tokenA][tokenB] == address(0) && getPool[tokenB][tokenA] == address(0), + "Factory: pool already exists" + ); + require(hasRole(ADMIN_ROLE, msg.sender), "Factory: caller is not admin"); + + LiquidityPool liquidityPool = new LiquidityPool(); + liquidityPool.initialize(tokenA, tokenB, address(liquidityToken), platformFee, 10, poolOwner); + + getPool[tokenA][tokenB] = address(liquidityPool); + getPool[tokenB][tokenA] = address(liquidityPool); + allPools.push(address(liquidityPool)); + + emit PoolCreated(tokenA, tokenB, address(liquidityPool)); + return address(liquidityPool); + } + + function allPoolsLength() external view returns (uint256) { + return allPools.length; + } + + function allPoolsAddress() external view returns (address[] memory) { + return allPools; + } + + function getPoolAddress(address tokenA, address tokenB) external view returns (address) { + return getPool[tokenA][tokenB]; + } + + function getPoolAddressByIndex(uint256 index) external view returns (address) { + return allPools[index]; + } +} diff --git a/contracts/src/LiquidityPoolInterfaces.sol b/contracts/src/LiquidityPoolInterfaces.sol deleted file mode 100644 index 4a799c3..0000000 --- a/contracts/src/LiquidityPoolInterfaces.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol"; - -contract LiquidityPoolEvents { - event LiquidityAdded(address indexed user, uint256 tokenAAmount, uint256 tokenBAmount); - event LiquidityRemoved(address indexed user, uint256 tokenAAmount, uint256 tokenBAmount); - event SwapExecuted(address indexed user, address tokenIn, uint256 amountIn, address tokenOut, uint256 amountOut); -} - -abstract contract LiquidityPoolModifiers is AccessManagerUpgradeable { - AccessManagerUpgradeable public accessManager; - - modifier onlyRole(uint64 roleId) { - (bool hasRole, ) = accessManager.hasRole(roleId, msg.sender); - require(hasRole, "LiquidityPool: sender must have the required role"); - _; - } -} diff --git a/contracts/src/token/LiquidityPoolToken.sol b/contracts/src/token/LiquidityPoolToken.sol new file mode 100644 index 0000000..92ab86d --- /dev/null +++ b/contracts/src/token/LiquidityPoolToken.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract LiquidityToken is ERC20 { + constructor() ERC20("Liquidity Pool Token", "LPT") {} + + function mint(address to, uint256 amount) external { + _mint(to, amount); + } + + function burn(address from, uint256 amount) external { + _burn(from, amount); + } +} diff --git a/contracts/src/token/Token.sol b/contracts/src/token/Token.sol new file mode 100644 index 0000000..cc7cfa1 --- /dev/null +++ b/contracts/src/token/Token.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract Token is ERC20 { + constructor(string memory name, string memory symbol, uint256 initialSupply) ERC20(name, symbol) { + _mint(msg.sender, initialSupply); + } + + function mint(address to, uint256 amount) external { + _mint(to, amount); + } + + function burn(address from, uint256 amount) external { + _burn(from, amount); + } +} diff --git a/contracts/src/utils/AccessManagerHelpers.s.sol b/contracts/src/utils/AccessManagerHelpers.s.sol index 781a5af..c06a594 100644 --- a/contracts/src/utils/AccessManagerHelpers.s.sol +++ b/contracts/src/utils/AccessManagerHelpers.s.sol @@ -1,43 +1,43 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts/access/manager/AccessManager.sol"; - -abstract contract AccessManagerHelpers { - function _setUpRole( - AccessManager manager, - uint64 roleId, - uint32 executionDelay, - address account, - uint64 adminId, - address admin, - uint32 adminExecutionDelay, - uint64 guardianId, - address guardian, - uint32 guardianExecutionDelay, - string memory label - ) internal { - _grantMissingRole(manager, roleId, account, executionDelay); - manager.labelRole(roleId, label); - - manager.setRoleGuardian(roleId, guardianId); - _grantMissingRole(manager, guardianId, guardian, guardianExecutionDelay); - - manager.setRoleAdmin(roleId, adminId); - _grantMissingRole(manager, adminId, admin, adminExecutionDelay); - } - - function _grantMissingRole(AccessManager manager, uint64 roleId, address account, uint32 executionDelay) internal { - (bool isMember, ) = manager.hasRole(roleId, account); - if (!isMember) { - manager.grantRole(roleId, account, executionDelay); - } - } - - function _asSingletonArray(bytes4 element) internal pure returns (bytes4[] memory) { - bytes4[] memory array = new bytes4[](1); - array[0] = element; - - return array; - } -} +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/access/manager/AccessManager.sol"; + +abstract contract AccessManagerHelpers { + function _setUpRole( + AccessManager manager, + uint64 roleId, + uint32 executionDelay, + address account, + uint64 adminId, + address admin, + uint32 adminExecutionDelay, + uint64 guardianId, + address guardian, + uint32 guardianExecutionDelay, + string memory label + ) internal { + _grantMissingRole(manager, roleId, account, executionDelay); + manager.labelRole(roleId, label); + + manager.setRoleGuardian(roleId, guardianId); + _grantMissingRole(manager, guardianId, guardian, guardianExecutionDelay); + + manager.setRoleAdmin(roleId, adminId); + _grantMissingRole(manager, adminId, admin, adminExecutionDelay); + } + + function _grantMissingRole(AccessManager manager, uint64 roleId, address account, uint32 executionDelay) internal { + (bool isMember, ) = manager.hasRole(roleId, account); + if (!isMember) { + manager.grantRole(roleId, account, executionDelay); + } + } + + function _asSingletonArray(bytes4 element) internal pure returns (bytes4[] memory) { + bytes4[] memory array = new bytes4[](1); + array[0] = element; + + return array; + } +} diff --git a/contracts/src/utils/Base.s.sol b/contracts/src/utils/Base.s.sol index a534953..6456bb1 100644 --- a/contracts/src/utils/Base.s.sol +++ b/contracts/src/utils/Base.s.sol @@ -1,64 +1,64 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Script} from "forge-std/Script.sol"; - -abstract contract BaseScript is Script { - /// @dev Included to enable compilation of the script without a $MNEMONIC environment variable. - string internal constant TEST_MNEMONIC = "test test test test test test test test test test test junk"; - - /// @dev Needed for the deterministic deployments. - bytes32 internal constant ZERO_SALT = bytes32(0); - - /// @dev The address of the transaction broadcaster. - address internal broadcaster; - - /// @dev Used to derive the broadcaster's address if $ETH_FROM is not defined. - string internal mnemonic; - - /// @dev Get the index of the key to use. - uint32 internal index; - - /// @dev The network where the script is being deployed. - string internal deploymentNetwork; - - /// @dev Initializes the transaction broadcaster like this: - /// - /// - If $ETH_FROM is defined, use it. - /// - Otherwise, derive the broadcaster address from $MNEMONIC. - /// - If $MNEMONIC is not defined, default to a test mnemonic. - /// - /// The use case for $ETH_FROM is to specify the broadcaster key and its address via the command line. - constructor() { - deploymentNetwork = vm.envString("DEPLOYMENT_NETWORK"); - if (bytes(deploymentNetwork).length == 0) { - revert("Please set DEPLOYMENT_NETWORK in .env file"); - } - - address from = vm.envOr({name: "ETH_FROM", defaultValue: address(0)}); - if (from != address(0)) { - broadcaster = from; - } else { - string memory envVar = string.concat("MNEMONIC_", deploymentNetwork); - mnemonic = vm.envOr({name: envVar, defaultValue: TEST_MNEMONIC}); - - if ( - keccak256(abi.encodePacked(deploymentNetwork)) == keccak256(abi.encodePacked("MAINNET")) && - keccak256(abi.encodePacked(mnemonic)) == keccak256(abi.encodePacked(TEST_MNEMONIC)) - ) { - revert("Please set MNEMONIC_MAINNET in .env file to deploy into mainnet"); - } - - string memory envVar1 = string.concat("INDEX_", deploymentNetwork); - index = uint32(vm.envOr({name: envVar1, defaultValue: uint32(0)})); - - (broadcaster, ) = deriveRememberKey({mnemonic: mnemonic, index: index}); - } - } - - modifier broadcast() { - vm.startBroadcast(broadcaster); - _; - vm.stopBroadcast(); - } -} +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {Script} from "forge-std/Script.sol"; + +abstract contract BaseScript is Script { + /// @dev Included to enable compilation of the script without a $MNEMONIC environment variable. + string internal constant TEST_MNEMONIC = "test test test test test test test test test test test junk"; + + /// @dev Needed for the deterministic deployments. + bytes32 internal constant ZERO_SALT = bytes32(0); + + /// @dev The address of the transaction broadcaster. + address internal broadcaster; + + /// @dev Used to derive the broadcaster's address if $ETH_FROM is not defined. + string internal mnemonic; + + /// @dev Get the index of the key to use. + uint32 internal index; + + /// @dev The network where the script is being deployed. + string internal deploymentNetwork; + + /// @dev Initializes the transaction broadcaster like this: + /// + /// - If $ETH_FROM is defined, use it. + /// - Otherwise, derive the broadcaster address from $MNEMONIC. + /// - If $MNEMONIC is not defined, default to a test mnemonic. + /// + /// The use case for $ETH_FROM is to specify the broadcaster key and its address via the command line. + constructor() { + deploymentNetwork = vm.envString("DEPLOYMENT_NETWORK"); + if (bytes(deploymentNetwork).length == 0) { + revert("Please set DEPLOYMENT_NETWORK in .env file"); + } + + address from = vm.envOr({name: "ETH_FROM", defaultValue: address(0)}); + if (from != address(0)) { + broadcaster = from; + } else { + string memory envVar = string.concat("MNEMONIC_", deploymentNetwork); + mnemonic = vm.envOr({name: envVar, defaultValue: TEST_MNEMONIC}); + + if ( + keccak256(abi.encodePacked(deploymentNetwork)) == keccak256(abi.encodePacked("MAINNET")) && + keccak256(abi.encodePacked(mnemonic)) == keccak256(abi.encodePacked(TEST_MNEMONIC)) + ) { + revert("Please set MNEMONIC_MAINNET in .env file to deploy into mainnet"); + } + + string memory envVar1 = string.concat("INDEX_", deploymentNetwork); + index = uint32(vm.envOr({name: envVar1, defaultValue: uint32(0)})); + + (broadcaster, ) = deriveRememberKey({mnemonic: mnemonic, index: index}); + } + } + + modifier broadcast() { + vm.startBroadcast(broadcaster); + _; + vm.stopBroadcast(); + } +} diff --git a/contracts/test/AccessManager.t.sol b/contracts/test/AccessManager.t.sol deleted file mode 100644 index ddf1e6f..0000000 --- a/contracts/test/AccessManager.t.sol +++ /dev/null @@ -1,59 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "forge-std/Test.sol"; -import "forge-std/console.sol"; - -import "../script/01_DeployAccessManager.s.sol"; -import "../src/libraries/Roles.sol"; - -contract AccessManagerTest is Test { - AccessManager public accessManager; - - address public deployer = 0x00000000000000000000000000000000000000D1; - address public admin = 0x00000000000000000000000000000000000000a0; - address public user = 0x0000000000000000000000000000000000000001; - uint256 fork; - string SEPOLIA_RPC_URL = vm.envString("API_KEY_ALCHEMY_SEPOLIA"); - - function setUp() public { - fork = vm.createFork(SEPOLIA_RPC_URL); - vm.selectFork(fork); - - AccessManagerDeploymentScript accessManagerScript = new AccessManagerDeploymentScript(); - accessManager = AccessManager(accessManagerScript.deployForTest(deployer)); - - // Grant the admin role to the deployer - vm.prank(deployer); - accessManager.grantRole(Roles.ADMIN_ROLE, admin, 0); - - // Remove admin role from the deployer - vm.prank(admin); - accessManager.revokeRole(Roles.ADMIN_ROLE, deployer); - } - - function testAccessManagerAccess() public { - // revertData is the encoded data for the AccessManagerUnauthorizedAccount event - bytes memory revertData = abi.encodeWithSelector( - bytes4(keccak256("AccessManagerUnauthorizedAccount(address,uint64)")), deployer, 0 - ); - - // Deployer should not be able to grant the admin role - vm.prank(deployer); - vm.expectRevert(revertData); - accessManager.grantRole(Roles.ADMIN_ROLE, user, 0); - - // Deployer should not be able to revoke the admin role - vm.prank(deployer); - vm.expectRevert(revertData); - accessManager.revokeRole(Roles.ADMIN_ROLE, admin); - - // Admin should be able to grant the admin role - vm.prank(admin); - accessManager.grantRole(Roles.ADMIN_ROLE, user, 0); - - // Admin should be able to revoke the admin role - vm.prank(admin); - accessManager.revokeRole(Roles.ADMIN_ROLE, user); - } -} diff --git a/contracts/test/GensTokenTest.t.sol b/contracts/test/GensTokenTest.t.sol deleted file mode 100644 index 7e51e53..0000000 --- a/contracts/test/GensTokenTest.t.sol +++ /dev/null @@ -1,75 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "forge-std/Test.sol"; -import "../src/GensToken.sol"; - -contract GensTokenTest is Test { - GensToken public token; - address public owner; - address public user1; - address public user2; - - function setUp() public { - token = new GensToken(); - token.initialize("Genesis", "GENX"); - owner = address(this); - user1 = address(0x123); - user2 = address(0x456); - } - - function testInitialize() public { - assertEq(token.name(), "GensToken"); - assertEq(token.symbol(), "GENS"); - } - - function testMint() public { - token.mint(owner, 1000); - assertEq(token.balanceOf(owner), 1000); - } - - function testMintToAnotherAddress() public { - token.mint(user1, 500); - assertEq(token.balanceOf(user1), 500); - } - - function testFailMintToZeroAddress() public { - token.mint(address(0), 1000); - } - - function testMultipleMints() public { - token.mint(owner, 1000); - token.mint(owner, 2000); - assertEq(token.balanceOf(owner), 3000); - } - - function testTransfer() public { - token.mint(owner, 1000); - token.transfer(user1, 500); - assertEq(token.balanceOf(owner), 500); - assertEq(token.balanceOf(user1), 500); - } - - function testFailTransferMoreThanBalance() public { - token.mint(owner, 1000); - token.transfer(user1, 1500); - } - - function testApproveAndTransferFrom() public { - token.mint(owner, 1000); - token.approve(user1, 500); - assertEq(token.allowance(owner, user1), 500); - - vm.prank(user1); - token.transferFrom(owner, user2, 300); - assertEq(token.balanceOf(owner), 700); - assertEq(token.balanceOf(user2), 300); - assertEq(token.allowance(owner, user1), 200); - } - - function testFailTransferFromWithoutApproval() public { - token.mint(owner, 1000); - vm.prank(user1); - token.transferFrom(owner, user2, 300); - } -} diff --git a/contracts/test/LiquidityPool.t.sol b/contracts/test/LiquidityPool.t.sol new file mode 100644 index 0000000..6ff4235 --- /dev/null +++ b/contracts/test/LiquidityPool.t.sol @@ -0,0 +1,97 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import "forge-std/Test.sol"; +import "../src/token/Token.sol"; +import "../src/token/LiquidityPoolToken.sol"; +import "../src/LiquidityPool.sol"; + +contract LiquidityPoolTest is Test { + Token tokenA; + Token tokenB; + LiquidityToken liquidityToken; + LiquidityPool liquidityPool; + address owner = address(0x123); + address addr1 = address(0x456); + address addr2 = address(0x789); + + function setUp() public { + tokenA = new Token("TokenA", "TKA"); + tokenB = new Token("TokenB", "TKB"); + liquidityToken = new LiquidityToken(); + + liquidityPool = new LiquidityPool(owner); + + // Ensure the owner calls the initialize function + vm.prank(owner); + liquidityPool.initialize(address(tokenA), address(tokenB), address(liquidityToken), 30, 10); + + // Mint and approve tokens + tokenA.mint(addr1, 1000 ether); + tokenB.mint(addr1, 1000 ether); + vm.prank(addr1); + tokenA.approve(address(liquidityPool), 1000 ether); + vm.prank(addr1); + tokenB.approve(address(liquidityPool), 1000 ether); + + tokenA.mint(addr2, 1000 ether); + tokenB.mint(addr2, 1000 ether); + vm.prank(addr2); + tokenA.approve(address(liquidityPool), 1000 ether); + vm.prank(addr2); + tokenB.approve(address(liquidityPool), 1000 ether); + } + + function testDeployment() public { + assertEq(liquidityPool.owner(), owner); + assertEq(address(liquidityPool.tokenA()), address(tokenA)); + assertEq(address(liquidityPool.tokenB()), address(tokenB)); + assertEq(address(liquidityPool.liquidityToken()), address(liquidityToken)); + } + + function testAddLiquidity() public { + vm.prank(addr1); + liquidityPool.addLiquidity(100 ether, 100 ether); + + assertEq(tokenA.balanceOf(address(liquidityPool)), 100 ether); + assertEq(tokenB.balanceOf(address(liquidityPool)), 100 ether); + } + + function testRemoveLiquidity() public { + vm.prank(addr1); + liquidityPool.addLiquidity(100 ether, 100 ether); + + vm.prank(addr1); + liquidityPool.removeLiquidity(10 ether); + + uint256 expectedTokenABalance = 90 ether; + uint256 expectedTokenBBalance = 90 ether; + uint256 actualTokenABalance = tokenA.balanceOf(address(liquidityPool)); + uint256 actualTokenBBalance = tokenB.balanceOf(address(liquidityPool)); + + // Allow a small margin of error + uint256 tolerance = 1 wei; + + assertTrue( + actualTokenABalance >= expectedTokenABalance - tolerance && + actualTokenABalance <= expectedTokenABalance + tolerance, + string(abi.encodePacked("Token A balance mismatch: ", actualTokenABalance)) + ); + + assertTrue( + actualTokenBBalance >= expectedTokenBBalance - tolerance && + actualTokenBBalance <= expectedTokenBBalance + tolerance, + string(abi.encodePacked("Token B balance mismatch: ", actualTokenBBalance)) + ); + } + + function testSwap() public { + vm.prank(addr1); + liquidityPool.addLiquidity(100 ether, 100 ether); + + vm.prank(addr2); + liquidityPool.swap(address(tokenA), 10 ether, 1); + + assertGt(tokenB.balanceOf(addr2), 0); + } +} diff --git a/next-app/.eslintrc.json b/next-app/.eslintrc.json index bffb357..ea782d7 100644 --- a/next-app/.eslintrc.json +++ b/next-app/.eslintrc.json @@ -1,3 +1,3 @@ -{ - "extends": "next/core-web-vitals" -} +{ + "extends": "next/core-web-vitals" +} diff --git a/next-app/.gitignore b/next-app/.gitignore index fd3dbb5..04d5360 100644 --- a/next-app/.gitignore +++ b/next-app/.gitignore @@ -1,36 +1,36 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js -.yarn/install-state.gz - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# local env files -.env*.local - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/next-app/README.md b/next-app/README.md index c403366..73ea1f0 100644 --- a/next-app/README.md +++ b/next-app/README.md @@ -1,36 +1,36 @@ -This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). - -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. - -This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/next-app/components.json b/next-app/components.json index 13f1fef..fcb80e0 100644 --- a/next-app/components.json +++ b/next-app/components.json @@ -1,17 +1,17 @@ -{ - "$schema": "https://ui.shadcn.com/schema.json", - "style": "default", - "rsc": true, - "tsx": true, - "tailwind": { - "config": "tailwind.config.ts", - "css": "src/app/globals.css", - "baseColor": "neutral", - "cssVariables": false, - "prefix": "" - }, - "aliases": { - "components": "@/components", - "utils": "@/lib/utils" - } +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "tailwind.config.ts", + "css": "src/app/globals.css", + "baseColor": "neutral", + "cssVariables": false, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils" + } } \ No newline at end of file diff --git a/next-app/package-lock.json b/next-app/package-lock.json index 402970b..c8bec24 100644 --- a/next-app/package-lock.json +++ b/next-app/package-lock.json @@ -16449,4 +16449,4 @@ } } } -} +} \ No newline at end of file diff --git a/next-app/package.json b/next-app/package.json index 9cfd4b3..6e6f8f9 100644 --- a/next-app/package.json +++ b/next-app/package.json @@ -51,4 +51,4 @@ "volta": { "node": "20.14.0" } -} +} \ No newline at end of file diff --git a/next-app/postcss.config.mjs b/next-app/postcss.config.mjs index 1a69fd2..78ebb47 100644 --- a/next-app/postcss.config.mjs +++ b/next-app/postcss.config.mjs @@ -1,8 +1,8 @@ -/** @type {import('postcss-load-config').Config} */ -const config = { - plugins: { - tailwindcss: {}, - }, -}; - -export default config; +/** @type {import('postcss-load-config').Config} */ +const config = { + plugins: { + tailwindcss: {}, + }, +}; + +export default config; diff --git a/next-app/src/abi/abi.ts b/next-app/src/abi/ERC20.ts similarity index 94% rename from next-app/src/abi/abi.ts rename to next-app/src/abi/ERC20.ts index b8b387a..3e15faa 100644 --- a/next-app/src/abi/abi.ts +++ b/next-app/src/abi/ERC20.ts @@ -1,4 +1,25 @@ -export const abi = [ +export const ERC2O = [ + { + "type": "constructor", + "inputs": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "symbol", + "type": "string", + "internalType": "string" + }, + { + "name": "initialSupply", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, { "type": "function", "name": "allowance", @@ -66,6 +87,24 @@ export const abi = [ ], "stateMutability": "view" }, + { + "type": "function", + "name": "burn", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, { "type": "function", "name": "decimals", @@ -79,24 +118,6 @@ export const abi = [ ], "stateMutability": "view" }, - { - "type": "function", - "name": "initialize", - "inputs": [ - { - "name": "name", - "type": "string", - "internalType": "string" - }, - { - "name": "symbol", - "type": "string", - "internalType": "string" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, { "type": "function", "name": "mint", @@ -232,19 +253,6 @@ export const abi = [ ], "anonymous": false }, - { - "type": "event", - "name": "Initialized", - "inputs": [ - { - "name": "version", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - } - ], - "anonymous": false - }, { "type": "event", "name": "Transfer", @@ -355,15 +363,5 @@ export const abi = [ "internalType": "address" } ] - }, - { - "type": "error", - "name": "InvalidInitialization", - "inputs": [] - }, - { - "type": "error", - "name": "NotInitializing", - "inputs": [] } -]; \ No newline at end of file +] \ No newline at end of file diff --git a/next-app/src/abi/ERC20Upgradeable.json b/next-app/src/abi/ERC20Upgradeable.json deleted file mode 100644 index ef24fab..0000000 --- a/next-app/src/abi/ERC20Upgradeable.json +++ /dev/null @@ -1,1351 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "allowance", - "inputs": [ - { - "name": "owner", - "type": "address", - "internalType": "address" - }, - { - "name": "spender", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "approve", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "balanceOf", - "inputs": [ - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "decimals", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint8", - "internalType": "uint8" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "initialize", - "inputs": [ - { - "name": "name", - "type": "string", - "internalType": "string" - }, - { - "name": "symbol", - "type": "string", - "internalType": "string" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "mint", - "inputs": [ - { - "name": "to", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "name", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "symbol", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "totalSupply", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transfer", - "inputs": [ - { - "name": "to", - "type": "address", - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferFrom", - "inputs": [ - { - "name": "from", - "type": "address", - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "Approval", - "inputs": [ - { - "name": "owner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "spender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Initialized", - "inputs": [ - { - "name": "version", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Transfer", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "ERC20InsufficientAllowance", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - }, - { - "name": "allowance", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "needed", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ERC20InsufficientBalance", - "inputs": [ - { - "name": "sender", - "type": "address", - "internalType": "address" - }, - { - "name": "balance", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "needed", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ERC20InvalidApprover", - "inputs": [ - { - "name": "approver", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "ERC20InvalidReceiver", - "inputs": [ - { - "name": "receiver", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "ERC20InvalidSender", - "inputs": [ - { - "name": "sender", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "ERC20InvalidSpender", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "InvalidInitialization", - "inputs": [] - }, - { - "type": "error", - "name": "NotInitializing", - "inputs": [] - } - ], - "bytecode": { - "object": "0x6080604052348015600f57600080fd5b50610c5a8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806340c10f191161007157806340c10f19146101425780634cd88b761461015757806370a082311461016a57806395d89b41146101a0578063a9059cbb146101a8578063dd62ed3e146101bb57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610120578063313ce56714610133575b600080fd5b6100b66101ce565b6040516100c3919061086c565b60405180910390f35b6100df6100da3660046108d7565b610291565b60405190151581526020016100c3565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040519081526020016100c3565b6100df61012e366004610901565b6102ab565b604051601281526020016100c3565b6101556101503660046108d7565b6102cf565b005b6101556101653660046109e0565b6102dd565b610112610178366004610a44565b6001600160a01b03166000908152600080516020610c05833981519152602052604090205490565b6100b66103ef565b6100df6101b63660046108d7565b61042e565b6101126101c9366004610a66565b61043c565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020610c058339815191529161020d90610a99565b80601f016020809104026020016040519081016040528092919081815260200182805461023990610a99565b80156102865780601f1061025b57610100808354040283529160200191610286565b820191906000526020600020905b81548152906001019060200180831161026957829003601f168201915b505050505091505090565b60003361029f818585610486565b60019150505b92915050565b6000336102b9858285610498565b6102c4858585610503565b506001949350505050565b6102d98282610562565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156103235750825b905060008267ffffffffffffffff1660011480156103405750303b155b90508115801561034e575080155b1561036c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561039657845460ff60401b1916600160401b1785555b6103a08787610598565b83156103e657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020610c058339815191529161020d90610a99565b60003361029f818585610503565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b61049383838360016105aa565b505050565b60006104a4848461043c565b905060001981146104fd57818110156104ee57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b6104fd848484840360006105aa565b50505050565b6001600160a01b03831661052d57604051634b637e8f60e11b8152600060048201526024016104e5565b6001600160a01b0382166105575760405163ec442f0560e01b8152600060048201526024016104e5565b610493838383610692565b6001600160a01b03821661058c5760405163ec442f0560e01b8152600060048201526024016104e5565b6102d960008383610692565b6105a06107d0565b6102d9828261081b565b600080516020610c058339815191526001600160a01b0385166105e35760405163e602df0560e01b8152600060048201526024016104e5565b6001600160a01b03841661060d57604051634a1406b160e11b8152600060048201526024016104e5565b6001600160a01b0380861660009081526001830160209081526040808320938816835292905220839055811561068b57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161068291815260200190565b60405180910390a35b5050505050565b600080516020610c058339815191526001600160a01b0384166106ce57818160020160008282546106c39190610ad3565b909155506107409050565b6001600160a01b038416600090815260208290526040902054828110156107215760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016104e5565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b03831661075e57600281018054839003905561077d565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107c291815260200190565b60405180910390a350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661081957604051631afcd79f60e31b815260040160405180910390fd5b565b6108236107d0565b600080516020610c058339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361085d8482610b44565b50600481016104fd8382610b44565b60006020808352835180602085015260005b8181101561089a5785810183015185820160400152820161087e565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146108d257600080fd5b919050565b600080604083850312156108ea57600080fd5b6108f3836108bb565b946020939093013593505050565b60008060006060848603121561091657600080fd5b61091f846108bb565b925061092d602085016108bb565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261096457600080fd5b813567ffffffffffffffff8082111561097f5761097f61093d565b604051601f8301601f19908116603f011681019082821181831017156109a7576109a761093d565b816040528381528660208588010111156109c057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156109f357600080fd5b823567ffffffffffffffff80821115610a0b57600080fd5b610a1786838701610953565b93506020850135915080821115610a2d57600080fd5b50610a3a85828601610953565b9150509250929050565b600060208284031215610a5657600080fd5b610a5f826108bb565b9392505050565b60008060408385031215610a7957600080fd5b610a82836108bb565b9150610a90602084016108bb565b90509250929050565b600181811c90821680610aad57607f821691505b602082108103610acd57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156102a557634e487b7160e01b600052601160045260246000fd5b601f821115610493576000816000526020600020601f850160051c81016020861015610b1d5750805b601f850160051c820191505b81811015610b3c57828155600101610b29565b505050505050565b815167ffffffffffffffff811115610b5e57610b5e61093d565b610b7281610b6c8454610a99565b84610af4565b602080601f831160018114610ba75760008415610b8f5750858301515b600019600386901b1c1916600185901b178555610b3c565b600085815260208120601f198616915b82811015610bd657888601518255948401946001909101908401610bb7565b5085821015610bf45787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a2646970667358221220d6ce0bc34cf5e38b6a59085954510cc2ee5ffe85a527cc55a370a14a14acfaa364736f6c63430008190033", - "sourceMap": "142:270:45:-:0;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c806340c10f191161007157806340c10f19146101425780634cd88b761461015757806370a082311461016a57806395d89b41146101a0578063a9059cbb146101a8578063dd62ed3e146101bb57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610120578063313ce56714610133575b600080fd5b6100b66101ce565b6040516100c3919061086c565b60405180910390f35b6100df6100da3660046108d7565b610291565b60405190151581526020016100c3565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040519081526020016100c3565b6100df61012e366004610901565b6102ab565b604051601281526020016100c3565b6101556101503660046108d7565b6102cf565b005b6101556101653660046109e0565b6102dd565b610112610178366004610a44565b6001600160a01b03166000908152600080516020610c05833981519152602052604090205490565b6100b66103ef565b6100df6101b63660046108d7565b61042e565b6101126101c9366004610a66565b61043c565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020610c058339815191529161020d90610a99565b80601f016020809104026020016040519081016040528092919081815260200182805461023990610a99565b80156102865780601f1061025b57610100808354040283529160200191610286565b820191906000526020600020905b81548152906001019060200180831161026957829003601f168201915b505050505091505090565b60003361029f818585610486565b60019150505b92915050565b6000336102b9858285610498565b6102c4858585610503565b506001949350505050565b6102d98282610562565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156103235750825b905060008267ffffffffffffffff1660011480156103405750303b155b90508115801561034e575080155b1561036c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561039657845460ff60401b1916600160401b1785555b6103a08787610598565b83156103e657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020610c058339815191529161020d90610a99565b60003361029f818585610503565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b61049383838360016105aa565b505050565b60006104a4848461043c565b905060001981146104fd57818110156104ee57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b6104fd848484840360006105aa565b50505050565b6001600160a01b03831661052d57604051634b637e8f60e11b8152600060048201526024016104e5565b6001600160a01b0382166105575760405163ec442f0560e01b8152600060048201526024016104e5565b610493838383610692565b6001600160a01b03821661058c5760405163ec442f0560e01b8152600060048201526024016104e5565b6102d960008383610692565b6105a06107d0565b6102d9828261081b565b600080516020610c058339815191526001600160a01b0385166105e35760405163e602df0560e01b8152600060048201526024016104e5565b6001600160a01b03841661060d57604051634a1406b160e11b8152600060048201526024016104e5565b6001600160a01b0380861660009081526001830160209081526040808320938816835292905220839055811561068b57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161068291815260200190565b60405180910390a35b5050505050565b600080516020610c058339815191526001600160a01b0384166106ce57818160020160008282546106c39190610ad3565b909155506107409050565b6001600160a01b038416600090815260208290526040902054828110156107215760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016104e5565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b03831661075e57600281018054839003905561077d565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107c291815260200190565b60405180910390a350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661081957604051631afcd79f60e31b815260040160405180910390fd5b565b6108236107d0565b600080516020610c058339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361085d8482610b44565b50600481016104fd8382610b44565b60006020808352835180602085015260005b8181101561089a5785810183015185820160400152820161087e565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146108d257600080fd5b919050565b600080604083850312156108ea57600080fd5b6108f3836108bb565b946020939093013593505050565b60008060006060848603121561091657600080fd5b61091f846108bb565b925061092d602085016108bb565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261096457600080fd5b813567ffffffffffffffff8082111561097f5761097f61093d565b604051601f8301601f19908116603f011681019082821181831017156109a7576109a761093d565b816040528381528660208588010111156109c057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156109f357600080fd5b823567ffffffffffffffff80821115610a0b57600080fd5b610a1786838701610953565b93506020850135915080821115610a2d57600080fd5b50610a3a85828601610953565b9150509250929050565b600060208284031215610a5657600080fd5b610a5f826108bb565b9392505050565b60008060408385031215610a7957600080fd5b610a82836108bb565b9150610a90602084016108bb565b90509250929050565b600181811c90821680610aad57607f821691505b602082108103610acd57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156102a557634e487b7160e01b600052601160045260246000fd5b601f821115610493576000816000526020600020601f850160051c81016020861015610b1d5750805b601f850160051c820191505b81811015610b3c57828155600101610b29565b505050505050565b815167ffffffffffffffff811115610b5e57610b5e61093d565b610b7281610b6c8454610a99565b84610af4565b602080601f831160018114610ba75760008415610b8f5750858301515b600019600386901b1c1916600185901b178555610b3c565b600085815260208120601f198616915b82811015610bd657888601518255948401946001909101908401610bb7565b5085821015610bf45787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a2646970667358221220d6ce0bc34cf5e38b6a59085954510cc2ee5ffe85a527cc55a370a14a14acfaa364736f6c63430008190033", - "sourceMap": "142:270:45:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2716:144:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5210:186;;;;;;:::i;:::-;;:::i;:::-;;;1169:14:54;;1162:22;1144:41;;1132:2;1117:18;5210:186:23;1004:187:54;3896:152:23;4027:14;;3896:152;;;1342:25:54;;;1330:2;1315:18;3896:152:23;1196:177:54;5988:244:23;;;;;;:::i;:::-;;:::i;3754:82::-;;;3827:2;1853:36:54;;1841:2;1826:18;3754:82:23;1711:184:54;322:87:45;;;;;;:::i;:::-;;:::i;:::-;;188:126;;;;;;:::i;:::-;;:::i;4106:171:23:-;;;;;;:::i;:::-;-1:-1:-1;;;;;4250:20:23;4171:7;4250:20;;;-1:-1:-1;;;;;;;;;;;4250:20:23;;;;;;;4106:171;2973:148;;;:::i;4472:178::-;;;;;;:::i;:::-;;:::i;4708:195::-;;;;;;:::i;:::-;;:::i;2716:144::-;2846:7;2839:14;;2761:13;;-1:-1:-1;;;;;;;;;;;2064:20:23;2839:14;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2716:144;:::o;5210:186::-;5283:4;966:10:24;5337:31:23;966:10:24;5353:7:23;5362:5;5337:8;:31::i;:::-;5385:4;5378:11;;;5210:186;;;;;:::o;5988:244::-;6075:4;966:10:24;6131:37:23;6147:4;966:10:24;6162:5:23;6131:15;:37::i;:::-;6178:26;6188:4;6194:2;6198:5;6178:9;:26::i;:::-;-1:-1:-1;6221:4:23;;5988:244;-1:-1:-1;;;;5988:244:23:o;322:87:45:-;384:17;390:2;394:6;384:5;:17::i;:::-;322:87;;:::o;188:126::-;8870:21:22;4302:15;;-1:-1:-1;;;4302:15:22;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:22;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:22;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:22;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:22;-1:-1:-1;;;5013:22:22;;;4979:67;280:26:45::1;293:4;299:6;280:12;:26::i;:::-;5070:14:22::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:22;;;5142:14;;-1:-1:-1;4298:50:54;;5142:14:22;;4286:2:54;4271:18;5142:14:22;;;;;;;5066:101;4092:1081;;;;;188:126:45;;:::o;2973:148:23:-;3105:9;3098:16;;3020:13;;-1:-1:-1;;;;;;;;;;;2064:20:23;3098:16;;;:::i;4472:178::-;4541:4;966:10:24;4595:27:23;966:10:24;4612:2:23;4616:5;4595:9;:27::i;4708:195::-;-1:-1:-1;;;;;4867:20:23;;;4788:7;4867:20;;;:13;:20;;;;;;;;:29;;;;;;;;;;;;;4708:195::o;10001:128::-;10085:37;10094:5;10101:7;10110:5;10117:4;10085:8;:37::i;:::-;10001:128;;;:::o;11745:477::-;11844:24;11871:25;11881:5;11888:7;11871:9;:25::i;:::-;11844:52;;-1:-1:-1;;11910:16:23;:37;11906:310;;11986:5;11967:16;:24;11963:130;;;12018:60;;-1:-1:-1;;;12018:60:23;;-1:-1:-1;;;;;4579:32:54;;12018:60:23;;;4561:51:54;4628:18;;;4621:34;;;4671:18;;;4664:34;;;4534:18;;12018:60:23;;;;;;;;11963:130;12134:57;12143:5;12150:7;12178:5;12159:16;:24;12185:5;12134:8;:57::i;:::-;11834:388;11745:477;;;:::o;6605:300::-;-1:-1:-1;;;;;6688:18:23;;6684:86;;6729:30;;-1:-1:-1;;;6729:30:23;;6756:1;6729:30;;;4855:51:54;4828:18;;6729:30:23;4709:203:54;6684:86:23;-1:-1:-1;;;;;6783:16:23;;6779:86;;6822:32;;-1:-1:-1;;;6822:32:23;;6851:1;6822:32;;;4855:51:54;4828:18;;6822:32:23;4709:203:54;6779:86:23;6874:24;6882:4;6888:2;6892:5;6874:7;:24::i;8733:208::-;-1:-1:-1;;;;;8803:21:23;;8799:91;;8847:32;;-1:-1:-1;;;8847:32:23;;8876:1;8847:32;;;4855:51:54;4828:18;;8847:32:23;4709:203:54;8799:91:23;8899:35;8915:1;8919:7;8928:5;8899:7;:35::i;2282:147::-;6931:20:22;:18;:20::i;:::-;2384:38:23::1;2407:5;2414:7;2384:22;:38::i;10976:487::-:0;-1:-1:-1;;;;;;;;;;;;;;;;11141:19:23;;11137:89;;11183:32;;-1:-1:-1;;;11183:32:23;;11212:1;11183:32;;;4855:51:54;4828:18;;11183:32:23;4709:203:54;11137:89:23;-1:-1:-1;;;;;11239:21:23;;11235:90;;11283:31;;-1:-1:-1;;;11283:31:23;;11311:1;11283:31;;;4855:51:54;4828:18;;11283:31:23;4709:203:54;11235:90:23;-1:-1:-1;;;;;11334:20:23;;;;;;;:13;;;:20;;;;;;;;:29;;;;;;;;;:37;;;11381:76;;;;11431:7;-1:-1:-1;;;;;11415:31:23;11424:5;-1:-1:-1;;;;;11415:31:23;;11440:5;11415:31;;;;1342:25:54;;1330:2;1315:18;;1196:177;11415:31:23;;;;;;;;11381:76;11074:389;10976:487;;;;:::o;7220:1170::-;-1:-1:-1;;;;;;;;;;;;;;;;7362:18:23;;7358:546;;7516:5;7498:1;:14;;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;7358:546:23;;-1:-1:-1;7358:546:23;;-1:-1:-1;;;;;7574:17:23;;7552:19;7574:17;;;;;;;;;;;7609:19;;;7605:115;;;7655:50;;-1:-1:-1;;;7655:50:23;;-1:-1:-1;;;;;4579:32:54;;7655:50:23;;;4561:51:54;4628:18;;;4621:34;;;4671:18;;;4664:34;;;4534:18;;7655:50:23;4359:345:54;7605:115:23;-1:-1:-1;;;;;7840:17:23;;:11;:17;;;;;;;;;;7860:19;;;;7840:39;;7358:546;-1:-1:-1;;;;;7918:16:23;;7914:429;;8081:14;;;:23;;;;;;;7914:429;;;-1:-1:-1;;;;;8294:15:23;;:11;:15;;;;;;;;;;:24;;;;;;7914:429;8373:2;-1:-1:-1;;;;;8358:25:23;8367:4;-1:-1:-1;;;;;8358:25:23;;8377:5;8358:25;;;;1342::54;;1330:2;1315:18;;1196:177;8358:25:23;;;;;;;;7295:1095;7220:1170;;;:::o;7084:141:22:-;8870:21;8560:40;-1:-1:-1;;;8560:40:22;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:22;;;;;;;;;;;7146:73;7084:141::o;2435:216:23:-;6931:20:22;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;2600:7:23;:15:::1;2610:5:::0;2600:7;:15:::1;:::i;:::-;-1:-1:-1::0;2625:9:23::1;::::0;::::1;:19;2637:7:::0;2625:9;:19:::1;:::i;14:548:54:-:0;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:54;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:54:o;1378:328::-;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1563:29;1582:9;1563:29;:::i;:::-;1553:39;;1611:38;1645:2;1634:9;1630:18;1611:38;:::i;:::-;1601:48;;1696:2;1685:9;1681:18;1668:32;1658:42;;1378:328;;;;;:::o;1900:127::-;1961:10;1956:3;1952:20;1949:1;1942:31;1992:4;1989:1;1982:15;2016:4;2013:1;2006:15;2032:719;2075:5;2128:3;2121:4;2113:6;2109:17;2105:27;2095:55;;2146:1;2143;2136:12;2095:55;2182:6;2169:20;2208:18;2245:2;2241;2238:10;2235:36;;;2251:18;;:::i;:::-;2326:2;2320:9;2294:2;2380:13;;-1:-1:-1;;2376:22:54;;;2400:2;2372:31;2368:40;2356:53;;;2424:18;;;2444:22;;;2421:46;2418:72;;;2470:18;;:::i;:::-;2510:10;2506:2;2499:22;2545:2;2537:6;2530:18;2591:3;2584:4;2579:2;2571:6;2567:15;2563:26;2560:35;2557:55;;;2608:1;2605;2598:12;2557:55;2672:2;2665:4;2657:6;2653:17;2646:4;2638:6;2634:17;2621:54;2719:1;2712:4;2707:2;2699:6;2695:15;2691:26;2684:37;2739:6;2730:15;;;;;;2032:719;;;;:::o;2756:543::-;2844:6;2852;2905:2;2893:9;2884:7;2880:23;2876:32;2873:52;;;2921:1;2918;2911:12;2873:52;2961:9;2948:23;2990:18;3031:2;3023:6;3020:14;3017:34;;;3047:1;3044;3037:12;3017:34;3070:50;3112:7;3103:6;3092:9;3088:22;3070:50;:::i;:::-;3060:60;;3173:2;3162:9;3158:18;3145:32;3129:48;;3202:2;3192:8;3189:16;3186:36;;;3218:1;3215;3208:12;3186:36;;3241:52;3285:7;3274:8;3263:9;3259:24;3241:52;:::i;:::-;3231:62;;;2756:543;;;;;:::o;3304:186::-;3363:6;3416:2;3404:9;3395:7;3391:23;3387:32;3384:52;;;3432:1;3429;3422:12;3384:52;3455:29;3474:9;3455:29;:::i;:::-;3445:39;3304:186;-1:-1:-1;;;3304:186:54:o;3495:260::-;3563:6;3571;3624:2;3612:9;3603:7;3599:23;3595:32;3592:52;;;3640:1;3637;3630:12;3592:52;3663:29;3682:9;3663:29;:::i;:::-;3653:39;;3711:38;3745:2;3734:9;3730:18;3711:38;:::i;:::-;3701:48;;3495:260;;;;;:::o;3760:380::-;3839:1;3835:12;;;;3882;;;3903:61;;3957:4;3949:6;3945:17;3935:27;;3903:61;4010:2;4002:6;3999:14;3979:18;3976:38;3973:161;;4056:10;4051:3;4047:20;4044:1;4037:31;4091:4;4088:1;4081:15;4119:4;4116:1;4109:15;3973:161;;3760:380;;;:::o;4917:222::-;4982:9;;;5003:10;;;5000:133;;;5055:10;5050:3;5046:20;5043:1;5036:31;5090:4;5087:1;5080:15;5118:4;5115:1;5108:15;5270:543;5372:2;5367:3;5364:11;5361:446;;;5408:1;5432:5;5429:1;5422:16;5476:4;5473:1;5463:18;5546:2;5534:10;5530:19;5527:1;5523:27;5517:4;5513:38;5582:4;5570:10;5567:20;5564:47;;;-1:-1:-1;5605:4:54;5564:47;5660:2;5655:3;5651:12;5648:1;5644:20;5638:4;5634:31;5624:41;;5715:82;5733:2;5726:5;5723:13;5715:82;;;5778:17;;;5759:1;5748:13;5715:82;;;5719:3;;;5270:543;;;:::o;5989:1345::-;6115:3;6109:10;6142:18;6134:6;6131:30;6128:56;;;6164:18;;:::i;:::-;6193:97;6283:6;6243:38;6275:4;6269:11;6243:38;:::i;:::-;6237:4;6193:97;:::i;:::-;6345:4;;6402:2;6391:14;;6419:1;6414:663;;;;7121:1;7138:6;7135:89;;;-1:-1:-1;7190:19:54;;;7184:26;7135:89;-1:-1:-1;;5946:1:54;5942:11;;;5938:24;5934:29;5924:40;5970:1;5966:11;;;5921:57;7237:81;;6384:944;;6414:663;5217:1;5210:14;;;5254:4;5241:18;;-1:-1:-1;;6450:20:54;;;6568:236;6582:7;6579:1;6576:14;6568:236;;;6671:19;;;6665:26;6650:42;;6763:27;;;;6731:1;6719:14;;;;6598:19;;6568:236;;;6572:3;6832:6;6823:7;6820:19;6817:201;;;6893:19;;;6887:26;-1:-1:-1;;6976:1:54;6972:14;;;6988:3;6968:24;6964:37;6960:42;6945:58;6930:74;;6817:201;-1:-1:-1;;;;;7064:1:54;7048:14;;;7044:22;7031:36;;-1:-1:-1;5989:1345:54:o", - "linkReferences": {} - }, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "decimals()": "313ce567", - "initialize(string,string)": "4cd88b76", - "mint(address,uint256)": "40c10f19", - "name()": "06fdde03", - "symbol()": "95d89b41", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/GensToken.sol\":\"GensToken\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@openzeppelin/foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x5a5f22721ffb66d3e1ecc568c0d37c91f91223d8663c8a5e78396e780b849c72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bdd108133c98ea251513424bf17905090c8a7e0755562a6d12a81b8bccbd6152\",\"dweb:/ipfs/QmahpnB63Up9aVx4jDqxEgry5BRN5itHRvy9rwBvMT2yqL\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"src/GensToken.sol\":{\"keccak256\":\"0xef8bcfdfbef520ad0b54b8c020ff176dcd15bbcd65f6a72961a8fd2bdf2870fb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9b605aee0b2f9e0df66f800045e43712bf0cdaf6ef8c968d5ed8c6a6b2478bc\",\"dweb:/ipfs/QmYPHJPKKEgACVdrgDa2L2U2Kc797Vq9Lf69WR8KHdbjhA\"]}},\"version\":1}", - "metadata": { - "compiler": { - "version": "0.8.25+commit.b61c2a91" - }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "type": "error", - "name": "ERC20InsufficientAllowance" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "type": "error", - "name": "ERC20InsufficientBalance" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "type": "error", - "name": "ERC20InvalidApprover" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "type": "error", - "name": "ERC20InvalidReceiver" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "type": "error", - "name": "ERC20InvalidSender" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "type": "error", - "name": "ERC20InvalidSpender" - }, - { - "inputs": [], - "type": "error", - "name": "InvalidInitialization" - }, - { - "inputs": [], - "type": "error", - "name": "NotInitializing" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "spender", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Approval", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "version", - "type": "uint64", - "indexed": false - } - ], - "type": "event", - "name": "Initialized", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Transfer", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "initialize" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "mint" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { - "details": "See {IERC20-balanceOf}." - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "name()": { - "details": "Returns the name of the token." - }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "totalSupply()": { - "details": "See {IERC20-totalSupply}." - }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", - "@openzeppelin/foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/", - "ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/", - "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", - "forge-std/=lib/forge-std/src/", - "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", - "openzeppelin-contracts/=lib/openzeppelin-contracts/", - "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/", - "solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/" - ], - "optimizer": { - "enabled": true, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs" - }, - "compilationTarget": { - "src/GensToken.sol": "GensToken" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { - "keccak256": "0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b", - "urls": [ - "bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609", - "dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { - "keccak256": "0x5a5f22721ffb66d3e1ecc568c0d37c91f91223d8663c8a5e78396e780b849c72", - "urls": [ - "bzz-raw://bdd108133c98ea251513424bf17905090c8a7e0755562a6d12a81b8bccbd6152", - "dweb:/ipfs/QmahpnB63Up9aVx4jDqxEgry5BRN5itHRvy9rwBvMT2yqL" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { - "keccak256": "0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397", - "urls": [ - "bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9", - "dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol": { - "keccak256": "0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7", - "urls": [ - "bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f", - "dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70", - "urls": [ - "bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c", - "dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "keccak256": "0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2", - "urls": [ - "bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850", - "dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV" - ], - "license": "MIT" - }, - "src/GensToken.sol": { - "keccak256": "0xef8bcfdfbef520ad0b54b8c020ff176dcd15bbcd65f6a72961a8fd2bdf2870fb", - "urls": [ - "bzz-raw://e9b605aee0b2f9e0df66f800045e43712bf0cdaf6ef8c968d5ed8c6a6b2478bc", - "dweb:/ipfs/QmYPHJPKKEgACVdrgDa2L2U2Kc797Vq9Lf69WR8KHdbjhA" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": {} - }, - "ast": { - "absolutePath": "src/GensToken.sol", - "id": 54837, - "exportedSymbols": { - "ContextUpgradeable": [ - 46679 - ], - "ERC20Upgradeable": [ - 46633 - ], - "GensToken": [ - 54836 - ], - "IERC20": [ - 50288 - ], - "IERC20Errors": [ - 49600 - ], - "IERC20Metadata": [ - 50314 - ], - "Initializable": [ - 46016 - ] - }, - "nodeType": "SourceUnit", - "src": "33:381:45", - "nodes": [ - { - "id": 54804, - "nodeType": "PragmaDirective", - "src": "33:23:45", - "nodes": [], - "literals": [ - "solidity", - "^", - "0.8", - ".0" - ] - }, - { - "id": 54805, - "nodeType": "ImportDirective", - "src": "60:78:45", - "nodes": [], - "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol", - "file": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol", - "nameLocation": "-1:-1:-1", - "scope": 54837, - "sourceUnit": 46634, - "symbolAliases": [], - "unitAlias": "" - }, - { - "id": 54836, - "nodeType": "ContractDefinition", - "src": "142:270:45", - "nodes": [ - { - "id": 54822, - "nodeType": "FunctionDefinition", - "src": "188:126:45", - "nodes": [], - "body": { - "id": 54821, - "nodeType": "Block", - "src": "269:45:45", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 54817, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 54809, - "src": "293:4:45", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 54818, - "name": "symbol", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 54811, - "src": "299:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 54816, - "name": "__ERC20_init", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 46084, - "src": "280:12:45", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (string memory,string memory)" - } - }, - "id": 54819, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "280:26:45", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 54820, - "nodeType": "ExpressionStatement", - "src": "280:26:45" - } - ] - }, - "functionSelector": "4cd88b76", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 54814, - "kind": "modifierInvocation", - "modifierName": { - "id": 54813, - "name": "initializer", - "nameLocations": [ - "257:11:45" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 45870, - "src": "257:11:45" - }, - "nodeType": "ModifierInvocation", - "src": "257:11:45" - } - ], - "name": "initialize", - "nameLocation": "197:10:45", - "parameters": { - "id": 54812, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 54809, - "mutability": "mutable", - "name": "name", - "nameLocation": "222:4:45", - "nodeType": "VariableDeclaration", - "scope": 54822, - "src": "208:18:45", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 54808, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "208:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 54811, - "mutability": "mutable", - "name": "symbol", - "nameLocation": "242:6:45", - "nodeType": "VariableDeclaration", - "scope": 54822, - "src": "228:20:45", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 54810, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "228:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "207:42:45" - }, - "returnParameters": { - "id": 54815, - "nodeType": "ParameterList", - "parameters": [], - "src": "269:0:45" - }, - "scope": 54836, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "id": 54835, - "nodeType": "FunctionDefinition", - "src": "322:87:45", - "nodes": [], - "body": { - "id": 54834, - "nodeType": "Block", - "src": "373:36:45", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 54830, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 54824, - "src": "390:2:45", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 54831, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 54826, - "src": "394:6:45", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 54829, - "name": "_mint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 46465, - "src": "384:5:45", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 54832, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "384:17:45", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 54833, - "nodeType": "ExpressionStatement", - "src": "384:17:45" - } - ] - }, - "functionSelector": "40c10f19", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "mint", - "nameLocation": "331:4:45", - "parameters": { - "id": 54827, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 54824, - "mutability": "mutable", - "name": "to", - "nameLocation": "344:2:45", - "nodeType": "VariableDeclaration", - "scope": 54835, - "src": "336:10:45", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 54823, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "336:7:45", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 54826, - "mutability": "mutable", - "name": "amount", - "nameLocation": "356:6:45", - "nodeType": "VariableDeclaration", - "scope": 54835, - "src": "348:14:45", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 54825, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "348:7:45", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "335:28:45" - }, - "returnParameters": { - "id": 54828, - "nodeType": "ParameterList", - "parameters": [], - "src": "373:0:45" - }, - "scope": 54836, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 54806, - "name": "ERC20Upgradeable", - "nameLocations": [ - "164:16:45" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 46633, - "src": "164:16:45" - }, - "id": 54807, - "nodeType": "InheritanceSpecifier", - "src": "164:16:45" - } - ], - "canonicalName": "GensToken", - "contractDependencies": [], - "contractKind": "contract", - "fullyImplemented": true, - "linearizedBaseContracts": [ - 54836, - 46633, - 49600, - 50314, - 50288, - 46679, - 46016 - ], - "name": "GensToken", - "nameLocation": "151:9:45", - "scope": 54837, - "usedErrors": [ - 45779, - 45782, - 49570, - 49575, - 49580, - 49589, - 49594, - 49599 - ], - "usedEvents": [ - 45787, - 50222, - 50231 - ] - } - ], - "license": "MIT" - }, - "id": 45 -} \ No newline at end of file diff --git a/next-app/src/abi/LiquidityPool.json b/next-app/src/abi/LiquidityPool.json deleted file mode 100644 index d5625f8..0000000 --- a/next-app/src/abi/LiquidityPool.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"function","name":"addLiquidity","inputs":[{"name":"tokenAAmount","type":"uint256","internalType":"uint256"},{"name":"tokenBAmount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"getAmountOut","inputs":[{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"tokenIn","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPrice","inputs":[{"name":"tokenIn","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getReserves","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_tokenA","type":"address","internalType":"address"},{"name":"_tokenB","type":"address","internalType":"address"},{"name":"addressManager","type":"address","internalType":"address"},{"name":"_platformFee","type":"uint256","internalType":"uint256"},{"name":"_minimumLiquidity","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"platformFee","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"removeLiquidity","inputs":[{"name":"liquidity","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"swap","inputs":[{"name":"tokenIn","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"minAmountOut","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"tokenA","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"tokenB","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updatePlatformFee","inputs":[{"name":"_platformFee","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"LiquidityAdded","inputs":[{"name":"user","type":"address","indexed":true,"internalType":"address"},{"name":"amountTokenA","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amountTokenB","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"LiquidityRemoved","inputs":[{"name":"user","type":"address","indexed":true,"internalType":"address"},{"name":"amountTokenA","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amountTokenB","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Swap","inputs":[{"name":"user","type":"address","indexed":true,"internalType":"address"},{"name":"tokenIn","type":"address","indexed":false,"internalType":"address"},{"name":"amountIn","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"tokenOut","type":"address","indexed":false,"internalType":"address"},{"name":"amountOut","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]}],"bytecode":{"object":"0x6080604052348015600f57600080fd5b50611b0b8061001f6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c3578063a6b63eb81161007c578063a6b63eb81461030c578063a9059cbb1461031f578063aa0b598814610332578063dd62ed3e14610345578063f140a35a14610358578063f2fde38b1461036b57600080fd5b8063715018a6146102915780638da5cb5b1461029b57806395d89b41146102cb5780639c8f9f23146102d35780639cd441da146102e65780639f1d0f59146102f957600080fd5b806323b872dd1161011557806323b872dd1461020a57806326232a2e1461021d578063313ce56714610226578063449e815d146102355780635f64b55b1461024857806370a082311461025b57600080fd5b806306fdde03146101525780630902f1ac14610170578063095ea7b31461018b5780630fc63d10146101ae57806318160ddd146101d9575b600080fd5b61015a61037e565b604051610167919061166a565b60405180910390f35b60025460035460408051928352602083019190915201610167565b61019e6101993660046116d5565b610441565b6040519015158152602001610167565b6000546101c1906001600160a01b031681565b6040516001600160a01b039091168152602001610167565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610167565b61019e6102183660046116ff565b61045b565b6101fc60045481565b60405160128152602001610167565b6101fc6102433660046116d5565b61047f565b6001546101c1906001600160a01b031681565b6101fc61026936600461173b565b6001600160a01b03166000908152600080516020611a96833981519152602052604090205490565b610299610492565b005b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166101c1565b61015a6104a6565b6102996102e1366004611756565b6104e5565b6102996102f436600461176f565b61071d565b610299610307366004611791565b6108e2565b61029961031a3660046117c4565b610b96565b61019e61032d3660046116d5565b610d3e565b610299610340366004611756565b610d4c565b6101fc610353366004611819565b610d59565b6101fc61036636600461184c565b610da3565b61029961037936600461173b565b610e42565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020611a96833981519152916103bd9061186f565b80601f01602080910402602001604051908101604052809291908181526020018280546103e99061186f565b80156104365780601f1061040b57610100808354040283529160200191610436565b820191906000526020600020905b81548152906001019060200180831161041957829003601f168201915b505050505091505090565b60003361044f818585610e7d565b60019150505b92915050565b600033610469858285610e8a565b610474858585610ef0565b506001949350505050565b600061048b8284610da3565b9392505050565b61049a610f4f565b6104a46000610faa565b565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020611a96833981519152916103bd9061186f565b6104ed61101b565b600081116105425760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206c697175696469747920616d6f756e74000000000000000060448201526064015b60405180910390fd5b600061056c7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b60025461057990846118bf565b61058391906118ec565b905060006105af7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b6003546105bc90856118bf565b6105c691906118ec565b90506105d23384611053565b60005460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610623573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610647919061190e565b5060015460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bd919061190e565b506106c6611089565b604080518381526020810183905233917f96cd817c6329656790ef8fba7675405193677d39619571282f5e21f3a98cd059910160405180910390a2505061071a6001600080516020611ab683398151915255565b50565b61072561101b565b6000821180156107355750600081115b6107735760405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420616d6f756e747360881b6044820152606401610539565b6000546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee919061190e565b506001546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086a919061190e565b506000610877838361117d565b9050610883338261119f565b61088b611089565b604080518481526020810184905233917fac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee45910160405180910390a2506108de6001600080516020611ab683398151915255565b5050565b6108ea61101b565b6000546001600160a01b038481169116148061091357506001546001600160a01b038481169116145b6109575760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401610539565b6000821161099e5760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081a5b9c1d5d08185b5bdd5b9d60621b6044820152606401610539565b600080546001600160a01b038581169116146109c5576000546001600160a01b03166109d2565b6001546001600160a01b03165b905060006109e08486610da3565b905082811015610a325760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e74206f757470757420616d6f756e740000000000006044820152606401610539565b6040516323b872dd60e01b8152336004820152306024820152604481018590526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa9919061190e565b5060405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610af7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1b919061190e565b50610b24611089565b604080516001600160a01b0387811682526020820187905284168183015260608101839052905133917f5380cf97d8f645d3c4896da60c053458dca03a3a31cec642ac80e1ddf0d8d02a919081900360800190a25050610b916001600080516020611ab683398151915255565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610bdc5750825b905060008267ffffffffffffffff166001148015610bf95750303b155b905081158015610c07575080155b15610c255760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c4f57845460ff60401b1916600160401b1785555b610ca1604051806040016040528060158152602001744c697175696469747920506f6f6c20546f6b656e7360581b8152506040518060400160405280600381526020016213141560ea1b8152506111d5565b610ca96111e7565b610cb2886111f7565b600080546001600160a01b03808d166001600160a01b03199283161790925560018054928c1692909116919091179055600487905560058690558315610d3257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b60003361044f818585610ef0565b610d54610f4f565b600455565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6000805481906001600160a01b03848116911614610dc357600354610dc7565b6002545b60008054919250906001600160a01b03858116911614610de957600254610ded565b6003545b90506000612710600454612710610e049190611930565b610e0e90886118bf565b610e1891906118ec565b9050610e248184611943565b610e2e83836118bf565b610e3891906118ec565b9695505050505050565b610e4a610f4f565b6001600160a01b038116610e7457604051631e4fbdf760e01b815260006004820152602401610539565b61071a81610faa565b610b918383836001611208565b6000610e968484610d59565b90506000198114610eea5781811015610edb57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610539565b610eea84848484036000611208565b50505050565b6001600160a01b038316610f1a57604051634b637e8f60e11b815260006004820152602401610539565b6001600160a01b038216610f445760405163ec442f0560e01b815260006004820152602401610539565b610b918383836112f0565b33610f817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104a45760405163118cdaa760e01b8152336004820152602401610539565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600080516020611ab683398151915280546001190161104d57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6001600160a01b03821661107d57604051634b637e8f60e11b815260006004820152602401610539565b6108de826000836112f0565b6000546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156110d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f59190611956565b6002556001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611140573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111649190611956565b600355565b6001600080516020611ab683398151915255565b60055460009061119561119084866118bf565b61142e565b61048b9190611930565b6001600160a01b0382166111c95760405163ec442f0560e01b815260006004820152602401610539565b6108de600083836112f0565b6111dd611516565b6108de828261155f565b6111ef611516565b6104a46115b0565b6111ff611516565b61071a816115b8565b600080516020611a968339815191526001600160a01b0385166112415760405163e602df0560e01b815260006004820152602401610539565b6001600160a01b03841661126b57604051634a1406b160e11b815260006004820152602401610539565b6001600160a01b038086166000908152600183016020908152604080832093881683529290522083905581156112e957836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516112e091815260200190565b60405180910390a35b5050505050565b600080516020611a968339815191526001600160a01b03841661132c57818160020160008282546113219190611943565b9091555061139e9050565b6001600160a01b0384166000908152602082905260409020548281101561137f5760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610539565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b0383166113bc5760028101805483900390556113db565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161142091815260200190565b60405180910390a350505050565b60008160000361144057506000919050565b6000600161144d846115c0565b901c6001901b90506001818481611466576114666118d6565b048201901c9050600181848161147e5761147e6118d6565b048201901c90506001818481611496576114966118d6565b048201901c905060018184816114ae576114ae6118d6565b048201901c905060018184816114c6576114c66118d6565b048201901c905060018184816114de576114de6118d6565b048201901c905060018184816114f6576114f66118d6565b048201901c905061048b81828581611510576115106118d6565b04611654565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166104a457604051631afcd79f60e31b815260040160405180910390fd5b611567611516565b600080516020611a968339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036115a184826119d5565b5060048101610eea83826119d5565b611169611516565b610e4a611516565b600080608083901c156115d557608092831c92015b604083901c156115e757604092831c92015b602083901c156115f957602092831c92015b601083901c1561160b57601092831c92015b600883901c1561161d57600892831c92015b600483901c1561162f57600492831c92015b600283901c1561164157600292831c92015b600183901c156104555760010192915050565b6000818310611663578161048b565b5090919050565b60006020808352835180602085015260005b818110156116985785810183015185820160400152820161167c565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146116d057600080fd5b919050565b600080604083850312156116e857600080fd5b6116f1836116b9565b946020939093013593505050565b60008060006060848603121561171457600080fd5b61171d846116b9565b925061172b602085016116b9565b9150604084013590509250925092565b60006020828403121561174d57600080fd5b61048b826116b9565b60006020828403121561176857600080fd5b5035919050565b6000806040838503121561178257600080fd5b50508035926020909101359150565b6000806000606084860312156117a657600080fd5b6117af846116b9565b95602085013595506040909401359392505050565b600080600080600060a086880312156117dc57600080fd5b6117e5866116b9565b94506117f3602087016116b9565b9350611801604087016116b9565b94979396509394606081013594506080013592915050565b6000806040838503121561182c57600080fd5b611835836116b9565b9150611843602084016116b9565b90509250929050565b6000806040838503121561185f57600080fd5b82359150611843602084016116b9565b600181811c9082168061188357607f821691505b6020821081036118a357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610455576104556118a9565b634e487b7160e01b600052601260045260246000fd5b60008261190957634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561192057600080fd5b8151801515811461048b57600080fd5b81810381811115610455576104556118a9565b80820180821115610455576104556118a9565b60006020828403121561196857600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b601f821115610b91576000816000526020600020601f850160051c810160208610156119ae5750805b601f850160051c820191505b818110156119cd578281556001016119ba565b505050505050565b815167ffffffffffffffff8111156119ef576119ef61196f565b611a03816119fd845461186f565b84611985565b602080601f831160018114611a385760008415611a205750858301515b600019600386901b1c1916600185901b1785556119cd565b600085815260208120601f198616915b82811015611a6757888601518255948401946001909101908401611a48565b5085821015611a855787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220e0423eae0aa90fc5ee1352ff74fa5459728b920dceca8eed2d5216ce9c6da6d364736f6c63430008190033","sourceMap":"421:4136:46:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c3578063a6b63eb81161007c578063a6b63eb81461030c578063a9059cbb1461031f578063aa0b598814610332578063dd62ed3e14610345578063f140a35a14610358578063f2fde38b1461036b57600080fd5b8063715018a6146102915780638da5cb5b1461029b57806395d89b41146102cb5780639c8f9f23146102d35780639cd441da146102e65780639f1d0f59146102f957600080fd5b806323b872dd1161011557806323b872dd1461020a57806326232a2e1461021d578063313ce56714610226578063449e815d146102355780635f64b55b1461024857806370a082311461025b57600080fd5b806306fdde03146101525780630902f1ac14610170578063095ea7b31461018b5780630fc63d10146101ae57806318160ddd146101d9575b600080fd5b61015a61037e565b604051610167919061166a565b60405180910390f35b60025460035460408051928352602083019190915201610167565b61019e6101993660046116d5565b610441565b6040519015158152602001610167565b6000546101c1906001600160a01b031681565b6040516001600160a01b039091168152602001610167565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610167565b61019e6102183660046116ff565b61045b565b6101fc60045481565b60405160128152602001610167565b6101fc6102433660046116d5565b61047f565b6001546101c1906001600160a01b031681565b6101fc61026936600461173b565b6001600160a01b03166000908152600080516020611a96833981519152602052604090205490565b610299610492565b005b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166101c1565b61015a6104a6565b6102996102e1366004611756565b6104e5565b6102996102f436600461176f565b61071d565b610299610307366004611791565b6108e2565b61029961031a3660046117c4565b610b96565b61019e61032d3660046116d5565b610d3e565b610299610340366004611756565b610d4c565b6101fc610353366004611819565b610d59565b6101fc61036636600461184c565b610da3565b61029961037936600461173b565b610e42565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020611a96833981519152916103bd9061186f565b80601f01602080910402602001604051908101604052809291908181526020018280546103e99061186f565b80156104365780601f1061040b57610100808354040283529160200191610436565b820191906000526020600020905b81548152906001019060200180831161041957829003601f168201915b505050505091505090565b60003361044f818585610e7d565b60019150505b92915050565b600033610469858285610e8a565b610474858585610ef0565b506001949350505050565b600061048b8284610da3565b9392505050565b61049a610f4f565b6104a46000610faa565b565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020611a96833981519152916103bd9061186f565b6104ed61101b565b600081116105425760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206c697175696469747920616d6f756e74000000000000000060448201526064015b60405180910390fd5b600061056c7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b60025461057990846118bf565b61058391906118ec565b905060006105af7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b6003546105bc90856118bf565b6105c691906118ec565b90506105d23384611053565b60005460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610623573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610647919061190e565b5060015460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bd919061190e565b506106c6611089565b604080518381526020810183905233917f96cd817c6329656790ef8fba7675405193677d39619571282f5e21f3a98cd059910160405180910390a2505061071a6001600080516020611ab683398151915255565b50565b61072561101b565b6000821180156107355750600081115b6107735760405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420616d6f756e747360881b6044820152606401610539565b6000546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee919061190e565b506001546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086a919061190e565b506000610877838361117d565b9050610883338261119f565b61088b611089565b604080518481526020810184905233917fac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee45910160405180910390a2506108de6001600080516020611ab683398151915255565b5050565b6108ea61101b565b6000546001600160a01b038481169116148061091357506001546001600160a01b038481169116145b6109575760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401610539565b6000821161099e5760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081a5b9c1d5d08185b5bdd5b9d60621b6044820152606401610539565b600080546001600160a01b038581169116146109c5576000546001600160a01b03166109d2565b6001546001600160a01b03165b905060006109e08486610da3565b905082811015610a325760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e74206f757470757420616d6f756e740000000000006044820152606401610539565b6040516323b872dd60e01b8152336004820152306024820152604481018590526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa9919061190e565b5060405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610af7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1b919061190e565b50610b24611089565b604080516001600160a01b0387811682526020820187905284168183015260608101839052905133917f5380cf97d8f645d3c4896da60c053458dca03a3a31cec642ac80e1ddf0d8d02a919081900360800190a25050610b916001600080516020611ab683398151915255565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610bdc5750825b905060008267ffffffffffffffff166001148015610bf95750303b155b905081158015610c07575080155b15610c255760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c4f57845460ff60401b1916600160401b1785555b610ca1604051806040016040528060158152602001744c697175696469747920506f6f6c20546f6b656e7360581b8152506040518060400160405280600381526020016213141560ea1b8152506111d5565b610ca96111e7565b610cb2886111f7565b600080546001600160a01b03808d166001600160a01b03199283161790925560018054928c1692909116919091179055600487905560058690558315610d3257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b60003361044f818585610ef0565b610d54610f4f565b600455565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6000805481906001600160a01b03848116911614610dc357600354610dc7565b6002545b60008054919250906001600160a01b03858116911614610de957600254610ded565b6003545b90506000612710600454612710610e049190611930565b610e0e90886118bf565b610e1891906118ec565b9050610e248184611943565b610e2e83836118bf565b610e3891906118ec565b9695505050505050565b610e4a610f4f565b6001600160a01b038116610e7457604051631e4fbdf760e01b815260006004820152602401610539565b61071a81610faa565b610b918383836001611208565b6000610e968484610d59565b90506000198114610eea5781811015610edb57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610539565b610eea84848484036000611208565b50505050565b6001600160a01b038316610f1a57604051634b637e8f60e11b815260006004820152602401610539565b6001600160a01b038216610f445760405163ec442f0560e01b815260006004820152602401610539565b610b918383836112f0565b33610f817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104a45760405163118cdaa760e01b8152336004820152602401610539565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600080516020611ab683398151915280546001190161104d57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6001600160a01b03821661107d57604051634b637e8f60e11b815260006004820152602401610539565b6108de826000836112f0565b6000546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156110d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f59190611956565b6002556001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611140573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111649190611956565b600355565b6001600080516020611ab683398151915255565b60055460009061119561119084866118bf565b61142e565b61048b9190611930565b6001600160a01b0382166111c95760405163ec442f0560e01b815260006004820152602401610539565b6108de600083836112f0565b6111dd611516565b6108de828261155f565b6111ef611516565b6104a46115b0565b6111ff611516565b61071a816115b8565b600080516020611a968339815191526001600160a01b0385166112415760405163e602df0560e01b815260006004820152602401610539565b6001600160a01b03841661126b57604051634a1406b160e11b815260006004820152602401610539565b6001600160a01b038086166000908152600183016020908152604080832093881683529290522083905581156112e957836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516112e091815260200190565b60405180910390a35b5050505050565b600080516020611a968339815191526001600160a01b03841661132c57818160020160008282546113219190611943565b9091555061139e9050565b6001600160a01b0384166000908152602082905260409020548281101561137f5760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610539565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b0383166113bc5760028101805483900390556113db565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161142091815260200190565b60405180910390a350505050565b60008160000361144057506000919050565b6000600161144d846115c0565b901c6001901b90506001818481611466576114666118d6565b048201901c9050600181848161147e5761147e6118d6565b048201901c90506001818481611496576114966118d6565b048201901c905060018184816114ae576114ae6118d6565b048201901c905060018184816114c6576114c66118d6565b048201901c905060018184816114de576114de6118d6565b048201901c905060018184816114f6576114f66118d6565b048201901c905061048b81828581611510576115106118d6565b04611654565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166104a457604051631afcd79f60e31b815260040160405180910390fd5b611567611516565b600080516020611a968339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036115a184826119d5565b5060048101610eea83826119d5565b611169611516565b610e4a611516565b600080608083901c156115d557608092831c92015b604083901c156115e757604092831c92015b602083901c156115f957602092831c92015b601083901c1561160b57601092831c92015b600883901c1561161d57600892831c92015b600483901c1561162f57600492831c92015b600283901c1561164157600292831c92015b600183901c156104555760010192915050565b6000818310611663578161048b565b5090919050565b60006020808352835180602085015260005b818110156116985785810183015185820160400152820161167c565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146116d057600080fd5b919050565b600080604083850312156116e857600080fd5b6116f1836116b9565b946020939093013593505050565b60008060006060848603121561171457600080fd5b61171d846116b9565b925061172b602085016116b9565b9150604084013590509250925092565b60006020828403121561174d57600080fd5b61048b826116b9565b60006020828403121561176857600080fd5b5035919050565b6000806040838503121561178257600080fd5b50508035926020909101359150565b6000806000606084860312156117a657600080fd5b6117af846116b9565b95602085013595506040909401359392505050565b600080600080600060a086880312156117dc57600080fd5b6117e5866116b9565b94506117f3602087016116b9565b9350611801604087016116b9565b94979396509394606081013594506080013592915050565b6000806040838503121561182c57600080fd5b611835836116b9565b9150611843602084016116b9565b90509250929050565b6000806040838503121561185f57600080fd5b82359150611843602084016116b9565b600181811c9082168061188357607f821691505b6020821081036118a357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610455576104556118a9565b634e487b7160e01b600052601260045260246000fd5b60008261190957634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561192057600080fd5b8151801515811461048b57600080fd5b81810381811115610455576104556118a9565b80820180821115610455576104556118a9565b60006020828403121561196857600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b601f821115610b91576000816000526020600020601f850160051c810160208610156119ae5750805b601f850160051c820191505b818110156119cd578281556001016119ba565b505050505050565b815167ffffffffffffffff8111156119ef576119ef61196f565b611a03816119fd845461186f565b84611985565b602080601f831160018114611a385760008415611a205750858301515b600019600386901b1c1916600185901b1785556119cd565b600085815260208120601f198616915b82811015611a6757888601518255948401946001909101908401611a48565b5085821015611a855787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220e0423eae0aa90fc5ee1352ff74fa5459728b920dceca8eed2d5216ce9c6da6d364736f6c63430008190033","sourceMap":"421:4136:46:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2716:144:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4173:110:46;4256:8;;4266;;4173:110;;;741:25:54;;;797:2;782:18;;775:34;;;;714:18;4173:110:46;567:248:54;5210:186:23;;;;;;:::i;:::-;;:::i;:::-;;;1422:14:54;;1415:22;1397:41;;1385:2;1370:18;5210:186:23;1257:187:54;534:21:46;;;;;-1:-1:-1;;;;;534:21:46;;;;;;-1:-1:-1;;;;;1613:32:54;;;1595:51;;1583:2;1568:18;534:21:46;1449:203:54;3896:152:23;4027:14;;3896:152;;;1803:25:54;;;1791:2;1776:18;3896:152:23;1657:177:54;5988:244:23;;;;;;:::i;:::-;;:::i;652:26:46:-;;;;;;3754:82:23;;;3827:2;2314:36:54;;2302:2;2287:18;3754:82:23;2172:184:54;4291:142:46;;;;;;:::i;:::-;;:::i;562:21::-;;;;;-1:-1:-1;;;;;562:21:46;;;4106:171:23;;;;;;:::i;:::-;-1:-1:-1;;;;;4250:20:23;4171:7;4250:20;;;-1:-1:-1;;;;;;;;;;;4250:20:23;;;;;;;4106:171;3155:101:19;;;:::i;:::-;;2441:144;1313:22;2570:8;-1:-1:-1;;;;;2570:8:19;2441:144;;2973:148:23;;;:::i;2090:565:46:-;;;;;;:::i;:::-;;:::i;1512:570::-;;;;;;:::i;:::-;;:::i;2663:708::-;;;;;;:::i;:::-;;:::i;1028:476::-;;;;;;:::i;:::-;;:::i;4472:178:23:-;;;;;;:::i;:::-;;:::i;4441:113:46:-;;;;;;:::i;:::-;;:::i;4708:195:23:-;;;;;;:::i;:::-;;:::i;3379:399:46:-;;;;;;:::i;:::-;;:::i;3405:215:19:-;;;;;;:::i;:::-;;:::i;2716:144:23:-;2846:7;2839:14;;2761:13;;-1:-1:-1;;;;;;;;;;;2064:20:23;2839:14;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2716:144;:::o;5210:186::-;5283:4;966:10:24;5337:31:23;966:10:24;5353:7:23;5362:5;5337:8;:31::i;:::-;5385:4;5378:11;;;5210:186;;;;;:::o;5988:244::-;6075:4;966:10:24;6131:37:23;6147:4;966:10:24;6162:5:23;6131:15;:37::i;:::-;6178:26;6188:4;6194:2;6198:5;6178:9;:26::i;:::-;-1:-1:-1;6221:4:23;;5988:244;-1:-1:-1;;;;5988:244:23:o;4291:142:46:-;4367:7;4394:31;4407:8;4417:7;4394:12;:31::i;:::-;4387:38;4291:142;-1:-1:-1;;;4291:142:46:o;3155:101:19:-;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;:::-;3155:101::o:0;2973:148:23:-;3105:9;3098:16;;3020:13;;-1:-1:-1;;;;;;;;;;;2064:20:23;3098:16;;;:::i;2090:565:46:-;3395:21:26;:19;:21::i;:::-;2187:1:46::1;2175:9;:13;2167:50;;;::::0;-1:-1:-1;;;2167:50:46;;4905:2:54;2167:50:46::1;::::0;::::1;4887:21:54::0;4944:2;4924:18;;;4917:30;4983:26;4963:18;;;4956:54;5027:18;;2167:50:46::1;;;;;;;;;2230:20;2278:13;4027:14:23::0;;;3896:152;2278:13:46::1;2266:8;::::0;2254:20:::1;::::0;:9;:20:::1;:::i;:::-;2253:38;;;;:::i;:::-;2230:61;;2302:20;2350:13;4027:14:23::0;;;3896:152;2350:13:46::1;2338:8;::::0;2326:20:::1;::::0;:9;:20:::1;:::i;:::-;2325:38;;;;:::i;:::-;2302:61;;2374:28;2380:10;2392:9;2374:5;:28::i;:::-;2432:6;::::0;2415:59:::1;::::0;-1:-1:-1;;;2415:59:46;;2449:10:::1;2415:59;::::0;::::1;5889:51:54::0;5956:18;;;5949:34;;;-1:-1:-1;;;;;2432:6:46;;::::1;::::0;2415:33:::1;::::0;5862:18:54;;2415:59:46::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;2502:6:46::1;::::0;2485:59:::1;::::0;-1:-1:-1;;;2485:59:46;;2519:10:::1;2485:59;::::0;::::1;5889:51:54::0;5956:18;;;5949:34;;;-1:-1:-1;;;;;2502:6:46;;::::1;::::0;2485:33:::1;::::0;5862:18:54;;2485:59:46::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2557:16;:14;:16::i;:::-;2591:56;::::0;;741:25:54;;;797:2;782:18;;775:34;;;2608:10:46::1;::::0;2591:56:::1;::::0;714:18:54;2591:56:46::1;;;;;;;2156:499;;3437:20:26::0;1949:1;-1:-1:-1;;;;;;;;;;;4113:23:26;3860:283;3437:20;2090:565:46;:::o;1512:570::-;3395:21:26;:19;:21::i;:::-;1634:1:46::1;1619:12;:16;:36;;;;;1654:1;1639:12;:16;1619:36;1611:64;;;::::0;-1:-1:-1;;;1611:64:46;;6478:2:54;1611:64:46::1;::::0;::::1;6460:21:54::0;6517:2;6497:18;;;6490:30;-1:-1:-1;;;6536:18:54;;;6529:45;6591:18;;1611:64:46::1;6276:339:54::0;1611:64:46::1;1705:6;::::0;1688:78:::1;::::0;-1:-1:-1;;;1688:78:46;;1726:10:::1;1688:78;::::0;::::1;6860:34:54::0;1746:4:46::1;6910:18:54::0;;;6903:43;6962:18;;;6955:34;;;-1:-1:-1;;;;;1705:6:46;;::::1;::::0;1688:37:::1;::::0;6795:18:54;;1688:78:46::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;1794:6:46::1;::::0;1777:78:::1;::::0;-1:-1:-1;;;1777:78:46;;1815:10:::1;1777:78;::::0;::::1;6860:34:54::0;1835:4:46::1;6910:18:54::0;;;6903:43;6962:18;;;6955:34;;;-1:-1:-1;;;;;1794:6:46;;::::1;::::0;1777:37:::1;::::0;6795:18:54;;1777:78:46::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1868:17;1888:46;1907:12;1921;1888:18;:46::i;:::-;1868:66;;1945:28;1951:10;1963:9;1945:5;:28::i;:::-;1986:16;:14;:16::i;:::-;2020:54;::::0;;741:25:54;;;797:2;782:18;;775:34;;;2035:10:46::1;::::0;2020:54:::1;::::0;714:18:54;2020:54:46::1;;;;;;;1600:482;3437:20:26::0;1949:1;-1:-1:-1;;;;;;;;;;;4113:23:26;3860:283;3437:20;1512:570:46;;:::o;2663:708::-;3395:21:26;:19;:21::i;:::-;2786:6:46::1;::::0;-1:-1:-1;;;;;2775:17:46;;::::1;2786:6:::0;::::1;2775:17;::::0;:38:::1;;-1:-1:-1::0;2807:6:46::1;::::0;-1:-1:-1;;;;;2796:17:46;;::::1;2807:6:::0;::::1;2796:17;2775:38;2767:72;;;::::0;-1:-1:-1;;;2767:72:46;;7202:2:54;2767:72:46::1;::::0;::::1;7184:21:54::0;7241:2;7221:18;;;7214:30;-1:-1:-1;;;7260:18:54;;;7253:51;7321:18;;2767:72:46::1;7000:345:54::0;2767:72:46::1;2869:1;2858:8;:12;2850:45;;;::::0;-1:-1:-1;;;2850:45:46;;7552:2:54;2850:45:46::1;::::0;::::1;7534:21:54::0;7591:2;7571:18;;;7564:30;-1:-1:-1;;;7610:18:54;;;7603:50;7670:18;;2850:45:46::1;7350:344:54::0;2850:45:46::1;2908:16;2939:6:::0;;-1:-1:-1;;;;;2928:17:46;;::::1;2939:6:::0;::::1;2928:17;2927:37;;2958:6;::::0;-1:-1:-1;;;;;2958:6:46::1;2927:37;;;2949:6;::::0;-1:-1:-1;;;;;2949:6:46::1;2927:37;2908:56;;2975:17;2995:31;3008:8;3018:7;2995:12;:31::i;:::-;2975:51;;3060:12;3047:9;:25;;3039:64;;;::::0;-1:-1:-1;;;3039:64:46;;7901:2:54;3039:64:46::1;::::0;::::1;7883:21:54::0;7940:2;7920:18;;;7913:30;7979:28;7959:18;;;7952:56;8025:18;;3039:64:46::1;7699:350:54::0;3039:64:46::1;3116:75;::::0;-1:-1:-1;;;3116:75:46;;3155:10:::1;3116:75;::::0;::::1;6860:34:54::0;3175:4:46::1;6910:18:54::0;;;6903:43;6962:18;;;6955:34;;;-1:-1:-1;;;;;3116:38:46;::::1;::::0;::::1;::::0;6795:18:54;;3116:75:46::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;3202:58:46::1;::::0;-1:-1:-1;;;3202:58:46;;3238:10:::1;3202:58;::::0;::::1;5889:51:54::0;5956:18;;;5949:34;;;-1:-1:-1;;;;;3202:35:46;::::1;::::0;::::1;::::0;5862:18:54;;3202:58:46::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3273:16;:14;:16::i;:::-;3307:56;::::0;;-1:-1:-1;;;;;8341:15:54;;;8323:34;;8388:2;8373:18;;8366:34;;;8436:15;;8416:18;;;8409:43;8483:2;8468:18;;8461:34;;;3307:56:46;;3312:10:::1;::::0;3307:56:::1;::::0;;;;;8272:3:54;3307:56:46;;::::1;2756:615;;3437:20:26::0;1949:1;-1:-1:-1;;;;;;;;;;;4113:23:26;3860:283;3437:20;2663:708:46;;;:::o;1028:476::-;8870:21:22;4302:15;;-1:-1:-1;;;4302:15:22;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:22;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:22;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:22;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:22;-1:-1:-1;;;5013:22:22;;;4979:67;1237:44:46::1;;;;;;;;;;;;;;-1:-1:-1::0;;;1237:44:46::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;1237:44:46::1;;::::0;:12:::1;:44::i;:::-;1292:24;:22;:24::i;:::-;1327:30;1342:14;1327;:30::i;:::-;1368:6;:16:::0;;-1:-1:-1;;;;;1368:16:46;;::::1;-1:-1:-1::0;;;;;;1368:16:46;;::::1;;::::0;;;;1395;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;1422:11:::1;:26:::0;;;1459:17:::1;:37:::0;;;5066:101:22;;;;5100:23;;-1:-1:-1;;;;5100:23:22;;;5142:14;;-1:-1:-1;8659:50:54;;5142:14:22;;8647:2:54;8632:18;5142:14:22;;;;;;;5066:101;4092:1081;;;;;1028:476:46;;;;;:::o;4472:178:23:-;4541:4;966:10:24;4595:27:23;966:10:24;4612:2:23;4616:5;4595:9;:27::i;4441:113:46:-;2334:13:19;:11;:13::i;:::-;4520:11:46::1;:26:::0;4441:113::o;4708:195:23:-;-1:-1:-1;;;;;4867:20:23;;;4788:7;4867:20;;;:13;:20;;;;;;;;:29;;;;;;;;;;;;;4708:195::o;3379:399:46:-;3457:7;3509:6;;3457:7;;-1:-1:-1;;;;;3498:17:46;;;3509:6;;3498:17;3497:41;;3530:8;;3497:41;;;3519:8;;3497:41;3549:18;3582:6;;3477:61;;-1:-1:-1;3549:18:46;-1:-1:-1;;;;;3571:17:46;;;3582:6;;3571:17;3570:41;;3603:8;;3570:41;;;3592:8;;3570:41;3549:62;;3622:23;3685:5;3669:11;;3661:5;:19;;;;:::i;:::-;3649:32;;:8;:32;:::i;:::-;3648:42;;;;:::i;:::-;3622:68;-1:-1:-1;3742:27:46;3622:68;3742:9;:27;:::i;:::-;3709:28;3727:10;3709:15;:28;:::i;:::-;3708:62;;;;:::i;:::-;3701:69;3379:399;-1:-1:-1;;;;;;3379:399:46:o;3405:215:19:-;2334:13;:11;:13::i;:::-;-1:-1:-1;;;;;3489:22:19;::::1;3485:91;;3534:31;::::0;-1:-1:-1;;;3534:31:19;;3562:1:::1;3534:31;::::0;::::1;1595:51:54::0;1568:18;;3534:31:19::1;1449:203:54::0;3485:91:19::1;3585:28;3604:8;3585:18;:28::i;10001:128:23:-:0;10085:37;10094:5;10101:7;10110:5;10117:4;10085:8;:37::i;11745:477::-;11844:24;11871:25;11881:5;11888:7;11871:9;:25::i;:::-;11844:52;;-1:-1:-1;;11910:16:23;:37;11906:310;;11986:5;11967:16;:24;11963:130;;;12018:60;;-1:-1:-1;;;12018:60:23;;-1:-1:-1;;;;;9203:32:54;;12018:60:23;;;9185:51:54;9252:18;;;9245:34;;;9295:18;;;9288:34;;;9158:18;;12018:60:23;8983:345:54;11963:130:23;12134:57;12143:5;12150:7;12178:5;12159:16;:24;12185:5;12134:8;:57::i;:::-;11834:388;11745:477;;;:::o;6605:300::-;-1:-1:-1;;;;;6688:18:23;;6684:86;;6729:30;;-1:-1:-1;;;6729:30:23;;6756:1;6729:30;;;1595:51:54;1568:18;;6729:30:23;1449:203:54;6684:86:23;-1:-1:-1;;;;;6783:16:23;;6779:86;;6822:32;;-1:-1:-1;;;6822:32:23;;6851:1;6822:32;;;1595:51:54;1568:18;;6822:32:23;1449:203:54;6779:86:23;6874:24;6882:4;6888:2;6892:5;6874:7;:24::i;2658:162:19:-;966:10:24;2717:7:19;1313:22;2570:8;-1:-1:-1;;;;;2570:8:19;;2441:144;2717:7;-1:-1:-1;;;;;2717:23:19;;2713:101;;2763:40;;-1:-1:-1;;;2763:40:19;;966:10:24;2763:40:19;;;1595:51:54;1568:18;;2763:40:19;1449:203:54;3774:248:19;1313:22;3923:8;;-1:-1:-1;;;;;;3941:19:19;;-1:-1:-1;;;;;3941:19:19;;;;;;;;3975:40;;3923:8;;;;;3975:40;;3847:24;;3975:40;3837:185;;3774:248;:::o;3470:384:26:-;-1:-1:-1;;;;;;;;;;;3670:9:26;;-1:-1:-1;;3670:20:26;3666:88;;3713:30;;-1:-1:-1;;;3713:30:26;;;;;;;;;;;3666:88;1991:1;3828:19;;3470:384::o;9259:206:23:-;-1:-1:-1;;;;;9329:21:23;;9325:89;;9373:30;;-1:-1:-1;;;9373:30:23;;9400:1;9373:30;;;1595:51:54;1568:18;;9373:30:23;1449:203:54;9325:89:23;9423:35;9431:7;9448:1;9452:5;9423:7;:35::i;3786:184:46:-;3859:6;;3842:49;;-1:-1:-1;;;3842:49:46;;3885:4;3842:49;;;1595:51:54;-1:-1:-1;;;;;3859:6:46;;;;3842:34;;1568:18:54;;3842:49:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3831:8;:60;3930:6;;3913:49;;-1:-1:-1;;;3913:49:46;;3956:4;3913:49;;;1595:51:54;-1:-1:-1;;;;;3930:6:46;;;;3913:34;;1568:18:54;;3913:49:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3902:8;:60;3786:184::o;3860:283:26:-;1949:1;-1:-1:-1;;;;;;;;;;;4113:23:26;3860:283::o;3978:187:46:-;4140:17;;4072:7;;4099:38;4109:27;4124:12;4109;:27;:::i;:::-;4099:9;:38::i;:::-;:58;;;;:::i;8733:208:23:-;-1:-1:-1;;;;;8803:21:23;;8799:91;;8847:32;;-1:-1:-1;;;8847:32:23;;8876:1;8847:32;;;1595:51:54;1568:18;;8847:32:23;1449:203:54;8799:91:23;8899:35;8915:1;8919:7;8928:5;8899:7;:35::i;2282:147::-;6931:20:22;:18;:20::i;:::-;2384:38:23::1;2407:5;2414:7;2384:22;:38::i;2684:111:26:-:0;6931:20:22;:18;:20::i;:::-;2754:34:26::1;:32;:34::i;1847:127:19:-:0;6931:20:22;:18;:20::i;:::-;1929:38:19::1;1954:12;1929:24;:38::i;10976:487:23:-:0;-1:-1:-1;;;;;;;;;;;;;;;;11141:19:23;;11137:89;;11183:32;;-1:-1:-1;;;11183:32:23;;11212:1;11183:32;;;1595:51:54;1568:18;;11183:32:23;1449:203:54;11137:89:23;-1:-1:-1;;;;;11239:21:23;;11235:90;;11283:31;;-1:-1:-1;;;11283:31:23;;11311:1;11283:31;;;1595:51:54;1568:18;;11283:31:23;1449:203:54;11235:90:23;-1:-1:-1;;;;;11334:20:23;;;;;;;:13;;;:20;;;;;;;;:29;;;;;;;;;:37;;;11381:76;;;;11431:7;-1:-1:-1;;;;;11415:31:23;11424:5;-1:-1:-1;;;;;11415:31:23;;11440:5;11415:31;;;;1803:25:54;;1791:2;1776:18;;1657:177;11415:31:23;;;;;;;;11381:76;11074:389;10976:487;;;;:::o;7220:1170::-;-1:-1:-1;;;;;;;;;;;;;;;;7362:18:23;;7358:546;;7516:5;7498:1;:14;;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;7358:546:23;;-1:-1:-1;7358:546:23;;-1:-1:-1;;;;;7574:17:23;;7552:19;7574:17;;;;;;;;;;;7609:19;;;7605:115;;;7655:50;;-1:-1:-1;;;7655:50:23;;-1:-1:-1;;;;;9203:32:54;;7655:50:23;;;9185:51:54;9252:18;;;9245:34;;;9295:18;;;9288:34;;;9158:18;;7655:50:23;8983:345:54;7605:115:23;-1:-1:-1;;;;;7840:17:23;;:11;:17;;;;;;;;;;7860:19;;;;7840:39;;7358:546;-1:-1:-1;;;;;7918:16:23;;7914:429;;8081:14;;;:23;;;;;;;7914:429;;;-1:-1:-1;;;;;8294:15:23;;:11;:15;;;;;;;;;;:24;;;;;;7914:429;8373:2;-1:-1:-1;;;;;8358:25:23;8367:4;-1:-1:-1;;;;;8358:25:23;;8377:5;8358:25;;;;1803::54;;1791:2;1776:18;;1657:177;8358:25:23;;;;;;;;7295:1095;7220:1170;;;:::o;8587:1642:40:-;8635:7;8658:1;8663;8658:6;8654:45;;-1:-1:-1;8687:1:40;;8587:1642;-1:-1:-1;8587:1642:40:o;8654:45::-;9378:14;9412:1;9401:7;9406:1;9401:4;:7::i;:::-;:12;;9395:1;:19;;9378:36;;9873:1;9862:6;9858:1;:10;;;;;:::i;:::-;;9849:6;:19;9848:26;;9839:35;;9922:1;9911:6;9907:1;:10;;;;;:::i;:::-;;9898:6;:19;9897:26;;9888:35;;9971:1;9960:6;9956:1;:10;;;;;:::i;:::-;;9947:6;:19;9946:26;;9937:35;;10020:1;10009:6;10005:1;:10;;;;;:::i;:::-;;9996:6;:19;9995:26;;9986:35;;10069:1;10058:6;10054:1;:10;;;;;:::i;:::-;;10045:6;:19;10044:26;;10035:35;;10118:1;10107:6;10103:1;:10;;;;;:::i;:::-;;10094:6;:19;10093:26;;10084:35;;10167:1;10156:6;10152:1;:10;;;;;:::i;:::-;;10143:6;:19;10142:26;;10133:35;;10189:23;10193:6;10205;10201:1;:10;;;;;:::i;:::-;;10189:3;:23::i;7084:141:22:-;8870:21;8560:40;-1:-1:-1;;;8560:40:22;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:22;;;;;;;;;;;2435:216:23;6931:20:22;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;2600:7:23;:15:::1;2610:5:::0;2600:7;:15:::1;:::i;:::-;-1:-1:-1::0;2625:9:23::1;::::0;::::1;:19;2637:7:::0;2625:9;:19:::1;:::i;2801:183:26:-:0;6931:20:22;:18;:20::i;1980:235:19:-;6931:20:22;:18;:20::i;10699:983:40:-;10751:7;;10835:3;10826:12;;;:16;10822:99;;10872:3;10862:13;;;;10893;10822:99;10947:2;10938:11;;;:15;10934:96;;10983:2;10973:12;;;;11003;10934:96;11056:2;11047:11;;;:15;11043:96;;11092:2;11082:12;;;;11112;11043:96;11165:2;11156:11;;;:15;11152:96;;11201:2;11191:12;;;;11221;11152:96;11274:1;11265:10;;;:14;11261:93;;11309:1;11299:11;;;;11328;11261:93;11380:1;11371:10;;;:14;11367:93;;11415:1;11405:11;;;;11434;11367:93;11486:1;11477:10;;;:14;11473:93;;11521:1;11511:11;;;;11540;11473:93;11592:1;11583:10;;;:14;11579:64;;11627:1;11617:11;11669:6;10699:983;-1:-1:-1;;10699:983:40:o;2557:104::-;2615:7;2645:1;2641;:5;:13;;2653:1;2641:13;;;-1:-1:-1;2649:1:40;;2557:104;-1:-1:-1;2557:104:40:o;14:548:54:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;820:173::-;888:20;;-1:-1:-1;;;;;937:31:54;;927:42;;917:70;;983:1;980;973:12;917:70;820:173;;;:::o;998:254::-;1066:6;1074;1127:2;1115:9;1106:7;1102:23;1098:32;1095:52;;;1143:1;1140;1133:12;1095:52;1166:29;1185:9;1166:29;:::i;:::-;1156:39;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;998:254:54:o;1839:328::-;1916:6;1924;1932;1985:2;1973:9;1964:7;1960:23;1956:32;1953:52;;;2001:1;1998;1991:12;1953:52;2024:29;2043:9;2024:29;:::i;:::-;2014:39;;2072:38;2106:2;2095:9;2091:18;2072:38;:::i;:::-;2062:48;;2157:2;2146:9;2142:18;2129:32;2119:42;;1839:328;;;;;:::o;2361:186::-;2420:6;2473:2;2461:9;2452:7;2448:23;2444:32;2441:52;;;2489:1;2486;2479:12;2441:52;2512:29;2531:9;2512:29;:::i;2552:180::-;2611:6;2664:2;2652:9;2643:7;2639:23;2635:32;2632:52;;;2680:1;2677;2670:12;2632:52;-1:-1:-1;2703:23:54;;2552:180;-1:-1:-1;2552:180:54:o;2737:248::-;2805:6;2813;2866:2;2854:9;2845:7;2841:23;2837:32;2834:52;;;2882:1;2879;2872:12;2834:52;-1:-1:-1;;2905:23:54;;;2975:2;2960:18;;;2947:32;;-1:-1:-1;2737:248:54:o;2990:322::-;3067:6;3075;3083;3136:2;3124:9;3115:7;3111:23;3107:32;3104:52;;;3152:1;3149;3142:12;3104:52;3175:29;3194:9;3175:29;:::i;:::-;3165:39;3251:2;3236:18;;3223:32;;-1:-1:-1;3302:2:54;3287:18;;;3274:32;;2990:322;-1:-1:-1;;;2990:322:54:o;3317:472::-;3412:6;3420;3428;3436;3444;3497:3;3485:9;3476:7;3472:23;3468:33;3465:53;;;3514:1;3511;3504:12;3465:53;3537:29;3556:9;3537:29;:::i;:::-;3527:39;;3585:38;3619:2;3608:9;3604:18;3585:38;:::i;:::-;3575:48;;3642:38;3676:2;3665:9;3661:18;3642:38;:::i;:::-;3317:472;;;;-1:-1:-1;3632:48:54;;3727:2;3712:18;;3699:32;;-1:-1:-1;3778:3:54;3763:19;3750:33;;3317:472;-1:-1:-1;;3317:472:54:o;3794:260::-;3862:6;3870;3923:2;3911:9;3902:7;3898:23;3894:32;3891:52;;;3939:1;3936;3929:12;3891:52;3962:29;3981:9;3962:29;:::i;:::-;3952:39;;4010:38;4044:2;4033:9;4029:18;4010:38;:::i;:::-;4000:48;;3794:260;;;;;:::o;4059:254::-;4127:6;4135;4188:2;4176:9;4167:7;4163:23;4159:32;4156:52;;;4204:1;4201;4194:12;4156:52;4240:9;4227:23;4217:33;;4269:38;4303:2;4292:9;4288:18;4269:38;:::i;4318:380::-;4397:1;4393:12;;;;4440;;;4461:61;;4515:4;4507:6;4503:17;4493:27;;4461:61;4568:2;4560:6;4557:14;4537:18;4534:38;4531:161;;4614:10;4609:3;4605:20;4602:1;4595:31;4649:4;4646:1;4639:15;4677:4;4674:1;4667:15;4531:161;;4318:380;;;:::o;5056:127::-;5117:10;5112:3;5108:20;5105:1;5098:31;5148:4;5145:1;5138:15;5172:4;5169:1;5162:15;5188:168;5261:9;;;5292;;5309:15;;;5303:22;;5289:37;5279:71;;5330:18;;:::i;5361:127::-;5422:10;5417:3;5413:20;5410:1;5403:31;5453:4;5450:1;5443:15;5477:4;5474:1;5467:15;5493:217;5533:1;5559;5549:132;;5603:10;5598:3;5594:20;5591:1;5584:31;5638:4;5635:1;5628:15;5666:4;5663:1;5656:15;5549:132;-1:-1:-1;5695:9:54;;5493:217::o;5994:277::-;6061:6;6114:2;6102:9;6093:7;6089:23;6085:32;6082:52;;;6130:1;6127;6120:12;6082:52;6162:9;6156:16;6215:5;6208:13;6201:21;6194:5;6191:32;6181:60;;6237:1;6234;6227:12;8720:128;8787:9;;;8808:11;;;8805:37;;;8822:18;;:::i;8853:125::-;8918:9;;;8939:10;;;8936:36;;;8952:18;;:::i;9333:184::-;9403:6;9456:2;9444:9;9435:7;9431:23;9427:32;9424:52;;;9472:1;9469;9462:12;9424:52;-1:-1:-1;9495:16:54;;9333:184;-1:-1:-1;9333:184:54:o;9522:127::-;9583:10;9578:3;9574:20;9571:1;9564:31;9614:4;9611:1;9604:15;9638:4;9635:1;9628:15;9780:543;9882:2;9877:3;9874:11;9871:446;;;9918:1;9942:5;9939:1;9932:16;9986:4;9983:1;9973:18;10056:2;10044:10;10040:19;10037:1;10033:27;10027:4;10023:38;10092:4;10080:10;10077:20;10074:47;;;-1:-1:-1;10115:4:54;10074:47;10170:2;10165:3;10161:12;10158:1;10154:20;10148:4;10144:31;10134:41;;10225:82;10243:2;10236:5;10233:13;10225:82;;;10288:17;;;10269:1;10258:13;10225:82;;;10229:3;;;9780:543;;;:::o;10499:1345::-;10625:3;10619:10;10652:18;10644:6;10641:30;10638:56;;;10674:18;;:::i;:::-;10703:97;10793:6;10753:38;10785:4;10779:11;10753:38;:::i;:::-;10747:4;10703:97;:::i;:::-;10855:4;;10912:2;10901:14;;10929:1;10924:663;;;;11631:1;11648:6;11645:89;;;-1:-1:-1;11700:19:54;;;11694:26;11645:89;-1:-1:-1;;10456:1:54;10452:11;;;10448:24;10444:29;10434:40;10480:1;10476:11;;;10431:57;11747:81;;10894:944;;10924:663;9727:1;9720:14;;;9764:4;9751:18;;-1:-1:-1;;10960:20:54;;;11078:236;11092:7;11089:1;11086:14;11078:236;;;11181:19;;;11175:26;11160:42;;11273:27;;;;11241:1;11229:14;;;;11108:19;;11078:236;;;11082:3;11342:6;11333:7;11330:19;11327:201;;;11403:19;;;11397:26;-1:-1:-1;;11486:1:54;11482:14;;;11498:3;11478:24;11474:37;11470:42;11455:58;11440:74;;11327:201;-1:-1:-1;;;;;11574:1:54;11558:14;;;11554:22;11541:36;;-1:-1:-1;10499:1345:54:o","linkReferences":{}},"methodIdentifiers":{"addLiquidity(uint256,uint256)":"9cd441da","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","getAmountOut(uint256,address)":"f140a35a","getPrice(address,uint256)":"449e815d","getReserves()":"0902f1ac","initialize(address,address,address,uint256,uint256)":"a6b63eb8","name()":"06fdde03","owner()":"8da5cb5b","platformFee()":"26232a2e","removeLiquidity(uint256)":"9c8f9f23","renounceOwnership()":"715018a6","swap(address,uint256,uint256)":"9f1d0f59","symbol()":"95d89b41","tokenA()":"0fc63d10","tokenB()":"5f64b55b","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b","updatePlatformFee(uint256)":"aa0b5988"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountTokenA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountTokenB\",\"type\":\"uint256\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountTokenA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountTokenB\",\"type\":\"uint256\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenBAmount\",\"type\":\"uint256\"}],\"name\":\"addLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getAmountOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenB\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"addressManager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_platformFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minimumLiquidity\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"platformFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"}],\"name\":\"removeLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"swap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenA\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_platformFee\",\"type\":\"uint256\"}],\"name\":\"updatePlatformFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/LiquidityPool.sol\":\"LiquidityPool\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@openzeppelin/foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/manager/AccessManagerUpgradeable.sol\":{\"keccak256\":\"0x4bd72cbcba89604e02feacaa889f8211c949dc319ea7bf77f9c2fcbe363de9fb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9270800de5dc28aefd9c284fb115f761df765b8e2db1e040571b50441ac758ee\",\"dweb:/ipfs/QmcKmcLKPca9Q14eD3yxuJbSVUwgWknYmDANg3ycBDHZ4U\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x5a5f22721ffb66d3e1ecc568c0d37c91f91223d8663c8a5e78396e780b849c72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bdd108133c98ea251513424bf17905090c8a7e0755562a6d12a81b8bccbd6152\",\"dweb:/ipfs/QmahpnB63Up9aVx4jDqxEgry5BRN5itHRvy9rwBvMT2yqL\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/MulticallUpgradeable.sol\":{\"keccak256\":\"0x1545b1796f0b94f811d95b8b208c0668dacfc7768247d22b63161a47c4c5ef4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1dccf7856b960b2ed7565906b457812ad8d29a15d403f17702ac7e090680300\",\"dweb:/ipfs/QmUqqibiekFv84mdq7zeyRF56mLJbFyFUxWKTrz8Twzkpn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol\":{\"keccak256\":\"0x3ddf463e716596144130e47e72e7ab230bc824a7bfa9992ee4cc61cbd96d7a35\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cdd440f8900cd7d04178e5fc9ba659cd03af9a67841647083dbda3bf195ca2aa\",\"dweb:/ipfs/QmPyXuB9VR7mB4uonwgWmbHnagMieVPJ8tzdieFDu4BAkp\"]},\"lib/openzeppelin-contracts/contracts/access/manager/IAccessManaged.sol\":{\"keccak256\":\"0xaba93d42cd70e1418782951132d97b31ddce5f50ad81090884b6d0e41caac9d6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b110886f83e3e98a11255a3b56790322e8d83e513304dde71299406685fc6694\",\"dweb:/ipfs/QmPwroS7MUUk1EmsvaJqU6aarhQ8ewJtJMg7xxmTsaxZEv\"]},\"lib/openzeppelin-contracts/contracts/access/manager/IAccessManager.sol\":{\"keccak256\":\"0xdabf85e3bab52e7cfade4f77e661bcf7a2f9f95097bfd2ca5ddb193a0c21ee8b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://402259332090488a587a858ec0113bc7fe55e9dbc6e329927b87ed0f1cce7d08\",\"dweb:/ipfs/QmPJufTJJJifny3JscKTASsPzCrpXRbhtsJnwkCdbaKDTf\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"lib/openzeppelin-contracts/contracts/utils/types/Time.sol\":{\"keccak256\":\"0xc7755af115020049e4140f224f9ee88d7e1799ffb0646f37bf0df24bf6213f58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7f09bf94d5274334ec021f61a04659db303f31e60460e14b709c9bf187740111\",\"dweb:/ipfs/QmNvgomZYUwFAt4cZbPWAiTeSZQreGehY9BK5xyVJsUttb\"]},\"src/LiquidityPool.sol\":{\"keccak256\":\"0x9826c79909fe8567e7d3c10b0c8b487121a92369b420fe0a2aced8ce156b2940\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3a65d065a7ae476fea90ba93ba432a104b6993c1f2b782dfe22269565c505ee7\",\"dweb:/ipfs/QmTopKocJbfPqs84ktJTbML8gysdEpDWvuBcYN2B6yx8Ab\"]},\"src/LiquidityPoolInterfaces.sol\":{\"keccak256\":\"0x5cffaf70f96e748798452f163606aae4016d4eef90364b7c28d5da4ae2f94241\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://34717b9ffd3aef95b70669ed8597ac5c87025168660227266ed7565bfdc1edba\",\"dweb:/ipfs/QmdGAXPRPPb3Urz6WXK9dWqHcvUhQq9NRHgsKdULfDghvW\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.25+commit.b61c2a91"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientAllowance"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientBalance"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC20InvalidApprover"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC20InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC20InvalidSender"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"type":"error","name":"ERC20InvalidSpender"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"user","type":"address","indexed":true},{"internalType":"uint256","name":"amountTokenA","type":"uint256","indexed":false},{"internalType":"uint256","name":"amountTokenB","type":"uint256","indexed":false}],"type":"event","name":"LiquidityAdded","anonymous":false},{"inputs":[{"internalType":"address","name":"user","type":"address","indexed":true},{"internalType":"uint256","name":"amountTokenA","type":"uint256","indexed":false},{"internalType":"uint256","name":"amountTokenB","type":"uint256","indexed":false}],"type":"event","name":"LiquidityRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"user","type":"address","indexed":true},{"internalType":"address","name":"tokenIn","type":"address","indexed":false},{"internalType":"uint256","name":"amountIn","type":"uint256","indexed":false},{"internalType":"address","name":"tokenOut","type":"address","indexed":false},{"internalType":"uint256","name":"amountOut","type":"uint256","indexed":false}],"type":"event","name":"Swap","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[{"internalType":"uint256","name":"tokenAAmount","type":"uint256"},{"internalType":"uint256","name":"tokenBAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"addLiquidity"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"}],"stateMutability":"view","type":"function","name":"getAmountOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"view","type":"function","name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"_tokenA","type":"address"},{"internalType":"address","name":"_tokenB","type":"address"},{"internalType":"address","name":"addressManager","type":"address"},{"internalType":"uint256","name":"_platformFee","type":"uint256"},{"internalType":"uint256","name":"_minimumLiquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"platformFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"removeLiquidity"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"swap"},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"tokenA","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"tokenB","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"uint256","name":"_platformFee","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"updatePlatformFee"}],"devdoc":{"kind":"dev","methods":{"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"name()":{"details":"Returns the name of the token."},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@openzeppelin/foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/LiquidityPool.sol":"LiquidityPool"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/manager/AccessManagerUpgradeable.sol":{"keccak256":"0x4bd72cbcba89604e02feacaa889f8211c949dc319ea7bf77f9c2fcbe363de9fb","urls":["bzz-raw://9270800de5dc28aefd9c284fb115f761df765b8e2db1e040571b50441ac758ee","dweb:/ipfs/QmcKmcLKPca9Q14eD3yxuJbSVUwgWknYmDANg3ycBDHZ4U"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x5a5f22721ffb66d3e1ecc568c0d37c91f91223d8663c8a5e78396e780b849c72","urls":["bzz-raw://bdd108133c98ea251513424bf17905090c8a7e0755562a6d12a81b8bccbd6152","dweb:/ipfs/QmahpnB63Up9aVx4jDqxEgry5BRN5itHRvy9rwBvMT2yqL"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/MulticallUpgradeable.sol":{"keccak256":"0x1545b1796f0b94f811d95b8b208c0668dacfc7768247d22b63161a47c4c5ef4e","urls":["bzz-raw://a1dccf7856b960b2ed7565906b457812ad8d29a15d403f17702ac7e090680300","dweb:/ipfs/QmUqqibiekFv84mdq7zeyRF56mLJbFyFUxWKTrz8Twzkpn"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol":{"keccak256":"0x3ddf463e716596144130e47e72e7ab230bc824a7bfa9992ee4cc61cbd96d7a35","urls":["bzz-raw://cdd440f8900cd7d04178e5fc9ba659cd03af9a67841647083dbda3bf195ca2aa","dweb:/ipfs/QmPyXuB9VR7mB4uonwgWmbHnagMieVPJ8tzdieFDu4BAkp"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/manager/IAccessManaged.sol":{"keccak256":"0xaba93d42cd70e1418782951132d97b31ddce5f50ad81090884b6d0e41caac9d6","urls":["bzz-raw://b110886f83e3e98a11255a3b56790322e8d83e513304dde71299406685fc6694","dweb:/ipfs/QmPwroS7MUUk1EmsvaJqU6aarhQ8ewJtJMg7xxmTsaxZEv"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/manager/IAccessManager.sol":{"keccak256":"0xdabf85e3bab52e7cfade4f77e661bcf7a2f9f95097bfd2ca5ddb193a0c21ee8b","urls":["bzz-raw://402259332090488a587a858ec0113bc7fe55e9dbc6e329927b87ed0f1cce7d08","dweb:/ipfs/QmPJufTJJJifny3JscKTASsPzCrpXRbhtsJnwkCdbaKDTf"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7","urls":["bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f","dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2","urls":["bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850","dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721","urls":["bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245","dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d","urls":["bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875","dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe","urls":["bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c","dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/types/Time.sol":{"keccak256":"0xc7755af115020049e4140f224f9ee88d7e1799ffb0646f37bf0df24bf6213f58","urls":["bzz-raw://7f09bf94d5274334ec021f61a04659db303f31e60460e14b709c9bf187740111","dweb:/ipfs/QmNvgomZYUwFAt4cZbPWAiTeSZQreGehY9BK5xyVJsUttb"],"license":"MIT"},"src/LiquidityPool.sol":{"keccak256":"0x9826c79909fe8567e7d3c10b0c8b487121a92369b420fe0a2aced8ce156b2940","urls":["bzz-raw://3a65d065a7ae476fea90ba93ba432a104b6993c1f2b782dfe22269565c505ee7","dweb:/ipfs/QmTopKocJbfPqs84ktJTbML8gysdEpDWvuBcYN2B6yx8Ab"],"license":"MIT"},"src/LiquidityPoolInterfaces.sol":{"keccak256":"0x5cffaf70f96e748798452f163606aae4016d4eef90364b7c28d5da4ae2f94241","urls":["bzz-raw://34717b9ffd3aef95b70669ed8597ac5c87025168660227266ed7565bfdc1edba","dweb:/ipfs/QmdGAXPRPPb3Urz6WXK9dWqHcvUhQq9NRHgsKdULfDghvW"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":54853,"contract":"src/LiquidityPool.sol:LiquidityPool","label":"tokenA","offset":0,"slot":"0","type":"t_address"},{"astId":54855,"contract":"src/LiquidityPool.sol:LiquidityPool","label":"tokenB","offset":0,"slot":"1","type":"t_address"},{"astId":54857,"contract":"src/LiquidityPool.sol:LiquidityPool","label":"reserveA","offset":0,"slot":"2","type":"t_uint256"},{"astId":54859,"contract":"src/LiquidityPool.sol:LiquidityPool","label":"reserveB","offset":0,"slot":"3","type":"t_uint256"},{"astId":54861,"contract":"src/LiquidityPool.sol:LiquidityPool","label":"platformFee","offset":0,"slot":"4","type":"t_uint256"},{"astId":54863,"contract":"src/LiquidityPool.sol:LiquidityPool","label":"MINIMUM_LIQUIDITY","offset":0,"slot":"5","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/LiquidityPool.sol","id":55302,"exportedSymbols":{"AccessManagerUpgradeable":[45762],"Address":[50567],"ContextUpgradeable":[46679],"ERC20Upgradeable":[46633],"IAccessManaged":[49104],"IAccessManager":[49542],"IERC20":[50288],"IERC20Errors":[49600],"IERC20Metadata":[50314],"Initializable":[46016],"LiquidityPool":[55301],"LiquidityPoolEvents":[55506],"LiquidityPoolModifiers":[55532],"Math":[51738],"MulticallUpgradeable":[46782],"OwnableUpgradeable":[43398],"ReentrancyGuardUpgradeable":[46911],"Time":[54381]},"nodeType":"SourceUnit","src":"33:4526:46","nodes":[{"id":54838,"nodeType":"PragmaDirective","src":"33:23:46","nodes":[],"literals":["solidity","^","0.8",".0"]},{"id":54839,"nodeType":"ImportDirective","src":"60:82:46","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol","nameLocation":"-1:-1:-1","scope":55302,"sourceUnit":46912,"symbolAliases":[],"unitAlias":""},{"id":54840,"nodeType":"ImportDirective","src":"144:78:46","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol","nameLocation":"-1:-1:-1","scope":55302,"sourceUnit":46634,"symbolAliases":[],"unitAlias":""},{"id":54841,"nodeType":"ImportDirective","src":"224:75:46","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":55302,"sourceUnit":46017,"symbolAliases":[],"unitAlias":""},{"id":54842,"nodeType":"ImportDirective","src":"301:39:46","nodes":[],"absolutePath":"src/LiquidityPoolInterfaces.sol","file":"./LiquidityPoolInterfaces.sol","nameLocation":"-1:-1:-1","scope":55302,"sourceUnit":55533,"symbolAliases":[],"unitAlias":""},{"id":54843,"nodeType":"ImportDirective","src":"342:75:46","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":55302,"sourceUnit":43399,"symbolAliases":[],"unitAlias":""},{"id":55301,"nodeType":"ContractDefinition","src":"421:4136:46","nodes":[{"id":54853,"nodeType":"VariableDeclaration","src":"534:21:46","nodes":[],"constant":false,"functionSelector":"0fc63d10","mutability":"mutable","name":"tokenA","nameLocation":"549:6:46","scope":55301,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54852,"name":"address","nodeType":"ElementaryTypeName","src":"534:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":54855,"nodeType":"VariableDeclaration","src":"562:21:46","nodes":[],"constant":false,"functionSelector":"5f64b55b","mutability":"mutable","name":"tokenB","nameLocation":"577:6:46","scope":55301,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54854,"name":"address","nodeType":"ElementaryTypeName","src":"562:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":54857,"nodeType":"VariableDeclaration","src":"590:24:46","nodes":[],"constant":false,"mutability":"mutable","name":"reserveA","nameLocation":"606:8:46","scope":55301,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54856,"name":"uint256","nodeType":"ElementaryTypeName","src":"590:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"id":54859,"nodeType":"VariableDeclaration","src":"621:24:46","nodes":[],"constant":false,"mutability":"mutable","name":"reserveB","nameLocation":"637:8:46","scope":55301,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54858,"name":"uint256","nodeType":"ElementaryTypeName","src":"621:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"id":54861,"nodeType":"VariableDeclaration","src":"652:26:46","nodes":[],"constant":false,"functionSelector":"26232a2e","mutability":"mutable","name":"platformFee","nameLocation":"667:11:46","scope":55301,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54860,"name":"uint256","nodeType":"ElementaryTypeName","src":"652:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":54863,"nodeType":"VariableDeclaration","src":"685:33:46","nodes":[],"constant":false,"mutability":"mutable","name":"MINIMUM_LIQUIDITY","nameLocation":"701:17:46","scope":55301,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54862,"name":"uint256","nodeType":"ElementaryTypeName","src":"685:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"id":54871,"nodeType":"EventDefinition","src":"727:87:46","nodes":[],"anonymous":false,"eventSelector":"ac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee45","name":"LiquidityAdded","nameLocation":"733:14:46","parameters":{"id":54870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54865,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"764:4:46","nodeType":"VariableDeclaration","scope":54871,"src":"748:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54864,"name":"address","nodeType":"ElementaryTypeName","src":"748:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54867,"indexed":false,"mutability":"mutable","name":"amountTokenA","nameLocation":"778:12:46","nodeType":"VariableDeclaration","scope":54871,"src":"770:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54866,"name":"uint256","nodeType":"ElementaryTypeName","src":"770:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":54869,"indexed":false,"mutability":"mutable","name":"amountTokenB","nameLocation":"800:12:46","nodeType":"VariableDeclaration","scope":54871,"src":"792:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54868,"name":"uint256","nodeType":"ElementaryTypeName","src":"792:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"747:66:46"}},{"id":54879,"nodeType":"EventDefinition","src":"820:89:46","nodes":[],"anonymous":false,"eventSelector":"96cd817c6329656790ef8fba7675405193677d39619571282f5e21f3a98cd059","name":"LiquidityRemoved","nameLocation":"826:16:46","parameters":{"id":54878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54873,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"859:4:46","nodeType":"VariableDeclaration","scope":54879,"src":"843:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54872,"name":"address","nodeType":"ElementaryTypeName","src":"843:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54875,"indexed":false,"mutability":"mutable","name":"amountTokenA","nameLocation":"873:12:46","nodeType":"VariableDeclaration","scope":54879,"src":"865:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54874,"name":"uint256","nodeType":"ElementaryTypeName","src":"865:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":54877,"indexed":false,"mutability":"mutable","name":"amountTokenB","nameLocation":"895:12:46","nodeType":"VariableDeclaration","scope":54879,"src":"887:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54876,"name":"uint256","nodeType":"ElementaryTypeName","src":"887:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"842:66:46"}},{"id":54891,"nodeType":"EventDefinition","src":"915:105:46","nodes":[],"anonymous":false,"eventSelector":"5380cf97d8f645d3c4896da60c053458dca03a3a31cec642ac80e1ddf0d8d02a","name":"Swap","nameLocation":"921:4:46","parameters":{"id":54890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54881,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"942:4:46","nodeType":"VariableDeclaration","scope":54891,"src":"926:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54880,"name":"address","nodeType":"ElementaryTypeName","src":"926:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54883,"indexed":false,"mutability":"mutable","name":"tokenIn","nameLocation":"956:7:46","nodeType":"VariableDeclaration","scope":54891,"src":"948:15:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54882,"name":"address","nodeType":"ElementaryTypeName","src":"948:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54885,"indexed":false,"mutability":"mutable","name":"amountIn","nameLocation":"973:8:46","nodeType":"VariableDeclaration","scope":54891,"src":"965:16:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54884,"name":"uint256","nodeType":"ElementaryTypeName","src":"965:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":54887,"indexed":false,"mutability":"mutable","name":"tokenOut","nameLocation":"991:8:46","nodeType":"VariableDeclaration","scope":54891,"src":"983:16:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54886,"name":"address","nodeType":"ElementaryTypeName","src":"983:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54889,"indexed":false,"mutability":"mutable","name":"amountOut","nameLocation":"1009:9:46","nodeType":"VariableDeclaration","scope":54891,"src":"1001:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54888,"name":"uint256","nodeType":"ElementaryTypeName","src":"1001:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"925:94:46"}},{"id":54935,"nodeType":"FunctionDefinition","src":"1028:476:46","nodes":[],"body":{"id":54934,"nodeType":"Block","src":"1226:278:46","nodes":[],"statements":[{"expression":{"arguments":[{"hexValue":"4c697175696469747920506f6f6c20546f6b656e73","id":54907,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1250:23:46","typeDescriptions":{"typeIdentifier":"t_stringliteral_9501961dff79fd40eea74c23c3406365973d3cae0366a372984afac0f2405309","typeString":"literal_string \"Liquidity Pool Tokens\""},"value":"Liquidity Pool Tokens"},{"hexValue":"4c5054","id":54908,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1275:5:46","typeDescriptions":{"typeIdentifier":"t_stringliteral_32e82afd8218e1d9053bf5b198b85ca1af3dff4739f28e3618abcbfacb818cfa","typeString":"literal_string \"LPT\""},"value":"LPT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_9501961dff79fd40eea74c23c3406365973d3cae0366a372984afac0f2405309","typeString":"literal_string \"Liquidity Pool Tokens\""},{"typeIdentifier":"t_stringliteral_32e82afd8218e1d9053bf5b198b85ca1af3dff4739f28e3618abcbfacb818cfa","typeString":"literal_string \"LPT\""}],"id":54906,"name":"__ERC20_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46084,"src":"1237:12:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":54909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1237:44:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54910,"nodeType":"ExpressionStatement","src":"1237:44:46"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":54911,"name":"__ReentrancyGuard_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46822,"src":"1292:22:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1292:24:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54913,"nodeType":"ExpressionStatement","src":"1292:24:46"},{"expression":{"arguments":[{"id":54915,"name":"addressManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54897,"src":"1342:14:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54914,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43258,"src":"1327:14:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":54916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1327:30:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54917,"nodeType":"ExpressionStatement","src":"1327:30:46"},{"expression":{"id":54920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54918,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54853,"src":"1368:6:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54919,"name":"_tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54893,"src":"1377:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1368:16:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54921,"nodeType":"ExpressionStatement","src":"1368:16:46"},{"expression":{"id":54924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54922,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54855,"src":"1395:6:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54923,"name":"_tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54895,"src":"1404:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1395:16:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54925,"nodeType":"ExpressionStatement","src":"1395:16:46"},{"expression":{"id":54928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54926,"name":"platformFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54861,"src":"1422:11:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54927,"name":"_platformFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54899,"src":"1436:12:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1422:26:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54929,"nodeType":"ExpressionStatement","src":"1422:26:46"},{"expression":{"id":54932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54930,"name":"MINIMUM_LIQUIDITY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54863,"src":"1459:17:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54931,"name":"_minimumLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54901,"src":"1479:17:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1459:37:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54933,"nodeType":"ExpressionStatement","src":"1459:37:46"}]},"functionSelector":"a6b63eb8","implemented":true,"kind":"function","modifiers":[{"id":54904,"kind":"modifierInvocation","modifierName":{"id":54903,"name":"initializer","nameLocations":["1214:11:46"],"nodeType":"IdentifierPath","referencedDeclaration":45870,"src":"1214:11:46"},"nodeType":"ModifierInvocation","src":"1214:11:46"}],"name":"initialize","nameLocation":"1037:10:46","parameters":{"id":54902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54893,"mutability":"mutable","name":"_tokenA","nameLocation":"1066:7:46","nodeType":"VariableDeclaration","scope":54935,"src":"1058:15:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54892,"name":"address","nodeType":"ElementaryTypeName","src":"1058:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54895,"mutability":"mutable","name":"_tokenB","nameLocation":"1092:7:46","nodeType":"VariableDeclaration","scope":54935,"src":"1084:15:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54894,"name":"address","nodeType":"ElementaryTypeName","src":"1084:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54897,"mutability":"mutable","name":"addressManager","nameLocation":"1118:14:46","nodeType":"VariableDeclaration","scope":54935,"src":"1110:22:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54896,"name":"address","nodeType":"ElementaryTypeName","src":"1110:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54899,"mutability":"mutable","name":"_platformFee","nameLocation":"1151:12:46","nodeType":"VariableDeclaration","scope":54935,"src":"1143:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54898,"name":"uint256","nodeType":"ElementaryTypeName","src":"1143:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":54901,"mutability":"mutable","name":"_minimumLiquidity","nameLocation":"1182:17:46","nodeType":"VariableDeclaration","scope":54935,"src":"1174:25:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54900,"name":"uint256","nodeType":"ElementaryTypeName","src":"1174:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1047:159:46"},"returnParameters":{"id":54905,"nodeType":"ParameterList","parameters":[],"src":"1226:0:46"},"scope":55301,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":55005,"nodeType":"FunctionDefinition","src":"1512:570:46","nodes":[],"body":{"id":55004,"nodeType":"Block","src":"1600:482:46","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":54951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54945,"name":"tokenAAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54937,"src":"1619:12:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":54946,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1634:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1619:16:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54948,"name":"tokenBAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54939,"src":"1639:12:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":54949,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1654:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1639:16:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1619:36:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c696420616d6f756e7473","id":54952,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1657:17:46","typeDescriptions":{"typeIdentifier":"t_stringliteral_398975f84453d02f72be2f04ea41567c835ff1dbdf476a80db1c02f27c9d4bb2","typeString":"literal_string \"Invalid amounts\""},"value":"Invalid amounts"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_398975f84453d02f72be2f04ea41567c835ff1dbdf476a80db1c02f27c9d4bb2","typeString":"literal_string \"Invalid amounts\""}],"id":54944,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1611:7:46","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":54953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1611:64:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54954,"nodeType":"ExpressionStatement","src":"1611:64:46"},{"expression":{"arguments":[{"expression":{"id":54959,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1726:3:46","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1730:6:46","memberName":"sender","nodeType":"MemberAccess","src":"1726:10:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":54963,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1746:4:46","typeDescriptions":{"typeIdentifier":"t_contract$_LiquidityPool_$55301","typeString":"contract LiquidityPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_LiquidityPool_$55301","typeString":"contract LiquidityPool"}],"id":54962,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1738:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":54961,"name":"address","nodeType":"ElementaryTypeName","src":"1738:7:46","typeDescriptions":{}}},"id":54964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1738:13:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54965,"name":"tokenAAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54937,"src":"1753:12:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":54956,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54853,"src":"1705:6:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54955,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46633,"src":"1688:16:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC20Upgradeable_$46633_$","typeString":"type(contract ERC20Upgradeable)"}},"id":54957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1688:24:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$46633","typeString":"contract ERC20Upgradeable"}},"id":54958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1713:12:46","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":46293,"src":"1688:37:46","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":54966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1688:78:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54967,"nodeType":"ExpressionStatement","src":"1688:78:46"},{"expression":{"arguments":[{"expression":{"id":54972,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1815:3:46","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1819:6:46","memberName":"sender","nodeType":"MemberAccess","src":"1815:10:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":54976,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1835:4:46","typeDescriptions":{"typeIdentifier":"t_contract$_LiquidityPool_$55301","typeString":"contract LiquidityPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_LiquidityPool_$55301","typeString":"contract LiquidityPool"}],"id":54975,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1827:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":54974,"name":"address","nodeType":"ElementaryTypeName","src":"1827:7:46","typeDescriptions":{}}},"id":54977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1827:13:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54978,"name":"tokenBAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54939,"src":"1842:12:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":54969,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54855,"src":"1794:6:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54968,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46633,"src":"1777:16:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC20Upgradeable_$46633_$","typeString":"type(contract ERC20Upgradeable)"}},"id":54970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1777:24:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$46633","typeString":"contract ERC20Upgradeable"}},"id":54971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1802:12:46","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":46293,"src":"1777:37:46","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":54979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1777:78:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54980,"nodeType":"ExpressionStatement","src":"1777:78:46"},{"assignments":[54982],"declarations":[{"constant":false,"id":54982,"mutability":"mutable","name":"liquidity","nameLocation":"1876:9:46","nodeType":"VariableDeclaration","scope":55004,"src":"1868:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54981,"name":"uint256","nodeType":"ElementaryTypeName","src":"1868:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54987,"initialValue":{"arguments":[{"id":54984,"name":"tokenAAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54937,"src":"1907:12:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":54985,"name":"tokenBAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54939,"src":"1921:12:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54983,"name":"calculateLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55261,"src":"1888:18:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) view returns (uint256)"}},"id":54986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1888:46:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1868:66:46"},{"expression":{"arguments":[{"expression":{"id":54989,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1951:3:46","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1955:6:46","memberName":"sender","nodeType":"MemberAccess","src":"1951:10:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54991,"name":"liquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54982,"src":"1963:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54988,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46465,"src":"1945:5:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":54992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1945:28:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54993,"nodeType":"ExpressionStatement","src":"1945:28:46"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":54994,"name":"updateReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55242,"src":"1986:14:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1986:16:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54996,"nodeType":"ExpressionStatement","src":"1986:16:46"},{"eventCall":{"arguments":[{"expression":{"id":54998,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2035:3:46","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2039:6:46","memberName":"sender","nodeType":"MemberAccess","src":"2035:10:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55000,"name":"tokenAAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54937,"src":"2047:12:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55001,"name":"tokenBAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54939,"src":"2061:12:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54997,"name":"LiquidityAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54871,"src":"2020:14:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":55002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2020:54:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55003,"nodeType":"EmitStatement","src":"2015:59:46"}]},"functionSelector":"9cd441da","implemented":true,"kind":"function","modifiers":[{"id":54942,"kind":"modifierInvocation","modifierName":{"id":54941,"name":"nonReentrant","nameLocations":["1587:12:46"],"nodeType":"IdentifierPath","referencedDeclaration":46851,"src":"1587:12:46"},"nodeType":"ModifierInvocation","src":"1587:12:46"}],"name":"addLiquidity","nameLocation":"1521:12:46","parameters":{"id":54940,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54937,"mutability":"mutable","name":"tokenAAmount","nameLocation":"1542:12:46","nodeType":"VariableDeclaration","scope":55005,"src":"1534:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54936,"name":"uint256","nodeType":"ElementaryTypeName","src":"1534:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":54939,"mutability":"mutable","name":"tokenBAmount","nameLocation":"1564:12:46","nodeType":"VariableDeclaration","scope":55005,"src":"1556:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54938,"name":"uint256","nodeType":"ElementaryTypeName","src":"1556:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1533:44:46"},"returnParameters":{"id":54943,"nodeType":"ParameterList","parameters":[],"src":"1600:0:46"},"scope":55301,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55074,"nodeType":"FunctionDefinition","src":"2090:565:46","nodes":[],"body":{"id":55073,"nodeType":"Block","src":"2156:499:46","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55013,"name":"liquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55007,"src":"2175:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":55014,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2187:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2175:13:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c6964206c697175696469747920616d6f756e74","id":55016,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2190:26:46","typeDescriptions":{"typeIdentifier":"t_stringliteral_8860be8b97cdb7dd16f80bc4f6e94e0e36e15d2fd95d3ed0b6babcec4d25f8a0","typeString":"literal_string \"Invalid liquidity amount\""},"value":"Invalid liquidity amount"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8860be8b97cdb7dd16f80bc4f6e94e0e36e15d2fd95d3ed0b6babcec4d25f8a0","typeString":"literal_string \"Invalid liquidity amount\""}],"id":55012,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2167:7:46","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2167:50:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55018,"nodeType":"ExpressionStatement","src":"2167:50:46"},{"assignments":[55020],"declarations":[{"constant":false,"id":55020,"mutability":"mutable","name":"tokenAAmount","nameLocation":"2238:12:46","nodeType":"VariableDeclaration","scope":55073,"src":"2230:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55019,"name":"uint256","nodeType":"ElementaryTypeName","src":"2230:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55028,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55021,"name":"liquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55007,"src":"2254:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":55022,"name":"reserveA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54857,"src":"2266:8:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2254:20:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":55024,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2253:22:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":55025,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46169,"src":"2278:11:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":55026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2278:13:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2253:38:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2230:61:46"},{"assignments":[55030],"declarations":[{"constant":false,"id":55030,"mutability":"mutable","name":"tokenBAmount","nameLocation":"2310:12:46","nodeType":"VariableDeclaration","scope":55073,"src":"2302:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55029,"name":"uint256","nodeType":"ElementaryTypeName","src":"2302:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55038,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55031,"name":"liquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55007,"src":"2326:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":55032,"name":"reserveB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54859,"src":"2338:8:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2326:20:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":55034,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2325:22:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":55035,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46169,"src":"2350:11:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":55036,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2350:13:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2325:38:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2302:61:46"},{"expression":{"arguments":[{"expression":{"id":55040,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2380:3:46","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2384:6:46","memberName":"sender","nodeType":"MemberAccess","src":"2380:10:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55042,"name":"liquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55007,"src":"2392:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55039,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46498,"src":"2374:5:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":55043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2374:28:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55044,"nodeType":"ExpressionStatement","src":"2374:28:46"},{"expression":{"arguments":[{"expression":{"id":55049,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2449:3:46","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2453:6:46","memberName":"sender","nodeType":"MemberAccess","src":"2449:10:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55051,"name":"tokenAAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55020,"src":"2461:12:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":55046,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54853,"src":"2432:6:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55045,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46633,"src":"2415:16:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC20Upgradeable_$46633_$","typeString":"type(contract ERC20Upgradeable)"}},"id":55047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2415:24:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$46633","typeString":"contract ERC20Upgradeable"}},"id":55048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2440:8:46","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":46213,"src":"2415:33:46","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":55052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2415:59:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55053,"nodeType":"ExpressionStatement","src":"2415:59:46"},{"expression":{"arguments":[{"expression":{"id":55058,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2519:3:46","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2523:6:46","memberName":"sender","nodeType":"MemberAccess","src":"2519:10:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55060,"name":"tokenBAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55030,"src":"2531:12:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":55055,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54855,"src":"2502:6:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55054,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46633,"src":"2485:16:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC20Upgradeable_$46633_$","typeString":"type(contract ERC20Upgradeable)"}},"id":55056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2485:24:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$46633","typeString":"contract ERC20Upgradeable"}},"id":55057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2510:8:46","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":46213,"src":"2485:33:46","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":55061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2485:59:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55062,"nodeType":"ExpressionStatement","src":"2485:59:46"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":55063,"name":"updateReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55242,"src":"2557:14:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":55064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2557:16:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55065,"nodeType":"ExpressionStatement","src":"2557:16:46"},{"eventCall":{"arguments":[{"expression":{"id":55067,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2608:3:46","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2612:6:46","memberName":"sender","nodeType":"MemberAccess","src":"2608:10:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55069,"name":"tokenAAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55020,"src":"2620:12:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55070,"name":"tokenBAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55030,"src":"2634:12:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55066,"name":"LiquidityRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54879,"src":"2591:16:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":55071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2591:56:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55072,"nodeType":"EmitStatement","src":"2586:61:46"}]},"functionSelector":"9c8f9f23","implemented":true,"kind":"function","modifiers":[{"id":55010,"kind":"modifierInvocation","modifierName":{"id":55009,"name":"nonReentrant","nameLocations":["2143:12:46"],"nodeType":"IdentifierPath","referencedDeclaration":46851,"src":"2143:12:46"},"nodeType":"ModifierInvocation","src":"2143:12:46"}],"name":"removeLiquidity","nameLocation":"2099:15:46","parameters":{"id":55008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55007,"mutability":"mutable","name":"liquidity","nameLocation":"2123:9:46","nodeType":"VariableDeclaration","scope":55074,"src":"2115:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55006,"name":"uint256","nodeType":"ElementaryTypeName","src":"2115:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2114:19:46"},"returnParameters":{"id":55011,"nodeType":"ParameterList","parameters":[],"src":"2156:0:46"},"scope":55301,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55162,"nodeType":"FunctionDefinition","src":"2663:708:46","nodes":[],"body":{"id":55161,"nodeType":"Block","src":"2756:615:46","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":55092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":55088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55086,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55076,"src":"2775:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":55087,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54853,"src":"2786:6:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2775:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":55091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55089,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55076,"src":"2796:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":55090,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54855,"src":"2807:6:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2796:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2775:38:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c696420746f6b656e2061646472657373","id":55093,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2815:23:46","typeDescriptions":{"typeIdentifier":"t_stringliteral_d34df3e6e5f402d3417b1a16a0a8a7541b184d7fb338e177a15236f4037e3743","typeString":"literal_string \"Invalid token address\""},"value":"Invalid token address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d34df3e6e5f402d3417b1a16a0a8a7541b184d7fb338e177a15236f4037e3743","typeString":"literal_string \"Invalid token address\""}],"id":55085,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2767:7:46","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2767:72:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55095,"nodeType":"ExpressionStatement","src":"2767:72:46"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55097,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55078,"src":"2858:8:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":55098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2869:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2858:12:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c696420696e70757420616d6f756e74","id":55100,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2872:22:46","typeDescriptions":{"typeIdentifier":"t_stringliteral_71128eeb4fd76da6a8355c9d10e3d97be1d2b0195b0030a1450235b9a3ac80cf","typeString":"literal_string \"Invalid input amount\""},"value":"Invalid input amount"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_71128eeb4fd76da6a8355c9d10e3d97be1d2b0195b0030a1450235b9a3ac80cf","typeString":"literal_string \"Invalid input amount\""}],"id":55096,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2850:7:46","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2850:45:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55102,"nodeType":"ExpressionStatement","src":"2850:45:46"},{"assignments":[55104],"declarations":[{"constant":false,"id":55104,"mutability":"mutable","name":"tokenOut","nameLocation":"2916:8:46","nodeType":"VariableDeclaration","scope":55161,"src":"2908:16:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55103,"name":"address","nodeType":"ElementaryTypeName","src":"2908:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55112,"initialValue":{"condition":{"components":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":55107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55105,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55076,"src":"2928:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":55106,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54853,"src":"2939:6:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2928:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":55108,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2927:19:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":55110,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54853,"src":"2958:6:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"2927:37:46","trueExpression":{"id":55109,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54855,"src":"2949:6:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2908:56:46"},{"assignments":[55114],"declarations":[{"constant":false,"id":55114,"mutability":"mutable","name":"amountOut","nameLocation":"2983:9:46","nodeType":"VariableDeclaration","scope":55161,"src":"2975:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55113,"name":"uint256","nodeType":"ElementaryTypeName","src":"2975:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55119,"initialValue":{"arguments":[{"id":55116,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55078,"src":"3008:8:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55117,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55076,"src":"3018:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55115,"name":"getAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55214,"src":"2995:12:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":55118,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2995:31:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2975:51:46"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55121,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55114,"src":"3047:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":55122,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55080,"src":"3060:12:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3047:25:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e73756666696369656e74206f757470757420616d6f756e74","id":55124,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3074:28:46","typeDescriptions":{"typeIdentifier":"t_stringliteral_6e185d54b6a4477f06f9d935db5f3f87aa098f61558d7a6d802e1773173b7b90","typeString":"literal_string \"Insufficient output amount\""},"value":"Insufficient output amount"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6e185d54b6a4477f06f9d935db5f3f87aa098f61558d7a6d802e1773173b7b90","typeString":"literal_string \"Insufficient output amount\""}],"id":55120,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3039:7:46","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3039:64:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55126,"nodeType":"ExpressionStatement","src":"3039:64:46"},{"expression":{"arguments":[{"expression":{"id":55131,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3155:3:46","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3159:6:46","memberName":"sender","nodeType":"MemberAccess","src":"3155:10:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55135,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3175:4:46","typeDescriptions":{"typeIdentifier":"t_contract$_LiquidityPool_$55301","typeString":"contract LiquidityPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_LiquidityPool_$55301","typeString":"contract LiquidityPool"}],"id":55134,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3167:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55133,"name":"address","nodeType":"ElementaryTypeName","src":"3167:7:46","typeDescriptions":{}}},"id":55136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3167:13:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55137,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55078,"src":"3182:8:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":55128,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55076,"src":"3133:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55127,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46633,"src":"3116:16:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC20Upgradeable_$46633_$","typeString":"type(contract ERC20Upgradeable)"}},"id":55129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3116:25:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$46633","typeString":"contract ERC20Upgradeable"}},"id":55130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3142:12:46","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":46293,"src":"3116:38:46","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":55138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3116:75:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55139,"nodeType":"ExpressionStatement","src":"3116:75:46"},{"expression":{"arguments":[{"expression":{"id":55144,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3238:3:46","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3242:6:46","memberName":"sender","nodeType":"MemberAccess","src":"3238:10:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55146,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55114,"src":"3250:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":55141,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55104,"src":"3219:8:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55140,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46633,"src":"3202:16:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC20Upgradeable_$46633_$","typeString":"type(contract ERC20Upgradeable)"}},"id":55142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3202:26:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$46633","typeString":"contract ERC20Upgradeable"}},"id":55143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3229:8:46","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":46213,"src":"3202:35:46","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":55147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3202:58:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55148,"nodeType":"ExpressionStatement","src":"3202:58:46"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":55149,"name":"updateReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55242,"src":"3273:14:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":55150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3273:16:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55151,"nodeType":"ExpressionStatement","src":"3273:16:46"},{"eventCall":{"arguments":[{"expression":{"id":55153,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3312:3:46","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55154,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3316:6:46","memberName":"sender","nodeType":"MemberAccess","src":"3312:10:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55155,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55076,"src":"3324:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55156,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55078,"src":"3333:8:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55157,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55104,"src":"3343:8:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55158,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55114,"src":"3353:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55152,"name":"Swap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54891,"src":"3307:4:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,address,uint256)"}},"id":55159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3307:56:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55160,"nodeType":"EmitStatement","src":"3302:61:46"}]},"functionSelector":"9f1d0f59","implemented":true,"kind":"function","modifiers":[{"id":55083,"kind":"modifierInvocation","modifierName":{"id":55082,"name":"nonReentrant","nameLocations":["2743:12:46"],"nodeType":"IdentifierPath","referencedDeclaration":46851,"src":"2743:12:46"},"nodeType":"ModifierInvocation","src":"2743:12:46"}],"name":"swap","nameLocation":"2672:4:46","parameters":{"id":55081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55076,"mutability":"mutable","name":"tokenIn","nameLocation":"2685:7:46","nodeType":"VariableDeclaration","scope":55162,"src":"2677:15:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55075,"name":"address","nodeType":"ElementaryTypeName","src":"2677:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55078,"mutability":"mutable","name":"amountIn","nameLocation":"2702:8:46","nodeType":"VariableDeclaration","scope":55162,"src":"2694:16:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55077,"name":"uint256","nodeType":"ElementaryTypeName","src":"2694:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55080,"mutability":"mutable","name":"minAmountOut","nameLocation":"2720:12:46","nodeType":"VariableDeclaration","scope":55162,"src":"2712:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55079,"name":"uint256","nodeType":"ElementaryTypeName","src":"2712:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2676:57:46"},"returnParameters":{"id":55084,"nodeType":"ParameterList","parameters":[],"src":"2756:0:46"},"scope":55301,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55214,"nodeType":"FunctionDefinition","src":"3379:399:46","nodes":[],"body":{"id":55213,"nodeType":"Block","src":"3466:312:46","nodes":[],"statements":[{"assignments":[55172],"declarations":[{"constant":false,"id":55172,"mutability":"mutable","name":"reserveIn","nameLocation":"3485:9:46","nodeType":"VariableDeclaration","scope":55213,"src":"3477:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55171,"name":"uint256","nodeType":"ElementaryTypeName","src":"3477:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55180,"initialValue":{"condition":{"components":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":55175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55173,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55166,"src":"3498:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":55174,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54853,"src":"3509:6:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3498:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":55176,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3497:19:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":55178,"name":"reserveB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54859,"src":"3530:8:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"3497:41:46","trueExpression":{"id":55177,"name":"reserveA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54857,"src":"3519:8:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3477:61:46"},{"assignments":[55182],"declarations":[{"constant":false,"id":55182,"mutability":"mutable","name":"reserveOut","nameLocation":"3557:10:46","nodeType":"VariableDeclaration","scope":55213,"src":"3549:18:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55181,"name":"uint256","nodeType":"ElementaryTypeName","src":"3549:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55190,"initialValue":{"condition":{"components":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":55185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55183,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55166,"src":"3571:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":55184,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54853,"src":"3582:6:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3571:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":55186,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3570:19:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":55188,"name":"reserveA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54857,"src":"3603:8:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"3570:41:46","trueExpression":{"id":55187,"name":"reserveB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54859,"src":"3592:8:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3549:62:46"},{"assignments":[55192],"declarations":[{"constant":false,"id":55192,"mutability":"mutable","name":"amountInWithFee","nameLocation":"3630:15:46","nodeType":"VariableDeclaration","scope":55213,"src":"3622:23:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55191,"name":"uint256","nodeType":"ElementaryTypeName","src":"3622:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55202,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55193,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55164,"src":"3649:8:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130303030","id":55194,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3661:5:46","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10000"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":55195,"name":"platformFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54861,"src":"3669:11:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3661:19:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":55197,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3660:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3649:32:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":55199,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3648:34:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130303030","id":55200,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3685:5:46","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10000"},"src":"3648:42:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3622:68:46"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55203,"name":"amountInWithFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55192,"src":"3709:15:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":55204,"name":"reserveOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55182,"src":"3727:10:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3709:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":55206,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3708:30:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55207,"name":"reserveIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55172,"src":"3742:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":55208,"name":"amountInWithFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55192,"src":"3754:15:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3742:27:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":55210,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3741:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3708:62:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55170,"id":55212,"nodeType":"Return","src":"3701:69:46"}]},"functionSelector":"f140a35a","implemented":true,"kind":"function","modifiers":[],"name":"getAmountOut","nameLocation":"3388:12:46","parameters":{"id":55167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55164,"mutability":"mutable","name":"amountIn","nameLocation":"3409:8:46","nodeType":"VariableDeclaration","scope":55214,"src":"3401:16:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55163,"name":"uint256","nodeType":"ElementaryTypeName","src":"3401:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55166,"mutability":"mutable","name":"tokenIn","nameLocation":"3427:7:46","nodeType":"VariableDeclaration","scope":55214,"src":"3419:15:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55165,"name":"address","nodeType":"ElementaryTypeName","src":"3419:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3400:35:46"},"returnParameters":{"id":55170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55169,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55214,"src":"3457:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55168,"name":"uint256","nodeType":"ElementaryTypeName","src":"3457:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3456:9:46"},"scope":55301,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55242,"nodeType":"FunctionDefinition","src":"3786:184:46","nodes":[],"body":{"id":55241,"nodeType":"Block","src":"3820:150:46","nodes":[],"statements":[{"expression":{"id":55227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55217,"name":"reserveA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54857,"src":"3831:8:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":55224,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3885:4:46","typeDescriptions":{"typeIdentifier":"t_contract$_LiquidityPool_$55301","typeString":"contract LiquidityPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_LiquidityPool_$55301","typeString":"contract LiquidityPool"}],"id":55223,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3877:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55222,"name":"address","nodeType":"ElementaryTypeName","src":"3877:7:46","typeDescriptions":{}}},"id":55225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3877:13:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":55219,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54853,"src":"3859:6:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55218,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46633,"src":"3842:16:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC20Upgradeable_$46633_$","typeString":"type(contract ERC20Upgradeable)"}},"id":55220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3842:24:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$46633","typeString":"contract ERC20Upgradeable"}},"id":55221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3867:9:46","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":46189,"src":"3842:34:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":55226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3842:49:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3831:60:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55228,"nodeType":"ExpressionStatement","src":"3831:60:46"},{"expression":{"id":55239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55229,"name":"reserveB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54859,"src":"3902:8:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":55236,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3956:4:46","typeDescriptions":{"typeIdentifier":"t_contract$_LiquidityPool_$55301","typeString":"contract LiquidityPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_LiquidityPool_$55301","typeString":"contract LiquidityPool"}],"id":55235,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3948:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55234,"name":"address","nodeType":"ElementaryTypeName","src":"3948:7:46","typeDescriptions":{}}},"id":55237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3948:13:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":55231,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54855,"src":"3930:6:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55230,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46633,"src":"3913:16:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC20Upgradeable_$46633_$","typeString":"type(contract ERC20Upgradeable)"}},"id":55232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3913:24:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ERC20Upgradeable_$46633","typeString":"contract ERC20Upgradeable"}},"id":55233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3938:9:46","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":46189,"src":"3913:34:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":55238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3913:49:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3902:60:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55240,"nodeType":"ExpressionStatement","src":"3902:60:46"}]},"implemented":true,"kind":"function","modifiers":[],"name":"updateReserves","nameLocation":"3795:14:46","parameters":{"id":55215,"nodeType":"ParameterList","parameters":[],"src":"3809:2:46"},"returnParameters":{"id":55216,"nodeType":"ParameterList","parameters":[],"src":"3820:0:46"},"scope":55301,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55261,"nodeType":"FunctionDefinition","src":"3978:187:46","nodes":[],"body":{"id":55260,"nodeType":"Block","src":"4081:84:46","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55253,"name":"tokenAAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55244,"src":"4109:12:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":55254,"name":"tokenBAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55246,"src":"4124:12:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4109:27:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":55251,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51738,"src":"4099:4:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$51738_$","typeString":"type(library Math)"}},"id":55252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4104:4:46","memberName":"sqrt","nodeType":"MemberAccess","referencedDeclaration":51227,"src":"4099:9:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":55256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4099:38:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":55257,"name":"MINIMUM_LIQUIDITY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54863,"src":"4140:17:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4099:58:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55250,"id":55259,"nodeType":"Return","src":"4092:65:46"}]},"implemented":true,"kind":"function","modifiers":[],"name":"calculateLiquidity","nameLocation":"3987:18:46","parameters":{"id":55247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55244,"mutability":"mutable","name":"tokenAAmount","nameLocation":"4014:12:46","nodeType":"VariableDeclaration","scope":55261,"src":"4006:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55243,"name":"uint256","nodeType":"ElementaryTypeName","src":"4006:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55246,"mutability":"mutable","name":"tokenBAmount","nameLocation":"4036:12:46","nodeType":"VariableDeclaration","scope":55261,"src":"4028:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55245,"name":"uint256","nodeType":"ElementaryTypeName","src":"4028:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4005:44:46"},"returnParameters":{"id":55250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55249,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55261,"src":"4072:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55248,"name":"uint256","nodeType":"ElementaryTypeName","src":"4072:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4071:9:46"},"scope":55301,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":55273,"nodeType":"FunctionDefinition","src":"4173:110:46","nodes":[],"body":{"id":55272,"nodeType":"Block","src":"4237:46:46","nodes":[],"statements":[{"expression":{"components":[{"id":55268,"name":"reserveA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54857,"src":"4256:8:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55269,"name":"reserveB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54859,"src":"4266:8:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":55270,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4255:20:46","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":55267,"id":55271,"nodeType":"Return","src":"4248:27:46"}]},"functionSelector":"0902f1ac","implemented":true,"kind":"function","modifiers":[],"name":"getReserves","nameLocation":"4182:11:46","parameters":{"id":55262,"nodeType":"ParameterList","parameters":[],"src":"4193:2:46"},"returnParameters":{"id":55267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55264,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55273,"src":"4219:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55263,"name":"uint256","nodeType":"ElementaryTypeName","src":"4219:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55266,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55273,"src":"4228:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55265,"name":"uint256","nodeType":"ElementaryTypeName","src":"4228:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4218:18:46"},"scope":55301,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":55288,"nodeType":"FunctionDefinition","src":"4291:142:46","nodes":[],"body":{"id":55287,"nodeType":"Block","src":"4376:57:46","nodes":[],"statements":[{"expression":{"arguments":[{"id":55283,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55277,"src":"4407:8:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55284,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55275,"src":"4417:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55282,"name":"getAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55214,"src":"4394:12:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":55285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4394:31:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55281,"id":55286,"nodeType":"Return","src":"4387:38:46"}]},"functionSelector":"449e815d","implemented":true,"kind":"function","modifiers":[],"name":"getPrice","nameLocation":"4300:8:46","parameters":{"id":55278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55275,"mutability":"mutable","name":"tokenIn","nameLocation":"4317:7:46","nodeType":"VariableDeclaration","scope":55288,"src":"4309:15:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55274,"name":"address","nodeType":"ElementaryTypeName","src":"4309:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55277,"mutability":"mutable","name":"amountIn","nameLocation":"4334:8:46","nodeType":"VariableDeclaration","scope":55288,"src":"4326:16:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55276,"name":"uint256","nodeType":"ElementaryTypeName","src":"4326:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4308:35:46"},"returnParameters":{"id":55281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55280,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55288,"src":"4367:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55279,"name":"uint256","nodeType":"ElementaryTypeName","src":"4367:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4366:9:46"},"scope":55301,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":55300,"nodeType":"FunctionDefinition","src":"4441:113:46","nodes":[],"body":{"id":55299,"nodeType":"Block","src":"4509:45:46","nodes":[],"statements":[{"expression":{"id":55297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55295,"name":"platformFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54861,"src":"4520:11:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":55296,"name":"_platformFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55290,"src":"4534:12:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4520:26:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55298,"nodeType":"ExpressionStatement","src":"4520:26:46"}]},"functionSelector":"aa0b5988","implemented":true,"kind":"function","modifiers":[{"id":55293,"kind":"modifierInvocation","modifierName":{"id":55292,"name":"onlyOwner","nameLocations":["4499:9:46"],"nodeType":"IdentifierPath","referencedDeclaration":43293,"src":"4499:9:46"},"nodeType":"ModifierInvocation","src":"4499:9:46"}],"name":"updatePlatformFee","nameLocation":"4450:17:46","parameters":{"id":55291,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55290,"mutability":"mutable","name":"_platformFee","nameLocation":"4476:12:46","nodeType":"VariableDeclaration","scope":55300,"src":"4468:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55289,"name":"uint256","nodeType":"ElementaryTypeName","src":"4468:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4467:22:46"},"returnParameters":{"id":55294,"nodeType":"ParameterList","parameters":[],"src":"4509:0:46"},"scope":55301,"stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":54844,"name":"Initializable","nameLocations":["447:13:46"],"nodeType":"IdentifierPath","referencedDeclaration":46016,"src":"447:13:46"},"id":54845,"nodeType":"InheritanceSpecifier","src":"447:13:46"},{"baseName":{"id":54846,"name":"ERC20Upgradeable","nameLocations":["462:16:46"],"nodeType":"IdentifierPath","referencedDeclaration":46633,"src":"462:16:46"},"id":54847,"nodeType":"InheritanceSpecifier","src":"462:16:46"},{"baseName":{"id":54848,"name":"ReentrancyGuardUpgradeable","nameLocations":["480:26:46"],"nodeType":"IdentifierPath","referencedDeclaration":46911,"src":"480:26:46"},"id":54849,"nodeType":"InheritanceSpecifier","src":"480:26:46"},{"baseName":{"id":54850,"name":"OwnableUpgradeable","nameLocations":["508:18:46"],"nodeType":"IdentifierPath","referencedDeclaration":43398,"src":"508:18:46"},"id":54851,"nodeType":"InheritanceSpecifier","src":"508:18:46"}],"canonicalName":"LiquidityPool","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[55301,43398,46911,46633,49600,50314,50288,46679,46016],"name":"LiquidityPool","nameLocation":"430:13:46","scope":55302,"usedErrors":[43234,43239,45779,45782,46813,49570,49575,49580,49589,49594,49599],"usedEvents":[43245,45787,50222,50231,54871,54879,54891]}],"license":"MIT"},"id":46} \ No newline at end of file diff --git a/next-app/src/abi/LiquidityPoolFactory.json b/next-app/src/abi/LiquidityPoolFactory.json deleted file mode 100644 index 32d0fef..0000000 --- a/next-app/src/abi/LiquidityPoolFactory.json +++ /dev/null @@ -1,3075 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "allPools", - "inputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "allPoolsLength", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "createPool", - "inputs": [ - { - "name": "tokenA", - "type": "address", - "internalType": "address" - }, - { - "name": "tokenB", - "type": "address", - "internalType": "address" - }, - { - "name": "owner", - "type": "address", - "internalType": "address" - }, - { - "name": "platformFee", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "pool", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getPool", - "inputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - }, - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "initialize", - "inputs": [ - { - "name": "owner", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { - "name": "newOwner", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "Initialized", - "inputs": [ - { - "name": "version", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PoolCreated", - "inputs": [ - { - "name": "tokenA", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "tokenB", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "poolAddress", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "InvalidInitialization", - "inputs": [] - }, - { - "type": "error", - "name": "NotInitializing", - "inputs": [] - }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { - "name": "owner", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { - "name": "account", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "ReentrancyGuardReentrantCall", - "inputs": [] - } - ], - "bytecode": { - "object": "0x6080604052348015600f57600080fd5b506124208061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c806393c907b41161005b57806393c907b414610128578063c4d66de81461013b578063efde4e641461014e578063f2fde38b1461015f57600080fd5b806341d1de971461008d578063531aa03e146100bd578063715018a6146100ee5780638da5cb5b146100f8575b600080fd5b6100a061009b3660046107eb565b610172565b6040516001600160a01b0390911681526020015b60405180910390f35b6100a06100cb366004610820565b60006020818152928152604080822090935290815220546001600160a01b031681565b6100f661019c565b005b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166100a0565b6100a0610136366004610853565b6101b0565b6100f661014936600461089e565b6104d2565b6001546040519081526020016100b4565b6100f661016d36600461089e565b6105ea565b6001818154811061018257600080fd5b6000918252602090912001546001600160a01b0316905081565b6101a4610628565b6101ae6000610683565b565b60006101ba610628565b6101c26106f4565b6001600160a01b038516158015906101e257506001600160a01b03841615155b6102335760405162461bcd60e51b815260206004820181905260248201527f466163746f72793a20696e76616c696420746f6b656e2061646472657373657360448201526064015b60405180910390fd5b836001600160a01b0316856001600160a01b03160361029f5760405162461bcd60e51b815260206004820152602260248201527f466163746f72793a206964656e746963616c20746f6b656e2061646472657373604482015261657360f01b606482015260840161022a565b6001600160a01b038581166000908152602081815260408083208885168452909152902054161580156102f557506001600160a01b03848116600090815260208181526040808320898516845290915290205416155b6103415760405162461bcd60e51b815260206004820152601c60248201527f466163746f72793a20706f6f6c20616c72656164792065786973747300000000604482015260640161022a565b60405161034d906107de565b604051809103906000f080158015610369573d6000803e3d6000fd5b506040516314d6c7d760e31b81526001600160a01b0387811660048301528681166024830152858116604483015260648201859052600a60848301529192509082169063a6b63eb89060a401600060405180830381600087803b1580156103cf57600080fd5b505af11580156103e3573d6000803e3d6000fd5b505050506001600160a01b0385811660008181526020818152604080832089861680855290835281842080549688166001600160a01b031997881681179091558484528285208686528452828520805488168217905560018054808201825595527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690940180549096168417909555519182527f9c5d829b9b23efc461f9aeef91979ec04bb903feb3bee4f26d22114abfc7335b910160405180910390a36104ca60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156105185750825b905060008267ffffffffffffffff1660011480156105355750303b155b905081158015610543575080155b156105615760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561058b57845460ff60401b1916600160401b1785555b61059486610764565b61059c610775565b83156105e257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6105f2610628565b6001600160a01b03811661061c57604051631e4fbdf760e01b81526000600482015260240161022a565b61062581610683565b50565b3361065a7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146101ae5760405163118cdaa760e01b815233600482015260240161022a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080546001190161073857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61076c610785565b610625816107ce565b61077d610785565b6101ae6107d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166101ae57604051631afcd79f60e31b815260040160405180910390fd5b6105f2610785565b61073e610785565b611b2a806108c183390190565b6000602082840312156107fd57600080fd5b5035919050565b80356001600160a01b038116811461081b57600080fd5b919050565b6000806040838503121561083357600080fd5b61083c83610804565b915061084a60208401610804565b90509250929050565b6000806000806080858703121561086957600080fd5b61087285610804565b935061088060208601610804565b925061088e60408601610804565b9396929550929360600135925050565b6000602082840312156108b057600080fd5b6108b982610804565b939250505056fe6080604052348015600f57600080fd5b50611b0b8061001f6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c3578063a6b63eb81161007c578063a6b63eb81461030c578063a9059cbb1461031f578063aa0b598814610332578063dd62ed3e14610345578063f140a35a14610358578063f2fde38b1461036b57600080fd5b8063715018a6146102915780638da5cb5b1461029b57806395d89b41146102cb5780639c8f9f23146102d35780639cd441da146102e65780639f1d0f59146102f957600080fd5b806323b872dd1161011557806323b872dd1461020a57806326232a2e1461021d578063313ce56714610226578063449e815d146102355780635f64b55b1461024857806370a082311461025b57600080fd5b806306fdde03146101525780630902f1ac14610170578063095ea7b31461018b5780630fc63d10146101ae57806318160ddd146101d9575b600080fd5b61015a61037e565b604051610167919061166a565b60405180910390f35b60025460035460408051928352602083019190915201610167565b61019e6101993660046116d5565b610441565b6040519015158152602001610167565b6000546101c1906001600160a01b031681565b6040516001600160a01b039091168152602001610167565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610167565b61019e6102183660046116ff565b61045b565b6101fc60045481565b60405160128152602001610167565b6101fc6102433660046116d5565b61047f565b6001546101c1906001600160a01b031681565b6101fc61026936600461173b565b6001600160a01b03166000908152600080516020611a96833981519152602052604090205490565b610299610492565b005b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166101c1565b61015a6104a6565b6102996102e1366004611756565b6104e5565b6102996102f436600461176f565b61071d565b610299610307366004611791565b6108e2565b61029961031a3660046117c4565b610b96565b61019e61032d3660046116d5565b610d3e565b610299610340366004611756565b610d4c565b6101fc610353366004611819565b610d59565b6101fc61036636600461184c565b610da3565b61029961037936600461173b565b610e42565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020611a96833981519152916103bd9061186f565b80601f01602080910402602001604051908101604052809291908181526020018280546103e99061186f565b80156104365780601f1061040b57610100808354040283529160200191610436565b820191906000526020600020905b81548152906001019060200180831161041957829003601f168201915b505050505091505090565b60003361044f818585610e7d565b60019150505b92915050565b600033610469858285610e8a565b610474858585610ef0565b506001949350505050565b600061048b8284610da3565b9392505050565b61049a610f4f565b6104a46000610faa565b565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020611a96833981519152916103bd9061186f565b6104ed61101b565b600081116105425760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206c697175696469747920616d6f756e74000000000000000060448201526064015b60405180910390fd5b600061056c7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b60025461057990846118bf565b61058391906118ec565b905060006105af7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b6003546105bc90856118bf565b6105c691906118ec565b90506105d23384611053565b60005460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610623573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610647919061190e565b5060015460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bd919061190e565b506106c6611089565b604080518381526020810183905233917f96cd817c6329656790ef8fba7675405193677d39619571282f5e21f3a98cd059910160405180910390a2505061071a6001600080516020611ab683398151915255565b50565b61072561101b565b6000821180156107355750600081115b6107735760405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420616d6f756e747360881b6044820152606401610539565b6000546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee919061190e565b506001546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086a919061190e565b506000610877838361117d565b9050610883338261119f565b61088b611089565b604080518481526020810184905233917fac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee45910160405180910390a2506108de6001600080516020611ab683398151915255565b5050565b6108ea61101b565b6000546001600160a01b038481169116148061091357506001546001600160a01b038481169116145b6109575760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401610539565b6000821161099e5760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081a5b9c1d5d08185b5bdd5b9d60621b6044820152606401610539565b600080546001600160a01b038581169116146109c5576000546001600160a01b03166109d2565b6001546001600160a01b03165b905060006109e08486610da3565b905082811015610a325760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e74206f757470757420616d6f756e740000000000006044820152606401610539565b6040516323b872dd60e01b8152336004820152306024820152604481018590526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa9919061190e565b5060405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610af7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1b919061190e565b50610b24611089565b604080516001600160a01b0387811682526020820187905284168183015260608101839052905133917f5380cf97d8f645d3c4896da60c053458dca03a3a31cec642ac80e1ddf0d8d02a919081900360800190a25050610b916001600080516020611ab683398151915255565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610bdc5750825b905060008267ffffffffffffffff166001148015610bf95750303b155b905081158015610c07575080155b15610c255760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c4f57845460ff60401b1916600160401b1785555b610ca1604051806040016040528060158152602001744c697175696469747920506f6f6c20546f6b656e7360581b8152506040518060400160405280600381526020016213141560ea1b8152506111d5565b610ca96111e7565b610cb2886111f7565b600080546001600160a01b03808d166001600160a01b03199283161790925560018054928c1692909116919091179055600487905560058690558315610d3257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b60003361044f818585610ef0565b610d54610f4f565b600455565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6000805481906001600160a01b03848116911614610dc357600354610dc7565b6002545b60008054919250906001600160a01b03858116911614610de957600254610ded565b6003545b90506000612710600454612710610e049190611930565b610e0e90886118bf565b610e1891906118ec565b9050610e248184611943565b610e2e83836118bf565b610e3891906118ec565b9695505050505050565b610e4a610f4f565b6001600160a01b038116610e7457604051631e4fbdf760e01b815260006004820152602401610539565b61071a81610faa565b610b918383836001611208565b6000610e968484610d59565b90506000198114610eea5781811015610edb57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610539565b610eea84848484036000611208565b50505050565b6001600160a01b038316610f1a57604051634b637e8f60e11b815260006004820152602401610539565b6001600160a01b038216610f445760405163ec442f0560e01b815260006004820152602401610539565b610b918383836112f0565b33610f817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104a45760405163118cdaa760e01b8152336004820152602401610539565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600080516020611ab683398151915280546001190161104d57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6001600160a01b03821661107d57604051634b637e8f60e11b815260006004820152602401610539565b6108de826000836112f0565b6000546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156110d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f59190611956565b6002556001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611140573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111649190611956565b600355565b6001600080516020611ab683398151915255565b60055460009061119561119084866118bf565b61142e565b61048b9190611930565b6001600160a01b0382166111c95760405163ec442f0560e01b815260006004820152602401610539565b6108de600083836112f0565b6111dd611516565b6108de828261155f565b6111ef611516565b6104a46115b0565b6111ff611516565b61071a816115b8565b600080516020611a968339815191526001600160a01b0385166112415760405163e602df0560e01b815260006004820152602401610539565b6001600160a01b03841661126b57604051634a1406b160e11b815260006004820152602401610539565b6001600160a01b038086166000908152600183016020908152604080832093881683529290522083905581156112e957836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516112e091815260200190565b60405180910390a35b5050505050565b600080516020611a968339815191526001600160a01b03841661132c57818160020160008282546113219190611943565b9091555061139e9050565b6001600160a01b0384166000908152602082905260409020548281101561137f5760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610539565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b0383166113bc5760028101805483900390556113db565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161142091815260200190565b60405180910390a350505050565b60008160000361144057506000919050565b6000600161144d846115c0565b901c6001901b90506001818481611466576114666118d6565b048201901c9050600181848161147e5761147e6118d6565b048201901c90506001818481611496576114966118d6565b048201901c905060018184816114ae576114ae6118d6565b048201901c905060018184816114c6576114c66118d6565b048201901c905060018184816114de576114de6118d6565b048201901c905060018184816114f6576114f66118d6565b048201901c905061048b81828581611510576115106118d6565b04611654565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166104a457604051631afcd79f60e31b815260040160405180910390fd5b611567611516565b600080516020611a968339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036115a184826119d5565b5060048101610eea83826119d5565b611169611516565b610e4a611516565b600080608083901c156115d557608092831c92015b604083901c156115e757604092831c92015b602083901c156115f957602092831c92015b601083901c1561160b57601092831c92015b600883901c1561161d57600892831c92015b600483901c1561162f57600492831c92015b600283901c1561164157600292831c92015b600183901c156104555760010192915050565b6000818310611663578161048b565b5090919050565b60006020808352835180602085015260005b818110156116985785810183015185820160400152820161167c565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146116d057600080fd5b919050565b600080604083850312156116e857600080fd5b6116f1836116b9565b946020939093013593505050565b60008060006060848603121561171457600080fd5b61171d846116b9565b925061172b602085016116b9565b9150604084013590509250925092565b60006020828403121561174d57600080fd5b61048b826116b9565b60006020828403121561176857600080fd5b5035919050565b6000806040838503121561178257600080fd5b50508035926020909101359150565b6000806000606084860312156117a657600080fd5b6117af846116b9565b95602085013595506040909401359392505050565b600080600080600060a086880312156117dc57600080fd5b6117e5866116b9565b94506117f3602087016116b9565b9350611801604087016116b9565b94979396509394606081013594506080013592915050565b6000806040838503121561182c57600080fd5b611835836116b9565b9150611843602084016116b9565b90509250929050565b6000806040838503121561185f57600080fd5b82359150611843602084016116b9565b600181811c9082168061188357607f821691505b6020821081036118a357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610455576104556118a9565b634e487b7160e01b600052601260045260246000fd5b60008261190957634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561192057600080fd5b8151801515811461048b57600080fd5b81810381811115610455576104556118a9565b80820180821115610455576104556118a9565b60006020828403121561196857600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b601f821115610b91576000816000526020600020601f850160051c810160208610156119ae5750805b601f850160051c820191505b818110156119cd578281556001016119ba565b505050505050565b815167ffffffffffffffff8111156119ef576119ef61196f565b611a03816119fd845461186f565b84611985565b602080601f831160018114611a385760008415611a205750858301515b600019600386901b1c1916600185901b1785556119cd565b600085815260208120601f198616915b82811015611a6757888601518255948401946001909101908401611a48565b5085821015611a855787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220e0423eae0aa90fc5ee1352ff74fa5459728b920dceca8eed2d5216ce9c6da6d364736f6c63430008190033a2646970667358221220797842634fa9397e7a3d892db59b45547bcbc6c66b7b652c54002433952a4baf64736f6c63430008190033", - "sourceMap": "331:2117:47:-:0;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c806393c907b41161005b57806393c907b414610128578063c4d66de81461013b578063efde4e641461014e578063f2fde38b1461015f57600080fd5b806341d1de971461008d578063531aa03e146100bd578063715018a6146100ee5780638da5cb5b146100f8575b600080fd5b6100a061009b3660046107eb565b610172565b6040516001600160a01b0390911681526020015b60405180910390f35b6100a06100cb366004610820565b60006020818152928152604080822090935290815220546001600160a01b031681565b6100f661019c565b005b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166100a0565b6100a0610136366004610853565b6101b0565b6100f661014936600461089e565b6104d2565b6001546040519081526020016100b4565b6100f661016d36600461089e565b6105ea565b6001818154811061018257600080fd5b6000918252602090912001546001600160a01b0316905081565b6101a4610628565b6101ae6000610683565b565b60006101ba610628565b6101c26106f4565b6001600160a01b038516158015906101e257506001600160a01b03841615155b6102335760405162461bcd60e51b815260206004820181905260248201527f466163746f72793a20696e76616c696420746f6b656e2061646472657373657360448201526064015b60405180910390fd5b836001600160a01b0316856001600160a01b03160361029f5760405162461bcd60e51b815260206004820152602260248201527f466163746f72793a206964656e746963616c20746f6b656e2061646472657373604482015261657360f01b606482015260840161022a565b6001600160a01b038581166000908152602081815260408083208885168452909152902054161580156102f557506001600160a01b03848116600090815260208181526040808320898516845290915290205416155b6103415760405162461bcd60e51b815260206004820152601c60248201527f466163746f72793a20706f6f6c20616c72656164792065786973747300000000604482015260640161022a565b60405161034d906107de565b604051809103906000f080158015610369573d6000803e3d6000fd5b506040516314d6c7d760e31b81526001600160a01b0387811660048301528681166024830152858116604483015260648201859052600a60848301529192509082169063a6b63eb89060a401600060405180830381600087803b1580156103cf57600080fd5b505af11580156103e3573d6000803e3d6000fd5b505050506001600160a01b0385811660008181526020818152604080832089861680855290835281842080549688166001600160a01b031997881681179091558484528285208686528452828520805488168217905560018054808201825595527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690940180549096168417909555519182527f9c5d829b9b23efc461f9aeef91979ec04bb903feb3bee4f26d22114abfc7335b910160405180910390a36104ca60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156105185750825b905060008267ffffffffffffffff1660011480156105355750303b155b905081158015610543575080155b156105615760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561058b57845460ff60401b1916600160401b1785555b61059486610764565b61059c610775565b83156105e257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6105f2610628565b6001600160a01b03811661061c57604051631e4fbdf760e01b81526000600482015260240161022a565b61062581610683565b50565b3361065a7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146101ae5760405163118cdaa760e01b815233600482015260240161022a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080546001190161073857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61076c610785565b610625816107ce565b61077d610785565b6101ae6107d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166101ae57604051631afcd79f60e31b815260040160405180910390fd5b6105f2610785565b61073e610785565b611b2a806108c183390190565b6000602082840312156107fd57600080fd5b5035919050565b80356001600160a01b038116811461081b57600080fd5b919050565b6000806040838503121561083357600080fd5b61083c83610804565b915061084a60208401610804565b90509250929050565b6000806000806080858703121561086957600080fd5b61087285610804565b935061088060208601610804565b925061088e60408601610804565b9396929550929360600135925050565b6000602082840312156108b057600080fd5b6108b982610804565b939250505056fe6080604052348015600f57600080fd5b50611b0b8061001f6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c3578063a6b63eb81161007c578063a6b63eb81461030c578063a9059cbb1461031f578063aa0b598814610332578063dd62ed3e14610345578063f140a35a14610358578063f2fde38b1461036b57600080fd5b8063715018a6146102915780638da5cb5b1461029b57806395d89b41146102cb5780639c8f9f23146102d35780639cd441da146102e65780639f1d0f59146102f957600080fd5b806323b872dd1161011557806323b872dd1461020a57806326232a2e1461021d578063313ce56714610226578063449e815d146102355780635f64b55b1461024857806370a082311461025b57600080fd5b806306fdde03146101525780630902f1ac14610170578063095ea7b31461018b5780630fc63d10146101ae57806318160ddd146101d9575b600080fd5b61015a61037e565b604051610167919061166a565b60405180910390f35b60025460035460408051928352602083019190915201610167565b61019e6101993660046116d5565b610441565b6040519015158152602001610167565b6000546101c1906001600160a01b031681565b6040516001600160a01b039091168152602001610167565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610167565b61019e6102183660046116ff565b61045b565b6101fc60045481565b60405160128152602001610167565b6101fc6102433660046116d5565b61047f565b6001546101c1906001600160a01b031681565b6101fc61026936600461173b565b6001600160a01b03166000908152600080516020611a96833981519152602052604090205490565b610299610492565b005b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166101c1565b61015a6104a6565b6102996102e1366004611756565b6104e5565b6102996102f436600461176f565b61071d565b610299610307366004611791565b6108e2565b61029961031a3660046117c4565b610b96565b61019e61032d3660046116d5565b610d3e565b610299610340366004611756565b610d4c565b6101fc610353366004611819565b610d59565b6101fc61036636600461184c565b610da3565b61029961037936600461173b565b610e42565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020611a96833981519152916103bd9061186f565b80601f01602080910402602001604051908101604052809291908181526020018280546103e99061186f565b80156104365780601f1061040b57610100808354040283529160200191610436565b820191906000526020600020905b81548152906001019060200180831161041957829003601f168201915b505050505091505090565b60003361044f818585610e7d565b60019150505b92915050565b600033610469858285610e8a565b610474858585610ef0565b506001949350505050565b600061048b8284610da3565b9392505050565b61049a610f4f565b6104a46000610faa565b565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020611a96833981519152916103bd9061186f565b6104ed61101b565b600081116105425760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206c697175696469747920616d6f756e74000000000000000060448201526064015b60405180910390fd5b600061056c7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b60025461057990846118bf565b61058391906118ec565b905060006105af7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b6003546105bc90856118bf565b6105c691906118ec565b90506105d23384611053565b60005460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610623573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610647919061190e565b5060015460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bd919061190e565b506106c6611089565b604080518381526020810183905233917f96cd817c6329656790ef8fba7675405193677d39619571282f5e21f3a98cd059910160405180910390a2505061071a6001600080516020611ab683398151915255565b50565b61072561101b565b6000821180156107355750600081115b6107735760405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420616d6f756e747360881b6044820152606401610539565b6000546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee919061190e565b506001546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086a919061190e565b506000610877838361117d565b9050610883338261119f565b61088b611089565b604080518481526020810184905233917fac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee45910160405180910390a2506108de6001600080516020611ab683398151915255565b5050565b6108ea61101b565b6000546001600160a01b038481169116148061091357506001546001600160a01b038481169116145b6109575760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401610539565b6000821161099e5760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081a5b9c1d5d08185b5bdd5b9d60621b6044820152606401610539565b600080546001600160a01b038581169116146109c5576000546001600160a01b03166109d2565b6001546001600160a01b03165b905060006109e08486610da3565b905082811015610a325760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e74206f757470757420616d6f756e740000000000006044820152606401610539565b6040516323b872dd60e01b8152336004820152306024820152604481018590526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa9919061190e565b5060405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610af7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1b919061190e565b50610b24611089565b604080516001600160a01b0387811682526020820187905284168183015260608101839052905133917f5380cf97d8f645d3c4896da60c053458dca03a3a31cec642ac80e1ddf0d8d02a919081900360800190a25050610b916001600080516020611ab683398151915255565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610bdc5750825b905060008267ffffffffffffffff166001148015610bf95750303b155b905081158015610c07575080155b15610c255760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c4f57845460ff60401b1916600160401b1785555b610ca1604051806040016040528060158152602001744c697175696469747920506f6f6c20546f6b656e7360581b8152506040518060400160405280600381526020016213141560ea1b8152506111d5565b610ca96111e7565b610cb2886111f7565b600080546001600160a01b03808d166001600160a01b03199283161790925560018054928c1692909116919091179055600487905560058690558315610d3257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b60003361044f818585610ef0565b610d54610f4f565b600455565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6000805481906001600160a01b03848116911614610dc357600354610dc7565b6002545b60008054919250906001600160a01b03858116911614610de957600254610ded565b6003545b90506000612710600454612710610e049190611930565b610e0e90886118bf565b610e1891906118ec565b9050610e248184611943565b610e2e83836118bf565b610e3891906118ec565b9695505050505050565b610e4a610f4f565b6001600160a01b038116610e7457604051631e4fbdf760e01b815260006004820152602401610539565b61071a81610faa565b610b918383836001611208565b6000610e968484610d59565b90506000198114610eea5781811015610edb57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610539565b610eea84848484036000611208565b50505050565b6001600160a01b038316610f1a57604051634b637e8f60e11b815260006004820152602401610539565b6001600160a01b038216610f445760405163ec442f0560e01b815260006004820152602401610539565b610b918383836112f0565b33610f817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104a45760405163118cdaa760e01b8152336004820152602401610539565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600080516020611ab683398151915280546001190161104d57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6001600160a01b03821661107d57604051634b637e8f60e11b815260006004820152602401610539565b6108de826000836112f0565b6000546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156110d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f59190611956565b6002556001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611140573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111649190611956565b600355565b6001600080516020611ab683398151915255565b60055460009061119561119084866118bf565b61142e565b61048b9190611930565b6001600160a01b0382166111c95760405163ec442f0560e01b815260006004820152602401610539565b6108de600083836112f0565b6111dd611516565b6108de828261155f565b6111ef611516565b6104a46115b0565b6111ff611516565b61071a816115b8565b600080516020611a968339815191526001600160a01b0385166112415760405163e602df0560e01b815260006004820152602401610539565b6001600160a01b03841661126b57604051634a1406b160e11b815260006004820152602401610539565b6001600160a01b038086166000908152600183016020908152604080832093881683529290522083905581156112e957836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516112e091815260200190565b60405180910390a35b5050505050565b600080516020611a968339815191526001600160a01b03841661132c57818160020160008282546113219190611943565b9091555061139e9050565b6001600160a01b0384166000908152602082905260409020548281101561137f5760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610539565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b0383166113bc5760028101805483900390556113db565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161142091815260200190565b60405180910390a350505050565b60008160000361144057506000919050565b6000600161144d846115c0565b901c6001901b90506001818481611466576114666118d6565b048201901c9050600181848161147e5761147e6118d6565b048201901c90506001818481611496576114966118d6565b048201901c905060018184816114ae576114ae6118d6565b048201901c905060018184816114c6576114c66118d6565b048201901c905060018184816114de576114de6118d6565b048201901c905060018184816114f6576114f66118d6565b048201901c905061048b81828581611510576115106118d6565b04611654565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166104a457604051631afcd79f60e31b815260040160405180910390fd5b611567611516565b600080516020611a968339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036115a184826119d5565b5060048101610eea83826119d5565b611169611516565b610e4a611516565b600080608083901c156115d557608092831c92015b604083901c156115e757604092831c92015b602083901c156115f957602092831c92015b601083901c1561160b57601092831c92015b600883901c1561161d57600892831c92015b600483901c1561162f57600492831c92015b600283901c1561164157600292831c92015b600183901c156104555760010192915050565b6000818310611663578161048b565b5090919050565b60006020808352835180602085015260005b818110156116985785810183015185820160400152820161167c565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146116d057600080fd5b919050565b600080604083850312156116e857600080fd5b6116f1836116b9565b946020939093013593505050565b60008060006060848603121561171457600080fd5b61171d846116b9565b925061172b602085016116b9565b9150604084013590509250925092565b60006020828403121561174d57600080fd5b61048b826116b9565b60006020828403121561176857600080fd5b5035919050565b6000806040838503121561178257600080fd5b50508035926020909101359150565b6000806000606084860312156117a657600080fd5b6117af846116b9565b95602085013595506040909401359392505050565b600080600080600060a086880312156117dc57600080fd5b6117e5866116b9565b94506117f3602087016116b9565b9350611801604087016116b9565b94979396509394606081013594506080013592915050565b6000806040838503121561182c57600080fd5b611835836116b9565b9150611843602084016116b9565b90509250929050565b6000806040838503121561185f57600080fd5b82359150611843602084016116b9565b600181811c9082168061188357607f821691505b6020821081036118a357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610455576104556118a9565b634e487b7160e01b600052601260045260246000fd5b60008261190957634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561192057600080fd5b8151801515811461048b57600080fd5b81810381811115610455576104556118a9565b80820180821115610455576104556118a9565b60006020828403121561196857600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b601f821115610b91576000816000526020600020601f850160051c810160208610156119ae5750805b601f850160051c820191505b818110156119cd578281556001016119ba565b505050505050565b815167ffffffffffffffff8111156119ef576119ef61196f565b611a03816119fd845461186f565b84611985565b602080601f831160018114611a385760008415611a205750858301515b600019600386901b1c1916600185901b1785556119cd565b600085815260208120601f198616915b82811015611a6757888601518255948401946001909101908401611a48565b5085821015611a855787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220e0423eae0aa90fc5ee1352ff74fa5459728b920dceca8eed2d5216ce9c6da6d364736f6c63430008190033a2646970667358221220797842634fa9397e7a3d892db59b45547bcbc6c66b7b652c54002433952a4baf64736f6c63430008190033", - "sourceMap": "331:2117:47:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;721:25;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;363:32:54;;;345:51;;333:2;318:18;721:25:47;;;;;;;;621:62;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;621:62:47;;;3155:101:19;;;:::i;:::-;;2441:144;1313:22;2570:8;-1:-1:-1;;;;;2570:8:19;2441:144;;1207:1001:47;;;;;;:::i;:::-;;:::i;837:129::-;;;;;;:::i;:::-;;:::i;2346:99::-;2422:8;:15;2346:99;;1595:25:54;;;1583:2;1568:18;2346:99:47;1449:177:54;3405:215:19;;;;;;:::i;:::-;;:::i;721:25:47:-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;721:25:47;;-1:-1:-1;721:25:47;:::o;3155:101:19:-;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;:::-;3155:101::o:0;1207:1001:47:-;1379:12;2334:13:19;:11;:13::i;:::-;3395:21:26::1;:19;:21::i;:::-;-1:-1:-1::0;;;;;1412:20:47;::::2;::::0;;::::2;::::0;:44:::2;;-1:-1:-1::0;;;;;;1436:20:47;::::2;::::0;::::2;1412:44;1404:89;;;::::0;-1:-1:-1;;;1404:89:47;;1833:2:54;1404:89:47::2;::::0;::::2;1815:21:54::0;;;1852:18;;;1845:30;1911:34;1891:18;;;1884:62;1963:18;;1404:89:47::2;;;;;;;;;1522:6;-1:-1:-1::0;;;;;1512:16:47::2;:6;-1:-1:-1::0;;;;;1512:16:47::2;::::0;1504:63:::2;;;::::0;-1:-1:-1;;;1504:63:47;;2194:2:54;1504:63:47::2;::::0;::::2;2176:21:54::0;2233:2;2213:18;;;2206:30;2272:34;2252:18;;;2245:62;-1:-1:-1;;;2323:18:54;;;2316:32;2365:19;;1504:63:47::2;1992:398:54::0;1504:63:47::2;-1:-1:-1::0;;;;;1600:15:47;;::::2;1635:1;1600:15:::0;;;::::2;::::0;;;;;;;:23;;::::2;::::0;;;;;;;;::::2;:37:::0;:78;::::2;;;-1:-1:-1::0;;;;;;1641:15:47;;::::2;1676:1;1641:15:::0;;;::::2;::::0;;;;;;;:23;;::::2;::::0;;;;;;;;::::2;:37:::0;1600:78:::2;1578:156;;;::::0;-1:-1:-1;;;1578:156:47;;2597:2:54;1578:156:47::2;::::0;::::2;2579:21:54::0;2636:2;2616:18;;;2609:30;2675;2655:18;;;2648:58;2723:18;;1578:156:47::2;2395:352:54::0;1578:156:47::2;1810:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;1905:70:47::2;::::0;-1:-1:-1;;;1905:70:47;;-1:-1:-1;;;;;3076:15:54;;;1905:70:47::2;::::0;::::2;3058:34:54::0;3128:15;;;3108:18;;;3101:43;3180:15;;;3160:18;;;3153:43;3212:18;;;3205:34;;;1972:2:47::2;3255:19:54::0;;;3248:35;1795::47;;-1:-1:-1;1905:30:47;;::::2;::::0;::::2;::::0;2992:19:54;;1905:70:47::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;;;;;;;;2048:15:47;;::::2;:7;:15:::0;;;::::2;::::0;;;;;;;:23;;::::2;::::0;;;;;;;;;:30;;;;::::2;-1:-1:-1::0;;;;;;2048:30:47;;::::2;::::0;::::2;::::0;;;2089:15;;;;;;:23;;;;;;;;:30;;;::::2;::::0;::::2;::::0;;-1:-1:-1;2130:19:47;;;;::::2;::::0;;;;;;;::::2;::::0;;;;::::2;::::0;::::2;::::0;;;2167:33;345:51:54;;;2167:33:47::2;::::0;318:18:54;2167:33:47::2;;;;;;;3437:20:26::1;1949:1:::0;2532:30;4113:23;3860:283;3437:20:::1;1207:1001:47::0;;;;;;:::o;837:129::-;8870:21:22;4302:15;;-1:-1:-1;;;4302:15:22;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:22;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:22;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:22;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:22;-1:-1:-1;;;5013:22:22;;;4979:67;902:21:47::1;917:5;902:14;:21::i;:::-;934:24;:22;:24::i;:::-;5070:14:22::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:22;;;5142:14;;-1:-1:-1;3447:50:54;;5142:14:22;;3435:2:54;3420:18;5142:14:22;;;;;;;5066:101;4092:1081;;;;;837:129:47;:::o;3405:215:19:-;2334:13;:11;:13::i;:::-;-1:-1:-1;;;;;3489:22:19;::::1;3485:91;;3534:31;::::0;-1:-1:-1;;;3534:31:19;;3562:1:::1;3534:31;::::0;::::1;345:51:54::0;318:18;;3534:31:19::1;199:203:54::0;3485:91:19::1;3585:28;3604:8;3585:18;:28::i;:::-;3405:215:::0;:::o;2658:162::-;966:10:24;2717:7:19;1313:22;2570:8;-1:-1:-1;;;;;2570:8:19;;2441:144;2717:7;-1:-1:-1;;;;;2717:23:19;;2713:101;;2763:40;;-1:-1:-1;;;2763:40:19;;966:10:24;2763:40:19;;;345:51:54;318:18;;2763:40:19;199:203:54;3774:248:19;1313:22;3923:8;;-1:-1:-1;;;;;;3941:19:19;;-1:-1:-1;;;;;3941:19:19;;;;;;;;3975:40;;3923:8;;;;;3975:40;;3847:24;;3975:40;3837:185;;3774:248;:::o;3470:384:26:-;2532:30;3670:9;;-1:-1:-1;;3670:20:26;3666:88;;3713:30;;-1:-1:-1;;;3713:30:26;;;;;;;;;;;3666:88;1991:1;3828:19;;3470:384::o;3860:283::-;1949:1;2532:30;4113:23;3860:283::o;1847:127:19:-;6931:20:22;:18;:20::i;:::-;1929:38:19::1;1954:12;1929:24;:38::i;2684:111:26:-:0;6931:20:22;:18;:20::i;:::-;2754:34:26::1;:32;:34::i;7084:141:22:-:0;8870:21;8560:40;-1:-1:-1;;;8560:40:22;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:22;;;;;;;;;;;1980:235:19;6931:20:22;:18;:20::i;2801:183:26:-;6931:20:22;:18;:20::i;-1:-1:-1:-;;;;;;;;:::o;14:180:54:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:54;;14:180;-1:-1:-1;14:180:54:o;407:173::-;475:20;;-1:-1:-1;;;;;524:31:54;;514:42;;504:70;;570:1;567;560:12;504:70;407:173;;;:::o;585:260::-;653:6;661;714:2;702:9;693:7;689:23;685:32;682:52;;;730:1;727;720:12;682:52;753:29;772:9;753:29;:::i;:::-;743:39;;801:38;835:2;824:9;820:18;801:38;:::i;:::-;791:48;;585:260;;;;;:::o;850:403::-;936:6;944;952;960;1013:3;1001:9;992:7;988:23;984:33;981:53;;;1030:1;1027;1020:12;981:53;1053:29;1072:9;1053:29;:::i;:::-;1043:39;;1101:38;1135:2;1124:9;1120:18;1101:38;:::i;:::-;1091:48;;1158:38;1192:2;1181:9;1177:18;1158:38;:::i;:::-;850:403;;;;-1:-1:-1;1148:48:54;;1243:2;1228:18;1215:32;;-1:-1:-1;;850:403:54:o;1258:186::-;1317:6;1370:2;1358:9;1349:7;1345:23;1341:32;1338:52;;;1386:1;1383;1376:12;1338:52;1409:29;1428:9;1409:29;:::i;:::-;1399:39;1258:186;-1:-1:-1;;;1258:186:54:o", - "linkReferences": {} - }, - "methodIdentifiers": { - "allPools(uint256)": "41d1de97", - "allPoolsLength()": "efde4e64", - "createPool(address,address,address,uint256)": "93c907b4", - "getPool(address,address)": "531aa03e", - "initialize(address)": "c4d66de8", - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "transferOwnership(address)": "f2fde38b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"poolAddress\",\"type\":\"address\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allPools\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"allPoolsLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"platformFee\",\"type\":\"uint256\"}],\"name\":\"createPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"getPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"allPoolsLength()\":{\"returns\":{\"_0\":\"allPools.length Number of all pools\"}},\"createPool(address,address,address,uint256)\":{\"params\":{\"platformFee\":\"Platform fee in basis points\",\"tokenA\":\"Address of the first token\",\"tokenB\":\"Address of the second token\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allPoolsLength()\":{\"notice\":\"Function to get the number of all pools\"},\"createPool(address,address,address,uint256)\":{\"notice\":\"Function to create a new liquidity pool\"},\"initialize(address)\":{\"notice\":\"Initializer function (replaces constructor by OpenZeppelin standards) \"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/LiquidityPoolFactory.sol\":\"LiquidityPoolFactory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@openzeppelin/foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/manager/AccessManagerUpgradeable.sol\":{\"keccak256\":\"0x4bd72cbcba89604e02feacaa889f8211c949dc319ea7bf77f9c2fcbe363de9fb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9270800de5dc28aefd9c284fb115f761df765b8e2db1e040571b50441ac758ee\",\"dweb:/ipfs/QmcKmcLKPca9Q14eD3yxuJbSVUwgWknYmDANg3ycBDHZ4U\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x5a5f22721ffb66d3e1ecc568c0d37c91f91223d8663c8a5e78396e780b849c72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bdd108133c98ea251513424bf17905090c8a7e0755562a6d12a81b8bccbd6152\",\"dweb:/ipfs/QmahpnB63Up9aVx4jDqxEgry5BRN5itHRvy9rwBvMT2yqL\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/MulticallUpgradeable.sol\":{\"keccak256\":\"0x1545b1796f0b94f811d95b8b208c0668dacfc7768247d22b63161a47c4c5ef4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1dccf7856b960b2ed7565906b457812ad8d29a15d403f17702ac7e090680300\",\"dweb:/ipfs/QmUqqibiekFv84mdq7zeyRF56mLJbFyFUxWKTrz8Twzkpn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol\":{\"keccak256\":\"0x3ddf463e716596144130e47e72e7ab230bc824a7bfa9992ee4cc61cbd96d7a35\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cdd440f8900cd7d04178e5fc9ba659cd03af9a67841647083dbda3bf195ca2aa\",\"dweb:/ipfs/QmPyXuB9VR7mB4uonwgWmbHnagMieVPJ8tzdieFDu4BAkp\"]},\"lib/openzeppelin-contracts/contracts/access/manager/IAccessManaged.sol\":{\"keccak256\":\"0xaba93d42cd70e1418782951132d97b31ddce5f50ad81090884b6d0e41caac9d6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b110886f83e3e98a11255a3b56790322e8d83e513304dde71299406685fc6694\",\"dweb:/ipfs/QmPwroS7MUUk1EmsvaJqU6aarhQ8ewJtJMg7xxmTsaxZEv\"]},\"lib/openzeppelin-contracts/contracts/access/manager/IAccessManager.sol\":{\"keccak256\":\"0xdabf85e3bab52e7cfade4f77e661bcf7a2f9f95097bfd2ca5ddb193a0c21ee8b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://402259332090488a587a858ec0113bc7fe55e9dbc6e329927b87ed0f1cce7d08\",\"dweb:/ipfs/QmPJufTJJJifny3JscKTASsPzCrpXRbhtsJnwkCdbaKDTf\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"lib/openzeppelin-contracts/contracts/utils/types/Time.sol\":{\"keccak256\":\"0xc7755af115020049e4140f224f9ee88d7e1799ffb0646f37bf0df24bf6213f58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7f09bf94d5274334ec021f61a04659db303f31e60460e14b709c9bf187740111\",\"dweb:/ipfs/QmNvgomZYUwFAt4cZbPWAiTeSZQreGehY9BK5xyVJsUttb\"]},\"src/LiquidityPool.sol\":{\"keccak256\":\"0x9826c79909fe8567e7d3c10b0c8b487121a92369b420fe0a2aced8ce156b2940\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3a65d065a7ae476fea90ba93ba432a104b6993c1f2b782dfe22269565c505ee7\",\"dweb:/ipfs/QmTopKocJbfPqs84ktJTbML8gysdEpDWvuBcYN2B6yx8Ab\"]},\"src/LiquidityPoolFactory.sol\":{\"keccak256\":\"0x68d8d5cfa0b80164eb13d384bca8c435372df8db30670f59bda06f332ac13336\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://febdcdb05ffde01a597a047ccdddb874aebac3a3cb12de5fcb2b8f8d2cb71852\",\"dweb:/ipfs/QmcDqM5MeEK18rxh8ut7QpCfEsA21a3yQwL2wyLCB3YXkN\"]},\"src/LiquidityPoolInterfaces.sol\":{\"keccak256\":\"0x5cffaf70f96e748798452f163606aae4016d4eef90364b7c28d5da4ae2f94241\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://34717b9ffd3aef95b70669ed8597ac5c87025168660227266ed7565bfdc1edba\",\"dweb:/ipfs/QmdGAXPRPPb3Urz6WXK9dWqHcvUhQq9NRHgsKdULfDghvW\"]}},\"version\":1}", - "metadata": { - "compiler": { - "version": "0.8.25+commit.b61c2a91" - }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "type": "error", - "name": "InvalidInitialization" - }, - { - "inputs": [], - "type": "error", - "name": "NotInitializing" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [], - "type": "error", - "name": "ReentrancyGuardReentrantCall" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "version", - "type": "uint64", - "indexed": false - } - ], - "type": "event", - "name": "Initialized", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "tokenA", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "tokenB", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "poolAddress", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "PoolCreated", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function", - "name": "allPools", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "allPoolsLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "tokenA", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenB", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "platformFee", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "createPool", - "outputs": [ - { - "internalType": "address", - "name": "pool", - "type": "address" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getPool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "initialize" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "allPoolsLength()": { - "returns": { - "_0": "allPools.length Number of all pools" - } - }, - "createPool(address,address,address,uint256)": { - "params": { - "platformFee": "Platform fee in basis points", - "tokenA": "Address of the first token", - "tokenB": "Address of the second token" - } - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "allPoolsLength()": { - "notice": "Function to get the number of all pools" - }, - "createPool(address,address,address,uint256)": { - "notice": "Function to create a new liquidity pool" - }, - "initialize(address)": { - "notice": "Initializer function (replaces constructor by OpenZeppelin standards) " - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", - "@openzeppelin/foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/", - "ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/", - "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", - "forge-std/=lib/forge-std/src/", - "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", - "openzeppelin-contracts/=lib/openzeppelin-contracts/", - "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/", - "solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/" - ], - "optimizer": { - "enabled": true, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs" - }, - "compilationTarget": { - "src/LiquidityPoolFactory.sol": "LiquidityPoolFactory" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { - "keccak256": "0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a", - "urls": [ - "bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6", - "dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/contracts/access/manager/AccessManagerUpgradeable.sol": { - "keccak256": "0x4bd72cbcba89604e02feacaa889f8211c949dc319ea7bf77f9c2fcbe363de9fb", - "urls": [ - "bzz-raw://9270800de5dc28aefd9c284fb115f761df765b8e2db1e040571b50441ac758ee", - "dweb:/ipfs/QmcKmcLKPca9Q14eD3yxuJbSVUwgWknYmDANg3ycBDHZ4U" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { - "keccak256": "0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b", - "urls": [ - "bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609", - "dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { - "keccak256": "0x5a5f22721ffb66d3e1ecc568c0d37c91f91223d8663c8a5e78396e780b849c72", - "urls": [ - "bzz-raw://bdd108133c98ea251513424bf17905090c8a7e0755562a6d12a81b8bccbd6152", - "dweb:/ipfs/QmahpnB63Up9aVx4jDqxEgry5BRN5itHRvy9rwBvMT2yqL" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { - "keccak256": "0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397", - "urls": [ - "bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9", - "dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/contracts/utils/MulticallUpgradeable.sol": { - "keccak256": "0x1545b1796f0b94f811d95b8b208c0668dacfc7768247d22b63161a47c4c5ef4e", - "urls": [ - "bzz-raw://a1dccf7856b960b2ed7565906b457812ad8d29a15d403f17702ac7e090680300", - "dweb:/ipfs/QmUqqibiekFv84mdq7zeyRF56mLJbFyFUxWKTrz8Twzkpn" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol": { - "keccak256": "0x3ddf463e716596144130e47e72e7ab230bc824a7bfa9992ee4cc61cbd96d7a35", - "urls": [ - "bzz-raw://cdd440f8900cd7d04178e5fc9ba659cd03af9a67841647083dbda3bf195ca2aa", - "dweb:/ipfs/QmPyXuB9VR7mB4uonwgWmbHnagMieVPJ8tzdieFDu4BAkp" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/access/manager/IAccessManaged.sol": { - "keccak256": "0xaba93d42cd70e1418782951132d97b31ddce5f50ad81090884b6d0e41caac9d6", - "urls": [ - "bzz-raw://b110886f83e3e98a11255a3b56790322e8d83e513304dde71299406685fc6694", - "dweb:/ipfs/QmPwroS7MUUk1EmsvaJqU6aarhQ8ewJtJMg7xxmTsaxZEv" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/access/manager/IAccessManager.sol": { - "keccak256": "0xdabf85e3bab52e7cfade4f77e661bcf7a2f9f95097bfd2ca5ddb193a0c21ee8b", - "urls": [ - "bzz-raw://402259332090488a587a858ec0113bc7fe55e9dbc6e329927b87ed0f1cce7d08", - "dweb:/ipfs/QmPJufTJJJifny3JscKTASsPzCrpXRbhtsJnwkCdbaKDTf" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol": { - "keccak256": "0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7", - "urls": [ - "bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f", - "dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70", - "urls": [ - "bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c", - "dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "keccak256": "0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2", - "urls": [ - "bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850", - "dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/utils/Address.sol": { - "keccak256": "0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721", - "urls": [ - "bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245", - "dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": { - "keccak256": "0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d", - "urls": [ - "bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875", - "dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol": { - "keccak256": "0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe", - "urls": [ - "bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c", - "dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/utils/types/Time.sol": { - "keccak256": "0xc7755af115020049e4140f224f9ee88d7e1799ffb0646f37bf0df24bf6213f58", - "urls": [ - "bzz-raw://7f09bf94d5274334ec021f61a04659db303f31e60460e14b709c9bf187740111", - "dweb:/ipfs/QmNvgomZYUwFAt4cZbPWAiTeSZQreGehY9BK5xyVJsUttb" - ], - "license": "MIT" - }, - "src/LiquidityPool.sol": { - "keccak256": "0x9826c79909fe8567e7d3c10b0c8b487121a92369b420fe0a2aced8ce156b2940", - "urls": [ - "bzz-raw://3a65d065a7ae476fea90ba93ba432a104b6993c1f2b782dfe22269565c505ee7", - "dweb:/ipfs/QmTopKocJbfPqs84ktJTbML8gysdEpDWvuBcYN2B6yx8Ab" - ], - "license": "MIT" - }, - "src/LiquidityPoolFactory.sol": { - "keccak256": "0x68d8d5cfa0b80164eb13d384bca8c435372df8db30670f59bda06f332ac13336", - "urls": [ - "bzz-raw://febdcdb05ffde01a597a047ccdddb874aebac3a3cb12de5fcb2b8f8d2cb71852", - "dweb:/ipfs/QmcDqM5MeEK18rxh8ut7QpCfEsA21a3yQwL2wyLCB3YXkN" - ], - "license": "MIT" - }, - "src/LiquidityPoolInterfaces.sol": { - "keccak256": "0x5cffaf70f96e748798452f163606aae4016d4eef90364b7c28d5da4ae2f94241", - "urls": [ - "bzz-raw://34717b9ffd3aef95b70669ed8597ac5c87025168660227266ed7565bfdc1edba", - "dweb:/ipfs/QmdGAXPRPPb3Urz6WXK9dWqHcvUhQq9NRHgsKdULfDghvW" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 55327, - "contract": "src/LiquidityPoolFactory.sol:LiquidityPoolFactory", - "label": "getPool", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_mapping(t_address,t_address))" - }, - { - "astId": 55330, - "contract": "src/LiquidityPoolFactory.sol:LiquidityPoolFactory", - "label": "allPools", - "offset": 0, - "slot": "1", - "type": "t_array(t_address)dyn_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_address)dyn_storage": { - "encoding": "dynamic_array", - "label": "address[]", - "numberOfBytes": "32", - "base": "t_address" - }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" - }, - "t_mapping(t_address,t_mapping(t_address,t_address))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => address))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_address)" - } - } - }, - "ast": { - "absolutePath": "src/LiquidityPoolFactory.sol", - "id": 55475, - "exportedSymbols": { - "AccessManagerUpgradeable": [ - 45762 - ], - "Address": [ - 50567 - ], - "ContextUpgradeable": [ - 46679 - ], - "ERC20Upgradeable": [ - 46633 - ], - "IAccessManaged": [ - 49104 - ], - "IAccessManager": [ - 49542 - ], - "IERC20": [ - 50288 - ], - "IERC20Errors": [ - 49600 - ], - "IERC20Metadata": [ - 50314 - ], - "Initializable": [ - 46016 - ], - "LiquidityPool": [ - 55301 - ], - "LiquidityPoolEvents": [ - 55506 - ], - "LiquidityPoolFactory": [ - 55474 - ], - "LiquidityPoolModifiers": [ - 55532 - ], - "Math": [ - 51738 - ], - "MulticallUpgradeable": [ - 46782 - ], - "OwnableUpgradeable": [ - 43398 - ], - "ReentrancyGuardUpgradeable": [ - 46911 - ], - "Time": [ - 54381 - ] - }, - "nodeType": "SourceUnit", - "src": "33:2417:47", - "nodes": [ - { - "id": 55303, - "nodeType": "PragmaDirective", - "src": "33:23:47", - "nodes": [], - "literals": [ - "solidity", - "^", - "0.8", - ".0" - ] - }, - { - "id": 55304, - "nodeType": "ImportDirective", - "src": "60:75:47", - "nodes": [], - "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol", - "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", - "nameLocation": "-1:-1:-1", - "scope": 55475, - "sourceUnit": 43399, - "symbolAliases": [], - "unitAlias": "" - }, - { - "id": 55305, - "nodeType": "ImportDirective", - "src": "137:82:47", - "nodes": [], - "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol", - "file": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol", - "nameLocation": "-1:-1:-1", - "scope": 55475, - "sourceUnit": 46912, - "symbolAliases": [], - "unitAlias": "" - }, - { - "id": 55306, - "nodeType": "ImportDirective", - "src": "221:75:47", - "nodes": [], - "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", - "file": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", - "nameLocation": "-1:-1:-1", - "scope": 55475, - "sourceUnit": 46017, - "symbolAliases": [], - "unitAlias": "" - }, - { - "id": 55307, - "nodeType": "ImportDirective", - "src": "298:29:47", - "nodes": [], - "absolutePath": "src/LiquidityPool.sol", - "file": "./LiquidityPool.sol", - "nameLocation": "-1:-1:-1", - "scope": 55475, - "sourceUnit": 55302, - "symbolAliases": [], - "unitAlias": "" - }, - { - "id": 55474, - "nodeType": "ContractDefinition", - "src": "331:2117:47", - "nodes": [ - { - "id": 55321, - "nodeType": "EventDefinition", - "src": "482:87:47", - "nodes": [], - "anonymous": false, - "eventSelector": "9c5d829b9b23efc461f9aeef91979ec04bb903feb3bee4f26d22114abfc7335b", - "name": "PoolCreated", - "nameLocation": "488:11:47", - "parameters": { - "id": 55320, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 55315, - "indexed": true, - "mutability": "mutable", - "name": "tokenA", - "nameLocation": "516:6:47", - "nodeType": "VariableDeclaration", - "scope": 55321, - "src": "500:22:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 55314, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "500:7:47", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 55317, - "indexed": true, - "mutability": "mutable", - "name": "tokenB", - "nameLocation": "540:6:47", - "nodeType": "VariableDeclaration", - "scope": 55321, - "src": "524:22:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 55316, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "524:7:47", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 55319, - "indexed": false, - "mutability": "mutable", - "name": "poolAddress", - "nameLocation": "556:11:47", - "nodeType": "VariableDeclaration", - "scope": 55321, - "src": "548:19:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 55318, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "548:7:47", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "499:69:47" - } - }, - { - "id": 55327, - "nodeType": "VariableDeclaration", - "src": "621:62:47", - "nodes": [], - "constant": false, - "functionSelector": "531aa03e", - "mutability": "mutable", - "name": "getPool", - "nameLocation": "676:7:47", - "scope": 55474, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$", - "typeString": "mapping(address => mapping(address => address))" - }, - "typeName": { - "id": 55326, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 55322, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "629:7:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "621:47:47", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$", - "typeString": "mapping(address => mapping(address => address))" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 55325, - "keyName": "", - "keyNameLocation": "-1:-1:-1", - "keyType": { - "id": 55323, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "648:7:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "640:27:47", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 55324, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "659:7:47", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - } - }, - "visibility": "public" - }, - { - "id": 55330, - "nodeType": "VariableDeclaration", - "src": "721:25:47", - "nodes": [], - "constant": false, - "functionSelector": "41d1de97", - "mutability": "mutable", - "name": "allPools", - "nameLocation": "738:8:47", - "scope": 55474, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 55328, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "721:7:47", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 55329, - "nodeType": "ArrayTypeName", - "src": "721:9:47", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "public" - }, - { - "id": 55346, - "nodeType": "FunctionDefinition", - "src": "837:129:47", - "nodes": [], - "body": { - "id": 55345, - "nodeType": "Block", - "src": "891:75:47", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 55339, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55333, - "src": "917:5:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 55338, - "name": "__Ownable_init", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 43258, - "src": "902:14:47", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 55340, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "902:21:47", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 55341, - "nodeType": "ExpressionStatement", - "src": "902:21:47" - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 55342, - "name": "__ReentrancyGuard_init", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 46822, - "src": "934:22:47", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 55343, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "934:24:47", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 55344, - "nodeType": "ExpressionStatement", - "src": "934:24:47" - } - ] - }, - "documentation": { - "id": 55331, - "nodeType": "StructuredDocumentation", - "src": "755:76:47", - "text": "Initializer function (replaces constructor by OpenZeppelin standards) " - }, - "functionSelector": "c4d66de8", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 55336, - "kind": "modifierInvocation", - "modifierName": { - "id": 55335, - "name": "initializer", - "nameLocations": [ - "879:11:47" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 45870, - "src": "879:11:47" - }, - "nodeType": "ModifierInvocation", - "src": "879:11:47" - } - ], - "name": "initialize", - "nameLocation": "846:10:47", - "parameters": { - "id": 55334, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 55333, - "mutability": "mutable", - "name": "owner", - "nameLocation": "865:5:47", - "nodeType": "VariableDeclaration", - "scope": 55346, - "src": "857:13:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 55332, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "857:7:47", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "856:15:47" - }, - "returnParameters": { - "id": 55337, - "nodeType": "ParameterList", - "parameters": [], - "src": "891:0:47" - }, - "scope": 55474, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "id": 55463, - "nodeType": "FunctionDefinition", - "src": "1207:1001:47", - "nodes": [], - "body": { - "id": 55462, - "nodeType": "Block", - "src": "1393:815:47", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 55377, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 55370, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 55365, - "name": "tokenA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55349, - "src": "1412:6:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 55368, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1430:1:47", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 55367, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1422:7:47", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 55366, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1422:7:47", - "typeDescriptions": {} - } - }, - "id": 55369, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1422:10:47", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1412:20:47", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 55376, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 55371, - "name": "tokenB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55351, - "src": "1436:6:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 55374, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1454:1:47", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 55373, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1446:7:47", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 55372, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1446:7:47", - "typeDescriptions": {} - } - }, - "id": 55375, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1446:10:47", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1436:20:47", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "1412:44:47", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "466163746f72793a20696e76616c696420746f6b656e20616464726573736573", - "id": 55378, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1458:34:47", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_86a9491652026668cde5428d35e76932de8678130b19ca7840e173bff0dab0ae", - "typeString": "literal_string \"Factory: invalid token addresses\"" - }, - "value": "Factory: invalid token addresses" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_86a9491652026668cde5428d35e76932de8678130b19ca7840e173bff0dab0ae", - "typeString": "literal_string \"Factory: invalid token addresses\"" - } - ], - "id": 55364, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "1404:7:47", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 55379, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1404:89:47", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 55380, - "nodeType": "ExpressionStatement", - "src": "1404:89:47" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 55384, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 55382, - "name": "tokenA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55349, - "src": "1512:6:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 55383, - "name": "tokenB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55351, - "src": "1522:6:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1512:16:47", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "466163746f72793a206964656e746963616c20746f6b656e20616464726573736573", - "id": 55385, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1530:36:47", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_5cdef9ffb3d0e3257b6d3a4161d105e6dbf14359bcdd91b20e9381def18b1532", - "typeString": "literal_string \"Factory: identical token addresses\"" - }, - "value": "Factory: identical token addresses" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_5cdef9ffb3d0e3257b6d3a4161d105e6dbf14359bcdd91b20e9381def18b1532", - "typeString": "literal_string \"Factory: identical token addresses\"" - } - ], - "id": 55381, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "1504:7:47", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 55386, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1504:63:47", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 55387, - "nodeType": "ExpressionStatement", - "src": "1504:63:47" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 55409, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 55398, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "baseExpression": { - "id": 55389, - "name": "getPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55327, - "src": "1600:7:47", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$", - "typeString": "mapping(address => mapping(address => address))" - } - }, - "id": 55391, - "indexExpression": { - "id": 55390, - "name": "tokenA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55349, - "src": "1608:6:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1600:15:47", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 55393, - "indexExpression": { - "id": 55392, - "name": "tokenB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55351, - "src": "1616:6:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1600:23:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 55396, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1635:1:47", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 55395, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1627:7:47", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 55394, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1627:7:47", - "typeDescriptions": {} - } - }, - "id": 55397, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1627:10:47", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1600:37:47", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 55408, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "baseExpression": { - "id": 55399, - "name": "getPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55327, - "src": "1641:7:47", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$", - "typeString": "mapping(address => mapping(address => address))" - } - }, - "id": 55401, - "indexExpression": { - "id": 55400, - "name": "tokenB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55351, - "src": "1649:6:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1641:15:47", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 55403, - "indexExpression": { - "id": 55402, - "name": "tokenA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55349, - "src": "1657:6:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1641:23:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 55406, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1676:1:47", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 55405, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1668:7:47", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 55404, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1668:7:47", - "typeDescriptions": {} - } - }, - "id": 55407, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1668:10:47", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1641:37:47", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "1600:78:47", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "466163746f72793a20706f6f6c20616c726561647920657869737473", - "id": 55410, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1693:30:47", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_e2d4a90a3b121bc6949610b35f5fb65a7264f3874328dff43ce083d00ce17327", - "typeString": "literal_string \"Factory: pool already exists\"" - }, - "value": "Factory: pool already exists" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_e2d4a90a3b121bc6949610b35f5fb65a7264f3874328dff43ce083d00ce17327", - "typeString": "literal_string \"Factory: pool already exists\"" - } - ], - "id": 55388, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "1578:7:47", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 55411, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1578:156:47", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 55412, - "nodeType": "ExpressionStatement", - "src": "1578:156:47" - }, - { - "expression": { - "id": 55421, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 55413, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55362, - "src": "1795:4:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 55418, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "1810:17:47", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_LiquidityPool_$55301_$", - "typeString": "function () returns (contract LiquidityPool)" - }, - "typeName": { - "id": 55417, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 55416, - "name": "LiquidityPool", - "nameLocations": [ - "1814:13:47" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 55301, - "src": "1814:13:47" - }, - "referencedDeclaration": 55301, - "src": "1814:13:47", - "typeDescriptions": { - "typeIdentifier": "t_contract$_LiquidityPool_$55301", - "typeString": "contract LiquidityPool" - } - } - }, - "id": 55419, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1810:19:47", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_LiquidityPool_$55301", - "typeString": "contract LiquidityPool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_LiquidityPool_$55301", - "typeString": "contract LiquidityPool" - } - ], - "id": 55415, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1802:7:47", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 55414, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1802:7:47", - "typeDescriptions": {} - } - }, - "id": 55420, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1802:28:47", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1795:35:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 55422, - "nodeType": "ExpressionStatement", - "src": "1795:35:47" - }, - { - "expression": { - "arguments": [ - { - "id": 55427, - "name": "tokenA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55349, - "src": "1936:6:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 55428, - "name": "tokenB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55351, - "src": "1944:6:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 55429, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55353, - "src": "1952:5:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 55430, - "name": "platformFee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55355, - "src": "1959:11:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "3130", - "id": 55431, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1972:2:47", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - } - ], - "expression": { - "arguments": [ - { - "id": 55424, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55362, - "src": "1919:4:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 55423, - "name": "LiquidityPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55301, - "src": "1905:13:47", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_LiquidityPool_$55301_$", - "typeString": "type(contract LiquidityPool)" - } - }, - "id": 55425, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1905:19:47", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_LiquidityPool_$55301", - "typeString": "contract LiquidityPool" - } - }, - "id": 55426, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1925:10:47", - "memberName": "initialize", - "nodeType": "MemberAccess", - "referencedDeclaration": 54935, - "src": "1905:30:47", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,address,address,uint256,uint256) external" - } - }, - "id": 55432, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1905:70:47", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 55433, - "nodeType": "ExpressionStatement", - "src": "1905:70:47" - }, - { - "expression": { - "id": 55440, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "baseExpression": { - "id": 55434, - "name": "getPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55327, - "src": "2048:7:47", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$", - "typeString": "mapping(address => mapping(address => address))" - } - }, - "id": 55437, - "indexExpression": { - "id": 55435, - "name": "tokenA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55349, - "src": "2056:6:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2048:15:47", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 55438, - "indexExpression": { - "id": 55436, - "name": "tokenB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55351, - "src": "2064:6:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2048:23:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 55439, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55362, - "src": "2074:4:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2048:30:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 55441, - "nodeType": "ExpressionStatement", - "src": "2048:30:47" - }, - { - "expression": { - "id": 55448, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "baseExpression": { - "id": 55442, - "name": "getPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55327, - "src": "2089:7:47", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$", - "typeString": "mapping(address => mapping(address => address))" - } - }, - "id": 55445, - "indexExpression": { - "id": 55443, - "name": "tokenB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55351, - "src": "2097:6:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2089:15:47", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 55446, - "indexExpression": { - "id": 55444, - "name": "tokenA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55349, - "src": "2105:6:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2089:23:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 55447, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55362, - "src": "2115:4:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2089:30:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 55449, - "nodeType": "ExpressionStatement", - "src": "2089:30:47" - }, - { - "expression": { - "arguments": [ - { - "id": 55453, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55362, - "src": "2144:4:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 55450, - "name": "allPools", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55330, - "src": "2130:8:47", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 55452, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2139:4:47", - "memberName": "push", - "nodeType": "MemberAccess", - "src": "2130:13:47", - "typeDescriptions": { - "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$attached_to$_t_array$_t_address_$dyn_storage_ptr_$", - "typeString": "function (address[] storage pointer,address)" - } - }, - "id": 55454, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2130:19:47", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 55455, - "nodeType": "ExpressionStatement", - "src": "2130:19:47" - }, - { - "eventCall": { - "arguments": [ - { - "id": 55457, - "name": "tokenA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55349, - "src": "2179:6:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 55458, - "name": "tokenB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55351, - "src": "2187:6:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 55459, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55362, - "src": "2195:4:47", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 55456, - "name": "PoolCreated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55321, - "src": "2167:11:47", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address,address)" - } - }, - "id": 55460, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2167:33:47", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 55461, - "nodeType": "EmitStatement", - "src": "2162:38:47" - } - ] - }, - "documentation": { - "id": 55347, - "nodeType": "StructuredDocumentation", - "src": "974:227:47", - "text": " @notice Function to create a new liquidity pool\n @param tokenA Address of the first token\n @param tokenB Address of the second token\n @param platformFee Platform fee in basis points" - }, - "functionSelector": "93c907b4", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 55358, - "kind": "modifierInvocation", - "modifierName": { - "id": 55357, - "name": "onlyOwner", - "nameLocations": [ - "1347:9:47" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 43293, - "src": "1347:9:47" - }, - "nodeType": "ModifierInvocation", - "src": "1347:9:47" - }, - { - "id": 55360, - "kind": "modifierInvocation", - "modifierName": { - "id": 55359, - "name": "nonReentrant", - "nameLocations": [ - "1357:12:47" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 46851, - "src": "1357:12:47" - }, - "nodeType": "ModifierInvocation", - "src": "1357:12:47" - } - ], - "name": "createPool", - "nameLocation": "1216:10:47", - "parameters": { - "id": 55356, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 55349, - "mutability": "mutable", - "name": "tokenA", - "nameLocation": "1245:6:47", - "nodeType": "VariableDeclaration", - "scope": 55463, - "src": "1237:14:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 55348, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1237:7:47", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 55351, - "mutability": "mutable", - "name": "tokenB", - "nameLocation": "1270:6:47", - "nodeType": "VariableDeclaration", - "scope": 55463, - "src": "1262:14:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 55350, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1262:7:47", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 55353, - "mutability": "mutable", - "name": "owner", - "nameLocation": "1295:5:47", - "nodeType": "VariableDeclaration", - "scope": 55463, - "src": "1287:13:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 55352, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1287:7:47", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 55355, - "mutability": "mutable", - "name": "platformFee", - "nameLocation": "1319:11:47", - "nodeType": "VariableDeclaration", - "scope": 55463, - "src": "1311:19:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 55354, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1311:7:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1226:111:47" - }, - "returnParameters": { - "id": 55363, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 55362, - "mutability": "mutable", - "name": "pool", - "nameLocation": "1387:4:47", - "nodeType": "VariableDeclaration", - "scope": 55463, - "src": "1379:12:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 55361, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1379:7:47", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1378:14:47" - }, - "scope": 55474, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 55473, - "nodeType": "FunctionDefinition", - "src": "2346:99:47", - "nodes": [], - "body": { - "id": 55472, - "nodeType": "Block", - "src": "2404:41:47", - "nodes": [], - "statements": [ - { - "expression": { - "expression": { - "id": 55469, - "name": "allPools", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55330, - "src": "2422:8:47", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 55470, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2431:6:47", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "2422:15:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 55468, - "id": 55471, - "nodeType": "Return", - "src": "2415:22:47" - } - ] - }, - "documentation": { - "id": 55464, - "nodeType": "StructuredDocumentation", - "src": "2216:124:47", - "text": " @notice Function to get the number of all pools\n @return allPools.length Number of all pools" - }, - "functionSelector": "efde4e64", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "allPoolsLength", - "nameLocation": "2355:14:47", - "parameters": { - "id": 55465, - "nodeType": "ParameterList", - "parameters": [], - "src": "2369:2:47" - }, - "returnParameters": { - "id": 55468, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 55467, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 55473, - "src": "2395:7:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 55466, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2395:7:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2394:9:47" - }, - "scope": 55474, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 55308, - "name": "Initializable", - "nameLocations": [ - "364:13:47" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 46016, - "src": "364:13:47" - }, - "id": 55309, - "nodeType": "InheritanceSpecifier", - "src": "364:13:47" - }, - { - "baseName": { - "id": 55310, - "name": "ReentrancyGuardUpgradeable", - "nameLocations": [ - "379:26:47" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 46911, - "src": "379:26:47" - }, - "id": 55311, - "nodeType": "InheritanceSpecifier", - "src": "379:26:47" - }, - { - "baseName": { - "id": 55312, - "name": "OwnableUpgradeable", - "nameLocations": [ - "407:18:47" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 43398, - "src": "407:18:47" - }, - "id": 55313, - "nodeType": "InheritanceSpecifier", - "src": "407:18:47" - } - ], - "canonicalName": "LiquidityPoolFactory", - "contractDependencies": [ - 55301 - ], - "contractKind": "contract", - "fullyImplemented": true, - "linearizedBaseContracts": [ - 55474, - 43398, - 46679, - 46911, - 46016 - ], - "name": "LiquidityPoolFactory", - "nameLocation": "340:20:47", - "scope": 55475, - "usedErrors": [ - 43234, - 43239, - 45779, - 45782, - 46813 - ], - "usedEvents": [ - 43245, - 45787, - 55321 - ] - } - ], - "license": "MIT" - }, - "id": 47 -} \ No newline at end of file diff --git a/next-app/src/abi/address.ts b/next-app/src/abi/address.ts new file mode 100644 index 0000000..6ea09d0 --- /dev/null +++ b/next-app/src/abi/address.ts @@ -0,0 +1,4 @@ +export const liquidityFactoryAddress = "0x1edface3a9ddca2dc09e69c76ef7449943486f7e"; +export const GenxAddress = "0x60f5c62de10e3c57986a6b992dca30bfa1016516"; +export const GensAddress = "0x17f961f789b6968a5e8631db3c722f1604ff0ce0"; +export const LiquidityPoolAddress = "0x8cb6caBb11b55E4118E32D045139232C5337B259"; \ No newline at end of file diff --git a/next-app/src/abi/liquidityPool.ts b/next-app/src/abi/liquidityPool.ts new file mode 100644 index 0000000..64cc2a6 --- /dev/null +++ b/next-app/src/abi/liquidityPool.ts @@ -0,0 +1,573 @@ +export const LiquidityPoolABI = [ + { + "type": "function", + "name": "ADMIN_ROLE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "DEFAULT_ADMIN_ROLE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "addLiquidity", + "inputs": [ + { + "name": "tokenAAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tokenBAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getAmountOut", + "inputs": [ + { + "name": "amountIn", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "tokenIn", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPair", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPrice", + "inputs": [ + { + "name": "tokenIn", + "type": "address", + "internalType": "address" + }, + { + "name": "amountIn", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getReserves", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRoleAdmin", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "grantRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "hasRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_tokenA", + "type": "address", + "internalType": "address" + }, + { + "name": "_tokenB", + "type": "address", + "internalType": "address" + }, + { + "name": "_liquidityToken", + "type": "address", + "internalType": "address" + }, + { + "name": "_platformFee", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_minimumLiquidity", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_admin", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "liquidityToken", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract LiquidityToken" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "platformFee", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "removeLiquidity", + "inputs": [ + { + "name": "liquidity", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "callerConfirmation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "swap", + "inputs": [ + { + "name": "tokenIn", + "type": "address", + "internalType": "address" + }, + { + "name": "amountIn", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "minAmountOut", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "tokenA", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract Token" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "tokenB", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract Token" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "updatePlatformFee", + "inputs": [ + { + "name": "_platformFee", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "LiquidityAdded", + "inputs": [ + { + "name": "user", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amountTokenA", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "amountTokenB", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "LiquidityRemoved", + "inputs": [ + { + "name": "user", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amountTokenA", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "amountTokenB", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleAdminChanged", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "previousAdminRole", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "newAdminRole", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleGranted", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleRevoked", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Swap", + "inputs": [ + { + "name": "user", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "tokenIn", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amountIn", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "tokenOut", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amountOut", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AccessControlBadConfirmation", + "inputs": [] + }, + { + "type": "error", + "name": "AccessControlUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "neededRole", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "ReentrancyGuardReentrantCall", + "inputs": [] + } +] \ No newline at end of file diff --git a/next-app/src/abi/liquidityPoolFactory.ts b/next-app/src/abi/liquidityPoolFactory.ts new file mode 100644 index 0000000..d16e031 --- /dev/null +++ b/next-app/src/abi/liquidityPoolFactory.ts @@ -0,0 +1,445 @@ +export const liquidityPoolFactoryABI = [ + { + "type": "constructor", + "inputs": [ + { + "name": "_liquidityToken", + "type": "address", + "internalType": "address" + }, + { + "name": "admin", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "ADMIN_ROLE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "DEFAULT_ADMIN_ROLE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "allPools", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "allPoolsAddress", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "allPoolsLength", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "createPool", + "inputs": [ + { + "name": "tokenA", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenB", + "type": "address", + "internalType": "address" + }, + { + "name": "poolOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "platformFee", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "pool", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getPool", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPoolAddress", + "inputs": [ + { + "name": "tokenA", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenB", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPoolAddressByIndex", + "inputs": [ + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRoleAdmin", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "grantRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "hasRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "liquidityToken", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract LiquidityToken" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "callerConfirmation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "PoolCreated", + "inputs": [ + { + "name": "tokenA", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "tokenB", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "poolAddress", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleAdminChanged", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "previousAdminRole", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "newAdminRole", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleGranted", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleRevoked", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AccessControlBadConfirmation", + "inputs": [] + }, + { + "type": "error", + "name": "AccessControlUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "neededRole", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "ReentrancyGuardReentrantCall", + "inputs": [] + } +] \ No newline at end of file diff --git a/next-app/src/app/administration/layout.tsx b/next-app/src/app/administration/layout.tsx index e8725b8..4c56f56 100644 --- a/next-app/src/app/administration/layout.tsx +++ b/next-app/src/app/administration/layout.tsx @@ -1,22 +1,22 @@ -import Sidebar from "@/components/administration/Sidebar"; - -export default function Layout({ children }: { children: React.ReactNode }) { - return ( -
-
-
-
-
- Dashboard -
- -
- -
-
-
-
{children}
-
-
- ); -} +import Sidebar from "@/components/administration/Sidebar"; + +export default function Layout({ children }: { children: React.ReactNode }) { + return ( +
+
+
+
+
+ Dashboard +
+ +
+ +
+
+
+
{children}
+
+
+ ); +} diff --git a/next-app/src/app/administration/page.tsx b/next-app/src/app/administration/page.tsx index 6e9a7f6..126e402 100644 --- a/next-app/src/app/administration/page.tsx +++ b/next-app/src/app/administration/page.tsx @@ -1,3 +1,3 @@ -export default function Page() { - return

Dashboard Page, for the moment, just go on Users/Transactions

; -} +export default function Page() { + return

Dashboard Page, for the moment, just go on Users/Transactions

; +} diff --git a/next-app/src/app/administration/transactions/page.tsx b/next-app/src/app/administration/transactions/page.tsx index d3a0db7..f4e469f 100644 --- a/next-app/src/app/administration/transactions/page.tsx +++ b/next-app/src/app/administration/transactions/page.tsx @@ -1,30 +1,30 @@ -// app/pages/dashboard/transactions/page.tsx -"use client"; -import TransactionsTable from "@/components/administration/transactions/TransactionsTable"; -import { getTransactions } from "@/hook/users.hook"; -import { Hook, Transaction } from "@/types/hookResponse.type"; -import { useQuery } from "@tanstack/react-query"; -import React from "react"; - -const TransactionsPage: React.FC = () => { - const { - data: transactions, - isError, - error, - } = useQuery>({ - queryKey: ["transactions"], - queryFn: getTransactions, - }); - - return ( -
-
-

Transactions

-
- {isError &&

Error loading transactions: {error?.message}

} - -
- ); -}; - -export default TransactionsPage; +// app/pages/dashboard/transactions/page.tsx +"use client"; +import TransactionsTable from "@/components/administration/transactions/TransactionsTable"; +import { getTransactions } from "@/hook/users.hook"; +import { Hook, Transaction } from "@/types/hookResponse.type"; +import { useQuery } from "@tanstack/react-query"; +import React from "react"; + +const TransactionsPage: React.FC = () => { + const { + data: transactions, + isError, + error, + } = useQuery>({ + queryKey: ["transactions"], + queryFn: getTransactions, + }); + + return ( +
+
+

Transactions

+
+ {isError &&

Error loading transactions: {error?.message}

} + +
+ ); +}; + +export default TransactionsPage; diff --git a/next-app/src/app/administration/users/page.tsx b/next-app/src/app/administration/users/page.tsx index c8b0f82..ed1fa44 100644 --- a/next-app/src/app/administration/users/page.tsx +++ b/next-app/src/app/administration/users/page.tsx @@ -1,29 +1,29 @@ -// app/pages/dashboard/users/page.tsx -"use client"; -import UsersTable from "@/components/administration/users/UsersTable"; -import { getUsers } from "@/hook/users.hook"; -import { Hook, User } from "@/types/hookResponse.type"; -import { useQuery } from "@tanstack/react-query"; -import React from "react"; - -const UsersPage: React.FC = () => { - const { - data: users, - isError, - error, - } = useQuery>({ - queryKey: ["users"], - queryFn: getUsers, - }); - return ( -
-
-

Users

-
- {isError &&

Error loading users: {error?.message}

} - -
- ); -}; - -export default UsersPage; +// app/pages/dashboard/users/page.tsx +"use client"; +import UsersTable from "@/components/administration/users/UsersTable"; +import { getUsers } from "@/hook/users.hook"; +import { Hook, User } from "@/types/hookResponse.type"; +import { useQuery } from "@tanstack/react-query"; +import React from "react"; + +const UsersPage: React.FC = () => { + const { + data: users, + isError, + error, + } = useQuery>({ + queryKey: ["users"], + queryFn: getUsers, + }); + return ( +
+
+

Users

+
+ {isError &&

Error loading users: {error?.message}

} + +
+ ); +}; + +export default UsersPage; diff --git a/next-app/src/app/dashboard/page.tsx b/next-app/src/app/dashboard/page.tsx index ed21aad..ecb271d 100644 --- a/next-app/src/app/dashboard/page.tsx +++ b/next-app/src/app/dashboard/page.tsx @@ -1,14 +1,14 @@ -import dynamic from "next/dynamic"; -const ClientComponent = dynamic( - () => import("@/components/dashboard/ClientComponent"), - { ssr: false } -); - -export default function Page() { - return ( -
- Dashboard page - -
- ); -} +import dynamic from "next/dynamic"; +const ClientComponent = dynamic( + () => import("@/components/dashboard/ClientComponent"), + { ssr: false } +); + +export default function Page() { + return ( +
+ Dashboard page + +
+ ); +} diff --git a/next-app/src/app/globals.css b/next-app/src/app/globals.css index 95d8cab..2ec22c2 100644 --- a/next-app/src/app/globals.css +++ b/next-app/src/app/globals.css @@ -1,81 +1,81 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -@layer base { - :root { - --background: 0 0% 100%; - --foreground: 222.2 47.4% 11.2%; - - --muted: 210 40% 96.1%; - --muted-foreground: 215.4 16.3% 46.9%; - - --popover: 0 0% 100%; - --popover-foreground: 222.2 47.4% 11.2%; - - --border: 214.3 31.8% 91.4%; - --input: 214.3 31.8% 91.4%; - - --card: 0 0% 100%; - --card-foreground: 222.2 47.4% 11.2%; - - --primary: 222.2 47.4% 11.2%; - --primary-foreground: 210 40% 98%; - - --secondary: 210 40% 96.1%; - --secondary-foreground: 222.2 47.4% 11.2%; - - --accent: 210 40% 96.1%; - --accent-foreground: 222.2 47.4% 11.2%; - - --destructive: 0 100% 50%; - --destructive-foreground: 210 40% 98%; - - --ring: 215 20.2% 65.1%; - - --radius: 0.5rem; - } - - .dark { - --background: 224 71% 4%; - --foreground: 213 31% 91%; - - --muted: 223 47% 11%; - --muted-foreground: 215.4 16.3% 56.9%; - - --accent: 216 34% 17%; - --accent-foreground: 210 40% 98%; - - --popover: 224 71% 4%; - --popover-foreground: 215 20.2% 65.1%; - - --border: 216 34% 17%; - --input: 216 34% 17%; - - --card: 224 71% 4%; - --card-foreground: 213 31% 91%; - - --primary: 210 40% 98%; - --primary-foreground: 222.2 47.4% 1.2%; - - --secondary: 222.2 47.4% 11.2%; - --secondary-foreground: 210 40% 98%; - - --destructive: 0 63% 31%; - --destructive-foreground: 210 40% 98%; - - --ring: 216 34% 17%; - - --radius: 0.5rem; - } -} - -@layer base { - * { - @apply border-border; - } - body { - @apply bg-background text-foreground; - font-feature-settings: "rlig" 1, "calt" 1; - } -} +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 222.2 47.4% 11.2%; + + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + + --popover: 0 0% 100%; + --popover-foreground: 222.2 47.4% 11.2%; + + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + + --card: 0 0% 100%; + --card-foreground: 222.2 47.4% 11.2%; + + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; + + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + + --destructive: 0 100% 50%; + --destructive-foreground: 210 40% 98%; + + --ring: 215 20.2% 65.1%; + + --radius: 0.5rem; + } + + .dark { + --background: 224 71% 4%; + --foreground: 213 31% 91%; + + --muted: 223 47% 11%; + --muted-foreground: 215.4 16.3% 56.9%; + + --accent: 216 34% 17%; + --accent-foreground: 210 40% 98%; + + --popover: 224 71% 4%; + --popover-foreground: 215 20.2% 65.1%; + + --border: 216 34% 17%; + --input: 216 34% 17%; + + --card: 224 71% 4%; + --card-foreground: 213 31% 91%; + + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 1.2%; + + --secondary: 222.2 47.4% 11.2%; + --secondary-foreground: 210 40% 98%; + + --destructive: 0 63% 31%; + --destructive-foreground: 210 40% 98%; + + --ring: 216 34% 17%; + + --radius: 0.5rem; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + font-feature-settings: "rlig" 1, "calt" 1; + } +} diff --git a/next-app/src/app/page.tsx b/next-app/src/app/page.tsx index 5ced891..f3cfc1b 100644 --- a/next-app/src/app/page.tsx +++ b/next-app/src/app/page.tsx @@ -1,4 +1,6 @@ -import { Badge } from "@/components/ui/badge"; +import { TransactionCard } from "@/components/cards/TransactionsCard"; +import { PriceCards } from "@/components/cards/PriceCards"; +import { Button } from "@/components/ui/button"; import { Card, CardContent, @@ -8,6 +10,7 @@ import { CardTitle, } from "@/components/ui/card"; import { Progress } from "@/components/ui/progress"; +import { Tabs, TabsContent } from "@/components/ui/tabs"; import { Table, TableBody, @@ -16,7 +19,7 @@ import { TableHeader, TableRow, } from "@/components/ui/table"; -import { Tabs, TabsContent } from "@/components/ui/tabs"; +import { Badge } from "@/components/ui/badge"; import { Activity, DollarSign } from "lucide-react"; const page = () => { diff --git a/next-app/src/app/pools/page.tsx b/next-app/src/app/pools/page.tsx index 41a780c..46208f8 100644 --- a/next-app/src/app/pools/page.tsx +++ b/next-app/src/app/pools/page.tsx @@ -1,63 +1,75 @@ -"use client"; -import AddPoolModal from "@/components/liquidityPool/AddPoolModal"; -import { Button } from "@/components/ui/button"; -import { - Card, - CardContent, - CardDescription, - CardHeader, -} from "@/components/ui/card"; -import { getPools } from "@/hook/pools.hook"; -import { useQuery } from "@tanstack/react-query"; -import { Plus } from "lucide-react"; - -export default function Page() { - const { data: pools } = useQuery({ - queryKey: ["pools"], - queryFn: getPools, - }); - - // Connect pools in to doo to display in the UI - - return ( -
-
-
-

List of pools

- -
-
- - - -
-
-
- ); -} - -const PoolItem = ({ - name, - earned, - apr, - liquidity, -}: { - name: string; - earned: string; - apr: string; - liquidity: string; -}) => { - return ( - - {name} - - Earned {earned} - APR {apr} - Liquidity {liquidity} - - - ); -}; +"use client"; +import React from "react"; +import { + Card, + CardContent, + CardDescription, + CardHeader, +} from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; +import { useQuery } from "@tanstack/react-query"; +import { getPools } from "@/hook/pools.hook"; +import { Plus } from "lucide-react"; +import { UserRound } from "lucide-react"; +import { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; +import AddPoolModal from "@/components/liquidityPool/AddPoolModal"; + +export default function page() { + const { data: pools } = useQuery({ + queryKey: ["pools"], + queryFn: getPools, + }); + + // Connect pools in to doo to display in the UI + + return ( +
+
+
+

List of pools

+ +
+
+ + + +
+
+
+ ); +} + +const PoolItem = ({ + name, + earned, + apr, + liquidity, +}: { + name: string; + earned: string; + apr: string; + liquidity: string; +}) => { + return ( + + {name} + + Earned {earned} + APR {apr} + Liquidity {liquidity} + + + ); +}; diff --git a/next-app/src/app/profil/page.tsx b/next-app/src/app/profil/page.tsx index ac9d764..bead968 100644 --- a/next-app/src/app/profil/page.tsx +++ b/next-app/src/app/profil/page.tsx @@ -7,8 +7,10 @@ import Link from "next/link"; import { Card, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; +import { Checkbox } from "@/components/ui/checkbox"; import { createUser, getUserByAdress } from "@/hook/users.hook"; import { User } from "@/types/user.type"; +import { Textarea } from "@/components/ui/textarea"; export default function Profil() { const { address, isConnected } = useAccount(); @@ -35,7 +37,7 @@ export default function Profil() { if (!user && address && isError) { mutation.mutate({ address, name: "New User" }); } - }, [address, isError, mutation, user]); + }, [address, isError, user]); return (
@@ -83,7 +85,7 @@ export default function Profil() { -

URL's

+

URL's

{" "} Add your social media profiles to share with others{" "} diff --git a/next-app/src/app/staking/StakeCard.tsx b/next-app/src/app/staking/StakeCard.tsx index 1e4a0f2..d718cd6 100644 --- a/next-app/src/app/staking/StakeCard.tsx +++ b/next-app/src/app/staking/StakeCard.tsx @@ -1,29 +1,29 @@ -import { CardTitle, CardDescription, CardHeader, CardContent, CardFooter, Card } from "@/components/ui/card" -import { Label } from "@/components/ui/label" -import { Input } from "@/components/ui/input" -import { Button } from "@/components/ui/button" - -export default function StakingCard() { - return ( - - - Stake GEN Tokens - Enter the amount and duration to stake your GEN tokens. - - -

- - -
- Staked: 1.45 - Earn: 0.2345 -
-
- - - - - -
- ) +import { CardTitle, CardDescription, CardHeader, CardContent, CardFooter, Card } from "@/components/ui/card" +import { Label } from "@/components/ui/label" +import { Input } from "@/components/ui/input" +import { Button } from "@/components/ui/button" + +export default function StakingCard() { + return ( + + + Stake GEN Tokens + Enter the amount and duration to stake your GEN tokens. + + +
+ + +
+ Staked: 1.45 + Earn: 0.2345 +
+
+
+ + + + +
+ ) } \ No newline at end of file diff --git a/next-app/src/app/staking/page.tsx b/next-app/src/app/staking/page.tsx index 0d1b4d2..f58820d 100644 --- a/next-app/src/app/staking/page.tsx +++ b/next-app/src/app/staking/page.tsx @@ -1,11 +1,11 @@ -import StakingCard from "./StakeCard"; - -export default function Staking() { - return ( -
-
- -
-
- ); -} +import StakingCard from "./StakeCard"; + +export default function Staking() { + return ( +
+
+ +
+
+ ); +} diff --git a/next-app/src/app/tokens/ColumnDef.tsx b/next-app/src/app/tokens/ColumnDef.tsx index c5720c6..dd9244d 100644 --- a/next-app/src/app/tokens/ColumnDef.tsx +++ b/next-app/src/app/tokens/ColumnDef.tsx @@ -1,7 +1,6 @@ import { DotsHorizontalIcon } from "@radix-ui/react-icons"; import { ColumnDef } from "@tanstack/react-table"; -import Image from "next/image"; import { Button } from "../../components/ui/button"; import { DropdownMenu, @@ -38,11 +37,10 @@ export const columns: ColumnDef[] = [ header: "Logo", cell: ({ row }) => (
- {row.getValue("name")}
), diff --git a/next-app/src/app/tokens/page.tsx b/next-app/src/app/tokens/page.tsx index a7dee3f..fd5dedb 100644 --- a/next-app/src/app/tokens/page.tsx +++ b/next-app/src/app/tokens/page.tsx @@ -1,224 +1,224 @@ -"use client"; - -import { Button } from "@/components/ui/button"; -import { - DropdownMenu, - DropdownMenuCheckboxItem, - DropdownMenuContent, - DropdownMenuTrigger, -} from "@/components/ui/dropdown-menu"; -import { Input } from "@/components/ui/input"; -import { - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, -} from "@/components/ui/table"; -import { getCoins } from "@/hook/coins.hook"; -import { ChevronDownIcon } from "@radix-ui/react-icons"; -import { useQuery } from "@tanstack/react-query"; -import { - ColumnFiltersState, - SortingState, - VisibilityState, - flexRender, - getCoreRowModel, - getFilteredRowModel, - getPaginationRowModel, - getSortedRowModel, - useReactTable, -} from "@tanstack/react-table"; -import * as React from "react"; -import { columns } from "./ColumnDef"; -import { Token } from "./token.model"; - -export default function TokenPage() { - const [sorting, setSorting] = React.useState([]); - const [columnFilters, setColumnFilters] = React.useState( - [] - ); - const [columnVisibility, setColumnVisibility] = - React.useState({}); - const [rowSelection, setRowSelection] = React.useState({}); - - const [amountToBuy, setAmountToBuy] = React.useState(""); - - const { data: tokens } = useQuery({ - queryKey: ["tokens"], - queryFn: getCoins, - }); - - const table = useReactTable({ - data: tokens ?? [], - columns: columns, - onSortingChange: setSorting, - onColumnFiltersChange: setColumnFilters, - getCoreRowModel: getCoreRowModel(), - getPaginationRowModel: getPaginationRowModel(), - getSortedRowModel: getSortedRowModel(), - getFilteredRowModel: getFilteredRowModel(), - onColumnVisibilityChange: setColumnVisibility, - onRowSelectionChange: setRowSelection, - state: { - sorting, - columnFilters, - columnVisibility, - rowSelection, - }, - }); - - return ( -
-
-
-

- {" "} - List of tokens on Ethereum -

-

- Each token has a unique ID and can be used to access the Genx API. -

-
-
- - table.getColumn("name")?.setFilterValue(event.target.value) - } - className="max-w-sm" - /> - - - - - - {table - .getAllColumns() - .filter((column) => column.getCanHide()) - .map((column) => { - return ( - - column.toggleVisibility(!!value) - } - > - {column.id} - - ); - })} - - -
-
- - - {table.getHeaderGroups().map((headerGroup) => ( - - {headerGroup.headers.map((header) => { - return ( - - {header.isPlaceholder - ? null - : flexRender( - header.column.columnDef.header, - header.getContext() - )} - - ); - })} - - ))} - - - {table.getRowModel().rows?.length ? ( - table.getRowModel().rows.map((row, index) => ( - - {row.getVisibleCells().map((cell, indexCell) => ( - - {flexRender( - cell.column.columnDef.cell, - cell.getContext() - )} - - ))} - - )) - ) : ( - - - No results. - - - )} - -
-
-
-
- {table.getFilteredSelectedRowModel().rows.length} of{" "} - {table.getFilteredRowModel().rows.length} row(s) selected. -
-
- - -
-
-
- setAmountToBuy(e.target.value)} - className="max-w-sm" - /> - -
-
-
- ); -} +"use client"; + +import { Button } from "@/components/ui/button"; +import { + DropdownMenu, + DropdownMenuCheckboxItem, + DropdownMenuContent, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; +import { Input } from "@/components/ui/input"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; +import { getCoins } from "@/hook/coins.hook"; +import { ChevronDownIcon } from "@radix-ui/react-icons"; +import { useQuery } from "@tanstack/react-query"; +import { + ColumnFiltersState, + SortingState, + VisibilityState, + flexRender, + getCoreRowModel, + getFilteredRowModel, + getPaginationRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table"; +import * as React from "react"; +import { columns } from "./ColumnDef"; +import { Token } from "./token.model"; + +export default function TokenPage() { + const [sorting, setSorting] = React.useState([]); + const [columnFilters, setColumnFilters] = React.useState( + [] + ); + const [columnVisibility, setColumnVisibility] = + React.useState({}); + const [rowSelection, setRowSelection] = React.useState({}); + + const [amountToBuy, setAmountToBuy] = React.useState(""); + + const { data: tokens } = useQuery({ + queryKey: ["tokens"], + queryFn: getCoins, + }); + + const table = useReactTable({ + data: tokens ?? [], + columns: columns, + onSortingChange: setSorting, + onColumnFiltersChange: setColumnFilters, + getCoreRowModel: getCoreRowModel(), + getPaginationRowModel: getPaginationRowModel(), + getSortedRowModel: getSortedRowModel(), + getFilteredRowModel: getFilteredRowModel(), + onColumnVisibilityChange: setColumnVisibility, + onRowSelectionChange: setRowSelection, + state: { + sorting, + columnFilters, + columnVisibility, + rowSelection, + }, + }); + + return ( +
+
+
+

+ {" "} + List of tokens on Ethereum +

+

+ Each token has a unique ID and can be used to access the Genx API. +

+
+
+ + table.getColumn("name")?.setFilterValue(event.target.value) + } + className="max-w-sm" + /> + + + + + + {table + .getAllColumns() + .filter((column) => column.getCanHide()) + .map((column) => { + return ( + + column.toggleVisibility(!!value) + } + > + {column.id} + + ); + })} + + +
+
+ + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => { + return ( + + {header.isPlaceholder + ? null + : flexRender( + header.column.columnDef.header, + header.getContext() + )} + + ); + })} + + ))} + + + {table.getRowModel().rows?.length ? ( + table.getRowModel().rows.map((row, index) => ( + + {row.getVisibleCells().map((cell, indexCell) => ( + + {flexRender( + cell.column.columnDef.cell, + cell.getContext() + )} + + ))} + + )) + ) : ( + + + No results. + + + )} + +
+
+
+
+ {table.getFilteredSelectedRowModel().rows.length} of{" "} + {table.getFilteredRowModel().rows.length} row(s) selected. +
+
+ + +
+
+
+ setAmountToBuy(e.target.value)} + className="max-w-sm" + /> + +
+
+
+ ); +} diff --git a/next-app/src/app/tokens/token.model.ts b/next-app/src/app/tokens/token.model.ts index ba506e6..51ce5dd 100644 --- a/next-app/src/app/tokens/token.model.ts +++ b/next-app/src/app/tokens/token.model.ts @@ -1,17 +1,17 @@ -export type Token = { - Id: string, - Index: number, - Name: string, - Symbol: string, - Image: string, - CurrentPrice: number, - MarketCap: number, - MarketCapRank: number, - TotalVolume: number, - PriceChange24h: number, - PriceChangePercentage24h: number, - MarketCapChange24h: number, - MarketCapChangePercentage24h: number, - TotalSupply: number, - CirculatingSupply: number, +export type Token = { + Id: string, + Index: number, + Name: string, + Symbol: string, + Image: string, + CurrentPrice: number, + MarketCap: number, + MarketCapRank: number, + TotalVolume: number, + PriceChange24h: number, + PriceChangePercentage24h: number, + MarketCapChange24h: number, + MarketCapChangePercentage24h: number, + TotalSupply: number, + CirculatingSupply: number, } \ No newline at end of file diff --git a/next-app/src/components/CountBtn.tsx b/next-app/src/components/CountBtn.tsx index c07e87d..5af97e7 100644 --- a/next-app/src/components/CountBtn.tsx +++ b/next-app/src/components/CountBtn.tsx @@ -1,17 +1,17 @@ -import { useState } from 'react'; -import { cn } from '@/lib/utils'; -import { Button } from '@/components/ui/button'; - -interface Props { - className?: string; -} - -export default function CountBtn({ className }: Props) { - const [count, setCount] = useState(0); - - return ( - - ); -} +import { useState } from 'react'; +import { cn } from '@/lib/utils'; +import { Button } from '@/components/ui/button'; + +interface Props { + className?: string; +} + +export default function CountBtn({ className }: Props) { + const [count, setCount] = useState(0); + + return ( + + ); +} diff --git a/next-app/src/components/ErrorBoundary.tsx b/next-app/src/components/ErrorBoundary.tsx index 5c44178..e762d56 100644 --- a/next-app/src/components/ErrorBoundary.tsx +++ b/next-app/src/components/ErrorBoundary.tsx @@ -1,35 +1,35 @@ -// components/ErrorBoundary.tsx -"use client"; -import React, { Component, ErrorInfo, ReactNode } from "react"; - -interface Props { - children: ReactNode; -} - -interface State { - hasError: boolean; -} - -class ErrorBoundary extends Component { - public state: State = { - hasError: false, - }; - - public static getDerivedStateFromError(_: Error): State { - return { hasError: true }; - } - - public componentDidCatch(error: Error, errorInfo: ErrorInfo) { - console.error("Uncaught error:", error, errorInfo); - } - - public render() { - if (this.state.hasError) { - return

Sorry, something went wrong.

; - } - - return this.props.children; - } -} - -export default ErrorBoundary; +// components/ErrorBoundary.tsx +"use client"; +import React, { Component, ErrorInfo, ReactNode } from "react"; + +interface Props { + children: ReactNode; +} + +interface State { + hasError: boolean; +} + +class ErrorBoundary extends Component { + public state: State = { + hasError: false, + }; + + public static getDerivedStateFromError(_: Error): State { + return { hasError: true }; + } + + public componentDidCatch(error: Error, errorInfo: ErrorInfo) { + console.error("Uncaught error:", error, errorInfo); + } + + public render() { + if (this.state.hasError) { + return

Sorry, something went wrong.

; + } + + return this.props.children; + } +} + +export default ErrorBoundary; diff --git a/next-app/src/components/Icons.tsx b/next-app/src/components/Icons.tsx index 7bd90a4..164f9bf 100644 --- a/next-app/src/components/Icons.tsx +++ b/next-app/src/components/Icons.tsx @@ -1,126 +1,126 @@ -export function UsersIcon(props: React.SVGProps) { - return ( - - - - - - - ); -} - -export function SettingsIcon(props: React.SVGProps) { - return ( - - - - - ); -} - -export function SearchIcon(props: React.SVGProps) { - return ( - - - - - ); -} - -export function Spinner() { - return ( -
- - - - -
- ); -} - -export function Logo() { - return ( - - - - - ); -} - -export function VercelLogo(props: React.SVGProps) { - return ( - - - - ); -} +export function UsersIcon(props: React.SVGProps) { + return ( + + + + + + + ); +} + +export function SettingsIcon(props: React.SVGProps) { + return ( + + + + + ); +} + +export function SearchIcon(props: React.SVGProps) { + return ( + + + + + ); +} + +export function Spinner() { + return ( +
+ + + + +
+ ); +} + +export function Logo() { + return ( + + + + + ); +} + +export function VercelLogo(props: React.SVGProps) { + return ( + + + + ); +} diff --git a/next-app/src/components/ModeToggle.tsx b/next-app/src/components/ModeToggle.tsx index fca57d5..4922562 100644 --- a/next-app/src/components/ModeToggle.tsx +++ b/next-app/src/components/ModeToggle.tsx @@ -1,40 +1,40 @@ -"use client"; - -import * as React from "react"; -import { Moon, Sun } from "lucide-react"; -import { useTheme } from "next-themes"; - -import { Button } from "@/components/ui/button"; -import { - DropdownMenu, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuTrigger, -} from "@/components/ui/dropdown-menu"; - -export function ModeToggle() { - const { setTheme } = useTheme(); - - return ( - - - - - - setTheme("light")}> - Light - - setTheme("dark")}> - Dark - - setTheme("system")}> - System - - - - ); -} +"use client"; + +import * as React from "react"; +import { Moon, Sun } from "lucide-react"; +import { useTheme } from "next-themes"; + +import { Button } from "@/components/ui/button"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; + +export function ModeToggle() { + const { setTheme } = useTheme(); + + return ( + + + + + + setTheme("light")}> + Light + + setTheme("dark")}> + Dark + + setTheme("system")}> + System + + + + ); +} diff --git a/next-app/src/components/administration/Layout.tsx b/next-app/src/components/administration/Layout.tsx index 27e957c..02cdc15 100644 --- a/next-app/src/components/administration/Layout.tsx +++ b/next-app/src/components/administration/Layout.tsx @@ -1,19 +1,19 @@ -// components/Layout.js -"use client"; -import Sidebar from "@/components/administration/Sidebar"; -import { ReactNode } from "react"; - -interface LayoutProps { - children: ReactNode; -} - -const Layout: React.FC = ({ children }) => { - return ( -
- -
{children}
-
- ); -}; - -export default Layout; +// components/Layout.js +"use client"; +import Sidebar from "@/components/administration/Sidebar"; +import { ReactNode } from "react"; + +interface LayoutProps { + children: ReactNode; +} + +const Layout: React.FC = ({ children }) => { + return ( +
+ +
{children}
+
+ ); +}; + +export default Layout; diff --git a/next-app/src/components/administration/NavItem.tsx b/next-app/src/components/administration/NavItem.tsx index 5692f4a..923ef90 100644 --- a/next-app/src/components/administration/NavItem.tsx +++ b/next-app/src/components/administration/NavItem.tsx @@ -1,29 +1,29 @@ -"use client"; - -import clsx from "clsx"; -import Link from "next/link"; -import { usePathname } from "next/navigation"; - -export function NavItem({ - href, - children, -}: { - href: string; - children: React.ReactNode; -}) { - const pathname = usePathname(); - - return ( - - {children} - - ); -} +"use client"; + +import clsx from "clsx"; +import Link from "next/link"; +import { usePathname } from "next/navigation"; + +export function NavItem({ + href, + children, +}: { + href: string; + children: React.ReactNode; +}) { + const pathname = usePathname(); + + return ( + + {children} + + ); +} diff --git a/next-app/src/components/administration/Search.tsx b/next-app/src/components/administration/Search.tsx index 8817d5f..fd38a38 100644 --- a/next-app/src/components/administration/Search.tsx +++ b/next-app/src/components/administration/Search.tsx @@ -1,48 +1,48 @@ -"use client"; - -import { Input } from "@/components/ui/input"; -import { SearchIcon, Spinner } from "@/components/Icons"; -import { useRouter } from "next/navigation"; -import { useTransition, useEffect, useRef, useState } from "react"; - -export function Search(props: { value?: string }) { - const router = useRouter(); - const inputRef = useRef(null); - const [value, setValue] = useState(props.value); - const [isPending, startTransition] = useTransition(); - - useEffect(() => { - const params = new URLSearchParams(window.location.search); - console.log("value", value); - if (value === undefined) { - return; - } else if (value) { - params.set("q", value); - } else { - params.delete("q"); - } - - startTransition(() => { - // All navigations are transitions automatically - // But wrapping this allow us to observe the pending state - router.replace(`/?${params.toString()}`); - }); - }, [router, value]); - - return ( -
- - { - setValue(e.currentTarget.value); - }} - spellCheck={false} - className="w-full bg-white shadow-none appearance-none pl-8" - placeholder="Search users..." - /> - {isPending && } -
- ); -} +"use client"; + +import { Input } from "@/components/ui/input"; +import { SearchIcon, Spinner } from "@/components/Icons"; +import { useRouter } from "next/navigation"; +import { useTransition, useEffect, useRef, useState } from "react"; + +export function Search(props: { value?: string }) { + const router = useRouter(); + const inputRef = useRef(null); + const [value, setValue] = useState(props.value); + const [isPending, startTransition] = useTransition(); + + useEffect(() => { + const params = new URLSearchParams(window.location.search); + console.log("value", value); + if (value === undefined) { + return; + } else if (value) { + params.set("q", value); + } else { + params.delete("q"); + } + + startTransition(() => { + // All navigations are transitions automatically + // But wrapping this allow us to observe the pending state + router.replace(`/?${params.toString()}`); + }); + }, [router, value]); + + return ( +
+ + { + setValue(e.currentTarget.value); + }} + spellCheck={false} + className="w-full bg-white shadow-none appearance-none pl-8" + placeholder="Search users..." + /> + {isPending && } +
+ ); +} diff --git a/next-app/src/components/administration/Sidebar.tsx b/next-app/src/components/administration/Sidebar.tsx index 700c598..76e9a6b 100644 --- a/next-app/src/components/administration/Sidebar.tsx +++ b/next-app/src/components/administration/Sidebar.tsx @@ -1,26 +1,26 @@ -"use client"; -import Link from "next/link"; -import { UsersIcon, SettingsIcon, VercelLogo } from "@/components/Icons"; - -const Sidebar = () => { - return ( -
- -
- ); -}; - -export default Sidebar; +"use client"; +import Link from "next/link"; +import { UsersIcon, SettingsIcon, VercelLogo } from "@/components/Icons"; + +const Sidebar = () => { + return ( +
+ +
+ ); +}; + +export default Sidebar; diff --git a/next-app/src/components/administration/transactions/TransactionsTable.tsx b/next-app/src/components/administration/transactions/TransactionsTable.tsx index cc35cb8..3dc4609 100644 --- a/next-app/src/components/administration/transactions/TransactionsTable.tsx +++ b/next-app/src/components/administration/transactions/TransactionsTable.tsx @@ -1,64 +1,64 @@ -import { - TableHead, - TableRow, - TableHeader, - TableCell, - TableBody, - Table, -} from "@/components/ui/table"; -import { Transaction } from "@/types/hookResponse.type"; - -type TransactionsTableProps = { - transactions: Transaction[]; -}; - -const TransactionsTable: React.FC = ({ - transactions, -}) => { - return ( -
-
- - - - From - To - Amount - Hash - Date - - - - {transactions && - transactions.map((transaction) => ( - - ))} - -
-
-
- ); -}; - -function TransactionRow({ transaction }: { transaction: Transaction }) { - const date = new Date(transaction.created_at).toLocaleString("fr"); - - return ( - - {transaction.from} - {transaction.to} - - {transaction.amount} - - - {transaction.transaction} - - {date} - - ); -} - -export default TransactionsTable; +import { + TableHead, + TableRow, + TableHeader, + TableCell, + TableBody, + Table, +} from "@/components/ui/table"; +import { Transaction } from "@/types/hookResponse.type"; + +type TransactionsTableProps = { + transactions: Transaction[]; +}; + +const TransactionsTable: React.FC = ({ + transactions, +}) => { + return ( +
+
+ + + + From + To + Amount + Hash + Date + + + + {transactions && + transactions.map((transaction) => ( + + ))} + +
+
+
+ ); +}; + +function TransactionRow({ transaction }: { transaction: Transaction }) { + const date = new Date(transaction.created_at).toLocaleString("fr"); + + return ( + + {transaction.from} + {transaction.to} + + {transaction.amount} + + + {transaction.transaction} + + {date} + + ); +} + +export default TransactionsTable; diff --git a/next-app/src/components/administration/users/UsersTable.tsx b/next-app/src/components/administration/users/UsersTable.tsx index 4db51de..36702b8 100644 --- a/next-app/src/components/administration/users/UsersTable.tsx +++ b/next-app/src/components/administration/users/UsersTable.tsx @@ -1,53 +1,53 @@ -import { - TableHead, - TableRow, - TableHeader, - TableCell, - TableBody, - Table, -} from "@/components/ui/table"; -import { User } from "@/types/hookResponse.type"; - -type UsersTableProps = { - users: User[]; -}; - -const UsersTable: React.FC = ({ users }) => { - return ( -
-
- - - - Name - Address - Username - Created-at - - - - {users && - users.map((user) => )} - -
-
-
- ); -}; - -function UserRow({ user }: { user: User }) { - const userId = user.id; - // Created_at doit retourner la date + l'heure de la création en format fr - const created_at = new Date(user.created_at).toLocaleString("fr"); - - return ( - - {userId} - {user.name} - {user.address} - {created_at} - - ); -} - -export default UsersTable; +import { + TableHead, + TableRow, + TableHeader, + TableCell, + TableBody, + Table, +} from "@/components/ui/table"; +import { User } from "@/types/hookResponse.type"; + +type UsersTableProps = { + users: User[]; +}; + +const UsersTable: React.FC = ({ users }) => { + return ( +
+
+ + + + Name + Address + Username + Created-at + + + + {users && + users.map((user) => )} + +
+
+
+ ); +}; + +function UserRow({ user }: { user: User }) { + const userId = user.id; + // Created_at doit retourner la date + l'heure de la création en format fr + const created_at = new Date(user.created_at).toLocaleString("fr"); + + return ( + + {userId} + {user.name} + {user.address} + {created_at} + + ); +} + +export default UsersTable; diff --git a/next-app/src/components/cards/PriceCards.tsx b/next-app/src/components/cards/PriceCards.tsx index b1108eb..baa11af 100644 --- a/next-app/src/components/cards/PriceCards.tsx +++ b/next-app/src/components/cards/PriceCards.tsx @@ -1,37 +1,37 @@ -import { formatPrice } from '@/lib/price' - -interface PriceCardProps { - label: string; - price: number; -} - -interface PriceCardsProps { - price: number; - totalLiquidity: number; - totalVolume: number; - totalPairs: number; -} - -export const PriceCard = ({ label, price }: PriceCardProps)=> { - return ( -
-
${label}
-
${formatPrice(price)}
-
- ) -} - -export const PriceCards = ({ price, totalLiquidity, totalVolume, totalPairs} : PriceCardsProps) => { - - return ( - -
- - - - -
- - ) - -} +import { formatPrice } from '@/lib/price' + +interface PriceCardProps { + label: string; + price: number; +} + +interface PriceCardsProps { + price: number; + totalLiquidity: number; + totalVolume: number; + totalPairs: number; +} + +export const PriceCard = ({ label, price }: PriceCardProps)=> { + return ( +
+
${label}
+
${formatPrice(price)}
+
+ ) +} + +export const PriceCards = ({ price, totalLiquidity, totalVolume, totalPairs} : PriceCardsProps) => { + + return ( + +
+ + + + +
+ + ) + +} diff --git a/next-app/src/components/cards/TransactionsCard.tsx b/next-app/src/components/cards/TransactionsCard.tsx index 9a2f00d..5b1250f 100644 --- a/next-app/src/components/cards/TransactionsCard.tsx +++ b/next-app/src/components/cards/TransactionsCard.tsx @@ -1,35 +1,35 @@ -interface TransactionCardProps { - transaction: { - index: number; - amount: number; - label: string; - price: number; - timestamp: Date; - }; -} - -export const TransactionCard = ({ transaction }: TransactionCardProps) => { - const formatDate = (date: Date) => { - return new Intl.DateTimeFormat("default", { - year: "numeric", - month: "short", - day: "2-digit", - hour: "2-digit", - minute: "2-digit", - }).format(date); - }; - - return ( -
-
-
- {transaction.amount.toFixed(3)} {transaction.label} -
-
$ {transaction.price.toFixed(3)}
-
-
- {formatDate(transaction.timestamp)} -
-
- ); -}; +interface TransactionCardProps { + transaction: { + index: number; + amount: number; + label: string; + price: number; + timestamp: Date; + }; +} + +export const TransactionCard = ({ transaction }: TransactionCardProps) => { + const formatDate = (date: Date) => { + return new Intl.DateTimeFormat("default", { + year: "numeric", + month: "short", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + }).format(date); + }; + + return ( +
+
+
+ {transaction.amount.toFixed(3)} {transaction.label} +
+
$ {transaction.price.toFixed(3)}
+
+
+ {formatDate(transaction.timestamp)} +
+
+ ); +}; diff --git a/next-app/src/components/common/Header.tsx b/next-app/src/components/common/Header.tsx index a7d403a..7891a62 100644 --- a/next-app/src/components/common/Header.tsx +++ b/next-app/src/components/common/Header.tsx @@ -1,13 +1,12 @@ "use client"; -import { NavLink } from "@/types/header.type"; +import Link from "next/link"; import { ConnectButton } from "@rainbow-me/rainbowkit"; +import { Button } from "../ui/button"; +import { NavLink } from "@/types/header.type"; +import { ModeToggle } from "../ModeToggle"; import { UserRound } from "lucide-react"; -import Image from "next/image"; -import Link from "next/link"; import { useAccount } from "wagmi"; -import { ModeToggle } from "../ModeToggle"; -import { Button } from "../ui/button"; const HeaderLinks: NavLink[] = [ { @@ -19,8 +18,8 @@ const HeaderLinks: NavLink[] = [ href: "/tokens", }, { - name: "Actions", - href: "/actions", + name: "Swap", + href: "/swap", }, { name: "Stake", @@ -153,11 +152,10 @@ export default function Header(): JSX.Element { }} > {chain.iconUrl && ( - {chain.name )} diff --git a/next-app/src/components/dashboard/ClientComponent.tsx b/next-app/src/components/dashboard/ClientComponent.tsx index 4a44ad8..6bd7da0 100644 --- a/next-app/src/components/dashboard/ClientComponent.tsx +++ b/next-app/src/components/dashboard/ClientComponent.tsx @@ -1,34 +1,229 @@ -// components/ClientComponent.js -"use client"; - -// import { abi } from "@/abis/ERC20Upgradeable.json"; -import { abi } from "@/abi/abi"; -import { useAccount, useBalance, useEnsName, useReadContract } from "wagmi"; - -const tokenAddress = "0xb1d5503492e692f0648a5d4da1317cf30d54efdf"; - -export default function ClientComponent() { - const { address } = useAccount(); - const { data, error, status } = useEnsName({ address }); - const result = useBalance({ address: address }); - - const { data: balance } = useReadContract({ - abi: abi, - functionName: "balanceOf", - address: tokenAddress, - args: ["0x3964d0011eb003488ab59b1ce0c235baa3998bdd"], - }); - - console.log("balance", balance); - - if (status === "pending") return
Loading ENS name
; - if (status === "error") - return
Error fetching ENS name: {error.message}
; - return ( -
- balance: {result.data?.formatted}, address : {address} -
-
Balance: {balance?.toString()}
-
- ); -} +"use client"; + +import { ERC2O } from "@/abi/ERC20"; +import { + GensAddress, + GenxAddress, + LiquidityPoolAddress, + liquidityFactoryAddress, +} from "@/abi/address"; +import { LiquidityPoolABI } from "@/abi/liquidityPool"; +import { usePools } from "@/hook/usePools"; +import { ethers } from "ethers"; +import { useState } from "react"; +import { Address } from "viem"; +import { useAccount, useReadContract } from "wagmi"; +import { Button } from "../ui/button"; +import { Input } from "../ui/input"; +import { + getSigner, + useERC20UpgradeableContract, + useFactoryContract, + useLiquidityPoolContract, +} from "./Contracts"; + +const ClientComponent = () => { + const { address, chainId } = useAccount(); + const [liquidityAmountA, setLiquidityAmountA] = useState("0"); + const [liquidityAmountB, setLiquidityAmountB] = useState("0"); + const pools = usePools(); // Utiliser le hook personnalisé pour obtenir les adresses des pools + const signer = getSigner({ chainId }); + + const { data: balance, isLoading: isBalanceLoading } = useReadContract({ + abi: ERC2O, + functionName: "balanceOf", + address: GenxAddress, + args: [address], + }); + + const { data: balance2, isLoading: isBalanceLoading2 } = useReadContract({ + abi: ERC2O, + functionName: "balanceOf", + address: GensAddress, + args: [address], + }); + + const { data: symbol, isLoading: isSymbolLoading } = useReadContract({ + abi: ERC2O, + functionName: "symbol", + address: GenxAddress, + }); + + const { data: symbol2, isLoading: isSymbolLoading2 } = useReadContract({ + abi: ERC2O, + functionName: "symbol", + address: GensAddress, + }); + + const { data: reserves, isLoading: isReservesLoading } = useReadContract({ + abi: LiquidityPoolABI, + functionName: "getReserves", + address: LiquidityPoolAddress, + }); + + const FactoryContract = useFactoryContract({ + address: liquidityFactoryAddress, + chainId, + }); + + const GenxContract = useERC20UpgradeableContract({ + address: GenxAddress, + chainId, + }); + + const GensContract = useERC20UpgradeableContract({ + address: GensAddress, + chainId, + }); + + const LiquidityPoolContract = useLiquidityPoolContract({ + address: LiquidityPoolAddress, + chainId, + }); + + const handleCreatePool = async () => { + try { + const tx = await FactoryContract.createPool( + GenxAddress as Address, + GensAddress as Address, + address, + 30 + ); + await tx.wait(); + } catch (error) { + console.log(error); + } + }; + + const handleAddLiquidity = async () => { + if (!signer || !address) return; + + if ( + !liquidityAmountA || + isNaN(Number(liquidityAmountA)) || + !liquidityAmountB || + isNaN(Number(liquidityAmountB)) + ) { + alert("Please enter valid amounts for both tokens."); + return; + } + + const amountA = ethers.parseUnits(liquidityAmountA, "ether"); + const amountB = ethers.parseUnits(liquidityAmountB, "ether"); + + console.log("Amounts:", { + amountA: amountA.toString(), + amountB: amountB.toString(), + }); + + try { + // Approve tokens for the liquidity pool + console.log("Approving GENX tokens"); + const approveTxA = await GenxContract.approve( + LiquidityPoolAddress, + amountA + ); + await approveTxA.wait(); + console.log("Approved GENX"); + + console.log("Approving GENS tokens"); + const approveTxB = await GensContract.approve( + LiquidityPoolAddress, + amountB + ); + await approveTxB.wait(); + console.log("Approved GENS"); + + await new Promise((resolve) => setTimeout(resolve, 10000)); + + const tx = await LiquidityPoolContract.addLiquidity(amountB, amountA); + await tx.wait(); + console.log("Liquidity added successfully"); + } catch (error) { + console.error("Error adding liquidity:", error); + if (error.data && error.data.message) { + console.error("Error data:", error.data.message); + } + } + }; + + return ( +
+
Address: {address}
+
+ {isBalanceLoading ? ( +
Loading...
+ ) : ( +
+ GENX Balance: {balance?.toString()} {symbol} +
+ )} + + {isBalanceLoading2 ? ( +
Loading...
+ ) : ( +
+ GENS Balance: {balance2?.toString()} {symbol2} +
+ )} +
+
+

LiquidityPool

+
+

Number of Pools: {pools.allPoolsLength?.toString()}

+ +
+ {pools.allPoolsAddress?.map((pool, index) => ( +
+

Pool {index + 1}

+

Address: {pool}

+
+ ))} +
+ +
+ {isReservesLoading ? ( +
Loading...
+ ) : ( +
+

Reserves: {reserves?.toString()}

+
+ )} +
+ +
+

Create a pool

+ +
+ +
+ setLiquidityAmountA(e.target.value)} + /> + setLiquidityAmountB(e.target.value)} + /> + +
+
+ + +
+
+
+
+ ); +}; + +export default ClientComponent; diff --git a/next-app/src/components/dashboard/Contracts.ts b/next-app/src/components/dashboard/Contracts.ts new file mode 100644 index 0000000..6363dad --- /dev/null +++ b/next-app/src/components/dashboard/Contracts.ts @@ -0,0 +1,38 @@ +import { ERC2O } from "@/abi/ERC20"; +import { LiquidityPoolABI } from "@/abi/liquidityPool"; +import { liquidityPoolFactoryABI } from "@/abi/liquidityPoolFactory"; +import { useEthersSigner } from "@/context/Provider"; +import { ethers } from "ethers"; +import { useMemo } from "react"; +import { Address } from "viem"; + +/** Hook to get the factory contract instance */ +export function useFactoryContract({ chainId, address }: { chainId?: number, address: Address }) { + const signer = useEthersSigner( chainId ? { chainId } : {}); + + return useMemo(() => { + return new ethers.Contract(address, liquidityPoolFactoryABI, signer); + }, [signer]); +} + +export function useLiquidityPoolContract({address, chainId }: { chainId?: number, address: Address }) { + const signer = useEthersSigner(chainId ? { chainId } : {}); + + return useMemo(() => { + return new ethers.Contract(address, LiquidityPoolABI, signer); + }, [signer]); +} + +export function useERC20UpgradeableContract({ chainId, address }: { chainId?: number, address: Address }) { + const signer = useEthersSigner(chainId ? { chainId } : {}); + + return useMemo(() => { + return new ethers.Contract(address, ERC2O, signer); + }, [signer]); +} + +export function getSigner({ chainId }: { chainId?: number } = {}) { + const signer = useEthersSigner({ chainId }); + + return signer; +} diff --git a/next-app/src/components/landpage/Landpage.tsx b/next-app/src/components/landpage/Landpage.tsx index f2b66ab..29dabae 100644 --- a/next-app/src/components/landpage/Landpage.tsx +++ b/next-app/src/components/landpage/Landpage.tsx @@ -1,59 +1,59 @@ -/** - * v0 by Vercel. - * @see https://v0.dev/t/pE4SkRC9YFo - */ -import { Button } from "@/components/ui/button" - -export default function Component() { - return ( -
-
-
-
-

- Buy and Sell Instantly on GenX. - Wherever. -

-

- Unlock the world of cryptocurrency trading. Experience the freedom to trade over 400 tokens instantly, no - registration needed. -

-
-
-
PRICE
-
$1.17
-
-
-
TOTAL LIQUIDITY
-
$407.61m
-
-
-
TOTAL VOLUME
-
-
-
-
-
TOTAL PAIRS
-
53.31k
-
-
-
-
-
-

Latest Transactions

-
{/* Ajout de styles pour le scroll */} - {/* Exemple de données supplémentaires */} - {[...Array(10)].map((_, index) => ( -
-
{Math.random().toFixed(3)} ETH
-
$ {(Math.random() * 1000).toFixed(2)}
-
- ))} -
-
- -
-
-
-
- ) +/** + * v0 by Vercel. + * @see https://v0.dev/t/pE4SkRC9YFo + */ +import { Button } from "@/components/ui/button" + +export default function Component() { + return ( +
+
+
+
+

+ Buy and Sell Instantly on GenX. + Wherever. +

+

+ Unlock the world of cryptocurrency trading. Experience the freedom to trade over 400 tokens instantly, no + registration needed. +

+
+
+
PRICE
+
$1.17
+
+
+
TOTAL LIQUIDITY
+
$407.61m
+
+
+
TOTAL VOLUME
+
-
+
+
+
TOTAL PAIRS
+
53.31k
+
+
+
+
+
+

Latest Transactions

+
{/* Ajout de styles pour le scroll */} + {/* Exemple de données supplémentaires */} + {[...Array(10)].map((_, index) => ( +
+
{Math.random().toFixed(3)} ETH
+
$ {(Math.random() * 1000).toFixed(2)}
+
+ ))} +
+
+ +
+
+
+
+ ) } \ No newline at end of file diff --git a/next-app/src/components/liquidityPool/AddPoolModal.tsx b/next-app/src/components/liquidityPool/AddPoolModal.tsx index 4f77f34..96556e9 100644 --- a/next-app/src/components/liquidityPool/AddPoolModal.tsx +++ b/next-app/src/components/liquidityPool/AddPoolModal.tsx @@ -8,7 +8,7 @@ import { DialogTrigger, } from "@/components/ui/dialog"; -function AddPoolModal() { +function AddPoolModal(props) { return ( diff --git a/next-app/src/components/ui/badge.tsx b/next-app/src/components/ui/badge.tsx index cc9774f..45fc3c2 100644 --- a/next-app/src/components/ui/badge.tsx +++ b/next-app/src/components/ui/badge.tsx @@ -1,35 +1,35 @@ -import * as React from "react" -import { cva, type VariantProps } from "class-variance-authority" -import { cn } from "@/lib/utils" - -const badgeVariants = cva( - "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", - { - variants: { - variant: { - default: - "border-transparent bg-primary text-primary-foreground hover:bg-primary/80", - secondary: - "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", - destructive: - "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80", - outline: "text-foreground", - }, - }, - defaultVariants: { - variant: "default", - }, - } -) - -export interface BadgeProps - extends React.HTMLAttributes, - VariantProps {} - -function Badge({ className, variant, ...props }: BadgeProps) { - return ( -
- ) -} - -export { Badge, badgeVariants } +import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" +import { cn } from "@/lib/utils" + +const badgeVariants = cva( + "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground hover:bg-primary/80", + secondary: + "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80", + outline: "text-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +export interface BadgeProps + extends React.HTMLAttributes, + VariantProps {} + +function Badge({ className, variant, ...props }: BadgeProps) { + return ( +
+ ) +} + +export { Badge, badgeVariants } diff --git a/next-app/src/components/ui/button.tsx b/next-app/src/components/ui/button.tsx index 3a00599..ed601a7 100644 --- a/next-app/src/components/ui/button.tsx +++ b/next-app/src/components/ui/button.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { Slot } from "@radix-ui/react-slot"; import { cva, type VariantProps } from "class-variance-authority"; -import { cn } from "@/lib/utils"; +import { cn } from "@/lib/utils"; // Assurez-vous que le chemin est correct // Définition des styles de variantes pour les boutons const buttonVariants = cva( diff --git a/next-app/src/components/ui/card.tsx b/next-app/src/components/ui/card.tsx index 938aa22..7767886 100644 --- a/next-app/src/components/ui/card.tsx +++ b/next-app/src/components/ui/card.tsx @@ -1,79 +1,79 @@ -import * as React from "react" - -import { cn } from "@/lib/utils" - -const Card = React.forwardRef< - HTMLDivElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( -
-)) -Card.displayName = "Card" - -const CardHeader = React.forwardRef< - HTMLDivElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( -
-)) -CardHeader.displayName = "CardHeader" - -const CardTitle = React.forwardRef< - HTMLParagraphElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( -

-)) -CardTitle.displayName = "CardTitle" - -const CardDescription = React.forwardRef< - HTMLParagraphElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( -

-)) -CardDescription.displayName = "CardDescription" - -const CardContent = React.forwardRef< - HTMLDivElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( -

-)) -CardContent.displayName = "CardContent" - -const CardFooter = React.forwardRef< - HTMLDivElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( -
-)) -CardFooter.displayName = "CardFooter" - +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +Card.displayName = "Card" + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardHeader.displayName = "CardHeader" + +const CardTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardTitle.displayName = "CardTitle" + +const CardDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardDescription.displayName = "CardDescription" + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardContent.displayName = "CardContent" + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardFooter.displayName = "CardFooter" + export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } \ No newline at end of file diff --git a/next-app/src/components/ui/checkbox.tsx b/next-app/src/components/ui/checkbox.tsx index 5158448..172196c 100644 --- a/next-app/src/components/ui/checkbox.tsx +++ b/next-app/src/components/ui/checkbox.tsx @@ -1,28 +1,28 @@ -import * as React from "react"; -import * as CheckboxPrimitive from "@radix-ui/react-checkbox"; -import { Check } from "lucide-react"; - -import { cn } from "@/lib/utils"; - -const Checkbox = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - - - - - -)); -Checkbox.displayName = CheckboxPrimitive.Root.displayName; - -export { Checkbox }; +import * as React from "react"; +import * as CheckboxPrimitive from "@radix-ui/react-checkbox"; +import { Check } from "lucide-react"; + +import { cn } from "@/lib/utils"; + +const Checkbox = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + + + +)); +Checkbox.displayName = CheckboxPrimitive.Root.displayName; + +export { Checkbox }; diff --git a/next-app/src/components/ui/command.tsx b/next-app/src/components/ui/command.tsx index 57d871b..95b1415 100644 --- a/next-app/src/components/ui/command.tsx +++ b/next-app/src/components/ui/command.tsx @@ -1,12 +1,10 @@ -"use client" +import * as React from "react"; +import { type DialogProps } from "@radix-ui/react-dialog"; +import { Command as CommandPrimitive } from "cmdk"; +import { Search } from "lucide-react"; -import * as React from "react" -import { type DialogProps } from "@radix-ui/react-dialog" -import { Command as CommandPrimitive } from "cmdk" -import { Search } from "lucide-react" - -import { cn } from "@/lib/utils" -import { Dialog, DialogContent } from "@/components/ui/dialog" +import { cn } from "@/lib/utils"; +import { Dialog, DialogContent } from "@/components/ui/dialog"; const Command = React.forwardRef< React.ElementRef, @@ -15,13 +13,13 @@ const Command = React.forwardRef< -)) -Command.displayName = CommandPrimitive.displayName +)); +Command.displayName = CommandPrimitive.displayName; interface CommandDialogProps extends DialogProps {} @@ -29,13 +27,13 @@ const CommandDialog = ({ children, ...props }: CommandDialogProps) => { return ( - + {children} - ) -} + ); +}; const CommandInput = React.forwardRef< React.ElementRef, @@ -46,15 +44,15 @@ const CommandInput = React.forwardRef<
-)) +)); -CommandInput.displayName = CommandPrimitive.Input.displayName +CommandInput.displayName = CommandPrimitive.Input.displayName; const CommandList = React.forwardRef< React.ElementRef, @@ -65,9 +63,9 @@ const CommandList = React.forwardRef< className={cn("max-h-[300px] overflow-y-auto overflow-x-hidden", className)} {...props} /> -)) +)); -CommandList.displayName = CommandPrimitive.List.displayName +CommandList.displayName = CommandPrimitive.List.displayName; const CommandEmpty = React.forwardRef< React.ElementRef, @@ -78,9 +76,9 @@ const CommandEmpty = React.forwardRef< className="py-6 text-center text-sm" {...props} /> -)) +)); -CommandEmpty.displayName = CommandPrimitive.Empty.displayName +CommandEmpty.displayName = CommandPrimitive.Empty.displayName; const CommandGroup = React.forwardRef< React.ElementRef, @@ -89,14 +87,14 @@ const CommandGroup = React.forwardRef< -)) +)); -CommandGroup.displayName = CommandPrimitive.Group.displayName +CommandGroup.displayName = CommandPrimitive.Group.displayName; const CommandSeparator = React.forwardRef< React.ElementRef, @@ -104,11 +102,11 @@ const CommandSeparator = React.forwardRef< >(({ className, ...props }, ref) => ( -)) -CommandSeparator.displayName = CommandPrimitive.Separator.displayName +)); +CommandSeparator.displayName = CommandPrimitive.Separator.displayName; const CommandItem = React.forwardRef< React.ElementRef, @@ -117,14 +115,14 @@ const CommandItem = React.forwardRef< -)) +)); -CommandItem.displayName = CommandPrimitive.Item.displayName +CommandItem.displayName = CommandPrimitive.Item.displayName; const CommandShortcut = ({ className, @@ -133,14 +131,14 @@ const CommandShortcut = ({ return ( - ) -} -CommandShortcut.displayName = "CommandShortcut" + ); +}; +CommandShortcut.displayName = "CommandShortcut"; export { Command, @@ -152,4 +150,4 @@ export { CommandItem, CommandShortcut, CommandSeparator, -} +}; diff --git a/next-app/src/components/ui/dialog.tsx b/next-app/src/components/ui/dialog.tsx index dccaaa3..b75721d 100644 --- a/next-app/src/components/ui/dialog.tsx +++ b/next-app/src/components/ui/dialog.tsx @@ -1,122 +1,122 @@ -"use client" - -import * as React from "react" -import * as DialogPrimitive from "@radix-ui/react-dialog" -import { X } from "lucide-react" - -import { cn } from "@/lib/utils" - -const Dialog = DialogPrimitive.Root - -const DialogTrigger = DialogPrimitive.Trigger - -const DialogPortal = DialogPrimitive.Portal - -const DialogClose = DialogPrimitive.Close - -const DialogOverlay = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -DialogOverlay.displayName = DialogPrimitive.Overlay.displayName - -const DialogContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( - - - - {children} - - - Close - - - -)) -DialogContent.displayName = DialogPrimitive.Content.displayName - -const DialogHeader = ({ - className, - ...props -}: React.HTMLAttributes) => ( -
-) -DialogHeader.displayName = "DialogHeader" - -const DialogFooter = ({ - className, - ...props -}: React.HTMLAttributes) => ( -
-) -DialogFooter.displayName = "DialogFooter" - -const DialogTitle = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -DialogTitle.displayName = DialogPrimitive.Title.displayName - -const DialogDescription = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -DialogDescription.displayName = DialogPrimitive.Description.displayName - -export { - Dialog, - DialogPortal, - DialogOverlay, - DialogClose, - DialogTrigger, - DialogContent, - DialogHeader, - DialogFooter, - DialogTitle, - DialogDescription, -} +"use client" + +import * as React from "react" +import * as DialogPrimitive from "@radix-ui/react-dialog" +import { X } from "lucide-react" + +import { cn } from "@/lib/utils" + +const Dialog = DialogPrimitive.Root + +const DialogTrigger = DialogPrimitive.Trigger + +const DialogPortal = DialogPrimitive.Portal + +const DialogClose = DialogPrimitive.Close + +const DialogOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName + +const DialogContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + {children} + + + Close + + + +)) +DialogContent.displayName = DialogPrimitive.Content.displayName + +const DialogHeader = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+) +DialogHeader.displayName = "DialogHeader" + +const DialogFooter = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+) +DialogFooter.displayName = "DialogFooter" + +const DialogTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogTitle.displayName = DialogPrimitive.Title.displayName + +const DialogDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogDescription.displayName = DialogPrimitive.Description.displayName + +export { + Dialog, + DialogPortal, + DialogOverlay, + DialogClose, + DialogTrigger, + DialogContent, + DialogHeader, + DialogFooter, + DialogTitle, + DialogDescription, +} diff --git a/next-app/src/components/ui/dropdown-menu.tsx b/next-app/src/components/ui/dropdown-menu.tsx index 769ff7a..dd422d2 100644 --- a/next-app/src/components/ui/dropdown-menu.tsx +++ b/next-app/src/components/ui/dropdown-menu.tsx @@ -1,198 +1,198 @@ -import * as React from "react" -import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu" -import { Check, ChevronRight, Circle } from "lucide-react" - -import { cn } from "@/lib/utils" - -const DropdownMenu = DropdownMenuPrimitive.Root - -const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger - -const DropdownMenuGroup = DropdownMenuPrimitive.Group - -const DropdownMenuPortal = DropdownMenuPrimitive.Portal - -const DropdownMenuSub = DropdownMenuPrimitive.Sub - -const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup - -const DropdownMenuSubTrigger = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean - } ->(({ className, inset, children, ...props }, ref) => ( - - {children} - - -)) -DropdownMenuSubTrigger.displayName = - DropdownMenuPrimitive.SubTrigger.displayName - -const DropdownMenuSubContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -DropdownMenuSubContent.displayName = - DropdownMenuPrimitive.SubContent.displayName - -const DropdownMenuContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, sideOffset = 4, ...props }, ref) => ( - - - -)) -DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName - -const DropdownMenuItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean - } ->(({ className, inset, ...props }, ref) => ( - -)) -DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName - -const DropdownMenuCheckboxItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, checked, ...props }, ref) => ( - - - - - - - {children} - -)) -DropdownMenuCheckboxItem.displayName = - DropdownMenuPrimitive.CheckboxItem.displayName - -const DropdownMenuRadioItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( - - - - - - - {children} - -)) -DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName - -const DropdownMenuLabel = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean - } ->(({ className, inset, ...props }, ref) => ( - -)) -DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName - -const DropdownMenuSeparator = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName - -const DropdownMenuShortcut = ({ - className, - ...props -}: React.HTMLAttributes) => { - return ( - - ) -} -DropdownMenuShortcut.displayName = "DropdownMenuShortcut" - -export { - DropdownMenu, - DropdownMenuTrigger, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuCheckboxItem, - DropdownMenuRadioItem, - DropdownMenuLabel, - DropdownMenuSeparator, - DropdownMenuShortcut, - DropdownMenuGroup, - DropdownMenuPortal, - DropdownMenuSub, - DropdownMenuSubContent, - DropdownMenuSubTrigger, - DropdownMenuRadioGroup, -} +import * as React from "react" +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu" +import { Check, ChevronRight, Circle } from "lucide-react" + +import { cn } from "@/lib/utils" + +const DropdownMenu = DropdownMenuPrimitive.Root + +const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger + +const DropdownMenuGroup = DropdownMenuPrimitive.Group + +const DropdownMenuPortal = DropdownMenuPrimitive.Portal + +const DropdownMenuSub = DropdownMenuPrimitive.Sub + +const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup + +const DropdownMenuSubTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, children, ...props }, ref) => ( + + {children} + + +)) +DropdownMenuSubTrigger.displayName = + DropdownMenuPrimitive.SubTrigger.displayName + +const DropdownMenuSubContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSubContent.displayName = + DropdownMenuPrimitive.SubContent.displayName + +const DropdownMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + + + +)) +DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName + +const DropdownMenuItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName + +const DropdownMenuCheckboxItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, checked, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuCheckboxItem.displayName = + DropdownMenuPrimitive.CheckboxItem.displayName + +const DropdownMenuRadioItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName + +const DropdownMenuLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName + +const DropdownMenuSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName + +const DropdownMenuShortcut = ({ + className, + ...props +}: React.HTMLAttributes) => { + return ( + + ) +} +DropdownMenuShortcut.displayName = "DropdownMenuShortcut" + +export { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuGroup, + DropdownMenuPortal, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuRadioGroup, +} diff --git a/next-app/src/components/ui/input.tsx b/next-app/src/components/ui/input.tsx index 677d05f..5e9a18e 100644 --- a/next-app/src/components/ui/input.tsx +++ b/next-app/src/components/ui/input.tsx @@ -1,25 +1,25 @@ -import * as React from "react" - -import { cn } from "@/lib/utils" - -export interface InputProps - extends React.InputHTMLAttributes {} - -const Input = React.forwardRef( - ({ className, type, ...props }, ref) => { - return ( - - ) - } -) -Input.displayName = "Input" - -export { Input } +import * as React from "react" + +import { cn } from "@/lib/utils" + +export interface InputProps + extends React.InputHTMLAttributes {} + +const Input = React.forwardRef( + ({ className, type, ...props }, ref) => { + return ( + + ) + } +) +Input.displayName = "Input" + +export { Input } diff --git a/next-app/src/components/ui/label.tsx b/next-app/src/components/ui/label.tsx index 907c200..40378d4 100644 --- a/next-app/src/components/ui/label.tsx +++ b/next-app/src/components/ui/label.tsx @@ -1,8 +1,8 @@ "use client"; +import * as React from "react"; import * as LabelPrimitive from "@radix-ui/react-label"; import { cva, type VariantProps } from "class-variance-authority"; -import * as React from "react"; import { cn } from "@/lib/utils"; diff --git a/next-app/src/components/ui/popover.tsx b/next-app/src/components/ui/popover.tsx index 1528dba..35da60e 100644 --- a/next-app/src/components/ui/popover.tsx +++ b/next-app/src/components/ui/popover.tsx @@ -1,13 +1,11 @@ -"use client" +import * as React from "react"; +import * as PopoverPrimitive from "@radix-ui/react-popover"; -import * as React from "react" -import * as PopoverPrimitive from "@radix-ui/react-popover" +import { cn } from "@/lib/utils"; -import { cn } from "@/lib/utils" +const Popover = PopoverPrimitive.Root; -const Popover = PopoverPrimitive.Root - -const PopoverTrigger = PopoverPrimitive.Trigger +const PopoverTrigger = PopoverPrimitive.Trigger; const PopoverContent = React.forwardRef< React.ElementRef, @@ -19,13 +17,13 @@ const PopoverContent = React.forwardRef< align={align} sideOffset={sideOffset} className={cn( - "z-50 w-72 rounded-md border border-neutral-200 bg-white p-4 text-neutral-950 shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50", + "z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", className )} {...props} /> -)) -PopoverContent.displayName = PopoverPrimitive.Content.displayName +)); +PopoverContent.displayName = PopoverPrimitive.Content.displayName; -export { Popover, PopoverTrigger, PopoverContent } +export { Popover, PopoverTrigger, PopoverContent }; diff --git a/next-app/src/components/ui/progress.tsx b/next-app/src/components/ui/progress.tsx index 6d20844..34a35da 100644 --- a/next-app/src/components/ui/progress.tsx +++ b/next-app/src/components/ui/progress.tsx @@ -1,28 +1,28 @@ -"use client" - -import * as React from "react" -import * as ProgressPrimitive from "@radix-ui/react-progress" - -import { cn } from "@/lib/utils" - -const Progress = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, value, ...props }, ref) => ( - - - -)) -Progress.displayName = ProgressPrimitive.Root.displayName - -export { Progress } +"use client" + +import * as React from "react" +import * as ProgressPrimitive from "@radix-ui/react-progress" + +import { cn } from "@/lib/utils" + +const Progress = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, value, ...props }, ref) => ( + + + +)) +Progress.displayName = ProgressPrimitive.Root.displayName + +export { Progress } diff --git a/next-app/src/components/ui/select.tsx b/next-app/src/components/ui/select.tsx index f2081f6..b7ff105 100644 --- a/next-app/src/components/ui/select.tsx +++ b/next-app/src/components/ui/select.tsx @@ -1,6 +1,6 @@ +import * as React from "react"; import * as SelectPrimitive from "@radix-ui/react-select"; import { Check, ChevronDown, ChevronUp } from "lucide-react"; -import * as React from "react"; import { cn } from "@/lib/utils"; @@ -146,13 +146,13 @@ SelectSeparator.displayName = SelectPrimitive.Separator.displayName; export { Select, - SelectContent, SelectGroup, - SelectItem, + SelectValue, + SelectTrigger, + SelectContent, SelectLabel, - SelectScrollDownButton, - SelectScrollUpButton, + SelectItem, SelectSeparator, - SelectTrigger, - SelectValue, + SelectScrollUpButton, + SelectScrollDownButton, }; diff --git a/next-app/src/components/ui/switch.tsx b/next-app/src/components/ui/switch.tsx index 16c7b50..42b25e6 100644 --- a/next-app/src/components/ui/switch.tsx +++ b/next-app/src/components/ui/switch.tsx @@ -1,27 +1,27 @@ -import * as React from "react" -import * as SwitchPrimitives from "@radix-ui/react-switch" - -import { cn } from "@/lib/utils" - -const Switch = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - - - -)) -Switch.displayName = SwitchPrimitives.Root.displayName - +import * as React from "react" +import * as SwitchPrimitives from "@radix-ui/react-switch" + +import { cn } from "@/lib/utils" + +const Switch = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)) +Switch.displayName = SwitchPrimitives.Root.displayName + export { Switch } \ No newline at end of file diff --git a/next-app/src/components/ui/table.tsx b/next-app/src/components/ui/table.tsx index 7f3502f..1996a4e 100644 --- a/next-app/src/components/ui/table.tsx +++ b/next-app/src/components/ui/table.tsx @@ -1,117 +1,117 @@ -import * as React from "react" - -import { cn } from "@/lib/utils" - -const Table = React.forwardRef< - HTMLTableElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( -
- - -)) -Table.displayName = "Table" - -const TableHeader = React.forwardRef< - HTMLTableSectionElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( - -)) -TableHeader.displayName = "TableHeader" - -const TableBody = React.forwardRef< - HTMLTableSectionElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( - -)) -TableBody.displayName = "TableBody" - -const TableFooter = React.forwardRef< - HTMLTableSectionElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( - tr]:last:border-b-0", - className - )} - {...props} - /> -)) -TableFooter.displayName = "TableFooter" - -const TableRow = React.forwardRef< - HTMLTableRowElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( - -)) -TableRow.displayName = "TableRow" - -const TableHead = React.forwardRef< - HTMLTableCellElement, - React.ThHTMLAttributes ->(({ className, ...props }, ref) => ( -
-)) -TableHead.displayName = "TableHead" - -const TableCell = React.forwardRef< - HTMLTableCellElement, - React.TdHTMLAttributes ->(({ className, ...props }, ref) => ( - -)) -TableCell.displayName = "TableCell" - -const TableCaption = React.forwardRef< - HTMLTableCaptionElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( -
-)) -TableCaption.displayName = "TableCaption" - -export { - Table, - TableHeader, - TableBody, - TableFooter, - TableHead, - TableRow, - TableCell, - TableCaption, -} +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Table = React.forwardRef< + HTMLTableElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+ + +)) +Table.displayName = "Table" + +const TableHeader = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableHeader.displayName = "TableHeader" + +const TableBody = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableBody.displayName = "TableBody" + +const TableFooter = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + tr]:last:border-b-0", + className + )} + {...props} + /> +)) +TableFooter.displayName = "TableFooter" + +const TableRow = React.forwardRef< + HTMLTableRowElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableRow.displayName = "TableRow" + +const TableHead = React.forwardRef< + HTMLTableCellElement, + React.ThHTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +TableHead.displayName = "TableHead" + +const TableCell = React.forwardRef< + HTMLTableCellElement, + React.TdHTMLAttributes +>(({ className, ...props }, ref) => ( + +)) +TableCell.displayName = "TableCell" + +const TableCaption = React.forwardRef< + HTMLTableCaptionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +TableCaption.displayName = "TableCaption" + +export { + Table, + TableHeader, + TableBody, + TableFooter, + TableHead, + TableRow, + TableCell, + TableCaption, +} diff --git a/next-app/src/components/ui/tabs.tsx b/next-app/src/components/ui/tabs.tsx index 33dfd06..7d57dd6 100644 --- a/next-app/src/components/ui/tabs.tsx +++ b/next-app/src/components/ui/tabs.tsx @@ -1,55 +1,55 @@ -"use client" - -import * as React from "react" -import * as TabsPrimitive from "@radix-ui/react-tabs" - -import { cn } from "@/lib/utils" - -const Tabs = TabsPrimitive.Root - -const TabsList = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -TabsList.displayName = TabsPrimitive.List.displayName - -const TabsTrigger = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -TabsTrigger.displayName = TabsPrimitive.Trigger.displayName - -const TabsContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -TabsContent.displayName = TabsPrimitive.Content.displayName - -export { Tabs, TabsList, TabsTrigger, TabsContent } +"use client" + +import * as React from "react" +import * as TabsPrimitive from "@radix-ui/react-tabs" + +import { cn } from "@/lib/utils" + +const Tabs = TabsPrimitive.Root + +const TabsList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsList.displayName = TabsPrimitive.List.displayName + +const TabsTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsTrigger.displayName = TabsPrimitive.Trigger.displayName + +const TabsContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsContent.displayName = TabsPrimitive.Content.displayName + +export { Tabs, TabsList, TabsTrigger, TabsContent } diff --git a/next-app/src/components/ui/textarea.tsx b/next-app/src/components/ui/textarea.tsx index 2c30ec3..487e6c2 100644 --- a/next-app/src/components/ui/textarea.tsx +++ b/next-app/src/components/ui/textarea.tsx @@ -1,24 +1,24 @@ -import * as React from "react" - -import { cn } from "@/lib/utils" - -export interface TextareaProps - extends React.TextareaHTMLAttributes {} - -const Textarea = React.forwardRef( - ({ className, ...props }, ref) => { - return ( -