@midnight-ntwrk/wallet-sdk-unshielded-wallet 1.0.0-beta.18 → 1.0.0-beta.19
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/UnshieldedWallet.d.ts +2 -1
- package/dist/UnshieldedWallet.js +9 -2
- package/dist/v1/RunningV1Variant.d.ts +2 -1
- package/dist/v1/RunningV1Variant.js +5 -2
- package/dist/v1/Transacting.d.ts +12 -2
- package/dist/v1/Transacting.js +24 -3
- package/dist/v1/TransactionOps.d.ts +1 -0
- package/dist/v1/TransactionOps.js +17 -0
- package/package.json +6 -6
|
@@ -45,7 +45,8 @@ export interface CustomizedUnshieldedWallet<TSyncUpdate = WalletSyncUpdate, TSer
|
|
|
45
45
|
balanceUnprovenTransaction(tx: ledger.UnprovenTransaction): Promise<UnprovenTransactionBalanceResult>;
|
|
46
46
|
transferTransaction(outputs: readonly TokenTransfer[], ttl: Date): Promise<ledger.UnprovenTransaction>;
|
|
47
47
|
initSwap(desiredInputs: Record<ledger.RawTokenType, bigint>, desiredOutputs: readonly TokenTransfer[], ttl: Date): Promise<ledger.UnprovenTransaction>;
|
|
48
|
-
|
|
48
|
+
signUnprovenTransaction(transaction: ledger.UnprovenTransaction, signSegment: (data: Uint8Array) => ledger.Signature): Promise<ledger.UnprovenTransaction>;
|
|
49
|
+
signUnboundTransaction(transaction: UnboundTransaction, signSegment: (data: Uint8Array) => ledger.Signature): Promise<UnboundTransaction>;
|
|
49
50
|
serializeState(): Promise<TSerialized>;
|
|
50
51
|
waitForSyncedState(allowedGap?: bigint): Promise<UnshieldedWalletState<TSerialized>>;
|
|
51
52
|
getAddress(): Promise<UnshieldedAddress>;
|
package/dist/UnshieldedWallet.js
CHANGED
|
@@ -110,10 +110,17 @@ export function CustomUnshieldedWallet(configuration, builder) {
|
|
|
110
110
|
.dispatch({ [V1Tag]: (v1) => v1.initSwap(desiredInputs, desiredOutputs, ttl) })
|
|
111
111
|
.pipe(Effect.runPromise);
|
|
112
112
|
}
|
|
113
|
-
|
|
113
|
+
signUnprovenTransaction(transaction, signSegment) {
|
|
114
114
|
return this.runtime
|
|
115
115
|
.dispatch({
|
|
116
|
-
[V1Tag]: (v1) => v1.
|
|
116
|
+
[V1Tag]: (v1) => v1.signUnprovenTransaction(transaction, signSegment),
|
|
117
|
+
})
|
|
118
|
+
.pipe(Effect.runPromise);
|
|
119
|
+
}
|
|
120
|
+
signUnboundTransaction(transaction, signSegment) {
|
|
121
|
+
return this.runtime
|
|
122
|
+
.dispatch({
|
|
123
|
+
[V1Tag]: (v1) => v1.signUnboundTransaction(transaction, signSegment),
|
|
117
124
|
})
|
|
118
125
|
.pipe(Effect.runPromise);
|
|
119
126
|
}
|
|
@@ -39,6 +39,7 @@ export declare class RunningV1Variant<TSerialized, TSyncUpdate> implements Varia
|
|
|
39
39
|
balanceUnprovenTransaction(tx: ledger.UnprovenTransaction): Effect.Effect<UnprovenTransactionBalanceResult, WalletError>;
|
|
40
40
|
transferTransaction(outputs: ReadonlyArray<TokenTransfer>, ttl: Date): Effect.Effect<ledger.UnprovenTransaction, WalletError>;
|
|
41
41
|
initSwap(desiredInputs: Record<string, bigint>, desiredOutputs: ReadonlyArray<TokenTransfer>, ttl: Date): Effect.Effect<ledger.UnprovenTransaction, WalletError>;
|
|
42
|
-
|
|
42
|
+
signUnprovenTransaction(transaction: ledger.UnprovenTransaction, signSegment: (data: Uint8Array) => ledger.Signature): Effect.Effect<ledger.UnprovenTransaction, WalletError>;
|
|
43
|
+
signUnboundTransaction(transaction: UnboundTransaction, signSegment: (data: Uint8Array) => ledger.Signature): Effect.Effect<UnboundTransaction, WalletError>;
|
|
43
44
|
serializeState(state: CoreWallet): TSerialized;
|
|
44
45
|
}
|
|
@@ -92,8 +92,11 @@ export class RunningV1Variant {
|
|
|
92
92
|
return pipe(this.#v1Context.transactingCapability.initSwap(state, desiredInputs, desiredOutputs, ttl), Effect.map(({ transaction, newState }) => [transaction, newState]));
|
|
93
93
|
});
|
|
94
94
|
}
|
|
95
|
-
|
|
96
|
-
return this.#v1Context.transactingCapability.
|
|
95
|
+
signUnprovenTransaction(transaction, signSegment) {
|
|
96
|
+
return this.#v1Context.transactingCapability.signUnprovenTransaction(transaction, signSegment);
|
|
97
|
+
}
|
|
98
|
+
signUnboundTransaction(transaction, signSegment) {
|
|
99
|
+
return this.#v1Context.transactingCapability.signUnboundTransaction(transaction, signSegment);
|
|
97
100
|
}
|
|
98
101
|
serializeState(state) {
|
|
99
102
|
return this.#v1Context.serializationCapability.serialize(state);
|
package/dist/v1/Transacting.d.ts
CHANGED
|
@@ -25,7 +25,9 @@ export interface TransactingCapability<TState> {
|
|
|
25
25
|
balanceFinalizedTransaction(wallet: CoreWallet, transaction: ledger.FinalizedTransaction): Either.Either<[FinalizedTransactionBalanceResult, CoreWallet], WalletError>;
|
|
26
26
|
balanceUnboundTransaction(wallet: CoreWallet, transaction: UnboundTransaction): Either.Either<[UnboundTransactionBalanceResult, CoreWallet], WalletError>;
|
|
27
27
|
balanceUnprovenTransaction(wallet: CoreWallet, transaction: ledger.UnprovenTransaction): Either.Either<[UnprovenTransactionBalanceResult, CoreWallet], WalletError>;
|
|
28
|
-
|
|
28
|
+
signUnprovenTransaction(transaction: ledger.UnprovenTransaction, signSegment: (data: Uint8Array) => ledger.Signature): Either.Either<ledger.UnprovenTransaction, WalletError>;
|
|
29
|
+
revert(wallet: CoreWallet, transaction: ledger.FinalizedTransaction | UnboundTransaction | ledger.UnprovenTransaction): Either.Either<CoreWallet, WalletError>;
|
|
30
|
+
signUnboundTransaction(transaction: UnboundTransaction, signSegment: (data: Uint8Array) => ledger.Signature): Either.Either<UnboundTransaction, WalletError>;
|
|
29
31
|
}
|
|
30
32
|
export type DefaultTransactingConfiguration = {
|
|
31
33
|
networkId: NetworkId.NetworkId;
|
|
@@ -86,5 +88,13 @@ export declare class TransactingCapabilityImplementation implements TransactingC
|
|
|
86
88
|
* @returns The initialized swap transaction and the new wallet state if successful, otherwise an error
|
|
87
89
|
*/
|
|
88
90
|
initSwap(wallet: CoreWallet, desiredInputs: Record<ledger.RawTokenType, bigint>, desiredOutputs: ReadonlyArray<TokenTransfer>, ttl: Date): Either.Either<TransactingResult<ledger.UnprovenTransaction, CoreWallet>, WalletError>;
|
|
89
|
-
|
|
91
|
+
signUnprovenTransaction(transaction: ledger.UnprovenTransaction, signSegment: (data: Uint8Array) => ledger.Signature): Either.Either<ledger.UnprovenTransaction, WalletError>;
|
|
92
|
+
signUnboundTransaction(transaction: UnboundTransaction, signSegment: (data: Uint8Array) => ledger.Signature): Either.Either<UnboundTransaction, WalletError>;
|
|
93
|
+
/**
|
|
94
|
+
* Reverts a transaction by rolling back all inputs owned by this wallet
|
|
95
|
+
* @param wallet - The wallet to revert the transaction for
|
|
96
|
+
* @param transaction - The transaction to revert (can be FinalizedTransaction, UnboundTransaction, or UnprovenTransaction)
|
|
97
|
+
* @returns The updated wallet with rolled back UTXOs if successful, otherwise an error
|
|
98
|
+
*/
|
|
99
|
+
revert(wallet: CoreWallet, transaction: ledger.FinalizedTransaction | UnboundTransaction | ledger.UnprovenTransaction): Either.Either<CoreWallet, WalletError>;
|
|
90
100
|
}
|
package/dist/v1/Transacting.js
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// See the License for the specific language governing permissions and
|
|
12
12
|
// limitations under the License.
|
|
13
13
|
import * as ledger from '@midnight-ntwrk/ledger-v7';
|
|
14
|
-
import { Either, Option, pipe } from 'effect';
|
|
14
|
+
import { Either, Option, pipe, Array as Arr } from 'effect';
|
|
15
15
|
import { CoreWallet } from './CoreWallet.js';
|
|
16
16
|
import { InsufficientFundsError, OtherWalletError, SignError, TransactingError } from './WalletError.js';
|
|
17
17
|
import { getBalanceRecipe, Imbalances, InsufficientFundsError as BalancingInsufficientFundsError, } from '@midnight-ntwrk/wallet-sdk-capabilities';
|
|
@@ -170,7 +170,19 @@ export class TransactingCapabilityImplementation {
|
|
|
170
170
|
};
|
|
171
171
|
});
|
|
172
172
|
}
|
|
173
|
-
|
|
173
|
+
signUnprovenTransaction(transaction, signSegment) {
|
|
174
|
+
return this.#signTransactionInternal(transaction, signSegment);
|
|
175
|
+
}
|
|
176
|
+
signUnboundTransaction(transaction, signSegment) {
|
|
177
|
+
return this.#signTransactionInternal(transaction, signSegment);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Internal method to sign either an unproven or unbound transaction
|
|
181
|
+
* @param transaction - The transaction to sign
|
|
182
|
+
* @param signSegment - The signing function
|
|
183
|
+
* @returns The signed transaction if successful, otherwise an error
|
|
184
|
+
*/
|
|
185
|
+
#signTransactionInternal(transaction, signSegment) {
|
|
174
186
|
return Either.gen(this, function* () {
|
|
175
187
|
const segments = this.txOps.getSegments(transaction);
|
|
176
188
|
if (!segments.length) {
|
|
@@ -179,11 +191,20 @@ export class TransactingCapabilityImplementation {
|
|
|
179
191
|
for (const segment of segments) {
|
|
180
192
|
const signedData = yield* this.txOps.getSignatureData(transaction, segment);
|
|
181
193
|
const signature = signSegment(signedData);
|
|
182
|
-
transaction = yield* this.txOps.addSignature(transaction, signature, segment);
|
|
194
|
+
transaction = (yield* this.txOps.addSignature(transaction, signature, segment));
|
|
183
195
|
}
|
|
184
196
|
return transaction;
|
|
185
197
|
});
|
|
186
198
|
}
|
|
199
|
+
/**
|
|
200
|
+
* Reverts a transaction by rolling back all inputs owned by this wallet
|
|
201
|
+
* @param wallet - The wallet to revert the transaction for
|
|
202
|
+
* @param transaction - The transaction to revert (can be FinalizedTransaction, UnboundTransaction, or UnprovenTransaction)
|
|
203
|
+
* @returns The updated wallet with rolled back UTXOs if successful, otherwise an error
|
|
204
|
+
*/
|
|
205
|
+
revert(wallet, transaction) {
|
|
206
|
+
return pipe(this.txOps.extractOwnInputs(transaction, wallet.publicKey.publicKey), Arr.reduce(Either.right(wallet), (walletAcc, utxo) => pipe(walletAcc, Either.flatMap((w) => CoreWallet.rollbackUtxo(w, utxo)))));
|
|
207
|
+
}
|
|
187
208
|
/**
|
|
188
209
|
* Balances a segment of a transaction
|
|
189
210
|
* @param wallet - The wallet to balance the segment for
|
|
@@ -18,5 +18,6 @@ export type TransactionOps = {
|
|
|
18
18
|
getImbalances(transaction: ledger.FinalizedTransaction | UnboundTransaction | ledger.UnprovenTransaction, segment: number): Imbalances;
|
|
19
19
|
addSignaturesToOffer(offer: ledger.UnshieldedOffer<ledger.SignatureEnabled>, signature: ledger.Signature, segment: number, offerType: 'guaranteed' | 'fallible'): Either.Either<ledger.UnshieldedOffer<ledger.SignatureEnabled>, WalletError>;
|
|
20
20
|
isIntentBound(intent: ledger.Intent<ledger.SignatureEnabled, ledger.Proofish, ledger.Bindingish>): boolean;
|
|
21
|
+
extractOwnInputs(transaction: ledger.FinalizedTransaction | UnboundTransaction | ledger.UnprovenTransaction, signatureVerifyingKey: ledger.SignatureVerifyingKey): ledger.Utxo[];
|
|
21
22
|
};
|
|
22
23
|
export declare const TransactionOps: TransactionOps;
|
|
@@ -75,4 +75,21 @@ export const TransactionOps = {
|
|
|
75
75
|
isIntentBound(intent) {
|
|
76
76
|
return intent.binding.instance === 'binding';
|
|
77
77
|
},
|
|
78
|
+
extractOwnInputs(transaction, signatureVerifyingKey) {
|
|
79
|
+
const segments = TransactionOps.getSegments(transaction);
|
|
80
|
+
return pipe(segments, Arr.flatMap((segment) => {
|
|
81
|
+
const intent = transaction.intents?.get(segment);
|
|
82
|
+
if (!intent) {
|
|
83
|
+
return [];
|
|
84
|
+
}
|
|
85
|
+
const { guaranteedUnshieldedOffer, fallibleUnshieldedOffer } = intent;
|
|
86
|
+
const ownedInputsfromGuaranteedSection = guaranteedUnshieldedOffer?.inputs
|
|
87
|
+
? guaranteedUnshieldedOffer.inputs.filter((input) => input.owner === signatureVerifyingKey)
|
|
88
|
+
: [];
|
|
89
|
+
const ownedInputsfromFallibleSection = fallibleUnshieldedOffer
|
|
90
|
+
? fallibleUnshieldedOffer.inputs.filter((input) => input.owner === signatureVerifyingKey)
|
|
91
|
+
: [];
|
|
92
|
+
return [...ownedInputsfromGuaranteedSection, ...ownedInputsfromFallibleSection];
|
|
93
|
+
}));
|
|
94
|
+
},
|
|
78
95
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@midnight-ntwrk/wallet-sdk-unshielded-wallet",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.19",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -23,13 +23,13 @@
|
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@midnight-ntwrk/ledger-v7": "7.0.0
|
|
26
|
+
"@midnight-ntwrk/ledger-v7": "7.0.0",
|
|
27
27
|
"@midnight-ntwrk/wallet-sdk-abstractions": "1.0.0-beta.10",
|
|
28
|
-
"@midnight-ntwrk/wallet-sdk-address-format": "3.0.0-beta.
|
|
29
|
-
"@midnight-ntwrk/wallet-sdk-capabilities": "3.0.0-beta.
|
|
28
|
+
"@midnight-ntwrk/wallet-sdk-address-format": "3.0.0-beta.12",
|
|
29
|
+
"@midnight-ntwrk/wallet-sdk-capabilities": "3.0.0-beta.12",
|
|
30
30
|
"@midnight-ntwrk/wallet-sdk-hd": "3.0.0-beta.8",
|
|
31
|
-
"@midnight-ntwrk/wallet-sdk-indexer-client": "1.0.0-beta.
|
|
32
|
-
"@midnight-ntwrk/wallet-sdk-utilities": "1.0.0-beta.
|
|
31
|
+
"@midnight-ntwrk/wallet-sdk-indexer-client": "1.0.0-beta.17",
|
|
32
|
+
"@midnight-ntwrk/wallet-sdk-utilities": "1.0.0-beta.11",
|
|
33
33
|
"effect": "^3.19.14",
|
|
34
34
|
"rxjs": "^7.5"
|
|
35
35
|
},
|