ecash-lib 4.0.1 → 4.3.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 CHANGED
@@ -95,3 +95,6 @@ console.log(toHex(rawTx));
95
95
  - 3.1.0 - Add methods for signing and verifying messages [D17778](https://reviews.bitcoinabc.org/D17778)
96
96
  - 3.2.0 - Add method for parsing pushes from an EMPP OP_RETURN [D18057](https://reviews.bitcoinabc.org/D18057)
97
97
  - 4.0.0 - Add constants and types to support `ecash-wallet` [D17822](https://reviews.bitcoinabc.org/D17822)
98
+ - 4.1.0 - Add Tx deserialization methods [D18393](https://reviews.bitcoinabc.org/D18393)
99
+ - 4.2.0 - Add Tx.txid() method to compute the TxId of a transaction [D18394](https://reviews.bitcoinabc.org/D18394)
100
+ - 4.3.0 - Export a Tx.toHex() method [D18396](https://reviews.bitcoinabc.org/D18396)
package/dist/tx.d.ts CHANGED
@@ -70,10 +70,23 @@ export declare class Tx {
70
70
  });
71
71
  /** Serialize the tx to a byte array */
72
72
  ser(): Uint8Array;
73
+ /** Serialize the tx to a hex string */
74
+ toHex(): string;
73
75
  /** Calculate the serialized size of the tx */
74
76
  serSize(): number;
75
77
  /** Write the tx to the given writer */
76
78
  write(writer: Writer): void;
79
+ /** Deserialize a Tx from a Uint8Array */
80
+ static deser(data: Uint8Array): Tx;
81
+ /** Deserialize a Tx from a hex string */
82
+ static fromHex(hex: string): Tx;
83
+ /**
84
+ * Compute the transaction ID (TxId) as a hex string (little-endian).
85
+ * This follows the eCash convention: the TxId is the double SHA256 of the
86
+ * serialized transaction, returned as a hex string in little-endian (reversed) order.
87
+ * See the node src/primitives/txid.h for more details.
88
+ */
89
+ txid(): string;
77
90
  }
78
91
  export declare function readTxOutput(bytes: Bytes): TxOutput;
79
92
  /** Write an outpoint to a Writer */
package/dist/tx.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../src/tx.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGxC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;;;IAOI;AACJ,eAAO,MAAM,gBAAgB,aAAa,CAAC;AAE3C,4EAA4E;AAC5E,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,iDAAiD;AACjD,MAAM,WAAW,QAAQ;IACrB;;;QAGI;IACJ,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,yCAAyC;AACzC,MAAM,WAAW,OAAO;IACpB,uCAAuC;IACvC,OAAO,EAAE,QAAQ,CAAC;IAClB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACvB;AAED,qCAAqC;AACrC,MAAM,WAAW,QAAQ;IACrB,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,6DAA6D;AAC7D,MAAM,WAAW,QAAQ;IACrB,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;QAGI;IACJ,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,2CAA2C;AAC3C,qBAAa,EAAE;IACX,yBAAyB;IAClB,OAAO,EAAE,MAAM,CAAC;IACvB,mDAAmD;IAC5C,MAAM,EAAE,OAAO,EAAE,CAAC;IACzB,0CAA0C;IACnC,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC3B,uEAAuE;IAChE,QAAQ,EAAE,MAAM,CAAC;gBAEL,MAAM,CAAC,EAAE;QACxB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACrB;IAOD,uCAAuC;IAChC,GAAG,IAAI,UAAU;IAMxB,8CAA8C;IACvC,OAAO,IAAI,MAAM;IAMxB,uCAAuC;IAChC,KAAK,CAAC,MAAM,EAAE,MAAM;CAY9B;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,CAOnD;AAED,oCAAoC;AACpC,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAOtE;AAED,kCAAkC;AAClC,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAIjE;AAED,mCAAmC;AACnC,wBAAgB,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAGpE;AAED,wCAAwC;AACxC,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAiBnD;AAED,yCAAyC;AACzC,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAKvD"}
1
+ {"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../src/tx.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGxC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC;;;;;;;IAOI;AACJ,eAAO,MAAM,gBAAgB,aAAa,CAAC;AAE3C,4EAA4E;AAC5E,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,iDAAiD;AACjD,MAAM,WAAW,QAAQ;IACrB;;;QAGI;IACJ,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,yCAAyC;AACzC,MAAM,WAAW,OAAO;IACpB,uCAAuC;IACvC,OAAO,EAAE,QAAQ,CAAC;IAClB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACvB;AAED,qCAAqC;AACrC,MAAM,WAAW,QAAQ;IACrB,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,6DAA6D;AAC7D,MAAM,WAAW,QAAQ;IACrB,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;QAGI;IACJ,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,2CAA2C;AAC3C,qBAAa,EAAE;IACX,yBAAyB;IAClB,OAAO,EAAE,MAAM,CAAC;IACvB,mDAAmD;IAC5C,MAAM,EAAE,OAAO,EAAE,CAAC;IACzB,0CAA0C;IACnC,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC3B,uEAAuE;IAChE,QAAQ,EAAE,MAAM,CAAC;gBAEL,MAAM,CAAC,EAAE;QACxB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACrB;IAOD,uCAAuC;IAChC,GAAG,IAAI,UAAU;IAMxB,uCAAuC;IAChC,KAAK,IAAI,MAAM;IAItB,8CAA8C;IACvC,OAAO,IAAI,MAAM;IAMxB,uCAAuC;IAChC,KAAK,CAAC,MAAM,EAAE,MAAM;IAa3B,yCAAyC;WAC3B,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,EAAE;IAoCzC,yCAAyC;WAC3B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE;IAItC;;;;;OAKG;IACI,IAAI,IAAI,MAAM;CAGxB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,CAOnD;AAED,oCAAoC;AACpC,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAOtE;AAED,kCAAkC;AAClC,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAIjE;AAED,mCAAmC;AACnC,wBAAgB,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAGpE;AAED,wCAAwC;AACxC,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAiBnD;AAED,yCAAyC;AACzC,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAKvD"}
package/dist/tx.js CHANGED
@@ -4,11 +4,13 @@
4
4
  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.copyTxOutput = exports.copyTxInput = exports.writeTxOutput = exports.writeTxInput = exports.writeOutPoint = exports.readTxOutput = exports.Tx = exports.DEFAULT_TX_VERSION = exports.DEFAULT_SEQUENCE = void 0;
7
+ const bytes_js_1 = require("./io/bytes.js");
7
8
  const hex_js_1 = require("./io/hex.js");
8
9
  const varsize_js_1 = require("./io/varsize.js");
9
10
  const writerbytes_js_1 = require("./io/writerbytes.js");
10
11
  const writerlength_js_1 = require("./io/writerlength.js");
11
12
  const script_js_1 = require("./script.js");
13
+ const hash_js_1 = require("./hash.js");
12
14
  /**
13
15
  * Default value for nSequence of inputs if left undefined; this opts out of
14
16
  * BIP68 relative lock-time, and if all inputs have this value, nLockTime is
@@ -34,6 +36,10 @@ class Tx {
34
36
  this.write(writerBytes);
35
37
  return writerBytes.data;
36
38
  }
39
+ /** Serialize the tx to a hex string */
40
+ toHex() {
41
+ return (0, hex_js_1.toHex)(this.ser());
42
+ }
37
43
  /** Calculate the serialized size of the tx */
38
44
  serSize() {
39
45
  const writerLength = new writerlength_js_1.WriterLength();
@@ -53,6 +59,55 @@ class Tx {
53
59
  }
54
60
  writer.putU32(this.locktime);
55
61
  }
62
+ /** Deserialize a Tx from a Uint8Array */
63
+ static deser(data) {
64
+ const bytes = new bytes_js_1.Bytes(data);
65
+ const version = bytes.readU32();
66
+ const numInputs = (0, varsize_js_1.readVarSize)(bytes);
67
+ const inputs = [];
68
+ for (let i = 0; i < numInputs; ++i) {
69
+ // Read OutPoint
70
+ const txid = bytes.readBytes(32);
71
+ const outIdx = bytes.readU32();
72
+ // Read script
73
+ const script = script_js_1.Script.readWithSize(bytes);
74
+ // Read sequence
75
+ const sequence = bytes.readU32();
76
+ inputs.push({
77
+ prevOut: {
78
+ txid,
79
+ outIdx,
80
+ },
81
+ script,
82
+ sequence,
83
+ });
84
+ }
85
+ const numOutputs = (0, varsize_js_1.readVarSize)(bytes);
86
+ const outputs = [];
87
+ for (let i = 0; i < numOutputs; ++i) {
88
+ outputs.push(readTxOutput(bytes));
89
+ }
90
+ const locktime = bytes.readU32();
91
+ return new Tx({
92
+ version,
93
+ inputs,
94
+ outputs,
95
+ locktime,
96
+ });
97
+ }
98
+ /** Deserialize a Tx from a hex string */
99
+ static fromHex(hex) {
100
+ return Tx.deser((0, hex_js_1.fromHex)(hex));
101
+ }
102
+ /**
103
+ * Compute the transaction ID (TxId) as a hex string (little-endian).
104
+ * This follows the eCash convention: the TxId is the double SHA256 of the
105
+ * serialized transaction, returned as a hex string in little-endian (reversed) order.
106
+ * See the node src/primitives/txid.h for more details.
107
+ */
108
+ txid() {
109
+ return (0, hex_js_1.toHexRev)((0, hash_js_1.sha256d)(this.ser()));
110
+ }
56
111
  }
57
112
  exports.Tx = Tx;
58
113
  function readTxOutput(bytes) {
package/dist/tx.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tx.js","sourceRoot":"","sources":["../src/tx.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tx.js","sourceRoot":"","sources":["../src/tx.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ecash-lib",
3
- "version": "4.0.1",
3
+ "version": "4.3.0",
4
4
  "description": "Library for eCash transaction building",
5
5
  "main": "./dist/indexNodeJs.js",
6
6
  "browser": "./dist/indexBrowser.js",
package/src/tx.ts CHANGED
@@ -3,12 +3,13 @@
3
3
  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
4
 
5
5
  import { Bytes } from './io/bytes.js';
6
- import { fromHexRev } from './io/hex.js';
7
- import { writeVarSize } from './io/varsize.js';
6
+ import { fromHexRev, toHexRev, fromHex, toHex } from './io/hex.js';
7
+ import { writeVarSize, readVarSize } from './io/varsize.js';
8
8
  import { Writer } from './io/writer.js';
9
9
  import { WriterBytes } from './io/writerbytes.js';
10
10
  import { WriterLength } from './io/writerlength.js';
11
11
  import { Script } from './script.js';
12
+ import { sha256d } from './hash.js';
12
13
 
13
14
  /**
14
15
  * Default value for nSequence of inputs if left undefined; this opts out of
@@ -97,6 +98,11 @@ export class Tx {
97
98
  return writerBytes.data;
98
99
  }
99
100
 
101
+ /** Serialize the tx to a hex string */
102
+ public toHex(): string {
103
+ return toHex(this.ser());
104
+ }
105
+
100
106
  /** Calculate the serialized size of the tx */
101
107
  public serSize(): number {
102
108
  const writerLength = new WriterLength();
@@ -117,6 +123,58 @@ export class Tx {
117
123
  }
118
124
  writer.putU32(this.locktime);
119
125
  }
126
+
127
+ /** Deserialize a Tx from a Uint8Array */
128
+ public static deser(data: Uint8Array): Tx {
129
+ const bytes = new Bytes(data);
130
+ const version = bytes.readU32();
131
+ const numInputs = readVarSize(bytes);
132
+ const inputs: TxInput[] = [];
133
+ for (let i = 0; i < numInputs; ++i) {
134
+ // Read OutPoint
135
+ const txid = bytes.readBytes(32);
136
+ const outIdx = bytes.readU32();
137
+ // Read script
138
+ const script = Script.readWithSize(bytes);
139
+ // Read sequence
140
+ const sequence = bytes.readU32();
141
+ inputs.push({
142
+ prevOut: {
143
+ txid,
144
+ outIdx,
145
+ },
146
+ script,
147
+ sequence,
148
+ });
149
+ }
150
+ const numOutputs = readVarSize(bytes);
151
+ const outputs: TxOutput[] = [];
152
+ for (let i = 0; i < numOutputs; ++i) {
153
+ outputs.push(readTxOutput(bytes));
154
+ }
155
+ const locktime = bytes.readU32();
156
+ return new Tx({
157
+ version,
158
+ inputs,
159
+ outputs,
160
+ locktime,
161
+ });
162
+ }
163
+
164
+ /** Deserialize a Tx from a hex string */
165
+ public static fromHex(hex: string): Tx {
166
+ return Tx.deser(fromHex(hex));
167
+ }
168
+
169
+ /**
170
+ * Compute the transaction ID (TxId) as a hex string (little-endian).
171
+ * This follows the eCash convention: the TxId is the double SHA256 of the
172
+ * serialized transaction, returned as a hex string in little-endian (reversed) order.
173
+ * See the node src/primitives/txid.h for more details.
174
+ */
175
+ public txid(): string {
176
+ return toHexRev(sha256d(this.ser()));
177
+ }
120
178
  }
121
179
 
122
180
  export function readTxOutput(bytes: Bytes): TxOutput {