-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.ts
118 lines (103 loc) · 2.87 KB
/
index.ts
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
// doesn't expose any convenience features like a TransactionBuilder or a ConfigBuilder.
import { crypto } from '@iroha2/crypto-target-node'
import { KeyPair } from '@iroha2/crypto-core'
import { setCrypto, Client } from '@iroha2/client'
import { hexToBytes } from 'hada'
import {
DomainId,
EvaluatesToRegistrableBox,
Executable,
Expression,
IdentifiableBox,
Instruction,
MapNameValue,
Metadata,
NewDomain,
OptionIpfsPath,
QueryBox,
RegisterBox,
Value,
VecInstruction,
} from '@iroha2/data-model'
setCrypto(crypto)
function generateKeyPair(params: {
publicKeyMultihash: string
privateKey: {
digestFunction: string
payload: string
}
}): KeyPair {
const multihashBytes = Uint8Array.from(
hexToBytes(params.publicKeyMultihash),
)
const multihash = crypto.createMultihashFromBytes(multihashBytes)
const publicKey = crypto.createPublicKeyFromMultihash(multihash)
const privateKey = crypto.createPrivateKeyFromJsKey(params.privateKey)
const keyPair = crypto.createKeyPairFromKeys(publicKey, privateKey)
// don't forget to "free" created structures
for (const x of [publicKey, privateKey, multihash]) {
x.free()
}
return keyPair
}
const kp = generateKeyPair({
publicKeyMultihash:
'ed0120e555d194e8822da35ac541ce9eec8b45058f4d294d9426ef97ba92698766f7d3',
privateKey: {
digestFunction: 'ed25519',
payload:
'de757bcb79f4c63e8fa0795edc26f86dfdba189b846e903d0b732bb644607720e555d194e8822da35ac541ce9eec8b45058f4d294d9426ef97ba92698766f7d3',
},
})
const client = new Client({
torii: {
// Both URLs are optional - in case you need only a part of endpoints,
// e.g. only Telemetry ones
apiURL: 'http://127.0.0.1:8080',
telemetryURL: 'http://127.0.0.1:8081',
},
})
////////// Register domain
async function registerDomain(domainName: string) {
const registerBox = RegisterBox({
object: EvaluatesToRegistrableBox({
expression: Expression(
'Raw',
Value(
'Identifiable',
IdentifiableBox(
'NewDomain',
NewDomain({
id: DomainId({
name: domainName,
}),
metadata: Metadata({ map: MapNameValue(new Map()) }),
logo: OptionIpfsPath('None'),
}),
),
),
),
}),
})
await client.submit(
Executable(
'Instructions',
VecInstruction([Instruction('Register', registerBox)]),
),
)
}
////// Query Domain
async function ensureDomainExistence(domainName: string) {
const result = await client.request(QueryBox('FindAllDomains', null))
const domain = result
.as('Ok')
.result.as('Vec')
.map((x) => x.as('Identifiable').as('Domain'))
.find((x) => x.id.name === domainName)
if (!domain) throw new Error('Not found')
}
async function main() {
await registerDomain('test1');
await ensureDomainExistence('test1');
}
main();