carbon-js-sdk 0.10.4 → 0.10.6-beta.1

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.
@@ -65,12 +65,18 @@ class KeplrAccount {
65
65
  throw (error_1.parseEvmError(error));
66
66
  }
67
67
  });
68
+ const signMessage = (address, message) => __awaiter(this, void 0, void 0, function* () {
69
+ const chainId = chainInfo.chainId;
70
+ const { signature } = yield keplr.signArbitrary(chainId, address, message);
71
+ return Buffer.from(signature, 'base64').toString('hex');
72
+ });
68
73
  return {
69
74
  type: wallet_1.CarbonSignerTypes.BrowserInjected,
70
75
  signDirect,
71
76
  signAmino,
72
77
  getAccounts,
73
78
  sendEvmTransaction,
79
+ signMessage,
74
80
  };
75
81
  }
76
82
  static createKeplrSignerAmino(keplr, chainInfo, account) {
@@ -105,11 +111,17 @@ class KeplrAccount {
105
111
  throw (error_1.parseEvmError(error));
106
112
  }
107
113
  });
114
+ const signMessage = (address, message) => __awaiter(this, void 0, void 0, function* () {
115
+ const chainId = chainInfo.chainId;
116
+ const { signature } = yield keplr.signArbitrary(chainId, address, message);
117
+ return Buffer.from(signature, 'base64').toString('hex');
118
+ });
108
119
  return {
109
120
  type: wallet_1.CarbonSignerTypes.BrowserInjected,
110
121
  signAmino,
111
122
  getAccounts,
112
123
  sendEvmTransaction,
124
+ signMessage,
113
125
  };
114
126
  }
