mainnet-js 1.1.3 → 1.1.5
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/index.html +1 -1
- package/dist/{mainnet-1.1.3.js → mainnet-1.1.5.js} +2 -2
- package/dist/module/transaction/Wif.d.ts +6 -4
- package/dist/module/transaction/Wif.d.ts.map +1 -1
- package/dist/module/transaction/Wif.js +54 -22
- package/dist/module/transaction/Wif.js.map +1 -1
- package/dist/module/wallet/Wif.d.ts +2 -1
- package/dist/module/wallet/Wif.d.ts.map +1 -1
- package/dist/module/wallet/Wif.js +10 -8
- package/dist/module/wallet/Wif.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/transaction/Wif.ts +76 -21
- package/src/wallet/Cashtokens.test.headless.js +54 -12
- package/src/wallet/Cashtokens.test.ts +52 -41
- package/src/wallet/Wif.ts +20 -9
|
@@ -837,10 +837,11 @@ describe(`Test cashtokens`, () => {
|
|
|
837
837
|
aliceWallet.cashaddr!
|
|
838
838
|
);
|
|
839
839
|
|
|
840
|
+
let tokenId;
|
|
840
841
|
{
|
|
841
842
|
const aliceUtxos = await aliceWallet.getAddressUtxos();
|
|
842
843
|
|
|
843
|
-
const { unsignedTransaction, sourceOutputs } =
|
|
844
|
+
const { unsignedTransaction, sourceOutputs, tokenIds } =
|
|
844
845
|
await aliceWatchWallet.tokenGenesis(
|
|
845
846
|
{
|
|
846
847
|
capability: "minting",
|
|
@@ -867,13 +868,20 @@ describe(`Test cashtokens`, () => {
|
|
|
867
868
|
).toBe(true);
|
|
868
869
|
expect(sourceOutputs!.length).toBe(decoded.inputs.length);
|
|
869
870
|
expect(binToHex(decoded.outputs[0].token?.nft?.commitment!)).toBe("00");
|
|
870
|
-
}
|
|
871
871
|
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
872
|
+
const signed = await aliceWallet.signUnsignedTransaction(
|
|
873
|
+
unsignedTransaction!,
|
|
874
|
+
sourceOutputs!
|
|
875
|
+
);
|
|
876
|
+
await aliceWallet.submitTransaction(signed);
|
|
877
|
+
|
|
878
|
+
tokenId = tokenIds![0];
|
|
879
|
+
|
|
880
|
+
expect(await aliceWallet.getNftTokenBalance(tokenId)).toBe(1);
|
|
881
|
+
const tokenUtxos = await aliceWallet.getTokenUtxos(tokenId);
|
|
882
|
+
expect(tokenUtxos.length).toBe(1);
|
|
883
|
+
expect(tokenUtxos[0].token?.capability).toBe(NFTCapability.minting);
|
|
884
|
+
}
|
|
877
885
|
|
|
878
886
|
{
|
|
879
887
|
const aliceUtxos = await aliceWallet.getAddressUtxos();
|
|
@@ -908,12 +916,26 @@ describe(`Test cashtokens`, () => {
|
|
|
908
916
|
expect(binToHex(sourceOutputs![0].token?.nft?.commitment!)).toBe("00");
|
|
909
917
|
expect(binToHex(decoded.outputs[0].token?.nft?.commitment!)).toBe("00");
|
|
910
918
|
expect(binToHex(decoded.outputs[1].token?.nft?.commitment!)).toBe("0a");
|
|
911
|
-
}
|
|
912
919
|
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
920
|
+
const signed = await aliceWallet.signUnsignedTransaction(
|
|
921
|
+
unsignedTransaction!,
|
|
922
|
+
sourceOutputs!
|
|
923
|
+
);
|
|
924
|
+
await aliceWallet.submitTransaction(signed);
|
|
925
|
+
|
|
926
|
+
expect(await aliceWallet.getNftTokenBalance(tokenId)).toBe(2);
|
|
927
|
+
const tokenUtxos = await aliceWallet.getTokenUtxos(tokenId);
|
|
928
|
+
expect(tokenUtxos.length).toBe(2);
|
|
929
|
+
expect(
|
|
930
|
+
tokenUtxos.filter(
|
|
931
|
+
(val) => val.token?.capability === NFTCapability.minting
|
|
932
|
+
).length
|
|
933
|
+
).toBe(1);
|
|
934
|
+
expect(
|
|
935
|
+
tokenUtxos.filter((val) => val.token?.capability === NFTCapability.none)
|
|
936
|
+
.length
|
|
937
|
+
).toBe(1);
|
|
938
|
+
}
|
|
917
939
|
|
|
918
940
|
{
|
|
919
941
|
const aliceUtxos = await aliceWallet.getAddressUtxos();
|
|
@@ -949,38 +971,27 @@ describe(`Test cashtokens`, () => {
|
|
|
949
971
|
expect(sourceOutputs!.length).toBe(decoded.inputs.length);
|
|
950
972
|
expect(binToHex(sourceOutputs![0].token?.nft?.commitment!)).toBe("0a");
|
|
951
973
|
expect(binToHex(decoded.outputs[0].token?.nft?.commitment!)).toBe("0a");
|
|
952
|
-
}
|
|
953
|
-
});
|
|
954
|
-
|
|
955
|
-
test("Kek", async () => {
|
|
956
|
-
const aliceWatchWallet = await TestNetWallet.watchOnly("bchtest:zzm0t7f76ye50xh2hr0lmt2a0wage2sutcqnl25ahq");
|
|
957
|
-
|
|
958
|
-
// const utxos = (await aliceWatchWallet.getTokenUtxos()).filter(val => val.token?.tokenId.startsWith("4cca"));
|
|
959
|
-
// console.log(utxos);
|
|
960
|
-
// return;
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
const { unsignedTransaction, sourceOutputs } = await aliceWatchWallet.tokenGenesis({
|
|
964
|
-
cashaddr: aliceWatchWallet.cashaddr!,
|
|
965
|
-
capability: NFTCapability.minting,
|
|
966
|
-
commitment: "",
|
|
967
|
-
value: 1000
|
|
968
|
-
}, OpReturnData.from(""), { buildUnsigned: true });
|
|
969
|
-
const encodedTransaction = hexToBin(unsignedTransaction!);
|
|
970
|
-
expect(encodedTransaction.length).toBeGreaterThan(0);
|
|
971
|
-
|
|
972
|
-
// const decoded = decodeTransaction(encodedTransaction);
|
|
973
|
-
// if (typeof decoded === "string") {
|
|
974
|
-
// throw decoded;
|
|
975
|
-
// }
|
|
976
|
-
|
|
977
|
-
// expect(binsAreEqual(decoded.inputs[0].unlockingBytecode, Uint8Array.from([]))).toBe(true);
|
|
978
|
-
// expect(sourceOutputs!.length).toBe(decoded.inputs.length);
|
|
979
|
-
// expect(binToHex(decoded.outputs[0].token?.nft?.commitment!)).toBe("00");
|
|
980
974
|
|
|
975
|
+
const signed = await aliceWallet.signUnsignedTransaction(
|
|
976
|
+
unsignedTransaction!,
|
|
977
|
+
sourceOutputs!
|
|
978
|
+
);
|
|
979
|
+
await aliceWallet.submitTransaction(signed);
|
|
980
|
+
expect(await aliceWallet.getNftTokenBalance(tokenId)).toBe(2);
|
|
981
|
+
const tokenUtxos = await aliceWallet.getTokenUtxos(tokenId);
|
|
982
|
+
expect(tokenUtxos.length).toBe(2);
|
|
983
|
+
expect(
|
|
984
|
+
tokenUtxos.filter(
|
|
985
|
+
(val) => val.token?.capability === NFTCapability.minting
|
|
986
|
+
).length
|
|
987
|
+
).toBe(1);
|
|
988
|
+
expect(
|
|
989
|
+
tokenUtxos.filter((val) => val.token?.capability === NFTCapability.none)
|
|
990
|
+
.length
|
|
991
|
+
).toBe(1);
|
|
992
|
+
}
|
|
981
993
|
});
|
|
982
994
|
|
|
983
|
-
|
|
984
995
|
test("Test enforcing token addresses", async () => {
|
|
985
996
|
const bob = await RegTestWallet.newRandom();
|
|
986
997
|
|
package/src/wallet/Wif.ts
CHANGED
|
@@ -39,6 +39,7 @@ import {
|
|
|
39
39
|
SendRequestArray,
|
|
40
40
|
SendRequestType,
|
|
41
41
|
SendResponse,
|
|
42
|
+
SourceOutput,
|
|
42
43
|
TokenBurnRequest,
|
|
43
44
|
TokenGenesisRequest,
|
|
44
45
|
TokenMintRequest,
|
|
@@ -50,6 +51,7 @@ import {
|
|
|
50
51
|
buildEncodedTransaction,
|
|
51
52
|
getSuitableUtxos,
|
|
52
53
|
getFeeAmount,
|
|
54
|
+
signUnsignedTransaction,
|
|
53
55
|
} from "../transaction/Wif.js";
|
|
54
56
|
|
|
55
57
|
import { asSendRequestObject } from "../util/asSendRequestObject.js";
|
|
@@ -1132,13 +1134,6 @@ export class Wallet extends BaseWallet {
|
|
|
1132
1134
|
utxos = utxos.filter((val) => !val.token);
|
|
1133
1135
|
}
|
|
1134
1136
|
|
|
1135
|
-
// let tokenOp: "send" | "genesis" | "mint" | "burn" | undefined = undefined;
|
|
1136
|
-
// if (options?.ensureUtxos?.every(val => !val.token) && sendRequests.some(val => (val as TokenSendRequest).tokenId)) {
|
|
1137
|
-
// tokenOp = "genesis";
|
|
1138
|
-
// } else if (options?.ensureUtxos?.length === 1 && options?.ensureUtxos?.[0].token?.capability === NFTCapability.minting && ) {
|
|
1139
|
-
|
|
1140
|
-
// }
|
|
1141
|
-
|
|
1142
1137
|
const addTokenChangeOutputs = (
|
|
1143
1138
|
inputs: UtxoI[],
|
|
1144
1139
|
outputs: SendRequestType[]
|
|
@@ -1245,6 +1240,7 @@ export class Wallet extends BaseWallet {
|
|
|
1245
1240
|
slpOutputs: [],
|
|
1246
1241
|
feePaidBy,
|
|
1247
1242
|
changeAddress,
|
|
1243
|
+
buildUnsigned: options?.buildUnsigned === true,
|
|
1248
1244
|
}
|
|
1249
1245
|
);
|
|
1250
1246
|
|
|
@@ -1260,6 +1256,21 @@ export class Wallet extends BaseWallet {
|
|
|
1260
1256
|
return { encodedTransaction, tokenIds, sourceOutputs };
|
|
1261
1257
|
}
|
|
1262
1258
|
|
|
1259
|
+
public async signUnsignedTransaction(
|
|
1260
|
+
transaction: Uint8Array | string,
|
|
1261
|
+
sourceOutputs: SourceOutput[]
|
|
1262
|
+
): Promise<Uint8Array> {
|
|
1263
|
+
if (!this.privateKey) {
|
|
1264
|
+
throw Error("Can not sign a transaction with watch-only wallet.");
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1267
|
+
return signUnsignedTransaction(
|
|
1268
|
+
transaction,
|
|
1269
|
+
sourceOutputs,
|
|
1270
|
+
this.privateKey!
|
|
1271
|
+
);
|
|
1272
|
+
}
|
|
1273
|
+
|
|
1263
1274
|
// Submit a raw transaction
|
|
1264
1275
|
public async submitTransaction(
|
|
1265
1276
|
transaction: Uint8Array,
|
|
@@ -1492,13 +1503,13 @@ export class Wallet extends BaseWallet {
|
|
|
1492
1503
|
value: genesisRequest.value || 1000,
|
|
1493
1504
|
capability: genesisRequest.capability,
|
|
1494
1505
|
commitment: genesisRequest.commitment,
|
|
1495
|
-
tokenId:
|
|
1506
|
+
tokenId: genesisInputs[0].txid,
|
|
1496
1507
|
});
|
|
1497
1508
|
|
|
1498
1509
|
return this.send([genesisSendRequest, ...(sendRequests as any)], {
|
|
1499
1510
|
...options,
|
|
1500
1511
|
utxoIds: utxos,
|
|
1501
|
-
ensureUtxos: [
|
|
1512
|
+
ensureUtxos: [genesisInputs[0]],
|
|
1502
1513
|
checkTokenQuantities: false,
|
|
1503
1514
|
queryBalance: false,
|
|
1504
1515
|
tokenOperation: "genesis",
|