Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
9236481
Adding web3modal as a build package for now, changing multiple receiv…
mikulas-mrva May 20, 2022
5d62b24
removing wallet upload models and views, adding wallet connection js,…
mikulas-mrva May 22, 2022
01a04f1
Added SignedMessage model, view and serializer to send payment detail…
mikulas-mrva May 30, 2022
b106f91
Finished the FE code outline, added Permissions to allow POST and GET…
mikulas-mrva May 30, 2022
dcdb640
Switching to the correect way of signing a message with Metamask
mikulas-mrva May 31, 2022
7951816
Changing data signing to typed data
mikulas-mrva Jul 2, 2022
40f9028
Fixing data signing
mikulas-mrva Jul 3, 2022
f11ad3b
Confirming payments, deleting unused permissions module
mikulas-mrva Jul 4, 2022
f6d1579
Improving user flow of the payment process, displaying a message when…
mikulas-mrva Jul 7, 2022
6bf8d96
Missing migration
mikulas-mrva Jul 8, 2022
cba6705
Changing raw_message to text field to circumvent field length limitat…
mikulas-mrva Jul 8, 2022
c0bd7e0
Moving retry triggers from inline to js, adding transaction confirmat…
mikulas-mrva Jul 12, 2022
eefabbb
Handling user dialogue cancellations gracefully.
mikulas-mrva Jul 13, 2022
c958df3
Do not hide success message if the transaction was submitted successf…
mikulas-mrva Jul 14, 2022
0f531d0
chain_id should be larger than uint8 to accomodate all chains
mikulas-mrva Jul 14, 2022
1a6a8df
Fixing a typo, using signTypedData_v4 for signing
mikulas-mrva Jul 14, 2022
3760617
Network name should not be uppercase in _RPC_URL
mikulas-mrva Jul 14, 2022
24ad2d7
Extending chain id field
mikulas-mrva Jul 14, 2022
7fc5597
Bug fixes
mikulas-mrva Jul 14, 2022
5b125b6
Don't let the user pay for multiple order payments wwithin one order
mikulas-mrva Jul 14, 2022
964eacc
Disabling refunds
mikulas-mrva Jul 14, 2022
1e71c56
fixes:
mikulas-mrva Jul 14, 2022
e47ced1
Confirming ERC20 payments
mikulas-mrva Jul 14, 2022
12cb449
Don't confirm payments based on blocks that are too young
mikulas-mrva Jul 14, 2022
ead478f
Display transaction hash on refresh, display transaction details if t…
mikulas-mrva Jul 14, 2022
ba270eb
Add ERC20 balance check to prevent most failing transactions to be su…
mikulas-mrva Jul 15, 2022
39f197f
Automatically confirming payments, ignoring payments that didn't go t…
mikulas-mrva Jul 16, 2022
a4329ec
Preventing a payment to go through in case of insufficient balance er…
mikulas-mrva Jul 16, 2022
3746b18
Only display "please sign a message dialogue" in case it's about to p…
mikulas-mrva Jul 16, 2022
a6cfe42
Only display "please confirm a transaction" right before a transactio…
mikulas-mrva Jul 16, 2022
4e07d66
Optimizing "order_accepting_payments" criteria into a single db query
mikulas-mrva Jul 16, 2022
0d5bc6a
Fixing AttributeError: Manager isn't accessible via SignedMessage ins…
mikulas-mrva Jul 17, 2022
8117a5b
Using getReceipt in both ETH and DAI payment confirmation
mikulas-mrva Jul 17, 2022
64e6048
Using getReceipt in both ETH and DAI payment confirmation
mikulas-mrva Jul 17, 2022
58b1910
refactoring confirm_payments to use reeceieptsto check transaction st…
mikulas-mrva Jul 17, 2022
6a551ed
Refactoring js, splitting into multiple files
mikulas-mrva Aug 8, 2022
a12f5fa
Refactoring js, splitting into multiple files, fixes
mikulas-mrva Aug 9, 2022
a81c8d4
Periodic payment status change check should be running even if user r…
mikulas-mrva Aug 9, 2022
d016a4a
bugfixes
mikulas-mrva Aug 11, 2022
0d736ba
Deleting confirm_refunds.py management command as there are no refund…
mikulas-mrva Aug 23, 2022
5bc664d
Adding an endpoint that can access the status of an Order without aut…
mikulas-mrva Aug 29, 2022
14127b8
Updating Web3.js to a new version 1.7.5
mikulas-mrva Sep 6, 2022
9ec84db
Updating Web3Modal to a hotfixed version branched out from latest ver…
mikulas-mrva Sep 7, 2022
7bf5cc3
Adding *.infura.io to CSP
mikulas-mrva Sep 7, 2022
a3996a5
Fixing some CSP issues, adding signed message data to Order detail co…
mikulas-mrva Sep 7, 2022
9d2d8d3
Updating CSP and fixing javascript issues that require a double click…
mikulas-mrva Sep 12, 2022
9fdefbd
Handling missing providers gracefully, deleting a ton of debuggers;
mikulas-mrva Sep 12, 2022
e855d61
Bugfix: retrieving web3modal correctly
mikulas-mrva Sep 13, 2022
0085c61
Bugfix: retrieving web3modal correctly
mikulas-mrva Sep 13, 2022
d44866d
bugfixes
mikulas-mrva Sep 13, 2022
34c762b
bugfixes - two different kinds of provider
mikulas-mrva Sep 20, 2022
9cd0d30
adding loggers to confirm_payment mgmt commands
mikulas-mrva Sep 20, 2022
a52d961
adding loggers to confirm_payment mgmt commands, log level changed to…
mikulas-mrva Sep 20, 2022
847e251
Also checking for cancelled OrderPayments
mikulas-mrva Sep 20, 2022
e22c94e
ERC20ABIView should be public
mikulas-mrva Sep 20, 2022
acda5b8
Confirming DAI payments using the correct received address
mikulas-mrva Sep 20, 2022
e0eb0b3
Checking ERC20 contract address as well
mikulas-mrva Sep 20, 2022
3761064
Changing `url` template tag to `eventurl event`
mikulas-mrva Sep 20, 2022
da3860a
Changing `url` template tag to `eventurl event`
mikulas-mrva Sep 20, 2022
b06f143
Views should be compatible with multidomain as well as signel event p…
mikulas-mrva Sep 20, 2022
996d36d
Arbitrum DAI should have a checksum address
mikulas-mrva Sep 20, 2022
0afc1f1
All DAI addresses should be checksum addresses
mikulas-mrva Sep 20, 2022
6dedcf4
* code cleanup
mikulas-mrva Sep 29, 2022
cd57833
adding links to control.html list of payments
mikulas-mrva Sep 30, 2022
382e944
Adding payment data to exports
mikulas-mrva Sep 30, 2022
54c97b0
Fixing tests
mikulas-mrva Sep 30, 2022
e31a0a9
Linter complaints
mikulas-mrva Sep 30, 2022
d21ada1
Linter complaints
mikulas-mrva Sep 30, 2022
e5f1299
Removing Refunds from the exports logic, we don't support them anymore
mikulas-mrva Oct 11, 2022
f5060f4
Moving SAFETY_BLOCK_COUNT and PAYMENT_NOT_RECIEVED_RETRY_TIMEOUT valu…
mikulas-mrva Oct 11, 2022
366a1ba
Added a json validator for TOKEN_RATES field
mikulas-mrva Oct 11, 2022
49387f0
Removing an unused constant
mikulas-mrva Oct 11, 2022
4999c6a
Fixing a template bug
mikulas-mrva Nov 3, 2022
409c954
Rinkeby in Peace
mikulas-mrva Nov 3, 2022
3495877
safety_block_count can be None
mikulas-mrva Nov 3, 2022
9614138
Using Correct DAI contract
mikulas-mrva Nov 8, 2022
c7d9e2d
Adding Sepolia ETH to the config, not sure what the correct DAI contr…
mikulas-mrva Nov 8, 2022
82e5820
Putting Rinkeby back in place for Exports, added a DISABLED flag to p…
mikulas-mrva Nov 9, 2022
d320c79
Adding Token Rate at time of order to ETH payment export
mikulas-mrva Nov 9, 2022
8fe7659
Export token price in ether, not wei
mikulas-mrva Nov 10, 2022
79ab76c
Trying to fix infinite pip backtracking and adding python 3.10, 3.11 …
mikulas-mrva Dec 23, 2022
aaeb1ff
Fixinf dependency conflicts for Py<3.8
mikulas-mrva Dec 23, 2022
7fc5dcb
Temporarily disabling pip check
mikulas-mrva Dec 23, 2022
9c8df85
Fixing tests, pinning web3 to a beta of v6 temporarily to resolve an …
mikulas-mrva Dec 23, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 15 additions & 6 deletions .github/workflows/tox.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,23 @@ jobs:
toxenv: py37-integration
- python-version: 3.8
toxenv: py38-core
- python-version: 3.8
toxenv: lint
- python-version: 3.8
toxenv: py38-integration
- python-version: 3.9
toxenv: py39-core
- python-version: 3.9
toxenv: py39-integration
- python-version: 3.8
toxenv: lint