115
127
  static queryFeeCurrencies(configProvider) {
@@ -1,5 +1,5 @@
1
1
  import { CarbonSigner } from "../../wallet";
2
- import { Leap } from "@cosmos-kit/leap";
2
+ import { Leap } from "@cosmos-kit/leap-extension";
3
3
  import { AppCurrency, ChainInfo, FeeCurrency } from "@keplr-wallet/types";
4
4
  import SDKProvider from "../sdk";
5
5
  declare class LeapAccount {
@@ -47,12 +47,17 @@ class LeapAccount {
47
47
  const sendEvmTransaction = (api, req) => __awaiter(this, void 0, void 0, function* () {
48
48
  throw new Error("signing not available");
49
49
  });
50
+ const signMessage = (address, message) => __awaiter(this, void 0, void 0, function* () {
51
+ const { signature } = yield leap.signArbitrary(chainId, address, message);
52
+ return Buffer.from(signature, 'base64').toString('hex');
53
+ });
50
54
  return {
51
55
  type: wallet_1.CarbonSignerTypes.BrowserInjected,
52
56
  signDirect,
53
57
  signAmino,
54
58
  getAccounts,
55
59
  sendEvmTransaction,
60
+ signMessage,
56
61
  };
57
62
  }
58
63
  static createLeapSignerAmino(leap, chainId) {
@@ -75,11 +80,16 @@ class LeapAccount {
75
80
  const sendEvmTransaction = (api, req) => __awaiter(this, void 0, void 0, function* () {
76
81
  throw new Error("signing not available");
77
82
  });
83
+ const signMessage = (address, message) => __awaiter(this, void 0, void 0, function* () {
84
+ const { signature } = yield leap.signArbitrary(chainId, address, message);
85
+ return Buffer.from(signature, 'base64').toString('hex');
86
+ });
78
87
  return {
79
88
  type: wallet_1.CarbonSignerTypes.BrowserInjected,
80
89
  signAmino,
81
90
  getAccounts,
82
91
  sendEvmTransaction,
92
+ signMessage,
83
93
  };
84
94
  }
85
95
  static getChainId(configProvider) {
@@ -1,3 +1,3 @@
1
1
  export { default, LeapExtended } from "./LeapAccount";
2
2
  export { Key } from "@cosmos-kit/core";
3
- export { Leap } from "@cosmos-kit/leap";
3
+ export { Leap } from "@cosmos-kit/leap-extension";
@@ -361,6 +361,9 @@ class MetaMask {
361
361
  throw (error_1.parseEvmError(error, index_1.ProviderAgent.MetamaskExtension));
362
362
  }
363
363
  });
364
+ const signMessage = (address, message) => __awaiter(this, void 0, void 0, function* () {
365
+ return metamask.personalSign(address, message);
366
+ });
364
367
  return {
365
368
  type: wallet_1.CarbonSignerTypes.BrowserInjected,
366
369
  legacyEip712SignMode: metamask.legacyEip712SignMode,
@@ -369,6 +372,7 @@ class MetaMask {
369
372
  getAccounts,
370
373
  signLegacyEip712,
371
374
  sendEvmTransaction,
375
+ signMessage,
372
376
  };
373
377
  }
374
378
  static getNetworkParams(network, blockchain = 'Ethereum') {
@@ -80,6 +80,9 @@ class O3Wallet {
80
80
  sendEvmTransaction: () => __awaiter(this, void 0, void 0, function* () {
81
81
  throw new Error("signing not available");
82
82
  }),
83
+ signMessage() {
84
+ throw new Error("signing not available");
85
+ },
83
86
  };
84
87
  }
85
88
  connectWallet() {
@@ -14,3 +14,4 @@ export * as CarbonTx from "./tx";
14
14
  export * as TypeUtils from "./type";
15
15
  export * as GrantUtils from "./grant";
16
16
  export * as AllianceUtils from "./alliance";
17
+ export * as MessageUtils from "./message";
package/lib/util/index.js CHANGED
@@ -19,7 +19,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
19
19
  return result;
20
20
  };
21
21
  Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.AllianceUtils = exports.GrantUtils = exports.TypeUtils = exports.CarbonTx = exports.TransferUtils = exports.TokenUtils = exports.NumberUtils = exports.NetworkUtils = exports.IBCUtils = exports.GovUtils = exports.GenericUtils = exports.FetchUtils = exports.ExternalUtils = exports.BlockchainUtils = exports.APIUtils = exports.AddressUtils = void 0;
22
+ exports.MessageUtils = exports.AllianceUtils = exports.GrantUtils = exports.TypeUtils = exports.CarbonTx = exports.TransferUtils = exports.TokenUtils = exports.NumberUtils = exports.NetworkUtils = exports.IBCUtils = exports.GovUtils = exports.GenericUtils = exports.FetchUtils = exports.ExternalUtils = exports.BlockchainUtils = exports.APIUtils = exports.AddressUtils = void 0;
23
23
  exports.AddressUtils = __importStar(require("./address"));
24
24
  exports.APIUtils = __importStar(require("./api"));
25
25
  exports.BlockchainUtils = __importStar(require("./blockchain"));
@@ -36,3 +36,4 @@ exports.CarbonTx = __importStar(require("./tx"));
36
36
  exports.TypeUtils = __importStar(require("./type"));
37
37
  exports.GrantUtils = __importStar(require("./grant"));
38
38
  exports.AllianceUtils = __importStar(require("./alliance"));
39
+ exports.MessageUtils = __importStar(require("./message"));
@@ -0,0 +1,2 @@
1
+ import { StdSignDoc } from "@cosmjs/amino";
2
+ export declare const constructAdr36SignDoc: (address: string, message: string) => StdSignDoc;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.constructAdr36SignDoc = void 0;
4
+ const constructAdr36SignDoc = (address, message) => {
5
+ const msgSignData = { signer: address, data: Buffer.from(message).toString('base64') };
6
+ const msgs = [{ type: 'sign/MsgSignData', value: msgSignData }];
7
+ const fee = {
8
+ gas: '0',
9
+ amount: [],
10
+ };
11
+ const signDoc = {
12
+ chain_id: '',
13
+ account_number: '0',
14
+ sequence: '0',
15
+ fee,
16
+ msgs,
17
+ memo: '',
18
+ };
19
+ return signDoc;
20
+ };
21
+ exports.constructAdr36SignDoc = constructAdr36SignDoc;
@@ -14,16 +14,19 @@ export declare enum CarbonSignerTypes {
14
14
  export interface EvmSigner {
15
15
  readonly sendEvmTransaction: (api: CarbonSDK, req: ethers.providers.TransactionRequest) => Promise<string>;
16
16
  }
17
+ export interface ArbitraryMessageSigner {
18
+ readonly signMessage: (address: string, message: string) => Promise<string>;
19
+ }
17
20
  export interface EIP712Signer extends EvmSigner {
18
21
  legacyEip712SignMode: boolean;
19
22
  readonly signLegacyEip712: (signerAddress: string, signDoc: StdSignDoc) => Promise<LegacyEIP712AminoSignResponse>;
20
23
  }
21
24
  export declare type CarbonSigner = DirectCarbonSigner | AminoCarbonSigner | CarbonEIP712Signer;
22
- export declare type CarbonEIP712Signer = (DirectCarbonSigner | AminoCarbonSigner) & EIP712Signer;
23
- export declare type DirectCarbonSigner = OfflineDirectSigner & EvmSigner & {
25
+ export declare type CarbonEIP712Signer = (DirectCarbonSigner | AminoCarbonSigner) & EIP712Signer & ArbitraryMessageSigner;
26
+ export declare type DirectCarbonSigner = OfflineDirectSigner & EvmSigner & ArbitraryMessageSigner & {
24
27
  type: CarbonSignerTypes;
25
28
  };
26
- export declare type AminoCarbonSigner = OfflineAminoSigner & EvmSigner & {
29
+ export declare type AminoCarbonSigner = OfflineAminoSigner & EvmSigner & ArbitraryMessageSigner & {
27
30
  type: CarbonSignerTypes;
28
31
  };
29
32
  export declare type LegacyEIP712AminoSignResponse = AminoSignResponse & {
@@ -43,12 +46,14 @@ export declare class CarbonPrivateKeySigner implements DirectCarbonSigner, Amino
43
46
  signAmino(signerAddress: string, signDoc: StdSignDoc): Promise<AminoSignResponse>;
44
47
  signDirect(signerAddress: string, signDoc: SignDoc): Promise<DirectSignResponse>;
45
48
  sendEvmTransaction(api: CarbonSDK, req: ethers.providers.TransactionRequest): Promise<string>;
49
+ signMessage(address: string, message: string): Promise<string>;
46
50
  }
47
51
  export declare class CarbonNonSigner implements DirectCarbonSigner {
48
52
  type: CarbonSignerTypes;
49
53
  getAccounts(): Promise<readonly AccountData[]>;
50
54
  signDirect(): Promise<DirectSignResponse>;
51
55
  sendEvmTransaction(api: CarbonSDK, req: ethers.providers.TransactionRequest): Promise<string>;
56
+ signMessage(address: string, message: string): Promise<string>;
52
57
  }
53
58
  export declare class CarbonLedgerSigner implements AminoCarbonSigner {
54
59
  readonly ledger: CosmosLedger;
@@ -58,5 +63,6 @@ export declare class CarbonLedgerSigner implements AminoCarbonSigner {
58
63
  getAccounts(): Promise<readonly AccountData[]>;
59
64
  signAmino(_: string, doc: StdSignDoc): Promise<AminoSignResponse>;
60
65
  sendEvmTransaction(api: CarbonSDK, req: ethers.providers.TransactionRequest): Promise<string>;
66
+ signMessage(_: string, message: string): Promise<string>;
61
67
  constructor(ledger: CosmosLedger);
62
68
  }
@@ -11,6 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.CarbonLedgerSigner = exports.CarbonNonSigner = exports.CarbonPrivateKeySigner = exports.isCarbonEIP712Signer = exports.CarbonSignerTypes = void 0;
13
13
  const generic_1 = require("../util/generic");
14
+ const message_1 = require("../util/message");
14
15
  const amino_1 = require("@cosmjs/amino");
15
16
  const proto_signing_1 = require("@cosmjs/proto-signing");
16
17
  var CarbonSignerTypes;
@@ -67,6 +68,13 @@ class CarbonPrivateKeySigner {
67
68
  throw new Error("signing not available");
68
69
  });
69
70
  }
71
+ signMessage(address, message) {
72
+ return __awaiter(this, void 0, void 0, function* () {
73
+ const aminoWallet = yield this.initAminoWallet();
74
+ const signedDoc = yield aminoWallet.signAmino(address, message_1.constructAdr36SignDoc(address, message));
75
+ return Buffer.from(signedDoc.signature.signature, 'base64').toString('hex');
76
+ });
77
+ }
70
78
  }
71
79
  exports.CarbonPrivateKeySigner = CarbonPrivateKeySigner;
72
80
  class CarbonNonSigner {
@@ -88,6 +96,11 @@ class CarbonNonSigner {
88
96
  throw new Error("signing not available");
89
97
  });
90
98
  }
99
+ signMessage(address, message) {
100
+ return __awaiter(this, void 0, void 0, function* () {
101
+ throw new Error("signing not available");
102
+ });
103
+ }
91
104
  }
92
105
  exports.CarbonNonSigner = CarbonNonSigner;
93
106
  // Uses amino because ledger does not work with protobuf yet
@@ -134,5 +147,15 @@ class CarbonLedgerSigner {
134
147
  throw new Error("signing not available");
135
148
  });
