@alephium/web3 0.2.0-rc.3 → 0.2.0-rc.31

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.
Files changed (125) hide show
  1. package/.eslintignore +2 -2
  2. package/README.md +2 -135
  3. package/dist/alephium-web3.min.js +1 -1
  4. package/dist/alephium-web3.min.js.LICENSE.txt +0 -17
  5. package/dist/alephium-web3.min.js.map +1 -1
  6. package/dist/src/api/api-alephium.d.ts +117 -17
  7. package/dist/src/api/api-alephium.js +145 -79
  8. package/dist/src/api/api-explorer.d.ts +163 -48
  9. package/dist/src/api/api-explorer.js +157 -34
  10. package/dist/src/api/index.d.ts +14 -2
  11. package/dist/src/api/index.js +46 -4
  12. package/dist/src/api/types.d.ts +23 -0
  13. package/dist/src/api/types.js +240 -0
  14. package/dist/src/api/utils.d.ts +6 -0
  15. package/dist/{scripts/rename-gitignore.js → src/api/utils.js} +11 -6
  16. package/dist/src/contract/contract.d.ts +110 -73
  17. package/dist/src/contract/contract.js +395 -451
  18. package/dist/src/contract/events.d.ts +4 -4
  19. package/dist/src/contract/events.js +2 -1
  20. package/dist/src/contract/index.js +5 -1
  21. package/dist/src/contract/ralph.d.ts +5 -4
  22. package/dist/src/contract/ralph.js +27 -1
  23. package/dist/src/global.d.ts +4 -0
  24. package/dist/{scripts/stop-devnet.js → src/global.js} +17 -11
  25. package/dist/src/index.d.ts +2 -0
  26. package/dist/src/index.js +23 -1
  27. package/dist/src/signer/index.d.ts +0 -1
  28. package/dist/src/signer/index.js +5 -2
  29. package/dist/src/signer/signer.d.ts +35 -28
  30. package/dist/src/signer/signer.js +79 -47
  31. package/dist/src/transaction/index.d.ts +0 -1
  32. package/dist/src/transaction/index.js +5 -2
  33. package/dist/src/transaction/status.d.ts +2 -1
  34. package/dist/src/transaction/status.js +2 -1
  35. package/dist/src/utils/bs58.d.ts +1 -0
  36. package/dist/src/utils/bs58.js +13 -1
  37. package/dist/src/utils/index.d.ts +0 -1
  38. package/dist/src/utils/index.js +5 -2
  39. package/dist/src/utils/subscription.d.ts +0 -3
  40. package/dist/src/utils/subscription.js +0 -1
  41. package/dist/src/utils/utils.d.ts +4 -9
  42. package/dist/src/utils/utils.js +20 -24
  43. package/jest-config.json +11 -0
  44. package/package.json +11 -47
  45. package/src/api/api-alephium.ts +169 -25
  46. package/src/api/api-explorer.ts +234 -51
  47. package/src/api/index.ts +53 -3
  48. package/src/api/types.ts +233 -0
  49. package/{scripts/rename-gitignore.js → src/api/utils.ts} +7 -6
  50. package/src/contract/contract.ts +582 -550
  51. package/src/contract/events.ts +6 -5
  52. package/src/contract/ralph.ts +29 -4
  53. package/src/{transaction/sign-verify.ts → global.ts} +14 -15
  54. package/src/index.ts +7 -0
  55. package/src/signer/index.ts +0 -1
  56. package/src/signer/signer.ts +122 -85
  57. package/src/transaction/index.ts +0 -1
  58. package/src/transaction/status.ts +5 -2
  59. package/src/utils/bs58.ts +11 -0
  60. package/src/utils/index.ts +0 -1
  61. package/src/utils/subscription.ts +0 -4
  62. package/src/utils/utils.ts +11 -19
  63. package/.eslintrc.json +0 -21
  64. package/LICENSE +0 -165
  65. package/contracts/add/add.ral +0 -16
  66. package/contracts/greeter/greeter.ral +0 -7
  67. package/contracts/greeter/greeter_interface.ral +0 -3
  68. package/contracts/greeter_main.ral +0 -9
  69. package/contracts/main.ral +0 -6
  70. package/contracts/sub/sub.ral +0 -9
  71. package/contracts/test/metadata.ral +0 -17
  72. package/contracts/test/warnings.ral +0 -5
  73. package/dev/user.conf +0 -29
  74. package/dist/scripts/create-project.d.ts +0 -2
  75. package/dist/scripts/create-project.js +0 -125
  76. package/dist/scripts/rename-gitignore.d.ts +0 -1
  77. package/dist/scripts/start-devnet.d.ts +0 -1
  78. package/dist/scripts/start-devnet.js +0 -131
  79. package/dist/scripts/stop-devnet.d.ts +0 -1
  80. package/dist/src/signer/node-wallet.d.ts +0 -13
  81. package/dist/src/signer/node-wallet.js +0 -60
  82. package/dist/src/test/index.d.ts +0 -7
  83. package/dist/src/test/index.js +0 -41
  84. package/dist/src/test/privatekey-wallet.d.ts +0 -12
  85. package/dist/src/test/privatekey-wallet.js +0 -68
  86. package/dist/src/transaction/sign-verify.d.ts +0 -2
  87. package/dist/src/transaction/sign-verify.js +0 -58
  88. package/dist/src/utils/password-crypto.d.ts +0 -2
  89. package/dist/src/utils/password-crypto.js +0 -69
  90. package/gitignore +0 -10
  91. package/scripts/create-project.ts +0 -137
  92. package/scripts/start-devnet.js +0 -141
  93. package/scripts/stop-devnet.js +0 -32
  94. package/src/contract/ralph.test.ts +0 -178
  95. package/src/fixtures/address.json +0 -36
  96. package/src/fixtures/balance.json +0 -9
  97. package/src/fixtures/self-clique.json +0 -19
  98. package/src/fixtures/transaction.json +0 -13
  99. package/src/fixtures/transactions.json +0 -179
  100. package/src/signer/fixtures/genesis.json +0 -26
  101. package/src/signer/fixtures/wallets.json +0 -26
  102. package/src/signer/node-wallet.ts +0 -74
  103. package/src/test/index.ts +0 -32
  104. package/src/test/privatekey-wallet.ts +0 -58
  105. package/src/transaction/sign-verify.test.ts +0 -50
  106. package/src/utils/address.test.ts +0 -47
  107. package/src/utils/djb2.test.ts +0 -35
  108. package/src/utils/password-crypto.test.ts +0 -27
  109. package/src/utils/password-crypto.ts +0 -77
  110. package/src/utils/utils.test.ts +0 -161
  111. package/templates/base/README.md +0 -34
  112. package/templates/base/package.json +0 -35
  113. package/templates/base/src/greeter.ts +0 -41
  114. package/templates/base/tsconfig.json +0 -19
  115. package/templates/react/README.md +0 -34
  116. package/templates/react/config-overrides.js +0 -18
  117. package/templates/react/package.json +0 -66
  118. package/templates/react/src/App.tsx +0 -42
  119. package/templates/react/src/artifacts/greeter.ral.json +0 -26
  120. package/templates/react/src/artifacts/greeter_main.ral.json +0 -22
  121. package/templates/shared/.eslintrc.json +0 -12
  122. package/templates/shared/scripts/header.js +0 -0
  123. package/test/contract.test.ts +0 -197
  124. package/test/events.test.ts +0 -138
  125. package/test/transaction.test.ts +0 -72