- python-version: "3.10"
toxenv: py310-core
- python-version: "3.10"
toxenv: py310-integration
- python-version: "3.11"
toxenv: py311-core
- python-version: "3.11"
toxenv: py311-integration

steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
Expand All @@ -40,10 +48,11 @@ jobs:
if: steps.cache.outputs.cache-hit != 'true'
run: |
python -m pip install --upgrade pip wheel setuptools
pip install -e .[dev]
pip install -e .[dev] --use-deprecated=legacy-resolver

- name: Pip Check
run: pip check
# TODO enable again after the protobuf version conflict between pretix and web3.py is resolved
#- name: Pip Check
# run: pip check

- name: ${{ matrix.toxenv }}
run: tox
Expand Down
96 changes: 45 additions & 51 deletions pretix_eth/exporter.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,12 @@
OrderPayment,
OrderRefund,
)
from pretix_eth.models import WalletAddress

from web3 import Web3

from pretix_eth.models import SignedMessage
from pretix_eth.network.tokens import IToken, \
all_token_and_network_ids_to_tokens

import pytz

Expand All @@ -23,12 +28,33 @@ def payment_to_row(payment):
else:
completion_date = ''

token = payment.info_data.get("currency_type", "")
currency_type = payment.info_data.get("currency_type", "")
token: IToken = all_token_and_network_ids_to_tokens.get(currency_type, None)