136
149
  }
150
+ signMessage(_, message) {
151
+ return __awaiter(this, void 0, void 0, function* () {
152
+ const account = yield this.retrieveAccount();
153
+ const { pubkey, address } = account;
154
+ const doc = JSON.stringify(message_1.constructAdr36SignDoc(address, message));
155
+ const signBytes = yield this.ledger.sign(doc);
156
+ const { signature } = amino_1.encodeSecp256k1Signature(pubkey, signBytes);
157
+ return Buffer.from(signature, 'base64').toString('hex');
158
+ });
159
+ }
137
160
  }
138
161
  exports.CarbonLedgerSigner = CarbonLedgerSigner;
@@ -15,7 +15,7 @@ import { Account, DeliverTxResponse } from "@cosmjs/stargate";
15
15
  import { Tendermint37Client } from "@cosmjs/tendermint-rpc";
16
16
  import { BroadcastTxAsyncResponse, BroadcastTxSyncResponse, TxResponse } from "@cosmjs/tendermint-rpc/build/tendermint37/responses";
17
17
  import { Key as LeapKey } from "@cosmos-kit/core";
18
- import { Leap } from "@cosmos-kit/leap";
18
+ import { Leap } from "@cosmos-kit/leap-extension";
19
19
  import { Key } from "@keplr-wallet/types";