@@ -1,11 +1,11 @@
1
- import { ContractEvent } from '../api/api-alephium';
1
+ import { node } from '../api';
2
2
  import { Subscription, SubscribeOptions } from '../utils';
3
- export declare class EventSubscription extends Subscription<ContractEvent> {
3
+ export declare class EventSubscription extends Subscription<node.ContractEvent> {
4
4
  readonly contractAddress: string;
5
5
  private fromCount;
6
- constructor(options: SubscribeOptions<ContractEvent>, contractAddress: string, fromCount?: number);
6
+ constructor(options: SubscribeOptions<node.ContractEvent>, contractAddress: string, fromCount?: number);
7
7
  startPolling(): void;
8
8
  currentEventCount(): number;
9
9
  polling(): Promise<void>;
10
10
  }
11
- export declare function subscribeToEvents(options: SubscribeOptions<ContractEvent>, contractAddress: string, fromCount?: number): EventSubscription;
11
+ export declare function subscribeToEvents(options: SubscribeOptions<node.ContractEvent>, contractAddress: string, fromCount?: number): EventSubscription;
@@ -18,6 +18,7 @@ along with the library. If not, see <http://www.gnu.org/licenses/>.
18
18
  */
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
20
  exports.subscribeToEvents = exports.EventSubscription = void 0;
21
+ const __1 = require("..");
21
22
  const utils_1 = require("../utils");
22
23
  class EventSubscription extends utils_1.Subscription {
23
24
  constructor(options, contractAddress, fromCount) {
@@ -37,7 +38,7 @@ class EventSubscription extends utils_1.Subscription {
37
38
  }
38
39
  async polling() {
39
40
  try {
40
- const events = await this.provider.events.getEventsContractContractaddress(this.contractAddress, {
41
+ const events = await __1.web3.getCurrentNodeProvider().events.getEventsContractContractaddress(this.contractAddress, {
41
42
  start: this.fromCount
42
43
  });
43
44
  if (this.cancelled) {
@@ -18,7 +18,11 @@ along with the library. If not, see <http://www.gnu.org/licenses/>.
18
18
  */
19
19
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
20
  if (k2 === undefined) k2 = k;
21
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
22
26
  }) : (function(o, m, k, k2) {
23
27
  if (k2 === undefined) k2 = k;
24
28
  o[k2] = m[k];
@@ -1,5 +1,5 @@
1
- import { node } from '../api';
2
- import { Fields, Val } from './contract';
1
+ import { Val } from '../api';
2
+ import { Fields, FieldsSig } from './contract';
3
3
  export declare function encodeBool(bool: boolean): Uint8Array;
4
4
  export declare function encodeI256(i256: bigint): Uint8Array;
5
5
  export declare function encodeU256(u256: bigint): Uint8Array;
@@ -7,6 +7,7 @@ export declare function encodeByteVec(bytes: string): Uint8Array;
7
7
  export declare function encodeAddress(address: string): Uint8Array;
8
8
  export declare function encodeScriptFieldAsString(tpe: string, value: Val): string;
9
9
  export declare function encodeScriptField(tpe: string, value: Val): Uint8Array;
10
- export declare function buildScriptByteCode(bytecodeTemplate: string, fields: Fields, fieldsSig: node.FieldsSig): string;
11
- export declare function buildContractByteCode(bytecode: string, fields: Fields, fieldsSig: node.FieldsSig): string;
10
+ export declare function buildScriptByteCode(bytecodeTemplate: string, fields: Fields, fieldsSig: FieldsSig): string;
11
+ export declare function buildContractByteCode(bytecode: string, fields: Fields, fieldsSig: FieldsSig): string;
12
12
  export declare function encodeContractField(tpe: string, value: Val): Uint8Array[];
13
+ export declare function buildDebugBytecode(bytecode: string, bytecodePatch: string): string;
@@ -18,7 +18,7 @@ along with the library. If not, see <http://www.gnu.org/licenses/>.
18
18
  */
19
19
  var _a;
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.encodeContractField = exports.buildContractByteCode = exports.buildScriptByteCode = exports.encodeScriptField = exports.encodeScriptFieldAsString = exports.encodeAddress = exports.encodeByteVec = exports.encodeU256 = exports.encodeI256 = exports.encodeBool = void 0;
21
+ exports.buildDebugBytecode = exports.encodeContractField = exports.buildContractByteCode = exports.buildScriptByteCode = exports.encodeScriptField = exports.encodeScriptFieldAsString = exports.encodeAddress = exports.encodeByteVec = exports.encodeU256 = exports.encodeI256 = exports.encodeBool = void 0;
22
22
  const buffer_1 = require("buffer/");
23
23
  const utils_1 = require("../utils");
24
24
  const bigIntZero = BigInt(0);
@@ -343,6 +343,32 @@ exports.encodeContractField = encodeContractField;
343
343
  function invalidVal(tpe, value) {
344
344
  return Error(`Invalid API value ${value} for type ${tpe}`);
345
345
  }
346
+ function buildDebugBytecode(bytecode, bytecodePatch) {
347
+ if (bytecodePatch === '') {
348
+ return bytecode;
349
+ }
350
+ const pattern = /[=+-][0-9a-f]*/g;
351
+ let result = '';
352
+ let index = 0;
353
+ for (const parts of bytecodePatch.matchAll(pattern)) {
354
+ const part = parts[0];
355
+ const diffType = part[0];
356
+ if (diffType === '=') {
357
+ const length = parseInt(part.substring(1));
358
+ result = result + bytecode.slice(index, index + length);
359
+ index = index + length;
360
+ }
361
+ else if (diffType === '+') {
362
+ result = result + part.substring(1);
363
+ }
364
+ else {
365
+ const length = parseInt(part.substring(1));
366
+ index = index + length;
367
+ }
368
+ }
369
+ return result;
370
+ }
371
+ exports.buildDebugBytecode = buildDebugBytecode;
346
372
  // export function buildContractByteCode(
347
373
  // compiled: node.TemplateContractByteCode,
348
374
  // templateVariables: TemplateVariables
@@ -0,0 +1,4 @@
1
+ import { NodeProvider } from './api';
2
+ export declare function setCurrentNodeProvider(provider: NodeProvider): void;
3
+ export declare function setCurrentNodeProvider(baseUrl: string, apiKey?: string): void;
4
+ export declare function getCurrentNodeProvider(): NodeProvider;
@@ -16,17 +16,23 @@ GNU Lesser General Public License for more details.
16
16
  You should have received a copy of the GNU Lesser General Public License
17
17
  along with the library. If not, see <http://www.gnu.org/licenses/>.
18
18
  */
19
- const fs = require('fs');
20
- const process = require('process');
21
- const path = require('path');
22
- const pidFile = process.cwd() + path.sep + 'dev' + path.sep + 'alephium.pid';
23
- try {
24
- const pid = parseInt(fs.readFileSync(pidFile).toString());
25
- if (pid) {
26
- console.log(`Stopping the running devnet: ${pid}`);
27
- process.kill(pid);
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.getCurrentNodeProvider = exports.setCurrentNodeProvider = void 0;
21
+ const api_1 = require("./api");
22
+ let _currentNodeProvider = undefined;
23
+ function setCurrentNodeProvider(provider, apiKey) {
24
+ if (typeof provider == 'string') {
25
+ _currentNodeProvider = new api_1.NodeProvider(provider, apiKey);
26
+ }
27
+ else {
28
+ _currentNodeProvider = provider;
28
29
  }
29
30
  }
30
- catch (e) {
31
- console.log(`Error in stopping the running devnet: ${e}`);
31
+ exports.setCurrentNodeProvider = setCurrentNodeProvider;
32
+ function getCurrentNodeProvider() {
33
+ if (typeof _currentNodeProvider === 'undefined') {
34
+ throw Error('No node provider is set.');
35
+ }
36
+ return _currentNodeProvider;
32
37
  }
38
+ exports.getCurrentNodeProvider = getCurrentNodeProvider;
@@ -4,3 +4,5 @@ export * from './signer';
4
4
  export * from './utils';
5
5
  export * from './transaction';
6
6
  export * from './constants';
7
+ export * as web3 from './global';
8
+ export * as utils from './utils';
package/dist/src/index.js CHANGED
@@ -18,18 +18,40 @@ along with the library. If not, see <http://www.gnu.org/licenses/>.
18
18
  */
19
19
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
20
  if (k2 === undefined) k2 = k;
21
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
22
26
  }) : (function(o, m, k, k2) {
23
27
  if (k2 === undefined) k2 = k;
24
28
  o[k2] = m[k];
25
29
  }));
30
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
31
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
32
+ }) : function(o, v) {
33
+ o["default"] = v;
34
+ });
26
35
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
27
36
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
28
37
  };
38
+ var __importStar = (this && this.__importStar) || function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
29
45
  Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.utils = exports.web3 = void 0;
47
+ BigInt.prototype['toJSON'] = function () {
48
+ return this.toString();
49
+ };
30
50
  __exportStar(require("./api"), exports);
31
51
  __exportStar(require("./contract"), exports);
32
52
  __exportStar(require("./signer"), exports);
33
53
  __exportStar(require("./utils"), exports);
34
54
  __exportStar(require("./transaction"), exports);
35
55
  __exportStar(require("./constants"), exports);
56
+ exports.web3 = __importStar(require("./global"));
57
+ exports.utils = __importStar(require("./utils"));
@@ -1,2 +1 @@
1
1
  export * from './signer';
2
- export * from './node-wallet';
@@ -18,7 +18,11 @@ along with the library. If not, see <http://www.gnu.org/licenses/>.
18
18
  */
19
19
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
20
  if (k2 === undefined) k2 = k;
21
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
22
26
  }) : (function(o, m, k, k2) {
23
27
  if (k2 === undefined) k2 = k;
24
28
  o[k2] = m[k];
@@ -28,4 +32,3 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
28
32
  };
29
33
  Object.defineProperty(exports, "__esModule", { value: true });
30
34
  __exportStar(require("./signer"), exports);
31
- __exportStar(require("./node-wallet"), exports);
@@ -1,6 +1,6 @@
1
- import { NodeProvider } from '../api';
1
+ import { NodeProvider, Number256, Token } from '../api';
2
2
  import { node } from '../api';
3
- import { Token } from '../api/api-alephium';
3
+ export declare type OutputRef = node.OutputRef;
4
4
  export interface SignResult {
5
5
  fromGroup: number;
6
6
  toGroup: number;
@@ -13,9 +13,6 @@ export interface Account {
13
13
  group: number;
14
14
  publicKey: string;
15
15
  }
16
- export declare type SubmitTx = {
17
- submitTx?: boolean;
18
- };
19
16
  export declare type SignerAddress = {
20
17
  signerAddress: string;
21
18
  };
@@ -23,11 +20,10 @@ export declare type GetAccountsParams = undefined;
23
20
  export declare type GetAccountsResult = Account[];
24
21
  export interface SignTransferTxParams {
25
22
  signerAddress: string;
26
- destinations: node.Destination[];
27
- utxos?: node.OutputRef[];
23
+ destinations: Destination[];
24
+ utxos?: OutputRef[];
28
25
  gasAmount?: number;
29
- gasPrice?: string;
30
- submitTx?: boolean;
26
+ gasPrice?: Number256;
31
27
  }
32
28
  export interface SignTransferTxResult {
33
29
  fromGroup: number;
@@ -39,12 +35,11 @@ export interface SignTransferTxResult {
39
35
  export interface SignDeployContractTxParams {
40
36
  signerAddress: string;
41
37
  bytecode: string;
42
- initialAttoAlphAmount?: string;
38
+ initialAttoAlphAmount?: Number256;
43
39
  initialTokenAmounts?: Token[];
44
- issueTokenAmount?: string;
40
+ issueTokenAmount?: Number256;
45
41
  gasAmount?: number;
46
- gasPrice?: string;
47
- submitTx?: boolean;
42
+ gasPrice?: Number256;
48
43
  }
49
44
  export interface SignDeployContractTxResult {
50
45
  fromGroup: number;
@@ -59,10 +54,9 @@ export interface SignExecuteScriptTxParams {
59
54
  signerAddress: string;
60
55
  bytecode: string;
61
56
  attoAlphAmount?: string;
62
- tokens?: node.Token[];
57
+ tokens?: Token[];
63
58
  gasAmount?: number;
64
59
  gasPrice?: string;
65
- submitTx?: boolean;
66
60
  }
67
61
  export interface SignExecuteScriptTxResult {
68
62
  fromGroup: number;
@@ -74,7 +68,6 @@ export interface SignExecuteScriptTxResult {
74
68
  export interface SignUnsignedTxParams {
75
69
  signerAddress: string;
76
70
  unsignedTx: string;
77
- submitTx?: boolean;
78
71
  }
79
72
  export interface SignUnsignedTxResult {
80
73
  fromGroup: number;
@@ -97,8 +90,8 @@ export interface SignMessageParams {
97
90
  export interface SignMessageResult {
98
91
  signature: string;
99
92
  }
100
- export interface SignerProvider {
101
- getAccounts(): Promise<Account[]>;
93
+ export interface SignerProviderWithoutNodeProvider {
94
+ getSelectedAccount(): Promise<Account>;
102
95
  signTransferTx(params: SignTransferTxParams): Promise<SignTransferTxResult>;
103
96
  signDeployContractTx(params: SignDeployContractTxParams): Promise<SignDeployContractTxResult>;
104
97
  signExecuteScriptTx(params: SignExecuteScriptTxParams): Promise<SignExecuteScriptTxResult>;
@@ -106,15 +99,14 @@ export interface SignerProvider {
106
99
  signHexString(params: SignHexStringParams): Promise<SignHexStringResult>;
107
100
  signMessage(params: SignMessageParams): Promise<SignMessageResult>;
108
101
  }
109
- export declare abstract class SignerWithNodeProvider implements SignerProvider {
110
- readonly provider: NodeProvider;
111
- alwaysSubmitTx: boolean;
112
- abstract getAccounts(): Promise<Account[]>;
113
- getAccount(signerAddress: string): Promise<Account>;
114
- constructor(provider: NodeProvider, alwaysSubmitTx: boolean);
115
- private defaultSignerAddress;
116
- submitTransaction(unsignedTx: string, txHash: string, signerAddress?: string): Promise<SubmissionResult>;
117
- private shouldSubmitTx;
102
+ export declare abstract class SignerProvider implements SignerProviderWithoutNodeProvider {
103
+ abstract get nodeProvider(): NodeProvider;
104
+ abstract getSelectedAccount(): Promise<Account>;
105
+ submitTransaction(unsignedTx: string, signature: string): Promise<SubmissionResult>;
106
+ signAndSubmitTransferTx(params: SignTransferTxParams): Promise<SubmissionResult>;
107
+ signAndSubmitDeployContractTx(params: SignDeployContractTxParams): Promise<SubmissionResult>;
108
+ signAndSubmitExecuteScriptTx(params: SignExecuteScriptTxParams): Promise<SubmissionResult>;
109
+ signAndSubmitUnsignedTx(params: SignUnsignedTxParams): Promise<SubmissionResult>;
118
110
  private usePublicKey;
119
111
  signTransferTx(params: SignTransferTxParams): Promise<SignTransferTxResult>;
120
112
  buildTransferTx(params: SignTransferTxParams): Promise<node.BuildTransactionResult>;
@@ -129,11 +121,16 @@ export declare abstract class SignerWithNodeProvider implements SignerProvider {
129
121
  signerAddress: string;
130
122
  unsignedTx: string;
131
123
  txId: string;
132
- }, submitTx: boolean): Promise<SignResult>;
124
+ }): Promise<SignResult>;
133
125
  signHexString(params: SignHexStringParams): Promise<SignHexStringResult>;
134
126
  signMessage(params: SignMessageParams): Promise<SignMessageResult>;
135
127
  abstract signRaw(signerAddress: string, hexString: string): Promise<string>;
136
128
  }
129
+ export declare abstract class SignerProviderWithMultipleAccounts extends SignerProvider {
130
+ abstract getAccounts(): Promise<Account[]>;
131
+ getAccount(signerAddress: string): Promise<Account>;
132
+ abstract setSelectedAccount(address: string): Promise<void>;
133
+ }
137
134
  export interface SubmissionResult {
138
135
  txId: string;
139
136
  fromGroup: number;
@@ -141,3 +138,13 @@ export interface SubmissionResult {
141
138
  }
142
139
  export declare function verifyHexString(hexString: string, publicKey: string, signature: string): boolean;
143
140
  export declare function verifySignedMessage(message: string, publicKey: string, signature: string): boolean;
141
+ export interface Destination {
142
+ address: string;
143
+ attoAlphAmount: Number256;
144
+ tokens?: Token[];
145
+ lockTime?: number;
146
+ message?: string;
147
+ }
148
+ export declare function toApiDestination(data: Destination): node.Destination;
149
+ export declare function toApiDestinations(data: Destination[]): node.Destination[];
150
+ export declare function fromApiDestination(data: node.Destination): Destination;
@@ -18,7 +18,11 @@ along with the library. If not, see <http://www.gnu.org/licenses/>.
18
18
  */
19
19
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
20
  if (k2 === undefined) k2 = k;
21
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
22
26
  }) : (function(o, m, k, k2) {
23
27
  if (k2 === undefined) k2 = k;
24
28
  o[k2] = m[k];
@@ -39,8 +43,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
39
43
  return (mod && mod.__esModule) ? mod : { "default": mod };
40
44
  };
41
45
  Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.verifySignedMessage = exports.verifyHexString = exports.SignerWithNodeProvider = void 0;
46
+ exports.fromApiDestination = exports.toApiDestinations = exports.toApiDestination = exports.verifySignedMessage = exports.verifyHexString = exports.SignerProviderWithMultipleAccounts = exports.SignerProvider = void 0;
43
47
  const elliptic_1 = require("elliptic");
48
+ const api_1 = require("../api");
44
49
  const utils = __importStar(require("../utils"));
45
50
  const utils_1 = require("../utils");
46
51
  const blakejs_1 = __importDefault(require("blakejs"));
@@ -57,91 +62,92 @@ const ec = new elliptic_1.ec('secp256k1');
57
62
  (0, utils_1.assertType)();
58
63
  (0, utils_1.assertType)();
59
64
  (0, utils_1.assertType)();
60
- class SignerWithNodeProvider {
61
- constructor(provider, alwaysSubmitTx) {
62
- this.provider = provider;
63
- this.alwaysSubmitTx = alwaysSubmitTx;
65
+ class SignerProvider {
66
+ async submitTransaction(unsignedTx, signature) {
67
+ const params = { unsignedTx: unsignedTx, signature: signature };
68
+ return this.nodeProvider.transactions.postTransactionsSubmit(params);
64
69
  }
65
- async getAccount(signerAddress) {
66
- const accounts = await this.getAccounts();
67
- const account = accounts.find((a) => a.address === signerAddress);
68
- if (typeof account === 'undefined') {
69
- throw new Error('Unmatched signerAddress');
70
- }
71
- else {
72
- return account;
73
- }
70
+ async signAndSubmitTransferTx(params) {
71
+ const signResult = await this.signTransferTx(params);
72
+ return this.submitTransaction(signResult.unsignedTx, signResult.signature);
74
73
  }
75
- async defaultSignerAddress() {
76
- return (await this.getAccounts())[0].address;
74
+ async signAndSubmitDeployContractTx(params) {
75
+ const signResult = await this.signDeployContractTx(params);
76
+ return this.submitTransaction(signResult.unsignedTx, signResult.signature);
77
77
  }
78
- async submitTransaction(unsignedTx, txHash, signerAddress) {
79
- const address = typeof signerAddress !== 'undefined' ? signerAddress : await this.defaultSignerAddress();
80
- const signature = await this.signRaw(address, txHash);
81
- const params = { unsignedTx: unsignedTx, signature: signature };
82
- return this.provider.transactions.postTransactionsSubmit(params);
78
+ async signAndSubmitExecuteScriptTx(params) {
79
+ const signResult = await this.signExecuteScriptTx(params);
80
+ return this.submitTransaction(signResult.unsignedTx, signResult.signature);
83
81
  }
84
- shouldSubmitTx(params) {
85
- return this.alwaysSubmitTx || (params.submitTx ? params.submitTx : true);
82
+ async signAndSubmitUnsignedTx(params) {
83
+ const signResult = await this.signUnsignedTx(params);
84
+ return this.submitTransaction(signResult.unsignedTx, signResult.signature);
86
85
  }
87
86
  async usePublicKey(params) {
88
87
  const { signerAddress, ...restParams } = params;
89
- const allAccounts = await this.getAccounts();
90
- const signerAccount = allAccounts.find((account) => account.address === signerAddress);
91
- if (typeof signerAccount === 'undefined') {
92
- throw new Error('Unknown signer address');
88
+ const selectedAccount = await this.getSelectedAccount();
89
+ if (signerAddress !== selectedAccount.address) {
90
+ throw new Error('The signer address is not the selected address');
93
91
  }
94
92
  else {
95
- return { fromPublicKey: signerAccount.publicKey, ...restParams };
93
+ return { fromPublicKey: selectedAccount.publicKey, ...restParams };
96
94
  }
97
95
  }
98
96
  async signTransferTx(params) {
99
97
  const response = await this.buildTransferTx(params);
100
- return this.handleSign({ signerAddress: params.signerAddress, ...response }, this.shouldSubmitTx(params));
98
+ return this.handleSign({ signerAddress: params.signerAddress, ...response });
101
99
  }
102
100
  async buildTransferTx(params) {
103
- return this.provider.transactions.postTransactionsBuild(await this.usePublicKey(params));
101
+ const data = {
102
+ ...(await this.usePublicKey(params)),
103
+ destinations: toApiDestinations(params.destinations),
104
+ gasPrice: (0, api_1.toApiNumber256Optional)(params.gasPrice)
105
+ };
106
+ return this.nodeProvider.transactions.postTransactionsBuild(data);
104
107
  }
105
108
  async signDeployContractTx(params) {
106
109
  const response = await this.buildContractCreationTx(params);
107
- const result = await this.handleSign({ signerAddress: params.signerAddress, ...response }, this.shouldSubmitTx(params));
110
+ const result = await this.handleSign({ signerAddress: params.signerAddress, ...response });
108
111
  const contractId = utils.binToHex(utils.contractIdFromAddress(response.contractAddress));
109
112
  return { ...result, contractId: contractId, contractAddress: response.contractAddress };
110
113
  }
111
114
  async buildContractCreationTx(params) {
112
- return this.provider.contracts.postContractsUnsignedTxDeployContract(await this.usePublicKey(params));
115
+ const data = {
116
+ ...(await this.usePublicKey(params)),
117
+ initialAttoAlphAmount: (0, api_1.toApiNumber256Optional)(params.initialAttoAlphAmount),
118
+ initialTokenAmounts: (0, api_1.toApiTokens)(params.initialTokenAmounts),
119
+ issueTokenAmount: (0, api_1.toApiNumber256Optional)(params.issueTokenAmount),
120
+ gasPrice: (0, api_1.toApiNumber256Optional)(params.gasPrice)
121
+ };
122
+ return this.nodeProvider.contracts.postContractsUnsignedTxDeployContract(data);
113
123
  }
114
124
  async signExecuteScriptTx(params) {
115
125
  const response = await this.buildScriptTx(params);
116
- return this.handleSign({ signerAddress: params.signerAddress, ...response }, this.shouldSubmitTx(params));
126
+ return this.handleSign({ signerAddress: params.signerAddress, ...response });
117
127
  }
118
128
  async buildScriptTx(params) {
119
- return this.provider.contracts.postContractsUnsignedTxExecuteScript(await this.usePublicKey(params));
129
+ const data = {
130
+ ...(await this.usePublicKey(params)),
131
+ tokens: (0, api_1.toApiTokens)(params.tokens)
132
+ };
133
+ return this.nodeProvider.contracts.postContractsUnsignedTxExecuteScript(data);
120
134
  }
121
135
  // in general, wallet should show the decoded information to user for confirmation
122
136
  // please overwrite this function for real wallet
123
137
  async signUnsignedTx(params) {
124
138
  const data = { unsignedTx: params.unsignedTx };
125
- const decoded = await this.provider.transactions.postTransactionsDecodeUnsignedTx(data);
139
+ const decoded = await this.nodeProvider.transactions.postTransactionsDecodeUnsignedTx(data);
126
140
  return this.handleSign({
127
141
  fromGroup: decoded.fromGroup,
128
142
  toGroup: decoded.toGroup,
129
143
  signerAddress: params.signerAddress,
130
144
  unsignedTx: params.unsignedTx,
131
145
  txId: decoded.unsignedTx.txId
132
- }, params.submitTx ? params.submitTx : true // we don't consider `alwaysSubmitTx` as the tx might needs multiple signatures
133
- );
146
+ });
134
147
  }
135
- async handleSign(response, submitTx) {
148
+ async handleSign(response) {
136
149
  // sign the tx
137
150
  const signature = await this.signRaw(response.signerAddress, response.txId);
138
- // submit the tx if required
139
- if (submitTx) {
140
- await this.provider.transactions.postTransactionsSubmit({
141
- unsignedTx: response.unsignedTx,
142
- signature: signature
143
- });
144
- }
145
151
  // return the signature back to the provider
146
152
  return {
147
153
  fromGroup: response.fromGroup,
@@ -162,7 +168,20 @@ class SignerWithNodeProvider {
162
168
  return { signature: signature };
163
169
  }
164
170
  }
165
- exports.SignerWithNodeProvider = SignerWithNodeProvider;
171
+ exports.SignerProvider = SignerProvider;
172
+ class SignerProviderWithMultipleAccounts extends SignerProvider {
173
+ async getAccount(signerAddress) {
174
+ const accounts = await this.getAccounts();
175
+ const account = accounts.find((a) => a.address === signerAddress);
176
+ if (typeof account === 'undefined') {
177
+ throw new Error('Unmatched signerAddress');
178
+ }
179
+ else {
180
+ return account;
181
+ }
182
+ }
183
+ }
184
+ exports.SignerProviderWithMultipleAccounts = SignerProviderWithMultipleAccounts;
166
185
  function verifyHexString(hexString, publicKey, signature) {
167
186
  try {
168
187
  const key = ec.keyFromPublic(publicKey, 'hex');
@@ -182,3 +201,16 @@ function verifySignedMessage(message, publicKey, signature) {
182
201
  return verifyHexString(utils.binToHex(messageHash), publicKey, signature);
183
202
  }
184
203
  exports.verifySignedMessage = verifySignedMessage;
204
+ utils_1.assertType;
205
+ function toApiDestination(data) {
206
+ return { ...data, attoAlphAmount: (0, api_1.toApiNumber256)(data.attoAlphAmount), tokens: (0, api_1.toApiTokens)(data.tokens) };
207
+ }
208
+ exports.toApiDestination = toApiDestination;
209
+ function toApiDestinations(data) {
210
+ return data.map(toApiDestination);
211
+ }
212
+ exports.toApiDestinations = toApiDestinations;
213
+ function fromApiDestination(data) {
214
+ return { ...data, attoAlphAmount: (0, api_1.fromApiNumber256)(data.attoAlphAmount), tokens: (0, api_1.fromApiTokens)(data.tokens) };
215
+ }
216
+ exports.fromApiDestination = fromApiDestination;
@@ -1,2 +1 @@
1
- export * from './sign-verify';
2
1
  export * from './status';
@@ -18,7 +18,11 @@ along with the library. If not, see <http://www.gnu.org/licenses/>.
18
18
  */
19
19
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
20
  if (k2 === undefined) k2 = k;
21
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
22
26
  }) : (function(o, m, k, k2) {
23
27
  if (k2 === undefined) k2 = k;
24
28
  o[k2] = m[k];
@@ -27,5 +31,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
27
31
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
28
32
  };
29
33
  Object.defineProperty(exports, "__esModule", { value: true });
30
- __exportStar(require("./sign-verify"), exports);
31
34
  __exportStar(require("./status"), exports);
@@ -1,5 +1,6 @@
1
- import { TxStatus } from '../api/api-alephium';
1
+ import { node } from '../api';
2
2
  import { Subscription, SubscribeOptions } from '../utils';
3
+ export declare type TxStatus = node.TxStatus;
3
4
  export declare class TxStatusSubscription extends Subscription<TxStatus> {
4
5
  readonly txId: string;
5
6
  readonly fromGroup?: number;
@@ -18,6 +18,7 @@ along with the library. If not, see <http://www.gnu.org/licenses/>.
18
18
  */
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
20
  exports.subscribeToTxStatus = exports.TxStatusSubscription = void 0;
21
+ const __1 = require("..");
21
22
  const utils_1 = require("../utils");
22
23
  class TxStatusSubscription extends utils_1.Subscription {
23
24
  constructor(options, txId, fromGroup, toGroup) {
@@ -29,7 +30,7 @@ class TxStatusSubscription extends utils_1.Subscription {
29
30
  }
30
31
  async polling() {
31
32
  try {
32
- const txStatus = await this.provider.transactions.getTransactionsStatus({
33
+ const txStatus = await __1.web3.getCurrentNodeProvider().transactions.getTransactionsStatus({
33
34
  txId: this.txId,
34
35
  fromGroup: this.fromGroup,
35
36
  toGroup: this.toGroup
@@ -1,4 +1,5 @@
1
1
  /** This source is under MIT License and come originally from https://github.com/cryptocoinjs/bs58 **/
2
2
  import basex from 'base-x';
3
3
  export declare const bs58: basex.BaseConverter;
4
+ export declare function isBase58(s: string): boolean;
4
5
  export default bs58;
@@ -20,9 +20,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
20
20
  return (mod && mod.__esModule) ? mod : { "default": mod };
21
21
  };
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
- exports.bs58 = void 0;
23
+ exports.isBase58 = exports.bs58 = void 0;
24
24
  /** This source is under MIT License and come originally from https://github.com/cryptocoinjs/bs58 **/
25
25
  const base_x_1 = __importDefault(require("base-x"));
26
26
  const ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
27
27
  exports.bs58 = (0, base_x_1.default)(ALPHABET);
28
+ function isBase58(s) {
29
+ if (s === '' || s.trim() === '') {
30
+ return false;
31
+ }
32
+ try {
33
+ return exports.bs58.encode(exports.bs58.decode(s)) === s;
34
+ }
35
+ catch (err) {
36
+ return false;
37
+ }
38
+ }
39
+ exports.isBase58 = isBase58;
28
40
  exports.default = exports.bs58;
@@ -1,6 +1,5 @@
1
1
  export * from './address';
2
2
  export * from './bs58';
3
3
  export * from './djb2';
4
- export * from './password-crypto';
5
4
  export * from './utils';
6
5
  export * from './subscription';