Skip to content

Commit 2d4839e

Browse files
committed
Implement BMA data validation
1 parent bb11e85 commit 2d4839e

File tree

20 files changed

+1356
-272
lines changed

20 files changed

+1356
-272
lines changed

_ucoinpy_test/api/bma/__init__.py

Whitespace-only changes.
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
import unittest
2+
import jsonschema
3+
from ucoinpy.api.bma.blockchain import Parameters, Block, Current, Hardship, Membership, Newcomers, \
4+
Certifications, Joiners, Actives, Leavers, UD, TX
5+
6+
7+
class Test_BMA_Blockchain(unittest.TestCase):
8+
def test_parameters(self):
9+
json_sample = {
10+
"currency": "meta_brouzouf",
11+
"c": 0.1,
12+
"dt": 86400,
13+
"ud0": 100,
14+
"sigDelay": 604800,
15+
"sigValidity": 2629800,
16+
"sigQty": 3,
17+
"sigWoT": 3,
18+
"msValidity": 2629800,
19+
"stepMax": 3,
20+
"medianTimeBlocks": 11,
21+
"avgGenTime": 600,
22+
"dtDiffEval": 20,
23+
"blocksRot": 144,
24+
"percentRot": 0.67
25+
}
26+
jsonschema.validate(json_sample, Parameters.schema)
27+
28+
def test_schema_block(self):
29+
json_sample = {
30+
"version": 1,
31+
"nonce": 162294,
32+
"number": 34435,
33+
"powMin": 5,
34+
"time": 1443895887,
35+
"medianTime": 1443881487,
36+
"membersCount": 19,
37+
"monetaryMass": 154381656062153,
38+
"currency": "meta_brouzouf",
39+
"issuer": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk",
40+
"signature": "VVr2MHcIAxIwjc2skkHqNAOgXVYEVhw4YczZ/NL5fsNZLnu9qvs04q8OUA4dfrDnsYB9I+BhVOAYNYDwNa6KDw==",
41+
"hash": "000002B06C990DEBD5C1D947289C2CF4F4396FB2",
42+
"parameters": "",
43+
"previousHash": "00000D21F80687248A8C02F16BB19A975B4F983D",
44+
"previousIssuer": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk",
45+
"dividend": None,
46+
"membersChanges": [],
47+
"identities": [
48+
"APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:Lld5KezKGDUgrvnNjKuEGZmWJZNYDYtsPJajuOdrEr7MKXIwJYBRTouWPlCoPP9OQBF7qi7dpX+qKeYcjVPPDA==:1443950660:Alcide"
49+
],
50+
"joiners": [
51+
"APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:XpdVaX1TKnvjRfJRpFnpVDQOmxfDKKUp3YuSG/Ic8DHAT2SJKFSr+th3mK14JHiBtKMsNpVwFyV7TlKNHgnjAw==:34428:0000074D458E92EF09C2305BF0D191DD7CF1D452:1443950660:Alcide"
52+
],
53+
"actives": [],
54+
"leavers": [],
55+
"excluded": [],
56+
"certifications": [
57+
"ATkjQPa4sn4LBF69jqEPzFtRdHYJs6MJQjvP8JdN7MtN:APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:34434:oGGiYVBAfhreOzWS1M7HQ0OHHUWAA3NdU29XAca3/3mbfD581QBxeADVR+Bj7kTBqrAxwpwyODtaHyZZNYI3AA==",
58+
"2sq8bBDQGK74f1eD3mAPQVgHCmFdijZr9nbv16FwbokX:APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:34432:KFKYioosI3FAvyfTKiWyQqRGUros03S/NITNxShB/3L1LI4P7XSLp2+hFbCK375ODm1g/fnwfzOoorOKPGIOAw==",
59+
"8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:34431:nKDTapgYR/nMEEkLaT4ygLCHlxmiACzi4Zv+gzRJN8hGdirQAMN1FNpJ2RVli4V4z+7y3lklPidOX2Aln8ZNBA=="
60+
],
61+
"transactions": [],
62+
"raw": "Version: 1\nType: Block\nCurrency: meta_brouzouf\nNonce: 162294\nNumber: 34435\nPoWMin: 5\nTime: 1443895887\nMedianTime: 1443881487\nIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\nPreviousHash: 00000D21F80687248A8C02F16BB19A975B4F983D\nPreviousIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\nMembersCount: 19\nIdentities:\nAPGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:Lld5KezKGDUgrvnNjKuEGZmWJZNYDYtsPJajuOdrEr7MKXIwJYBRTouWPlCoPP9OQBF7qi7dpX+qKeYcjVPPDA==:1443950660:Alcide\nJoiners:\nAPGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:XpdVaX1TKnvjRfJRpFnpVDQOmxfDKKUp3YuSG/Ic8DHAT2SJKFSr+th3mK14JHiBtKMsNpVwFyV7TlKNHgnjAw==:34428:0000074D458E92EF09C2305BF0D191DD7CF1D452:1443950660:Alcide\nActives:\nLeavers:\nExcluded:\nCertifications:\nATkjQPa4sn4LBF69jqEPzFtRdHYJs6MJQjvP8JdN7MtN:APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:34434:oGGiYVBAfhreOzWS1M7HQ0OHHUWAA3NdU29XAca3/3mbfD581QBxeADVR+Bj7kTBqrAxwpwyODtaHyZZNYI3AA==\n2sq8bBDQGK74f1eD3mAPQVgHCmFdijZr9nbv16FwbokX:APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:34432:KFKYioosI3FAvyfTKiWyQqRGUros03S/NITNxShB/3L1LI4P7XSLp2+hFbCK375ODm1g/fnwfzOoorOKPGIOAw==\n8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:APGtJqMq91jKxgGX9KEoCKqqD6UTsnPmALGNyaLbTknA:34431:nKDTapgYR/nMEEkLaT4ygLCHlxmiACzi4Zv+gzRJN8hGdirQAMN1FNpJ2RVli4V4z+7y3lklPidOX2Aln8ZNBA==\nTransactions:\n"
63+
}
64+
jsonschema.validate(json_sample, Block.schema)
65+
jsonschema.validate(json_sample, Current.schema)
66+
67+
def test_schema_hardship(self):
68+
json_sample = {
69+
"block": 40432,
70+
"level": 4
71+
}
72+
jsonschema.validate(json_sample, Hardship.schema)
73+
74+
def test_schema_membership(self):
75+
json_sample = {
76+
"pubkey": "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU",
77+
"uid": "inso",
78+
"sigDate": 1421787800,
79+
"memberships": [
80+
{
81+
"version": "1",
82+
"currency": "meta_brouzouf",
83+
"membership": "IN",
84+
"blockNumber": 0,
85+
"blockHash": "DA39A3EE5E6B4B0D3255BFEF95601890AFD80709"
86+
},
87+
{
88+
"version": "1",
89+
"currency": "meta_brouzouf",
90+
"membership": "IN",
91+
"blockNumber": 31658,
92+
"blockHash": "0000C5336F0B64BFB87FF4BC858AE25726B88175"
93+
},
94+
]
95+
}
96+
jsonschema.validate(json_sample, Membership.schema)
97+
98+
def test_schema_newcomers(self):
99+
json_sample = {
100+
"result": {
101+
"blocks": [223, 813]
102+
}
103+
}
104+
jsonschema.validate(json_sample, Newcomers.schema)
105+
106+
def test_schema_certifications(self):
107+
json_sample = {
108+
"result": {
109+
"blocks": [223, 813]
110+
}
111+
}
112+
jsonschema.validate(json_sample, Certifications.schema)
113+
114+
def test_schema_joiners(self):
115+
json_sample = {
116+
"result": {
117+
"blocks": [223, 813]
118+
}
119+
}
120+
jsonschema.validate(json_sample, Joiners.schema)
121+
122+
def test_schema_actives(self):
123+
json_sample = {
124+
"result": {
125+
"blocks": [223, 813]
126+
}
127+
}
128+
jsonschema.validate(json_sample, Actives.schema)
129+
130+
def test_schema_leavers(self):
131+
json_sample = {
132+
"result": {
133+
"blocks": [223, 813]
134+
}
135+
}
136+
jsonschema.validate(json_sample, Leavers.schema)
137+
138+
def test_schema_ud(self):
139+
json_sample = {
140+
"result": {
141+
"blocks": [223, 813]
142+
}
143+
}
144+
jsonschema.validate(json_sample, UD.schema)
145+
146+
def test_schema_tx(self):
147+
json_sample = {
148+
"result": {
149+
"blocks": [223, 813]
150+
}
151+
}
152+
jsonschema.validate(json_sample, TX.schema)
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import unittest
2+
import jsonschema
3+
from ucoinpy.api.bma.network import Peering
4+
from ucoinpy.api.bma.network.peering import Peers, Status
5+
6+
7+
class Test_BMA_Network(unittest.TestCase):
8+
9+
def test_peering(self):
10+
json_sample = {
11+
"version": "1",
12+
"currency": "beta_brouzouf",
13+
"pubkey": "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY",
14+
"endpoints": [
15+
"BASIC_MERKLED_API some.dns.name 88.77.66.55 2001:0db8:0000:85a3:0000:0000:ac1f 9001",
16+
"BASIC_MERKLED_API some.dns.name 88.77.66.55 2001:0db8:0000:85a3:0000:0000:ac1f 9002",
17+
"OTHER_PROTOCOL 88.77.66.55 9001",
18+
],
19+
"signature": "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r"
20+
}
21+
jsonschema.validate(json_sample, Peering.schema)
22+
23+
24+
def test_peers_root(self):
25+
json_sample = {
26+
"depth": 3,
27+
"nodesCount": 6,
28+
"leavesCount": 5,
29+
"root": "114B6E61CB5BB93D862CA3C1DFA8B99E313E66E9"
30+
}
31+
jsonschema.validate(json_sample, Peers.schema)
32+
33+
def test_peers_leaf(self):
34+
json_sample = {
35+
"hash": "2E69197FAB029D8669EF85E82457A1587CA0ED9C",
36+
"value": {
37+
"version": "1",
38+
"currency": "beta_brouzouf",
39+
"pubkey": "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY",
40+
"endpoints": [
41+
"BASIC_MERKLED_API some.dns.name 88.77.66.55 2001:0db8:0000:85a3:0000:0000:ac1f 9001",
42+
"BASIC_MERKLED_API some.dns.name 88.77.66.55 2001:0db8:0000:85a3:0000:0000:ac1f 9002",
43+
"OTHER_PROTOCOL 88.77.66.55 9001",
44+
],
45+
"signature": "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r"
46+
}
47+
}
48+
jsonschema.validate(json_sample, Peers.schema)

_ucoinpy_test/api/bma/test_tx.py

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
import unittest
2+
import jsonschema
3+
from ucoinpy.api.bma.tx import History, Sources
4+
from ucoinpy.api.bma.tx.history import Blocks
5+
6+
7+
class Test_BMA_TX(unittest.TestCase):
8+
def test_bma_tx_history(self):
9+
json_sample = {
10+
"currency": "meta_brouzouf",
11+
"pubkey": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk",
12+
"history": {
13+
"sent": [
14+
{
15+
"version": 1,
16+
"issuers": [
17+
"HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk"
18+
],
19+
"inputs": [
20+
"0:D:125:000A8362AE0C1B8045569CE07735DE4C18E81586:100"
21+
],
22+
"outputs": [
23+
"8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:5",
24+
"HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:95"
25+
],
26+
"comment": "Essai",
27+
"signatures": [
28+
"8zzWSU+GNSNURnH1NKPT/TBoxngEc/0wcpPSbs7FqknGxud+94knvT+dpe99k6NwyB5RXvOVnKAr4p9/KEluCw=="
29+
],
30+
"hash": "FC7BAC2D94AC9C16AFC5C0150C2C9E7FBB2E2A09",
31+
"block_number": 173,
32+
"time": 1421932545
33+
}
34+
],
35+
"received": [
36+
{
37+
"version": 1,
38+
"issuers": [
39+
"8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU"
40+
],
41+
"inputs": [
42+
"0:D:125:000A8362AE0C1B8045569CE07735DE4C18E81586:100"
43+
],
44+
"outputs": [
45+
"HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:7",
46+
"8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU:93"
47+
],
48+
"comment": "",
49+
"signatures": [
50+
"1Mn8q3K7N+R4GZEpAUm+XSyty1Uu+BuOy5t7BIRqgZcKqiaxfhAUfDBOcuk2i4TJy1oA5Rntby8hDN+cUCpvDg=="
51+
],
52+
"hash": "5FB3CB80A982E2BDFBB3EA94673A74763F58CB2A",
53+
"block_number": 207,
54+
"time": 1421955525
55+
},
56+
{
57+
"version": 1,
58+
"issuers": [
59+
"J78bPUvLjxmjaEkdjxWLeENQtcfXm7iobqB49uT1Bgp3"
60+
],
61+
"inputs": [
62+
"0:T:15128:6A50FF82410387B239489CE38B34E0FDDE1697FE:10000"
63+
],
64+
"outputs": [
65+
"HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:42",
66+
"J78bPUvLjxmjaEkdjxWLeENQtcfXm7iobqB49uT1Bgp3:9958"
67+
],
68+
"comment": "",
69+
"signatures": [
70+
"XhBcCPizPiWdKeXWg1DX/FTQst6DppEjsYEtoAZNA0P11reXtgc9IduiIxNWzNjt/KvTw8APkSI8/Uf31QQVDA=="
71+
],
72+
"hash": "ADE7D1C4002D6BC10013C34CE22733A55173BAD4",
73+
"block_number": 15778,
74+
"time": 1432314584
75+
}
76+
],
77+
"sending": [
78+
{
79+
"version": 1,
80+
"issuers": [
81+
"HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk"
82+
],
83+
"inputs": [
84+
"0:D:8196:000022AD426FE727C707D847EC2168A64C577706:5872"
85+
],
86+
"outputs": [
87+
"HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:5871"
88+
"2sq8bBDQGK74f1eD3mAPQVgHCmFdijZr9nbv16FwbokX:1",
89+
],
90+
"comment": "some comment",
91+
"signatures": [
92+
"kLOAAy7/UldQk7zz4I7Jhv9ICuGYRx7upl8wH8RYL43MMF6+7MbPh3QRN1qNFGpAfa3XMWIQmbUWtjZKP6OfDA=="
93+
],
94+
"hash": "BA41013F2CD38EDFFA9D38A275F8532DD906A2DE"
95+
}
96+
],
97+
"receiving": [
98+
{
99+
"version": 1,
100+
"issuers": [
101+
"2sq8bBDQGK74f1eD3mAPQVgHCmFdijZr9nbv16FwbokX"
102+
],
103+
"inputs": [
104+
"0:D:8196:000022AD426FE727C707D847EC2168A64C577706:4334"
105+
],
106+
"outputs": [
107+
"2sq8bBDQGK74f1eD3mAPQVgHCmFdijZr9nbv16FwbokX:1",
108+
"HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk:4333"
109+
],
110+
"comment": "some comment",
111+
"signatures": [
112+
"DRiZinUEKrrLiJNogtydzwEbmETrvWiLNYXCiJsRekxTLyU5g4LjnwiLp/XlvmIekjJK5n/gullLWrHUBvFSAw=="
113+
],
114+
"hash": "A0A511131CD0E837204A9441B3354918AC4CE671"
115+
}
116+
]
117+
}
118+
}
119+
jsonschema.validate(json_sample, History.schema)
120+
jsonschema.validate(json_sample, Blocks.schema)
121+
122+
def test_bma_tx_sources(self):
123+
json_sample = {
124+
"currency": "meta_brouzouf",
125+
"pubkey": "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU",
126+
"sources": [
127+
{
128+
"pubkey": "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU",
129+
"type": "T",
130+
"number": 34444,
131+
"fingerprint": "6ACECB199D1B054B2633D0E42C066939B7F8EF1D",
132+
"amount": 1000000
133+
},
134+
{
135+
"pubkey": "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU",
136+
"type": "D",
137+
"number": 34989,
138+
"fingerprint": "0007CCC9755067008C28E791E6F2B0D4CBE9B894",
139+
"amount": 1730543585843
140+
}
141+
]
142+
}
143+
jsonschema.validate(json_sample, Sources.schema)

0 commit comments

Comments
 (0)