Code Monkey home page Code Monkey logo

transaction-manager's Introduction

SKALE Transaction Manager

Discord

Microservice used to manage sending concurrent transactions to the Ethereum network

API

sign_and_send

Takes transaction hash, signs and sends it, returns transaction hash.

  • URL: /sign-and-send
  • Method: POST

Request body:

{
    "transaction_dict": "TRANSACTION_DICT_STRING",
}

Success Response:

{
    "errors": null,
    "data": {
        "transaction_hash": "0x..."
    }
}

Error response:

{
    "error": "Error message",
    "data": null
}

sign

Takes transaction hash, signs it, returns signed transaction.

  • URL: /sign
  • Method: POST

Data Params:

{
    "data": {
        "transaction_dict": "TRANSACTION_DICT_STRING",
    }
}

Success Response:

{
    "errors": null,
    "data": {
        "transaction_hash": "0x..."
    }
}

Error response:

{
    "error": "Error message",
    "data": null
}

address

Returns wallet address.

  • URL: /address
  • Method: GET

URL Params:

None.

Success Response:

{
    "errors": null,
    "data": {
        "address": "0x..."
    }
}

Error response:

{
    "error": "Error message",
    "data": null
}

public_key

Returns wallet public key.

  • URL: /public-key
  • Method: GET

URL Params:

None.

Success Response:

{
    "errors": null,
    "data": {
        "public_key": "0x..."
    }
}

Error response:

{
    "error": "Error message",
    "data": null
}

Development

Run development server

Install dependencies:

pip install -r requirements.txt
pip install -r requirements-dev.txt

Run server:

export $(grep -v '^#' .env | xargs) && python server.py

Build and run test container

docker build -t test-tm .
docker run  --env-file .env-docker -v ~/.skale:/skale_vol -v ~/.skale/node_data:/skale_node_data test-tm

Run transaction-manager container locally

VERSION=0.0.1-develop.0 && docker run -p 3008:3008 --env-file .env-docker -v ~/.skale:/skale_vol -v ~/.skale/node_data:/skale_node_data skalelabshub/transaction-manager:$VERSION

License

License

All contributions are made under the GNU Affero General Public License v3. See LICENSE.

All transaction-manager code Copyright (C) SKALE Labs and contributors.

transaction-manager's People

Contributors

badrogger avatar cstrangedk avatar dependabot-preview[bot] avatar dependabot[bot] avatar dmytronazarenko avatar dmytrotkk avatar kladkogex avatar olehnikolaiev avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

transaction-manager's Issues

API call for transaction queue

We need to have API call for transaction queue.
Would be nice to have:

  • general transaction count form all clients(core node, agents)
  • transaction count from specific agent

Upgrade to use python 3.11

We're currently using Python 3.7 for most of our repos (release date: 2018-06-27 with the end of support 2023-06-27).
Lots of performance improvements were introduces since then, for example:

CPython 3.11 is on average 25% faster than CPython 3.10 when measured with the pyperformance benchmark suite, and compiled with GCC on Ubuntu Linux. Depending on your workload, the speedup could be up to 10-60% faster.

Upgrading Python to 3.11 shouldn't break anything for our customers, since all code will be used in docker containers.

Add gradually increasing gas price strategy into the current transaction manager interface

In case if transaction disappeared on eth network there is no mechanism to reload transaction except external influence (for example restarting transaction manager).
It's better to manager this problem and test the solution on testnet.
Though https://skalelabs.atlassian.net/browse/SKALE-3350 solution is too long to integrate for, we can partially deploy it using current transaction manager interface: wait for transaction to be completed withing some short period of time and if not - increase gas price.

The solution also requires some small modifications in transaction manager python clients (skale-admin, skale-bounty) and may require some changes in IMA (will be updated later).

┆Issue is synchronized with this Jira Task

Error during signing IMA TX S to M

Preconditions
Skaked: 3.5.12-eth-global-beta.1
IMA: eth-global.148.0
Geth: Berlin
16 nodes schain

Step to reproduce
Send tx S >> M IMA ETH transfer

Actual result
Error during signing tx:
{'code': 32000, 'message': 'only replayprotected (EIP-155) transactions allowed over RPC'}

┆Issue is synchronized with this Jira Bug

Add dry run for tx manager transaction queue

Example:
Node don't have enough eth to send ima transaction.
Tx will fail with error :
ValueError: {'code': -32000, 'message': 'insufficient funds for gas * price + value'}
If validator will refill node wallet, all tx in transaction queue will send but they will not actual for ima:
Tx will reverted. Gas used for tx 100k amount of such tx depends on how long node have insufficient funds and ima transactions.
https://rinkeby.etherscan.io/address/0x41e0193bda7e49558ff2b6797220ba88cf5d975e
[~accountid:5b293e1e9bcd7518af2198f6]
[~accountid:5ec633056c50620c1ca56e20]
[~accountid:5b2037f147afa959b14789e5]

┆Issue is synchronized with this Jira Task

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.