openttt 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +391 -0
- package/dist/adaptive_switch.d.ts +44 -0
- package/dist/adaptive_switch.js +108 -0
- package/dist/auto_mint.d.ts +45 -0
- package/dist/auto_mint.js +244 -0
- package/dist/dynamic_fee.d.ts +64 -0
- package/dist/dynamic_fee.js +203 -0
- package/dist/errors.d.ts +45 -0
- package/dist/errors.js +74 -0
- package/dist/evm_connector.d.ts +88 -0
- package/dist/evm_connector.js +297 -0
- package/dist/golay.d.ts +6 -0
- package/dist/golay.js +166 -0
- package/dist/grg_forward.d.ts +6 -0
- package/dist/grg_forward.js +59 -0
- package/dist/grg_inverse.d.ts +7 -0
- package/dist/grg_inverse.js +97 -0
- package/dist/grg_pipeline.d.ts +13 -0
- package/dist/grg_pipeline.js +64 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +38 -0
- package/dist/logger.d.ts +18 -0
- package/dist/logger.js +51 -0
- package/dist/networks.d.ts +13 -0
- package/dist/networks.js +23 -0
- package/dist/pool_registry.d.ts +58 -0
- package/dist/pool_registry.js +129 -0
- package/dist/protocol_fee.d.ts +56 -0
- package/dist/protocol_fee.js +176 -0
- package/dist/reed_solomon.d.ts +12 -0
- package/dist/reed_solomon.js +179 -0
- package/dist/signer.d.ts +76 -0
- package/dist/signer.js +329 -0
- package/dist/time_synthesis.d.ts +49 -0
- package/dist/time_synthesis.js +372 -0
- package/dist/ttt_builder.d.ts +32 -0
- package/dist/ttt_builder.js +84 -0
- package/dist/ttt_client.d.ts +118 -0
- package/dist/ttt_client.js +352 -0
- package/dist/types.d.ts +141 -0
- package/dist/types.js +9 -0
- package/dist/v4_hook.d.ts +43 -0
- package/dist/v4_hook.js +115 -0
- package/dist/x402_enforcer.d.ts +29 -0
- package/dist/x402_enforcer.js +67 -0
- package/package.json +51 -0
package/dist/signer.js
ADDED
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.KMSSigner = exports.PrivySigner = exports.TurnkeySignerWrapper = exports.PrivateKeySigner = exports.TTTAbstractSigner = exports.SignerType = void 0;
|
|
37
|
+
exports.createSigner = createSigner;
|
|
38
|
+
const ethers_1 = require("ethers");
|
|
39
|
+
const ethers_2 = require("@turnkey/ethers");
|
|
40
|
+
const api_key_stamper_1 = require("@turnkey/api-key-stamper");
|
|
41
|
+
const errors_1 = require("./errors");
|
|
42
|
+
/**
|
|
43
|
+
* Supported signer types in TTT SDK
|
|
44
|
+
*/
|
|
45
|
+
var SignerType;
|
|
46
|
+
(function (SignerType) {
|
|
47
|
+
SignerType["PrivateKey"] = "privateKey";
|
|
48
|
+
SignerType["Turnkey"] = "turnkey";
|
|
49
|
+
SignerType["Privy"] = "privy";
|
|
50
|
+
SignerType["KMS"] = "kms";
|
|
51
|
+
})(SignerType || (exports.SignerType = SignerType = {}));
|
|
52
|
+
/**
|
|
53
|
+
* Base wrapper for all signers to ensure unified interface within the SDK
|
|
54
|
+
*/
|
|
55
|
+
class TTTAbstractSigner {
|
|
56
|
+
inner;
|
|
57
|
+
constructor(inner) {
|
|
58
|
+
this.inner = inner;
|
|
59
|
+
}
|
|
60
|
+
async getAddress() {
|
|
61
|
+
return this.inner.getAddress();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.TTTAbstractSigner = TTTAbstractSigner;
|
|
65
|
+
/**
|
|
66
|
+
* Standard Private Key Signer (Institutional/Dev use)
|
|
67
|
+
*/
|
|
68
|
+
class PrivateKeySigner extends TTTAbstractSigner {
|
|
69
|
+
constructor(signer) {
|
|
70
|
+
super(signer);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.PrivateKeySigner = PrivateKeySigner;
|
|
74
|
+
/**
|
|
75
|
+
* TEE-based institution-grade signer (Turnkey)
|
|
76
|
+
*/
|
|
77
|
+
class TurnkeySignerWrapper extends TTTAbstractSigner {
|
|
78
|
+
constructor(signer) {
|
|
79
|
+
super(signer);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.TurnkeySignerWrapper = TurnkeySignerWrapper;
|
|
83
|
+
/**
|
|
84
|
+
* Social/Embedded wallet signer (Privy)
|
|
85
|
+
*/
|
|
86
|
+
class PrivySigner extends TTTAbstractSigner {
|
|
87
|
+
constructor(signer) {
|
|
88
|
+
super(signer);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.PrivySigner = PrivySigner;
|
|
92
|
+
/**
|
|
93
|
+
* Cloud HSM (KMS) based signer
|
|
94
|
+
*/
|
|
95
|
+
class KMSSigner extends TTTAbstractSigner {
|
|
96
|
+
constructor(signer) {
|
|
97
|
+
super(signer);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.KMSSigner = KMSSigner;
|
|
101
|
+
/**
|
|
102
|
+
* Internal utility to parse DER signature to R and S
|
|
103
|
+
*/
|
|
104
|
+
function parseDERSignature(sig) {
|
|
105
|
+
if (sig[0] !== 0x30)
|
|
106
|
+
throw new Error("Invalid DER signature: not a sequence");
|
|
107
|
+
let pos = 2;
|
|
108
|
+
if (sig[pos] !== 0x02)
|
|
109
|
+
throw new Error("Invalid DER signature: expected integer for R");
|
|
110
|
+
let rLen = sig[pos + 1];
|
|
111
|
+
pos += 2;
|
|
112
|
+
let r = sig.slice(pos, pos + rLen);
|
|
113
|
+
if (r[0] === 0x00)
|
|
114
|
+
r = r.slice(1);
|
|
115
|
+
pos += rLen;
|
|
116
|
+
if (sig[pos] !== 0x02)
|
|
117
|
+
throw new Error("Invalid DER signature: expected integer for S");
|
|
118
|
+
let sLen = sig[pos + 1];
|
|
119
|
+
pos += 2;
|
|
120
|
+
let s = sig.slice(pos, pos + sLen);
|
|
121
|
+
if (s[0] === 0x00)
|
|
122
|
+
s = s.slice(1);
|
|
123
|
+
return {
|
|
124
|
+
r: "0x" + Buffer.from(r).toString('hex').padStart(64, '0'),
|
|
125
|
+
s: "0x" + Buffer.from(s).toString('hex').padStart(64, '0')
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* AWS KMS Ethers Signer Implementation
|
|
130
|
+
*/
|
|
131
|
+
class AWSKMSEthersSigner extends ethers_1.AbstractSigner {
|
|
132
|
+
client;
|
|
133
|
+
keyId;
|
|
134
|
+
address = null;
|
|
135
|
+
constructor(client, // KMSClient
|
|
136
|
+
keyId, provider) {
|
|
137
|
+
super(provider);
|
|
138
|
+
this.client = client;
|
|
139
|
+
this.keyId = keyId;
|
|
140
|
+
}
|
|
141
|
+
async getAddress() {
|
|
142
|
+
if (this.address)
|
|
143
|
+
return this.address;
|
|
144
|
+
// @ts-ignore
|
|
145
|
+
const { GetPublicKeyCommand } = await Promise.resolve().then(() => __importStar(require('@aws-sdk/client-kms')));
|
|
146
|
+
const command = new GetPublicKeyCommand({ KeyId: this.keyId });
|
|
147
|
+
const response = await this.client.send(command);
|
|
148
|
+
const publicKeyDer = response.PublicKey;
|
|
149
|
+
const pubKey = Buffer.from(publicKeyDer).slice(-65);
|
|
150
|
+
this.address = (0, ethers_1.computeAddress)("0x" + pubKey.toString('hex'));
|
|
151
|
+
return this.address;
|
|
152
|
+
}
|
|
153
|
+
async signMessage(message) {
|
|
154
|
+
const digest = (0, ethers_1.hashMessage)(message);
|
|
155
|
+
return this._signDigest(digest);
|
|
156
|
+
}
|
|
157
|
+
async signTransaction(tx) {
|
|
158
|
+
const resolved = await (0, ethers_1.resolveProperties)(tx);
|
|
159
|
+
const baseTx = ethers_1.Transaction.from(resolved);
|
|
160
|
+
const digest = baseTx.unsignedHash;
|
|
161
|
+
const sig = await this._signDigest(digest);
|
|
162
|
+
const signature = ethers_1.Signature.from(sig);
|
|
163
|
+
baseTx.signature = signature;
|
|
164
|
+
return baseTx.serialized;
|
|
165
|
+
}
|
|
166
|
+
async signTypedData(domain, types, value) {
|
|
167
|
+
const digest = ethers_1.TypedDataEncoder.hash(domain, types, value);
|
|
168
|
+
return this._signDigest(digest);
|
|
169
|
+
}
|
|
170
|
+
async _signDigest(digest) {
|
|
171
|
+
// @ts-ignore
|
|
172
|
+
const { SignCommand } = await Promise.resolve().then(() => __importStar(require('@aws-sdk/client-kms')));
|
|
173
|
+
const command = new SignCommand({
|
|
174
|
+
KeyId: this.keyId,
|
|
175
|
+
Message: Buffer.from(digest.slice(2), 'hex'),
|
|
176
|
+
MessageType: 'DIGEST',
|
|
177
|
+
SigningAlgorithm: 'ECDSA_SHA_256'
|
|
178
|
+
});
|
|
179
|
+
const response = await this.client.send(command);
|
|
180
|
+
const derSig = response.Signature;
|
|
181
|
+
const { r, s } = parseDERSignature(derSig);
|
|
182
|
+
const addr = await this.getAddress();
|
|
183
|
+
for (const v of [27, 28]) {
|
|
184
|
+
const signature = ethers_1.Signature.from({ r, s, v });
|
|
185
|
+
if ((0, ethers_1.recoverAddress)(digest, signature).toLowerCase() === addr.toLowerCase()) {
|
|
186
|
+
return signature.serialized;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
throw new Error("Failed to recover recovery param V for AWS KMS signature");
|
|
190
|
+
}
|
|
191
|
+
connect(provider) {
|
|
192
|
+
return new AWSKMSEthersSigner(this.client, this.keyId, provider);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* GCP KMS Ethers Signer Implementation
|
|
197
|
+
*/
|
|
198
|
+
class GCPKMSEthersSigner extends ethers_1.AbstractSigner {
|
|
199
|
+
client;
|
|
200
|
+
name;
|
|
201
|
+
address = null;
|
|
202
|
+
constructor(client, // KeyManagementServiceClient
|
|
203
|
+
name, // Fully qualified key version name
|
|
204
|
+
provider) {
|
|
205
|
+
super(provider);
|
|
206
|
+
this.client = client;
|
|
207
|
+
this.name = name;
|
|
208
|
+
}
|
|
209
|
+
async getAddress() {
|
|
210
|
+
if (this.address)
|
|
211
|
+
return this.address;
|
|
212
|
+
const [publicKey] = await this.client.getPublicKey({ name: this.name });
|
|
213
|
+
const pem = publicKey.pem;
|
|
214
|
+
const base64 = pem.replace(/-----BEGIN PUBLIC KEY-----|-----END PUBLIC KEY-----|\n|\r/g, '');
|
|
215
|
+
const der = Buffer.from(base64, 'base64');
|
|
216
|
+
const pubKey = der.slice(-65);
|
|
217
|
+
this.address = (0, ethers_1.computeAddress)("0x" + pubKey.toString('hex'));
|
|
218
|
+
return this.address;
|
|
219
|
+
}
|
|
220
|
+
async signMessage(message) {
|
|
221
|
+
return this._signDigest((0, ethers_1.hashMessage)(message));
|
|
222
|
+
}
|
|
223
|
+
async signTransaction(tx) {
|
|
224
|
+
const resolved = await (0, ethers_1.resolveProperties)(tx);
|
|
225
|
+
const baseTx = ethers_1.Transaction.from(resolved);
|
|
226
|
+
const digest = baseTx.unsignedHash;
|
|
227
|
+
const sig = await this._signDigest(digest);
|
|
228
|
+
const signature = ethers_1.Signature.from(sig);
|
|
229
|
+
baseTx.signature = signature;
|
|
230
|
+
return baseTx.serialized;
|
|
231
|
+
}
|
|
232
|
+
async signTypedData(domain, types, value) {
|
|
233
|
+
const digest = ethers_1.TypedDataEncoder.hash(domain, types, value);
|
|
234
|
+
return this._signDigest(digest);
|
|
235
|
+
}
|
|
236
|
+
async _signDigest(digest) {
|
|
237
|
+
const digestBuffer = Buffer.from(digest.slice(2), 'hex');
|
|
238
|
+
const [response] = await this.client.asymmetricSign({
|
|
239
|
+
name: this.name,
|
|
240
|
+
digest: {
|
|
241
|
+
sha256: digestBuffer
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
const derSig = response.signature;
|
|
245
|
+
const { r, s } = parseDERSignature(derSig);
|
|
246
|
+
const addr = await this.getAddress();
|
|
247
|
+
for (const v of [27, 28]) {
|
|
248
|
+
const signature = ethers_1.Signature.from({ r, s, v });
|
|
249
|
+
if ((0, ethers_1.recoverAddress)(digest, signature).toLowerCase() === addr.toLowerCase()) {
|
|
250
|
+
return signature.serialized;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
throw new Error("Failed to recover recovery param V for GCP KMS signature");
|
|
254
|
+
}
|
|
255
|
+
connect(provider) {
|
|
256
|
+
return new GCPKMSEthersSigner(this.client, this.name, provider);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Factory function to create appropriate signer based on config
|
|
261
|
+
*/
|
|
262
|
+
async function createSigner(config) {
|
|
263
|
+
switch (config.type) {
|
|
264
|
+
case 'privateKey': {
|
|
265
|
+
let key = config.key;
|
|
266
|
+
if (!key && config.envVar) {
|
|
267
|
+
key = process.env[config.envVar];
|
|
268
|
+
}
|
|
269
|
+
if (!key)
|
|
270
|
+
throw new errors_1.TTTSignerError("[Signer] Private key missing", `Neither 'key' nor env var '${config.envVar}' was provided`, "Set the environment variable or provide the key directly in config.");
|
|
271
|
+
if (!key.startsWith('0x'))
|
|
272
|
+
key = '0x' + key;
|
|
273
|
+
if (!(0, ethers_1.isHexString)(key, 32))
|
|
274
|
+
throw new errors_1.TTTSignerError("[Signer] Invalid private key format", "Expected 0x + 64 hex characters", "Provide a valid 32-byte hex private key.");
|
|
275
|
+
const wallet = new ethers_1.Wallet(key);
|
|
276
|
+
return new PrivateKeySigner(wallet);
|
|
277
|
+
}
|
|
278
|
+
case 'turnkey': {
|
|
279
|
+
const stamper = new api_key_stamper_1.ApiKeyStamper({
|
|
280
|
+
apiPublicKey: config.apiPublicKey,
|
|
281
|
+
apiPrivateKey: config.apiPrivateKey,
|
|
282
|
+
});
|
|
283
|
+
const turnkeySigner = new ethers_2.TurnkeySigner({
|
|
284
|
+
baseUrl: config.apiBaseUrl,
|
|
285
|
+
stamper,
|
|
286
|
+
organizationId: config.organizationId,
|
|
287
|
+
privateKeyId: config.privateKeyId,
|
|
288
|
+
});
|
|
289
|
+
return new TurnkeySignerWrapper(turnkeySigner);
|
|
290
|
+
}
|
|
291
|
+
case 'privy': {
|
|
292
|
+
throw new errors_1.TTTSignerError("[Signer] Privy wallet signer extraction not fully implemented", "Privy requires proper session context and walletId", "Refer to Privy server-auth documentation for server-side signing.");
|
|
293
|
+
}
|
|
294
|
+
case 'kms': {
|
|
295
|
+
if (config.provider === 'aws') {
|
|
296
|
+
try {
|
|
297
|
+
// @ts-ignore
|
|
298
|
+
const { KMSClient } = await Promise.resolve().then(() => __importStar(require('@aws-sdk/client-kms')));
|
|
299
|
+
const client = new KMSClient({ region: config.region || 'us-east-1' });
|
|
300
|
+
const awsSigner = new AWSKMSEthersSigner(client, config.keyId);
|
|
301
|
+
return new KMSSigner(awsSigner);
|
|
302
|
+
}
|
|
303
|
+
catch (e) {
|
|
304
|
+
throw new errors_1.TTTSignerError("[Signer] AWS KMS initialization failed", e.message, "Ensure @aws-sdk/client-kms is installed and credentials are configured.");
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
else if (config.provider === 'gcp') {
|
|
308
|
+
if (!config.projectId || !config.locationId || !config.keyRingId || !config.keyVersionId) {
|
|
309
|
+
throw new errors_1.TTTSignerError("[Signer] GCP KMS missing required fields", `projectId=${config.projectId}, locationId=${config.locationId}, keyRingId=${config.keyRingId}, keyVersionId=${config.keyVersionId}`, "Provide all required GCP KMS fields: projectId, locationId, keyRingId, keyVersionId.");
|
|
310
|
+
}
|
|
311
|
+
try {
|
|
312
|
+
// @ts-ignore
|
|
313
|
+
const { KeyManagementServiceClient } = await Promise.resolve().then(() => __importStar(require('@google-cloud/kms')));
|
|
314
|
+
const client = new KeyManagementServiceClient();
|
|
315
|
+
const name = client.cryptoKeyVersionPath(config.projectId, config.locationId, config.keyRingId, config.keyId, config.keyVersionId);
|
|
316
|
+
const gcpSigner = new GCPKMSEthersSigner(client, name);
|
|
317
|
+
return new KMSSigner(gcpSigner);
|
|
318
|
+
}
|
|
319
|
+
catch (e) {
|
|
320
|
+
throw new errors_1.TTTSignerError("[Signer] GCP KMS initialization failed", e.message, "Ensure @google-cloud/kms is installed and application default credentials are set.");
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
throw new errors_1.TTTSignerError("[Signer] Unsupported KMS provider", `Provider: ${config.provider}`, "Use 'aws' or 'gcp'.");
|
|
324
|
+
}
|
|
325
|
+
default:
|
|
326
|
+
// @ts-ignore
|
|
327
|
+
throw new errors_1.TTTSignerError(`[Signer] Unsupported signer type`, `Type: ${config.type}`, "Provide a supported signer type: privateKey, turnkey, privy, kms.");
|
|
328
|
+
}
|
|
329
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Buffer } from 'buffer';
|
|
2
|
+
import { TimeReading, SynthesizedTime, ProofOfTime } from "./types";
|
|
3
|
+
export interface TimeSource {
|
|
4
|
+
name: string;
|
|
5
|
+
getTime(): Promise<TimeReading>;
|
|
6
|
+
}
|
|
7
|
+
export declare class NTPSource implements TimeSource {
|
|
8
|
+
name: string;
|
|
9
|
+
private host;
|
|
10
|
+
private port;
|
|
11
|
+
constructor(name: string, host: string, port?: number);
|
|
12
|
+
getTime(): Promise<TimeReading>;
|
|
13
|
+
}
|
|
14
|
+
export declare class TimeSynthesis {
|
|
15
|
+
private sources;
|
|
16
|
+
constructor(config?: {
|
|
17
|
+
sources?: string[];
|
|
18
|
+
});
|
|
19
|
+
getFromSource(name: string): Promise<TimeReading>;
|
|
20
|
+
synthesize(): Promise<SynthesizedTime>;
|
|
21
|
+
/**
|
|
22
|
+
* Generates a Proof of Time (PoT) with verification of source readings.
|
|
23
|
+
*/
|
|
24
|
+
generateProofOfTime(): Promise<ProofOfTime>;
|
|
25
|
+
/**
|
|
26
|
+
* Verify Proof of Time integrity.
|
|
27
|
+
*/
|
|
28
|
+
verifyProofOfTime(pot: ProofOfTime): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Generates a bytes32 hash of the PoT for on-chain submission.
|
|
31
|
+
*/
|
|
32
|
+
static getOnChainHash(pot: ProofOfTime): string;
|
|
33
|
+
/**
|
|
34
|
+
* Serializes PoT to JSON string.
|
|
35
|
+
*/
|
|
36
|
+
static serializeToJSON(pot: ProofOfTime): string;
|
|
37
|
+
/**
|
|
38
|
+
* Deserializes PoT from JSON string.
|
|
39
|
+
*/
|
|
40
|
+
static deserializeFromJSON(json: string): ProofOfTime;
|
|
41
|
+
/**
|
|
42
|
+
* Serializes PoT to compact binary format.
|
|
43
|
+
*/
|
|
44
|
+
static serializeToBinary(pot: ProofOfTime): Buffer;
|
|
45
|
+
/**
|
|
46
|
+
* Deserializes PoT from compact binary format.
|
|
47
|
+
*/
|
|
48
|
+
static deserializeFromBinary(buf: Buffer): ProofOfTime;
|
|
49
|
+
}
|