diff --git a/bitsharesbase/operations.py b/bitsharesbase/operations.py index 0c9e149..89a62dd 100644 --- a/bitsharesbase/operations.py +++ b/bitsharesbase/operations.py @@ -1231,6 +1231,326 @@ def __init__(self, *args, **kwargs): ) +class Samet_fund_create(GrapheneObject): + def __init__(self, *args, **kwargs): + if isArgsThisClass(self, args): + self.data = args[0].data + else: + if len(args) == 1 and len(kwargs) == 0: + kwargs = args[0] + super().__init__( + OrderedDict( + [ + ("fee", Asset(kwargs["fee"])), + ("owner_account", ObjectId(kwargs["owner_account"], "account")), + ("asset_type", ObjectId(kwargs["asset_type"], "asset")), + ("balance", Int64(kwargs["balance"])), + ("fee_rate", Uint32(kwargs["fee_rate"])), + ("extensions", Set([])), + ] + ) + ) + + +class Samet_fund_delete(GrapheneObject): + def __init__(self, *args, **kwargs): + if isArgsThisClass(self, args): + self.data = args[0].data + else: + if len(args) == 1 and len(kwargs) == 0: + kwargs = args[0] + super().__init__( + OrderedDict( + [ + ("fee", Asset(kwargs["fee"])), + ("owner_account", ObjectId(kwargs["owner_account"], "account")), + ("fund_id", ObjectId(kwargs["fund_id"], "samet_fund")), + ("extensions", Set([])), + ] + ) + ) + + +class Samet_fund_update(GrapheneObject): + def __init__(self, *args, **kwargs): + if isArgsThisClass(self, args): + self.data = args[0].data + else: + if len(args) == 1 and len(kwargs) == 0: + kwargs = args[0] + if "new_fee_rate" in kwargs: + new_fee_rate = Optional(Uint32(kwargs["new_fee_rate"])) + else: + new_fee_rate = Optional(None) + if "delta_amount" in kwargs: + delta_amount = Optional(Asset(kwargs["delta_amount"])) + else: + delta_amount = Optional(None) + super().__init__( + OrderedDict( + [ + ("fee", Asset(kwargs["fee"])), + ("owner_account", ObjectId(kwargs["owner_account"], "account")), + ("fund_id", ObjectId(kwargs["fund_id"], "samet_fund")), + ("delta_amount", delta_amount), + ("new_fee_rate", new_fee_rate), + ("extensions", Set([])), + ] + ) + ) + + +class Samet_fund_borrow(GrapheneObject): + def __init__(self, *args, **kwargs): + if isArgsThisClass(self, args): + self.data = args[0].data + else: + if len(args) == 1 and len(kwargs) == 0: + kwargs = args[0] + super().__init__( + OrderedDict( + [ + ("fee", Asset(kwargs["fee"])), + ("borrower", ObjectId(kwargs["borrower"], "account")), + ("fund_id", ObjectId(kwargs["fund_id"], "samet_fund")), + ("borrow_amount", Asset(kwargs["borrow_amount"])), + ("extensions", Set([])), + ] + ) + ) + + +class Samet_fund_repay(GrapheneObject): + def __init__(self, *args, **kwargs): + if isArgsThisClass(self, args): + self.data = args[0].data + else: + if len(args) == 1 and len(kwargs) == 0: + kwargs = args[0] + super().__init__( + OrderedDict( + [ + ("fee", Asset(kwargs["fee"])), + ("account", ObjectId(kwargs["account"], "account")), + ("fund_id", ObjectId(kwargs["fund_id"], "samet_fund")), + ("repay_amount", Asset(kwargs["repay_amount"])), + ("fund_fee", Asset(kwargs["fund_fee"])), + ("extensions", Set([])), + ] + ) + ) + + +class Credit_offer_create(GrapheneObject): + def __init__(self, *args, **kwargs): + if isArgsThisClass(self, args): + self.data = args[0].data + else: + if len(args) == 1 and len(kwargs) == 0: + kwargs = args[0] + super().__init__( + OrderedDict( + [ + ("fee", Asset(kwargs["fee"])), + ("owner_account", ObjectId(kwargs["owner_account"], "account")), + ("asset_type", ObjectId(kwargs["asset_type"], "asset")), + ("balance", Int64(kwargs["balance"])), + ("fee_rate", Uint32(kwargs["fee_rate"])), + ( + "max_duration_seconds", + Uint32(kwargs["max_duration_seconds"]), + ), + ("min_deal_amount", Int64(kwargs["min_deal_amount"])), + ("enabled", Bool(kwargs["enabled"])), + ("auto_disable_time", PointInTime(kwargs["auto_disable_time"])), + ( + "acceptable_collateral", + Map( + [ + [ObjectId(k[0], "asset"), Price(k[1])] + for k in kwargs["acceptable_collateral"] + ] + ), + ), + ( + "acceptable_borrowers", + Map( + [ + [ObjectId(k[0], "account"), Int64(k[1])] + for k in kwargs["acceptable_borrowers"] + ] + ), + ), + ("extensions", Set([])), + ] + ) + ) + + +class Credit_offer_delete(GrapheneObject): + def __init__(self, *args, **kwargs): + if isArgsThisClass(self, args): + self.data = args[0].data + else: + if len(args) == 1 and len(kwargs) == 0: + kwargs = args[0] + super().__init__( + OrderedDict( + [ + ("fee", Asset(kwargs["fee"])), + ("owner_account", ObjectId(kwargs["owner_account"], "account")), + ("offer_id", ObjectId(kwargs["offer_id"], "credit_offer")), + ("extensions", Set([])), + ] + ) + ) + + +class Credit_offer_update(GrapheneObject): + def __init__(self, *args, **kwargs): + if isArgsThisClass(self, args): + self.data = args[0].data + else: + if len(args) == 1 and len(kwargs) == 0: + kwargs = args[0] + if kwargs.get("min_deal_amount"): + min_deal_amount = Optional(Int64(kwargs["min_deal_amount"])) + else: + min_deal_amount = Optional(None) + if kwargs.get("enabled"): + enabled = Optional(Bool(kwargs["enabled"])) + else: + enabled = Optional(None) + if kwargs.get("auto_disable_time"): + auto_disable_time = Optional(PointInTime(kwargs["auto_disable_time"])) + else: + auto_disable_time = Optional(None) + if kwargs.get("acceptable_collateral"): + acceptable_collateral = Optional( + Map( + [ + [ObjectId(k[0], "asset"), Price(k[1])] + for k in kwargs["acceptable_collateral"] + ] + ) + ) + else: + acceptable_collateral = Optional(None) + if kwargs.get("acceptable_borrowers"): + acceptable_borrowers = Optional( + Map( + [ + [ObjectId(k[0], "account"), Int64(k[1])] + for k in kwargs["acceptable_borrowers"] + ] + ) + ) + else: + acceptable_borrowers = Optional(None) + if kwargs.get("max_duration_seconds"): + max_duration_seconds = Optional( + Uint32(kwargs.get("max_duration_seconds")) + ) + else: + max_duration_seconds = Optional(None) + if kwargs.get("fee_rate"): + fee_rate = Optional(Uint32(kwargs.get("fee_rate"))) + else: + fee_rate = Optional(None) + if kwargs.get("delta_amount"): + delta_amount = Optional(Asset(kwargs.get("delta_amount"))) + else: + delta_amount = Optional(None) + super().__init__( + OrderedDict( + [ + ("fee", Asset(kwargs["fee"])), + ("owner_account", ObjectId(kwargs["owner_account"], "account")), + ("offer_id", ObjectId(kwargs["offer_id"], "credit_offer")), + ("delta_amount", delta_amount), + ("fee_rate", fee_rate), + ("max_duration_seconds", max_duration_seconds), + ("min_deal_amount", min_deal_amount), + ("enabled", enabled), + ("auto_disable_time", auto_disable_time), + ("acceptable_collateral", acceptable_collateral), + ("acceptable_borrowers", acceptable_borrowers), + ("extensions", Set([])), + ] + ) + ) + + +class Credit_offer_accept(GrapheneObject): + def __init__(self, *args, **kwargs): + if isArgsThisClass(self, args): + self.data = args[0].data + else: + if len(args) == 1 and len(kwargs) == 0: + kwargs = args[0] + super().__init__( + OrderedDict( + [ + ("fee", Asset(kwargs["fee"])), + ("borrower", ObjectId(kwargs["borrower"], "account")), + ("offer_id", ObjectId(kwargs["offer_id"], "credit_offer")), + ("borrow_amount", Asset(kwargs["fee"])), + ("collateral", Asset(kwargs["fee"])), + ("max_fee_rate", Uint32(kwargs["max_fee_rate"])), + ( + "min_duration_seconds", + Uint32(kwargs["min_duration_seconds"]), + ), + ("extensions", Set([])), + ] + ) + ) + + +class Credit_deal_repay(GrapheneObject): + def __init__(self, *args, **kwargs): + if isArgsThisClass(self, args): + self.data = args[0].data + else: + if len(args) == 1 and len(kwargs) == 0: + kwargs = args[0] + super().__init__( + OrderedDict( + [ + ("fee", Asset(kwargs["fee"])), + ("account", ObjectId(kwargs["account"], "account")), + ("deal_id", ObjectId(kwargs["deal_id"], "credit_deal")), + ("repay_amount", Asset(kwargs["fee"])), + ("credit_fee", Asset(kwargs["fee"])), + ("extensions", Set([])), + ] + ) + ) + + +class Credit_deal_expired(GrapheneObject): + def __init__(self, *args, **kwargs): + if isArgsThisClass(self, args): + self.data = args[0].data + else: + if len(args) == 1 and len(kwargs) == 0: + kwargs = args[0] + super().__init__( + OrderedDict( + [ + ("fee", Asset(kwargs["fee"])), + ("deal_id", ObjectId(kwargs["deal_id"], "credit_deal")), + ("offer_id", ObjectId(kwargs["offer_id"], "credit_offer")), + ("offer_owner", ObjectId(kwargs["offer_owner"], "account")), + ("borrower", ObjectId(kwargs["borrower"], "account")), + ("unpaid_amount", Asset(kwargs["fee"])), + ("collateral", Asset(kwargs["fee"])), + ("fee_rate", Uint32(kwargs["fee_rate"])), + ] + ) + ) + + class Liquidity_pool_update(GrapheneObject): def __init__(self, *args, **kwargs): if isArgsThisClass(self, args): diff --git a/requirements.txt b/requirements.txt index c8aa88d..93adabf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ -graphenelib>=1.5.0,<2.0.0 +graphenelib>=1.6.1,<2.0.0 Events==0.3 diff --git a/tests/test_bitshares.py b/tests/test_bitshares.py index 7d08e04..d50917f 100644 --- a/tests/test_bitshares.py +++ b/tests/test_bitshares.py @@ -152,14 +152,14 @@ def test_create_asset(self): self.assertEqual(op["symbol"], symbol) self.assertEqual(op["precision"], precision) self.assertEqual( - op["common_options"]["max_supply"], int(max_supply * 10 ** precision) + op["common_options"]["max_supply"], int(max_supply * 10**precision) ) self.assertEqual( op["common_options"]["market_fee_percent"], int(market_fee_percent * 100) ) self.assertEqual( op["common_options"]["max_market_fee"], - int(max_market_fee * 10 ** precision), + int(max_market_fee * 10**precision), ) self.assertEqual(op["common_options"]["description"], description) self.assertEqual( @@ -211,7 +211,7 @@ def test_allow(self): op = tx["operations"][0][1] self.assertIn("owner", op) self.assertIn( - ["BTS55VCzsb47NZwWe5F3qyQKedX9iHBHMVVFSc96PDvV7wuj7W86n", "1"], + ["BTS55VCzsb47NZwWe5F3qyQKedX9iHBHMVVFSc96PDvV7wuj7W86n", 1], op["owner"]["key_auths"], ) self.assertEqual(op["owner"]["weight_threshold"], 1) diff --git a/tests/test_transactions.py b/tests/test_transactions.py index 830ce5c..028ec4f 100644 --- a/tests/test_transactions.py +++ b/tests/test_transactions.py @@ -1059,6 +1059,253 @@ def test_assert_b(self): ) self.doit(0) + def test_samet_fund_create(self): + self.op = operations.Samet_fund_create( + **{ + "fee": {"amount": 0, "asset_id": "1.3.0"}, + "owner_account": "1.2.310", + "asset_type": "1.3.0", + "balance": 10000, + "fee_rate": 1, + "extensions": [], + } + ) + self.cm = ( + "f68585abf4dce7c804570140000000000000000000b60200102" + "700000000000001000000000001203431966ca7e7f40e921633" + "cd767eece0ddefc5abb5224965cca6458dfa28572b687c459a2" + "f4189bf1a41e13336fac6db10cc8c90215888948453b5063a8c" + "cb9f" + ) + self.doit() + + def test_samet_fund_delete(self): + self.op = operations.Samet_fund_delete( + **{ + "fee": {"amount": 0, "asset_id": "1.3.0"}, + "owner_account": "1.2.123", + "fund_id": "1.20.1", + "extensions": [], + } + ) + self.cm = ( + "f68585abf4dce7c8045701410000000000000000007b0100000" + "11f4abefaf5a630eace47f6db44d6516c4e459e70cd89ba5988" + "586d04be40646cf3723cf4b5979e5d094b819f94c37d19e4fac" + "5a0aa20ba3ff8dab8d8482b5356d8" + ) + self.doit() + + def test_samet_fund_update(self): + self.op = operations.Samet_fund_update( + **{ + "fee": {"amount": 0, "asset_id": "1.3.0"}, + "owner_account": "1.2.123", + "fund_id": "1.20.1", + "delta_amount": 100, + "new_fee_rate": 2, + "extensions": [], + } + ) + self.cm = ( + "f68585abf4dce7c8045701420000000000000000007b0100010" + "20000000000011f08656f260d4e4c6580202ab2520cad06cdc2" + "539f03c3a74bcc3b6a8cdf2da5f84b252f09f15b77e825f5bb3" + "fe7ff70a28d48516160653318beda6e156ba47987" + ) + self.doit() + + def test_samet_fund_borrow(self): + self.op = operations.Samet_fund_borrow( + **{ + "fee": {"amount": 0, "asset_id": "1.3.0"}, + "borrower": "1.2.123", + "fund_id": "1.20.1", + "borrow_amount": {"amount": 10, "asset_id": "1.3.0"}, + "extensions": [], + } + ) + self.cm = ( + "f68585abf4dce7c8045701430000000000000000007b010a000" + "00000000000000000012007d969d65e15f9bb2c227fdd1baf74" + "fbb0ce3e9ef197b386098188a78c5a1b992a1d7da0d39a91fb8" + "62536b53d719f02d88657cb21ae1c2ab55222d4814a893d" + ) + self.doit() + + def test_samet_fund_repay(self): + self.op = operations.Samet_fund_repay( + **{ + "fee": {"amount": 0, "asset_id": "1.3.0"}, + "account": "1.2.123", + "fund_id": "1.20.1", + "repay_amount": {"amount": 10, "asset_id": "1.3.0"}, + "fund_fee": {"amount": 10, "asset_id": "1.3.0"}, + "extensions": [], + } + ) + self.cm = ( + "f68585abf4dce7c8045701440000000000000000007b010a000" + "00000000000000a00000000000000000000011f573766a5dfe7" + "9df21d82df4a858a032d083e7b5db8f1d10cf6c0f4896796519" + "0607170df053d90fdf46f6fe1d10e160d292de03697136f9186" + "5588718a272e88" + ) + self.doit() + + def test_credit_offer_create(self): + self.op = operations.Credit_offer_create( + **{ + "fee": {"amount": 0, "asset_id": "1.3.0"}, + "owner_account": "1.2.123", + "asset_type": "1.3.0", + "balance": 10000, + "fee_rate": 1, + "max_duration_seconds": 43200, + "min_deal_amount": 1000, + "enabled": False, + "auto_disable_time": "2024-01-01T00:00:00", + "acceptable_collateral": [ + [ + "1.3.5589", + { + "base": {"amount": 1, "asset_id": "1.3.0"}, + "quote": {"amount": 250000, "asset_id": "1.3.5589"}, + }, + ] + ], + "acceptable_borrowers": [["1.2.100", 1000]], + "extensions": [], + } + ) + self.cm = ( + "f68585abf4dce7c8045701450000000000000000007b001027" + "00000000000001000000c0a80000e803000000000000008000" + "926501d52b01000000000000000090d0030000000000d52b01" + "64e80300000000000000000120107ea7f48037771b8243c5c9" + "a83ac3534128dbd1c47c4cf8bf8108e9a1bacede2d4e5f4254" + "2d298ece03008c3d5be75716338165e9adc8c1ebc245d70429" + "6df3" + ) + self.doit(1) + + def test_credit_offer_delete(self): + self.op = operations.Credit_offer_delete( + **{ + "fee": {"amount": 0, "asset_id": "1.3.0"}, + "owner_account": "1.2.123", + "offer_id": "1.21.1", + "extensions": [], + } + ) + self.cm = ( + "f68585abf4dce7c8045701460000000000000000007b0100000" + "12042aed7548e971617836c55d55c57b5ecd15e2ef8ed1cdf56" + "c380891ce10e2aaa743e3665de606a7833145a1a2dbe5b60870" + "396972e9e5c803040ee4cec8a8772" + ) + self.doit() + + def test_credit_offer_update(self): + self.op = operations.Credit_offer_update( + **{ + "fee": {"amount": 0, "asset_id": "1.3.0"}, + "owner_account": "1.2.123", + "offer_id": "1.21.1", + "delta_amount": {"amount": 1, "asset_id": "1.3.0"}, + "fee_rate": 1, + "max_duration_seconds": 1000, + "min_deal_amount": 10, + "enabled": True, + "auto_disable_time": "2024-01-01T00:00:00", + "acceptable_collateral": [ + [ + "1.3.5589", + { + "base": {"amount": 1, "asset_id": "1.3.0"}, + "quote": {"amount": 250000, "asset_id": "1.3.5589"}, + }, + ] + ], + "acceptable_borrowers": [["1.2.100", 1000]], + "extensions": [], + } + ) + self.cm = ( + "f68585abf4dce7c8045701470000000000000000007b010101" + "0000000000000000010100000001e8030000010a0000000000" + "0000010101800092650101d52b01000000000000000090d003" + "0000000000d52b010164e8030000000000000000011f08187d" + "ea87e4306cb8e6fc9ddeeb38053499a86f5c01d8bfa8b72257" + "564bd3250bd4868d5db692077526b901a019cb8e2049e5daf7" + "95a7ba17e6122fdb0fb20a" + ) + self.doit(1) + + def test_credit_offer_accept(self): + self.op = operations.Credit_offer_accept( + **{ + "fee": {"amount": 0, "asset_id": "1.3.0"}, + "borrower": "1.2.123", + "offer_id": "1.21.1", + "borrow_amount": {"amount": 10, "asset_id": "1.3.0"}, + "collateral": {"amount": 10, "asset_id": "1.3.0"}, + "max_fee_rate": 1, + "min_duration_seconds": 1000, + "extensions": [], + } + ) + self.cm = ( + "f68585abf4dce7c8045701480000000000000000007b0100000" + "000000000000000000000000000000001000000e80300000000" + "01201dda600d9efc172ee7e0ca6a2b1279709184d0bb0960afd" + "93b49f60f8d90caed6b0f84de19ee54d7434ee11ec0af1f4541" + "5f4b024adbf0ca59a9e167eab3901b" + ) + self.doit() + + def test_credit_deal_repay(self): + self.op = operations.Credit_deal_repay( + **{ + "fee": {"amount": 0, "asset_id": "1.3.0"}, + "account": "1.2.123", + "deal_id": "1.22.2356", + "repay_amount": {"amount": 10, "asset_id": "1.3.0"}, + "credit_fee": {"amount": 10, "asset_id": "1.3.0"}, + "extensions": [], + } + ) + self.cm = ( + "f68585abf4dce7c8045701490000000000000000007bb412000" + "000000000000000000000000000000000000001203ba717f69b" + "6ed214ef1a105bda7756149cee25c0c92c48a7f2d59dee88997" + "cec3f9254df2bd2476cf2df16b10ebca0937f8daf2eecccfb88" + "48e4faed9b8c0df7" + ) + self.doit() + + def test_credit_deal_expired(self): + self.op = operations.Credit_deal_expired( + **{ + "fee": {"amount": 0, "asset_id": "1.3.0"}, + "deal_id": "1.22.2356", + "offer_id": "1.21.1", + "offer_owner": "1.2.123", + "borrower": "1.2.123", + "unpaid_amount": {"amount": 10, "asset_id": "1.3.0"}, + "collateral": {"amount": 10, "asset_id": "1.3.0"}, + "fee_rate": 1, + } + ) + self.cm = ( + "f68585abf4dce7c80457014a000000000000000000b412017b7" + "b00000000000000000000000000000000000001000000000120" + "7e5770f0fae74fc78bebbe5267583a824999d6356698ebce0a2" + "5e4a468bd3e356ca10920e3c4301537bd02205e63617546a5d8" + "eded230655d170529801838a3f" + ) + self.doit() + def test_limit_order_update(self): self.op = operations.Limit_order_update( **{