Skip to content
This repository has been archived by the owner on Feb 6, 2023. It is now read-only.

Commit

Permalink
Add amount quantization to deposit, withdraw, buy and sell
Browse files Browse the repository at this point in the history
  • Loading branch information
holgern committed Mar 20, 2019
1 parent c0b7e8d commit 63ee650
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 17 deletions.
48 changes: 32 additions & 16 deletions steemengine/market.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@
import json
from timeit import default_timer as timer
import logging
import decimal
from steemengine.api import Api
from steemengine.tokens import Tokens
from steemengine.tokenobject import Token
from steemengine.wallet import Wallet
from steemengine.exceptions import (TokenDoesNotExists, TokenNotInWallet, InsufficientTokenAmount)
from steemengine.exceptions import (TokenDoesNotExists, TokenNotInWallet, InsufficientTokenAmount, InvalidTokenAmount)
from beem.instance import shared_steem_instance
from beem.account import Account

Expand Down Expand Up @@ -90,12 +92,16 @@ def withdraw(self, account, amount):
market.withdraw("test", 1)
"""
wallet = Wallet(account, steem_instance=self.steem)
token = wallet.get_token("STEEMP")
if token is None:
token_in_wallet = wallet.get_token("STEEMP")
if token_in_wallet is None:
raise TokenNotInWallet("%s is not in wallet." % "STEEMP")
if float(token["balance"]) < float(amount):
raise InsufficientTokenAmount("Only %.3f in wallet" % float(token["balance"]))
contract_payload = {"quantity":str(amount)}
if float(token_in_wallet["balance"]) < float(amount):
raise InsufficientTokenAmount("Only %.3f in wallet" % float(token_in_wallet["balance"]))
token = Token("STEEMP")
quant_amount = token.quantize(amount)
if quant_amount <= decimal.Decimal("0"):
raise InvalidTokenAmount("Amount to transfer is below token precision of %d" % token["precision"])
contract_payload = {"quantity":str(quant_amount)}
json_data = {"contractName":"steempegged","contractAction":"withdraw",
"contractPayload":contract_payload}
tx = self.steem.custom_json("ssc-mainnet1", json_data, required_auths=[account])
Expand Down Expand Up @@ -146,12 +152,17 @@ def buy(self, account, amount, symbol, price):
market.buy("test", 1, "ENG", 0.95)
"""
wallet = Wallet(account, steem_instance=self.steem)
token = wallet.get_token("STEEMP")
if token is None:
token_in_wallet = wallet.get_token("STEEMP")
if token_in_wallet is None:
raise TokenNotInWallet("%s is not in wallet." % "STEEMP")
if float(token["balance"]) < float(amount) * float(price):
raise InsufficientTokenAmount("Only %.3f in wallet" % float(token["balance"]))
contract_payload = {"symbol": symbol.upper(), "quantity":str(amount), "price": str(price)}
if float(token_in_wallet["balance"]) < float(amount) * float(price):
raise InsufficientTokenAmount("Only %.3f in wallet" % float(token_in_wallet["balance"]))

token = Token(symbol)
quant_amount = token.quantize(amount)
if quant_amount <= decimal.Decimal("0"):
raise InvalidTokenAmount("Amount to transfer is below token precision of %d" % token["precision"])
contract_payload = {"symbol": symbol.upper(), "quantity":str(quant_amount), "price": str(price)}
json_data = {"contractName":"market","contractAction":"buy",
"contractPayload":contract_payload}
tx = self.steem.custom_json("ssc-mainnet1", json_data, required_auths=[account])
Expand All @@ -177,12 +188,17 @@ def sell(self, account, amount, symbol, price):
market.sell("test", 1, "ENG", 0.95)
"""
wallet = Wallet(account, steem_instance=self.steem)
token = wallet.get_token(symbol)
if token is None:
token_in_wallet = wallet.get_token(symbol)
if token_in_wallet is None:
raise TokenNotInWallet("%s is not in wallet." % symbol)
if float(token["balance"]) < float(amount):
raise InsufficientTokenAmount("Only %.3f in wallet" % float(token["balance"]))
contract_payload = {"symbol": symbol.upper(), "quantity":str(amount), "price": str(price)}
if float(token_in_wallet["balance"]) < float(amount):
raise InsufficientTokenAmount("Only %.3f in wallet" % float(token_in_wallet["balance"]))

token = Token(symbol)
quant_amount = token.quantize(amount)
if quant_amount <= decimal.Decimal("0"):
raise InvalidTokenAmount("Amount to transfer is below token precision of %d" % token["precision"])
contract_payload = {"symbol": symbol.upper(), "quantity":str(quant_amount), "price": str(price)}
json_data = {"contractName":"market","contractAction":"sell",
"contractPayload":contract_payload}
tx = self.steem.custom_json("ssc-mainnet1", json_data, required_auths=[account])
Expand Down
2 changes: 1 addition & 1 deletion steemengine/wallet.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ def issue(self, to, amount, symbol):
if quant_amount <= decimal.Decimal("0"):
raise InvalidTokenAmount("Amount to issue is below token precision of %d" % token["precision"])
check_to = Account(to, steem_instance=self.steem)
contract_payload = {"symbol":symbol.upper(),"to":to,"quantity":str(amount)}
contract_payload = {"symbol":symbol.upper(),"to":to,"quantity":str(quant_amount)}
json_data = {"contractName":"tokens","contractAction":"issue",
"contractPayload":contract_payload}
tx = self.steem.custom_json("ssc-mainnet1", json_data, required_auths=[self.account])
Expand Down

0 comments on commit 63ee650

Please sign in to comment.