@ritbit/v4-client-js 2.5.2 → 2.7.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/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/models.js +19 -3
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/params.js +28 -3
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.js +92 -5
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.rpc.msg.js +7 -1
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/assets/tx.js +19 -3
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.js +1 -1
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/params.js +134 -0
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.js +204 -0
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.rpc.msg.js +57 -0
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/lcd.js +4 -1
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.query.js +3 -2
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.tx.js +4 -2
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/tx.js +1 -1
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/genesis.js +151 -0
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/params.js +134 -0
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.js +248 -0
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.lcd.js +34 -0
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.rpc.Query.js +71 -0
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.js +282 -0
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.rpc.msg.js +63 -0
- package/build/cjs/src/clients/composite-client.js +7 -3
- package/build/cjs/src/clients/constants.js +15 -3
- package/build/cjs/src/clients/lib/accounts.js +44 -5
- package/build/cjs/src/clients/lib/agent-approval-tx.js +83 -0
- package/build/cjs/src/clients/lib/agent-approval.js +119 -0
- package/build/cjs/src/clients/lib/eip712.js +592 -0
- package/build/cjs/src/clients/lib/eth-pubkey.js +68 -0
- package/build/cjs/src/clients/modules/account.js +7 -2
- package/build/cjs/src/clients/modules/composer.js +15 -2
- package/build/cjs/src/clients/modules/eip712-signer.js +189 -0
- package/build/cjs/src/clients/modules/eth-agent-wallet.js +101 -0
- package/build/cjs/src/clients/modules/eth-wallet.js +91 -0
- package/build/cjs/src/clients/modules/local-wallet.js +9 -2
- package/build/cjs/src/clients/modules/post.js +14 -4
- package/build/cjs/src/clients/modules/signer.js +7 -2
- package/build/cjs/src/index.js +38 -2
- package/build/cjs/src/lib/evm-address.js +92 -0
- package/build/cjs/src/lib/trading-key-utils.js +41 -3
- package/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/models.d.ts +15 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/models.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/models.js +19 -3
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/params.d.ts +24 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/params.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/params.js +28 -3
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.d.ts +43 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.js +91 -4
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.rpc.msg.d.ts +4 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.rpc.msg.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.rpc.msg.js +8 -2
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/assets/tx.d.ts +9 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/assets/tx.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/assets/tx.js +19 -3
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.d.ts +14 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.js +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/params.d.ts +116 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/params.d.ts.map +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/params.js +98 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.d.ts +80 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.d.ts.map +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.js +168 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.rpc.msg.d.ts +21 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.rpc.msg.d.ts.map +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.rpc.msg.js +20 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/lcd.d.ts +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/lcd.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/lcd.js +4 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.query.d.ts +4 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.query.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.query.js +3 -2
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.tx.d.ts +2 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.tx.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.tx.js +4 -2
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/tx.d.ts +0 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/tx.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/tx.js +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/genesis.d.ts +79 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/genesis.d.ts.map +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/genesis.js +115 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/params.d.ts +116 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/params.d.ts.map +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/params.js +98 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.d.ts +82 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.d.ts.map +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.js +212 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.lcd.d.ts +11 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.lcd.d.ts.map +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.lcd.js +30 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.rpc.Query.d.ts +29 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.rpc.Query.d.ts.map +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.rpc.Query.js +33 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.d.ts +123 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.d.ts.map +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.js +246 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.rpc.msg.d.ts +36 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.rpc.msg.d.ts.map +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.rpc.msg.js +26 -0
- package/build/esm/src/clients/composite-client.d.ts +6 -1
- package/build/esm/src/clients/composite-client.d.ts.map +1 -1
- package/build/esm/src/clients/composite-client.js +7 -3
- package/build/esm/src/clients/constants.d.ts +13 -1
- package/build/esm/src/clients/constants.d.ts.map +1 -1
- package/build/esm/src/clients/constants.js +13 -1
- package/build/esm/src/clients/lib/accounts.d.ts +4 -3
- package/build/esm/src/clients/lib/accounts.d.ts.map +1 -1
- package/build/esm/src/clients/lib/accounts.js +44 -5
- package/build/esm/src/clients/lib/agent-approval-tx.d.ts +46 -0
- package/build/esm/src/clients/lib/agent-approval-tx.d.ts.map +1 -0
- package/build/esm/src/clients/lib/agent-approval-tx.js +79 -0
- package/build/esm/src/clients/lib/agent-approval.d.ts +64 -0
- package/build/esm/src/clients/lib/agent-approval.d.ts.map +1 -0
- package/build/esm/src/clients/lib/agent-approval.js +112 -0
- package/build/esm/src/clients/lib/eip712.d.ts +95 -0
- package/build/esm/src/clients/lib/eip712.d.ts.map +1 -0
- package/build/esm/src/clients/lib/eip712.js +581 -0
- package/build/esm/src/clients/lib/eth-pubkey.d.ts +44 -0
- package/build/esm/src/clients/lib/eth-pubkey.d.ts.map +1 -0
- package/build/esm/src/clients/lib/eth-pubkey.js +61 -0
- package/build/esm/src/clients/modules/account.d.ts +5 -1
- package/build/esm/src/clients/modules/account.d.ts.map +1 -1
- package/build/esm/src/clients/modules/account.js +7 -2
- package/build/esm/src/clients/modules/composer.d.ts +12 -1
- package/build/esm/src/clients/modules/composer.d.ts.map +1 -1
- package/build/esm/src/clients/modules/composer.js +15 -2
- package/build/esm/src/clients/modules/eip712-signer.d.ts +99 -0
- package/build/esm/src/clients/modules/eip712-signer.d.ts.map +1 -0
- package/build/esm/src/clients/modules/eip712-signer.js +183 -0
- package/build/esm/src/clients/modules/eth-agent-wallet.d.ts +39 -0
- package/build/esm/src/clients/modules/eth-agent-wallet.d.ts.map +1 -0
- package/build/esm/src/clients/modules/eth-agent-wallet.js +97 -0
- package/build/esm/src/clients/modules/eth-wallet.d.ts +32 -0
- package/build/esm/src/clients/modules/eth-wallet.d.ts.map +1 -0
- package/build/esm/src/clients/modules/eth-wallet.js +83 -0
- package/build/esm/src/clients/modules/local-wallet.d.ts +2 -1
- package/build/esm/src/clients/modules/local-wallet.d.ts.map +1 -1
- package/build/esm/src/clients/modules/local-wallet.js +9 -2
- package/build/esm/src/clients/modules/post.d.ts +1 -1
- package/build/esm/src/clients/modules/post.d.ts.map +1 -1
- package/build/esm/src/clients/modules/post.js +14 -4
- package/build/esm/src/clients/modules/signer.d.ts +2 -1
- package/build/esm/src/clients/modules/signer.d.ts.map +1 -1
- package/build/esm/src/clients/modules/signer.js +7 -2
- package/build/esm/src/index.d.ts +13 -0
- package/build/esm/src/index.d.ts.map +1 -1
- package/build/esm/src/index.js +9 -1
- package/build/esm/src/lib/evm-address.d.ts +31 -0
- package/build/esm/src/lib/evm-address.d.ts.map +1 -0
- package/build/esm/src/lib/evm-address.js +85 -0
- package/build/esm/src/lib/trading-key-utils.d.ts +3 -0
- package/build/esm/src/lib/trading-key-utils.d.ts.map +1 -1
- package/build/esm/src/lib/trading-key-utils.js +42 -4
- package/build/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -6,6 +6,7 @@ import { TxBody, TxRaw } from 'cosmjs-types/cosmos/tx/v1beta1/tx';
|
|
|
6
6
|
import { Any } from 'cosmjs-types/google/protobuf/any';
|
|
7
7
|
import Long from 'long';
|
|
8
8
|
import protobuf from 'protobufjs';
|
|
9
|
+
import { ethSecp256k1PubkeyToAny, isEthSecp256k1Pubkey, } from '../lib/eth-pubkey';
|
|
9
10
|
import { generateRegistry } from '../lib/registry';
|
|
10
11
|
// Required for encoding and decoding queries that are of type Long.
|
|
11
12
|
// Must be done once but since the individal modules should be usable
|
|
@@ -57,7 +58,11 @@ export class TransactionSigner {
|
|
|
57
58
|
if (!publicKey) {
|
|
58
59
|
throw new Error('Public key cannot be undefined');
|
|
59
60
|
}
|
|
60
|
-
|
|
61
|
+
// Use the public key of the signer. cosmjs's encodePubkey() only knows the
|
|
62
|
+
// cosmos key types, so the eth pubkey gets its own Any construction.
|
|
63
|
+
const pubkey = isEthSecp256k1Pubkey(publicKey)
|
|
64
|
+
? ethSecp256k1PubkeyToAny(publicKey)
|
|
65
|
+
: encodePubkey(publicKey);
|
|
61
66
|
const gasLimit = Int53.fromString(String(fee.gas)).toNumber();
|
|
62
67
|
const authInfoBytes = makeAuthInfoBytes([{ pubkey, sequence: transactionOptions.sequence }], fee.amount, gasLimit, undefined, undefined);
|
|
63
68
|
// Create the SignDoc.
|
|
@@ -88,4 +93,4 @@ export class TransactionSigner {
|
|
|
88
93
|
}
|
|
89
94
|
}
|
|
90
95
|
}
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudHMvbW9kdWxlcy9zaWduZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDckMsT0FBTyxFQUVMLFlBQVksRUFDWixxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLFdBQVcsR0FFWixNQUFNLHVCQUF1QixDQUFDO0FBRS9CLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNqRixPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RCxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxRQUFRLE1BQU0sWUFBWSxDQUFDO0FBRWxDLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsb0JBQW9CLEdBQ3JCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHbkQsb0VBQW9FO0FBQ3BFLHFFQUFxRTtBQUNyRSx3RUFBd0U7QUFDeEUsa0VBQWtFO0FBQ2xFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQixRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7QUFFckIsTUFBTSxPQUFPLGlCQUFpQjtJQUs1QixZQUNFLE9BQWUsRUFDZixxQkFBNEMsRUFDNUMsYUFBNEI7UUFFNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO1FBQ25ELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUNuQixRQUF3QixFQUN4QixrQkFBc0MsRUFDdEMsR0FBWSxFQUNaLE9BQWUsRUFBRSxFQUNqQixTQUFnRDs7UUFFaEQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXBDLHNCQUFzQjtRQUN0QixNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFekUsaUNBQWlDO1FBQ2pDLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDckMsc0JBQXNCLEVBQUUsTUFBQSxrQkFBa0IsQ0FBQyxjQUFjLG1DQUFJLEVBQUU7U0FDaEUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRVosNENBQTRDO1FBQzVDLE1BQU0sMkJBQTJCLEdBQVU7WUFDekMsR0FBRyxDQUFDLFdBQVcsQ0FBQztnQkFDZCxPQUFPLEVBQUUsaUNBQWlDO2dCQUMxQyxLQUFLLEVBQUUsV0FBVzthQUNuQixDQUFDO1NBQ0gsQ0FBQztRQUVGLHVCQUF1QjtRQUN2QixNQUFNLE1BQU0sR0FBVyxNQUFNLENBQUMsV0FBVyxDQUFDO1lBQ3hDLFFBQVEsRUFBRSxlQUFlO1lBQ3pCLElBQUk7WUFDSixnQkFBZ0IsRUFBRSxFQUFFO1lBQ3BCLDJCQUEyQjtTQUM1QixDQUFDLENBQUM7UUFFSCxvQkFBb0I7UUFDcEIsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUVuRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUNELDJFQUEyRTtRQUMzRSxxRUFBcUU7UUFDckUsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxDQUFDO1lBQzVDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUM7WUFDcEMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1QixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5RCxNQUFNLGFBQWEsR0FBRyxpQkFBaUIsQ0FDckMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUMsRUFDbkQsR0FBRyxDQUFDLE1BQU0sRUFDVixRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsQ0FDVixDQUFDO1FBRUYsc0JBQXNCO1FBQ3RCLDBFQUEwRTtRQUMxRSwyRUFBMkU7UUFDM0Usa0NBQWtDO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FDekIsV0FBVyxFQUNYLGFBQWEsRUFDYixrQkFBa0IsQ0FBQyxPQUFPLEVBQzFCLGtCQUFrQixDQUFDLGFBQXVCLENBQzNDLENBQUM7UUFFRiw0Q0FBNEM7UUFDNUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNuQyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQzlDLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFMUYsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztnQkFDOUIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO2dCQUMzQixhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7Z0JBQ25DLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDOUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sS0FBSyxHQUFVLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FDeEQsSUFBSSxDQUFDLE9BQU8sRUFDWixRQUFRLEVBQ1IsR0FBRyxFQUNILElBQUksRUFDSjtnQkFDRSxpRUFBaUU7Z0JBQ2pFLG1FQUFtRTtnQkFDbkUsYUFBYSxFQUFFLGtCQUFrQixDQUFDLGFBQXVCO2dCQUN6RCxRQUFRLEVBQUUsa0JBQWtCLENBQUMsUUFBUTtnQkFDckMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLE9BQU87YUFDcEMsQ0FDRixDQUFDO1lBQ0YsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
|
package/build/esm/src/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export * from './types';
|
|
2
|
+
export * as evmAddress from './lib/evm-address';
|
|
2
3
|
export * as helpers from './lib/helpers';
|
|
3
4
|
export * as onboarding from './lib/onboarding';
|
|
4
5
|
export * as tradingKeyUtils from './lib/trading-key-utils';
|
|
@@ -8,6 +9,18 @@ export { CompositeClient } from './clients/composite-client';
|
|
|
8
9
|
export { FaucetClient } from './clients/faucet-client';
|
|
9
10
|
export { IndexerClient } from './clients/indexer-client';
|
|
10
11
|
export { default as LocalWallet } from './clients/modules/local-wallet';
|
|
12
|
+
export { default as EthLocalWallet, DirectEthSecp256k1Signer, ETH_BIP44_HD_PATH, } from './clients/modules/eth-wallet';
|
|
13
|
+
export { encodeEthSecp256k1Pubkey, isEthSecp256k1Pubkey, ethSecp256k1PubkeyToAny, ETH_SECP256K1_PUBKEY_TYPE, ETH_SECP256K1_PUBKEY_TYPE_URL, } from './clients/lib/eth-pubkey';
|
|
14
|
+
export type { EthSecp256k1Pubkey } from './clients/lib/eth-pubkey';
|
|
15
|
+
export { createEip712Domain, eip712Digest, registerEip712AminoConverter, signDocBytesToEip712TypedData, signDocToEip712TypedData, } from './clients/lib/eip712';
|
|
16
|
+
export type { Eip712AminoConverter, Eip712AminoMsg, Eip712Domain, Eip712TypedData, Eip712TypeField, Eip712Types, } from './clients/lib/eip712';
|
|
17
|
+
export { Eip712Signer, recoverPubKeyFromTypedDataSignature, signCosmosTxWithEip712, } from './clients/modules/eip712-signer';
|
|
18
|
+
export type { Eip712SignOptions, SignTypedDataCallback } from './clients/modules/eip712-signer';
|
|
19
|
+
export { AGENT_APPROVAL_DOMAIN_NAME, AGENT_APPROVAL_DOMAIN_VERSION, AGENT_APPROVAL_PRIMARY_TYPE, AGENT_AUTHENTICATOR_TYPE, AGENT_REVOCATION_ADDRESS, agentAddressBytes, agentAddressToHex, agentApprovalDigest, agentApprovalTypedData, } from './clients/lib/agent-approval';
|
|
20
|
+
export type { AgentApproval } from './clients/lib/agent-approval';
|
|
21
|
+
export { composeAgentApprovalMsg, signAgentApprovalTx, } from './clients/lib/agent-approval-tx';
|
|
22
|
+
export type { AgentApprovalTxOptions, SignAgentApprovalCallback, } from './clients/lib/agent-approval-tx';
|
|
23
|
+
export { EthAgentWallet } from './clients/modules/eth-agent-wallet';
|
|
11
24
|
export { NobleClient } from './clients/noble-client';
|
|
12
25
|
export { SocketClient } from './clients/socket-client';
|
|
13
26
|
export { SubaccountInfo as SubaccountClient, SubaccountInfo } from './clients/subaccount';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,eAAe,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,KAAK,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,IAAI,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,eAAe,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,KAAK,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EACL,OAAO,IAAI,cAAc,EACzB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,EACzB,6BAA6B,GAC9B,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,4BAA4B,EAC5B,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,oBAAoB,EACpB,cAAc,EACd,YAAY,EACZ,eAAe,EACf,eAAe,EACf,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,YAAY,EACZ,mCAAmC,EACnC,sBAAsB,GACvB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAChG,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,2BAA2B,EAC3B,wBAAwB,EACxB,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EACL,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EACV,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,IAAI,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC"}
|
package/build/esm/src/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Types.
|
|
2
2
|
export * from './types';
|
|
3
3
|
// Utility functions.
|
|
4
|
+
export * as evmAddress from './lib/evm-address';
|
|
4
5
|
export * as helpers from './lib/helpers';
|
|
5
6
|
export * as onboarding from './lib/onboarding';
|
|
6
7
|
export * as tradingKeyUtils from './lib/trading-key-utils';
|
|
@@ -10,6 +11,13 @@ export { CompositeClient } from './clients/composite-client';
|
|
|
10
11
|
export { FaucetClient } from './clients/faucet-client';
|
|
11
12
|
export { IndexerClient } from './clients/indexer-client';
|
|
12
13
|
export { default as LocalWallet } from './clients/modules/local-wallet';
|
|
14
|
+
export { default as EthLocalWallet, DirectEthSecp256k1Signer, ETH_BIP44_HD_PATH, } from './clients/modules/eth-wallet';
|
|
15
|
+
export { encodeEthSecp256k1Pubkey, isEthSecp256k1Pubkey, ethSecp256k1PubkeyToAny, ETH_SECP256K1_PUBKEY_TYPE, ETH_SECP256K1_PUBKEY_TYPE_URL, } from './clients/lib/eth-pubkey';
|
|
16
|
+
export { createEip712Domain, eip712Digest, registerEip712AminoConverter, signDocBytesToEip712TypedData, signDocToEip712TypedData, } from './clients/lib/eip712';
|
|
17
|
+
export { Eip712Signer, recoverPubKeyFromTypedDataSignature, signCosmosTxWithEip712, } from './clients/modules/eip712-signer';
|
|
18
|
+
export { AGENT_APPROVAL_DOMAIN_NAME, AGENT_APPROVAL_DOMAIN_VERSION, AGENT_APPROVAL_PRIMARY_TYPE, AGENT_AUTHENTICATOR_TYPE, AGENT_REVOCATION_ADDRESS, agentAddressBytes, agentAddressToHex, agentApprovalDigest, agentApprovalTypedData, } from './clients/lib/agent-approval';
|
|
19
|
+
export { composeAgentApprovalMsg, signAgentApprovalTx, } from './clients/lib/agent-approval-tx';
|
|
20
|
+
export { EthAgentWallet } from './clients/modules/eth-agent-wallet';
|
|
13
21
|
export { NobleClient } from './clients/noble-client';
|
|
14
22
|
export { SocketClient } from './clients/socket-client';
|
|
15
23
|
export { SubaccountInfo as SubaccountClient, SubaccountInfo } from './clients/subaccount';
|
|
@@ -19,4 +27,4 @@ export { NetworkOptimizer } from './network_optimizer';
|
|
|
19
27
|
// Dual / multi-asset collateral helpers.
|
|
20
28
|
export * from './clients/helpers/asset-registry';
|
|
21
29
|
export * from './clients/helpers/collateral';
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUztBQUNULGNBQWMsU0FBUyxDQUFDO0FBRXhCLHFCQUFxQjtBQUNyQixPQUFPLEtBQUssVUFBVSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxVQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxLQUFLLGVBQWUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEtBQUssS0FBSyxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEtBQUssVUFBVSxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLElBQUksV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEUsT0FBTyxFQUNMLE9BQU8sSUFBSSxjQUFjLEVBQ3pCLHdCQUF3QixFQUN4QixpQkFBaUIsR0FDbEIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQix1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLDZCQUE2QixHQUM5QixNQUFNLDBCQUEwQixDQUFDO0FBRWxDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLDRCQUE0QixFQUM1Qiw2QkFBNkIsRUFDN0Isd0JBQXdCLEdBQ3pCLE1BQU0sc0JBQXNCLENBQUM7QUFTOUIsT0FBTyxFQUNMLFlBQVksRUFDWixtQ0FBbUMsRUFDbkMsc0JBQXNCLEdBQ3ZCLE1BQU0saUNBQWlDLENBQUM7QUFFekMsT0FBTyxFQUNMLDBCQUEwQixFQUMxQiw2QkFBNkIsRUFDN0IsMkJBQTJCLEVBQzNCLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsc0JBQXNCLEdBQ3ZCLE1BQU0sOEJBQThCLENBQUM7QUFFdEMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixtQkFBbUIsR0FDcEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUt6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxJQUFJLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELHlDQUF5QztBQUN6QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsOEJBQThCLENBQUMifQ==
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Derive the ethereum-style 20-byte address from a secp256k1
|
|
3
|
+
* public key (compressed 33-byte or uncompressed 65-byte form).
|
|
4
|
+
*
|
|
5
|
+
* @returns keccak256(uncompressed pubkey without the 04 prefix)[12:].
|
|
6
|
+
*/
|
|
7
|
+
export declare function ethAddressBytesFromPubkey(pubkey: Uint8Array): Uint8Array;
|
|
8
|
+
/**
|
|
9
|
+
* @description Apply the EIP-55 mixed-case checksum to a hex address.
|
|
10
|
+
*
|
|
11
|
+
* @returns Checksummed address with 0x prefix.
|
|
12
|
+
*/
|
|
13
|
+
export declare function toChecksumEthAddress(ethAddress: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* @description An address is valid if it is 0x + 40 hex characters and, when
|
|
16
|
+
* mixed-case, carries a correct EIP-55 checksum. All-lowercase and
|
|
17
|
+
* all-uppercase addresses are accepted as checksum-less.
|
|
18
|
+
*/
|
|
19
|
+
export declare function isValidEthAddress(address: string): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* @description Convert a 0x address to its bech32 representation (the same 20
|
|
22
|
+
* bytes). Accepts the address with or without the 0x prefix; a mixed-case
|
|
23
|
+
* address must carry a valid EIP-55 checksum.
|
|
24
|
+
*/
|
|
25
|
+
export declare function ethAddressToBech32(ethAddress: string, prefix?: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* @description Convert a bech32 account address to its 0x representation (the
|
|
28
|
+
* same 20 bytes) with EIP-55 checksum casing.
|
|
29
|
+
*/
|
|
30
|
+
export declare function bech32ToEthAddress(address: string): string;
|
|
31
|
+
//# sourceMappingURL=evm-address.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evm-address.d.ts","sourceRoot":"","sources":["../../../../src/lib/evm-address.ts"],"names":[],"mappings":"AAiBA;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAOxE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAW/D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAS1D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,MAAsB,GAAG,MAAM,CAS7F;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ1D"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { fromBech32, fromHex, toBech32, toHex } from '@cosmjs/encoding';
|
|
2
|
+
import { keccak256 } from 'ethereum-cryptography/keccak';
|
|
3
|
+
import { secp256k1 } from 'ethereum-cryptography/secp256k1';
|
|
4
|
+
import { BECH32_PREFIX } from './constants';
|
|
5
|
+
import { stripHexPrefix } from './helpers';
|
|
6
|
+
/**
|
|
7
|
+
* Ethereum-style address helpers for the 0x == rit1 wallet model: an
|
|
8
|
+
* eth_secp256k1 account's address is keccak256(uncompressed pubkey without the
|
|
9
|
+
* 04 prefix)[12:], and the 0x and bech32 representations are the same 20
|
|
10
|
+
* bytes.
|
|
11
|
+
*/
|
|
12
|
+
const ETH_ADDRESS_BYTE_LENGTH = 20;
|
|
13
|
+
const ETH_ADDRESS_REGEX = /^(0x)?[0-9a-fA-F]{40}$/;
|
|
14
|
+
/**
|
|
15
|
+
* @description Derive the ethereum-style 20-byte address from a secp256k1
|
|
16
|
+
* public key (compressed 33-byte or uncompressed 65-byte form).
|
|
17
|
+
*
|
|
18
|
+
* @returns keccak256(uncompressed pubkey without the 04 prefix)[12:].
|
|
19
|
+
*/
|
|
20
|
+
export function ethAddressBytesFromPubkey(pubkey) {
|
|
21
|
+
const uncompressed = pubkey.length === 65 && pubkey[0] === 0x04
|
|
22
|
+
? pubkey
|
|
23
|
+
: secp256k1.ProjectivePoint.fromHex(pubkey).toRawBytes(false);
|
|
24
|
+
// Last 20 bytes of the 32-byte keccak hash.
|
|
25
|
+
return keccak256(uncompressed.slice(1)).slice(-ETH_ADDRESS_BYTE_LENGTH);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* @description Apply the EIP-55 mixed-case checksum to a hex address.
|
|
29
|
+
*
|
|
30
|
+
* @returns Checksummed address with 0x prefix.
|
|
31
|
+
*/
|
|
32
|
+
export function toChecksumEthAddress(ethAddress) {
|
|
33
|
+
const hex = stripHexPrefix(ethAddress).toLowerCase();
|
|
34
|
+
if (!ETH_ADDRESS_REGEX.test(hex)) {
|
|
35
|
+
throw new Error(`Invalid ethereum address: ${ethAddress}`);
|
|
36
|
+
}
|
|
37
|
+
const hash = toHex(keccak256(new Uint8Array(Buffer.from(hex, 'ascii'))));
|
|
38
|
+
let checksummed = '';
|
|
39
|
+
for (let i = 0; i < hex.length; i++) {
|
|
40
|
+
checksummed += parseInt(hash[i], 16) >= 8 ? hex[i].toUpperCase() : hex[i];
|
|
41
|
+
}
|
|
42
|
+
return `0x${checksummed}`;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* @description An address is valid if it is 0x + 40 hex characters and, when
|
|
46
|
+
* mixed-case, carries a correct EIP-55 checksum. All-lowercase and
|
|
47
|
+
* all-uppercase addresses are accepted as checksum-less.
|
|
48
|
+
*/
|
|
49
|
+
export function isValidEthAddress(address) {
|
|
50
|
+
if (!/^0x[0-9a-fA-F]{40}$/.test(address)) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
const hex = address.slice(2);
|
|
54
|
+
if (hex === hex.toLowerCase() || hex === hex.toUpperCase()) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
return address === toChecksumEthAddress(address);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* @description Convert a 0x address to its bech32 representation (the same 20
|
|
61
|
+
* bytes). Accepts the address with or without the 0x prefix; a mixed-case
|
|
62
|
+
* address must carry a valid EIP-55 checksum.
|
|
63
|
+
*/
|
|
64
|
+
export function ethAddressToBech32(ethAddress, prefix = BECH32_PREFIX) {
|
|
65
|
+
const hex = stripHexPrefix(ethAddress);
|
|
66
|
+
if (!ETH_ADDRESS_REGEX.test(hex)) {
|
|
67
|
+
throw new Error(`Invalid ethereum address: ${ethAddress}`);
|
|
68
|
+
}
|
|
69
|
+
if (hex !== hex.toLowerCase() && hex !== hex.toUpperCase() && !isValidEthAddress(`0x${hex}`)) {
|
|
70
|
+
throw new Error(`Invalid EIP-55 checksum in ethereum address: ${ethAddress}`);
|
|
71
|
+
}
|
|
72
|
+
return toBech32(prefix, fromHex(hex.toLowerCase()));
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* @description Convert a bech32 account address to its 0x representation (the
|
|
76
|
+
* same 20 bytes) with EIP-55 checksum casing.
|
|
77
|
+
*/
|
|
78
|
+
export function bech32ToEthAddress(address) {
|
|
79
|
+
const { data } = fromBech32(address);
|
|
80
|
+
if (data.length !== ETH_ADDRESS_BYTE_LENGTH) {
|
|
81
|
+
throw new Error(`Address ${address} decodes to ${data.length} bytes, expected ${ETH_ADDRESS_BYTE_LENGTH}`);
|
|
82
|
+
}
|
|
83
|
+
return toChecksumEthAddress(toHex(data));
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZtLWFkZHJlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2V2bS1hZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUUzQzs7Ozs7R0FLRztBQUVILE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0FBQ25DLE1BQU0saUJBQWlCLEdBQUcsd0JBQXdCLENBQUM7QUFFbkQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQUMsTUFBa0I7SUFDMUQsTUFBTSxZQUFZLEdBQ2hCLE1BQU0sQ0FBQyxNQUFNLEtBQUssRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJO1FBQ3hDLENBQUMsQ0FBQyxNQUFNO1FBQ1IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRSw0Q0FBNEM7SUFDNUMsT0FBTyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsVUFBa0I7SUFDckQsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsRUFB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
|
|
@@ -17,6 +17,9 @@ export declare const getAuthorizedTradingKeysMetadata: (authorizedKeys: Awaited<
|
|
|
17
17
|
id: string;
|
|
18
18
|
publicKey: string;
|
|
19
19
|
address: string;
|
|
20
|
+
name: string;
|
|
21
|
+
/** Unix seconds; 0 when the key never expires. */
|
|
22
|
+
expiresAt: number;
|
|
20
23
|
}>;
|
|
21
24
|
export {};
|
|
22
25
|
//# sourceMappingURL=trading-key-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trading-key-utils.d.ts","sourceRoot":"","sources":["../../../../src/lib/trading-key-utils.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,iBAAiB,
|
|
1
|
+
{"version":3,"file":"trading-key-utils.d.ts","sourceRoot":"","sources":["../../../../src/lib/trading-key-utils.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,iBAAiB,EAOlB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAKlD,eAAO,MAAM,0BAA0B,QAAa,OAAO,CACzD;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAwB5F,CAAC;AAIF,eAAO,MAAM,kCAAkC,GAAI,4BAEhD;IACD,qBAAqB,EAAE,MAAM,CAAC;CAC/B,KAAG;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAoE9C,CAAC;AAGF,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAIrD,eAAO,MAAM,gCAAgC,GAC3C,gBAAgB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,KACrF,KAAK,CAAC;IACP,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;CACnB,CAkDA,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { fromBase64, toBase64, toBech32, toHex } from '@cosmjs/encoding';
|
|
|
2
2
|
import { rawSecp256k1PubkeyToRawAddress } from '@cosmjs/tendermint-rpc';
|
|
3
3
|
import { generateMnemonic } from '@scure/bip39';
|
|
4
4
|
import { wordlist } from '@scure/bip39/wordlists/english';
|
|
5
|
-
import { AuthenticatorType, TYPE_URL_BATCH_CANCEL, TYPE_URL_MSG_CANCEL_ORDER, TYPE_URL_MSG_PLACE_ORDER, } from '../clients/constants';
|
|
5
|
+
import { AuthenticatorType, TYPE_URL_BATCH_CANCEL, TYPE_URL_MSG_CANCEL_ORDER, TYPE_URL_MSG_CREATE_TRANSFER, TYPE_URL_MSG_DEPOSIT_TO_SUBACCOUNT, TYPE_URL_MSG_PLACE_ORDER, TYPE_URL_MSG_WITHDRAW_FROM_SUBACCOUNT, } from '../clients/constants';
|
|
6
6
|
import LocalWallet from '../clients/modules/local-wallet';
|
|
7
7
|
import { BECH32_PREFIX } from './constants';
|
|
8
8
|
import { deriveHDKeyFromMnemonic } from './onboarding';
|
|
@@ -44,6 +44,22 @@ export const getAuthorizeNewTradingKeyArguments = ({ generatedWalletPubKey, }) =
|
|
|
44
44
|
type: AuthenticatorType.MESSAGE_FILTER,
|
|
45
45
|
config: wrapAndEncode64(TYPE_URL_BATCH_CANCEL),
|
|
46
46
|
},
|
|
47
|
+
// Fund movements *within* the account: topping the subaccount up from the
|
|
48
|
+
// wallet, pulling the gas reserve back, moving margin between subaccounts.
|
|
49
|
+
// Safe only because SelfTransferFilter below pins both parties to the owner
|
|
50
|
+
// — on their own these three would let the key send funds to a stranger.
|
|
51
|
+
{
|
|
52
|
+
type: AuthenticatorType.MESSAGE_FILTER,
|
|
53
|
+
config: wrapAndEncode64(TYPE_URL_MSG_DEPOSIT_TO_SUBACCOUNT),
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
type: AuthenticatorType.MESSAGE_FILTER,
|
|
57
|
+
config: wrapAndEncode64(TYPE_URL_MSG_WITHDRAW_FROM_SUBACCOUNT),
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
type: AuthenticatorType.MESSAGE_FILTER,
|
|
61
|
+
config: wrapAndEncode64(TYPE_URL_MSG_CREATE_TRANSFER),
|
|
62
|
+
},
|
|
47
63
|
];
|
|
48
64
|
const anyOfMessageFilterConfigB64 = wrapAndEncode64(JSON.stringify(messageFilterSubAuth));
|
|
49
65
|
const subAuth = [
|
|
@@ -61,6 +77,13 @@ export const getAuthorizeNewTradingKeyArguments = ({ generatedWalletPubKey, }) =
|
|
|
61
77
|
type: AuthenticatorType.SUBACCOUNT_FILTER,
|
|
62
78
|
config: wrapAndEncode64('0'),
|
|
63
79
|
},
|
|
80
|
+
// Money may move inside the account and nowhere else. SubaccountFilter above
|
|
81
|
+
// only inspects the three clob messages, so without this the transfer
|
|
82
|
+
// messages would be unconstrained.
|
|
83
|
+
{
|
|
84
|
+
type: AuthenticatorType.SELF_TRANSFER_FILTER,
|
|
85
|
+
config: '',
|
|
86
|
+
},
|
|
64
87
|
];
|
|
65
88
|
const jsonString = JSON.stringify(subAuth);
|
|
66
89
|
const encodedData = new TextEncoder().encode(jsonString);
|
|
@@ -74,8 +97,8 @@ const isTruthy = (n) => Boolean(n);
|
|
|
74
97
|
// just parses out keys that match the format created in getAuthorizeNewTradingKeyArguments
|
|
75
98
|
export const getAuthorizedTradingKeysMetadata = (authorizedKeys) => {
|
|
76
99
|
return authorizedKeys
|
|
77
|
-
.map(({ config, id, type }) => {
|
|
78
|
-
var _a;
|
|
100
|
+
.map(({ config, id, type, name, expiresAt }) => {
|
|
101
|
+
var _a, _b;
|
|
79
102
|
if (type !== AuthenticatorType.ALL_OF) {
|
|
80
103
|
return null;
|
|
81
104
|
}
|
|
@@ -83,7 +106,20 @@ export const getAuthorizedTradingKeysMetadata = (authorizedKeys) => {
|
|
|
83
106
|
if (parsedConfig == null) {
|
|
84
107
|
return null;
|
|
85
108
|
}
|
|
109
|
+
// Two ways a key can be authorized. A public key is the original form;
|
|
110
|
+
// an address is the agent form, where the key is recovered from each
|
|
111
|
+
// signature instead of being stored (see EthAddressSignatureVerification).
|
|
86
112
|
const publicKey = (_a = parsedConfig.find((t) => t.type === AuthenticatorType.SIGNATURE_VERIFICATION)) === null || _a === void 0 ? void 0 : _a.config;
|
|
113
|
+
const agentAddress = (_b = parsedConfig.find((t) => t.type === AuthenticatorType.ETH_ADDRESS_SIGNATURE_VERIFICATION)) === null || _b === void 0 ? void 0 : _b.config;
|
|
114
|
+
if (typeof agentAddress === 'string') {
|
|
115
|
+
return {
|
|
116
|
+
id: id.toString(),
|
|
117
|
+
publicKey: '',
|
|
118
|
+
address: toBech32(BECH32_PREFIX, fromBase64(agentAddress)),
|
|
119
|
+
name: name !== null && name !== void 0 ? name : '',
|
|
120
|
+
expiresAt: expiresAt == null ? 0 : Number(expiresAt.toString()),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
87
123
|
if (publicKey == null || typeof publicKey !== 'string') {
|
|
88
124
|
return null;
|
|
89
125
|
}
|
|
@@ -92,8 +128,10 @@ export const getAuthorizedTradingKeysMetadata = (authorizedKeys) => {
|
|
|
92
128
|
id: id.toString(),
|
|
93
129
|
publicKey,
|
|
94
130
|
address,
|
|
131
|
+
name: name !== null && name !== void 0 ? name : '',
|
|
132
|
+
expiresAt: expiresAt == null ? 0 : Number(expiresAt.toString()),
|
|
95
133
|
};
|
|
96
134
|
})
|
|
97
135
|
.filter(isTruthy);
|
|
98
136
|
};
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhZGluZy1rZXktdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RyYWRpbmcta2V5LXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTFELE9BQU8sRUFFTCxpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDNUIsa0NBQWtDLEVBQ2xDLHdCQUF3QixFQUN4QixxQ0FBcUMsR0FDdEMsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QixPQUFPLFdBQVcsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxLQUFLLElBRTdDLEVBQUU7SUFDRixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakQsTUFBTSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4RSxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRXZFLE1BQU0sYUFBYSxHQUFHLGFBQWEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLGFBQWEsQ0FB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
|