Implement personal_signTransaction in socket server
This commit is contained in:
parent
acaff79ad2
commit
7c3208de4c
@ -8,19 +8,21 @@ from jsonrpc.exceptions import *
|
||||
|
||||
from signer import ReferenceSigner
|
||||
from keystore import ReferenceDatabase
|
||||
from transaction import Transaction
|
||||
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
logg = logging.getLogger()
|
||||
|
||||
db = None
|
||||
signer = None
|
||||
chainId = 8995
|
||||
|
||||
|
||||
def personal_new_account(p):
|
||||
if p.__class__.__name__ != 'list':
|
||||
e = JSONRPCInvalidParams()
|
||||
e.data = 'parameter must be list containing one string'
|
||||
raise ValueError(e )
|
||||
raise ValueError(e)
|
||||
if len(p) != 1:
|
||||
e = JSONRPCInvalidParams()
|
||||
e.data = 'parameter must be list containing one string'
|
||||
@ -32,11 +34,22 @@ def personal_new_account(p):
|
||||
|
||||
r = db.new(p[0])
|
||||
|
||||
return [r]
|
||||
return r
|
||||
|
||||
|
||||
def personal_sign_transaction(p):
|
||||
t = Transaction(p[0], 0, 8995)
|
||||
z = signer.signTransaction(t, p[1])
|
||||
raw_signed_tx = t.rlp_serialize()
|
||||
return {
|
||||
'raw': '0x' + raw_signed_tx.hex(),
|
||||
'tx': t.serialize(),
|
||||
}
|
||||
|
||||
|
||||
methods = {
|
||||
'personal_newAccount': personal_new_account,
|
||||
'personal_signTransaction': personal_sign_transaction,
|
||||
}
|
||||
|
||||
|
||||
|
@ -28,7 +28,7 @@ class ReferenceSigner(Signer):
|
||||
|
||||
|
||||
def signTransaction(self, tx, password=None):
|
||||
s = tx.serialize()
|
||||
s = tx.rlp_serialize()
|
||||
h = sha3.keccak_256()
|
||||
h.update(s)
|
||||
g = h.digest()
|
||||
|
@ -23,10 +23,10 @@ class Transaction:
|
||||
self.v = chainId
|
||||
self.r = 0
|
||||
self.s = 0
|
||||
self.sender = tx['from']
|
||||
self.sender = strip_hex_prefix(tx['from'])
|
||||
|
||||
|
||||
def serialize(self):
|
||||
def rlp_serialize(self):
|
||||
b = self.nonce.to_bytes(8, byteorder='little')
|
||||
s = [
|
||||
self.nonce,
|
||||
@ -40,3 +40,16 @@ class Transaction:
|
||||
self.s,
|
||||
]
|
||||
return rlp_encode(s)
|
||||
|
||||
def serialize(self):
|
||||
return {
|
||||
'nonce': '0x' + hex(self.nonce),
|
||||
'gasPrice': '0x' + hex(self.gas_price),
|
||||
'gas': '0x' + hex(self.start_gas),
|
||||
'to': '0x' + self.to.hex(),
|
||||
'value': '0x' + hex(self.value),
|
||||
'data': '0x' + self.data.hex(),
|
||||
'v': '0x' + hex(self.v),
|
||||
'r': '0x' + self.r.hex(),
|
||||
's': '0x' + self.s.hex(),
|
||||
}
|
||||
|
@ -56,8 +56,6 @@ class TestSign(unittest.TestCase):
|
||||
t = Transaction(tx, 461, 8995)
|
||||
s = ReferenceSigner(self.getPk)
|
||||
z = s.signTransaction(t)
|
||||
logg.debug('{}'.format(z.to_bytes()))
|
||||
logg.debug('{}'.format(t.serialize().hex()))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
Loading…
Reference in New Issue
Block a user