avantis-trader-sdk 0.2.1__tar.gz → 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/PKG-INFO +7 -1
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/README.md +6 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/__init__.py +1 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/client.py +117 -21
- avantis_trader_sdk-0.4.0/avantis_trader_sdk/crypto/spki.py +98 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/feed/feedIds.json +28 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/rpc/fee_parameters.py +38 -20
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/rpc/pairs_cache.py +3 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/rpc/trade.py +38 -9
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/rpc/trading_parameters.py +8 -3
- avantis_trader_sdk-0.4.0/avantis_trader_sdk/signers/base.py +15 -0
- avantis_trader_sdk-0.4.0/avantis_trader_sdk/signers/kms_signer.py +146 -0
- avantis_trader_sdk-0.4.0/avantis_trader_sdk/signers/local_signer.py +16 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk.egg-info/PKG-INFO +7 -1
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk.egg-info/SOURCES.txt +6 -0
- avantis_trader_sdk-0.4.0/avantis_trader_sdk.egg-info/requires.txt +8 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/setup.py +11 -2
- avantis_trader_sdk-0.4.0/tests/__init__.py +0 -0
- avantis_trader_sdk-0.4.0/tests/test_client.py +0 -0
- avantis_trader_sdk-0.2.1/avantis_trader_sdk.egg-info/requires.txt +0 -3
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/MANIFEST.in +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ABDK.t.sol/ABDKTest.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/AbstractPyth.sol/AbstractPyth.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/AccessControl.sol/AccessControl.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Address.sol/Address.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Address.sol/Addresses.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/AddressUpgradeable.sol/AddressUpgradeable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/AggregatorInterface.sol/AggregatorInterface.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/AggregatorV2V3Interface.sol/AggregatorV2V3Interface.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/AggregatorV3Interface.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/AggregatorV3Interface.sol/AggregatorV3Interface.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/BackupOracle.t.sol/BackupOracle.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Base.sol/CommonBase.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Base.sol/ScriptBase.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Base.sol/TestBase.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Base.t.sol/Base.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Constants.sol/Constants.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Context.sol/Context.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ContextUpgradeable.sol/ContextUpgradeable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Counters.sol/Counters.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ERC165.sol/ERC165.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ERC165Upgradeable.sol/ERC165Upgradeable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ERC1967/ERC1967Upgrade.sol/ERC1967Upgrade.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ERC1967Proxy.sol/ERC1967Proxy.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ERC1967Upgrade.sol/ERC1967Upgrade.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ERC20.sol/ERC20.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ERC20Upgradeable.sol/ERC20Upgradeable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ERC4626Upgradeable.sol/ERC4626Upgradeable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ERC721Upgradeable.sol/ERC721Upgradeable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Execute.sol/Execute.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IAccessControl.sol/IAccessControl.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IBeacon.sol/IBeacon.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ICallbacks.sol/ICallbacks.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC1155Receiver.sol/IERC1155Receiver.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC165.sol/IERC165.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC165Upgradeable.sol/IERC165Upgradeable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC1967.sol/IERC1967.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC20.sol/IERC20.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC20Metadata.sol/IERC20Metadata.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC20MetadataUpgradeable.sol/IERC20MetadataUpgradeable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC20Permit.sol/IERC20Permit.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC20PermitUpgradeable.sol/IERC20PermitUpgradeable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC20Upgradeable.sol/IERC20Upgradeable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC4626.sol/IERC4626.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC4626Upgradeable.sol/IERC4626Upgradeable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC721MetadataUpgradeable.sol/IERC721MetadataUpgradeable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC721Receiver.sol/IERC721Receiver.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC721ReceiverUpgradeable.sol/IERC721ReceiverUpgradeable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC721Upgradeable.sol/IERC721Upgradeable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IExecute.sol/IExecute.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IMulticall.sol/IExtendedPairInfos.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IMulticall.sol/IExtendedPairStorage.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IMulticall.sol/IExtendedTrading.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IMulticall.sol/IMulticall.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IMulticall3.sol/IMulticall3.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IPairInfos.sol/IPairInfos.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IPairStorage.sol/IPairStorage.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IPausable.sol/IPausable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IPriceAggregator.sol/IPriceAggregator.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IPyth.sol/IPyth.dbg.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IPyth.sol/IPyth.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IPythEvents.sol/IPythEvents.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IReferral.sol/IReferral.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ITradingStorage.sol/ITradingStorage.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ITranche.sol/ITranche.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IVaultManager.sol/IVaultManager.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IVeTranche.sol/IVeTranche.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Initializable.sol/Initializable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IsolatedMargin.t.sol/IsolatedMargin.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/LimitTrade.t.sol/LimitTrade.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/LiquidBase.t.sol/LiquidBase.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/LiquidateTrade.t.sol/LiquidateTrade.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/LossProtection.t.sol/LossProtection.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/MarketTrade.t.sol/MarketTrade.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Math.sol/Math.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/MathUpgradeable.sol/MathUpgradeable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/MockPyth.sol/MockPyth.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/MockV3Aggregator.sol/MockV3Aggregator.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Multicall.sol/Multicall.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Multicall.t.sol/MulticallGroup.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Multicall3.sol/Multicall3.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Ownable.sol/Ownable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/PairInfos.sol/PairInfos.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/PairStorage.sol/PairStorage.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/PausableUpgradeable.sol/PausableUpgradeable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/PositionMath.sol/PositionMath.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/PriceAggregator.sol/PriceAggregator.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Proxy.sol/Proxy.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ProxyAdmin.sol/ProxyAdmin.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/PythErrors.sol/PythErrors.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/PythStructs.sol/PythStructs.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ReentrancyGuardUpgradeable.sol/ReentrancyGuardUpgradeable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Referral.sol/Referral.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Referral.sol/ReferralStorage.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Referral.t.sol/Referral.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/SafeERC20.sol/SafeERC20.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/SafeERC20Upgradeable.sol/SafeERC20Upgradeable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Sanctions.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Script.sol/Script.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Setters.t.sol/Setters.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/SignedMath.sol/SignedMath.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/SignedMathUpgradeable.sol/SignedMathUpgradeable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/SkewedBase.t.sol/SkewedBase.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdAssertions.sol/StdAssertions.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdChains.sol/StdChains.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdCheats.sol/StdCheats.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdCheats.sol/StdCheatsSafe.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdError.sol/stdError.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdInvariant.sol/StdInvariant.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdJson.sol/stdJson.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdMath.sol/stdMath.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdStorage.sol/stdStorage.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdStorage.sol/stdStorageSafe.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdStyle.sol/StdStyle.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdUtils.sol/StdUtils.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StopLimit.t.sol/StopLimitTrade.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StorageSlot.sol/StorageSlot.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Strings.sol/Strings.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StringsUpgradeable.sol/StringsUpgradeable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Timelock.sol/AvantisTimelockOwner.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Timelock.t.sol/Timelock.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/TimelockBase.t.sol/TimelockBase.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/TimelockController.sol/TimelockController.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/TradeBase.t.sol/TradeBase.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Trading.sol/Trading.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/TradingCallbacks.sol/TradingCallbacks.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/TradingStorage.sol/TradingStorage.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Tranche.sol/Tranche.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/USDC.sol/USDC.dbg.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/USDC.sol/USDC.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Upgradability.t.sol/Upgradability.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Vault.t.sol/Vault.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/VaultManager.sol/VaultManager.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/VeTranche.sol/VeTranche.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Vm.sol/Vm.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Vm.sol/VmSafe.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/__init__.py +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/abdkQuadMathExt.sol/ABDKMathQuadExt.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/beacon/IBeacon.sol/IBeacon.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/console.sol/console.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/console2.sol/console2.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/contracts/proxy/Proxy.sol/Proxy.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/deployBase.s.sol/DeployScript.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/deployBaseMulticall.s.sol/MulticallDeployScript.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/draft-IERC1822.sol/IERC1822Proxiable.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/getPair.s.sol/UpdateScript.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/getTrade.s.sol/UpdateScript.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/getTranche.s.sol/UpdateScript.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/interfaces/ICallbacks.sol/ICallbacks.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/interfaces/IExecute.sol/IExecute.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/interfaces/IPairInfos.sol/IPairInfos.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/interfaces/IPairStorage.sol/IPairStorage.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/interfaces/IPriceAggregator.sol/IPriceAggregator.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/interfaces/IReferral.sol/IReferral.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/interfaces/ITradingStorage.sol/ITradingStorage.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/interfaces/ITranche.sol/ITranche.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/interfaces/IVaultManager.sol/IVaultManager.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/interfaces/IVeTranche.sol/IVeTranche.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/library/PositionMath.sol/PositionMath.dbg.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/library/PositionMath.sol/PositionMath.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/liquidityBase.s.sol/LiquidityScript.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/lp.s.sol/Lp.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/proxy/ERC1967/ERC1967Upgrade.sol/ERC1967Upgrade.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/proxy/Proxy.sol/Proxy.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/proxy/beacon/IBeacon.sol/IBeacon.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/safeconsole.sol/safeconsole.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/setupLossProtection.s.sol/SetupLossProtection.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/setupPairs.s.sol/SetupPairs.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/setupTimelock.s.sol/SetupTimelock.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/setupTimelock.sol/SetupTimelock.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/test.sol/DSTest.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/test.sol/Test.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/testnet/USDC.sol/USDC.dbg.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/testnet/USDC.sol/USDC.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/transparent/ProxyAdmin.sol/ProxyAdmin.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/updateBase.s.sol/UpdateScript.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/updateOP.s.sol/UpdateScript.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/upgradesBase.s.sol/UpgradeScript.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/veTranche.t.sol/veTranche.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/wire.s.sol/Wire.json +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/config.py +0 -0
- {avantis_trader_sdk-0.2.1/avantis_trader_sdk/feed → avantis_trader_sdk-0.4.0/avantis_trader_sdk/crypto}/__init__.py +0 -0
- {avantis_trader_sdk-0.2.1/avantis_trader_sdk/rpc → avantis_trader_sdk-0.4.0/avantis_trader_sdk/feed}/__init__.py +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/feed/feed_client.py +0 -0
- {avantis_trader_sdk-0.2.1/tests → avantis_trader_sdk-0.4.0/avantis_trader_sdk/rpc}/__init__.py +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/rpc/asset_parameters.py +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/rpc/blended.py +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/rpc/category_parameters.py +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/rpc/rpc_helpers.py +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/rpc/snapshot.py +0 -0
- /avantis_trader_sdk-0.2.1/tests/test_client.py → /avantis_trader_sdk-0.4.0/avantis_trader_sdk/signers/__init__.py +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/types.py +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/utils.py +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk.egg-info/dependency_links.txt +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk.egg-info/top_level.txt +0 -0
- {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: avantis_trader_sdk
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: SDK for interacting with Avantis trading contracts.
|
|
5
5
|
Home-page: https://avantisfi.com/
|
|
6
6
|
Author: Avantis Labs
|
|
@@ -61,6 +61,12 @@ To get started with the Avantis Trader SDK, follow these steps to install the pa
|
|
|
61
61
|
1. Ensure you have Python 3.6 or later installed on your system.
|
|
62
62
|
2. Install the SDK using pip:
|
|
63
63
|
|
|
64
|
+
```bash
|
|
65
|
+
pip install avantis-trader-sdk
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
or
|
|
69
|
+
|
|
64
70
|
```bash
|
|
65
71
|
pip install git+https://github.com/Avantis-Labs/avantis_trader_sdk.git
|
|
66
72
|
```
|
|
@@ -46,6 +46,12 @@ To get started with the Avantis Trader SDK, follow these steps to install the pa
|
|
|
46
46
|
1. Ensure you have Python 3.6 or later installed on your system.
|
|
47
47
|
2. Install the SDK using pip:
|
|
48
48
|
|
|
49
|
+
```bash
|
|
50
|
+
pip install avantis-trader-sdk
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
or
|
|
54
|
+
|
|
49
55
|
```bash
|
|
50
56
|
pip install git+https://github.com/Avantis-Labs/avantis_trader_sdk.git
|
|
51
57
|
```
|
|
@@ -13,18 +13,29 @@ from .rpc.trade import TradeRPC
|
|
|
13
13
|
from .utils import decoder
|
|
14
14
|
from .feed.feed_client import FeedClient
|
|
15
15
|
|
|
16
|
+
from .signers.base import BaseSigner
|
|
17
|
+
from .signers.local_signer import LocalSigner
|
|
18
|
+
from .signers.kms_signer import KMSSigner
|
|
19
|
+
|
|
16
20
|
|
|
17
21
|
class TraderClient:
|
|
18
22
|
"""
|
|
19
23
|
This class provides methods to interact with the Avantis smart contracts.
|
|
20
24
|
"""
|
|
21
25
|
|
|
22
|
-
def __init__(
|
|
26
|
+
def __init__(
|
|
27
|
+
self,
|
|
28
|
+
provider_url,
|
|
29
|
+
l1_provider_url="https://eth.llamarpc.com",
|
|
30
|
+
signer: BaseSigner = None,
|
|
31
|
+
):
|
|
23
32
|
"""
|
|
24
33
|
Constructor for the TraderClient class.
|
|
25
34
|
|
|
26
35
|
Args:
|
|
27
36
|
provider_url: The URL of the Ethereum node provider.
|
|
37
|
+
l1_provider_url (optional): The URL of the L1 Ethereum node provider.
|
|
38
|
+
signer (optional): The signer to use for signing transactions.
|
|
28
39
|
"""
|
|
29
40
|
self.web3 = Web3(
|
|
30
41
|
Web3.HTTPProvider(provider_url, request_kwargs={"timeout": 60})
|
|
@@ -57,6 +68,8 @@ class TraderClient:
|
|
|
57
68
|
self.snapshot = SnapshotRPC(self)
|
|
58
69
|
self.trade = TradeRPC(self, FeedClient)
|
|
59
70
|
|
|
71
|
+
self.signer = signer
|
|
72
|
+
|
|
60
73
|
def load_contract(self, name):
|
|
61
74
|
"""
|
|
62
75
|
Loads the contract ABI and address from the local filesystem.
|
|
@@ -105,46 +118,87 @@ class TraderClient:
|
|
|
105
118
|
|
|
106
119
|
return raw_data
|
|
107
120
|
|
|
108
|
-
async def write_contract(
|
|
109
|
-
self, private_key, contract_name, function_name, *args, **kwargs
|
|
110
|
-
):
|
|
121
|
+
async def write_contract(self, contract_name, function_name, *args, **kwargs):
|
|
111
122
|
"""
|
|
112
123
|
Calls a write function of a contract.
|
|
113
124
|
|
|
114
125
|
Args:
|
|
115
|
-
private_key: The private key of the wallet.
|
|
116
126
|
contract_name: The name of the contract.
|
|
117
127
|
function_name: The name of the function.
|
|
118
128
|
args: The arguments to the function.
|
|
119
129
|
|
|
120
130
|
Returns:
|
|
121
|
-
The transaction hash or the transaction object if
|
|
131
|
+
The transaction hash or the transaction object if signer is None.
|
|
122
132
|
"""
|
|
123
133
|
contract = self.contracts.get(contract_name)
|
|
124
134
|
if not contract:
|
|
125
135
|
raise ValueError(f"Contract {contract_name} not found")
|
|
126
136
|
|
|
127
|
-
|
|
137
|
+
if self.has_signer() and "from" not in kwargs:
|
|
138
|
+
kwargs["from"] = self.get_signer().get_ethereum_address()
|
|
139
|
+
|
|
140
|
+
transaction = await contract.functions[function_name](*args).build_transaction(
|
|
141
|
+
kwargs
|
|
142
|
+
)
|
|
128
143
|
|
|
129
|
-
if
|
|
144
|
+
if not self.has_signer():
|
|
130
145
|
return transaction
|
|
131
146
|
|
|
132
|
-
signed_txn = await self.sign_transaction(
|
|
147
|
+
signed_txn = await self.sign_transaction(transaction)
|
|
133
148
|
tx_hash = await self.send_and_get_transaction_hash(signed_txn)
|
|
134
149
|
return tx_hash
|
|
135
150
|
|
|
136
|
-
|
|
151
|
+
def set_signer(self, signer: BaseSigner):
|
|
152
|
+
"""
|
|
153
|
+
Sets the signer.
|
|
154
|
+
"""
|
|
155
|
+
self.signer = signer
|
|
156
|
+
|
|
157
|
+
def get_signer(self):
|
|
158
|
+
"""
|
|
159
|
+
Gets the signer.
|
|
160
|
+
"""
|
|
161
|
+
return self.signer
|
|
162
|
+
|
|
163
|
+
def remove_signer(self):
|
|
164
|
+
"""
|
|
165
|
+
Removes the signer.
|
|
166
|
+
"""
|
|
167
|
+
self.signer = None
|
|
168
|
+
|
|
169
|
+
def has_signer(self):
|
|
170
|
+
"""
|
|
171
|
+
Checks if the signer is set.
|
|
172
|
+
"""
|
|
173
|
+
return self.signer is not None
|
|
174
|
+
|
|
175
|
+
def set_local_signer(self, private_key):
|
|
176
|
+
"""
|
|
177
|
+
Sets the local signer.
|
|
178
|
+
"""
|
|
179
|
+
self.signer = LocalSigner(private_key, self.async_web3)
|
|
180
|
+
|
|
181
|
+
def set_aws_kms_signer(self, kms_key_id, region_name="us-east-1"):
|
|
182
|
+
"""
|
|
183
|
+
Sets the AWS KMS signer.
|
|
184
|
+
"""
|
|
185
|
+
self.signer = KMSSigner(self.async_web3, kms_key_id, region_name)
|
|
186
|
+
|
|
187
|
+
async def sign_transaction(self, transaction):
|
|
137
188
|
"""
|
|
138
189
|
Signs a transaction.
|
|
139
190
|
|
|
140
191
|
Args:
|
|
141
|
-
private_key: The private key of the wallet.
|
|
142
192
|
transaction: The transaction object.
|
|
143
193
|
|
|
144
194
|
Returns:
|
|
145
195
|
The signed transaction object.
|
|
146
196
|
"""
|
|
147
|
-
|
|
197
|
+
if not self.has_signer():
|
|
198
|
+
raise ValueError(
|
|
199
|
+
"No signer is set. Please set a signer using `set_signer`."
|
|
200
|
+
)
|
|
201
|
+
return await self.signer.sign_transaction(transaction)
|
|
148
202
|
|
|
149
203
|
async def send_and_get_transaction_hash(self, signed_txn):
|
|
150
204
|
"""
|
|
@@ -170,31 +224,34 @@ class TraderClient:
|
|
|
170
224
|
"""
|
|
171
225
|
return await self.async_web3.eth.wait_for_transaction_receipt(tx_hash)
|
|
172
226
|
|
|
173
|
-
async def sign_and_get_receipt(self,
|
|
227
|
+
async def sign_and_get_receipt(self, transaction):
|
|
174
228
|
"""
|
|
175
229
|
Signs a transaction and waits for it to be mined.
|
|
176
230
|
|
|
177
231
|
Args:
|
|
178
|
-
private_key: The private key of the wallet.
|
|
179
232
|
transaction: The transaction object.
|
|
180
233
|
|
|
181
234
|
Returns:
|
|
182
235
|
The transaction receipt.
|
|
183
236
|
"""
|
|
184
|
-
|
|
237
|
+
gas_estimate = await self.get_gas_estimate(transaction)
|
|
238
|
+
transaction["gas"] = gas_estimate
|
|
239
|
+
signed_txn = await self.sign_transaction(transaction)
|
|
185
240
|
tx_hash = await self.send_and_get_transaction_hash(signed_txn)
|
|
186
241
|
return await self.wait_for_transaction_receipt(tx_hash)
|
|
187
242
|
|
|
188
|
-
async def get_transaction_count(self, address):
|
|
243
|
+
async def get_transaction_count(self, address=None):
|
|
189
244
|
"""
|
|
190
245
|
Gets the transaction count.
|
|
191
246
|
|
|
192
247
|
Args:
|
|
193
|
-
address: The address.
|
|
248
|
+
address (optional): The address.
|
|
194
249
|
|
|
195
250
|
Returns:
|
|
196
251
|
The transaction count.
|
|
197
252
|
"""
|
|
253
|
+
if address is None:
|
|
254
|
+
address = self.get_signer().get_ethereum_address()
|
|
198
255
|
return await self.async_web3.eth.get_transaction_count(address)
|
|
199
256
|
|
|
200
257
|
async def get_gas_price(self):
|
|
@@ -215,31 +272,70 @@ class TraderClient:
|
|
|
215
272
|
"""
|
|
216
273
|
return await self.async_web3.eth.chain_id
|
|
217
274
|
|
|
218
|
-
async def get_balance(self, address):
|
|
275
|
+
async def get_balance(self, address=None):
|
|
219
276
|
"""
|
|
220
277
|
Gets the balance.
|
|
221
278
|
|
|
222
279
|
Args:
|
|
223
|
-
address: The address.
|
|
280
|
+
address (optional): The address.
|
|
224
281
|
|
|
225
282
|
Returns:
|
|
226
283
|
The balance.
|
|
227
284
|
"""
|
|
285
|
+
if address is None:
|
|
286
|
+
address = self.get_signer().get_ethereum_address()
|
|
228
287
|
return await self.async_web3.eth.get_balance(address)
|
|
229
288
|
|
|
230
|
-
async def get_usdc_balance(self, address):
|
|
289
|
+
async def get_usdc_balance(self, address=None):
|
|
231
290
|
"""
|
|
232
291
|
Gets the USDC balance.
|
|
233
292
|
|
|
234
293
|
Args:
|
|
235
|
-
address: The address.
|
|
294
|
+
address (optional): The address.
|
|
236
295
|
|
|
237
296
|
Returns:
|
|
238
297
|
The USDC balance.
|
|
239
298
|
"""
|
|
299
|
+
if address is None:
|
|
300
|
+
address = self.get_signer().get_ethereum_address()
|
|
240
301
|
balance = await self.read_contract("USDC", "balanceOf", address, decode=False)
|
|
241
302
|
return balance / 10**6
|
|
242
303
|
|
|
304
|
+
async def get_usdc_allowance_for_trading(self, address=None):
|
|
305
|
+
"""
|
|
306
|
+
Gets the USDC allowance for the Trading Storage contract.
|
|
307
|
+
|
|
308
|
+
Args:
|
|
309
|
+
address (optional): The address.
|
|
310
|
+
|
|
311
|
+
Returns:
|
|
312
|
+
The USDC allowance.
|
|
313
|
+
"""
|
|
314
|
+
if address is None:
|
|
315
|
+
address = self.get_signer().get_ethereum_address()
|
|
316
|
+
|
|
317
|
+
trading_storage_address = self.contracts["TradingStorage"].address
|
|
318
|
+
|
|
319
|
+
allowance = await self.read_contract(
|
|
320
|
+
"USDC", "allowance", address, trading_storage_address, decode=False
|
|
321
|
+
)
|
|
322
|
+
return allowance / 10**6
|
|
323
|
+
|
|
324
|
+
async def approve_usdc_for_trading(self, amount=100000):
|
|
325
|
+
"""
|
|
326
|
+
Approves the USDC amount for the Trading Storage contract.
|
|
327
|
+
|
|
328
|
+
Args:
|
|
329
|
+
amount (optional): The amount to approve. Defaults to $100,000.
|
|
330
|
+
|
|
331
|
+
Returns:
|
|
332
|
+
The transaction hash.
|
|
333
|
+
"""
|
|
334
|
+
trading_storage_address = self.contracts["TradingStorage"].address
|
|
335
|
+
return await self.write_contract(
|
|
336
|
+
"USDC", "approve", trading_storage_address, int(amount * 10**6)
|
|
337
|
+
)
|
|
338
|
+
|
|
243
339
|
async def get_gas_estimate(self, transaction):
|
|
244
340
|
"""
|
|
245
341
|
Gets the gas estimate.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
from typing import Tuple
|
|
2
|
+
|
|
3
|
+
from Crypto.Hash import keccak
|
|
4
|
+
from eth_account.account import Account
|
|
5
|
+
from eth_utils import to_checksum_address
|
|
6
|
+
from pyasn1.codec.der.decoder import decode as der_decode
|
|
7
|
+
from pyasn1.type import namedtype, univ
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class SPKIAlgorithmIdentifierRecord(univ.Sequence):
|
|
11
|
+
componentType = namedtype.NamedTypes(
|
|
12
|
+
namedtype.NamedType("algorithm", univ.ObjectIdentifier()),
|
|
13
|
+
namedtype.OptionalNamedType("parameters", univ.Any()),
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class SPKIRecord(univ.Sequence):
|
|
18
|
+
componentType = namedtype.NamedTypes(
|
|
19
|
+
namedtype.NamedType("algorithm", SPKIAlgorithmIdentifierRecord()),
|
|
20
|
+
namedtype.NamedType("subjectPublicKey", univ.BitString()),
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class ECDSASignatureRecord(univ.Sequence):
|
|
25
|
+
componentType = namedtype.NamedTypes(
|
|
26
|
+
namedtype.NamedType("r", univ.Integer()),
|
|
27
|
+
namedtype.NamedType("s", univ.Integer()),
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def public_key_int_to_eth_address(pubkey: int) -> str:
|
|
32
|
+
"""
|
|
33
|
+
Given an integer public key, calculate the ethereum address.
|
|
34
|
+
"""
|
|
35
|
+
hex_string = hex(pubkey).replace("0x", "")
|
|
36
|
+
padded_hex_string = hex_string.replace("0x", "").zfill(130)[2:]
|
|
37
|
+
|
|
38
|
+
k = keccak.new(digest_bits=256)
|
|
39
|
+
k.update(bytes.fromhex(padded_hex_string))
|
|
40
|
+
return to_checksum_address(bytes.fromhex(k.hexdigest())[-20:].hex())
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def der_encoded_public_key_to_eth_address(pubkey: bytes) -> str:
|
|
44
|
+
"""
|
|
45
|
+
Given a KMS Public Key, calculate the ethereum address.
|
|
46
|
+
"""
|
|
47
|
+
received_record, _ = der_decode(pubkey, asn1Spec=SPKIRecord())
|
|
48
|
+
return public_key_int_to_eth_address(
|
|
49
|
+
int(received_record["subjectPublicKey"].asBinary(), 2)
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def get_sig_r_s(signature: bytes) -> Tuple[int, int]:
|
|
54
|
+
"""
|
|
55
|
+
Given a KMS signature, calculate r and s.
|
|
56
|
+
"""
|
|
57
|
+
received_record, _ = der_decode(signature, asn1Spec=ECDSASignatureRecord())
|
|
58
|
+
r = int(received_record["r"].prettyPrint())
|
|
59
|
+
s = int(received_record["s"].prettyPrint())
|
|
60
|
+
|
|
61
|
+
max_value_on_curve = (
|
|
62
|
+
0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
if 2 * s >= max_value_on_curve:
|
|
66
|
+
# s is on wrong side of curve, flip it
|
|
67
|
+
s = max_value_on_curve - s
|
|
68
|
+
return r, s
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def get_sig_v(msg_hash: bytes, r: int, s: int, expected_address: str) -> int:
|
|
72
|
+
"""
|
|
73
|
+
Given a message hash, r, s and an ethereum address, recover the
|
|
74
|
+
recovery parameter v.
|
|
75
|
+
"""
|
|
76
|
+
acc = Account()
|
|
77
|
+
recovered = acc._recover_hash(msg_hash, vrs=(27, r, s))
|
|
78
|
+
recovered2 = acc._recover_hash(msg_hash, vrs=(28, r, s))
|
|
79
|
+
expected_checksum_address = to_checksum_address(expected_address)
|
|
80
|
+
|
|
81
|
+
if recovered == expected_checksum_address:
|
|
82
|
+
return 0
|
|
83
|
+
elif recovered2 == expected_checksum_address:
|
|
84
|
+
return 1
|
|
85
|
+
|
|
86
|
+
raise ValueError("Invalid Signature, cannot compute v, addresses do not match!")
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def get_sig_r_s_v(
|
|
90
|
+
msg_hash: bytes, signature: bytes, address: str
|
|
91
|
+
) -> Tuple[int, int, int]:
|
|
92
|
+
"""
|
|
93
|
+
Given a message hash, a KMS signature and an ethereum address calculate r,
|
|
94
|
+
s, and v.
|
|
95
|
+
"""
|
|
96
|
+
r, s = get_sig_r_s(signature)
|
|
97
|
+
v = get_sig_v(msg_hash, r, s, address)
|
|
98
|
+
return r, s, v
|
|
@@ -182,5 +182,33 @@
|
|
|
182
182
|
"XAU/USD": {
|
|
183
183
|
"id": "0x765d2ba906dbc32ca17cc11f5310a89e9ee1f6420508c63861f2f8ba4ee34bb2",
|
|
184
184
|
"group": "metal"
|
|
185
|
+
},
|
|
186
|
+
"ZRO/USD": {
|
|
187
|
+
"id": "0x3bd860bea28bf982fa06bcf358118064bb114086cc03993bd76197eaab0b8018",
|
|
188
|
+
"group": "crypto"
|
|
189
|
+
},
|
|
190
|
+
"INJ/USD": {
|
|
191
|
+
"id": "0x7a5bc1d2b56ad029048cd63964b3ad2776eadf812edc1a43a31406cb54bff592",
|
|
192
|
+
"group": "crypto"
|
|
193
|
+
},
|
|
194
|
+
"ZK/USD": {
|
|
195
|
+
"id": "0xcc03dc09298fb447e0bf9afdb760d5b24340fd2167fd33d8967dd8f9a141a2e8",
|
|
196
|
+
"group": "crypto"
|
|
197
|
+
},
|
|
198
|
+
"AAVE/USD": {
|
|
199
|
+
"id": "0x2b9ab1e972a281585084148ba1389800799bd4be63b957507db1349314e47445",
|
|
200
|
+
"group": "crypto"
|
|
201
|
+
},
|
|
202
|
+
"SUI/USD": {
|
|
203
|
+
"id": "0x23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
|
|
204
|
+
"group": "crypto"
|
|
205
|
+
},
|
|
206
|
+
"TAO/USD": {
|
|
207
|
+
"id": "0x410f41de235f2db824e562ea7ab2d3d3d4ff048316c61d629c0b93f58584e1af",
|
|
208
|
+
"group": "crypto"
|
|
209
|
+
},
|
|
210
|
+
"EIGEN/USD": {
|
|
211
|
+
"id": "0xc65db025687356496e8653d0d6608eec64ce2d96e2e28c530e574f0e4f712380",
|
|
212
|
+
"group": "crypto"
|
|
185
213
|
}
|
|
186
214
|
}
|
{avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/rpc/fee_parameters.py
RENAMED
|
@@ -75,28 +75,19 @@ class FeeParametersRPC:
|
|
|
75
75
|
is_long: Optional[bool] = None,
|
|
76
76
|
pair_index: int = None,
|
|
77
77
|
pair: str = None,
|
|
78
|
-
trade_input: TradeInput = None,
|
|
79
78
|
):
|
|
80
79
|
"""
|
|
81
|
-
Retrieves the opening fee for all trading pairs.
|
|
80
|
+
Retrieves the opening fee for all trading pairs in bps.
|
|
82
81
|
|
|
83
82
|
Args:
|
|
84
83
|
is_long: A boolean indicating if the position is a buy or sell. Defaults to None. If None, the opening fee for both buy and sell will be returned.
|
|
85
84
|
position_size: The size of the position (collateral * leverage). Supports upto 6 decimals. Defaults to 0.
|
|
86
85
|
pair_index: The pair index for which the opening fee is to be calculated. Defaults to None. If None, the opening fee for all trading pairs will be returned.
|
|
87
86
|
pair: The trading pair for which the opening fee is to be calculated. Defaults to None. If None, the opening fee for all trading pairs will be returned.
|
|
88
|
-
trade_input: The trade input object. Defaults to None. If provided, the pair index will be extracted from the trade input.
|
|
89
87
|
|
|
90
88
|
Returns:
|
|
91
|
-
A Fee instance containing the opening Fee for each trading pair in bps
|
|
89
|
+
A Fee instance containing the opening Fee for each trading pair in bps.
|
|
92
90
|
"""
|
|
93
|
-
if trade_input is not None:
|
|
94
|
-
position_size = (
|
|
95
|
-
trade_input.positionSizeUSDC / 10**6 * trade_input.leverage / 10**10
|
|
96
|
-
)
|
|
97
|
-
pair_index = trade_input.pairIndex
|
|
98
|
-
is_long = trade_input.buy
|
|
99
|
-
|
|
100
91
|
position_size = int(position_size * 10**6)
|
|
101
92
|
|
|
102
93
|
Multicall = self.client.contracts.get("Multicall")
|
|
@@ -204,16 +195,43 @@ class FeeParametersRPC:
|
|
|
204
195
|
],
|
|
205
196
|
)
|
|
206
197
|
return Fee(short=decoded_response)
|
|
207
|
-
elif trade_input is not None:
|
|
208
|
-
referral_rebate_percentage = await self.client.trading_parameters.get_trade_referral_rebate_percentage(
|
|
209
|
-
trade_input.trader
|
|
210
|
-
)
|
|
211
|
-
referral_rebate_percentage = 1 - (referral_rebate_percentage / 100)
|
|
212
|
-
return round(
|
|
213
|
-
response / 10**12 * position_size / 10**6 * referral_rebate_percentage,
|
|
214
|
-
18,
|
|
215
|
-
)
|
|
216
198
|
elif is_long:
|
|
217
199
|
return Fee(long={pair: response / 10**10 * 100})
|
|
218
200
|
else:
|
|
219
201
|
return Fee(short={pair: response / 10**10 * 100})
|
|
202
|
+
|
|
203
|
+
async def get_new_trade_opening_fee(
|
|
204
|
+
self,
|
|
205
|
+
trade_input: TradeInput,
|
|
206
|
+
):
|
|
207
|
+
"""
|
|
208
|
+
Retrieves the opening fee for a trade with referral rebate in USDC.
|
|
209
|
+
|
|
210
|
+
Args:
|
|
211
|
+
trade_input: The trade input object.
|
|
212
|
+
|
|
213
|
+
Returns:
|
|
214
|
+
Final opening fee in USDC
|
|
215
|
+
"""
|
|
216
|
+
position_size = (
|
|
217
|
+
trade_input.positionSizeUSDC / 10**6 * trade_input.leverage / 10**10
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
position_size = int(position_size * 10**6)
|
|
221
|
+
|
|
222
|
+
PriceAggregator = self.client.contracts.get("PriceAggregator")
|
|
223
|
+
|
|
224
|
+
response = await PriceAggregator.functions.openFeeP(
|
|
225
|
+
trade_input.pairIndex, position_size, trade_input.buy
|
|
226
|
+
).call()
|
|
227
|
+
|
|
228
|
+
referral_rebate_percentage = (
|
|
229
|
+
await self.client.trading_parameters.get_trade_referral_rebate_percentage(
|
|
230
|
+
trade_input.trader
|
|
231
|
+
)
|
|
232
|
+
)
|
|
233
|
+
referral_rebate_percentage = 1 - (referral_rebate_percentage / 100)
|
|
234
|
+
return round(
|
|
235
|
+
response / 10**12 * position_size / 10**6 * referral_rebate_percentage,
|
|
236
|
+
18,
|
|
237
|
+
)
|
|
@@ -46,6 +46,9 @@ class PairsCache:
|
|
|
46
46
|
decoded_data.append(PairInfo(**decoded))
|
|
47
47
|
|
|
48
48
|
for index, pair_info in enumerate(decoded_data):
|
|
49
|
+
if not pair_info.from_:
|
|
50
|
+
pair_info.from_ = f"DELISTED_{index}"
|
|
51
|
+
pair_info.to = f"DELISTED_{index}"
|
|
49
52
|
self._pair_info_cache[index] = pair_info
|
|
50
53
|
|
|
51
54
|
group_indexes = set([pair.group_index for pair in decoded_data])
|
|
@@ -7,6 +7,7 @@ from ..types import (
|
|
|
7
7
|
PendingLimitOrderExtendedResponse,
|
|
8
8
|
MarginUpdateType,
|
|
9
9
|
)
|
|
10
|
+
from typing import Optional
|
|
10
11
|
import math
|
|
11
12
|
|
|
12
13
|
|
|
@@ -31,6 +32,7 @@ class TradeRPC:
|
|
|
31
32
|
trade_input: TradeInput,
|
|
32
33
|
trade_input_order_type: TradeInputOrderType,
|
|
33
34
|
slippage_percentage: int,
|
|
35
|
+
execution_fee: Optional[float] = None,
|
|
34
36
|
):
|
|
35
37
|
"""
|
|
36
38
|
Builds a transaction to open a trade.
|
|
@@ -45,7 +47,16 @@ class TradeRPC:
|
|
|
45
47
|
"""
|
|
46
48
|
Trading = self.client.contracts.get("Trading")
|
|
47
49
|
|
|
48
|
-
|
|
50
|
+
if (
|
|
51
|
+
trade_input.trader == "0x1234567890123456789012345678901234567890"
|
|
52
|
+
and self.client.get_signer() is not None
|
|
53
|
+
):
|
|
54
|
+
trade_input.trader = await self.client.get_signer().get_ethereum_address()
|
|
55
|
+
|
|
56
|
+
if execution_fee is not None:
|
|
57
|
+
execution_fee_wei = int(execution_fee * 10**18)
|
|
58
|
+
else:
|
|
59
|
+
execution_fee_wei = await self.get_trade_execution_fee()
|
|
49
60
|
|
|
50
61
|
if (
|
|
51
62
|
trade_input_order_type == TradeInputOrderType.MARKET
|
|
@@ -73,7 +84,7 @@ class TradeRPC:
|
|
|
73
84
|
).build_transaction(
|
|
74
85
|
{
|
|
75
86
|
"from": trade_input.trader,
|
|
76
|
-
"value":
|
|
87
|
+
"value": execution_fee_wei,
|
|
77
88
|
"chainId": self.client.chain_id,
|
|
78
89
|
"nonce": await self.client.get_transaction_count(trade_input.trader),
|
|
79
90
|
}
|
|
@@ -89,6 +100,7 @@ class TradeRPC:
|
|
|
89
100
|
The trade execution fee
|
|
90
101
|
"""
|
|
91
102
|
execution_fee = round(0.00035, 18) # default value
|
|
103
|
+
execution_fee_wei = int(execution_fee * 10**18)
|
|
92
104
|
|
|
93
105
|
try:
|
|
94
106
|
feeScalar = 0.001
|
|
@@ -107,9 +119,9 @@ class TradeRPC:
|
|
|
107
119
|
return feeEstimate
|
|
108
120
|
except Exception as e:
|
|
109
121
|
print("Error getting correct trade execution fee. Using fallback: ", e)
|
|
110
|
-
return
|
|
122
|
+
return execution_fee_wei
|
|
111
123
|
|
|
112
|
-
async def get_trades(self, trader: str):
|
|
124
|
+
async def get_trades(self, trader: Optional[str] = None):
|
|
113
125
|
"""
|
|
114
126
|
Gets the trades.
|
|
115
127
|
|
|
@@ -119,6 +131,9 @@ class TradeRPC:
|
|
|
119
131
|
Returns:
|
|
120
132
|
The trades.
|
|
121
133
|
"""
|
|
134
|
+
if trader is None:
|
|
135
|
+
trader = self.client.get_signer().get_ethereum_address()
|
|
136
|
+
|
|
122
137
|
result = (
|
|
123
138
|
await self.client.contracts.get("Multicall")
|
|
124
139
|
.functions.getPositions(trader)
|
|
@@ -198,7 +213,11 @@ class TradeRPC:
|
|
|
198
213
|
return trades, pendingOpenLimitOrders
|
|
199
214
|
|
|
200
215
|
async def build_trade_close_tx(
|
|
201
|
-
self,
|
|
216
|
+
self,
|
|
217
|
+
pair_index: int,
|
|
218
|
+
trade_index: int,
|
|
219
|
+
collateral_to_close: float,
|
|
220
|
+
trader: Optional[str] = None,
|
|
202
221
|
):
|
|
203
222
|
"""
|
|
204
223
|
Builds a transaction to close a trade.
|
|
@@ -207,12 +226,16 @@ class TradeRPC:
|
|
|
207
226
|
pair_index: The pair index.
|
|
208
227
|
trade_index: The trade index.
|
|
209
228
|
collateral_to_close: The collateral to close.
|
|
229
|
+
trader (optional): The trader's wallet address.
|
|
210
230
|
|
|
211
231
|
Returns:
|
|
212
232
|
A transaction object.
|
|
213
233
|
"""
|
|
214
234
|
Trading = self.client.contracts.get("Trading")
|
|
215
235
|
|
|
236
|
+
if trader is None:
|
|
237
|
+
trader = self.client.get_signer().get_ethereum_address()
|
|
238
|
+
|
|
216
239
|
execution_fee = await self.get_trade_execution_fee()
|
|
217
240
|
|
|
218
241
|
transaction = await Trading.functions.closeTradeMarket(
|
|
@@ -229,7 +252,7 @@ class TradeRPC:
|
|
|
229
252
|
return transaction
|
|
230
253
|
|
|
231
254
|
async def build_order_cancel_tx(
|
|
232
|
-
self,
|
|
255
|
+
self, pair_index: int, trade_index: int, trader: Optional[str] = None
|
|
233
256
|
):
|
|
234
257
|
"""
|
|
235
258
|
Builds a transaction to cancel an order.
|
|
@@ -237,13 +260,16 @@ class TradeRPC:
|
|
|
237
260
|
Args:
|
|
238
261
|
pair_index: The pair index.
|
|
239
262
|
trade_index: The trade/order index.
|
|
240
|
-
|
|
263
|
+
trader (optional): The trader's wallet address.
|
|
241
264
|
|
|
242
265
|
Returns:
|
|
243
266
|
A transaction object.
|
|
244
267
|
"""
|
|
245
268
|
Trading = self.client.contracts.get("Trading")
|
|
246
269
|
|
|
270
|
+
if trader is None:
|
|
271
|
+
trader = self.client.get_signer().get_ethereum_address()
|
|
272
|
+
|
|
247
273
|
transaction = await Trading.functions.cancelOpenLimitOrder(
|
|
248
274
|
pair_index, trade_index
|
|
249
275
|
).build_transaction(
|
|
@@ -258,11 +284,11 @@ class TradeRPC:
|
|
|
258
284
|
|
|
259
285
|
async def build_trade_margin_update_tx(
|
|
260
286
|
self,
|
|
261
|
-
trader: str,
|
|
262
287
|
pair_index: int,
|
|
263
288
|
trade_index: int,
|
|
264
289
|
margin_update_type: MarginUpdateType,
|
|
265
290
|
collateral_change: float,
|
|
291
|
+
trader: Optional[str] = None,
|
|
266
292
|
):
|
|
267
293
|
"""
|
|
268
294
|
Builds a transaction to update the margin of a trade.
|
|
@@ -272,12 +298,15 @@ class TradeRPC:
|
|
|
272
298
|
trade_index: The trade index.
|
|
273
299
|
margin_update_type: The margin update type.
|
|
274
300
|
collateral_change: The collateral change.
|
|
275
|
-
|
|
301
|
+
trader (optional): The trader's wallet address.
|
|
276
302
|
Returns:
|
|
277
303
|
A transaction object.
|
|
278
304
|
"""
|
|
279
305
|
Trading = self.client.contracts.get("Trading")
|
|
280
306
|
|
|
307
|
+
if trader is None:
|
|
308
|
+
trader = self.client.get_signer().get_ethereum_address()
|
|
309
|
+
|
|
281
310
|
collateral_change = int(collateral_change * 10**6)
|
|
282
311
|
fee_in_wei = 1 * 10**18
|
|
283
312
|
|