-
Notifications
You must be signed in to change notification settings - Fork 0
/
transaction.py
62 lines (53 loc) · 1.59 KB
/
transaction.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
class Transaction:
def __init__(self, value, zktoken):
self.value = value
self.inputs = {}
self.outputs = {}
self.rG = None
self.s = None
self.e = None
self.blidinding_sum = 0
self.zktoken = zktoken
def inputs_of(self, wallet):
if wallet not in self.inputs:
return []
return self.inputs[wallet]
def outputs_of(self, wallet):
if wallet not in self.outputs:
return []
return self.outputs[wallet]
def add_inputs(self, inputs, wallet):
if wallet not in self.inputs:
self.inputs[wallet] = []
self.inputs[wallet].extend(inputs)
def add_outputs(self, outputs, wallet):
# each output should be n sized list
if wallet not in self.outputs:
self.outputs[wallet] = []
self.outputs[wallet].extend(outputs)
def set_excess(self, rG, s, e):
self.rG = rG
self.s = s
self.e = e
def to_args(self):
inputs = [i for _, inputs in self.inputs.items() for i in inputs]
outputs = [o for _, outputs in self.outputs.items() for o in outputs]
return (inputs, outputs, self.rG, self.s, self.e)
def broadcast(self):
return self.zktoken.ct(*self.to_args())
def __str__(self):
s = 'inputs\n'
for w, inputs in self.inputs.items():
s = s + w + '\n'
for i in inputs:
s += str(i) + '\n'
s += 'outputs\n'
for w, outputs in self.outputs.items():
s = s + w + '\n'
for o in outputs:
s += str(o) + '\n'
s += 'rG: ' + str(self.rG) + '\n'
s += 's: ' + str(self.s) + '\n'
s += 'e: ' + str(self.e) + '\n'
s += 'val:' + str(self.value) + '\n'
return s