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] [32mDeployDexContracts[0m::[32mrun[0m()[33m[0m
- ├─ [2141636] [33m→ [0m[33mnew[0m DexAccessManager@0xC7f2Cf4845C6db0e1a1e91ED41Bcd0FcC1b0E141
- │ ├─ emit [36mRoleGranted[0m(roleId: 0, account: DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], delay: 0, since: 1714038168 [2;49;39m[1.714e9][0m, newMember: true)
- │ └─ [32m← [0m[32m[Return] [0m10568 bytes of code
- ├─ [892133] [33m→ [0m[33mnew[0m UserRegistry@0xdaE97900D4B184c5D2012dcdB658c008966466DD
- │ ├─ emit [36mAuthorityUpdated[0m(authority: DexAccessManager: [0xC7f2Cf4845C6db0e1a1e91ED41Bcd0FcC1b0E141])
- │ └─ [32m← [0m[32m[Return] [0m4339 bytes of code
- ├─ [0] [32mconsole[0m::[32mlog[0m("UserRegistry deployed to:", UserRegistry: [0xdaE97900D4B184c5D2012dcdB658c008966466DD])[33m [staticcall][0m
- │ └─ [32m← [0m[32m[Stop] [0m
- ├─ [0] [32mconsole[0m::[32mlog[0m("DexRegistry deployed to:", DexAccessManager: [0xC7f2Cf4845C6db0e1a1e91ED41Bcd0FcC1b0E141])[33m [staticcall][0m
- │ └─ [32m← [0m[32m[Stop] [0m
- └─ [32m← [0m[32m[Stop] [0m
-
-
-[32mScript ran successfully.[0m
-
-== 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.
-
-
-
-
Amount of Tokens
-
-
- Staked: 1.45
- Earn: 0.2345
-
-
-
-
- Stake Tokens
- Unstake Tokens
-
-
- )
+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.
+
+
+
+
Amount of Tokens
+
+
+ Staked: 1.45
+ Earn: 0.2345
+
+
+
+
+ Stake Tokens
+ Unstake Tokens
+
+
+ )
}
\ 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 }) => (
-
),
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"
- />
-
-
-
- Columns
-
-
-
- {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.
-
-
- table.previousPage()}
- disabled={!table.getCanPreviousPage()}
- >
- Previous
-
- table.nextPage()}
- disabled={!table.getCanNextPage()}
- >
- Next
-
-
-
-
- setAmountToBuy(e.target.value)}
- className="max-w-sm"
- />
- {}
- // writeContract({
- // abi,
- // address: '0x6b175474e89094c44da98b954eedeac495271d0f',
- // functionName: 'buyToken',
- // args: [
- // walletUser,
- // '0x6b175474e89094c44da98b954eedeac495271d0f',
- // 123,
- // ],
- // })
- }
- >
- Buy Our Token
-
-
-
-
- );
-}
+"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"
+ />
+
+
+
+ Columns
+
+
+
+ {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.
+
+
+ table.previousPage()}
+ disabled={!table.getCanPreviousPage()}
+ >
+ Previous
+
+ table.nextPage()}
+ disabled={!table.getCanNextPage()}
+ >
+ Next
+
+
+
+
+ setAmountToBuy(e.target.value)}
+ className="max-w-sm"
+ />
+ {}
+ // writeContract({
+ // abi,
+ // address: '0x6b175474e89094c44da98b954eedeac495271d0f',
+ // functionName: 'buyToken',
+ // args: [
+ // walletUser,
+ // '0x6b175474e89094c44da98b954eedeac495271d0f',
+ // 123,
+ // ],
+ // })
+ }
+ >
+ Buy Our Token
+
+
+
+
+ );
+}
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 (
- setCount((count) => count + 1)} className={cn('', className)}>
- Count is: {count}
-
- );
-}
+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 (
+ setCount((count) => count + 1)} className={cn('', className)}>
+ Count is: {count}
+
+ );
+}
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 (
-
-
-
-
-
- Toggle theme
-
-
-
- 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 (
+
+
+
+
+
+ Toggle theme
+
+
+
+ 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 (
-
- );
-};
-
-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 (
+
+ );
+};
+
+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 (
-
-
-
-
-
- Users
-
-
-
-
-
- Transactions
-
-
-
-
- );
-};
-
-export default Sidebar;
+"use client";
+import Link from "next/link";
+import { UsersIcon, SettingsIcon, VercelLogo } from "@/components/Icons";
+
+const Sidebar = () => {
+ return (
+
+
+
+
+
+ Users
+
+
+
+
+
+ Transactions
+
+
+
+
+ );
+};
+
+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 (
-
- );
-};
-
-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 (
+
+ );
+};
+
+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 (
-
- );
-};
-
-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 (
+
+ );
+};
+
+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 && (
-
)}
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
+
+ Create Pool
+
+
+
+
+ setLiquidityAmountA(e.target.value)}
+ />
+ setLiquidityAmountB(e.target.value)}
+ />
+
+ Add Liquidity
+
+
+
+
+ Swap
+
+
+
+
+ );
+};
+
+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.
-
-
-
-
-
TOTAL LIQUIDITY
-
$407.61m
-
-
-
-
-
-
-
-
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)}
-
- ))}
-
-
-
View All Transactions
-
-
-
-
- )
+/**
+ * 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.
+
+
+
+
+
TOTAL LIQUIDITY
+
$407.61m
+
+
+
+
+
+
+
+
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)}
+
+ ))}
+
+
+
View All Transactions
+
+
+
+
+ )
}
\ 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 (
-
- )
- }
-)
-Textarea.displayName = "Textarea"
-
-export { Textarea }
+import * as React from "react"
+
+import { cn } from "@/lib/utils"
+
+export interface TextareaProps
+ extends React.TextareaHTMLAttributes {}
+
+const Textarea = React.forwardRef(
+ ({ className, ...props }, ref) => {
+ return (
+
+ )
+ }
+)
+Textarea.displayName = "Textarea"
+
+export { Textarea }
diff --git a/next-app/src/context/Provider.tsx b/next-app/src/context/Provider.tsx
new file mode 100644
index 0000000..14572f7
--- /dev/null
+++ b/next-app/src/context/Provider.tsx
@@ -0,0 +1,22 @@
+import { BrowserProvider, JsonRpcSigner } from "ethers";
+import { useMemo } from "react";
+import type { Account, Chain, Client, Transport } from "viem";
+import { useConnectorClient, type Config } from "wagmi";
+
+export function clientToSigner(client: Client) {
+ const { account, chain, transport } = client;
+ const network = {
+ chainId: chain.id,
+ name: chain.name,
+ ensAddress: chain.contracts?.ensRegistry?.address,
+ };
+ const provider = new BrowserProvider(transport, network);
+ const signer = new JsonRpcSigner(provider, account.address);
+ return signer;
+}
+
+/** Hook to convert a viem Wallet Client to an ethers.js Signer. */
+export function useEthersSigner({ chainId }: { chainId?: number } = {}) {
+ const { data: client } = useConnectorClient({ chainId });
+ return useMemo(() => (client ? clientToSigner(client) : undefined), [client]);
+}
diff --git a/next-app/src/context/ThemeProvider.tsx b/next-app/src/context/ThemeProvider.tsx
index b0ff266..7df24a6 100644
--- a/next-app/src/context/ThemeProvider.tsx
+++ b/next-app/src/context/ThemeProvider.tsx
@@ -1,9 +1,9 @@
-"use client";
-
-import * as React from "react";
-import { ThemeProvider as NextThemesProvider } from "next-themes";
-import { type ThemeProviderProps } from "next-themes/dist/types";
-
-export function ThemeProvider({ children, ...props }: ThemeProviderProps) {
- return {children} ;
-}
+"use client";
+
+import * as React from "react";
+import { ThemeProvider as NextThemesProvider } from "next-themes";
+import { type ThemeProviderProps } from "next-themes/dist/types";
+
+export function ThemeProvider({ children, ...props }: ThemeProviderProps) {
+ return {children} ;
+}
diff --git a/next-app/src/context/index.tsx b/next-app/src/context/index.tsx
index 72e8161..e0c779d 100644
--- a/next-app/src/context/index.tsx
+++ b/next-app/src/context/index.tsx
@@ -20,36 +20,6 @@ import {
const queryClient = new QueryClient();
-// const chains = [mainnet, sepolia, polygonAmoy];
-
-export const chains = [
- {
- value: "ethereum",
- label: "Ethereum",
- chainId: 1,
- },
- {
- value: "sepolia",
- label: "Sepolia",
- chainId: 11155111,
- },
- {
- value: "polygon",
- label: "Polygon",
- chainId: 137,
- },
- {
- value: "arbitrum",
- label: "Arbitrum",
- chainId: 42161,
- },
- {
- value: "Amoy",
- label: "Amoy",
- chainId: 80002,
- },
-];
-
const projectId = process.env.NEXT_PUBLIC_PROJECT_ID;
const config = getDefaultConfig({
diff --git a/next-app/src/hook/coins.hook.ts b/next-app/src/hook/coins.hook.ts
index 77d24d2..a6e1faa 100644
--- a/next-app/src/hook/coins.hook.ts
+++ b/next-app/src/hook/coins.hook.ts
@@ -1,9 +1,9 @@
-import { apiUrl } from "@/hook/index";
-
-export async function getCoins() {
- const response = await fetch(apiUrl + "coins");
- if (!response.ok) {
- throw new Error("Network response was not ok");
- }
- return response.json();
+import { apiUrl } from "@/hook/index";
+
+export async function getCoins() {
+ const response = await fetch(apiUrl + "coins");
+ if (!response.ok) {
+ throw new Error("Network response was not ok");
+ }
+ return response.json();
}
\ No newline at end of file
diff --git a/next-app/src/hook/index.tsx b/next-app/src/hook/index.tsx
index 9bd0317..e4be0d0 100644
--- a/next-app/src/hook/index.tsx
+++ b/next-app/src/hook/index.tsx
@@ -1,6 +1,6 @@
-export const apiUrl = process.env.NEXT_PUBLIC_API_URL;
-
-export interface CreateUserRequest {
- address: string;
- name: string;
-}
+export const apiUrl = process.env.NEXT_PUBLIC_API_URL;
+
+export interface CreateUserRequest {
+ address: string;
+ name: string;
+}
diff --git a/next-app/src/hook/pools.hook.ts b/next-app/src/hook/pools.hook.ts
index dcf775c..c637d9b 100644
--- a/next-app/src/hook/pools.hook.ts
+++ b/next-app/src/hook/pools.hook.ts
@@ -1,42 +1,42 @@
-import { apiUrl } from "@/hook/index";
-
-export async function getPools() {
- const response = await fetch(apiUrl + "pools");
- if (!response.ok) {
- throw new Error("Network response was not ok");
- }
- return response.json();
-}
-
-export async function getPoolByAddress(address: string) {
- const response = await fetch(apiUrl + `pools/address/${address}`);
- if (!response.ok) {
- throw new Error("Network response was not ok");
- }
- return response.json();
-}
-
-export async function createPool(data: any): Promise {
- const response = await fetch(apiUrl + "pools", {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(data),
- });
- if (!response.ok) {
- throw new Error("Network response was not ok");
- }
- return response.json();
-}
-
-export async function deletePool(address: string) {
- const response = await fetch(apiUrl + `pools/address/${address}`, {
- method: "DELETE",
- });
- if (!response.ok) {
- throw new Error("Network response was not ok");
- }
- return response.json();
-}
-
+import { apiUrl } from "@/hook/index";
+
+export async function getPools() {
+ const response = await fetch(apiUrl + "pools");
+ if (!response.ok) {
+ throw new Error("Network response was not ok");
+ }
+ return response.json();
+}
+
+export async function getPoolByAddress(address: string) {
+ const response = await fetch(apiUrl + `pools/address/${address}`);
+ if (!response.ok) {
+ throw new Error("Network response was not ok");
+ }
+ return response.json();
+}
+
+export async function createPool(data: any): Promise {
+ const response = await fetch(apiUrl + "pools", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(data),
+ });
+ if (!response.ok) {
+ throw new Error("Network response was not ok");
+ }
+ return response.json();
+}
+
+export async function deletePool(address: string) {
+ const response = await fetch(apiUrl + `pools/address/${address}`, {
+ method: "DELETE",
+ });
+ if (!response.ok) {
+ throw new Error("Network response was not ok");
+ }
+ return response.json();
+}
+
diff --git a/next-app/src/hook/transactions.hook.ts b/next-app/src/hook/transactions.hook.ts
index 179a31e..ef722bf 100644
--- a/next-app/src/hook/transactions.hook.ts
+++ b/next-app/src/hook/transactions.hook.ts
@@ -1,10 +1,10 @@
-import { apiUrl } from "@/hook/index";
-
-export async function getTransactions() {
- const response = await fetch(apiUrl + "transactions");
- if (!response.ok) {
- throw new Error("Network response was not ok");
- }
- return response.json();
- }
+import { apiUrl } from "@/hook/index";
+
+export async function getTransactions() {
+ const response = await fetch(apiUrl + "transactions");
+ if (!response.ok) {
+ throw new Error("Network response was not ok");
+ }
+ return response.json();
+ }
\ No newline at end of file
diff --git a/next-app/src/hook/usePools.ts b/next-app/src/hook/usePools.ts
new file mode 100644
index 0000000..0d58cd0
--- /dev/null
+++ b/next-app/src/hook/usePools.ts
@@ -0,0 +1,21 @@
+import { liquidityFactoryAddress } from "@/abi/address";
+import { liquidityPoolFactoryABI } from "@/abi/liquidityPoolFactory";
+import { useReadContract } from 'wagmi';
+
+export function usePools() {
+
+ const { data: allPoolsLength } = useReadContract({
+ address: liquidityFactoryAddress,
+ abi: liquidityPoolFactoryABI,
+ functionName: 'allPoolsLength',
+ });
+
+
+ const { data: allPoolsAddress } = useReadContract({
+ address: liquidityFactoryAddress,
+ abi: liquidityPoolFactoryABI,
+ functionName: 'allPoolsAddress',
+ })
+
+ return {allPoolsAddress, allPoolsLength};
+}
diff --git a/next-app/src/hook/users.hook.ts b/next-app/src/hook/users.hook.ts
index 9c81ee1..e61bfc3 100644
--- a/next-app/src/hook/users.hook.ts
+++ b/next-app/src/hook/users.hook.ts
@@ -1,40 +1,40 @@
-import { CreateUserRequest, apiUrl } from "@/hook/index";
-
-export async function getUsers() {
- const response = await fetch(apiUrl + "users");
- if (!response.ok) {
- throw new Error("Network response was not ok");
- }
- return response.json();
- }
-
- export async function getUserByAdress(address: string) {
- const response = await fetch(apiUrl + `users/address/${address}`);
- if (!response.ok) {
- throw new Error("Network response was not ok");
- }
- return response.json();
- }
-
- export async function createUser(data: CreateUserRequest): Promise {
- const response = await fetch(apiUrl + "users", {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(data),
- });
- if (!response.ok) {
- throw new Error("Network response was not ok");
- }
- return response.json();
- }
-
- export async function getTransactions() {
- const response = await fetch(apiUrl + "transactions");
- if (!response.ok) {
- throw new Error("Network response was not ok");
- }
- return response.json();
- }
+import { CreateUserRequest, apiUrl } from "@/hook/index";
+
+export async function getUsers() {
+ const response = await fetch(apiUrl + "users");
+ if (!response.ok) {
+ throw new Error("Network response was not ok");
+ }
+ return response.json();
+ }
+
+ export async function getUserByAdress(address: string) {
+ const response = await fetch(apiUrl + `users/address/${address}`);
+ if (!response.ok) {
+ throw new Error("Network response was not ok");
+ }
+ return response.json();
+ }
+
+ export async function createUser(data: CreateUserRequest): Promise {
+ const response = await fetch(apiUrl + "users", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(data),
+ });
+ if (!response.ok) {
+ throw new Error("Network response was not ok");
+ }
+ return response.json();
+ }
+
+ export async function getTransactions() {
+ const response = await fetch(apiUrl + "transactions");
+ if (!response.ok) {
+ throw new Error("Network response was not ok");
+ }
+ return response.json();
+ }
\ No newline at end of file
diff --git a/next-app/src/lib/price.ts b/next-app/src/lib/price.ts
index bc310c0..72bc77d 100644
--- a/next-app/src/lib/price.ts
+++ b/next-app/src/lib/price.ts
@@ -1,11 +1,11 @@
-// Transform price to string with k suffix if greater than 1000 or m suffix if greater than 1000000
-
-export function formatPrice(price: number): string {
- if (price > 1000000) {
- return `${(price / 1000000).toFixed(2)}m`;
- }
- if (price > 1000) {
- return `${(price / 1000).toFixed(2)}k`;
- }
- return price.toFixed(2);
+// Transform price to string with k suffix if greater than 1000 or m suffix if greater than 1000000
+
+export function formatPrice(price: number): string {
+ if (price > 1000000) {
+ return `${(price / 1000000).toFixed(2)}m`;
+ }
+ if (price > 1000) {
+ return `${(price / 1000).toFixed(2)}k`;
+ }
+ return price.toFixed(2);
}
\ No newline at end of file
diff --git a/next-app/src/lib/react-query.ts b/next-app/src/lib/react-query.ts
index 0bb09fa..9e6dd8b 100644
--- a/next-app/src/lib/react-query.ts
+++ b/next-app/src/lib/react-query.ts
@@ -1,9 +1,9 @@
-import { QueryClient } from "@tanstack/react-query";
-
-export const queryClient = new QueryClient({
- defaultOptions: {
- queries: {
- refetchOnWindowFocus: false,
- },
- },
-});
+import { QueryClient } from "@tanstack/react-query";
+
+export const queryClient = new QueryClient({
+ defaultOptions: {
+ queries: {
+ refetchOnWindowFocus: false,
+ },
+ },
+});
diff --git a/next-app/src/lib/utils.ts b/next-app/src/lib/utils.ts
index ec79801..7141054 100644
--- a/next-app/src/lib/utils.ts
+++ b/next-app/src/lib/utils.ts
@@ -1,6 +1,6 @@
-import { type ClassValue, clsx } from "clsx"
-import { twMerge } from "tailwind-merge"
-
-export function cn(...inputs: ClassValue[]) {
- return twMerge(clsx(inputs))
-}
+import { type ClassValue, clsx } from "clsx"
+import { twMerge } from "tailwind-merge"
+
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs))
+}
diff --git a/next-app/src/types/header.type.ts b/next-app/src/types/header.type.ts
index 3d455c8..3b7c04e 100644
--- a/next-app/src/types/header.type.ts
+++ b/next-app/src/types/header.type.ts
@@ -1,5 +1,5 @@
-export type NavLink = {
- name: string;
- href: string;
- };
+export type NavLink = {
+ name: string;
+ href: string;
+ };
\ No newline at end of file
diff --git a/next-app/src/types/hookResponse.type.ts b/next-app/src/types/hookResponse.type.ts
index 90c610c..514c4c5 100644
--- a/next-app/src/types/hookResponse.type.ts
+++ b/next-app/src/types/hookResponse.type.ts
@@ -1,26 +1,26 @@
-export type Hook = {
- data: T;
- error: Error | null;
- isError: boolean;
-};
-
-export type BaseResponse = {
- id: number;
- created_at: string;
- updated_at: string;
-};
-
-
-export interface User extends BaseResponse {
- name: string;
- address: string;
- created_at: string;
- updated_at: string;
-};
-
-export interface Transaction extends BaseResponse {
- from: string;
- to: string;
- amount: number;
- transaction: string;
+export type Hook = {
+ data: T;
+ error: Error | null;
+ isError: boolean;
+};
+
+export type BaseResponse = {
+ id: number;
+ created_at: string;
+ updated_at: string;
+};
+
+
+export interface User extends BaseResponse {
+ name: string;
+ address: string;
+ created_at: string;
+ updated_at: string;
+};
+
+export interface Transaction extends BaseResponse {
+ from: string;
+ to: string;
+ amount: number;
+ transaction: string;
}
\ No newline at end of file
diff --git a/next-app/src/types/user.type.ts b/next-app/src/types/user.type.ts
index 187dd92..a8c7fae 100644
--- a/next-app/src/types/user.type.ts
+++ b/next-app/src/types/user.type.ts
@@ -1,7 +1,7 @@
-import { BaseResponse } from "./hookResponse.type";
-
-export interface User extends BaseResponse {
- id: number;
- name: string;
- address: string;
+import { BaseResponse } from "./hookResponse.type";
+
+export interface User extends BaseResponse {
+ id: number;
+ name: string;
+ address: string;
};
\ No newline at end of file
diff --git a/next-app/tailwind.config.ts b/next-app/tailwind.config.ts
index 84287e8..5bc7958 100644
--- a/next-app/tailwind.config.ts
+++ b/next-app/tailwind.config.ts
@@ -1,80 +1,80 @@
-import type { Config } from "tailwindcss"
-
-const config = {
- darkMode: ["class"],
- content: [
- './pages/**/*.{ts,tsx}',
- './components/**/*.{ts,tsx}',
- './app/**/*.{ts,tsx}',
- './src/**/*.{ts,tsx}',
- ],
- prefix: "",
- theme: {
- container: {
- center: true,
- padding: "2rem",
- screens: {
- "2xl": "1400px",
- },
- },
- extend: {
- colors: {
- border: "hsl(var(--border))",
- input: "hsl(var(--input))",
- ring: "hsl(var(--ring))",
- background: "hsl(var(--background))",
- foreground: "hsl(var(--foreground))",
- primary: {
- DEFAULT: "hsl(var(--primary))",
- foreground: "hsl(var(--primary-foreground))",
- },
- secondary: {
- DEFAULT: "hsl(var(--secondary))",
- foreground: "hsl(var(--secondary-foreground))",
- },
- destructive: {
- DEFAULT: "hsl(var(--destructive))",
- foreground: "hsl(var(--destructive-foreground))",
- },
- muted: {
- DEFAULT: "hsl(var(--muted))",
- foreground: "hsl(var(--muted-foreground))",
- },
- accent: {
- DEFAULT: "hsl(var(--accent))",
- foreground: "hsl(var(--accent-foreground))",
- },
- popover: {
- DEFAULT: "hsl(var(--popover))",
- foreground: "hsl(var(--popover-foreground))",
- },
- card: {
- DEFAULT: "hsl(var(--card))",
- foreground: "hsl(var(--card-foreground))",
- },
- },
- borderRadius: {
- lg: "var(--radius)",
- md: "calc(var(--radius) - 2px)",
- sm: "calc(var(--radius) - 4px)",
- },
- keyframes: {
- "accordion-down": {
- from: { height: "0" },
- to: { height: "var(--radix-accordion-content-height)" },
- },
- "accordion-up": {
- from: { height: "var(--radix-accordion-content-height)" },
- to: { height: "0" },
- },
- },
- animation: {
- "accordion-down": "accordion-down 0.2s ease-out",
- "accordion-up": "accordion-up 0.2s ease-out",
- },
- },
- },
- plugins: [require("tailwindcss-animate")],
-} satisfies Config
-
+import type { Config } from "tailwindcss"
+
+const config = {
+ darkMode: ["class"],
+ content: [
+ './pages/**/*.{ts,tsx}',
+ './components/**/*.{ts,tsx}',
+ './app/**/*.{ts,tsx}',
+ './src/**/*.{ts,tsx}',
+ ],
+ prefix: "",
+ theme: {
+ container: {
+ center: true,
+ padding: "2rem",
+ screens: {
+ "2xl": "1400px",
+ },
+ },
+ extend: {
+ colors: {
+ border: "hsl(var(--border))",
+ input: "hsl(var(--input))",
+ ring: "hsl(var(--ring))",
+ background: "hsl(var(--background))",
+ foreground: "hsl(var(--foreground))",
+ primary: {
+ DEFAULT: "hsl(var(--primary))",
+ foreground: "hsl(var(--primary-foreground))",
+ },
+ secondary: {
+ DEFAULT: "hsl(var(--secondary))",
+ foreground: "hsl(var(--secondary-foreground))",
+ },
+ destructive: {
+ DEFAULT: "hsl(var(--destructive))",
+ foreground: "hsl(var(--destructive-foreground))",
+ },
+ muted: {
+ DEFAULT: "hsl(var(--muted))",
+ foreground: "hsl(var(--muted-foreground))",
+ },
+ accent: {
+ DEFAULT: "hsl(var(--accent))",
+ foreground: "hsl(var(--accent-foreground))",
+ },
+ popover: {
+ DEFAULT: "hsl(var(--popover))",
+ foreground: "hsl(var(--popover-foreground))",
+ },
+ card: {
+ DEFAULT: "hsl(var(--card))",
+ foreground: "hsl(var(--card-foreground))",
+ },
+ },
+ borderRadius: {
+ lg: "var(--radius)",
+ md: "calc(var(--radius) - 2px)",
+ sm: "calc(var(--radius) - 4px)",
+ },
+ keyframes: {
+ "accordion-down": {
+ from: { height: "0" },
+ to: { height: "var(--radix-accordion-content-height)" },
+ },
+ "accordion-up": {
+ from: { height: "var(--radix-accordion-content-height)" },
+ to: { height: "0" },
+ },
+ },
+ animation: {
+ "accordion-down": "accordion-down 0.2s ease-out",
+ "accordion-up": "accordion-up 0.2s ease-out",
+ },
+ },
+ },
+ plugins: [require("tailwindcss-animate")],
+} satisfies Config
+
export default config
\ No newline at end of file
diff --git a/next-app/tsconfig.json b/next-app/tsconfig.json
index 56e0fa9..477ce34 100644
--- a/next-app/tsconfig.json
+++ b/next-app/tsconfig.json
@@ -1,26 +1,26 @@
-{
- "compilerOptions": {
- "lib": ["dom", "dom.iterable", "esnext"],
- "allowJs": true,
- "skipLibCheck": true,
- "strict": true,
- "noEmit": true,
- "esModuleInterop": true,
- "module": "esnext",
- "moduleResolution": "bundler",
- "resolveJsonModule": true,
- "isolatedModules": true,
- "jsx": "preserve",
- "incremental": true,
- "plugins": [
- {
- "name": "next"
- }
- ],
- "paths": {
- "@/*": ["./src/*"]
- }
- },
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
- "exclude": ["node_modules"]
+{
+ "compilerOptions": {
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve",
+ "incremental": true,
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ],
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ },
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
+ "exclude": ["node_modules"]
}
\ No newline at end of file