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 from rlp import encode as rlp_encode
# local imports # 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__) logg = logging.getLogger(__name__)

View File

@ -2,7 +2,7 @@ import re
from web3 import Web3 as Web3super from web3 import Web3 as Web3super
from web3 import WebsocketProvider, HTTPProvider from web3 import WebsocketProvider, HTTPProvider
from web3ext.middleware import PlatformMiddleware from .middleware import PlatformMiddleware
re_websocket = re.compile('^wss?://') re_websocket = re.compile('^wss?://')
re_http = re.compile('^https?://') 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 import sha3
# local imports # local imports
from common import strip_hex_prefix from crypto_dev_signer.common import strip_hex_prefix
from keystore.interface import Keystore from .interface import Keystore
keyapi = KeyAPI(NativeECCBackend) 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", description="A signer and keystore daemon and library for cryptocurrency software development",
author="Louis Holbrook", author="Louis Holbrook",
author_email="dev@holbrook.no", author_email="dev@holbrook.no",
packages=['crypto-dev-signer'], packages=[
install_requires=['web3', 'psycopg2', 'cryptography', 'eth-keys', 'pysha3', 'rlp'], '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 = [
'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 psycopg2 import sql
from cryptography.fernet import Fernet, InvalidToken from cryptography.fernet import Fernet, InvalidToken
from keystore import ReferenceKeystore from crypto_dev_signer.keystore import ReferenceKeystore
logging.basicConfig(level=logging.DEBUG) logging.basicConfig(level=logging.DEBUG)
logg = logging.getLogger() logg = logging.getLogger()

View File

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