Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[api] Many-inputs tx #7

Open
olemis opened this issue Feb 24, 2019 · 0 comments
Open

[api] Many-inputs tx #7

olemis opened this issue Feb 24, 2019 · 0 comments
Assignees

Comments

@olemis
Copy link
Contributor

olemis commented Feb 24, 2019

[POST] /api/transactions/many-inputs

Should build not signed transaction with many inputs.

If the transaction with the specified operationId has already been built by one of the [POST] /api/transactions/* call, it should be ignored and regular response (as in the first request) should be returned.

Request

{
 // Operation ID
“operationId”: “guid”,
 // Sources
“inputs”: [
{
// Source address
“fromAddress”: “string”,
// Amount to transfer from the  fromAddress .
// Integer as string, aligned
// to the droplet precision exponent. Actual value can be
// calculated as
// x = amount / (10 ^ asset.Accuracy)
            “amount”: “string”
        }
],
    // Destination address
    “toAddress”: “string”,
    // ticker ID of the fiber coin , SKY by default 
    “assetId”: “string”
}

Response

{
// Error code.
// Can be empty.
// Should be non empty if an error that match one of the
// listed code is occured. For other errors use HTTP
// status codes.
// enum values:
// -  amountIsTooSmall : amount is too small to execute
// transaction
// -  notEnoughBalance : transaction can’t be executed due
// to balance insufficiency on the source address.
    "errorCode": "enum",
// The transaction context which will be passed to the
// [POST] /api/sign
// Should be not empty when result is successful.
 “transactionContext”: “string”
}

Python implementation

@api.route('/api/transactions/many-inputs', methods=['POST'])
def transactions_many_inputs():
    if not request.json:
        return make_response(jsonify(build_error("Input format error")), 400)
    params = {'operationID', 'inputs', 'toAddress', 'assetId'}
    if all(x not in params for x in request.json):
        return make_response(jsonify(build_error("Input data error")), 400)
    result = transaction_many_inputs(request.json)
    if "transactionContext" in result:
        return jsonify(result)
    return jsonify({"status": 500, "error": "Invalid response"})
def transaction_many_inputs(values):
    """
    build a transaction with many inputs
    """
    csrf = requests.get(form_url(base_url, "/csrf")).json()
    if not csrf or "csrf_token" not in csrf:
        return {"status": 500, "error": "Unknown server error"}
    resp = requests.post(
        form_url(base_url, "/transactions/many-inputs"),
        data=values,
        headers={'X-CSRF-Token': csrf['csrf_token']}
    )
    if not resp:
        return {"status": 500, "error": "Unknown server error"}
    if resp.status_code != 200:
        return {"status": 500, "error": "Unknown server error"}
    return resp.json()
mauricio1802 added a commit to uhsimelo/skyxcommons that referenced this issue Feb 26, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants