quantum-coin-js-sdk 1.0.17 → 1.0.18

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
@@ -19,8 +19,8 @@ Requires Node.js version v20.18.1 or higher
19
19
  * [~Wallet](#module_quantum-coin-js-sdk..Wallet)
20
20
  * [new Wallet(address, privateKey, publicKey)](#new_module_quantum-coin-js-sdk..Wallet_new)
21
21
  * [.address](#module_quantum-coin-js-sdk..Wallet+address) : <code>string</code>
22
- * [.privateKey](#module_quantum-coin-js-sdk..Wallet+privateKey)
23
- * [.publicKey](#module_quantum-coin-js-sdk..Wallet+publicKey)
22
+ * [.privateKey](#module_quantum-coin-js-sdk..Wallet+privateKey) : <code>Array.&lt;number&gt;</code>
23
+ * [.publicKey](#module_quantum-coin-js-sdk..Wallet+publicKey) : <code>Array.&lt;number&gt;</code>
24
24
  * [~BlockDetails](#module_quantum-coin-js-sdk..BlockDetails)
25
25
  * [.blockNumber](#module_quantum-coin-js-sdk..BlockDetails+blockNumber) : <code>number</code>
26
26
  * [~LatestBlockDetailsResult](#module_quantum-coin-js-sdk..LatestBlockDetailsResult)
@@ -108,6 +108,8 @@ Requires Node.js version v20.18.1 or higher
108
108
  * [~listAccountTransactions(address, pageNumber)](#module_quantum-coin-js-sdk..listAccountTransactions) ⇒ <code>Promise.&lt;ListAccountTransactionsResponse&gt;</code>
109
109
  * [~signSendCoinTransaction(wallet, toAddress, coins, nonce)](#module_quantum-coin-js-sdk..signSendCoinTransaction) ⇒ <code>SignResult</code>
110
110
  * [~sendCoins(wallet, toAddress, coins, nonce)](#module_quantum-coin-js-sdk..sendCoins) ⇒ <code>Promise.&lt;SendResult&gt;</code>
111
+ * [~publicKeyFromSignature(digest, signature)](#module_quantum-coin-js-sdk..publicKeyFromSignature) ⇒ <code>Array.&lt;number&gt;</code>
112
+ * [~publicKeyFromPrivateKey(privateKey)](#module_quantum-coin-js-sdk..publicKeyFromPrivateKey) ⇒ <code>Array.&lt;number&gt;</code>
111
113
 
112
114
  <a name="module_quantum-coin-js-sdk..Config"></a>
113
115
 
@@ -185,8 +187,8 @@ This class represents a Wallet. Use the verifyWallet function to verify if a wal
185
187
  * [~Wallet](#module_quantum-coin-js-sdk..Wallet)
186
188
  * [new Wallet(address, privateKey, publicKey)](#new_module_quantum-coin-js-sdk..Wallet_new)
187
189
  * [.address](#module_quantum-coin-js-sdk..Wallet+address) : <code>string</code>
188
- * [.privateKey](#module_quantum-coin-js-sdk..Wallet+privateKey)
189
- * [.publicKey](#module_quantum-coin-js-sdk..Wallet+publicKey)
190
+ * [.privateKey](#module_quantum-coin-js-sdk..Wallet+privateKey) : <code>Array.&lt;number&gt;</code>
191
+ * [.publicKey](#module_quantum-coin-js-sdk..Wallet+publicKey) : <code>Array.&lt;number&gt;</code>
190
192
 
191
193
  <a name="new_module_quantum-coin-js-sdk..Wallet_new"></a>
192
194
 
@@ -209,14 +211,14 @@ Address of the wallet. Is 66 bytes in length including 0x (if the wallet is vali
209
211
  **Access**: public
210
212
  <a name="module_quantum-coin-js-sdk..Wallet+privateKey"></a>
211
213
 
212
- #### wallet.privateKey
214
+ #### wallet.privateKey : <code>Array.&lt;number&gt;</code>
213
215
  Private Key byte array of the wallet. Is 4064 bytes in length (if the wallet is valid).
214
216
 
215
217
  **Kind**: instance property of [<code>Wallet</code>](#module_quantum-coin-js-sdk..Wallet)
216
218
  **Access**: public
217
219
  <a name="module_quantum-coin-js-sdk..Wallet+publicKey"></a>
218
220
 
219
- #### wallet.publicKey
221
+ #### wallet.publicKey : <code>Array.&lt;number&gt;</code>
220
222
  Public Key byte array of the wallet. Is 1408 bytes in length (if the wallet is valid).
221
223
 
222
224
  **Kind**: instance property of [<code>Wallet</code>](#module_quantum-coin-js-sdk..Wallet)
@@ -999,3 +1001,28 @@ The sendCoins function posts a send-coin transaction to the blockchain.
999
1001
  | coins | <code>string</code> | The string representing the number of coins (in ether) to send. To convert between ethers and wei, see https://docs.ethers.org/v4/api-utils.html#ether-strings-and-wei |
1000
1002
  | nonce | <code>number</code> | The nonce of the account retrieved by invoking the getAccountDetails function. You have to carefully manage state of the nonce to avoid sending the coins multiple times, such as when retrying sendCoins after a network error. |
1001
1003
 
1004
+ <a name="module_quantum-coin-js-sdk..publicKeyFromSignature"></a>
1005
+
1006
+ ### quantum-coin-js-sdk~publicKeyFromSignature(digest, signature) ⇒ <code>Array.&lt;number&gt;</code>
1007
+ The publicKeyFromSignature extracts the public key from a signature.
1008
+
1009
+ **Kind**: inner method of [<code>quantum-coin-js-sdk</code>](#module_quantum-coin-js-sdk)
1010
+ **Returns**: <code>Array.&lt;number&gt;</code> - - Returns a byte array containing the public key. Returns null if the operation failed.
1011
+
1012
+ | Param | Type | Description |
1013
+ | --- | --- | --- |
1014
+ | digest | <code>Array.&lt;number&gt;</code> | An array of bytes containing the digestHash. Should be of length 32. |
1015
+ | signature | <code>Array.&lt;number&gt;</code> | An array of bytes containing the signature. |
1016
+
1017
+ <a name="module_quantum-coin-js-sdk..publicKeyFromPrivateKey"></a>
1018
+
1019
+ ### quantum-coin-js-sdk~publicKeyFromPrivateKey(privateKey) ⇒ <code>Array.&lt;number&gt;</code>
1020
+ The publicKeyFromPrivateKey extracts the public key from a private key.
1021
+
1022
+ **Kind**: inner method of [<code>quantum-coin-js-sdk</code>](#module_quantum-coin-js-sdk)
1023
+ **Returns**: <code>Array.&lt;number&gt;</code> - - Returns a byte array containing the public key. Returns null if the operation failed.
1024
+
1025
+ | Param | Type | Description |
1026
+ | --- | --- | --- |
1027
+ | privateKey | <code>Array.&lt;number&gt;</code> | An array of bytes containing the privateKey. |
1028
+
@@ -0,0 +1,57 @@
1
+ const qcsdk = require('quantum-coin-js-sdk');
2
+ const ethers = require('ethers');
3
+
4
+ var clientConfigVal = new qcsdk.Config("https://sdk.readrelay.quantumcoinapi.com", "https://sdk.writerelay.quantumcoinapi.com", 123123, "", ""); //Mainnet
5
+
6
+ //Initialize the client configuration
7
+ //var clientConfigVal = new qcsdk.Config("https://t4-relayread.quantumcoin.org", "https://t4-relaywrite.quantumcoin.org", 310324, "", ""); //Testnet T4
8
+ //Testnet T4 Block Explorer: https://t4.scan.quantumcoin.org
9
+
10
+ //For mainnet, use the following configuration
11
+ //var clientConfigVal = new qcsdk.Config("https://sdk.readrelay.quantumcoinapi.com", "https://sdk.writerelay.quantumcoinapi.com", 123123, "", ""); //Mainnet
12
+ //Mainnet Block Explorer: https://scan.quantumcoin.org
13
+
14
+ //Local testing configuration
15
+ //var clientConfigVal = new qcsdk.Config("http://127.0.0.1:9090", "http://127.0.0.1:9091", 123123, "", ""); //local testing
16
+ //Mainnet Block Explorer: https://scan.quantumcoin.org
17
+
18
+ //Initialize the SDK
19
+ qcsdk.initialize(clientConfigVal).then((initResult) => {
20
+ if (initResult === false) {
21
+ console.error("Initialize failed");
22
+ return;
23
+ }
24
+
25
+ const digestHashBase64 = "aGkgdGhlcmVvY2tjaGFpbmJiYmJiYmJiYmJiYmJiYmI=";
26
+ const signatureBase64 = "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";
27
+
28
+ let digest = base64ToBytes(digestHashBase64);
29
+ let signature = base64ToBytes(signatureBase64);
30
+
31
+ let publicKey = qcsdk.publicKeyFromSignature(digest, signature);
32
+ console.log("publicKeyFromSignature publicKey length: " + publicKey.length);
33
+
34
+
35
+ //Open example wallet created using external wallet application such as Desktop/Web/CLI/Mobile wallet
36
+ const walletEncryptedJson = "{\"address\":\"1a846abe71c8b989e8337c55d608be81c28ab3b2e40c83eaa2a68d516049aec6\",\"crypto\":{\"cipher\":\"aes-256-ctr\",\"ciphertext\":\"ab7e620dd66cb55ac201b9c6796de92bbb06f3681b5932eabe099871f1f7d79acabe30921a39ad13bfe74f42c515734882b6723760142aa3e26e011df514a534ae47bd15d86badd9c6f17c48d4c892711d54d441ee3a0ee0e5b060f816e79c7badd13ff4c235934b1986774223ecf6e8761388969bb239c759b54c8c70e6a2e27c93a4b70129c8159f461d271ae8f3573414c78b88e4d0abfa6365ed45456636d4ed971c7a0c6b84e6f0c2621e819268b135e2bcc169a54d1847b39e6ba2ae8ec969b69f330b7db9e785ed02204d5a1185915ae5338b0f40ef2a7f4d5aaf7563d502135e57f4eb89d5ec1efa5c77e374969d6cd85be625a2ed1225d68ecdd84067bfc69adb83ecd5c6050472eca28a5a646fcdd28077165c629975bec8a79fe1457cb53389b788b25e1f8eff8b2ca326d7dfcaba3f8839225a08057c018a458891fd2caa0d2b27632cffd80f592147ccec9a10dc8a08a48fb55047bff5cf85cda39eb089096bef63842fc3686412f298a54a9e4b0bf4ad36907ba373cbd6d32e7ac494af371da5aa9d38a3463220865114c4adc5e4ac258ba9c6af9fa2ddfd1aec2e16887e4b3977c69561df8599ac9d411c9dd2a4d57f92ea4e5c02aae3f49fb3bc83e16673e6c2dbe96bb181c8dfd0f9757ade2e4ff27215a836058c5ffeab042f6f97c7c02339f76a6284680e01b4bb733690eb3347fbfcc26614b8bf755f9dfce3fea9d4e4d15b164983201732c2e87593a86bca6da6972e128490338f76ae68135888070f4e59e90db54d23834769bdbda9769213faf5357f9167a224523975a946367b68f0cec98658575609f58bfd329e420a921c06713326e4cb20a0df1d77f37e78a320a637a96c604ca3fa89e24beb42313751b8f09b14f9c14c77e4fd13fc6382505d27c771bca0d821ec7c3765acffa99d83c50140a56b0b28101c762bd682fe55cb6f23cbeb3f421d7b36021010e45ac27160dd7ead99c864a1b550c7edb1246950fe32dcc049799f9085287f0a747a6ef7a023df46a23a22f3e833bbf8d404f84344870492658256ee1dfc40fda33bb8d48fc72d4520ba9fc820c9123104a045206809037709f2a5f6723fa77d6bac5a573823d4ec3a7f1cb786a52ee2697e622e5d75962fa554d1024a6c355e21f33a63b2b72e6c4742a8b1c373aa532b40518c38c90b5373c2eb8c9d7be2a9e16047a3ee09dc9a6849deac5183ace6cfe91a9bef2ffc0a7df6ccebfd4c858c84b0e0355650d7466971e66f1e3883013e5ad1be33199b1d110b79070ac1b745ccb14cf63a08f8cca3a21c9525e626ff5f0c34746e10750fb742ad51f11f2acae3676c2111853d7250d01b77821a6ba9e04400ba2c543ca9f2d701ae6f47bfad14ffe3039ee9e71f7b2401359ade9938750ddb9c5a8b018a7929ed8d0e717ff1861446ce17535e9b17c187711190aae3388bd9490837a636c25ed4d42d7079ad1a51e13292c683d5d012abcf46965c534b83ab53f2c1f0cf5830ef7582e06863a33c19a70511df632885d63245965047ea96b56f1af5b3b94a54999f784fb9574fdfcd7c1230e07a2aaa04acd3097b2b9f8ddba05ae9734491deb5c1a513c76ed276cb78bbf4839dae3156d76af444a5805129d5df791167a9c8576a1d7f760b2d2797c4658669608706fbd0ace1be2346f74862dfc9ef518e55632e43c043186e5d070deb34d12fb9e5aba84e5cb50213dc88efd39cc35bf42455aa82d5e3b707b3140be3b8623b34fdd81d08615c188ae8438a13881fdf6bf32f2cb9ff5fa625561040c6b71d4b8eccc90bc3b99650d28dd1ee63773e49664e3d48c484996b290943635a6f2eb1ce9796d3fa144a3f00ef82faaa32d6a413668f7b521517cb68b2b017fcf56c79326fa5e4060e643631ca3f0a0dc0ed718798b6f46b130d437c33f64039e887324b6f5e604b1669d613923794edbf04b1b3caea54793b52b44b170173a4f25c7ecef3b71e2aad76e556b1cb9f1d637ec52ececfa950dd31dbb6a60828a3ad34c1beffe09eb4785786d63bad10a0b0f66ea88c57380f38ea85f018dbd7f538cf1ee7624095b9a01ec5edd528f281168af020609e651ff316aa1320a710134ddfca600cc72174dcdb846d2aa29916488aa1b537b66da92e61af526debef4eb38c984569eaf549ff2129449269b492d030cd74d885f6f5785881cc4804b4a8a09ba4ff7aefe9074ac7d0c4f05d51fe4cc0ff7388a772092b9d02d70e5433a5cf3e02f46a6bd6b818d59a07ce3b9fbbf8b5faba74563bcc5240930c2d406c9aaee3e3ce0429bf68ac2b0a57adb09414cff50817d2a48fb9fa624ab863cb0c31a8b8dc5eaf6fa68cc1d7c6c685c5a33edd5c8933b9e8ab628ee428d0743699b2ff17f25586c7ce959280bb0b8c5342251f0a30b53dbc7bf1ee426ac9619c3560f811f2268ee37f189794e2e4b3db3a2fb2e34b649e504fb467438abfd1082619cc4a0b30d66beb831077812e418d2e2148db10cf4d4a29101ca52ec445b8d83519dd7de85a98e0beae9ee537096d3f1a55a7a80cdfa93d25f07c9f98e8af18cde19ec1f99c5dd4588b717a5039ddb7f177717caf0d0fd45420a70dbd6d3146890d9e450d5224146db4c33b779e3c3a04b976c052bad042ac57dd38be45407808c0fb0d7e2a8819e6cd53c6739e6612996ddaa6f066552590aa0343bc1e62b298ff2514a0cef8be21956c2e942816f7a3a3a0935eaf9b37251409ce444c986c3817e82835555fe18239f3ae33469d7965c2bde9991fde556bd07af01df52bbde0c35bb4ef48e3b5d0db53f8ca4ed35b83f760f0a1bc4ed9f86e85d6039a17df373c85402ef956f01db00eb39c4b74bd0660d29ee746714d9780d738e05c6cca414ce3d7b40dda8036a9eea9ab1388805f913eb19bdd3f09d9e161eaa50231bd9caba61971f194332dd28c696a60458c1c6c2cc5da8b1192611c7c553e9e12fe48ce46bbb891be8bb118721c86222e671ddd1da8f0ccb2b68e02f2014b4925e904e88369aaf7466bd7033a60c265d45955944916ecbdb84bf1b522b01b0149c632e04c568a7eb627c5bb90ece052ebcf79166c28b30d23fe52da0a5ab5dea83ca479a3e3b7a9cfbbfea04dbe6137c19d067317c2ec427a8c75a6b06bec6dcd5d5c0edc9aa80b9003b8e17c088b2f3db327d3e42630d82d20120240c3ba56232280787da4aabbf5bc95a864029f00710e195f2a76460a0317d10b552fe1bea097e41d49756c680a41d6ac186e62169b6b6cd7776ea84618b5b752328a5bacaa10aa122ff9b2698b43efe73d852a899db644863c8c9bc8068ea86ea843fd6fe36272b91cdc5d5317083ef3fd1e5462a0b0d0604dc57b3bbfceb0fca4cd349625dd7b25166af30efe5ee6a0af953a74d65f4736c59918ee55a3b0d9d9d42e04c7f8a77e479109f740e20c464d5d7e3d16805f47b61f403ff7f408c9e850d9baacd8067e544536a4953480b0f9ee9cd45f41ebd67b51f78788a6470cb1e5ca72ca346ce8a50d0ca0c921d5576a4455a1afb6d0bc688004712ee122cacdb29c51e84893324c27fa4a3f1917edf5352272b4c97579a6152e4b77663d0ab532915f2eeb6a862de8b696452321b660c3f2449673d086e95a7af28845a5259b763e0fcd09f72acf7b6c811066263060e5aa5b24658e880a01fd56bda4dad5ab604e129290f7d5489728f2a40968c6168b21cebbbcd11727cc9e9160c4e92e04387d3b0d62aab06a61f26daedd9fed11816ef2180172a47f47184ac4032b88758c98a2e0fb200f70e93ba695f5ebb7a1029610ad360d3b7fa1b4640b9dc674d3625eef786da93dff19bc7991b5d6193a3896664763fde479b5dfc04812111a80782854f2cf68ca7d82765cc9eb40fba4b44640710ed6e653abf9f07b466333f4fd22784d53cf40e17120f42caa841eaa24056b237827b0f47f7257c103c35027e9f503e5acfd023e7357b600d3084d361d5ee65ba319b45c153212a54e6fed85af7e43e0a926ebcbc2edf8de7e2ec9528f00bec262ad04d5c9dafccaea06a24748d28bf1799bae0e895543084539c50b5aaa4fb50d7431d6f0c8cee2a54aaf7ee7919b55bf40adb688632e5dbe273cea09e97b19c3d8e1f4de000deb66fa1942ad03a62d3252f51992244366c156000b49c297167a6cbdedea7ebae139d295f0ad298e0864249b905b7eb812886ec70ecdb286702274b5b8574149bf3866f9e46b997ff5ed622b169a0eb071347f18d530db1663906a28f4544ee4e004ab87b65476af30ede118052ff052b8dc986ca2c93dd5d4943266a579c7698ea014f688b3e8063a107feb162d392e2177b01bff77fb5abe5feebd0607158049a5a093325b7c9ee6b4dfa7a9f65c7c2fb628920d3603a1c2dad979eaa047cd661a268af1078c9788d720e64e4ce9d12e68de1e417ef2f293323681e1071f9220e1ee43d2e29d111b870ce3439f5100ecd4551ab65ee74aa1667e564957e9bc0ae1ea193980da2a0ec2698073388c85bec25ef447f0d5e93a5203fa44dff268e5cb799ed3b66e63d5e07b487e7534f24934c73a62a243e0151843a0fd3807711a101eaa7fc71f0ba68aebb9534d57cba41b094eebfb4c31cca8eddfa426f676aa347be8a7023a4e91ddb154b35cd4d5f7dbc2e5db491de99f33fc2cff2d57029ac950e1ccd681980af6a4e8969dfe39b3c7bfcbcf8fac92f1e6ec9fe572bfa6a7d65860eab2ed10ac01a71290b52e3148e84b7376a8605cd2bb0e8681ffc54691ce087685e33921bd44d36c78291713dce17569570f62137e6904f0d68cf53aa2ec395c389a75141f08114fb293ea63950e4ffee55ec6fc83cf44876b8e7f25cdd393ff87b9eda6eb746085b61a6900de191f0ce2cb388d61ece52e78bc47368194e8e00277e0d1631e6b9d4626ef76f8522582ccd5a40be3febc699bb510acc6271d55ff0f4cf3bb7669855a72efd9ca3e1056a2fe592a5bc877cce2b1f63b58383971da87873d2d1349cf5881242cdce4e7e2c5c514755746a0e0a7c2a6d9701cde005ae3420beb17c379a3516662253554f51f0423bb1844b0b90c54ed8177ceb0e1036a6609d836e748ca06c40ca64befadc6443ec286a0ce464678e8d11eb455f7bb305acebf6cb1f50e394a9bfeb752df1687831bac9cdd811f4f112ef6658d0f8799a866374ff96c5e2b79f30e7a74f8a2bc9ed1f88f01f30e30cb78ffb2bff10108f35e910ee3be4463e9e6f0ed910e8d598326e71dfa2277ffe5579d7fe9b6018bfe295b25219eae07b3b0270665c3fa00c3e0d180812b5cd62925585de84a7c48a9a86dba96544a251654d1966e082432dc85b6149cf21e91a46020ec32b66d28ba3b6a90c0617bc6fdd55aea819af2bcf84864ad60c28fe3c9f8339d0aee68b39d97f63b6e082835d86119cf9b9fdc8b827c847ce40aa10e1577a710132316845e825345e95bdf94d0c66ec65a6c4319fce4792313663b5f7a651a6710783e6ab71608ac6cbbf3af6911adf596ccf7c172b9bd5bceb6db379967b32b143bdd11d2ee12ddf64ecef6391e0f8570e6cddd3db95204919362b89b739fa94e7c1bfde799fd5e22aa25ca6ca42e30c08e23aae2385d99ebab441072a880dcefdab74a4c9bd39d363f6d1933d59400fca161d432aa00f23b1b1c19a154be8989699d549b66d44e39896f5523443bc6ddf4a65e91f1f3fb7b52318869a05856a4fc92f3694c81ed833c972fb918f7e5\",\"cipherparams\":{\"iv\":\"8c46d6162cd4c765759aedcbce2a5874\"},\"kdf\":\"scrypt\",\"kdfparams\":{\"dklen\":32,\"n\":262144,\"p\":1,\"r\":8,\"salt\":\"82fb6cdc6917609135277badacf15baa31899d08b71a5a0fa33167167c161537\"},\"mac\":\"9187b17f7eca48e6b8c586b0cd790dbe0feb876ac8385f93faa7d5e22a3c8fc7\"},\"id\":\"92caf6ee-2d43-48c0-859e-ffa1e0e23312\",\"version\":3}";
37
+ let examplePassphrase = "QuantumCoinExample123!";
38
+ let walletExample = qcsdk.deserializeEncryptedWallet(walletEncryptedJson, examplePassphrase);
39
+ console.log("walletExample.privateKey length " + walletExample.privateKey.length);
40
+ let publicKey2 = qcsdk.publicKeyFromPrivateKey(walletExample.privateKey);
41
+ console.log("publicKeyFromPrivateKey publicKey length: " + publicKey2.length);
42
+ if (publicKey2.length !== walletExample.publicKey.length) {
43
+ throw new Error("public key length compare failed");
44
+ }
45
+ for (i = 0; i < publicKey2.length; i++) {
46
+ if (publicKey2[i] !== walletExample.publicKey[i]) {
47
+ throw new Error("public key compare failed");
48
+ }
49
+ }
50
+
51
+ });
52
+
53
+ function base64ToBytes(base64) {
54
+ const binString = atob(base64);
55
+ return Uint8Array.from(binString, (m) => m.codePointAt(0));
56
+ }
57
+
@@ -0,0 +1,70 @@
1
+ const qcsdk = require('quantum-coin-js-sdk');
2
+ const ethers = require('ethers');
3
+
4
+ var clientConfigVal = new qcsdk.Config("https://sdk.readrelay.quantumcoinapi.com", "https://sdk.writerelay.quantumcoinapi.com", 123123, "", ""); //Mainnet
5
+
6
+ //Initialize the client configuration
7
+ //var clientConfigVal = new qcsdk.Config("https://t4-relayread.quantumcoin.org", "https://t4-relaywrite.quantumcoin.org", 310324, "", ""); //Testnet T4
8
+ //Testnet T4 Block Explorer: https://t4.scan.quantumcoin.org
9
+
10
+ //For mainnet, use the following configuration
11
+ //var clientConfigVal = new qcsdk.Config("https://sdk.readrelay.quantumcoinapi.com", "https://sdk.writerelay.quantumcoinapi.com", 123123, "", ""); //Mainnet
12
+ //Mainnet Block Explorer: https://scan.quantumcoin.org
13
+
14
+ //Local testing configuration
15
+ //var clientConfigVal = new qcsdk.Config("http://127.0.0.1:9090", "http://127.0.0.1:9091", 123123, "", ""); //local testing
16
+ //Mainnet Block Explorer: https://scan.quantumcoin.org
17
+
18
+ //Initialize the SDK
19
+ qcsdk.initialize(clientConfigVal).then((initResult) => {
20
+ if (initResult === false) {
21
+ console.error("Initialize failed");
22
+ return;
23
+ }
24
+
25
+ //More examples for sending are in examples.js
26
+
27
+ //Offline sign a transaction from existing wallet. This is typically called from an offline device hosting a cold storage wallet.
28
+ //Another usecase is to first store the signed transaction in a database and then later submit it using the postTransaction function.
29
+
30
+ //Open example wallet created using external wallet application such as Desktop/Web/CLI/Mobile wallet
31
+ const walletEncryptedJson = "{\"address\":\"1a846abe71c8b989e8337c55d608be81c28ab3b2e40c83eaa2a68d516049aec6\",\"crypto\":{\"cipher\":\"aes-256-ctr\",\"ciphertext\":\"ab7e620dd66cb55ac201b9c6796de92bbb06f3681b5932eabe099871f1f7d79acabe30921a39ad13bfe74f42c515734882b6723760142aa3e26e011df514a534ae47bd15d86badd9c6f17c48d4c892711d54d441ee3a0ee0e5b060f816e79c7badd13ff4c235934b1986774223ecf6e8761388969bb239c759b54c8c70e6a2e27c93a4b70129c8159f461d271ae8f3573414c78b88e4d0abfa6365ed45456636d4ed971c7a0c6b84e6f0c2621e819268b135e2bcc169a54d1847b39e6ba2ae8ec969b69f330b7db9e785ed02204d5a1185915ae5338b0f40ef2a7f4d5aaf7563d502135e57f4eb89d5ec1efa5c77e374969d6cd85be625a2ed1225d68ecdd84067bfc69adb83ecd5c6050472eca28a5a646fcdd28077165c629975bec8a79fe1457cb53389b788b25e1f8eff8b2ca326d7dfcaba3f8839225a08057c018a458891fd2caa0d2b27632cffd80f592147ccec9a10dc8a08a48fb55047bff5cf85cda39eb089096bef63842fc3686412f298a54a9e4b0bf4ad36907ba373cbd6d32e7ac494af371da5aa9d38a3463220865114c4adc5e4ac258ba9c6af9fa2ddfd1aec2e16887e4b3977c69561df8599ac9d411c9dd2a4d57f92ea4e5c02aae3f49fb3bc83e16673e6c2dbe96bb181c8dfd0f9757ade2e4ff27215a836058c5ffeab042f6f97c7c02339f76a6284680e01b4bb733690eb3347fbfcc26614b8bf755f9dfce3fea9d4e4d15b164983201732c2e87593a86bca6da6972e128490338f76ae68135888070f4e59e90db54d23834769bdbda9769213faf5357f9167a224523975a946367b68f0cec98658575609f58bfd329e420a921c06713326e4cb20a0df1d77f37e78a320a637a96c604ca3fa89e24beb42313751b8f09b14f9c14c77e4fd13fc6382505d27c771bca0d821ec7c3765acffa99d83c50140a56b0b28101c762bd682fe55cb6f23cbeb3f421d7b36021010e45ac27160dd7ead99c864a1b550c7edb1246950fe32dcc049799f9085287f0a747a6ef7a023df46a23a22f3e833bbf8d404f84344870492658256ee1dfc40fda33bb8d48fc72d4520ba9fc820c9123104a045206809037709f2a5f6723fa77d6bac5a573823d4ec3a7f1cb786a52ee2697e622e5d75962fa554d1024a6c355e21f33a63b2b72e6c4742a8b1c373aa532b40518c38c90b5373c2eb8c9d7be2a9e16047a3ee09dc9a6849deac5183ace6cfe91a9bef2ffc0a7df6ccebfd4c858c84b0e0355650d7466971e66f1e3883013e5ad1be33199b1d110b79070ac1b745ccb14cf63a08f8cca3a21c9525e626ff5f0c34746e10750fb742ad51f11f2acae3676c2111853d7250d01b77821a6ba9e04400ba2c543ca9f2d701ae6f47bfad14ffe3039ee9e71f7b2401359ade9938750ddb9c5a8b018a7929ed8d0e717ff1861446ce17535e9b17c187711190aae3388bd9490837a636c25ed4d42d7079ad1a51e13292c683d5d012abcf46965c534b83ab53f2c1f0cf5830ef7582e06863a33c19a70511df632885d63245965047ea96b56f1af5b3b94a54999f784fb9574fdfcd7c1230e07a2aaa04acd3097b2b9f8ddba05ae9734491deb5c1a513c76ed276cb78bbf4839dae3156d76af444a5805129d5df791167a9c8576a1d7f760b2d2797c4658669608706fbd0ace1be2346f74862dfc9ef518e55632e43c043186e5d070deb34d12fb9e5aba84e5cb50213dc88efd39cc35bf42455aa82d5e3b707b3140be3b8623b34fdd81d08615c188ae8438a13881fdf6bf32f2cb9ff5fa625561040c6b71d4b8eccc90bc3b99650d28dd1ee63773e49664e3d48c484996b290943635a6f2eb1ce9796d3fa144a3f00ef82faaa32d6a413668f7b521517cb68b2b017fcf56c79326fa5e4060e643631ca3f0a0dc0ed718798b6f46b130d437c33f64039e887324b6f5e604b1669d613923794edbf04b1b3caea54793b52b44b170173a4f25c7ecef3b71e2aad76e556b1cb9f1d637ec52ececfa950dd31dbb6a60828a3ad34c1beffe09eb4785786d63bad10a0b0f66ea88c57380f38ea85f018dbd7f538cf1ee7624095b9a01ec5edd528f281168af020609e651ff316aa1320a710134ddfca600cc72174dcdb846d2aa29916488aa1b537b66da92e61af526debef4eb38c984569eaf549ff2129449269b492d030cd74d885f6f5785881cc4804b4a8a09ba4ff7aefe9074ac7d0c4f05d51fe4cc0ff7388a772092b9d02d70e5433a5cf3e02f46a6bd6b818d59a07ce3b9fbbf8b5faba74563bcc5240930c2d406c9aaee3e3ce0429bf68ac2b0a57adb09414cff50817d2a48fb9fa624ab863cb0c31a8b8dc5eaf6fa68cc1d7c6c685c5a33edd5c8933b9e8ab628ee428d0743699b2ff17f25586c7ce959280bb0b8c5342251f0a30b53dbc7bf1ee426ac9619c3560f811f2268ee37f189794e2e4b3db3a2fb2e34b649e504fb467438abfd1082619cc4a0b30d66beb831077812e418d2e2148db10cf4d4a29101ca52ec445b8d83519dd7de85a98e0beae9ee537096d3f1a55a7a80cdfa93d25f07c9f98e8af18cde19ec1f99c5dd4588b717a5039ddb7f177717caf0d0fd45420a70dbd6d3146890d9e450d5224146db4c33b779e3c3a04b976c052bad042ac57dd38be45407808c0fb0d7e2a8819e6cd53c6739e6612996ddaa6f066552590aa0343bc1e62b298ff2514a0cef8be21956c2e942816f7a3a3a0935eaf9b37251409ce444c986c3817e82835555fe18239f3ae33469d7965c2bde9991fde556bd07af01df52bbde0c35bb4ef48e3b5d0db53f8ca4ed35b83f760f0a1bc4ed9f86e85d6039a17df373c85402ef956f01db00eb39c4b74bd0660d29ee746714d9780d738e05c6cca414ce3d7b40dda8036a9eea9ab1388805f913eb19bdd3f09d9e161eaa50231bd9caba61971f194332dd28c696a60458c1c6c2cc5da8b1192611c7c553e9e12fe48ce46bbb891be8bb118721c86222e671ddd1da8f0ccb2b68e02f2014b4925e904e88369aaf7466bd7033a60c265d45955944916ecbdb84bf1b522b01b0149c632e04c568a7eb627c5bb90ece052ebcf79166c28b30d23fe52da0a5ab5dea83ca479a3e3b7a9cfbbfea04dbe6137c19d067317c2ec427a8c75a6b06bec6dcd5d5c0edc9aa80b9003b8e17c088b2f3db327d3e42630d82d20120240c3ba56232280787da4aabbf5bc95a864029f00710e195f2a76460a0317d10b552fe1bea097e41d49756c680a41d6ac186e62169b6b6cd7776ea84618b5b752328a5bacaa10aa122ff9b2698b43efe73d852a899db644863c8c9bc8068ea86ea843fd6fe36272b91cdc5d5317083ef3fd1e5462a0b0d0604dc57b3bbfceb0fca4cd349625dd7b25166af30efe5ee6a0af953a74d65f4736c59918ee55a3b0d9d9d42e04c7f8a77e479109f740e20c464d5d7e3d16805f47b61f403ff7f408c9e850d9baacd8067e544536a4953480b0f9ee9cd45f41ebd67b51f78788a6470cb1e5ca72ca346ce8a50d0ca0c921d5576a4455a1afb6d0bc688004712ee122cacdb29c51e84893324c27fa4a3f1917edf5352272b4c97579a6152e4b77663d0ab532915f2eeb6a862de8b696452321b660c3f2449673d086e95a7af28845a5259b763e0fcd09f72acf7b6c811066263060e5aa5b24658e880a01fd56bda4dad5ab604e129290f7d5489728f2a40968c6168b21cebbbcd11727cc9e9160c4e92e04387d3b0d62aab06a61f26daedd9fed11816ef2180172a47f47184ac4032b88758c98a2e0fb200f70e93ba695f5ebb7a1029610ad360d3b7fa1b4640b9dc674d3625eef786da93dff19bc7991b5d6193a3896664763fde479b5dfc04812111a80782854f2cf68ca7d82765cc9eb40fba4b44640710ed6e653abf9f07b466333f4fd22784d53cf40e17120f42caa841eaa24056b237827b0f47f7257c103c35027e9f503e5acfd023e7357b600d3084d361d5ee65ba319b45c153212a54e6fed85af7e43e0a926ebcbc2edf8de7e2ec9528f00bec262ad04d5c9dafccaea06a24748d28bf1799bae0e895543084539c50b5aaa4fb50d7431d6f0c8cee2a54aaf7ee7919b55bf40adb688632e5dbe273cea09e97b19c3d8e1f4de000deb66fa1942ad03a62d3252f51992244366c156000b49c297167a6cbdedea7ebae139d295f0ad298e0864249b905b7eb812886ec70ecdb286702274b5b8574149bf3866f9e46b997ff5ed622b169a0eb071347f18d530db1663906a28f4544ee4e004ab87b65476af30ede118052ff052b8dc986ca2c93dd5d4943266a579c7698ea014f688b3e8063a107feb162d392e2177b01bff77fb5abe5feebd0607158049a5a093325b7c9ee6b4dfa7a9f65c7c2fb628920d3603a1c2dad979eaa047cd661a268af1078c9788d720e64e4ce9d12e68de1e417ef2f293323681e1071f9220e1ee43d2e29d111b870ce3439f5100ecd4551ab65ee74aa1667e564957e9bc0ae1ea193980da2a0ec2698073388c85bec25ef447f0d5e93a5203fa44dff268e5cb799ed3b66e63d5e07b487e7534f24934c73a62a243e0151843a0fd3807711a101eaa7fc71f0ba68aebb9534d57cba41b094eebfb4c31cca8eddfa426f676aa347be8a7023a4e91ddb154b35cd4d5f7dbc2e5db491de99f33fc2cff2d57029ac950e1ccd681980af6a4e8969dfe39b3c7bfcbcf8fac92f1e6ec9fe572bfa6a7d65860eab2ed10ac01a71290b52e3148e84b7376a8605cd2bb0e8681ffc54691ce087685e33921bd44d36c78291713dce17569570f62137e6904f0d68cf53aa2ec395c389a75141f08114fb293ea63950e4ffee55ec6fc83cf44876b8e7f25cdd393ff87b9eda6eb746085b61a6900de191f0ce2cb388d61ece52e78bc47368194e8e00277e0d1631e6b9d4626ef76f8522582ccd5a40be3febc699bb510acc6271d55ff0f4cf3bb7669855a72efd9ca3e1056a2fe592a5bc877cce2b1f63b58383971da87873d2d1349cf5881242cdce4e7e2c5c514755746a0e0a7c2a6d9701cde005ae3420beb17c379a3516662253554f51f0423bb1844b0b90c54ed8177ceb0e1036a6609d836e748ca06c40ca64befadc6443ec286a0ce464678e8d11eb455f7bb305acebf6cb1f50e394a9bfeb752df1687831bac9cdd811f4f112ef6658d0f8799a866374ff96c5e2b79f30e7a74f8a2bc9ed1f88f01f30e30cb78ffb2bff10108f35e910ee3be4463e9e6f0ed910e8d598326e71dfa2277ffe5579d7fe9b6018bfe295b25219eae07b3b0270665c3fa00c3e0d180812b5cd62925585de84a7c48a9a86dba96544a251654d1966e082432dc85b6149cf21e91a46020ec32b66d28ba3b6a90c0617bc6fdd55aea819af2bcf84864ad60c28fe3c9f8339d0aee68b39d97f63b6e082835d86119cf9b9fdc8b827c847ce40aa10e1577a710132316845e825345e95bdf94d0c66ec65a6c4319fce4792313663b5f7a651a6710783e6ab71608ac6cbbf3af6911adf596ccf7c172b9bd5bceb6db379967b32b143bdd11d2ee12ddf64ecef6391e0f8570e6cddd3db95204919362b89b739fa94e7c1bfde799fd5e22aa25ca6ca42e30c08e23aae2385d99ebab441072a880dcefdab74a4c9bd39d363f6d1933d59400fca161d432aa00f23b1b1c19a154be8989699d549b66d44e39896f5523443bc6ddf4a65e91f1f3fb7b52318869a05856a4fc92f3694c81ed833c972fb918f7e5\",\"cipherparams\":{\"iv\":\"8c46d6162cd4c765759aedcbce2a5874\"},\"kdf\":\"scrypt\",\"kdfparams\":{\"dklen\":32,\"n\":262144,\"p\":1,\"r\":8,\"salt\":\"82fb6cdc6917609135277badacf15baa31899d08b71a5a0fa33167167c161537\"},\"mac\":\"9187b17f7eca48e6b8c586b0cd790dbe0feb876ac8385f93faa7d5e22a3c8fc7\"},\"id\":\"92caf6ee-2d43-48c0-859e-ffa1e0e23312\",\"version\":3}";
32
+ let examplePassphrase = "QuantumCoinExample123!";
33
+ let walletExample = qcsdk.deserializeEncryptedWallet(walletEncryptedJson, examplePassphrase);
34
+
35
+ var toAddressExample = "0x8293cd9b6ac502d2fe077b0c157dad39f36a5e546525b053151dced633634612";
36
+ var nonceExample = 0; //use the latest nonce for the address as shown in Block Explorer. If address does not exist, default to 0. You may also get the nonce programatically from qcsdk.getAccountDetails like shown below
37
+ /*
38
+ qcsdk.getAccountDetails(address).then((accountDetailsResult) => {
39
+ var nonceExample = accountDetailsResult.accountDetails.nonce;
40
+ }
41
+ */
42
+ var coinsExample = "10"; //in ethers and not in wei
43
+
44
+ //Sign a transaction
45
+ qcsdk.signSendCoinTransaction(walletExample, toAddressExample, coinsExample, nonceExample).then((signResult) => {
46
+ console.log("signSendCoinTransaction resultCode: " + signResult.resultCode);
47
+ console.log("signSendCoinTransaction hash: " + signResult.txnHash);
48
+ console.log("signSendCoinTransaction txnData: " + signResult.txnData); //txnData is to be sent to postTransaction
49
+
50
+ //Send a transaction that was signed offline
51
+ qcsdk.postTransaction(signResult.txnData).then((sendResult) => {
52
+ if (sendResult === null) {
53
+ console.error(" postTransaction failed : sendResult is null");
54
+ return;
55
+ }
56
+
57
+ if (sendResult.resultCode !== 0) {
58
+ console.log(" postTransaction failed. resultCode is " + sendResult.resultCode + " , requestId is " + sendResult.requestId);
59
+ if (sendResult.response !== null) {
60
+ console.log(" postTransaction response statusText " + JSON.stringify(sendResult.response.statusText));
61
+ console.log(" postTransaction ensure account has adequate gas and nonce is correct");
62
+ }
63
+ return;
64
+ }
65
+
66
+ console.log(" postTransaction succeeded. This does not necessarily mean that the transaction has succeded. txnHash " + signResult.txnHash);
67
+ });
68
+ });
69
+ });
70
+
@@ -74,7 +74,7 @@ qcsdk.initialize(clientConfigVal).then((initResult) => {
74
74
  });
75
75
 
76
76
  //Get the transaction details
77
- let txnHash = "0x710cc145eea254c3db9857b42f0b576f4159ac48a23bfc0c480c341e90a40376"; //Just an example transaction hash https://t4.scan.quantumcoin.org/txn/0x710cc145eea254c3db9857b42f0b576f4159ac48a23bfc0c480c341e90a40376
77
+ let txnHash = "0xe6fbabc178adaaab6b9dbda086de53deaced1d6fe40e7db9539fe9e85695d1be"; //Just an example transaction hash https://quantumscan.com/txn/0xe6fbabc178adaaab6b9dbda086de53deaced1d6fe40e7db9539fe9e85695d1be
78
78
 
79
79
  console.log("getTransactionDetails " + txnHash);
80
80
  qcsdk.getTransactionDetails(txnHash).then((transactionDetailsResult) => {
@@ -10,7 +10,7 @@
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "ethers": "^6.13.4",
13
- "quantum-coin-js-sdk": "^1.0.15"
13
+ "quantum-coin-js-sdk": "^1.0.17"
14
14
  }
15
15
  },
16
16
  "node_modules/@adraffy/ens-normalize": {
@@ -87,9 +87,9 @@
87
87
  }
88
88
  },
89
89
  "node_modules/quantum-coin-js-sdk": {
90
- "version": "1.0.16",
91
- "resolved": "https://registry.npmjs.org/quantum-coin-js-sdk/-/quantum-coin-js-sdk-1.0.16.tgz",
92
- "integrity": "sha512-g8wll8GqEmk1lm9t1UFJTs5NDmpr8PPsHfDtakfrcKdaJTk6FFK6GMTn9HOO7ZzuX1RkBe+lrvNQtRpIb6VdNg==",
90
+ "version": "1.0.17",
91
+ "resolved": "https://registry.npmjs.org/quantum-coin-js-sdk/-/quantum-coin-js-sdk-1.0.17.tgz",
92
+ "integrity": "sha512-PhpNkNDXOmBHOyyakeUUsj8rBnJ/Tr3ZXmpgd6M8n7qvo1vsoiuBjSWEIJR2YvsIiPOpRCIJqq8E59sCJ9+1Zg==",
93
93
  "license": "MIT",
94
94
  "dependencies": {
95
95
  "quantum-coin-pqc-js-sdk": "^1.0.0",
@@ -97,15 +97,15 @@
97
97
  }
98
98
  },
99
99
  "node_modules/quantum-coin-pqc-js-sdk": {
100
- "version": "1.0.1",
101
- "resolved": "https://registry.npmjs.org/quantum-coin-pqc-js-sdk/-/quantum-coin-pqc-js-sdk-1.0.1.tgz",
102
- "integrity": "sha512-d837t+/wVt8SN6xp3RMAkHvClgrwo2VV254eIsz6do2HD1GmzXCH+vts9S4jILHo7wK0ro7SHRwzZLR9AEhOIw==",
100
+ "version": "1.0.5",
101
+ "resolved": "https://registry.npmjs.org/quantum-coin-pqc-js-sdk/-/quantum-coin-pqc-js-sdk-1.0.5.tgz",
102
+ "integrity": "sha512-9P1YDkca5CqrO7++TnGJZzPvYlBjYARopHgxYbDcEHgPicP7+tA8zD+DE1BooHp7sLEWF9ObklMj6AdaDUjDVw==",
103
103
  "license": "MIT"
104
104
  },
105
105
  "node_modules/seed-words": {
106
- "version": "1.0.1",
107
- "resolved": "https://registry.npmjs.org/seed-words/-/seed-words-1.0.1.tgz",
108
- "integrity": "sha512-wq9DqfEGXzvIdTatznyQo/9+SN8tM/FNV4H0sAPc6XcOSYdI3YhIL035OYwTld1m1Cn2vnMtNBQv1mBTaU1Qjg==",
106
+ "version": "1.0.2",
107
+ "resolved": "https://registry.npmjs.org/seed-words/-/seed-words-1.0.2.tgz",
108
+ "integrity": "sha512-ia58deuPjcR8DpJ8uIgZ7gqDnIWD8vnjb4jX/sEsIDcuQaH/AJj9J8L3DXkUHfUGqAq9Y6pVMuG90t3XUJH90g==",
109
109
  "license": "MIT"
110
110
  },
111
111
  "node_modules/tslib": {
@@ -10,6 +10,6 @@
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "ethers": "^6.13.4",
13
- "quantum-coin-js-sdk": "^1.0.15"
13
+ "quantum-coin-js-sdk": "^1.0.17"
14
14
  }
15
15
  }
package/index.d.ts CHANGED
@@ -217,16 +217,16 @@ export class Wallet {
217
217
  public address: string;
218
218
  /**
219
219
  * Private Key byte array of the wallet. Is 4064 bytes in length (if the wallet is valid).
220
- * @type {{number[]}
220
+ * @type {number[]}
221
221
  * @public
222
222
  */
223
- public privateKey: {};
223
+ public privateKey: number[];
224
224
  /**
225
225
  * Public Key byte array of the wallet. Is 1408 bytes in length (if the wallet is valid).
226
- * @type {{number[]}
226
+ * @type {number[]}
227
227
  * @public
228
228
  */
229
- public publicKey: {};
229
+ public publicKey: number[];
230
230
  }
231
231
  /**
232
232
  * @class
@@ -669,6 +669,23 @@ export function newWalletSeed(): any[];
669
669
  * @return {Wallet} Returns a Wallet object. Returns null if the operation failed.
670
670
  */
671
671
  export function openWalletFromSeedWords(seedWordList: any[]): Wallet;
672
+ /**
673
+ * The publicKeyFromSignature extracts the public key from a signature.
674
+ *
675
+ * @function publicKeyFromSignature
676
+ * @param {number[]} digest - An array of bytes containing the digestHash. Should be of length 32.
677
+ * @param {number[]} signature - An array of bytes containing the signature.
678
+ * @return {number[]} - Returns a byte array containing the public key. Returns null if the operation failed.
679
+ */
680
+ export function publicKeyFromSignature(digest: number[], signature: number[]): number[];
681
+ /**
682
+ * The publicKeyFromPrivateKey extracts the public key from a private key.
683
+ *
684
+ * @function publicKeyFromPrivateKey
685
+ * @param {number[]} privateKey - An array of bytes containing the privateKey.
686
+ * @return {number[]} - Returns a byte array containing the public key. Returns null if the operation failed.
687
+ */
688
+ export function publicKeyFromPrivateKey(privateKey: number[]): number[];
672
689
  /**
673
690
  * @class
674
691
  * @constructor