# SushiSwap - [github](https://github.com/sushiswap) - [sushiswap](https://github.com/sushiswap/sushiswap) - [subgraphs](https://github.com/sushiswap/subgraphs) ## sushiswapの構成 ### SmartContract関連 - [protocols](https://github.com/sushiswap/sushiswap/tree/master/protocols) - [bentobox/contracts](https://github.com/sushiswap/sushiswap/tree/master/protocols/bentobox/contracts) - [interfaces](https://github.com/sushiswap/sushiswap/tree/master/protocols/bentobox/contracts/interfaces) - IBatchFlashBorrower.sol - [IBentoBoxV1.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/bentobox/contracts/interfaces/IBentoBoxV1.sol) - IFlashBorrower.sol - IFlashLoan.sol - IStrategy.sol - IWETH.sol - [BentoBox.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/bentobox/contracts/BentoBox.sol) - [SushiSwap: BentoBoxV1 address](https://etherscan.io/address/0xf5bce5077908a1b7370b9ae04adc565ebd643966) - [MasterContractManager.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/bentobox/contracts/MasterContractManager.sol) - [sushixswap/contracts](https://github.com/sushiswap/sushiswap/tree/master/protocols/sushixswap/contracts) - [adapters](https://github.com/sushiswap/sushiswap/tree/master/protocols/sushixswap/contracts/adapters) - [BentoAdapter.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/adapters/BentoAdapter.sol) - [StargateAdapter.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/adapters/StargateAdapter.sol) - [SushiLegacyAdapter.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/adapters/SushiLegacyAdapter.sol) - [TokenAdapter.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/adapters/TokenAdapter.sol) - [TridentSwapAdapter.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/adapters/TridentSwapAdapter.sol) - [base](https://github.com/sushiswap/sushiswap/tree/master/protocols/sushixswap/contracts/base) - [ImmutableState.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/base/ImmutableState.sol) - [interfaces](https://github.com/sushiswap/sushiswap/tree/master/protocols/sushixswap/contracts/interfaces) - [stargate](https://github.com/sushiswap/sushiswap/tree/master/protocols/sushixswap/contracts/interfaces/stargate) - [IStargateAdapter.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/interfaces/stargate/IStargateAdapter.sol) - `interface IStargateAdapter {}` - [IStargateReceiver.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/interfaces/stargate/IStargateReceiver.sol) - `function sgReceive(uint16 _chainId, bytes memory _srcAddress, uint256 _nonce, address _token, uint256 amountLD, bytes memory payload) external;` - Implementation -> [adapters/StargateAdapter.sol](https://github.com/sushiswap/sushiswap/blob/f01135e26ec457d3185160788ff2a8bf8e5b8a45/protocols/sushixswap/contracts/adapters/StargateAdapter.sol#L114-L172) - [IStargateRouter.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/interfaces/stargate/IStargateRouter.sol) - `struct lzTxObj {uint256 dstGasForCall; uint256 dstNativeAmount; bytes dstNativeAddr;}` - `function swap(uint16 _dstChainId, uint256 _srcPoolId, uint256 _dstPoolId, address payable _refundAddress, uint256 _amountLD, uint256 _minAmountLD, lzTxObj memory _lzTxParams, bytes calldata _to, bytes calldata _payload) external payable;` - `function quoteLayerZeroFee(uint16 _dstChainId, uint8 _functionType, bytes calldata _toAddress, bytes calldata _transferAndCallPayload, lzTxObj memory _lzTxParams) external view returns (uint256, uint256);` - Implementation -> [Stargate Router](https://github.com/stargate-protocol/stargate/blob/main/contracts/Router.sol) - [IStargateWidget.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/interfaces/stargate/IStargateWidget.sol) - `function partnerSwap(bytes2 _partnerId) external;` - Implementation ?? - [trident](https://github.com/sushiswap/sushiswap/tree/master/protocols/sushixswap/contracts/interfaces/trident) - [IBentoBoxMinimal.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/interfaces/IBentoBoxMinimal.sol) - `function balanceOf(address, address) external view returns (uint256);` - `function toShare(address token, uint256 amount, bool roundUp) external view returns (uint256 share);` - `function toAmount(address token, uint256 share, bool roundUp) external view returns (uint256 amount);` - `function registerProtocol() external;` - `function deposit(address token_, address from, address to, uint256 amount, uint256 share) external payable returns (uint256 amountOut, uint256 shareOut);` - `function withdraw(address token_, address from, address to, uint256 amount, uint256 share) external returns (uint256 amountOut, uint256 shareOut);` - `function transfer(address token, address from, address to, uint256 share) external;` - [IERC20Permit.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/interfaces/IERC20Permit.sol) - [IImmutableState.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/interfaces/IImmutableState.sol) - [ISushiXSwap.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/interfaces/ISushiXSwap.sol) - `function cook(uint8[] memory actions, uint256[] memory values, bytes[] memory datas) external payable;` - [IWETH.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/interfaces/IWETH.sol) - [libraries](https://github.com/sushiswap/sushiswap/tree/master/protocols/sushixswap/contracts/libraries) - [SafeMath.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/libraries/SafeMath.sol) - [UniswapV2Library.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/libraries/UniswapV2Library.sol) - [misc](https://github.com/sushiswap/sushiswap/tree/master/protocols/sushixswap/contracts/misc) - [StargateFeeV04Extraction.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/misc/StargateFeeV04Extraction.sol) - [mocks](https://github.com/sushiswap/sushiswap/tree/master/protocols/sushixswap/contracts/mocks) - [MockERC20.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/mocks/MockERC20.sol) - [SushiXSwap.sol](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/SushiXSwap.sol) - `function cook(uint8[] memory actions, uint256[] memory values, bytes[] memory datas) external payable;` #### [SushiXSwapコントラクト](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/SushiXSwap.sol) - `cook` functionのみで、渡された`actions`(複数)によって処理を切り替えている - `ACTION_MASTER_CONTRACT_APPROVAL` - bentoBox.setMasterContractApproval() をcall - Implementationは、bentobox/contracts内 - MasterContractManager.sol - flat/BentoBoxFlat.sol - `ACTION_SRC_DEPOSIT_TO_BENTOBOX` - [_depositToBentoBox() in BentoAdapter](https://github.com/sushiswap/sushiswap/blob/f01135e26ec457d3185160788ff2a8bf8e5b8a45/protocols/sushixswap/contracts/adapters/BentoAdapter.sol#L23-L32) - `ACTION_SRC_TRANSFER_FROM_BENTOBOX` - [_transferFromBentoBox() in BentoAdapter](https://github.com/sushiswap/sushiswap/blob/f01135e26ec457d3185160788ff2a8bf8e5b8a45/protocols/sushixswap/contracts/adapters/BentoAdapter.sol#L44-L60) - `ACTION_SRC_TOKEN_TRANSFER` - [_transferFromToken() in TokenAdapter](https://github.com/sushiswap/sushiswap/blob/f01135e26ec457d3185160788ff2a8bf8e5b8a45/protocols/sushixswap/contracts/adapters/TokenAdapter.sol#L33-L39) - `ACTION_DST_DEPOSIT_TO_BENTOBOX` - [_transferTokens() in TokenAdapter](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/adapters/TokenAdapter.sol#L17-L27) - [_depositToBentoBox() in BentoAdapter](https://github.com/sushiswap/sushiswap/blob/f01135e26ec457d3185160788ff2a8bf8e5b8a45/protocols/sushixswap/contracts/adapters/BentoAdapter.sol#L44-L60) - `ACTION_DST_WITHDRAW_TOKEN` - [_transferTokens() in TokenAdapter](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/adapters/TokenAdapter.sol#L17-L27) - `ACTION_DST_WITHDRAW_OR_TRANSFER_FROM_BENTOBOX` - [_transferFromBentoBox() in BentoAdapter](https://github.com/sushiswap/sushiswap/blob/f01135e26ec457d3185160788ff2a8bf8e5b8a45/protocols/sushixswap/contracts/adapters/BentoAdapter.sol#L44-L60) - `ACTION_UNWRAP_AND_TRANSFER` - [_unwrapTransfer() in TokenAdapter](https://github.com/sushiswap/sushiswap/blob/f01135e26ec457d3185160788ff2a8bf8e5b8a45/protocols/sushixswap/contracts/adapters/TokenAdapter.sol#L44-L47) - `ACTION_WRAP_TOKEN` - [_wrapToken() in TokenAdapter](https://github.com/sushiswap/sushiswap/blob/f01135e26ec457d3185160788ff2a8bf8e5b8a45/protocols/sushixswap/contracts/adapters/TokenAdapter.sol#L52-L54) - `ACTION_LEGACY_SWAP` - [_swapExactTokensForTokens() in SushiLegacyAdapter](https://github.com/sushiswap/sushiswap/blob/f01135e26ec457d3185160788ff2a8bf8e5b8a45/protocols/sushixswap/contracts/adapters/SushiLegacyAdapter.sol#L14-L44) - `ACTION_TRIDENT_SWAP` - [_exactInput() in TridentSwapAdapter](https://github.com/sushiswap/sushiswap/blob/f01135e26ec457d3185160788ff2a8bf8e5b8a45/protocols/sushixswap/contracts/adapters/TridentSwapAdapter.sol#L23-L57) - `ACTION_TRIDENT_COMPLEX_PATH_SWAP` - [_complexPath() in TridentSwapAdapter](https://github.com/sushiswap/sushiswap/blob/f01135e26ec457d3185160788ff2a8bf8e5b8a45/protocols/sushixswap/contracts/adapters/TridentSwapAdapter.sol#L65-L123) - `ACTION_STARGATE_TELEPORT` - [_stargateTeleport() in StargateAdapter](https://github.com/sushiswap/sushiswap/blob/f01135e26ec457d3185160788ff2a8bf8e5b8a45/protocols/sushixswap/contracts/adapters/StargateAdapter.sol#L47-L79) #### [StargateAdapterコントラクト](https://github.com/sushiswap/sushiswap/blob/f01135e26ec457d3185160788ff2a8bf8e5b8a45/protocols/sushixswap/contracts/adapters/StargateAdapter.sol) ##### [_stargateTeleport()](https://github.com/sushiswap/sushiswap/blob/f01135e26ec457d3185160788ff2a8bf8e5b8a45/protocols/sushixswap/contracts/adapters/StargateAdapter.sol#L47-L79) - Bridges the token to dst chain using Stargate Router - [stargateRouter.swap()](https://github.com/stargate-protocol/stargate/blob/c647a3a647fc693c38b16ef023c54e518b46e206/contracts/Router.sol#L107-L134) を呼び出す - どういった経路で呼び出されるのか? - [Applicationレイヤー](https://github.com/sushiswap/sushiswap/blob/f01135e26ec457d3185160788ff2a8bf8e5b8a45/apps/xswap/pages/index.tsx) - `Confirm Swap`ボタンをClick in xswap/pages/index.tsx - [execute()](https://github.com/sushiswap/sushiswap/blob/master/apps/xswap/pages/index.tsx#L461-L537) - 以下teleport()が実行される条件は、`crossChain && srcAmountOut && dstAmountIn` - [teleport() in Cooker apps/xswap/lib/SushiXSwap.ts](https://github.com/sushiswap/sushiswap/blob/f01135e26ec457d3185160788ff2a8bf8e5b8a45/apps/xswap/lib/SushiXSwap.ts#L774-L849) - `useEffect`内で、getFee()実行 (Reactによるレンダリング後) - [getFee()](https://github.com/sushiswap/sushiswap/blob/f01135e26ec457d3185160788ff2a8bf8e5b8a45/apps/xswap/pages/index.tsx#L691-L747) - [teleport() in Cooker apps/xswap/lib/SushiXSwap.ts](https://github.com/sushiswap/sushiswap/blob/f01135e26ec457d3185160788ff2a8bf8e5b8a45/apps/xswap/lib/SushiXSwap.ts#L774-L849) - [コントラクトレイヤー](https://github.com/sushiswap/sushiswap/blob/master/protocols/sushixswap/contracts/SushiXSwap.sol) - SushiXSwapコントラクトの`cook()`で、Action==`ACTION_STARGATE_TELEPORT` ### WIP: Application関連 - [apps](https://github.com/sushiswap/sushiswap/tree/master/apps) - [xswap](https://github.com/sushiswap/sushiswap/tree/master/apps/xswap) - [lib](https://github.com/sushiswap/sushiswap/tree/master/apps/xswap/lib) - [hooks](https://github.com/sushiswap/sushiswap/tree/master/apps/xswap/lib/hooks) - [state](https://github.com/sushiswap/sushiswap/tree/master/apps/xswap/lib/state) - [SushiXSwap.ts](https://github.com/sushiswap/sushiswap/blob/master/apps/xswap/lib/SushiXSwap.ts) - [storage.ts](https://github.com/sushiswap/sushiswap/blob/master/apps/xswap/lib/storage.ts) - [pages](https://github.com/sushiswap/sushiswap/blob/master/apps/xswap/lib/storage.ts) - [index.tsx](https://github.com/sushiswap/sushiswap/blob/master/apps/xswap/pages/index.tsx) ## trident SushiSwapが新たに開発したAMMとルーティングシステム。 Tridentは拡張可能なAMMフレームワークとして設計されており、開発者はIPoolインターフェースに準拠した新しいプールタイプを追加することが可能。 発売前に、イーサリアム全体のプールインターフェースの標準化を支援するために、IPoolインターフェース設計のためのEIPが提出される予定。 新しいAMMプールタイプが設計または実験された場合、インターフェイスに適合している限り、Tridentに追加することができる。 このようにして、Tridentは少なくとも、すべての一般的なAMMプール設計のスーパーセットとなり、Sushiが構築するための将来性のあるアーキテクチャとなる。 [github: trident](https://github.com/sushiswap/trident)