fibercrypto / fibercrypto/skyxcommons
Create wallet API endpoint
- 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.