20
20
  import { TxRaw as StargateTxRaw } from "cosmjs-types/cosmos/tx/v1beta1/tx";
21
21
  import { CarbonSigner, CarbonSignerTypes } from "./CarbonSigner";
@@ -189,6 +189,7 @@ export declare class CarbonWallet {
189
189
  getSmartWalletPrivateKey(blockchain?: SmartWalletBlockchain): Buffer | null;
190
190
  reconnectTmClient(fallbackConfig: OverrideConfig | null): Promise<void>;
191
191
  private reloadAccountInfo;
192
+ private delay;
192
193
  private getAccount;
193
194
  reloadAccountSequence(): Promise<void>;
194
195
  reloadMergeAccountStatus(): Promise<void>;
@@ -646,24 +646,34 @@ class CarbonWallet {
646
646
  return (_a = bech32Acc !== null && bech32Acc !== void 0 ? bech32Acc : evmBech32Acc) !== null && _a !== void 0 ? _a : undefined;
647
647
  });
648
648
  }
649
- getAccount(queryAddress) {
649
+ delay(ms) {
650
+ return new Promise(resolve => setTimeout(resolve, ms));
651
+ }
652
+ getAccount(queryAddress, retryCount = 0) {
650
653
  return __awaiter(this, void 0, void 0, function* () {
651
654
  try {
652
- const account = (yield this.getQueryClient().auth.Account({ address: queryAddress })).account;
653
- if (!account)
654
- return;
655
- const { accountNumber, sequence, address } = auth_1.BaseAccount.decode(account.value);
656
- return {
657
- address,
658
- accountNumber: accountNumber.toNumber(),
659
- sequence: sequence.toNumber(),
660
- };
655
+ const result = yield this.getQueryClient().auth.Account({ address: queryAddress });
656
+ if (result === null || result === void 0 ? void 0 : result.account) {
657
+ const { accountNumber, sequence, address } = auth_1.BaseAccount.decode(result.account.value);
658
+ return {
659
+ address,
660
+ pubkey: null,
661
+ accountNumber: accountNumber.toNumber(),
662
+ sequence: sequence.toNumber(),
663
+ };
664
+ }
661
665
  }
662
666
  catch (error) {
663
667
  if (!this.isAccountNotFoundError(error, queryAddress))
664
668
  throw error;
665
669
  }
666
- return;
670
+ // when grant is just created, querying grantee account info immediately may fail maybe due to backend caching
671
+ // retry query after 1s to buffer for backend to catch up
672
+ if (retryCount < 1) {
673
+ yield this.delay(1000);
674
+ return this.getAccount(queryAddress, retryCount + 1);
675
+ }
676
+ return undefined;
667
677
  });
668
678
  }
669
679
  reloadAccountSequence() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "carbon-js-sdk",
3
- "version": "0.10.4",
3
+ "version": "0.10.6-beta.1",
4
4
  "description": "TypeScript SDK for Carbon blockchain",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -41,7 +41,7 @@
41
41
  "@cityofzion/neon-core-next": "npm:@cityofzion/neon-core@^5.0.0",
42
42
  "@cityofzion/neon-js": "^4.9.0",
43
43
  "@cosmjs/stargate": "~0.31.3",
44
- "@cosmos-kit/leap": "^0.13.14",
44
+ "@cosmos-kit/leap": "^0.15.12",
45
45
  "@improbable-eng/grpc-web": "^0.15.0",
46
46
  "@improbable-eng/grpc-web-node-http-transport": "^0.15.0",
47
47
  "@keplr-wallet/types": "^0.11.64",