GithubHelp home page GithubHelp logo

ferranmarin / axie-scholar-utilities Goto Github PK

View Code? Open in Web Editor NEW
151.0 12.0 108.0 1.91 MB

This software's intent is to automate all activities related to manage Axie Infinity Scholars. It is specially aimed to managers with large scholar rosters.

License: GNU General Public License v3.0

Python 99.77% Dockerfile 0.23%
python axie-infinity ethereum eth python3 docker automation axie ronin slp

axie-scholar-utilities's Introduction

Axie Scholars Utilities

CI to Docker Hub Docker Image

This software's intent is to automate all activities related to manage Scholars. It is specially aimed to mangers with large scholar roasters. As of now it has the following commands:

  • Generate Secrets (Helper to generate secrets.json file)
  • Mass Generate Secrets (Helper to generate secrets.json file from a csv file, for bulk creation)
  • Generate Payout file (Helper to generate payments.json file from a csv file)
  • SLP Claim
  • Automatic Payouts
  • Axie Transfers
  • Axie Morphing
  • Axie Breeding
  • QR Code Generation
  • Scatter RON to your scholar accounts

Disclaimer!

From v.3 onwards all transactions will cost RON and will no longer use your free tx. Be aware of that!

WITH TREZOR SUPORT!

To know how to use it, install it, please visit the wiki

How is this and future developments financed?

There is embedded in the code a 1% fee. I believe this is a fair charge for this automation. It allows me to dedicate time and effort on bettering this software and add more features! Please do not remove it as it is the only way I have to support this project.

There is also a fee for breeding. This one is charged at once and the pricing is as follows. Each breed costs:

Range Price
Until 15 30 SLP
From 16 to 30 25 SLP
From 31 to 50 20 SLP
From 51 15 SLP

So if you want to breed 22 Axies the fee would be:

(15 * 30) + (7 * 25) = 625 SLP

The more you breed at once, the cheaper it gets per axie. Be careful with the max amount of tx per account! You can breed using multiple accounts and pay the fee with another one. More instructions, in the wiki,

Roadmap

  • Release a desktop app (even more convenient)
  • Integrate with Discord (via a self-hosted bot, it will be 100% yours!)
  • ...
  • Feel free to suggest what's next on Discord! :)

Feel free to open issues requesting features. I will consider all of them and maybe add them in the future!

Donations

If you want to donate to thank me, feel free to do so at this ronin address:

ronin:9fa1bc784c665e683597d3f29375e45786617550

If you prefer you can:

ko-fi

Discord

Feel free to join this project's Discord

axie-scholar-utilities's People

Contributors

319zhk avatar dependabot[bot] avatar ferranmarin avatar kara-todd avatar rogalek avatar snyk-bot avatar stefdworschak avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

axie-scholar-utilities's Issues

[SUGGESTION]Discord Integration

Is your feature request related to a problem? Please describe.
We need easier ways to manage scholar comms.

Describe the solution you'd like
We would like to have our scholars or in defect a channel in our private discord to announce the payments when they are made.

Describe alternatives you've considered

  • Copy paste the output of the tool to discord (might be a bit clunky)
  • Send msg to a channel (all scholars/trainers, see all payments)
  • Send DM's to each individual scholar/trainer

Additional context
Most academies/scholar roasters have their own private discord server and a bot integration would greatly help communicating.

[SUGGESTION] Generate Results File

Is your feature request related to a problem? Please describe.
Managers need to send all transactions done and copy paste from terminal is a bit cluncky.

Describe the solution you'd like
Export those logs to a file!

Describe alternatives you've considered
This can be an integration with discord in the future

[SUGGESTION] Increase security

Is your feature request related to a problem? Please describe.
Tool uses the secrets.json file where a bunch of private keys are stored. Currently security burden is on the user.

Describe the solution you'd like
Find a way to make storing that file in a personal computer safer. Maybe some sort of encryption?

Describe alternatives you've considered
Stay as we are, which is ok, but can be better.

Additional context
Many users, run this tool on their personal computers. Dangerous activities in werid places of internet or downloading suspiccious stuff could endanger their wallets if they did not take any measures. I want to help them stay safe.

