Skip to content

Miner

Miner

Bases: BaseModel

Miner model

Attributes:

Name Type Description
coins_per_hour float

Number of coins that are mined per hour

id str

ID of the miner

maximum_capacity float

Maximum capacity of the miner, before transfer is needed

next_level_coins_per_hour float

Coins per hour of the miner on the next level

next_level_costs float

Costs of the next level of the miner

owner Owner

Owner of the miner

storage float

Storage of the miner

transferable_coins int

Transferable coins of the miner

version int

Version of the miner

client Client

Client of the miner (for interaction with the API)

Source code in alpha_trader/miner/__init__.py
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
class Miner(BaseModel):
    """
    Miner model

    Attributes:
        coins_per_hour: Number of coins that are mined per hour
        id: ID of the miner
        maximum_capacity: Maximum capacity of the miner, before transfer is needed
        next_level_coins_per_hour: Coins per hour of the miner on the next level
        next_level_costs: Costs of the next level of the miner
        owner: Owner of the miner
        storage: Storage of the miner
        transferable_coins: Transferable coins of the miner
        version: Version of the miner
        client: Client of the miner (for interaction with the API)
    """

    coins_per_hour: float
    id: str
    maximum_capacity: float
    next_level_coins_per_hour: float
    next_level_costs: float
    owner: Owner
    storage: float
    transferable_coins: int
    version: int
    client: Client

    @staticmethod
    def from_api_response(api_response: Dict, client: Client):
        return Miner(
            coins_per_hour=api_response["coinsPerHour"],
            id=api_response["id"],
            maximum_capacity=api_response["maximumCapacity"],
            next_level_coins_per_hour=api_response["nextLevelCoinsPerHour"],
            next_level_costs=api_response["nextLevelCosts"],
            owner=Owner.from_api_response(api_response["owner"]),
            storage=api_response["storage"],
            transferable_coins=api_response["transferableCoins"],
            version=api_response["version"],
            client=client,
        )

    def update_from_api_response(self, api_response: Dict):
        """
        Update the miner's attributes from the API response.

        Args:
            api_response (Dict): The API response containing the updated miner attributes.
        """
        self.coins_per_hour = api_response["coinsPerHour"]
        self.id = api_response["id"]
        self.maximum_capacity = api_response["maximumCapacity"]
        self.next_level_coins_per_hour = api_response["nextLevelCoinsPerHour"]
        self.next_level_costs = api_response["nextLevelCosts"]
        self.owner = Owner.from_api_response(api_response["owner"])
        self.storage = api_response["storage"]
        self.transferable_coins = api_response["transferableCoins"]
        self.version = api_response["version"]

    def transfer_coins(self):
        """
            Transfer coins from the miner to the clearing account
        Returns:
            API response
        """
        response = self.client.request("PUT", "api/v2/my/cointransfer")
        self.update_from_api_response(response.json())

        logger.info(
            f"Coins transferred. New transferable coins: {self.transferable_coins}"
        )

        return response.json()

    def upgrade(self) -> Dict:
        """
            Upgrade the miner to the next level.
        Returns:
            API response
        """
        response = self.client.request("PUT", "api/v2/my/minerupgrade")
        if response.status_code > 205:
            logger.warning(f"Miner upgrade failed: {response.text}")
            return response.json()

        self.update_from_api_response(response.json())

        logger.info(f"Miner upgraded. New coins per hour: {self.coins_per_hour}")
        logger.info(f"Next level costs: {self.next_level_costs}")
        logger.info(f"Next level coins per hour: {self.next_level_coins_per_hour}")

        return response.json()

    def __get_coin_bid_price(self):
        """
            Get the coin bid price.
        Returns:
            Coin bid price
        """
        return self.client.get_price_spread("ACALPHCOIN").bid_price

    @property
    def next_level_amortization_hours(self) -> float:
        """
            Number of hours until the next level of the miner is amortized.
        Returns:
            Number of hours until the next level of the miner is amortized
        """
        coin_bid_price = self.__get_coin_bid_price()
        additional_earnings_per_hour = (
            self.next_level_coins_per_hour - self.coins_per_hour
        ) * coin_bid_price

        next_level_amortization_hours = (
            self.next_level_costs // additional_earnings_per_hour
        )

        logger.info(
            f"""Next level amortization hours: {
            next_level_amortization_hours
        } (or {
            next_level_amortization_hours / 24
        } days)"""
        )

        return next_level_amortization_hours

next_level_amortization_hours: float property

Number of hours until the next level of the miner is amortized.

Returns: Number of hours until the next level of the miner is amortized

__get_coin_bid_price()

Get the coin bid price.

Returns: Coin bid price

Source code in alpha_trader/miner/__init__.py
103
104
105
106
107
108
109
def __get_coin_bid_price(self):
    """
        Get the coin bid price.
    Returns:
        Coin bid price
    """
    return self.client.get_price_spread("ACALPHCOIN").bid_price

transfer_coins()

Transfer coins from the miner to the clearing account

Returns: API response

Source code in alpha_trader/miner/__init__.py
69
70
71
72
73
74
75
76
77
78
79
80
81
82
def transfer_coins(self):
    """
        Transfer coins from the miner to the clearing account
    Returns:
        API response
    """
    response = self.client.request("PUT", "api/v2/my/cointransfer")
    self.update_from_api_response(response.json())

    logger.info(
        f"Coins transferred. New transferable coins: {self.transferable_coins}"
    )

    return response.json()

update_from_api_response(api_response)

Update the miner's attributes from the API response.

Parameters:

Name Type Description Default
api_response Dict

The API response containing the updated miner attributes.

required
Source code in alpha_trader/miner/__init__.py
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
def update_from_api_response(self, api_response: Dict):
    """
    Update the miner's attributes from the API response.

    Args:
        api_response (Dict): The API response containing the updated miner attributes.
    """
    self.coins_per_hour = api_response["coinsPerHour"]
    self.id = api_response["id"]
    self.maximum_capacity = api_response["maximumCapacity"]
    self.next_level_coins_per_hour = api_response["nextLevelCoinsPerHour"]
    self.next_level_costs = api_response["nextLevelCosts"]
    self.owner = Owner.from_api_response(api_response["owner"])
    self.storage = api_response["storage"]
    self.transferable_coins = api_response["transferableCoins"]
    self.version = api_response["version"]

upgrade()

Upgrade the miner to the next level.

Returns: API response

Source code in alpha_trader/miner/__init__.py
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
def upgrade(self) -> Dict:
    """
        Upgrade the miner to the next level.
    Returns:
        API response
    """
    response = self.client.request("PUT", "api/v2/my/minerupgrade")
    if response.status_code > 205:
        logger.warning(f"Miner upgrade failed: {response.text}")
        return response.json()

    self.update_from_api_response(response.json())

    logger.info(f"Miner upgraded. New coins per hour: {self.coins_per_hour}")
    logger.info(f"Next level costs: {self.next_level_costs}")
    logger.info(f"Next level coins per hour: {self.next_level_coins_per_hour}")

    return response.json()