@ottochain/sdk 1.1.0 → 1.2.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/dist/cjs/apps/contracts/state-machines/contract.json +21 -63
- package/dist/cjs/apps/contracts/state-machines/escrow.json +23 -69
- package/dist/cjs/apps/governance/state-machines/dao-multisig.json +22 -66
- package/dist/cjs/apps/governance/state-machines/dao-single.json +14 -42
- package/dist/cjs/apps/governance/state-machines/dao-threshold.json +18 -54
- package/dist/cjs/apps/governance/state-machines/dao-token.json +21 -63
- package/dist/cjs/apps/governance/state-machines/governance-constitution.json +22 -66
- package/dist/cjs/apps/governance/state-machines/governance-executive.json +27 -81
- package/dist/cjs/apps/governance/state-machines/governance-judiciary.json +34 -102
- package/dist/cjs/apps/governance/state-machines/governance-legislature.json +32 -96
- package/dist/cjs/apps/governance/state-machines/governance-simple.json +27 -81
- package/dist/cjs/apps/identity/state-machines/agent-identity.json +25 -75
- package/dist/cjs/apps/markets/state-machines/market-universal.json +377 -110
- package/dist/cjs/apps/oracles/state-machines/oracle.json +22 -66
- package/dist/cjs/generated/index.js +1 -1
- package/dist/cjs/index.js +4 -1
- package/dist/cjs/metakit/index.js +13 -1
- package/dist/cjs/metakit/transaction.js +252 -0
- package/dist/cjs/ottochain/metagraph-client.js +52 -0
- package/dist/esm/apps/contracts/state-machines/contract.json +21 -63
- package/dist/esm/apps/contracts/state-machines/escrow.json +23 -69
- package/dist/esm/apps/governance/state-machines/dao-multisig.json +22 -66
- package/dist/esm/apps/governance/state-machines/dao-single.json +14 -42
- package/dist/esm/apps/governance/state-machines/dao-threshold.json +18 -54
- package/dist/esm/apps/governance/state-machines/dao-token.json +21 -63
- package/dist/esm/apps/governance/state-machines/governance-constitution.json +22 -66
- package/dist/esm/apps/governance/state-machines/governance-executive.json +27 -81
- package/dist/esm/apps/governance/state-machines/governance-judiciary.json +34 -102
- package/dist/esm/apps/governance/state-machines/governance-legislature.json +32 -96
- package/dist/esm/apps/governance/state-machines/governance-simple.json +27 -81
- package/dist/esm/apps/identity/state-machines/agent-identity.json +25 -75
- package/dist/esm/apps/markets/state-machines/market-universal.json +377 -110
- package/dist/esm/apps/oracles/state-machines/oracle.json +22 -66
- package/dist/esm/generated/index.js +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/metakit/index.js +3 -0
- package/dist/esm/metakit/transaction.js +240 -0
- package/dist/esm/ottochain/metagraph-client.js +52 -0
- package/dist/types/generated/index.d.ts +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/metakit/index.d.ts +3 -0
- package/dist/types/metakit/transaction.d.ts +283 -0
- package/dist/types/ottochain/metagraph-client.d.ts +28 -0
- package/package.json +1 -1
|
@@ -6,52 +6,36 @@
|
|
|
6
6
|
},
|
|
7
7
|
"states": {
|
|
8
8
|
"UNREGISTERED": {
|
|
9
|
-
"id":
|
|
10
|
-
"value": "UNREGISTERED"
|
|
11
|
-
},
|
|
9
|
+
"id": "UNREGISTERED",
|
|
12
10
|
"isFinal": false,
|
|
13
11
|
"metadata": null
|
|
14
12
|
},
|
|
15
13
|
"REGISTERED": {
|
|
16
|
-
"id":
|
|
17
|
-
"value": "REGISTERED"
|
|
18
|
-
},
|
|
14
|
+
"id": "REGISTERED",
|
|
19
15
|
"isFinal": false,
|
|
20
16
|
"metadata": null
|
|
21
17
|
},
|
|
22
18
|
"ACTIVE": {
|
|
23
|
-
"id":
|
|
24
|
-
"value": "ACTIVE"
|
|
25
|
-
},
|
|
19
|
+
"id": "ACTIVE",
|
|
26
20
|
"isFinal": false,
|
|
27
21
|
"metadata": null
|
|
28
22
|
},
|
|
29
23
|
"SLASHED": {
|
|
30
|
-
"id":
|
|
31
|
-
"value": "SLASHED"
|
|
32
|
-
},
|
|
24
|
+
"id": "SLASHED",
|
|
33
25
|
"isFinal": false,
|
|
34
26
|
"metadata": null
|
|
35
27
|
},
|
|
36
28
|
"WITHDRAWN": {
|
|
37
|
-
"id":
|
|
38
|
-
"value": "WITHDRAWN"
|
|
39
|
-
},
|
|
29
|
+
"id": "WITHDRAWN",
|
|
40
30
|
"isFinal": true,
|
|
41
31
|
"metadata": null
|
|
42
32
|
}
|
|
43
33
|
},
|
|
44
|
-
"initialState":
|
|
45
|
-
"value": "UNREGISTERED"
|
|
46
|
-
},
|
|
34
|
+
"initialState": "UNREGISTERED",
|
|
47
35
|
"transitions": [
|
|
48
36
|
{
|
|
49
|
-
"from":
|
|
50
|
-
|
|
51
|
-
},
|
|
52
|
-
"to": {
|
|
53
|
-
"value": "REGISTERED"
|
|
54
|
-
},
|
|
37
|
+
"from": "UNREGISTERED",
|
|
38
|
+
"to": "REGISTERED",
|
|
55
39
|
"eventName": "register",
|
|
56
40
|
"guard": {
|
|
57
41
|
">=": [
|
|
@@ -95,12 +79,8 @@
|
|
|
95
79
|
"dependencies": []
|
|
96
80
|
},
|
|
97
81
|
{
|
|
98
|
-
"from":
|
|
99
|
-
|
|
100
|
-
},
|
|
101
|
-
"to": {
|
|
102
|
-
"value": "ACTIVE"
|
|
103
|
-
},
|
|
82
|
+
"from": "REGISTERED",
|
|
83
|
+
"to": "ACTIVE",
|
|
104
84
|
"eventName": "activate",
|
|
105
85
|
"guard": {
|
|
106
86
|
"or": [
|
|
@@ -135,12 +115,8 @@
|
|
|
135
115
|
"dependencies": []
|
|
136
116
|
},
|
|
137
117
|
{
|
|
138
|
-
"from":
|
|
139
|
-
|
|
140
|
-
},
|
|
141
|
-
"to": {
|
|
142
|
-
"value": "ACTIVE"
|
|
143
|
-
},
|
|
118
|
+
"from": "ACTIVE",
|
|
119
|
+
"to": "ACTIVE",
|
|
144
120
|
"eventName": "add_stake",
|
|
145
121
|
"guard": {
|
|
146
122
|
"and": [
|
|
@@ -189,12 +165,8 @@
|
|
|
189
165
|
"dependencies": []
|
|
190
166
|
},
|
|
191
167
|
{
|
|
192
|
-
"from":
|
|
193
|
-
|
|
194
|
-
},
|
|
195
|
-
"to": {
|
|
196
|
-
"value": "ACTIVE"
|
|
197
|
-
},
|
|
168
|
+
"from": "ACTIVE",
|
|
169
|
+
"to": "ACTIVE",
|
|
198
170
|
"eventName": "record_resolution",
|
|
199
171
|
"guard": {
|
|
200
172
|
"var": "event.marketId"
|
|
@@ -249,12 +221,8 @@
|
|
|
249
221
|
"dependencies": []
|
|
250
222
|
},
|
|
251
223
|
{
|
|
252
|
-
"from":
|
|
253
|
-
|
|
254
|
-
},
|
|
255
|
-
"to": {
|
|
256
|
-
"value": "SLASHED"
|
|
257
|
-
},
|
|
224
|
+
"from": "ACTIVE",
|
|
225
|
+
"to": "SLASHED",
|
|
258
226
|
"eventName": "slash",
|
|
259
227
|
"guard": {
|
|
260
228
|
"and": [
|
|
@@ -330,12 +298,8 @@
|
|
|
330
298
|
"dependencies": []
|
|
331
299
|
},
|
|
332
300
|
{
|
|
333
|
-
"from":
|
|
334
|
-
|
|
335
|
-
},
|
|
336
|
-
"to": {
|
|
337
|
-
"value": "ACTIVE"
|
|
338
|
-
},
|
|
301
|
+
"from": "SLASHED",
|
|
302
|
+
"to": "ACTIVE",
|
|
339
303
|
"eventName": "reactivate",
|
|
340
304
|
"guard": {
|
|
341
305
|
"and": [
|
|
@@ -377,12 +341,8 @@
|
|
|
377
341
|
"dependencies": []
|
|
378
342
|
},
|
|
379
343
|
{
|
|
380
|
-
"from":
|
|
381
|
-
|
|
382
|
-
},
|
|
383
|
-
"to": {
|
|
384
|
-
"value": "WITHDRAWN"
|
|
385
|
-
},
|
|
344
|
+
"from": "ACTIVE",
|
|
345
|
+
"to": "WITHDRAWN",
|
|
386
346
|
"eventName": "withdraw",
|
|
387
347
|
"guard": {
|
|
388
348
|
"===": [
|
|
@@ -413,12 +373,8 @@
|
|
|
413
373
|
"dependencies": []
|
|
414
374
|
},
|
|
415
375
|
{
|
|
416
|
-
"from":
|
|
417
|
-
|
|
418
|
-
},
|
|
419
|
-
"to": {
|
|
420
|
-
"value": "WITHDRAWN"
|
|
421
|
-
},
|
|
376
|
+
"from": "SLASHED",
|
|
377
|
+
"to": "WITHDRAWN",
|
|
422
378
|
"eventName": "withdraw",
|
|
423
379
|
"guard": {
|
|
424
380
|
"===": [
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @packageDocumentation
|
|
9
9
|
*
|
|
10
10
|
* NOTE — Dual-type architecture:
|
|
11
|
-
* These generated types use proto conventions (FIBER_STATUS_ACTIVE,
|
|
11
|
+
* These generated types use proto conventions (FIBER_STATUS_ACTIVE, plain string StateId).
|
|
12
12
|
* The wire-format REST API types in src/ottochain/types.ts use plain strings ('Active').
|
|
13
13
|
* Both coexist intentionally until PR #89 (Migrate fiber-engine to generated Scala types) merges.
|
|
14
14
|
*
|
package/dist/cjs/index.js
CHANGED
|
@@ -29,7 +29,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
29
29
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
30
30
|
};
|
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
-
exports.assert = exports.safeParse = exports.validateKeyPair = exports.validateAddress = exports.validatePublicKey = exports.validatePrivateKey = exports.validate = exports.CompleteContractRequestSchema = exports.AcceptContractRequestSchema = exports.ProposeContractRequestSchema = exports.ContractTermsSchema = exports.PlatformLinkSchema = exports.AgentIdentityRegistrationSchema = exports.TransferParamsSchema = exports.CurrencyTransactionSchema = exports.CurrencyTransactionValueSchema = exports.TransactionReferenceSchema = exports.SignedSchema = exports.SignatureProofSchema = exports.KeyPairSchema = exports.PublicKeySchema = exports.PrivateKeySchema = exports.DagAddressSchema = exports.wrapError = exports.isErrorCode = exports.ErrorCode = exports.TransactionError = exports.SigningError = exports.ValidationError = exports.NetworkError = exports.OttoChainError = void 0;
|
|
32
|
+
exports.MetagraphClient = exports.assert = exports.safeParse = exports.validateKeyPair = exports.validateAddress = exports.validatePublicKey = exports.validatePrivateKey = exports.validate = exports.CompleteContractRequestSchema = exports.AcceptContractRequestSchema = exports.ProposeContractRequestSchema = exports.ContractTermsSchema = exports.PlatformLinkSchema = exports.AgentIdentityRegistrationSchema = exports.TransferParamsSchema = exports.CurrencyTransactionSchema = exports.CurrencyTransactionValueSchema = exports.TransactionReferenceSchema = exports.SignedSchema = exports.SignatureProofSchema = exports.KeyPairSchema = exports.PublicKeySchema = exports.PrivateKeySchema = exports.DagAddressSchema = exports.wrapError = exports.isErrorCode = exports.ErrorCode = exports.TransactionError = exports.SigningError = exports.ValidationError = exports.NetworkError = exports.OttoChainError = void 0;
|
|
33
33
|
// Type aliases for semantic clarity (matches wire format)
|
|
34
34
|
__exportStar(require("./types.js"), exports);
|
|
35
35
|
// Metakit utilities (signing, hashing, HTTP client)
|
|
@@ -77,3 +77,6 @@ Object.defineProperty(exports, "assert", { enumerable: true, get: function () {
|
|
|
77
77
|
__exportStar(require("./errors.js"), exports);
|
|
78
78
|
// Validation schemas and helpers
|
|
79
79
|
__exportStar(require("./validation.js"), exports);
|
|
80
|
+
// Ottochain metagraph client
|
|
81
|
+
var metagraph_client_js_1 = require("./ottochain/metagraph-client.js");
|
|
82
|
+
Object.defineProperty(exports, "MetagraphClient", { enumerable: true, get: function () { return metagraph_client_js_1.MetagraphClient; } });
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @packageDocumentation
|
|
9
9
|
*/
|
|
10
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
exports.NetworkError = exports.HttpClient = exports.DataL1Client = exports.CurrencyL1Client = exports.unitsToToken = exports.tokenToUnits = exports.isValidDagAddress = exports.getTransactionReference = exports.hashCurrencyTransaction = exports.encodeCurrencyTransaction = exports.verifyCurrencyTransaction = exports.signCurrencyTransaction = exports.createCurrencyTransactionBatch = exports.createCurrencyTransaction = exports.TOKEN_DECIMALS = exports.isValidPublicKey = exports.isValidPrivateKey = exports.getAddress = exports.getPublicKeyId = exports.getPublicKeyHex = exports.keyPairFromPrivateKey = exports.generateKeyPair = exports.batchSign = exports.addSignature = exports.createSignedObject = exports.verifySignature = exports.verifyHash = exports.verify = exports.signHash = exports.signDataUpdate = exports.sign = exports.decodeDataUpdate = exports.computeDigest = exports.hashData = exports.hashBytes = exports.hash = exports.encodeDataUpdate = exports.toBytes = exports.canonicalize = exports.CONSTELLATION_PREFIX = exports.ALGORITHM = void 0;
|
|
11
|
+
exports.createDataTransactionRequest = exports.createScriptPayload = exports.createStateMachinePayload = exports.getPublicKeyForRegistration = exports.addTransactionSignature = exports.signTransaction = exports.createInvokeScriptPayload = exports.createArchivePayload = exports.createTransitionPayload = exports.NetworkError = exports.HttpClient = exports.DataL1Client = exports.CurrencyL1Client = exports.unitsToToken = exports.tokenToUnits = exports.isValidDagAddress = exports.getTransactionReference = exports.hashCurrencyTransaction = exports.encodeCurrencyTransaction = exports.verifyCurrencyTransaction = exports.signCurrencyTransaction = exports.createCurrencyTransactionBatch = exports.createCurrencyTransaction = exports.TOKEN_DECIMALS = exports.isValidPublicKey = exports.isValidPrivateKey = exports.getAddress = exports.getPublicKeyId = exports.getPublicKeyHex = exports.keyPairFromPrivateKey = exports.generateKeyPair = exports.batchSign = exports.addSignature = exports.createSignedObject = exports.verifySignature = exports.verifyHash = exports.verify = exports.signHash = exports.signDataUpdate = exports.sign = exports.decodeDataUpdate = exports.computeDigest = exports.hashData = exports.hashBytes = exports.hash = exports.encodeDataUpdate = exports.toBytes = exports.canonicalize = exports.CONSTELLATION_PREFIX = exports.ALGORITHM = void 0;
|
|
12
12
|
var types_js_1 = require("./types.js");
|
|
13
13
|
Object.defineProperty(exports, "ALGORITHM", { enumerable: true, get: function () { return types_js_1.ALGORITHM; } });
|
|
14
14
|
Object.defineProperty(exports, "CONSTELLATION_PREFIX", { enumerable: true, get: function () { return types_js_1.CONSTELLATION_PREFIX; } });
|
|
@@ -72,3 +72,15 @@ Object.defineProperty(exports, "CurrencyL1Client", { enumerable: true, get: func
|
|
|
72
72
|
Object.defineProperty(exports, "DataL1Client", { enumerable: true, get: function () { return index_js_1.DataL1Client; } });
|
|
73
73
|
Object.defineProperty(exports, "HttpClient", { enumerable: true, get: function () { return index_js_1.HttpClient; } });
|
|
74
74
|
Object.defineProperty(exports, "NetworkError", { enumerable: true, get: function () { return index_js_1.NetworkError; } });
|
|
75
|
+
// Transaction helpers for self-signed mode
|
|
76
|
+
var transaction_js_1 = require("./transaction.js");
|
|
77
|
+
Object.defineProperty(exports, "createTransitionPayload", { enumerable: true, get: function () { return transaction_js_1.createTransitionPayload; } });
|
|
78
|
+
Object.defineProperty(exports, "createArchivePayload", { enumerable: true, get: function () { return transaction_js_1.createArchivePayload; } });
|
|
79
|
+
Object.defineProperty(exports, "createInvokeScriptPayload", { enumerable: true, get: function () { return transaction_js_1.createInvokeScriptPayload; } });
|
|
80
|
+
Object.defineProperty(exports, "signTransaction", { enumerable: true, get: function () { return transaction_js_1.signTransaction; } });
|
|
81
|
+
Object.defineProperty(exports, "addTransactionSignature", { enumerable: true, get: function () { return transaction_js_1.addTransactionSignature; } });
|
|
82
|
+
Object.defineProperty(exports, "getPublicKeyForRegistration", { enumerable: true, get: function () { return transaction_js_1.getPublicKeyForRegistration; } });
|
|
83
|
+
var transaction_js_2 = require("./transaction.js");
|
|
84
|
+
Object.defineProperty(exports, "createStateMachinePayload", { enumerable: true, get: function () { return transaction_js_2.createStateMachinePayload; } });
|
|
85
|
+
Object.defineProperty(exports, "createScriptPayload", { enumerable: true, get: function () { return transaction_js_2.createScriptPayload; } });
|
|
86
|
+
Object.defineProperty(exports, "createDataTransactionRequest", { enumerable: true, get: function () { return transaction_js_2.createDataTransactionRequest; } });
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Transaction Helpers for Self-Signed Mode
|
|
4
|
+
*
|
|
5
|
+
* These helpers create properly formatted payloads for the bridge's
|
|
6
|
+
* self-signed mode, where clients sign their own transactions.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.getPublicKeyForRegistration = exports.addTransactionSignature = exports.createDataTransactionRequest = exports.signTransaction = exports.createInvokeScriptPayload = exports.createScriptPayload = exports.createArchivePayload = exports.createTransitionPayload = exports.createStateMachinePayload = void 0;
|
|
10
|
+
const sign_js_1 = require("./sign.js");
|
|
11
|
+
const wallet_js_1 = require("./wallet.js");
|
|
12
|
+
/**
|
|
13
|
+
* Create a new state machine fiber payload.
|
|
14
|
+
*
|
|
15
|
+
* @param params - State machine creation parameters
|
|
16
|
+
* @returns A CreateStateMachine message ready for signing
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const create = createStateMachinePayload({
|
|
21
|
+
* fiberId: crypto.randomUUID(),
|
|
22
|
+
* definition: {
|
|
23
|
+
* states: { CREATED: { on: { activate: 'ACTIVE' } }, ACTIVE: {} },
|
|
24
|
+
* initialState: 'CREATED',
|
|
25
|
+
* },
|
|
26
|
+
* initialData: { owner: myAddress },
|
|
27
|
+
* });
|
|
28
|
+
* const signed = await signTransaction(create, privateKey);
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
function createStateMachinePayload(params) {
|
|
32
|
+
return {
|
|
33
|
+
CreateStateMachine: {
|
|
34
|
+
fiberId: params.fiberId,
|
|
35
|
+
definition: params.definition,
|
|
36
|
+
initialData: params.initialData ?? {},
|
|
37
|
+
...(params.parentFiberId ? { parentFiberId: params.parentFiberId } : {}),
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
exports.createStateMachinePayload = createStateMachinePayload;
|
|
42
|
+
/**
|
|
43
|
+
* Create a transition payload ready for signing.
|
|
44
|
+
*
|
|
45
|
+
* This creates the exact message structure expected by the metagraph.
|
|
46
|
+
*
|
|
47
|
+
* @param params - Transition parameters
|
|
48
|
+
* @returns A TransitionStateMachine message ready for signing
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* const transition = createTransitionPayload({
|
|
53
|
+
* fiberId: 'my-fiber-id',
|
|
54
|
+
* eventName: 'activate',
|
|
55
|
+
* payload: {},
|
|
56
|
+
* targetSequenceNumber: 0,
|
|
57
|
+
* });
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
function createTransitionPayload(params) {
|
|
61
|
+
return {
|
|
62
|
+
TransitionStateMachine: {
|
|
63
|
+
fiberId: params.fiberId,
|
|
64
|
+
eventName: params.eventName,
|
|
65
|
+
payload: params.payload ?? {},
|
|
66
|
+
targetSequenceNumber: params.targetSequenceNumber,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
exports.createTransitionPayload = createTransitionPayload;
|
|
71
|
+
/**
|
|
72
|
+
* Create an archive payload ready for signing.
|
|
73
|
+
*
|
|
74
|
+
* @param params - Archive parameters
|
|
75
|
+
* @returns An ArchiveStateMachine message ready for signing
|
|
76
|
+
*/
|
|
77
|
+
function createArchivePayload(params) {
|
|
78
|
+
return {
|
|
79
|
+
ArchiveStateMachine: {
|
|
80
|
+
fiberId: params.fiberId,
|
|
81
|
+
targetSequenceNumber: params.targetSequenceNumber,
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
exports.createArchivePayload = createArchivePayload;
|
|
86
|
+
/**
|
|
87
|
+
* Create a new script fiber payload.
|
|
88
|
+
*
|
|
89
|
+
* Note: `initialState` must be an object or array, NOT a primitive.
|
|
90
|
+
*
|
|
91
|
+
* @param params - Script creation parameters
|
|
92
|
+
* @returns A CreateScript message ready for signing
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```typescript
|
|
96
|
+
* const script = createScriptPayload({
|
|
97
|
+
* fiberId: crypto.randomUUID(),
|
|
98
|
+
* scriptProgram: {
|
|
99
|
+
* methods: {
|
|
100
|
+
* increment: { "+": [{ var: "state.value" }, 1] },
|
|
101
|
+
* },
|
|
102
|
+
* },
|
|
103
|
+
* initialState: { value: 0 },
|
|
104
|
+
* accessControl: { type: 'open' },
|
|
105
|
+
* });
|
|
106
|
+
* const signed = await signTransaction(script, privateKey);
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
function createScriptPayload(params) {
|
|
110
|
+
return {
|
|
111
|
+
CreateScript: {
|
|
112
|
+
fiberId: params.fiberId,
|
|
113
|
+
scriptProgram: params.scriptProgram,
|
|
114
|
+
initialState: params.initialState ?? null,
|
|
115
|
+
accessControl: params.accessControl ?? { type: 'open' },
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
exports.createScriptPayload = createScriptPayload;
|
|
120
|
+
/**
|
|
121
|
+
* Create an invoke script payload ready for signing.
|
|
122
|
+
*
|
|
123
|
+
* @param params - Invoke script parameters
|
|
124
|
+
* @returns An InvokeScript message ready for signing
|
|
125
|
+
*/
|
|
126
|
+
function createInvokeScriptPayload(params) {
|
|
127
|
+
return {
|
|
128
|
+
InvokeScript: {
|
|
129
|
+
fiberId: params.fiberId,
|
|
130
|
+
method: params.method,
|
|
131
|
+
args: params.args ?? {},
|
|
132
|
+
targetSequenceNumber: params.targetSequenceNumber,
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
exports.createInvokeScriptPayload = createInvokeScriptPayload;
|
|
137
|
+
/**
|
|
138
|
+
* Sign a transaction payload for self-signed mode.
|
|
139
|
+
*
|
|
140
|
+
* This creates a Signed<T> object with the exact format expected by the bridge's
|
|
141
|
+
* `/agent/transition` endpoint when using self-signed mode.
|
|
142
|
+
*
|
|
143
|
+
* @param message - The message to sign (e.g., from createTransitionPayload)
|
|
144
|
+
* @param privateKey - The private key in hex format (64 characters)
|
|
145
|
+
* @returns A signed object ready for submission to the bridge
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```typescript
|
|
149
|
+
* import { createTransitionPayload, signTransaction, generateKeyPair } from '@ottochain/sdk';
|
|
150
|
+
*
|
|
151
|
+
* const keyPair = generateKeyPair();
|
|
152
|
+
*
|
|
153
|
+
* // Create the transition message
|
|
154
|
+
* const transition = createTransitionPayload({
|
|
155
|
+
* fiberId: 'my-fiber-id',
|
|
156
|
+
* eventName: 'activate',
|
|
157
|
+
* payload: {},
|
|
158
|
+
* targetSequenceNumber: 0,
|
|
159
|
+
* });
|
|
160
|
+
*
|
|
161
|
+
* // Sign it
|
|
162
|
+
* const signedUpdate = await signTransaction(transition, keyPair.privateKey);
|
|
163
|
+
*
|
|
164
|
+
* // Submit to bridge
|
|
165
|
+
* await fetch('https://bridge/agent/transition', {
|
|
166
|
+
* method: 'POST',
|
|
167
|
+
* body: JSON.stringify({
|
|
168
|
+
* fiberId: 'my-fiber-id',
|
|
169
|
+
* signedUpdate,
|
|
170
|
+
* }),
|
|
171
|
+
* });
|
|
172
|
+
* ```
|
|
173
|
+
*/
|
|
174
|
+
async function signTransaction(message, privateKey) {
|
|
175
|
+
const proof = await (0, sign_js_1.signDataUpdate)(message, privateKey);
|
|
176
|
+
return {
|
|
177
|
+
value: message,
|
|
178
|
+
proofs: [proof],
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
exports.signTransaction = signTransaction;
|
|
182
|
+
/**
|
|
183
|
+
* Wrap a signed transaction in the DataTransactionRequest format
|
|
184
|
+
* expected by tessellation's DL1 `/data` endpoint.
|
|
185
|
+
*
|
|
186
|
+
* @param signed - A signed transaction from signTransaction()
|
|
187
|
+
* @returns Payload ready for POST to DL1 `/data`
|
|
188
|
+
*
|
|
189
|
+
* @example
|
|
190
|
+
* ```typescript
|
|
191
|
+
* const transition = createTransitionPayload({ ... });
|
|
192
|
+
* const signed = await signTransaction(transition, privateKey);
|
|
193
|
+
* const payload = createDataTransactionRequest(signed);
|
|
194
|
+
*
|
|
195
|
+
* // Submit directly to DL1
|
|
196
|
+
* await fetch('http://dl1-node:9400/data', {
|
|
197
|
+
* method: 'POST',
|
|
198
|
+
* headers: { 'Content-Type': 'application/json' },
|
|
199
|
+
* body: JSON.stringify(payload),
|
|
200
|
+
* });
|
|
201
|
+
* ```
|
|
202
|
+
*/
|
|
203
|
+
function createDataTransactionRequest(signed) {
|
|
204
|
+
return { data: signed, fee: null };
|
|
205
|
+
}
|
|
206
|
+
exports.createDataTransactionRequest = createDataTransactionRequest;
|
|
207
|
+
/**
|
|
208
|
+
* Add an additional signature to a signed transaction.
|
|
209
|
+
*
|
|
210
|
+
* Use this for multi-signature scenarios where multiple parties
|
|
211
|
+
* need to sign the same transaction.
|
|
212
|
+
*
|
|
213
|
+
* @param signed - The already-signed transaction
|
|
214
|
+
* @param privateKey - Additional signer's private key
|
|
215
|
+
* @returns Transaction with additional signature
|
|
216
|
+
*/
|
|
217
|
+
async function addTransactionSignature(signed, privateKey) {
|
|
218
|
+
const newProof = await (0, sign_js_1.signDataUpdate)(signed.value, privateKey);
|
|
219
|
+
return {
|
|
220
|
+
value: signed.value,
|
|
221
|
+
proofs: [...signed.proofs, newProof],
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
exports.addTransactionSignature = addTransactionSignature;
|
|
225
|
+
/**
|
|
226
|
+
* Get the public key ID from a private key in the format expected by registration.
|
|
227
|
+
*
|
|
228
|
+
* The bridge's self-signed registration expects the public key as a 128-character
|
|
229
|
+
* hex string (without the 04 prefix).
|
|
230
|
+
*
|
|
231
|
+
* @param privateKey - Private key in hex format
|
|
232
|
+
* @returns Public key ID (128 chars, no prefix)
|
|
233
|
+
*
|
|
234
|
+
* @example
|
|
235
|
+
* ```typescript
|
|
236
|
+
* const keyPair = generateKeyPair();
|
|
237
|
+
* const publicKeyId = getPublicKeyForRegistration(keyPair.privateKey);
|
|
238
|
+
*
|
|
239
|
+
* await fetch('https://bridge/agent/register', {
|
|
240
|
+
* method: 'POST',
|
|
241
|
+
* body: JSON.stringify({
|
|
242
|
+
* signingMode: 'self',
|
|
243
|
+
* publicKey: publicKeyId,
|
|
244
|
+
* displayName: 'My Agent',
|
|
245
|
+
* }),
|
|
246
|
+
* });
|
|
247
|
+
* ```
|
|
248
|
+
*/
|
|
249
|
+
function getPublicKeyForRegistration(privateKey) {
|
|
250
|
+
return (0, wallet_js_1.getPublicKeyId)(privateKey);
|
|
251
|
+
}
|
|
252
|
+
exports.getPublicKeyForRegistration = getPublicKeyForRegistration;
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
exports.MetagraphClient = void 0;
|
|
14
|
+
const transaction_js_1 = require("../metakit/transaction.js");
|
|
14
15
|
const client_js_1 = require("../metakit/network/client.js");
|
|
15
16
|
const types_js_1 = require("../metakit/network/types.js");
|
|
16
17
|
const snapshot_js_1 = require("./snapshot.js");
|
|
@@ -43,6 +44,9 @@ class MetagraphClient {
|
|
|
43
44
|
if (config.dl1Url) {
|
|
44
45
|
this.dl1 = new client_js_1.HttpClient(config.dl1Url, config.timeout);
|
|
45
46
|
}
|
|
47
|
+
// Build DL1 client pool from dl1Urls (falls back to dl1Url if provided)
|
|
48
|
+
const urls = config.dl1Urls ?? (config.dl1Url ? [config.dl1Url] : []);
|
|
49
|
+
this.dl1Clients = urls.map((url) => new client_js_1.HttpClient(url, config.timeout));
|
|
46
50
|
}
|
|
47
51
|
// -------------------------------------------------------------------------
|
|
48
52
|
// Custom routes (ML0 /data-application/v1/*)
|
|
@@ -300,5 +304,53 @@ class MetagraphClient {
|
|
|
300
304
|
}
|
|
301
305
|
return this.dl1.post('/data', signedData);
|
|
302
306
|
}
|
|
307
|
+
/**
|
|
308
|
+
* Submit a self-signed transaction directly to DL1 nodes.
|
|
309
|
+
*
|
|
310
|
+
* Wraps the signed payload in `{ data, fee: null }` format and submits
|
|
311
|
+
* to one of the configured DL1 nodes. Uses `Promise.any` when multiple
|
|
312
|
+
* DL1 URLs are configured for resilience.
|
|
313
|
+
*
|
|
314
|
+
* @param signed - A `Signed<T>` object from `signTransaction()`
|
|
315
|
+
* @returns Response containing the data hash
|
|
316
|
+
* @throws Error if no DL1 URLs are configured or all nodes fail
|
|
317
|
+
*
|
|
318
|
+
* @example
|
|
319
|
+
* ```typescript
|
|
320
|
+
* const metagraph = new MetagraphClient({
|
|
321
|
+
* ml0Url: 'http://localhost:9200',
|
|
322
|
+
* dl1Urls: ['http://node1:9400', 'http://node2:9400'],
|
|
323
|
+
* });
|
|
324
|
+
* const signed = await signTransaction(payload, privateKey);
|
|
325
|
+
* await metagraph.submitData(signed);
|
|
326
|
+
* ```
|
|
327
|
+
*/
|
|
328
|
+
async submitData(signed) {
|
|
329
|
+
if (this.dl1Clients.length === 0) {
|
|
330
|
+
throw new Error('dl1Url or dl1Urls is required for submitData');
|
|
331
|
+
}
|
|
332
|
+
const request = (0, transaction_js_1.createDataTransactionRequest)(signed);
|
|
333
|
+
if (this.dl1Clients.length === 1) {
|
|
334
|
+
return this.dl1Clients[0].post('/data', request);
|
|
335
|
+
}
|
|
336
|
+
// Try all DL1 nodes concurrently, return first success
|
|
337
|
+
const errors = [];
|
|
338
|
+
return new Promise((resolve, reject) => {
|
|
339
|
+
let settled = false;
|
|
340
|
+
let pending = this.dl1Clients.length;
|
|
341
|
+
for (const client of this.dl1Clients) {
|
|
342
|
+
client.post('/data', request).then((result) => { if (!settled) {
|
|
343
|
+
settled = true;
|
|
344
|
+
resolve(result);
|
|
345
|
+
} }, (err) => {
|
|
346
|
+
errors.push(err instanceof Error ? err : new Error(String(err)));
|
|
347
|
+
pending--;
|
|
348
|
+
if (pending === 0 && !settled) {
|
|
349
|
+
reject(new Error('All DL1 nodes failed: ' + errors.map(e => e.message).join('; ')));
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
}
|
|
303
355
|
}
|
|
304
356
|
exports.MetagraphClient = MetagraphClient;
|