[BUG] Claiming giving 5xx

Describe the bug
Sometimes when claiming we get a 500.

To Reproduce
Claim normally and randomly get a 5xx error.

Expected behavior
Catch the 500, give it a few seconds and retry. Put a Max number of retries of probably 5 (?) to not be in an infinte loop if the website is down.

[BUG]Installing bitarray (1.2.2) ValueError

• Installing bitarray (1.2.2)

ValueError

File \C:\Users\Administrator\AppData\Local\pypoetry\Cache\artifacts\83\d1\ad\5a1b5bf51208b83b7997ecbadd107b564bbcfb891
7e3dd3b7e2b0eed44\bitarray-1.2.2.tar.gz does not exist

at ~.poetry\lib\poetry_vendor\py3.8\poetry\core\packages\file_dependency.py:40 in init
36│ except FileNotFoundError:
37│ raise ValueError("Directory {} does not exist".format(self._path))
38│
39│ if not self._full_path.exists():
→ 40│ raise ValueError("File {} does not exist".format(self._path))
41│
42│ if self._full_path.is_dir():
43│ raise ValueError("{} is a directory, expected a file".format(self._path))
44│

[SUGGESTION] Manage Dropout Scholars

Is your feature request related to a problem? Please describe.
Sometimes in the middile of a payment period a scholar drops off. Add a means to account for that

Describe the solution you'd like
Not sure how to implement this yet...

I welcome ideas for how to solve this.

[BUG] HTTPError: 401 Client Error: Unauthorized for url: https://proxy.roninchain.com/free-gas-rpc while transferring Axie

In transfers.py file, following line

Line 74: self.w3.eth.send_raw_transaction(signed.rawTransaction)

Bug:

/usr/local/lib/python3.9/site-packages/web3/eth.py in send_raw_transaction(self, transaction)
    696 
    697     def send_raw_transaction(self, transaction: Union[HexStr, bytes]) -> HexBytes:
--> 698         return self._send_raw_transaction(transaction)
    699 
    700     def sign_munger(

/usr/local/lib/python3.9/site-packages/web3/module.py in caller(*args, **kwargs)
     55             return LogFilter(eth_module=module, filter_id=err.filter_id)
     56         result_formatters, error_formatters, null_result_formatters = response_formatters
---> 57         result = w3.manager.request_blocking(method_str,
     58                                              params,
     59                                              error_formatters,

/usr/local/lib/python3.9/site-packages/web3/manager.py in request_blocking(self, method, params, error_formatters, null_result_formatters)
    184         Make a synchronous request using the provider
    185         """
--> 186         response = self._make_request(method, params)
    187         return self.formatted_response(response,
    188                                        params,

/usr/local/lib/python3.9/site-packages/web3/manager.py in _make_request(self, method, params)
    145             self.middleware_onion)
    146         self.logger.debug("Making request. Method: %s", method)
--> 147         return request_func(method, params)
    148 
    149     async def _coro_make_request(

/usr/local/lib/python3.9/site-packages/cytoolz/functoolz.pyx in cytoolz.functoolz.curry.__call__()

/usr/local/lib/python3.9/site-packages/web3/middleware/formatting.py in apply_formatters(method, params, make_request, request_formatters, result_formatters, error_formatters)
     74         response = make_request(method, formatted_params)
     75     else:
---> 76         response = make_request(method, params)
     77 
     78     if "result" in response and method in result_formatters:

/usr/local/lib/python3.9/site-packages/web3/middleware/gas_price_strategy.py in middleware(method, params)
     88             )
     89             return make_request(method, (transaction,))
---> 90         return make_request(method, params)
     91 
     92     return middleware

/usr/local/lib/python3.9/site-packages/cytoolz/functoolz.pyx in cytoolz.functoolz.curry.__call__()

/usr/local/lib/python3.9/site-packages/web3/middleware/formatting.py in apply_formatters(method, params, make_request, request_formatters, result_formatters, error_formatters)
     72         formatter = request_formatters[method]
     73         formatted_params = formatter(params)
---> 74         response = make_request(method, formatted_params)
     75     else:
     76         response = make_request(method, params)

/usr/local/lib/python3.9/site-packages/web3/middleware/attrdict.py in middleware(method, params)
     31     """
     32     def middleware(method: RPCEndpoint, params: Any) -> RPCResponse:
---> 33         response = make_request(method, params)
     34 
     35         if 'result' in response:

/usr/local/lib/python3.9/site-packages/cytoolz/functoolz.pyx in cytoolz.functoolz.curry.__call__()

/usr/local/lib/python3.9/site-packages/web3/middleware/formatting.py in apply_formatters(method, params, make_request, request_formatters, result_formatters, error_formatters)
     74         response = make_request(method, formatted_params)
     75     else:
---> 76         response = make_request(method, params)
     77 
     78     if "result" in response and method in result_formatters:

/usr/local/lib/python3.9/site-packages/cytoolz/functoolz.pyx in cytoolz.functoolz.curry.__call__()

/usr/local/lib/python3.9/site-packages/web3/middleware/formatting.py in apply_formatters(method, params, make_request, request_formatters, result_formatters, error_formatters)
     74         response = make_request(method, formatted_params)
     75     else:
---> 76         response = make_request(method, params)
     77 
     78     if "result" in response and method in result_formatters:

/usr/local/lib/python3.9/site-packages/cytoolz/functoolz.pyx in cytoolz.functoolz.curry.__call__()

/usr/local/lib/python3.9/site-packages/web3/middleware/formatting.py in apply_formatters(method, params, make_request, request_formatters, result_formatters, error_formatters)
     72         formatter = request_formatters[method]
     73         formatted_params = formatter(params)
---> 74         response = make_request(method, formatted_params)
     75     else:
     76         response = make_request(method, params)

/usr/local/lib/python3.9/site-packages/web3/middleware/buffered_gas_estimate.py in middleware(method, params)
     38                 )
     39                 return make_request(method, [transaction])
---> 40         return make_request(method, params)
     41     return middleware
     42 

/usr/local/lib/python3.9/site-packages/web3/middleware/exception_retry_request.py in middleware(method, params)
    103             for i in range(retries):
    104                 try:
--> 105                     return make_request(method, params)
    106                 # https://github.com/python/mypy/issues/5349
    107                 except errors:  # type: ignore

/usr/local/lib/python3.9/site-packages/web3/providers/rpc.py in make_request(self, method, params)
     86                           self.endpoint_uri, method)
     87         request_data = self.encode_rpc_request(method, params)
---> 88         raw_response = make_post_request(
     89             self.endpoint_uri,
     90             request_data,

/usr/local/lib/python3.9/site-packages/web3/_utils/request.py in make_post_request(endpoint_uri, data, *args, **kwargs)
     47     # https://github.com/python/mypy/issues/2582
     48     response = session.post(endpoint_uri, data=data, *args, **kwargs)  # type: ignore
---> 49     response.raise_for_status()
     50 
     51     return response.content

/usr/local/lib/python3.9/site-packages/requests/models.py in raise_for_status(self)
    951 
    952         if http_error_msg:
--> 953             raise HTTPError(http_error_msg, response=self)
    954 
    955     def close(self):

HTTPError: 401 Client Error: Unauthorized for url: https://proxy.roninchain.com/free-gas-rpc

[SUGGESTION] Add Percent Payments Method

**Is your feature request related to a problem?
Some users want the payments to be based on % and not the full amounts.

Describe the solution you'd like
I'll create an alternative json schema to identify payments by percent from payments by full amount in the payments.json file.

[SUGGESTION] Flexible Payments

Is your feature request related to a problem? Please describe.
More and more ways to pay, ie, minimum and rest for scholar and many others.

Describe the solution you'd like
A truly flexible way to do payouts. So anyone can adapt it to their needs.

Describe alternatives you've considered
Stay as we are, but that loses us users that need some flexibility on the systems

Additional context
Many users requested if their own specific way of dealing with payments is possible and we have to come up with different ways to adapt their needs to the system. let's do the oposit!

[SUGGESTION] Implement Transfer Safe Mode

Is your feature request related to a problem? Please describe.
During axies transfer you coud potentially send it to an unknown address.

Describe the solution you'd like
Add a safe-mode with --safe-mode where you can only send axies to those accounts that you also have in your secrets.json

Batch Claim SLP

Amazing work because the info are so hard to find, they just have no doc...

Sorry if I am wrong but it seems you didn't implement batch SLP claim.

This is actually the most important. I guess maybe it's difficult to do ?

(I'm willing to help if you can put me in the right direction to do that)

Best regards

[BUG] Fix some log messages

Describe the bug
When transfering axies if you happen not to have a secret for the origin account it will fail to throw an appripiate log message. We either need to add account names to the json file or simply remove it from the log message.

On another note, for the claim, there are multiple messages without the account name and only the ronin, it helps managers identify their different accounts.

To Reproduce
Steps to reproduce the behavior:

  • Either run claims
  • Or run transfer axies

Expected behavior
Better logs! More information for the users.

free gas rpc[SUGGESTION]

hi, any improvement to the daily free gas limit ?, 100 transactions may be too few for some people.

[SUGGESTION] Re-try / Log failed transactions

Is your feature request related to a problem? Please describe.
In case a transaction fails there is no easy way to re-try.

Describe the solution you'd like
Log failed transitions in another file and create a command to re-try them!

[SUGGESTION] Transfer Axie File Auto get Origin Account

Is your feature request related to a problem? Please describe.
Simplify the entry json to only ask for the axie and the destination wallet.

Describe the solution you'd like
Query the chain to see where an axie iss and if that is in secrets.json, proceed.

[SUGGESTION] Results files per execution

Is your feature request related to a problem? Please describe.
Results file get convoluted after a use or with lots of scholars.

Describe the solution you'd like
Each execution creates it's own results file with a timestamp,

Describe alternatives you've considered
Keep things as is.

Additional context
Need to work around the docker executions and how to extract those files. How it creates folders if files are non existen.

403 Client Error: Forbidden for Url: https://api.roninchain.com/rpc

Describe the bug
When trying to run the payout command, it fails with this error message
403 Client Error: Forbidden for Url: https://api.roninchain.com/rpc

Claims on SLP seem to be working fine though, so it seemed odd that one worked and the other didn't.

To Reproduce
Steps to reproduce the behavior:

  1. Run the payout command

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: MacOS - Latest
  • Browser: Firefox - Latest

Additional context
We run the commands using Poetry - if that's relevant

Add files if related
Just remmember NOT to send any private keys!

[SUGGESTION] Support Trezor Accounts

Is your feature request related to a problem? Please describe.
If you secure your account with trezor device, they cannot get the private keys, so this tool cannot work.

Describe the solution you'd like
Tool works, each signature the user is prompted to sign using trezor.

[SUGGESTION] Create a website to administrate everything

In order to make this amazing code more usable, I suggest to create a website in order to populate or modify the payments.json file, to claim just by clicking a button or the execute the payout on the same way.

What do you think?

Play with shorter timeout

10 minute timeout might be a bit too long, let's try with 5min. I hope that will be enough to see an stuck transaction that needs to be unstuck.

Also add a small delay between tx replacement and re-try of the original tx.

[SUGGESTION] Check Axie in Account before attempt transfer

Is your feature request related to a problem? Please describe.
If a transfer fails and we re-run transfers we don't skip impossible/already done transfers.

Describe the solution you'd like
Just check if the transfer is possible and if not skip.

[SUGGESTION] Confusing naming conventions

Is your feature request related to a problem?
I've talked with a few mangers/investors and they had some confusion about the naming conventions used in this tool. I propose to change it.

Describe the solution you'd like
Change the naming convention to:
Investor - who puts the money
Manager - who managers scholars
Scholars - who plays the game

[Investigate] Review SLP claiming

"there seems to be an issue with claiming if there are still SLP left in the ronin account, it claimed but slp never been added to ronin wallet, i had to manually click claim for those accounts"

" yeah, I think if it sees slp it assumes the claim was successful and skips."

[BUG] 400 Client Error while transferring Axie from one wallet to another

Suddenly started getting this error from today. It worked perfectly before today.

File: axie-scholar-utilities/axie-scholar-utilities/source/axie/transfers.py
Line: 73 self.w3.eth.send_raw_transaction(signed.rawTransaction)
Error: requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://proxy.roninchain.com/free-gas-rpc

[Improvement] Add a faster way to process payments

Right now I have this implementation:

# wait for transaction to finish
        while True:
            try:
                recepit = self.w3.eth.get_transaction_receipt(hash)
                if recepit["status"] == 1:
                    success = True
                else:
                    success = False
                break
            except exceptions.TransactionNotFound:
                logging.info("Waiting for transaction to finish...")
                # Sleep 5 seconds not to constantly send requests!
                sleep(5)

This is defenetly not fast and it wait a long time potentially! I need to come up with a good async method to group up a few transactions and wait for them all at the same time. If one fails, re-try re-calculating the nonce.

[SUGGESTION] Too many logs

Is your feature request related to a problem? Please describe.
With the new changes and the debug logs being default, the script spits out too much information by default. I should revert this and somehow still show information without polluting results.log

Describe the solution you'd like
Better logs, maintaining results.log

[SUGGESTION] Less Spammy Logs

Is your feature request related to a problem? Please describe.
Changed logs to create new files, they create too many!

Describe the solution you'd like
Only 1 file per execution, not the multiple ones we have now...

[SUGGESTION] 0 SLP scholar, log error, but dun stop execution...

Is your feature request related to a problem? Please describe.
trying to run the payments, if there is one scholar with 0 slp to pay, the program will stop and not conitnue, you do not have the choice to continue.

Describe the solution you'd like
if there is an error where an account will not send payments, have the choice to log the error and continue to next.

Describe alternatives you've considered
leave as is,

Additional context

image

[SUGGESTION] Integrate transfers to Binance

Describe the solution you'd like
Users want to deposit from their ronin wallets to binance as they have just announced 0 gas deposits.

Describe alternatives you've considered
We keep using the same as now.

Additional context
From binance they can exchange SLP, AXS to other currencies and even FIAT. Some managers would like to pay or withdraw FIAT.

Auto-Payouts is free? Or incurs ETH gas fees?

@FerranMarin great tool! I have a question about the automated payments.
Will using the automated payments incur ETH network fees? Or is it free because it uses the Ronin sidechain?

I took a look at the automated payments code in the below line, it looks like its swapping out the Ronin address for an Ethereum address:

self.from_acc = from_acc.replace("ronin:", "0x")

At the same time, the web3 provider being loaded is the free Ronin provider.

self.w3 = Web3(Web3.HTTPProvider(RONIN_PROVIDER_FREE))

Will using the automated payments incur ETH network fees? Or is it free because it uses the Ronin sidechain?

[SUGGESTION] Modify Claims to accept payments file.

Is your feature request related to a problem? Please describe.
Claims work with the secrets file and would claim ALL your accounts

Describe the solution you'd like
Accept payout file to only claim those accounts you intend to payout.

[SUGGESTION] Excel/CSV Output

Describe the solution you'd like
Some users have requested an excel or csv output where they can see row by row the transactions made for each account, something like:

AccountName / ScholarCut / ScholarTxLink / TrainerCut / TrainerTxLink / ...

Describe alternatives you've considered
We can just not do it and keep the information on the logs file.

Additional context
imagen

[BUG] Breaking bugs when morphing axies

Describe the bug
Breaking bugs when morphing axies.

To Reproduce
Simply run the tool to morph axies.

Expected behavior
Report the error, but continue execution

Screenshots
Traceback captures:

2021-10-23 03:20:01,198 - INFO: I shall morph all axies I can!
2021-10-23 03:20:06,110 - INFO: Axie 3470879 is already an adult!
Traceback (most recent call last):
  File "axie_scholar_cli.py", line 333, in <module>
    run_cli()
  File "axie_scholar_cli.py", line 281, in run_cli
    axies_to_morph = Axies(acc).find_axies_to_morph()
  File "/opt/app/axie/axies.py", line 36, in find_axies_to_morph
    morph_date, body_shape = self.get_morph_date_and_body(axie)
  File "/opt/app/axie/axies.py", line 57, in get_morph_date_and_body
    body_shape = response.json()["data"]["axie"]["bodyShape"]
  File "/usr/local/lib/python3.8/site-packages/requests/models.py", line 910, in json
    return complexjson.loads(self.text, **kwargs)
  File "/usr/local/lib/python3.8/json/init.py", line 357, in loads
    return _default_decoder.decode(s)
  File "/usr/local/lib/python3.8/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/local/lib/python3.8/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)


  File "axie_scholar_cli.py", line 333, in <module>
    run_cli()
  File "axie_scholar_cli.py", line 281, in run_cli
    axies_to_morph = Axies(acc).find_axies_to_morph()
  File "/opt/app/axie/axies.py", line 36, in find_axies_to_morph
    morph_date, body_shape = self.get_morph_date_and_body(axie)
  File "/opt/app/axie/axies.py", line 57, in get_morph_date_and_body
    body_shape = response.json()["data"]["axie"]["bodyShape"]
KeyError: 'data'

  File "axie_scholar_cli.py", line 333, in <module>
    run_cli()
  File "axie_scholar_cli.py", line 281, in run_cli
    axies_to_morph = Axies(acc).find_axies_to_morph()
  File "/opt/app/axie/axies.py", line 36, in find_axies_to_morph
    morph_date, body_shape = self.get_morph_date_and_body(axie)
  File "/opt/app/axie/axies.py", line 57, in get_morph_date_and_body
    body_shape = response.json()["data"]["axie"]["bodyShape"]
TypeError: 'NoneType' object is not subscriptable

Check Updates

On startup check if running latest version of code!

[BUG]

Describe the bug
leaving "ronin:...." as is in the payments.json file, will make everything run fine until it tries to pay, there should be an error before informing it will occur so it doesnt claim and then try to pay the scholar/donation/other account.

I didnt test if the other accounts would have sent first, and then have an error for the manager or what.

To Reproduce
Steps to reproduce the behavior:
leave ronin address in payment file for manager as is, and run program with everything else present (axie.manager pay file, secrets, etc)

Expected behavior
I think in the worst case, tho i did not send payments, the scholars and donation may process but not the manager payment. im not sure if someone who wouldnt notice would then update the axie.manager pay file again and the next occurance would do same, pays sent but not for manager %. Not sure.

Screenshots
image

Desktop (please complete the following information):
windows, powershell

[BUG] 403 Client Error: Forbidden for url: https://proxy.roninchain.com/free-gas-rpc

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

Add files if related
Just remmember NOT to send any private keys!

[SUGGESTION] Add Transfer File Creation from CSV

Is your feature request related to a problem? Please describe.
Transfer axies need a JSON file to be created, that can be a bit hard to create.

Describe the solution you'd like
Have a way to generate such JSON file via a CSV file.

Additional context
Other JSON files already have such helper functions.

[BUG] Windows Commands

Describe the bug
Windows docker commands are broken, I need to fix them in the documentation. If they use it they do not work.

[SUGGESTION] Add warning if still not claimable (by date)

Is your feature request related to a problem? Please describe.
Right now we try to claim and unless a server problem we try it anyway without checking the last claim date.

Describe the solution you'd like
Check last claim date > 14 days before attempting a claim. And throw a warning if this case happens.

[BUG] Claims break if unclaimed account is unclaimable

Describe the bug
An unclaimed unclaimable account will break the claims execution.

To Reproduce
If an account has never been claimed and is still unclaimable, it will break the script due to this response bit:

"blockchain_related": {
    "signature": {
        "signature": "",
        "amount":0,
        "timestamp":1630619519
}

Expected behavior
It should just report as unclaimable and move on.

[BUG] Rare bug on Trezor

Describe the bug
imagen

Might also need to add a small delay between payments, as sometimes it calculates wrong the nonce (specially in slower ronin days)

To Reproduce
It randomly happens in some transactions. Has to do with leading 0 bytes in parts of the signature and the rlp encode function.

Additional context
Problem apparently solved here: MOACChain/moac-core#24
Been trying to fix it in branch trezor_rare_bug_fix

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.