fibercrypto / fibercrypto/skyxcommons

Create wallet API endpoint

Open
#6 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
No language data
Stars
0
Forks
1
PR merge metrics
No merged PRs in 30d

Description

Implement [POST] api/wallets

Should create a new wallet (address) in the blockchain.

Response:

```js
{
// Private key, which will be used to
// sign transactions by the [POST] /api/sign
“privateKey”: ”string”,
// Address which identifies the wallet in the blockchain
“publicAddress”: “string”,
// Any non security sensitive data associated with
// wallet. This context will be passed to
// [POST] /api/transactions/*.
// Can be empty.
“addressContext”: “string”
}
```

Python implementation

```py

def create_wallet():
"""
Create the wallet in blockchain
"""

# generate CSRF token
CSRF_token = app.session.get(form_url(app_config.SKYCOIN_NODE_URL, "/api/v1/csrf")).json()

if not CSRF_token or "csrf_token" not in CSRF_token:
return {"status": 500, "error": "Unknown server error"}

# generate new seed
new_seed = app.session.get(
form_url(app_config.SKYCOIN_NODE_URL, "/api/v1/wallet/newSeed?entropy=128"),
headers={'X-CSRF-Token': CSRF_token['csrf_token']}).json()

if not new_seed or "seed" not in new_seed:
return {"status": 500, "error": "Unknown server error"}

# create the wallet from seed
resp = app.session.post(form_url(app_config.SKYCOIN_NODE_URL, "/api/v1/wallet/create"),
{"seed": new_seed["seed"],
"label": app_config.WALLET_LABEL, "scan": "10"},
headers={'X-CSRF-Token': CSRF_token['csrf_token']})

if not resp:
return {"status": 500, "error": "Unknown server error"}

if resp.status_code != 200:
return {"status": 500, "error": "Unknown server error"}

new_wallet = resp.json()

if not new_wallet or "entries" not in new_wallet:
return {"status": 500, "error": "Unknown server error"}

seed = new_seed['seed']
pubkey = skycoin.cipher_PubKey()
seckey = skycoin.cipher_SecKey()
error = skycoin.SKY_cipher_GenerateDeterministicKeyPair(
seed.encode(), pubkey, seckey)
if error != 0:
return {"status": 500, "error": "Unknown server error"}

return {
"privateKey": binascii.hexlify(bytearray(seckey.toStr())).decode('ascii'),
"publicAddress": new_wallet["entries"][0]["address"],
"addressContext": new_wallet['meta']['filename']
}
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.