if token is None:
chain_id = currency_type
token_address = f"Missing ERC20 contract data for {currency_type}"
else:
chain_id = token.CHAIN_ID
token_address = token.ADDRESS

fiat_amount = payment.amount
token_amount = payment.info_data.get("amount", "")
token_rate = payment.info_data.get("token_rate", "")

confirmed_transaction: SignedMessage = payment.signed_messages.filter(
is_confirmed=True).first()
if confirmed_transaction is None:
confirmed_transaction: SignedMessage = payment.signed_messages.last()

wallet_address = WalletAddress.objects.filter(order_payment=payment).first()
hex_wallet_address = wallet_address.hex_address if wallet_address else ""
if confirmed_transaction is not None:
sender_address = confirmed_transaction.sender_address
recipient_address = confirmed_transaction.recipient_address
transaction_hash = confirmed_transaction.transaction_hash
else:
sender_address = None
recipient_address = None
transaction_hash = None

row = [
"Payment",
Expand All @@ -39,39 +65,14 @@ def payment_to_row(payment):
completion_date,
payment.state,
fiat_amount,
token_amount,
token,
hex_wallet_address,
]
return row


def refund_to_row(refund):
time_zone = pytz.timezone(refund.order.event.settings.timezone)
if refund.execution_date:
completion_date = date_to_string(time_zone, refund.execution_date)
else:
completion_date = ''

token = refund.info_data.get("currency_type", "")
fiat_amount = refund.amount
token_amount = refund.info_data.get("amount", "")

wallet_address = WalletAddress.objects.filter(order_payment=refund.payment).first()
hex_wallet_address = wallet_address.hex_address if wallet_address else ""

row = [
"Refund",
refund.order.event.slug,
refund.order.code,
refund.full_id,
date_to_string(time_zone, refund.created),
completion_date,
refund.state,
fiat_amount,
token_amount,
token,
hex_wallet_address,
Web3.fromWei(int(token_amount), 'ether'),
currency_type,
sender_address,
recipient_address,
transaction_hash,
chain_id,
token_address,
token_rate,
]
return row

Expand All @@ -82,7 +83,10 @@ class EthereumOrdersExporter(ListExporter):

headers = (
'Type', 'Event slug', 'Order', 'Payment ID', 'Creation date',
'Completion date', 'Status', 'Amount', 'Token', 'Wallet address'
'Completion date', 'Status', 'Fiat Amount', 'Token Amount', 'Token',
'ETH or DAI sender address', 'ETH or DAI receiver address',
'Transaction Hash', 'Chain ID', 'DAI contract address',
'Token Rate at time of order',
)

@property
Expand Down Expand Up @@ -117,25 +121,15 @@ def iterate_list(self, form_data):
provider='ethereum'
).order_by('created')

refunds = OrderRefund.objects.filter(
order__event__in=self.events,
state__in=form_data.get('refund_states', []),
provider='ethereum'
).order_by('created')

objs = sorted(list(payments) + list(refunds), key=lambda obj: obj.created)

yield self.headers

yield self.ProgressSetTotal(total=len(objs))
for obj in objs:
yield self.ProgressSetTotal(total=payments.count())
for obj in payments:
if isinstance(obj, OrderPayment):
row = payment_to_row(obj)
elif isinstance(obj, OrderRefund):
row = refund_to_row(obj)
else:
raise Exception(
'Invariant:Expected OrderPayment or OrderRefund, found {0}'.format((obj))
'Invariant:Expected OrderPayment, found {0}'.format((obj))
)
yield row

Expand Down
Loading