UNPKG

@ensuro/swaplibrary

Version:

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

415 lines (414 loc) 22.7 kB
{ "_format": "hh-sol-artifact-1", "contractName": "SwapRouterMock", "sourceName": "contracts/mocks/SwapRouterMock.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "admin", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AdminCannotBeZero", "type": "error" }, { "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": [ { "internalType": "uint256", "name": "available", "type": "uint256" }, { "internalType": "uint256", "name": "required", "type": "uint256" } ], "name": "NotEnoughBalance", "type": "error" }, { "inputs": [], "name": "NotImplemented", "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": false, "internalType": "address", "name": "tokenIn", "type": "address" }, { "indexed": false, "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" }, { "internalType": "uint256", "name": "price_", "type": "uint256" } ], "name": "setCurrentPrice", "outputs": [], "stateMutability": "nonpayable", "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" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x6080604052348015600f57600080fd5b50604051610d27380380610d27833981016040819052602c916057565b6001600160a01b038116605257604051636b35b1b760e01b815260040160405180910390fd5b506085565b600060208284031215606857600080fd5b81516001600160a01b0381168114607e57600080fd5b9392505050565b610c93806100946000396000f3fe6080604052600436106100705760003560e01c8063db3e21981161004e578063db3e2198146100cf578063f28c0498146100bc578063f3fef3a3146100e2578063fa461e331461010257600080fd5b8063414bf389146100755780634562e0151461009a578063c04b8d59146100bc575b600080fd5b610088610083366004610920565b610122565b60405190815260200160405180910390f35b3480156100a657600080fd5b506100ba6100b5366004610959565b6102fb565b005b6100886100ca3660046109a8565b6103b6565b6100886100dd366004610920565b6103d1565b3480156100ee57600080fd5b506100ba6100fd3660046109e5565b610632565b34801561010e57600080fd5b506100ba61011d366004610a0f565b610692565b6000806101356080840160608501610a92565b6001600160a01b03160361015b5760405162e18e7f60e71b815260040160405180910390fd5b4282608001351015610183576040516001623859e760e21b0319815260040160405180910390fd5b60008260a00135116101a85760405163d11b25af60e01b815260040160405180910390fd5b6000610240670de0b6b3a764000082806101c56020880188610a92565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008660200160208101906101fa9190610a92565b6001600160a01b03168152602080820192909252604001600020549061022b9061022690880188610a92565b6106ab565b6102399060a0880135610ac3565b919061072b565b90506102556102266040850160208601610a92565b61025f9082610af0565b91508160c0840135808210156102965760405163296ba6e160e01b8152600481019290925260248201526044015b60405180910390fd5b506102c19050333060a08601356102b06020880188610a92565b6001600160a01b03169291906107e7565b6102f56102d46080850160608601610a92565b836102e56040870160208801610a92565b6001600160a01b03169190610854565b50919050565b6001600160a01b0383166103225760405163165a825360e21b815260040160405180910390fd5b6001600160a01b0382166103495760405163165a825360e21b815260040160405180910390fd5b6001600160a01b038381166000818152602081815260408083209487168084529482529182902085905581519283528201929092529081018290527fb71c154260e8508e211e2ace194becba2c6d7e727c3ed292fe4787458969cd109060600160405180910390a1505050565b600060405163d623472560e01b815260040160405180910390fd5b6000806103e46080840160608501610a92565b6001600160a01b03160361040a5760405162e18e7f60e71b815260040160405180910390fd5b4282608001351015610432576040516001623859e760e21b0319815260040160405180910390fd5b60008260a00135116104575760405163d11b25af60e01b815260040160405180910390fd5b60006104696040840160208501610a92565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156104af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d39190610b12565b90508060a08401358082101561050557604051634787a10360e11b81526004810192909252602482015260440161028d565b506000905061059f818061051c6020880188610a92565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008660200160208101906105519190610a92565b6001600160a01b03166001600160a01b0316815260200190815260200160002054670de0b6b3a76400006105918760200160208101906102269190610a92565b6102399060a0890135610ac3565b90506105b16102266020860186610a92565b6105bb9082610af0565b92508260c0850135808211156105ed57604051639a06025d60e01b81526004810192909252602482015260440161028d565b5061060390503330856102b06020890189610a92565b61062b6106166080860160608701610a92565b60a08601356102e56040880160208901610a92565b5050919050565b6001600160a01b0382166106595760405163165a825360e21b815260040160405180910390fd5b6000811161067a5760405163165a825360e21b815260040160405180910390fd5b61068e6001600160a01b0383163383610854565b5050565b60405163d623472560e01b815260040160405180910390fd5b6000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190610b2b565b61071a906012610b4e565b61072590600a610c4e565b92915050565b60008383028160001985870982811083820303915050806000036107625783828161075857610758610ada565b04925050506107e0565b80841161077957610779600385150260111861088a565b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b6040516001600160a01b03848116602483015283811660448301526064820183905261084e9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061089c565b50505050565b6040516001600160a01b0383811660248301526044820183905261088591859182169063a9059cbb9060640161081c565b505050565b634e487b71600052806020526024601cfd5b600080602060008451602086016000885af1806108bf576040513d6000823e3d81fd5b50506000513d915081156108d75780600114156108e4565b6001600160a01b0384163b155b1561084e57604051635274afe760e01b81526001600160a01b038516600482015260240161028d565b600061010082840312156102f557600080fd5b6000610100828403121561093357600080fd5b6107e0838361090d565b80356001600160a01b038116811461095457600080fd5b919050565b60008060006060848603121561096e57600080fd5b6109778461093d565b92506109856020850161093d565b929592945050506040919091013590565b600060a082840312156102f557600080fd5b6000602082840312156109ba57600080fd5b813567ffffffffffffffff8111156109d157600080fd5b6109dd84828501610996565b949350505050565b600080604083850312156109f857600080fd5b610a018361093d565b946020939093013593505050565b60008060008060608587031215610a2557600080fd5b8435935060208501359250604085013567ffffffffffffffff811115610a4a57600080fd5b8501601f81018713610a5b57600080fd5b803567ffffffffffffffff811115610a7257600080fd5b876020828401011115610a8457600080fd5b949793965060200194505050565b600060208284031215610aa457600080fd5b6107e08261093d565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761072557610725610aad565b634e487b7160e01b600052601260045260246000fd5b600082610b0d57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215610b2457600080fd5b5051919050565b600060208284031215610b3d57600080fd5b815160ff811681146107e057600080fd5b60ff828116828216039081111561072557610725610aad565b6001815b6001841115610ba257808504811115610b8657610b86610aad565b6001841615610b9457908102905b60019390931c928002610b6b565b935093915050565b600082610bb957506001610725565b81610bc657506000610725565b8160018114610bdc5760028114610be657610c02565b6001915050610725565b60ff841115610bf757610bf7610aad565b50506001821b610725565b5060208310610133831016604e8410600b8410161715610c25575081810a610725565b610c326000198484610b67565b8060001904821115610c4657610c46610aad565b029392505050565b60006107e060ff841683610baa56fea2646970667358221220eb0002a07157af7491d8c3416c1aca693e3f0eb7c6a3ed01d05f76efd223077a64736f6c634300081c0033", "deployedBytecode": "0x6080604052600436106100705760003560e01c8063db3e21981161004e578063db3e2198146100cf578063f28c0498146100bc578063f3fef3a3146100e2578063fa461e331461010257600080fd5b8063414bf389146100755780634562e0151461009a578063c04b8d59146100bc575b600080fd5b610088610083366004610920565b610122565b60405190815260200160405180910390f35b3480156100a657600080fd5b506100ba6100b5366004610959565b6102fb565b005b6100886100ca3660046109a8565b6103b6565b6100886100dd366004610920565b6103d1565b3480156100ee57600080fd5b506100ba6100fd3660046109e5565b610632565b34801561010e57600080fd5b506100ba61011d366004610a0f565b610692565b6000806101356080840160608501610a92565b6001600160a01b03160361015b5760405162e18e7f60e71b815260040160405180910390fd5b4282608001351015610183576040516001623859e760e21b0319815260040160405180910390fd5b60008260a00135116101a85760405163d11b25af60e01b815260040160405180910390fd5b6000610240670de0b6b3a764000082806101c56020880188610a92565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008660200160208101906101fa9190610a92565b6001600160a01b03168152602080820192909252604001600020549061022b9061022690880188610a92565b6106ab565b6102399060a0880135610ac3565b919061072b565b90506102556102266040850160208601610a92565b61025f9082610af0565b91508160c0840135808210156102965760405163296ba6e160e01b8152600481019290925260248201526044015b60405180910390fd5b506102c19050333060a08601356102b06020880188610a92565b6001600160a01b03169291906107e7565b6102f56102d46080850160608601610a92565b836102e56040870160208801610a92565b6001600160a01b03169190610854565b50919050565b6001600160a01b0383166103225760405163165a825360e21b815260040160405180910390fd5b6001600160a01b0382166103495760405163165a825360e21b815260040160405180910390fd5b6001600160a01b038381166000818152602081815260408083209487168084529482529182902085905581519283528201929092529081018290527fb71c154260e8508e211e2ace194becba2c6d7e727c3ed292fe4787458969cd109060600160405180910390a1505050565b600060405163d623472560e01b815260040160405180910390fd5b6000806103e46080840160608501610a92565b6001600160a01b03160361040a5760405162e18e7f60e71b815260040160405180910390fd5b4282608001351015610432576040516001623859e760e21b0319815260040160405180910390fd5b60008260a00135116104575760405163d11b25af60e01b815260040160405180910390fd5b60006104696040840160208501610a92565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156104af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d39190610b12565b90508060a08401358082101561050557604051634787a10360e11b81526004810192909252602482015260440161028d565b506000905061059f818061051c6020880188610a92565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008660200160208101906105519190610a92565b6001600160a01b03166001600160a01b0316815260200190815260200160002054670de0b6b3a76400006105918760200160208101906102269190610a92565b6102399060a0890135610ac3565b90506105b16102266020860186610a92565b6105bb9082610af0565b92508260c0850135808211156105ed57604051639a06025d60e01b81526004810192909252602482015260440161028d565b5061060390503330856102b06020890189610a92565b61062b6106166080860160608701610a92565b60a08601356102e56040880160208901610a92565b5050919050565b6001600160a01b0382166106595760405163165a825360e21b815260040160405180910390fd5b6000811161067a5760405163165a825360e21b815260040160405180910390fd5b61068e6001600160a01b0383163383610854565b5050565b60405163d623472560e01b815260040160405180910390fd5b6000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190610b2b565b61071a906012610b4e565b61072590600a610c4e565b92915050565b60008383028160001985870982811083820303915050806000036107625783828161075857610758610ada565b04925050506107e0565b80841161077957610779600385150260111861088a565b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b6040516001600160a01b03848116602483015283811660448301526064820183905261084e9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061089c565b50505050565b6040516001600160a01b0383811660248301526044820183905261088591859182169063a9059cbb9060640161081c565b505050565b634e487b71600052806020526024601cfd5b600080602060008451602086016000885af1806108bf576040513d6000823e3d81fd5b50506000513d915081156108d75780600114156108e4565b6001600160a01b0384163b155b1561084e57604051635274afe760e01b81526001600160a01b038516600482015260240161028d565b600061010082840312156102f557600080fd5b6000610100828403121561093357600080fd5b6107e0838361090d565b80356001600160a01b038116811461095457600080fd5b919050565b60008060006060848603121561096e57600080fd5b6109778461093d565b92506109856020850161093d565b929592945050506040919091013590565b600060a082840312156102f557600080fd5b6000602082840312156109ba57600080fd5b813567ffffffffffffffff8111156109d157600080fd5b6109dd84828501610996565b949350505050565b600080604083850312156109f857600080fd5b610a018361093d565b946020939093013593505050565b60008060008060608587031215610a2557600080fd5b8435935060208501359250604085013567ffffffffffffffff811115610a4a57600080fd5b8501601f81018713610a5b57600080fd5b803567ffffffffffffffff811115610a7257600080fd5b876020828401011115610a8457600080fd5b949793965060200194505050565b600060208284031215610aa457600080fd5b6107e08261093d565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761072557610725610aad565b634e487b7160e01b600052601260045260246000fd5b600082610b0d57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215610b2457600080fd5b5051919050565b600060208284031215610b3d57600080fd5b815160ff811681146107e057600080fd5b60ff828116828216039081111561072557610725610aad565b6001815b6001841115610ba257808504811115610b8657610b86610aad565b6001841615610b9457908102905b60019390931c928002610b6b565b935093915050565b600082610bb957506001610725565b81610bc657506000610725565b8160018114610bdc5760028114610be657610c02565b6001915050610725565b60ff841115610bf757610bf7610aad565b50506001821b610725565b5060208310610133831016604e8410600b8410161715610c25575081810a610725565b610c326000198484610b67565b8060001904821115610c4657610c46610aad565b029392505050565b60006107e060ff841683610baa56fea2646970667358221220eb0002a07157af7491d8c3416c1aca693e3f0eb7c6a3ed01d05f76efd223077a64736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} }