Skip to content

Commit

Permalink
New routes
Browse files Browse the repository at this point in the history
  • Loading branch information
Ouziel committed Jan 8, 2025
1 parent 52638a9 commit 90e8664
Show file tree
Hide file tree
Showing 10 changed files with 5,449 additions and 4,484 deletions.
5,298 changes: 2,892 additions & 2,406 deletions apiary.apib

Large diffs are not rendered by default.

34 changes: 26 additions & 8 deletions counterparty-core/counterpartycore/lib/api/compose.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
messages,
util,
)
from counterpartycore.lib.messages.utxo import ID as UTXO_ID
from counterpartycore.lib.messages.attach import ID as UTXO_ID

D = decimal.Decimal

Expand Down Expand Up @@ -182,6 +182,15 @@ def compose_dividend(
return composer.compose_transaction(db, "dividend", params, construct_params)


def get_dividend_estimate_xcp_fee(db, address: str, asset: str): # noqa

Check warning

Code scanning / pylint

Unused argument 'address'. Warning

Unused argument 'address'.
"""
Returns the estimated fee for issuing a dividend.
:param address: The address that will be issuing the dividend (e.g. $ADDRESS_1)
:param asset: The asset or subasset that the dividends are being rewarded on (e.g. MYASSETA)
"""
return messages.dividend.get_estimate_xcp_fee(db, asset, util.CURRENT_BLOCK_INDEX)


def compose_issuance(
db,
address: str,
Expand Down Expand Up @@ -382,6 +391,14 @@ def compose_sweep(db, address: str, destination: str, flags: int, memo: str, **c
return composer.compose_transaction(db, "sweep", params, construct_params)


def get_sweep_estimate_xcp_fee(db, address: str):
"""
Returns the estimated fee for sweeping all assets and/or transfer ownerships to a destination address.
:param address: The address that will be sweeping (e.g. $ADDRESS_1)
"""
return messages.sweep.get_total_fee(db, address, util.CURRENT_BLOCK_INDEX)


def compose_fairminter(
db,
address: str,
Expand Down Expand Up @@ -487,6 +504,14 @@ def compose_attach(
return composer.compose_transaction(db, "attach", params, construct_params)


def get_attach_estimate_xcp_fee(db, address: str = None): # noqa

Check warning

Code scanning / pylint

Unused argument 'address'. Warning

Unused argument 'address'.
"""
Returns the estimated fee for attaching assets to a UTXO.
:param address: The address from which the assets are attached (e.g. $ADDRESS_1)
"""
return gas.get_transaction_fee(db, UTXO_ID, util.CURRENT_BLOCK_INDEX)


def compose_detach(
db,
utxo: str,
Expand All @@ -505,13 +530,6 @@ def compose_detach(
return composer.compose_transaction(db, "detach", params, construct_params)


def get_attach_estimate_xcp_fee(db):
"""
Returns the estimated fee for attaching assets to a UTXO.
"""
return gas.get_transaction_fee(db, UTXO_ID, util.CURRENT_BLOCK_INDEX)


def compose_movetoutxo(db, utxo: str, destination: str, utxo_value: int = None, **construct_params):
"""
Composes a transaction like a send but for moving from one UTXO to another, with the destination is specified as an address.
Expand Down
61 changes: 59 additions & 2 deletions counterparty-core/counterpartycore/lib/api/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -1335,7 +1335,24 @@ def get_cancels(
)


def get_destructions(
def get_all_valid_destructions(ledger_db, cursor: str = None, limit: int = 100, offset: int = None):
"""
Returns the destructions of a block
:param str cursor: The last index of the destructions to return
:param int limit: The maximum number of destructions to return (e.g. 5)
:param int offset: The number of lines to skip before returning results (overrides the `cursor` parameter)
"""
return select_rows(
ledger_db,
"destructions",
where={"status": "valid"},
last_cursor=cursor,
limit=limit,
offset=offset,
)


def get_valid_destructions_by_block(
ledger_db, block_index: int, cursor: str = None, limit: int = 100, offset: int = None
):
"""
Expand All @@ -1348,7 +1365,47 @@ def get_destructions(
return select_rows(
ledger_db,
"destructions",
where={"block_index": block_index},
where={"block_index": block_index, "status": "valid"},
last_cursor=cursor,
limit=limit,
offset=offset,
)


def get_valid_destructions_by_address(
ledger_db, address: str, cursor: str = None, limit: int = 100, offset: int = None
):
"""
Returns the destructions of a block
:param str address: The address to return (e.g. $ADDRESS_1)
:param str cursor: The last index of the destructions to return
:param int limit: The maximum number of destructions to return (e.g. 5)
:param int offset: The number of lines to skip before returning results (overrides the `cursor` parameter)
"""
return select_rows(
ledger_db,
"destructions",
where={"source": address, "status": "valid"},
last_cursor=cursor,
limit=limit,
offset=offset,
)


def get_valid_destructions_by_asset(
ledger_db, asset: str, cursor: str = None, limit: int = 100, offset: int = None
):
"""
Returns the destructions of a block
:param str asset: The asset to return (e.g. XCP)
:param str cursor: The last index of the destructions to return
:param int limit: The maximum number of destructions to return (e.g. 5)
:param int offset: The number of lines to skip before returning results (overrides the `cursor` parameter)
"""
return select_rows(
ledger_db,
"destructions",
where={"asset": asset.upper(), "status": "valid"},
last_cursor=cursor,
limit=limit,
offset=offset,
Expand Down
9 changes: 8 additions & 1 deletion counterparty-core/counterpartycore/lib/api/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def get_routes():
"/v2/blocks/<int:block_index>/debits": queries.get_debits_by_block,
"/v2/blocks/<int:block_index>/expirations": queries.get_expirations,
"/v2/blocks/<int:block_index>/cancels": queries.get_cancels,
"/v2/blocks/<int:block_index>/destructions": queries.get_destructions,
"/v2/blocks/<int:block_index>/destructions": queries.get_valid_destructions_by_block,
"/v2/blocks/<int:block_index>/issuances": queries.get_issuances_by_block,
"/v2/blocks/<int:block_index>/sends": queries.get_sends_by_block,
"/v2/blocks/<int:block_index>/dispenses": queries.get_dispenses_by_block,
Expand Down Expand Up @@ -61,6 +61,7 @@ def get_routes():
"/v2/addresses/<address>/receives": queries.get_receive_by_address,
"/v2/addresses/<address>/sends/<asset>": queries.get_sends_by_address_and_asset,
"/v2/addresses/<address>/receives/<asset>": queries.get_receive_by_address_and_asset,
"/v2/addresses/<address>/destructions": queries.get_valid_destructions_by_address,
"/v2/addresses/<address>/dispensers": queries.get_dispensers_by_address,
"/v2/addresses/<address>/dispensers/<asset>": queries.get_dispenser_by_address_and_asset,
"/v2/addresses/<address>/dispenses/sends": queries.get_dispenses_by_source,
Expand Down Expand Up @@ -90,15 +91,18 @@ def get_routes():
"/v2/addresses/<address>/compose/destroy": compose.compose_destroy,
"/v2/addresses/<address>/compose/dispenser": compose.compose_dispenser,
"/v2/addresses/<address>/compose/dividend": compose.compose_dividend,
"/v2/addresses/<address>/compose/dividend/estimatexcpfees": compose.get_dividend_estimate_xcp_fee,
"/v2/addresses/<address>/compose/issuance": compose.compose_issuance,
"/v2/addresses/<address>/compose/mpma": compose.compose_mpma,
"/v2/addresses/<address>/compose/order": compose.compose_order,
"/v2/addresses/<address>/compose/send": compose.compose_send,
"/v2/addresses/<address>/compose/sweep": compose.compose_sweep,
"/v2/addresses/<address>/compose/sweep/estimatexcpfees": compose.get_sweep_estimate_xcp_fee,
"/v2/addresses/<address>/compose/dispense": compose.compose_dispense,
"/v2/addresses/<address>/compose/fairminter": compose.compose_fairminter,
"/v2/addresses/<address>/compose/fairmint": compose.compose_fairmint,
"/v2/addresses/<address>/compose/attach": compose.compose_attach,
"/v2/addresses/<address>/compose/attach/estimatexcpfees": compose.get_attach_estimate_xcp_fee,
"/v2/utxos/<utxo>/compose/detach": compose.compose_detach,
"/v2/utxos/<utxo>/compose/movetoutxo": compose.compose_movetoutxo,
"/v2/compose/attach/estimatexcpfees": compose.get_attach_estimate_xcp_fee,
Expand All @@ -111,6 +115,7 @@ def get_routes():
"/v2/assets/<asset>/matches": queries.get_order_matches_by_asset,
"/v2/assets/<asset>/credits": queries.get_credits_by_asset,
"/v2/assets/<asset>/debits": queries.get_debits_by_asset,
"/v2/assets/<asset>/destructions": queries.get_valid_destructions_by_asset,
"/v2/assets/<asset>/dividends": queries.get_dividends_by_asset,
"/v2/assets/<asset>/issuances": queries.get_issuances_by_asset,
"/v2/assets/<asset>/sends": queries.get_sends_by_asset,
Expand Down Expand Up @@ -151,6 +156,8 @@ def get_routes():
"/v2/events/counts": queries.get_all_events_counts,
"/v2/events/<event>": queries.get_events_by_name,
"/v2/events/<event>/count": queries.get_event_count,
### destructions ###
"/v2/destructions": queries.get_all_valid_destructions,
### /dispenses ###
"/v2/dispenses": queries.get_dispenses,
### /sends ###
Expand Down
1 change: 1 addition & 0 deletions counterparty-core/counterpartycore/lib/messages/destroy.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ def initialise(db):
[
["status"],
["source"],
["asset"],
],
)

Expand Down
7 changes: 7 additions & 0 deletions counterparty-core/counterpartycore/lib/messages/dividend.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,13 @@ def validate(db, source, quantity_per_unit, asset, dividend_asset, block_index):
return dividend_total, outputs, problems, fee


def get_estimate_xcp_fee(db, asset, block_index):
holders = ledger.holders(db, asset, True, block_index=block_index)
addresses = [holder["address"] for holder in holders]
holder_count = len(set(addresses))
return int(0.0002 * config.UNIT * holder_count)


def compose(
db,
source: str,
Expand Down
32 changes: 15 additions & 17 deletions counterparty-core/counterpartycore/lib/messages/sweep.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,16 @@ def initialise(db):
)


def get_total_fee(db, source, block_index):
total_fee = ANTISPAM_FEE
antispamfee = util.get_value_by_block_index("sweep_antispam_fee", block_index) * config.UNIT
if antispamfee > 0:
balances_count = ledger.get_balances_count(db, source)[0]["cnt"]
issuances_count = ledger.get_issuances_count(db, source)
total_fee = int(balances_count * antispamfee * 2 + issuances_count * antispamfee * 4)
return total_fee


def validate(db, source, destination, flags, memo, block_index):
problems = []

Expand All @@ -79,24 +89,12 @@ def validate(db, source, destination, flags, memo, block_index):

result = ledger.get_balance(db, source, "XCP")

antispamfee = util.get_value_by_block_index("sweep_antispam_fee", block_index) * config.UNIT
total_fee = ANTISPAM_FEE

if antispamfee > 0:
balances_count = ledger.get_balances_count(db, source)[0]["cnt"]
issuances_count = ledger.get_issuances_count(db, source)

total_fee = int(balances_count * antispamfee * 2 + issuances_count * antispamfee * 4)
total_fee = get_total_fee(db, source, block_index)

if result < total_fee:
problems.append(
f"insufficient XCP balance for sweep. Need {total_fee} XCP for antispam fee"
)
else:
if result < ANTISPAM_FEE:
problems.append(
f"insufficient XCP balance for sweep. Need {ANTISPAM_FEE_DECIMAL} XCP for antispam fee"
)
if result < total_fee:
problems.append(
f"insufficient XCP balance for sweep. Need {total_fee} XCP for antispam fee"
)

cursor.close()

Expand Down
Loading

0 comments on commit 90e8664

Please sign in to comment.