def test_ltge(self): a1 = Amount(1, self.symbol) a2 = Amount(2, self.symbol) self.assertTrue(a1 < a2) self.assertTrue(a2 > a1) self.assertTrue(a2 > 1) self.assertTrue(a1 < 5)
def test_leeq(self): a1 = Amount(1, self.symbol) a2 = Amount(1, self.symbol) self.assertTrue(a1 <= a2) self.assertTrue(a1 >= a2) self.assertTrue(a1 <= 1) self.assertTrue(a1 >= 1)
def test_ne(self): a1 = Amount(1, self.symbol) a2 = Amount(2, self.symbol) self.assertTrue(a1 != a2) self.assertTrue(a1 != 5) a1 = Amount(1, self.symbol) a2 = Amount(1, self.symbol) self.assertTrue(a1 == a2) self.assertTrue(a1 == 1)
def test_pow(self): a1 = Amount(15, self.symbol) self.dotest(a1**3, 15**3, self.symbol) self.dotest(a1**2, 15**2, self.symbol) with self.assertRaises(Exception): a1**Amount(1, asset=self.asset2) # inline a2 = a1.copy() a2 **= 3 self.dotest(a2, 15**3, self.symbol) with self.assertRaises(Exception): a1 **= Amount(2, asset=self.asset2)
def test_mod(self): a1 = Amount(15, self.symbol) self.dotest(a1 % 3, 0, self.symbol) self.dotest(a1 % 2, 1, self.symbol) with self.assertRaises(Exception): a1 % Amount(1, asset=self.asset2) # inline a2 = a1.copy() a2 %= 3 self.dotest(a2, 0, self.symbol) with self.assertRaises(Exception): a1 %= Amount(2, asset=self.asset2)
def test_mul(self): a1 = Amount(5, self.symbol) a2 = Amount(2, self.symbol) self.dotest(a1 * a2, 10, self.symbol) self.dotest(a1 * 3, 15, self.symbol) with self.assertRaises(Exception): a1 * Amount(1, asset=self.asset2) # inline a2 = Amount(2, self.symbol) a2 *= 5 self.dotest(a2, 10, self.symbol) with self.assertRaises(Exception): a1 *= Amount(2, asset=self.asset2)
def test_plus(self): a1 = Amount(1, self.symbol) a2 = Amount(2, self.symbol) self.dotest(a1 + a2, 3, self.symbol) with self.assertRaises(Exception): a1 + Amount(1, asset=self.asset2) # inline a2 = Amount(2, self.symbol) a2 += a1 self.dotest(a2, 3, self.symbol) a2 += 5 self.dotest(a2, 8, self.symbol) with self.assertRaises(Exception): a1 += Amount(1, asset=self.asset2)
def test_minus(self): a1 = Amount(1, self.symbol) a2 = Amount(2, self.symbol) self.dotest(a1 - a2, -1, self.symbol) self.dotest(a1 - 5, -4, self.symbol) with self.assertRaises(Exception): a1 - Amount(1, asset=self.asset2) # inline a2 = Amount(2, self.symbol) a2 -= a1 self.dotest(a2, 1, self.symbol) a2 -= 1 self.dotest(a2, 0, self.symbol) self.dotest(a2 - 2, -2, self.symbol) with self.assertRaises(Exception): a1 -= Amount(1, asset=self.asset2)
def placeBets(): try: account = request.args.get("account") if account is None: return make_response( jsonify(error="Specify account in query params"), 500) body = request.get_json() response = [] for bet in body: asset_symbol = bet['asset_symbol'] bet_amount = bet['bet_amount'] betting_market_id = bet['betting_market_id'] odds = bet['odds'] back_or_lay = bet['back_or_lay'] a = Amount(bet_amount, asset_symbol) #right now, we will place bets successfully one by one until one breaks. #the user will be confused whether any of the bets got placed or not bet_response = ppy.bet_place(betting_market_id, a, odds, back_or_lay, account, fee_asset=asset_symbol) response.append(bet_response) return jsonify(response) except Exception as e: return make_response(jsonify(error=e.__doc__), 500)
def placeSingleBet(): try: accountStr = request.args.get("account") if accountStr is None: return make_response(jsonify(error="Specify account in query params"), 500) account = Account(accountStr, peerplays_instance = ppy, full=True) body = request.get_json() asset_symbol = body['asset_symbol'] bet_amount = body['bet_amount'] betting_market_id = body['betting_market_id'] odds = body['odds'] back_or_lay = body['back_or_lay'] a = Amount(bet_amount, asset_symbol) ppy.bet_place(betting_market_id, a, odds, back_or_lay, account['id'], fee_asset = asset_symbol) time.sleep(3) # until next block is produced unmatchedBets = bookie.getUnmatchedBets(account['id']) for bet in reversed(unmatchedBets): if bet['betting_market_id'] == betting_market_id and bet['back_or_lay'] == back_or_lay and bet['backer_multiplier'] == odds * 10000: #10000 = precision return jsonify(bet) # only reachable if bet has already been fully matched matchedBets = bookie.getMatchedBets(account['id']) for bet in matchedBets: if bet['betting_market_id'] == betting_market_id and bet['back_or_lay'] == back_or_lay and bet['backer_multiplier'] == odds * 10000: #10000 = precision return jsonify(bet) except Exception as e: return make_response(jsonify(error=e.__doc__), 500)
def test_bet_place(self): def new_refresh(self): dict.__init__(self, {"id": "1.21.11123"}) with mock.patch("peerplays.bettingmarket.BettingMarket.refresh", new=new_refresh): self.ppy.bet_place( "1.21.11123", Amount(1244, "PPY"), 2, "back", ) tx = self.ppy.tx().json() ops = tx["operations"] op = ops[0][1] self.assertEqual(len(ops), 1) self.assertEqual(getOperationNameForId(ops[0][0]), "bet_place") self.assertEqual(op["amount_to_bet"], { 'amount': 124400000, 'asset_id': '1.3.0' }) self.assertEqual(op["back_or_lay"], "back") self.assertEqual(op["backer_multiplier"], 2 * 10000) self.assertEqual( op["betting_market_id"], "1.21.11123", ) self.assertEqual( op["bettor_id"], "1.2.7", )
def placeBetHelper(market_id, runner, index, ppy): amount = Amount(random.uniform(0.02, 0.08), "BTF") odds = odds_round(runner['prices'][index]['odds']) start_time = time.time() print( ppy.bet_place(market_id, amount, odds, runner['prices'][index]['side'], fee_asset="1.3.1")) end_time = time.time()
def test_bet_place(self): tx = peerplays.bet_place("1.25.2950", Amount(1244, "1.3.0"), 2, "back") ops = tx["operations"] op = ops[0][1] self.assertEqual(len(ops), 1) self.assertEqual(getOperationNameForId(ops[0][0]), "bet_place") self.assertEqual( op["amount_to_bet"], {"amount": 124400000, "asset_id": "1.3.0"} ) self.assertEqual(op["back_or_lay"], "back") self.assertEqual(op["backer_multiplier"], 2 * 10000) self.assertEqual(op["betting_market_id"], "1.25.2950") self.assertEqual(op["bettor_id"], "1.2.7")
def test_transfer(self): tx = peerplays.transfer("1.2.8", 1.33, core_unit, memo="Foobar", account="1.2.7") self.assertEqual(getOperationNameForId(tx["operations"][0][0]), "transfer") op = tx["operations"][0][1] self.assertIn("memo", op) self.assertEqual(op["from"], "1.2.7") self.assertEqual(op["to"], "1.2.8") amount = Amount(op["amount"]) self.assertEqual(float(amount), 1.33)
def test_init(self): # String init amount = Amount("1 {}".format(self.symbol)) self.dotest(amount, 1, self.symbol) # Amount init amount = Amount(amount) self.dotest(amount, 1, self.symbol) # blockchain dict init amount = Amount({ "amount": 1 * 10**self.precision, "asset_id": self.asset["id"] }) self.dotest(amount, 1, self.symbol) # API dict init amount = Amount({ "amount": 1.3 * 10**self.precision, "asset": self.asset["id"] }) self.dotest(amount, 1.3, self.symbol) # Asset as symbol amount = Amount(1.3, Asset("1.3.0")) self.dotest(amount, 1.3, self.symbol) # Asset as symbol amount = Amount(1.3, self.symbol) self.dotest(amount, 1.3, self.symbol) # keyword inits amount = Amount(amount=1.3, asset=Asset("1.3.0")) self.dotest(amount, 1.3, self.symbol) # keyword inits amount = Amount(amount=1.3, asset=dict(Asset("1.3.0"))) self.dotest(amount, 1.3, self.symbol) # keyword inits amount = Amount(amount=1.3, asset=self.symbol) self.dotest(amount, 1.3, self.symbol)
def test_div(self): a1 = Amount(15, self.symbol) self.dotest(a1 / 3, 5, self.symbol) self.dotest(a1 // 2, 7, self.symbol) with self.assertRaises(Exception): a1 / Amount(1, asset=self.asset2) # inline a2 = a1.copy() a2 /= 3 self.dotest(a2, 5, self.symbol) a2 = a1.copy() a2 //= 2 self.dotest(a2, 7, self.symbol) with self.assertRaises(Exception): a1 *= Amount(2, asset=self.asset2)
def fees(ctx): """ List fees """ from peerplaysbase.operationids import getOperationNameForId chain = Blockchain(peerplays_instance=ctx.peerplays) feesObj = chain.chainParameters().get("current_fees") fees = feesObj["parameters"] t = PrettyTable(["Operation", "Type", "Fee"]) t.align = "l" t.align["Fee"] = "r" for fee in fees: for f in fee[1]: t.add_row([ getOperationNameForId(fee[0]), f, str(Amount({ "amount": fee[1].get(f, 0), "asset_id": "1.3.0" })), ]) click.echo(t)
def test_float(self): self.assertEqual(float(Amount("1", self.symbol)), 1.00000)
def test_int(self): self.assertEqual(int(Amount("1", self.symbol)), 100000)
def test_string(self): self.assertEqual(str(Amount("1", self.symbol)), "1.00000 {}".format(self.symbol))
def test_json(self): amount = Amount("1", self.symbol) self.assertEqual(amount.json(), { "asset_id": self.asset["id"], "amount": 1 * 10**self.precision })
def test_tuple(self): amount = Amount("1", self.symbol) self.assertEqual(amount.tuple(), (1.0, self.symbol))
def test_properties(self): amount = Amount("1", self.symbol) self.assertEqual(amount.amount, 1.0) self.assertEqual(amount.symbol, self.symbol) self.assertIsInstance(amount.asset, Asset) self.assertEqual(amount.asset["symbol"], self.symbol)
def test_copy(self): amount = Amount("1", self.symbol) self.dotest(amount.copy(), 1, self.symbol)