UNPKG

@ensuro/swaplibrary

Version:

Solidity Library that implements swap using different plaforms with a homogeneneous interface

538 lines 26.9 kB
{ "_format": "hh3-artifact-1", "contractName": "P2PSwapRouter", "sourceName": "contracts/P2PSwapRouter.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "onBehalfOf_", "type": "address" }, { "internalType": "address", "name": "swapper_", "type": "address" }, { "internalType": "address", "name": "pricer_", "type": "address" }, { "components": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "address", "name": "tokenOut", "type": "address" }, { "internalType": "uint256", "name": "price", "type": "uint256" } ], "internalType": "struct P2PSwapRouter.Price[]", "name": "initialPrices", "type": "tuple[]" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AmountCannotBeZero", "type": "error" }, { "inputs": [], "name": "DeadlineInThePast", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "amountInMaximum", "type": "uint256" } ], "name": "InputAmountExceedsSlippage", "type": "error" }, { "inputs": [], "name": "NotImplemented", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" } ], "name": "OnlyPricerCanChangePrice", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" } ], "name": "OnlySwapperCanSwap", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "amountOutMinimum", "type": "uint256" } ], "name": "OutputAmountLessThanSlippage", "type": "error" }, { "inputs": [], "name": "RecipientCannotBeZero", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [], "name": "TokenCannotBeZero", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "tokenIn", "type": "address" }, { "indexed": true, "internalType": "address", "name": "tokenOut", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "price", "type": "uint256" } ], "name": "PriceUpdated", "type": "event" }, { "inputs": [ { "components": [ { "internalType": "bytes", "name": "path", "type": "bytes" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "amountOutMinimum", "type": "uint256" } ], "internalType": "struct ISwapRouter.ExactInputParams", "name": "", "type": "tuple" } ], "name": "exactInput", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "address", "name": "tokenOut", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "amountOutMinimum", "type": "uint256" }, { "internalType": "uint160", "name": "sqrtPriceLimitX96", "type": "uint160" } ], "internalType": "struct ISwapRouter.ExactInputSingleParams", "name": "params", "type": "tuple" } ], "name": "exactInputSingle", "outputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes", "name": "path", "type": "bytes" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "amountInMaximum", "type": "uint256" } ], "internalType": "struct ISwapRouter.ExactOutputParams", "name": "", "type": "tuple" } ], "name": "exactOutput", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "address", "name": "tokenOut", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "amountInMaximum", "type": "uint256" }, { "internalType": "uint160", "name": "sqrtPriceLimitX96", "type": "uint160" } ], "internalType": "struct ISwapRouter.ExactOutputSingleParams", "name": "params", "type": "tuple" } ], "name": "exactOutputSingle", "outputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "address", "name": "tokenOut", "type": "address" } ], "name": "getCurrentPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "onBehalfOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pricer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "address", "name": "tokenOut", "type": "address" }, { "internalType": "uint256", "name": "price_", "type": "uint256" } ], "name": "setCurrentPrice", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "swapper", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "int256", "name": "", "type": "int256" }, { "internalType": "int256", "name": "", "type": "int256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "uniswapV3SwapCallback", "outputs": [], "stateMutability": "pure", "type": "function" } ], "bytecode": "0x60e060405234801561000f575f5ffd5b5060405161104738038061104783398101604081905261002e916101d1565b6001600160a01b0380841660a05282811660c05284166080525f5b8151811015610094575f828281518110610065576100656102ec565b6020026020010151905061008b815f01518260200151836040015161009e60201b60201c565b50600101610049565b5050505050610300565b6001600160a01b0383166100c55760405163165a825360e21b815260040160405180910390fd5b6001600160a01b0382166100ec5760405163165a825360e21b815260040160405180910390fd5b6001600160a01b038381165f818152602081815260408083209487168084529482529182902085905590518481527fb71c154260e8508e211e2ace194becba2c6d7e727c3ed292fe4787458969cd10910160405180910390a3505050565b80516001600160a01b0381168114610160575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561019b5761019b610165565b60405290565b604051601f8201601f191681016001600160401b03811182821017156101c9576101c9610165565b604052919050565b5f5f5f5f608085870312156101e4575f5ffd5b6101ed8561014a565b93506101fb6020860161014a565b92506102096040860161014a565b60608601519092506001600160401b03811115610224575f5ffd5b8501601f81018713610234575f5ffd5b80516001600160401b0381111561024d5761024d610165565b61025c60208260051b016101a1565b8082825260208201915060206060840285010192508983111561027d575f5ffd5b6020840193505b828410156102de576060848b03121561029b575f5ffd5b6102a3610179565b6102ac8561014a565b81526102ba6020860161014a565b60208201526040850151604082015280835250602082019150606084019350610284565b969995985093965050505050565b634e487b7160e01b5f52603260045260245ffd5b60805160a05160c051610cf56103525f395f8181610169015261081601525f818160f4015261065901525f818160a40152818161036e015281816103b5015281816105bf01526105f10152610cf55ff3fe60806040526004361061008f575f3560e01c8063c04b8d5911610057578063c04b8d591461018b578063db16a5551461019e578063db3e2198146101bd578063f28c04981461018b578063fa461e33146101d0575f5ffd5b80631dc3af35146100935780632b3297f9146100e3578063414bf389146101165780634562e01514610137578063a6138ed914610158575b5f5ffd5b34801561009e575f5ffd5b506100c67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ee575f5ffd5b506100c67f000000000000000000000000000000000000000000000000000000000000000081565b6101296101243660046109b8565b6101ef565b6040519081526020016100da565b348015610142575f5ffd5b506101566101513660046109ee565b6103fb565b005b348015610163575f5ffd5b506100c67f000000000000000000000000000000000000000000000000000000000000000081565b610129610199366004610a37565b610413565b3480156101a9575f5ffd5b506101296101b8366004610a71565b61042d565b6101296101cb3660046109b8565b610457565b3480156101db575f5ffd5b506101566101ea366004610aa2565b610635565b5f6101f861064e565b5f6102096080840160608501610b1e565b6001600160a01b03160361022f5760405162e18e7f60e71b815260040160405180910390fd5b4282608001351015610257576040516001623859e760e21b0319815260040160405180910390fd5b5f8260a001351161027b5760405163d11b25af60e01b815260040160405180910390fd5b5f61030f670de0b6b3a764000082806102976020880188610b1e565b6001600160a01b03166001600160a01b031681526020019081526020015f205f8660200160208101906102ca9190610b1e565b6001600160a01b031681526020808201929092526040015f2054906102fa906102f590880188610b1e565b6106a7565b6103089060a0880135610b4b565b919061071e565b90506103246102f56040850160208601610b1e565b61032e9082610b76565b91508160c0840135808210156103655760405163296ba6e160e01b8152600481019290925260248201526044015b60405180910390fd5b506103b09050337f000000000000000000000000000000000000000000000000000000000000000060a086013561039f6020880188610b1e565b6001600160a01b03169291906107cf565b6103f57f00000000000000000000000000000000000000000000000000000000000000006103e46080860160608701610b1e565b8461039f6040880160208901610b1e565b50919050565b61040361080b565b61040e838383610861565b505050565b5f60405163d623472560e01b815260040160405180910390fd5b6001600160a01b038083165f90815260208181526040808320938516835292905220545b92915050565b5f61046061064e565b5f6104716080840160608501610b1e565b6001600160a01b0316036104975760405162e18e7f60e71b815260040160405180910390fd5b42826080013510156104bf576040516001623859e760e21b0319815260040160405180910390fd5b5f8260a00135116104e35760405163d11b25af60e01b815260040160405180910390fd5b5f61056881806104f66020870187610b1e565b6001600160a01b03166001600160a01b031681526020019081526020015f205f8560200160208101906105299190610b1e565b6001600160a01b03166001600160a01b031681526020019081526020015f2054670de0b6b3a76400006102fa8660200160208101906102f59190610b1e565b905061057a6102f56020850185610b1e565b6105849082610b76565b91508160c0840135808211156105b657604051639a06025d60e01b81526004810192909252602482015260440161035c565b506105ec9050337f00000000000000000000000000000000000000000000000000000000000000008461039f6020880188610b1e565b6103f57f00000000000000000000000000000000000000000000000000000000000000006106206080860160608701610b1e565b60a086013561039f6040880160208901610b1e565b60405163d623472560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681146106a45760405163275b1d0960e21b81526001600160a01b03909116600482015260240161035c565b50565b5f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106e4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107089190610b95565b610713906012610bb5565b61045190600a610cb1565b5f5f5f61072b868661090d565b91509150815f0361074f5783818161074557610745610b62565b04925050506107c8565b818411610766576107666003851502601118610929565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150505b9392505050565b6107dd84848484600161093a565b61080557604051635274afe760e01b81526001600160a01b038516600482015260240161035c565b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681146106a45760405163f30e2dd160e01b81526001600160a01b03909116600482015260240161035c565b6001600160a01b0383166108885760405163165a825360e21b815260040160405180910390fd5b6001600160a01b0382166108af5760405163165a825360e21b815260040160405180910390fd5b6001600160a01b038381165f818152602081815260408083209487168084529482529182902085905590518481527fb71c154260e8508e211e2ace194becba2c6d7e727c3ed292fe4787458969cd10910160405180910390a3505050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661099657838315161561098a573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f61010082840312156103f5575f5ffd5b5f61010082840312156109c9575f5ffd5b6107c883836109a7565b80356001600160a01b03811681146109e9575f5ffd5b919050565b5f5f5f60608486031215610a00575f5ffd5b610a09846109d3565b9250610a17602085016109d3565b9150604084013590509250925092565b5f60a082840312156103f5575f5ffd5b5f60208284031215610a47575f5ffd5b813567ffffffffffffffff811115610a5d575f5ffd5b610a6984828501610a27565b949350505050565b5f5f60408385031215610a82575f5ffd5b610a8b836109d3565b9150610a99602084016109d3565b90509250929050565b5f5f5f5f60608587031215610ab5575f5ffd5b8435935060208501359250604085013567ffffffffffffffff811115610ad9575f5ffd5b8501601f81018713610ae9575f5ffd5b803567ffffffffffffffff811115610aff575f5ffd5b876020828401011115610b10575f5ffd5b949793965060200194505050565b5f60208284031215610b2e575f5ffd5b6107c8826109d3565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761045157610451610b37565b634e487b7160e01b5f52601260045260245ffd5b5f82610b9057634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610ba5575f5ffd5b815160ff811681146107c8575f5ffd5b60ff828116828216039081111561045157610451610b37565b6001815b6001841115610c0957808504811115610bed57610bed610b37565b6001841615610bfb57908102905b60019390931c928002610bd2565b935093915050565b5f82610c1f57506001610451565b81610c2b57505f610451565b8160018114610c415760028114610c4b57610c67565b6001915050610451565b60ff841115610c5c57610c5c610b37565b50506001821b610451565b5060208310610133831016604e8410600b8410161715610c8a575081810a610451565b610c965f198484610bce565b805f1904821115610ca957610ca9610b37565b029392505050565b5f6107c860ff841683610c1156fea264697066735822122097a97471a893b688c2faa3e4b8cc1af2fad37d0aeae2a2d250b91d9b0f5afd3d64736f6c63430008230033", "deployedBytecode": "0x60806040526004361061008f575f3560e01c8063c04b8d5911610057578063c04b8d591461018b578063db16a5551461019e578063db3e2198146101bd578063f28c04981461018b578063fa461e33146101d0575f5ffd5b80631dc3af35146100935780632b3297f9146100e3578063414bf389146101165780634562e01514610137578063a6138ed914610158575b5f5ffd5b34801561009e575f5ffd5b506100c67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ee575f5ffd5b506100c67f000000000000000000000000000000000000000000000000000000000000000081565b6101296101243660046109b8565b6101ef565b6040519081526020016100da565b348015610142575f5ffd5b506101566101513660046109ee565b6103fb565b005b348015610163575f5ffd5b506100c67f000000000000000000000000000000000000000000000000000000000000000081565b610129610199366004610a37565b610413565b3480156101a9575f5ffd5b506101296101b8366004610a71565b61042d565b6101296101cb3660046109b8565b610457565b3480156101db575f5ffd5b506101566101ea366004610aa2565b610635565b5f6101f861064e565b5f6102096080840160608501610b1e565b6001600160a01b03160361022f5760405162e18e7f60e71b815260040160405180910390fd5b4282608001351015610257576040516001623859e760e21b0319815260040160405180910390fd5b5f8260a001351161027b5760405163d11b25af60e01b815260040160405180910390fd5b5f61030f670de0b6b3a764000082806102976020880188610b1e565b6001600160a01b03166001600160a01b031681526020019081526020015f205f8660200160208101906102ca9190610b1e565b6001600160a01b031681526020808201929092526040015f2054906102fa906102f590880188610b1e565b6106a7565b6103089060a0880135610b4b565b919061071e565b90506103246102f56040850160208601610b1e565b61032e9082610b76565b91508160c0840135808210156103655760405163296ba6e160e01b8152600481019290925260248201526044015b60405180910390fd5b506103b09050337f000000000000000000000000000000000000000000000000000000000000000060a086013561039f6020880188610b1e565b6001600160a01b03169291906107cf565b6103f57f00000000000000000000000000000000000000000000000000000000000000006103e46080860160608701610b1e565b8461039f6040880160208901610b1e565b50919050565b61040361080b565b61040e838383610861565b505050565b5f60405163d623472560e01b815260040160405180910390fd5b6001600160a01b038083165f90815260208181526040808320938516835292905220545b92915050565b5f61046061064e565b5f6104716080840160608501610b1e565b6001600160a01b0316036104975760405162e18e7f60e71b815260040160405180910390fd5b42826080013510156104bf576040516001623859e760e21b0319815260040160405180910390fd5b5f8260a00135116104e35760405163d11b25af60e01b815260040160405180910390fd5b5f61056881806104f66020870187610b1e565b6001600160a01b03166001600160a01b031681526020019081526020015f205f8560200160208101906105299190610b1e565b6001600160a01b03166001600160a01b031681526020019081526020015f2054670de0b6b3a76400006102fa8660200160208101906102f59190610b1e565b905061057a6102f56020850185610b1e565b6105849082610b76565b91508160c0840135808211156105b657604051639a06025d60e01b81526004810192909252602482015260440161035c565b506105ec9050337f00000000000000000000000000000000000000000000000000000000000000008461039f6020880188610b1e565b6103f57f00000000000000000000000000000000000000000000000000000000000000006106206080860160608701610b1e565b60a086013561039f6040880160208901610b1e565b60405163d623472560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681146106a45760405163275b1d0960e21b81526001600160a01b03909116600482015260240161035c565b50565b5f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106e4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107089190610b95565b610713906012610bb5565b61045190600a610cb1565b5f5f5f61072b868661090d565b91509150815f0361074f5783818161074557610745610b62565b04925050506107c8565b818411610766576107666003851502601118610929565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150505b9392505050565b6107dd84848484600161093a565b61080557604051635274afe760e01b81526001600160a01b038516600482015260240161035c565b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681146106a45760405163f30e2dd160e01b81526001600160a01b03909116600482015260240161035c565b6001600160a01b0383166108885760405163165a825360e21b815260040160405180910390fd5b6001600160a01b0382166108af5760405163165a825360e21b815260040160405180910390fd5b6001600160a01b038381165f818152602081815260408083209487168084529482529182902085905590518481527fb71c154260e8508e211e2ace194becba2c6d7e727c3ed292fe4787458969cd10910160405180910390a3505050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b6040516323b872dd60e01b5f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661099657838315161561098a573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b5f61010082840312156103f5575f5ffd5b5f61010082840312156109c9575f5ffd5b6107c883836109a7565b80356001600160a01b03811681146109e9575f5ffd5b919050565b5f5f5f60608486031215610a00575f5ffd5b610a09846109d3565b9250610a17602085016109d3565b9150604084013590509250925092565b5f60a082840312156103f5575f5ffd5b5f60208284031215610a47575f5ffd5b813567ffffffffffffffff811115610a5d575f5ffd5b610a6984828501610a27565b949350505050565b5f5f60408385031215610a82575f5ffd5b610a8b836109d3565b9150610a99602084016109d3565b90509250929050565b5f5f5f5f60608587031215610ab5575f5ffd5b8435935060208501359250604085013567ffffffffffffffff811115610ad9575f5ffd5b8501601f81018713610ae9575f5ffd5b803567ffffffffffffffff811115610aff575f5ffd5b876020828401011115610b10575f5ffd5b949793965060200194505050565b5f60208284031215610b2e575f5ffd5b6107c8826109d3565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761045157610451610b37565b634e487b7160e01b5f52601260045260245ffd5b5f82610b9057634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610ba5575f5ffd5b815160ff811681146107c8575f5ffd5b60ff828116828216039081111561045157610451610b37565b6001815b6001841115610c0957808504811115610bed57610bed610b37565b6001841615610bfb57908102905b60019390931c928002610bd2565b935093915050565b5f82610c1f57506001610451565b81610c2b57505f610451565b8160018114610c415760028114610c4b57610c67565b6001915050610451565b60ff841115610c5c57610c5c610b37565b50506001821b610451565b5060208310610133831016604e8410600b8410161715610c8a575081810a610451565b610c965f198484610bce565b805f1904821115610ca957610ca9610b37565b029392505050565b5f6107c860ff841683610c1156fea264697066735822122097a97471a893b688c2faa3e4b8cc1af2fad37d0aeae2a2d250b91d9b0f5afd3d64736f6c63430008230033", "linkReferences": {}, "deployedLinkReferences": {}, "immutableReferences": { "5882": [ { "length": 32, "start": 164 }, { "length": 32, "start": 878 }, { "length": 32, "start": 949 }, { "length": 32, "start": 1471 }, { "length": 32, "start": 1521 } ], "5884": [ { "length": 32, "start": 244 }, { "length": 32, "start": 1625 } ], "5886": [ { "length": 32, "start": 361 }, { "length": 32, "start": 2070 } ] }, "inputSourceName": "project/contracts/P2PSwapRouter.sol", "buildInfoId": "solc-0_8_35-3c6720e352a8805a57f3d5d8111ba91dcd52bec9" }