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.
Files changed (225) hide show
  1. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/PKG-INFO +7 -1
  2. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/README.md +6 -0
  3. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/__init__.py +1 -0
  4. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/client.py +117 -21
  5. avantis_trader_sdk-0.4.0/avantis_trader_sdk/crypto/spki.py +98 -0
  6. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/feed/feedIds.json +28 -0
  7. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/rpc/fee_parameters.py +38 -20
  8. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/rpc/pairs_cache.py +3 -0
  9. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/rpc/trade.py +38 -9
  10. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/rpc/trading_parameters.py +8 -3
  11. avantis_trader_sdk-0.4.0/avantis_trader_sdk/signers/base.py +15 -0
  12. avantis_trader_sdk-0.4.0/avantis_trader_sdk/signers/kms_signer.py +146 -0
  13. avantis_trader_sdk-0.4.0/avantis_trader_sdk/signers/local_signer.py +16 -0
  14. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk.egg-info/PKG-INFO +7 -1
  15. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk.egg-info/SOURCES.txt +6 -0
  16. avantis_trader_sdk-0.4.0/avantis_trader_sdk.egg-info/requires.txt +8 -0
  17. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/setup.py +11 -2
  18. avantis_trader_sdk-0.4.0/tests/__init__.py +0 -0
  19. avantis_trader_sdk-0.4.0/tests/test_client.py +0 -0
  20. avantis_trader_sdk-0.2.1/avantis_trader_sdk.egg-info/requires.txt +0 -3
  21. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/MANIFEST.in +0 -0
  22. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ABDK.t.sol/ABDKTest.json +0 -0
  23. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/AbstractPyth.sol/AbstractPyth.json +0 -0
  24. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/AccessControl.sol/AccessControl.json +0 -0
  25. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Address.sol/Address.json +0 -0
  26. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Address.sol/Addresses.json +0 -0
  27. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/AddressUpgradeable.sol/AddressUpgradeable.json +0 -0
  28. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/AggregatorInterface.sol/AggregatorInterface.json +0 -0
  29. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/AggregatorV2V3Interface.sol/AggregatorV2V3Interface.json +0 -0
  30. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/AggregatorV3Interface.json +0 -0
  31. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/AggregatorV3Interface.sol/AggregatorV3Interface.json +0 -0
  32. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/BackupOracle.t.sol/BackupOracle.json +0 -0
  33. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Base.sol/CommonBase.json +0 -0
  34. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Base.sol/ScriptBase.json +0 -0
  35. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Base.sol/TestBase.json +0 -0
  36. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Base.t.sol/Base.json +0 -0
  37. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Constants.sol/Constants.json +0 -0
  38. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Context.sol/Context.json +0 -0
  39. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ContextUpgradeable.sol/ContextUpgradeable.json +0 -0
  40. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Counters.sol/Counters.json +0 -0
  41. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ERC165.sol/ERC165.json +0 -0
  42. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ERC165Upgradeable.sol/ERC165Upgradeable.json +0 -0
  43. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.json +0 -0
  44. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ERC1967/ERC1967Upgrade.sol/ERC1967Upgrade.json +0 -0
  45. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ERC1967Proxy.sol/ERC1967Proxy.json +0 -0
  46. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ERC1967Upgrade.sol/ERC1967Upgrade.json +0 -0
  47. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ERC20.sol/ERC20.json +0 -0
  48. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ERC20Upgradeable.sol/ERC20Upgradeable.json +0 -0
  49. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ERC4626Upgradeable.sol/ERC4626Upgradeable.json +0 -0
  50. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ERC721Upgradeable.sol/ERC721Upgradeable.json +0 -0
  51. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Execute.sol/Execute.json +0 -0
  52. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IAccessControl.sol/IAccessControl.json +0 -0
  53. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IBeacon.sol/IBeacon.json +0 -0
  54. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ICallbacks.sol/ICallbacks.json +0 -0
  55. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC1155Receiver.sol/IERC1155Receiver.json +0 -0
  56. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC165.sol/IERC165.json +0 -0
  57. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC165Upgradeable.sol/IERC165Upgradeable.json +0 -0
  58. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC1967.sol/IERC1967.json +0 -0
  59. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC20.sol/IERC20.json +0 -0
  60. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC20Metadata.sol/IERC20Metadata.json +0 -0
  61. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC20MetadataUpgradeable.sol/IERC20MetadataUpgradeable.json +0 -0
  62. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC20Permit.sol/IERC20Permit.json +0 -0
  63. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC20PermitUpgradeable.sol/IERC20PermitUpgradeable.json +0 -0
  64. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC20Upgradeable.sol/IERC20Upgradeable.json +0 -0
  65. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC4626.sol/IERC4626.json +0 -0
  66. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC4626Upgradeable.sol/IERC4626Upgradeable.json +0 -0
  67. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC721MetadataUpgradeable.sol/IERC721MetadataUpgradeable.json +0 -0
  68. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC721Receiver.sol/IERC721Receiver.json +0 -0
  69. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC721ReceiverUpgradeable.sol/IERC721ReceiverUpgradeable.json +0 -0
  70. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IERC721Upgradeable.sol/IERC721Upgradeable.json +0 -0
  71. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IExecute.sol/IExecute.json +0 -0
  72. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IMulticall.sol/IExtendedPairInfos.json +0 -0
  73. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IMulticall.sol/IExtendedPairStorage.json +0 -0
  74. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IMulticall.sol/IExtendedTrading.json +0 -0
  75. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IMulticall.sol/IMulticall.json +0 -0
  76. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IMulticall3.sol/IMulticall3.json +0 -0
  77. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IPairInfos.sol/IPairInfos.json +0 -0
  78. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IPairStorage.sol/IPairStorage.json +0 -0
  79. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IPausable.sol/IPausable.json +0 -0
  80. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IPriceAggregator.sol/IPriceAggregator.json +0 -0
  81. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IPyth.sol/IPyth.dbg.json +0 -0
  82. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IPyth.sol/IPyth.json +0 -0
  83. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IPythEvents.sol/IPythEvents.json +0 -0
  84. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IReferral.sol/IReferral.json +0 -0
  85. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ITradingStorage.sol/ITradingStorage.json +0 -0
  86. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ITranche.sol/ITranche.json +0 -0
  87. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IVaultManager.sol/IVaultManager.json +0 -0
  88. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IVeTranche.sol/IVeTranche.json +0 -0
  89. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Initializable.sol/Initializable.json +0 -0
  90. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/IsolatedMargin.t.sol/IsolatedMargin.json +0 -0
  91. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/LimitTrade.t.sol/LimitTrade.json +0 -0
  92. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/LiquidBase.t.sol/LiquidBase.json +0 -0
  93. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/LiquidateTrade.t.sol/LiquidateTrade.json +0 -0
  94. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/LossProtection.t.sol/LossProtection.json +0 -0
  95. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/MarketTrade.t.sol/MarketTrade.json +0 -0
  96. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Math.sol/Math.json +0 -0
  97. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/MathUpgradeable.sol/MathUpgradeable.json +0 -0
  98. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/MockPyth.sol/MockPyth.json +0 -0
  99. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/MockV3Aggregator.sol/MockV3Aggregator.json +0 -0
  100. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Multicall.sol/Multicall.json +0 -0
  101. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Multicall.t.sol/MulticallGroup.json +0 -0
  102. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Multicall3.sol/Multicall3.json +0 -0
  103. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Ownable.sol/Ownable.json +0 -0
  104. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/PairInfos.sol/PairInfos.json +0 -0
  105. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/PairStorage.sol/PairStorage.json +0 -0
  106. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/PausableUpgradeable.sol/PausableUpgradeable.json +0 -0
  107. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/PositionMath.sol/PositionMath.json +0 -0
  108. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/PriceAggregator.sol/PriceAggregator.json +0 -0
  109. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Proxy.sol/Proxy.json +0 -0
  110. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ProxyAdmin.sol/ProxyAdmin.json +0 -0
  111. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/PythErrors.sol/PythErrors.json +0 -0
  112. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/PythStructs.sol/PythStructs.json +0 -0
  113. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/ReentrancyGuardUpgradeable.sol/ReentrancyGuardUpgradeable.json +0 -0
  114. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Referral.sol/Referral.json +0 -0
  115. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Referral.sol/ReferralStorage.json +0 -0
  116. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Referral.t.sol/Referral.json +0 -0
  117. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/SafeERC20.sol/SafeERC20.json +0 -0
  118. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/SafeERC20Upgradeable.sol/SafeERC20Upgradeable.json +0 -0
  119. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Sanctions.json +0 -0
  120. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Script.sol/Script.json +0 -0
  121. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Setters.t.sol/Setters.json +0 -0
  122. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/SignedMath.sol/SignedMath.json +0 -0
  123. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/SignedMathUpgradeable.sol/SignedMathUpgradeable.json +0 -0
  124. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/SkewedBase.t.sol/SkewedBase.json +0 -0
  125. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdAssertions.sol/StdAssertions.json +0 -0
  126. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdChains.sol/StdChains.json +0 -0
  127. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdCheats.sol/StdCheats.json +0 -0
  128. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdCheats.sol/StdCheatsSafe.json +0 -0
  129. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdError.sol/stdError.json +0 -0
  130. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdInvariant.sol/StdInvariant.json +0 -0
  131. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdJson.sol/stdJson.json +0 -0
  132. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdMath.sol/stdMath.json +0 -0
  133. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdStorage.sol/stdStorage.json +0 -0
  134. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdStorage.sol/stdStorageSafe.json +0 -0
  135. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdStyle.sol/StdStyle.json +0 -0
  136. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StdUtils.sol/StdUtils.json +0 -0
  137. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StopLimit.t.sol/StopLimitTrade.json +0 -0
  138. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StorageSlot.sol/StorageSlot.json +0 -0
  139. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Strings.sol/Strings.json +0 -0
  140. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/StringsUpgradeable.sol/StringsUpgradeable.json +0 -0
  141. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Timelock.sol/AvantisTimelockOwner.json +0 -0
  142. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Timelock.t.sol/Timelock.json +0 -0
  143. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/TimelockBase.t.sol/TimelockBase.json +0 -0
  144. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/TimelockController.sol/TimelockController.json +0 -0
  145. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/TradeBase.t.sol/TradeBase.json +0 -0
  146. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Trading.sol/Trading.json +0 -0
  147. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/TradingCallbacks.sol/TradingCallbacks.json +0 -0
  148. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/TradingStorage.sol/TradingStorage.json +0 -0
  149. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Tranche.sol/Tranche.json +0 -0
  150. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.json +0 -0
  151. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json +0 -0
  152. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/USDC.sol/USDC.dbg.json +0 -0
  153. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/USDC.sol/USDC.json +0 -0
  154. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Upgradability.t.sol/Upgradability.json +0 -0
  155. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Vault.t.sol/Vault.json +0 -0
  156. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/VaultManager.sol/VaultManager.json +0 -0
  157. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/VeTranche.sol/VeTranche.json +0 -0
  158. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Vm.sol/Vm.json +0 -0
  159. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/Vm.sol/VmSafe.json +0 -0
  160. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/__init__.py +0 -0
  161. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/abdkQuadMathExt.sol/ABDKMathQuadExt.json +0 -0
  162. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/beacon/IBeacon.sol/IBeacon.json +0 -0
  163. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/console.sol/console.json +0 -0
  164. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/console2.sol/console2.json +0 -0
  165. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/contracts/proxy/Proxy.sol/Proxy.json +0 -0
  166. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/deployBase.s.sol/DeployScript.json +0 -0
  167. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/deployBaseMulticall.s.sol/MulticallDeployScript.json +0 -0
  168. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/draft-IERC1822.sol/IERC1822Proxiable.json +0 -0
  169. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/getPair.s.sol/UpdateScript.json +0 -0
  170. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/getTrade.s.sol/UpdateScript.json +0 -0
  171. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/getTranche.s.sol/UpdateScript.json +0 -0
  172. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/interfaces/ICallbacks.sol/ICallbacks.json +0 -0
  173. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/interfaces/IExecute.sol/IExecute.json +0 -0
  174. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/interfaces/IPairInfos.sol/IPairInfos.json +0 -0
  175. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/interfaces/IPairStorage.sol/IPairStorage.json +0 -0
  176. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/interfaces/IPriceAggregator.sol/IPriceAggregator.json +0 -0
  177. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/interfaces/IReferral.sol/IReferral.json +0 -0
  178. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/interfaces/ITradingStorage.sol/ITradingStorage.json +0 -0
  179. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/interfaces/ITranche.sol/ITranche.json +0 -0
  180. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/interfaces/IVaultManager.sol/IVaultManager.json +0 -0
  181. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/interfaces/IVeTranche.sol/IVeTranche.json +0 -0
  182. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/library/PositionMath.sol/PositionMath.dbg.json +0 -0
  183. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/library/PositionMath.sol/PositionMath.json +0 -0
  184. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/liquidityBase.s.sol/LiquidityScript.json +0 -0
  185. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/lp.s.sol/Lp.json +0 -0
  186. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.json +0 -0
  187. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/proxy/ERC1967/ERC1967Upgrade.sol/ERC1967Upgrade.json +0 -0
  188. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/proxy/Proxy.sol/Proxy.json +0 -0
  189. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/proxy/beacon/IBeacon.sol/IBeacon.json +0 -0
  190. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.json +0 -0
  191. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.json +0 -0
  192. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json +0 -0
  193. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/safeconsole.sol/safeconsole.json +0 -0
  194. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/setupLossProtection.s.sol/SetupLossProtection.json +0 -0
  195. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/setupPairs.s.sol/SetupPairs.json +0 -0
  196. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/setupTimelock.s.sol/SetupTimelock.json +0 -0
  197. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/setupTimelock.sol/SetupTimelock.json +0 -0
  198. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/test.sol/DSTest.json +0 -0
  199. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/test.sol/Test.json +0 -0
  200. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/testnet/USDC.sol/USDC.dbg.json +0 -0
  201. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/testnet/USDC.sol/USDC.json +0 -0
  202. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/transparent/ProxyAdmin.sol/ProxyAdmin.json +0 -0
  203. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.json +0 -0
  204. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json +0 -0
  205. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/updateBase.s.sol/UpdateScript.json +0 -0
  206. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/updateOP.s.sol/UpdateScript.json +0 -0
  207. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/upgradesBase.s.sol/UpgradeScript.json +0 -0
  208. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/veTranche.t.sol/veTranche.json +0 -0
  209. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/abis/wire.s.sol/Wire.json +0 -0
  210. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/config.py +0 -0
  211. {avantis_trader_sdk-0.2.1/avantis_trader_sdk/feed → avantis_trader_sdk-0.4.0/avantis_trader_sdk/crypto}/__init__.py +0 -0
  212. {avantis_trader_sdk-0.2.1/avantis_trader_sdk/rpc → avantis_trader_sdk-0.4.0/avantis_trader_sdk/feed}/__init__.py +0 -0
  213. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/feed/feed_client.py +0 -0
  214. {avantis_trader_sdk-0.2.1/tests → avantis_trader_sdk-0.4.0/avantis_trader_sdk/rpc}/__init__.py +0 -0
  215. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/rpc/asset_parameters.py +0 -0
  216. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/rpc/blended.py +0 -0
  217. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/rpc/category_parameters.py +0 -0
  218. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/rpc/rpc_helpers.py +0 -0
  219. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/rpc/snapshot.py +0 -0
  220. /avantis_trader_sdk-0.2.1/tests/test_client.py → /avantis_trader_sdk-0.4.0/avantis_trader_sdk/signers/__init__.py +0 -0
  221. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/types.py +0 -0
  222. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk/utils.py +0 -0
  223. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk.egg-info/dependency_links.txt +0 -0
  224. {avantis_trader_sdk-0.2.1 → avantis_trader_sdk-0.4.0}/avantis_trader_sdk.egg-info/top_level.txt +0 -0
  225. {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.2.1
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
  ```
@@ -1,4 +1,5 @@
1
1
  from .client import TraderClient
2
2
  from .feed.feed_client import FeedClient
3
+ from .signers.base import BaseSigner
3
4
 
4
5
  __version__ = "0.2.1"
@@ -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__(self, provider_url, l1_provider_url="https://eth.llamarpc.com"):
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 private key is None.
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
- transaction = contract.functions[function_name](*args).build_transaction(kwargs)
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 private_key is None:
144
+ if not self.has_signer():
130
145
  return transaction
131
146
 
132
- signed_txn = await self.sign_transaction(private_key, 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
- async def sign_transaction(self, private_key, transaction):
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
- return self.async_web3.eth.account.sign_transaction(transaction, private_key)
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, private_key, transaction):
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
- signed_txn = await self.sign_transaction(private_key, transaction)
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
  }
@@ -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 or final opening fee in USDC if trade_input is provided.
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
- execution_fee = await self.get_trade_execution_fee()
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": execution_fee,
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 execution_fee
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, trader: str, pair_index: int, trade_index: int, collateral_to_close: float
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, trader: str, pair_index: int, trade_index: int
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
- position_size: The position size.
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