forked from IbhzHazem/Sawtooth-Cryptomoji
-
Notifications
You must be signed in to change notification settings - Fork 0
/
04-Addressing.js
157 lines (121 loc) · 5.11 KB
/
04-Addressing.js
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
import * as addressing from '../source/services/addressing.js';
import { createKeys } from '../source/services/signing.js';
import { createHash, randomBytes } from 'crypto';
const hash = str => createHash('sha512').update(str).digest('hex');
describe('Addressing module', function() {
describe('getCollectionAddress', function() {
let publicKey = null;
beforeEach(function() {
publicKey = createKeys().publicKey;
});
it('should return a hexadecimal string', function() {
const address = addressing.getCollectionAddress(publicKey);
expect(address).to.be.a.hexString;
});
it('should return a correct collection address', function() {
const address = addressing.getCollectionAddress(publicKey);
const keyHash = hash(publicKey).slice(0, 62);
expect(address).to.equal('5f4d76' + '00' + keyHash);
});
it('should return the type prefix if not passed a key', function() {
const address = addressing.getCollectionAddress();
expect(address).to.equal('5f4d76' + '00');
});
});
describe('getMojiAddress', function() {
let publicKey = null;
let dna = null;
beforeEach(function() {
publicKey = createKeys().publicKey;
dna = randomBytes(18).toString('hex');
});
it('should return a hexadecimal string', function() {
const address = addressing.getMojiAddress(publicKey, dna);
expect(address).to.be.a.hexString;
});
it('should return a correct cryptomoji address', function() {
const address = addressing.getMojiAddress(publicKey, dna);
const keyHash = hash(publicKey).slice(0, 8);
const dnaHash = hash(dna).slice(0, 54);
expect(address).to.equal('5f4d76' + '01' + keyHash + dnaHash);
});
it('should return the collection prefix if not passed dna', function() {
const address = addressing.getMojiAddress(publicKey);
const keyHash = hash(publicKey).slice(0, 8);
expect(address).to.equal('5f4d76' + '01' + keyHash);
});
it('should return the type prefix with no parameters', function() {
const address = addressing.getMojiAddress();
expect(address).to.equal('5f4d76' + '01');
});
});
describe('getSireAddress', function() {
let publicKey = null;
beforeEach(function() {
publicKey = createKeys().publicKey;
});
it('should return a hexadecimal string', function() {
const address = addressing.getSireAddress(publicKey);
expect(address).to.be.a.hexString;
});
it('should return a correct sire listing address', function() {
const address = addressing.getSireAddress(publicKey);
const keyHash = hash(publicKey).slice(0, 62);
expect(address).to.equal('5f4d76' + '02' + keyHash);
});
it('should return the type prefix if not passed a key', function() {
const address = addressing.getSireAddress();
expect(address).to.equal('5f4d76' + '02');
});
});
// Offers are a part of the extra credit portion of the sprint.
// Remove the `.skip` to run these tests.
describe.skip('getOfferAddress', function() {
let publicKey = null;
let keyHash = null;
let dna = null;
let mojiAddress = null;
beforeEach(function() {
publicKey = createKeys().publicKey;
keyHash = hash(publicKey).slice(0, 8);
dna = randomBytes(18).toString('hex');
mojiAddress = addressing.getMojiAddress(publicKey, dna);
});
it('should return a hexadecimal string', function() {
const address = addressing.getOfferAddress(publicKey, dna);
expect(address).to.be.a.hexString;
});
it('should return a correct offer address', function() {
const address = addressing.getOfferAddress(publicKey, mojiAddress);
const addressHash = hash(mojiAddress).slice(0, 54);
expect(address).to.equal('5f4d76' + '03' + keyHash + addressHash);
});
it('should return a correct offer address with multiple moji', function() {
const mojiAddresses = [
mojiAddress,
addressing.getMojiAddress(publicKey, randomBytes(18).toString('hex'))
];
const address = addressing.getOfferAddress(publicKey, mojiAddresses);
const addressHash = hash(mojiAddresses.sort().join('')).slice(0, 54);
expect(address).to.equal('5f4d76' + '03' + keyHash + addressHash);
});
it('should sort moji when generating an offer address', function() {
const mojiAddresses = [
mojiAddress,
addressing.getMojiAddress(publicKey, randomBytes(18).toString('hex'))
];
mojiAddresses.sort().reverse();
const address = addressing.getOfferAddress(publicKey, mojiAddresses);
const addressHash = hash(mojiAddresses.sort().join('')).slice(0, 54);
expect(address).to.equal('5f4d76' + '03' + keyHash + addressHash);
});
it('should return the collection prefix if not passed moji', function() {
const address = addressing.getOfferAddress(publicKey);
expect(address).to.equal('5f4d76' + '03' + keyHash);
});
it('should return the type prefix with no parameters', function() {
const address = addressing.getOfferAddress();
expect(address).to.equal('5f4d76' + '03');
});
});
});