Fix setup.py to include all modules

This commit is contained in:
nolash 2020-08-08 11:33:15 +02:00
parent 4df619f072
commit 646dbf5f79
Signed by: lash
GPG Key ID: 93EC1C676274C889
18 changed files with 181 additions and 171 deletions

View File

@ -0,0 +1,4 @@
import crypto_dev_signer.eth.signer
import crypto_dev_signer.eth.web3ext
import crypto_dev_signer.eth.transaction
import crypto_dev_signer.common

View File

View File

@ -0,0 +1 @@
from crypto_dev_signer.eth.signer.defaultsigner import ReferenceSigner, Signer

View File

@ -6,7 +6,7 @@ import binascii
from rlp import encode as rlp_encode
# local imports
from common import strip_hex_prefix, add_hex_prefix
from crypto_dev_signer.common import strip_hex_prefix, add_hex_prefix
logg = logging.getLogger(__name__)

View File

@ -2,7 +2,7 @@ import re
from web3 import Web3 as Web3super
from web3 import WebsocketProvider, HTTPProvider
from web3ext.middleware import PlatformMiddleware
from .middleware import PlatformMiddleware
re_websocket = re.compile('^wss?://')
re_http = re.compile('^https?://')

View File

@ -0,0 +1 @@
from .postgres import ReferenceKeystore

View File

@ -12,8 +12,8 @@ from eth_keys.backends import NativeECCBackend
import sha3
# local imports
from common import strip_hex_prefix
from keystore.interface import Keystore
from crypto_dev_signer.common import strip_hex_prefix
from .interface import Keystore
keyapi = KeyAPI(NativeECCBackend)

View File

@ -1 +0,0 @@
scripts/crypto-dev-daemon.py

158
scripts/crypto-dev-daemon Executable file
View File

@ -0,0 +1,158 @@
#!/usr/bin/python3
import socket
import json
import logging
import sys
import os
from jsonrpc.exceptions import *
from crypto_dev_signer.eth.signer import ReferenceSigner
from crypto_dev_signer.eth.transaction import EIP155Transaction
from crypto_dev_signer.keystore import ReferenceKeystore
logging.basicConfig(level=logging.DEBUG)
logg = logging.getLogger()
db = None
signer = None
chainId = 8995
def personal_new_account(p):
password = p
if p.__class__.__name__ != 'str':
if p.__class__.__name__ != 'list':
e = JSONRPCInvalidParams()
e.data = 'parameter must be list containing one string'
raise ValueError(e)
logg.error('foo {}'.format(p))
if len(p) != 1:
e = JSONRPCInvalidParams()
e.data = 'parameter must be list containing one string'
raise ValueError(e)
if p[0].__class__.__name__ != 'str':
e = JSONRPCInvalidParams()
e.data = 'parameter must be list containing one string'
raise ValueError(e)
password = p[0]
r = db.new(password)
return r
def personal_sign_transaction(p):
t = EIP155Transaction(p[0], 0, 8995)
z = signer.signTransaction(t, p[1])
raw_signed_tx = t.rlp_serialize()
o = {
'raw': '0x' + raw_signed_tx.hex(),
'tx': t.serialize(),
}
return o
# TODO: temporary workaround for platform, since personal_signTransaction is missing from web3.py
def eth_signTransaction(tx):
return personal_sign_transaction([tx, ''])
methods = {
'personal_newAccount': personal_new_account,
'personal_signTransaction': personal_sign_transaction,
'eth_signTransaction': eth_signTransaction,
}
def jsonrpc_error(rpc_id, err):
return {
'json-rpc': '2.0',
'id': rpc_id,
'error': {
'code': err.CODE,
'message': err.MESSAGE,
},
}
def jsonrpc_ok(rpc_id, response):
return {
'json-rpc': '2.0',
'id': rpc_id,
'result': response,
}
def is_valid_json(j):
if j.get('id') == 'None':
raise ValueError('id missing')
return True
def process_input(j):
rpc_id = j['id']
m = j['method']
p = j['params']
return (rpc_id, methods[m](p))
def start_server():
try:
os.unlink('/tmp/foo.ipc')
except FileNotFoundError:
pass
s = socket.socket(family = socket.AF_UNIX, type = socket.SOCK_STREAM)
s.bind('/tmp/foo.ipc')
s.listen(10)
while True:
(csock, caddr) = s.accept()
d = csock.recv(4096)
j = None
try:
j = json.loads(d)
is_valid_json(j)
logg.debug('{}'.format(d.decode('utf-8')))
except:
csock.send(json.dumps(jsonrpc_error(None, JSONRPCParseError)).encode('utf-8'))
csock.close()
continue
try:
(rpc_id, r) = process_input(j)
csock.send(json.dumps(jsonrpc_ok(rpc_id, r)).encode('utf-8'))
except:
# TODO: handle cases to give better error context to caller
csock.send(json.dumps(jsonrpc_error(j['id'], JSONRPCServerError)).encode('utf-8'))
csock.close()
s.close()
os.unlink('/tmp/foo.ipc')
def init():
global db, signer
secret_hex = os.environ.get('SIGNER_SECRET')
secret = bytes.fromhex(secret_hex)
kw = {
'symmetric_key': secret,
}
db = ReferenceKeystore('cic_signer', **kw)
signer = ReferenceSigner(db)
if __name__ == '__main__':
init()
arg = None
try:
arg = json.loads(sys.argv[1])
except:
logg.info('no json rpc command detected, starting socket server')
start_server()
sys.exit(0)
(rpc_id, response) = process_input(arg)
r = jsonrpc_ok(rpc_id, response)
sys.stdout.write(json.dumps(r))

