@ensuro/swaplibrary
Version:
Solidity Library that implements swap using different plaforms with a homogeneneous interface
211 lines (210 loc) • 18.3 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "CurveRoutesTesterMock",
"sourceName": "contracts/mocks/CurveRoutesTesterMock.sol",
"abi": [
{
"inputs": [],
"name": "AtLeastOneRoute",
"type": "error"
},
{
"inputs": [],
"name": "CurveRouterCantBeZero",
"type": "error"
},
{
"inputs": [],
"name": "InvalidLength",
"type": "error"
},
{
"inputs": [
{
"components": [
{
"internalType": "address[11]",
"name": "route",
"type": "address[11]"
},
{
"internalType": "uint256[5][5]",
"name": "swapParams",
"type": "uint256[5][5]"
},
{
"internalType": "address[5]",
"name": "pools",
"type": "address[5]"
}
],
"internalType": "struct CurveRoutes.CurveRoute",
"name": "route",
"type": "tuple"
}
],
"name": "InvalidRoute",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOut",
"type": "address"
}
],
"name": "RouteNotFound",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint8",
"name": "nSwaps",
"type": "uint8"
}
],
"name": "TooManySwaps",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "curveRoutes",
"type": "bytes"
},
{
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOut",
"type": "address"
}
],
"name": "findRoute",
"outputs": [
{
"internalType": "contract ICurveRouter",
"name": "router",
"type": "address"
},
{
"components": [
{
"internalType": "address[11]",
"name": "route",
"type": "address[11]"
},
{
"internalType": "uint256[5][5]",
"name": "swapParams",
"type": "uint256[5][5]"
},
{
"internalType": "address[5]",
"name": "pools",
"type": "address[5]"
}
],
"internalType": "struct CurveRoutes.CurveRoute",
"name": "route",
"type": "tuple"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "curveRoutes",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "offset",
"type": "uint256"
}
],
"name": "readRoute",
"outputs": [
{
"internalType": "uint8",
"name": "nSwaps",
"type": "uint8"
},
{
"components": [
{
"internalType": "address[11]",
"name": "route",
"type": "address[11]"
},
{
"internalType": "uint256[5][5]",
"name": "swapParams",
"type": "uint256[5][5]"
},
{
"internalType": "address[5]",
"name": "pools",
"type": "address[5]"
}
],
"internalType": "struct CurveRoutes.CurveRoute",
"name": "route",
"type": "tuple"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint8",
"name": "nSwaps",
"type": "uint8"
}
],
"name": "routeSize",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "curveRoutes",
"type": "bytes"
}
],
"name": "validate",
"outputs": [],
"stateMutability": "pure",
"type": "function"
}
],
"bytecode": "0x6080604052348015600f57600080fd5b50610d418061001f6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80634eb9425914610051578063588f4ff41461007b5780637ea71c9b1461009c578063c16e50ef146100bd575b600080fd5b61006461005f366004610a5e565b6100d2565b604051610072929190610b88565b60405180910390f35b61008e610089366004610bad565b6100f4565b604051610072929190610bf2565b6100af6100aa366004610c0a565b610113565b604051908152602001610072565b6100d06100cb366004610c2d565b610124565b005b60006100dc610901565b6100e7858585610130565b915091505b935093915050565b60006100fe610901565b6101088484610279565b915091509250929050565b600061011e82610578565b92915050565b61012d816105d6565b50565b600061013a610901565b61014585600061081f565b9150600061015e610157601483610c80565b8790610884565b90506000600161016f601483610c80565b6101799190610c80565b905060005b8260ff168110156102475760006101958984610884565b90506001600160a01b0388166101b66101af600186610c80565b8b9061081f565b6001600160a01b031614801561020d57506001600160a01b0387166102026101e260ff84166014610c93565b6101ed906002610c93565b6101f8600187610c80565b6101af9190610c80565b6001600160a01b0316145b156102295761021c8984610279565b95506100ec945050505050565b61023281610578565b61023c9084610c80565b92505060010161017e565b50604051638c9aec7b60e01b81526001600160a01b038088166004830152861660248201526044015b60405180910390fd5b6000610283610901565b61028d8484610884565b915060058260ff1611156102b957604051635b030b5960e11b815260ff83166004820152602401610270565b60005b6102c5836108e0565b811015610324576102f66102da601483610c93565b6102e5600187610c80565b6102ef9190610c80565b869061081f565b825182600b811061030957610309610caa565b6001600160a01b0390921660209290920201526001016102bc565b506014610330836108e0565b61033a9190610c93565b610345906001610c80565b61034f9084610c80565b925060005b8260ff168110156104f35761038961036d600183610c93565b610378906005610c93565b6103829086610c80565b8690610884565b60ff16826020015182600581106103a2576103a2610caa565b6020020151526103d66103b6600183610c93565b6103c1906005610c93565b6103cb9086610c80565b610382906001610c80565b60ff16826020015182600581106103ef576103ef610caa565b602002015160016020020152610429610409600183610c93565b610414906005610c93565b61041e9086610c80565b610382906002610c80565b60ff168260200151826005811061044257610442610caa565b602002015160400152610479610459600183610c93565b610464906005610c93565b61046e9086610c80565b610382906003610c80565b60ff168260200151826005811061049257610492610caa565b6020020151606001526104c96104a9600183610c93565b6104b4906005610c93565b6104be9086610c80565b610382906004610c80565b60ff16826020015182600581106104e2576104e2610caa565b602002015160800152600101610354565b50610502600160ff8416610c93565b61050d906005610c93565b6105179084610c80565b925060005b8260ff168110156105705761053f610535601483610c93565b6102ef9086610c80565b8260400151826005811061055557610555610caa565b6001600160a01b03909216602092909202015260010161051c565b509250929050565b6000610588601460ff8416610c93565b6001610595846005610cc0565b60ff166105a29190610c93565b60146105ad856108e0565b6105b79190610c93565b6105c2906001610c80565b6105cc9190610c80565b61011e9190610c80565b60006105e2828261081f565b90506001600160a01b03811661060b5760405163e368363760e01b815260040160405180910390fd5b600061062261061b601483610c80565b8490610884565b90508060ff16600003610648576040516301ec987f60e31b815260040160405180910390fd5b60006001610657601483610c80565b6106619190610c80565b905060005b8260ff168110156107f75760008061067e8785610279565b9150915060005b8260ff168110156107285781516000906106a0836002610c93565b600b81106106b0576106b0610caa565b60200201516001600160a01b03161480610700575081516000906106d5836002610c93565b6106e0906001610c80565b600b81106106f0576106f0610caa565b60200201516001600160a01b0316145b156107205781604051635875b11160e01b81526004016102709190610ce3565b600101610685565b508051600090610739846002610cc0565b60ff16600b811061074c5761074c610caa565b60200201516001600160a01b03160361077a5780604051635875b11160e01b81526004016102709190610ce3565b60058260ff16141580156107b857508051600090610797846108e0565b600b81106107a7576107a7610caa565b60200201516001600160a01b031614155b156107d85780604051635875b11160e01b81526004016102709190610ce3565b6107e182610578565b6107eb9085610c80565b93505050600101610666565b50808451146108195760405163251f56a160e21b815260040160405180910390fd5b50505050565b600061082c826014610c80565b835110156108745760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610270565b500160200151600160601b900490565b6000610891826001610c80565b835110156108d75760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606401610270565b50016001015190565b60006108ed826002610cc0565b6108f8906001610cf2565b60ff1692915050565b6040518060600160405280610914610933565b8152602001610921610952565b815260200161092e61097f565b905290565b604051806101600160405280600b906020820280368337509192915050565b6040518060a001604052806005905b61096961097f565b8152602001906001900390816109615790505090565b6040518060a001604052806005906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126109c457600080fd5b813567ffffffffffffffff8111156109de576109de61099d565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610a0d57610a0d61099d565b604052818152838201602001851015610a2557600080fd5b816020850160208301376000918101602001919091529392505050565b80356001600160a01b0381168114610a5957600080fd5b919050565b600080600060608486031215610a7357600080fd5b833567ffffffffffffffff811115610a8a57600080fd5b610a96868287016109b3565b935050610aa560208501610a42565b9150610ab360408501610a42565b90509250925092565b8060005b60058110156108195781516001600160a01b0316845260209384019390910190600101610ac0565b80518260005b600b811015610b165782516001600160a01b0316825260209283019290910190600101610aee565b5050506020810151610160830160005b6005811015610b6d5782518260005b6005811015610b54578251825260209283019290910190600101610b35565b5050506020929092019160a09190910190600101610b26565b5050506040810151610b83610480840182610abc565b505050565b6001600160a01b03831681526105408101610ba66020830184610ae8565b9392505050565b60008060408385031215610bc057600080fd5b823567ffffffffffffffff811115610bd757600080fd5b610be3858286016109b3565b95602094909401359450505050565b60ff831681526105408101610ba66020830184610ae8565b600060208284031215610c1c57600080fd5b813560ff81168114610ba657600080fd5b600060208284031215610c3f57600080fd5b813567ffffffffffffffff811115610c5657600080fd5b610c62848285016109b3565b949350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561011e5761011e610c6a565b808202811582820484141761011e5761011e610c6a565b634e487b7160e01b600052603260045260246000fd5b60ff8181168382160290811690818114610cdc57610cdc610c6a565b5092915050565b610520810161011e8284610ae8565b60ff818116838216019081111561011e5761011e610c6a56fea2646970667358221220d62f8bf2bcce43bcb2176e07c55607d36d88267e8817c483fcb2c4fddc7fcefc64736f6c634300081c0033",
"deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80634eb9425914610051578063588f4ff41461007b5780637ea71c9b1461009c578063c16e50ef146100bd575b600080fd5b61006461005f366004610a5e565b6100d2565b604051610072929190610b88565b60405180910390f35b61008e610089366004610bad565b6100f4565b604051610072929190610bf2565b6100af6100aa366004610c0a565b610113565b604051908152602001610072565b6100d06100cb366004610c2d565b610124565b005b60006100dc610901565b6100e7858585610130565b915091505b935093915050565b60006100fe610901565b6101088484610279565b915091509250929050565b600061011e82610578565b92915050565b61012d816105d6565b50565b600061013a610901565b61014585600061081f565b9150600061015e610157601483610c80565b8790610884565b90506000600161016f601483610c80565b6101799190610c80565b905060005b8260ff168110156102475760006101958984610884565b90506001600160a01b0388166101b66101af600186610c80565b8b9061081f565b6001600160a01b031614801561020d57506001600160a01b0387166102026101e260ff84166014610c93565b6101ed906002610c93565b6101f8600187610c80565b6101af9190610c80565b6001600160a01b0316145b156102295761021c8984610279565b95506100ec945050505050565b61023281610578565b61023c9084610c80565b92505060010161017e565b50604051638c9aec7b60e01b81526001600160a01b038088166004830152861660248201526044015b60405180910390fd5b6000610283610901565b61028d8484610884565b915060058260ff1611156102b957604051635b030b5960e11b815260ff83166004820152602401610270565b60005b6102c5836108e0565b811015610324576102f66102da601483610c93565b6102e5600187610c80565b6102ef9190610c80565b869061081f565b825182600b811061030957610309610caa565b6001600160a01b0390921660209290920201526001016102bc565b506014610330836108e0565b61033a9190610c93565b610345906001610c80565b61034f9084610c80565b925060005b8260ff168110156104f35761038961036d600183610c93565b610378906005610c93565b6103829086610c80565b8690610884565b60ff16826020015182600581106103a2576103a2610caa565b6020020151526103d66103b6600183610c93565b6103c1906005610c93565b6103cb9086610c80565b610382906001610c80565b60ff16826020015182600581106103ef576103ef610caa565b602002015160016020020152610429610409600183610c93565b610414906005610c93565b61041e9086610c80565b610382906002610c80565b60ff168260200151826005811061044257610442610caa565b602002015160400152610479610459600183610c93565b610464906005610c93565b61046e9086610c80565b610382906003610c80565b60ff168260200151826005811061049257610492610caa565b6020020151606001526104c96104a9600183610c93565b6104b4906005610c93565b6104be9086610c80565b610382906004610c80565b60ff16826020015182600581106104e2576104e2610caa565b602002015160800152600101610354565b50610502600160ff8416610c93565b61050d906005610c93565b6105179084610c80565b925060005b8260ff168110156105705761053f610535601483610c93565b6102ef9086610c80565b8260400151826005811061055557610555610caa565b6001600160a01b03909216602092909202015260010161051c565b509250929050565b6000610588601460ff8416610c93565b6001610595846005610cc0565b60ff166105a29190610c93565b60146105ad856108e0565b6105b79190610c93565b6105c2906001610c80565b6105cc9190610c80565b61011e9190610c80565b60006105e2828261081f565b90506001600160a01b03811661060b5760405163e368363760e01b815260040160405180910390fd5b600061062261061b601483610c80565b8490610884565b90508060ff16600003610648576040516301ec987f60e31b815260040160405180910390fd5b60006001610657601483610c80565b6106619190610c80565b905060005b8260ff168110156107f75760008061067e8785610279565b9150915060005b8260ff168110156107285781516000906106a0836002610c93565b600b81106106b0576106b0610caa565b60200201516001600160a01b03161480610700575081516000906106d5836002610c93565b6106e0906001610c80565b600b81106106f0576106f0610caa565b60200201516001600160a01b0316145b156107205781604051635875b11160e01b81526004016102709190610ce3565b600101610685565b508051600090610739846002610cc0565b60ff16600b811061074c5761074c610caa565b60200201516001600160a01b03160361077a5780604051635875b11160e01b81526004016102709190610ce3565b60058260ff16141580156107b857508051600090610797846108e0565b600b81106107a7576107a7610caa565b60200201516001600160a01b031614155b156107d85780604051635875b11160e01b81526004016102709190610ce3565b6107e182610578565b6107eb9085610c80565b93505050600101610666565b50808451146108195760405163251f56a160e21b815260040160405180910390fd5b50505050565b600061082c826014610c80565b835110156108745760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610270565b500160200151600160601b900490565b6000610891826001610c80565b835110156108d75760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606401610270565b50016001015190565b60006108ed826002610cc0565b6108f8906001610cf2565b60ff1692915050565b6040518060600160405280610914610933565b8152602001610921610952565b815260200161092e61097f565b905290565b604051806101600160405280600b906020820280368337509192915050565b6040518060a001604052806005905b61096961097f565b8152602001906001900390816109615790505090565b6040518060a001604052806005906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126109c457600080fd5b813567ffffffffffffffff8111156109de576109de61099d565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610a0d57610a0d61099d565b604052818152838201602001851015610a2557600080fd5b816020850160208301376000918101602001919091529392505050565b80356001600160a01b0381168114610a5957600080fd5b919050565b600080600060608486031215610a7357600080fd5b833567ffffffffffffffff811115610a8a57600080fd5b610a96868287016109b3565b935050610aa560208501610a42565b9150610ab360408501610a42565b90509250925092565b8060005b60058110156108195781516001600160a01b0316845260209384019390910190600101610ac0565b80518260005b600b811015610b165782516001600160a01b0316825260209283019290910190600101610aee565b5050506020810151610160830160005b6005811015610b6d5782518260005b6005811015610b54578251825260209283019290910190600101610b35565b5050506020929092019160a09190910190600101610b26565b5050506040810151610b83610480840182610abc565b505050565b6001600160a01b03831681526105408101610ba66020830184610ae8565b9392505050565b60008060408385031215610bc057600080fd5b823567ffffffffffffffff811115610bd757600080fd5b610be3858286016109b3565b95602094909401359450505050565b60ff831681526105408101610ba66020830184610ae8565b600060208284031215610c1c57600080fd5b813560ff81168114610ba657600080fd5b600060208284031215610c3f57600080fd5b813567ffffffffffffffff811115610c5657600080fd5b610c62848285016109b3565b949350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561011e5761011e610c6a565b808202811582820484141761011e5761011e610c6a565b634e487b7160e01b600052603260045260246000fd5b60ff8181168382160290811690818114610cdc57610cdc610c6a565b5092915050565b610520810161011e8284610ae8565b60ff818116838216019081111561011e5761011e610c6a56fea2646970667358221220d62f8bf2bcce43bcb2176e07c55607d36d88267e8817c483fcb2c4fddc7fcefc64736f6c634300081c0033",
"linkReferences": {},
"deployedLinkReferences": {}
}