View File

@ -1,158 +0,0 @@
#!/usr/bin/python3
import socket
import json
import logging
import sys
import os
from jsonrpc.exceptions import *
from signer import ReferenceSigner
from keystore import ReferenceKeystore
from transaction import EIP155Transaction
logging.basicConfig(level=logging.DEBUG)
logg = logging.getLogger()
db = None
signer = None
chainId = 8995
def personal_new_account(p):
password = p
if p.__class__.__name__ != 'str':
if p.__class__.__name__ != 'list':
e = JSONRPCInvalidParams()
e.data = 'parameter must be list containing one string'
raise ValueError(e)
logg.error('foo {}'.format(p))
if len(p) != 1:
e = JSONRPCInvalidParams()
e.data = 'parameter must be list containing one string'
raise ValueError(e)
if p[0].__class__.__name__ != 'str':
e = JSONRPCInvalidParams()
e.data = 'parameter must be list containing one string'
raise ValueError(e)
password = p[0]
r = db.new(password)
return r
def personal_sign_transaction(p):
t = EIP155Transaction(p[0], 0, 8995)
z = signer.signTransaction(t, p[1])
raw_signed_tx = t.rlp_serialize()
o = {
'raw': '0x' + raw_signed_tx.hex(),
'tx': t.serialize(),
}
return o
# TODO: temporary workaround for platform, since personal_signTransaction is missing from web3.py
def eth_signTransaction(tx):
return personal_sign_transaction([tx, ''])
methods = {
'personal_newAccount': personal_new_account,
'personal_signTransaction': personal_sign_transaction,
'eth_signTransaction': eth_signTransaction,
}
def jsonrpc_error(rpc_id, err):
return {
'json-rpc': '2.0',
'id': rpc_id,
'error': {
'code': err.CODE,
'message': err.MESSAGE,
},
}
def jsonrpc_ok(rpc_id, response):
return {
'json-rpc': '2.0',
'id': rpc_id,
'result': response,
}
def is_valid_json(j):
if j.get('id') == 'None':
raise ValueError('id missing')
return True
def process_input(j):
rpc_id = j['id']
m = j['method']
p = j['params']
return (rpc_id, methods[m](p))
def start_server():
try:
os.unlink('/tmp/foo.ipc')
except FileNotFoundError:
pass
s = socket.socket(family = socket.AF_UNIX, type = socket.SOCK_STREAM)
s.bind('/tmp/foo.ipc')
s.listen(10)
while True:
(csock, caddr) = s.accept()
d = csock.recv(4096)
j = None
try:
j = json.loads(d)
is_valid_json(j)
logg.debug('{}'.format(d.decode('utf-8')))
except:
csock.send(json.dumps(jsonrpc_error(None, JSONRPCParseError)).encode('utf-8'))
csock.close()
continue
try:
(rpc_id, r) = process_input(j)
csock.send(json.dumps(jsonrpc_ok(rpc_id, r)).encode('utf-8'))
except:
# TODO: handle cases to give better error context to caller
csock.send(json.dumps(jsonrpc_error(j['id'], JSONRPCServerError)).encode('utf-8'))
csock.close()
s.close()
os.unlink('/tmp/foo.ipc')
def init():
global db, signer
secret_hex = os.environ.get('SIGNER_SECRET')
secret = bytes.fromhex(secret_hex)
kw = {
'symmetric_key': secret,
}
db = ReferenceKeystore('cic_signer', **kw)
signer = ReferenceSigner(db)
if __name__ == '__main__':
init()
arg = None
try:
arg = json.loads(sys.argv[1])
except:
logg.info('no json rpc command detected, starting socket server')
start_server()
sys.exit(0)
(rpc_id, response) = process_input(arg)
r = jsonrpc_ok(rpc_id, response)
sys.stdout.write(json.dumps(r))

View File

@ -0,0 +1 @@
crypto-dev-daemon

View File

@ -6,9 +6,15 @@ setup(
description="A signer and keystore daemon and library for cryptocurrency software development",
author="Louis Holbrook",
author_email="dev@holbrook.no",
packages=['crypto-dev-signer'],
install_requires=['web3', 'psycopg2', 'cryptography', 'eth-keys', 'pysha3', 'rlp'],
packages=[
'crypto_dev_signer.eth.signer',
'crypto_dev_signer.eth.web3ext',
'crypto_dev_signer.eth',
'crypto_dev_signer.keystore',
'crypto_dev_signer',
],
install_requires=['web3', 'psycopg2', 'cryptography', 'eth-keys', 'pysha3', 'rlp', 'json-rpc'],
scripts = [
'scripts/crypto-dev-daemon.py',
'scripts/crypto-dev-daemon',
],
)

View File

@ -1 +0,0 @@
from keystore.postgres import ReferenceKeystore

View File

@ -1 +0,0 @@
from signer.defaultsigner import ReferenceSigner, Signer

View File

@ -8,7 +8,7 @@ import psycopg2
from psycopg2 import sql
from cryptography.fernet import Fernet, InvalidToken
from keystore import ReferenceKeystore
from crypto_dev_signer.keystore import ReferenceKeystore
logging.basicConfig(level=logging.DEBUG)
logg = logging.getLogger()

View File

@ -5,8 +5,8 @@ import logging
from rlp import encode as rlp_encode
from signer import ReferenceSigner
from transaction import EIP155Transaction
from crypto_dev_signer.eth.signer import ReferenceSigner
from crypto_dev_signer.eth.transaction import EIP155Transaction
logging.basicConfig(level=logging.DEBUG)
logg = logging.getLogger()